Hash :
b3cbfd55
Author :
Date :
2021-07-07T12:31:57
Fix multiple end2end crashes in direct-to-MSL compiler. This set of changes: - Adds a single place (CompilerMtl::useDirectToMSLCompiler) where the direct-to-MSL compiler can be enabled, still at compile time rather than run time. It is still disabled by default. - Initializes MTLWaitableCompileEventImpl::mShader, without which all shader compiles crash. - Fixes a mismatch of the ANGLERasterizerDisabled variable name in the generated MSL. - Removes the transform feedback bindings as an argument to the vertex shader's main0(). Transform feedback support needs to be reimplemented in this compiler backend. - Added an option to the DriverUniform class to emit as either an interface block or a struct. The direct-to-MSL backend assumes it is a struct. - Disable variable reference validation when referencing either sample mask or rasterizer discard functionality in the shader. - Disable struct usage validation when inserting references to ANGLE_TextureEnv. This occurs during pipeline rewriting and it's infeasible to disable it at that point, so disable it during pipeline rewriting - which means it's disabled for all shaders. - For angle_end2end_tests, disable the file API hooking which disables the Metal shader cache. This speeds up the tests significantly - by roughly a factor of 5. With these changes, several hundred angle_end2end_tests run without any assertion failures, though still with many test failures. The next crash is in: GLSLTest.NamelessScopedStructs/ES2_Metal and will likely require a larger bug fix, or more changes to be upstreamed from WebKit's repository. Bug: angleproject:5505 Change-Id: Ia1ea9a13867f00035d4aeccf907fd032255588e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3010486 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
The ANGLE test harness is a harness around GoogleTest that provides functionality similar to the Chromium test harness. It features:
The ANGLE test harness accepts all standard GoogleTest arguments. The harness also accepts the following additional command-line arguments:
--batch-size limits the number of tests to run in each batch --batch-timeout limits the amount of time spent in each batch --bot-mode enables multi-process execution and test batching --debug-test-groups dumps the test config categories when using bot-mode --filter-file allows passing a larger gtest_filter via a file --histogram-json-file outputs a formatted JSON file for perf dashboards --max-processes limits the number of simuntaneous processes --results-directory specifies a directory to write test results to --results-file specifies a location for the JSON test result output --shard-count and --shard-index control the test sharding --test-timeout limits the amount of time spent in each test --flaky-retries allows for tests to fail a fixed number of times and still pass --disable-crash-handler forces off OS-level crash handling --isolated-outdir specifies a test artifacts directory --max-failures specifies a count of failures after which the harness early exits.
--isolated-script-test-output and --isolated-script-perf-test-output mirror --results-file
and --histogram-json-file respectively.
As well as the custom command-line arguments we support a few standard GoogleTest arguments:
gtest_filter works as it normally does with GoogleTest gtest_also_run_disabled_tests works as it normally does as well Other GoogleTest arguments are not supported although they may work.
angle_common and angle_util. The test runner has two main modes of operation: normal and bot mode.
During normal mode:
TestEventListener to record test results for our output JSON file. During bot mode:
gtest_filter file. See the source code for more details: TestSuite.h and TestSuite.cpp.