From: Francisco Casas fcasas@codeweavers.com
So, the idea is that running run_shader_tests() means to ask the backend to run the shader_test file so that each test is executed with the lowest profile the backend actually supports (or not excuted at all if there isn't any).
Considering that in the future we may want to test all profiles for all backends, for instance, for Windows:
for(m = SHADER_MODEL_2_0; m <= SHADER_MODEL_6_0; ++m) { run_shader_tests_d3d9(m, m); run_shader_tests_d3d11(m, m) run_shader_tests_d3d12(m, m, dxc_compiler); } --- tests/shader_runner.c | 25 ++++++++++++++----------- tests/shader_runner.h | 10 +++++----- tests/shader_runner_d3d11.c | 4 ++-- tests/shader_runner_d3d12.c | 4 ++-- tests/shader_runner_d3d9.c | 4 ++-- tests/shader_runner_vulkan.c | 4 ++-- 6 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 0705ddc93..f4121a54b 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -955,7 +955,8 @@ static void compile_shader(struct shader_runner *runner, IDxcCompiler3 *dxc_comp
if (use_dxcompiler) { - assert(dxc_compiler); + if (!dxc_compiler) + return; hr = dxc_compiler_compile_shader(dxc_compiler, type, runner->compile_options, source, &blob, &errors); } else @@ -1030,6 +1031,8 @@ static enum parse_state read_shader_directive(struct shader_runner *runner, enum return state; }
+/* Ask the backend to run the shader_test file so that each test is executed with the lowest profile + * it can support within the range of shader models specified, if any. */ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, void *dxc_compiler, enum shader_model minimum_shader_model, enum shader_model maximum_shader_model) { @@ -1503,13 +1506,13 @@ START_TEST(shader_runner) trace("Running tests from a Windows cross build\n");
trace("Compiling shaders with d3dcompiler_47.dll and executing with d3d9.dll\n"); - run_shader_tests_d3d9(); + run_shader_tests_d3d9(SHADER_MODEL_2_0, SHADER_MODEL_6_0);
trace("Compiling shaders with d3dcompiler_47.dll and executing with d3d11.dll\n"); - run_shader_tests_d3d11(); + run_shader_tests_d3d11(SHADER_MODEL_2_0, SHADER_MODEL_6_0);
trace("Compiling shaders with d3dcompiler_47.dll and executing with d3d12.dll\n"); - run_shader_tests_d3d12(NULL, SHADER_MODEL_4_0, SHADER_MODEL_5_1); + run_shader_tests_d3d12(SHADER_MODEL_2_0, SHADER_MODEL_6_0, NULL);
print_dll_version("d3dcompiler_47.dll"); print_dll_version("dxgi.dll"); @@ -1520,18 +1523,18 @@ START_TEST(shader_runner) trace("Running tests from a Windows non-cross build\n");
trace("Compiling shaders with vkd3d-shader and executing with d3d9.dll\n"); - run_shader_tests_d3d9(); + run_shader_tests_d3d9(SHADER_MODEL_2_0, SHADER_MODEL_6_0);
trace("Compiling shaders with vkd3d-shader and executing with d3d11.dll\n"); - run_shader_tests_d3d11(); + run_shader_tests_d3d11(SHADER_MODEL_2_0, SHADER_MODEL_6_0);
trace("Compiling shaders with vkd3d-shader and executing with vkd3d\n"); - run_shader_tests_d3d12(NULL, SHADER_MODEL_4_0, SHADER_MODEL_5_1); + run_shader_tests_d3d12(SHADER_MODEL_2_0, SHADER_MODEL_6_0, NULL);
if ((dxc_compiler = dxcompiler_create())) { trace("Compiling shaders with dxcompiler and executing with vkd3d\n"); - run_shader_tests_d3d12(dxc_compiler, SHADER_MODEL_6_0, SHADER_MODEL_6_0); + run_shader_tests_d3d12(SHADER_MODEL_6_0, SHADER_MODEL_6_0, dxc_compiler); IDxcCompiler3_Release(dxc_compiler); print_dll_version(SONAME_LIBDXCOMPILER); } @@ -1542,15 +1545,15 @@ START_TEST(shader_runner) trace("Running tests from a Unix build\n");
trace("Compiling shaders with vkd3d-shader and executing with Vulkan\n"); - run_shader_tests_vulkan(); + run_shader_tests_vulkan(SHADER_MODEL_2_0, SHADER_MODEL_6_0);
trace("Compiling shaders with vkd3d-shader and executing with vkd3d\n"); - run_shader_tests_d3d12(NULL, SHADER_MODEL_4_0, SHADER_MODEL_5_1); + run_shader_tests_d3d12(SHADER_MODEL_2_0, SHADER_MODEL_6_0, NULL);
if ((dxc_compiler = dxcompiler_create())) { trace("Compiling shaders with dxcompiler and executing with vkd3d\n"); - run_shader_tests_d3d12(dxc_compiler, SHADER_MODEL_6_0, SHADER_MODEL_6_0); + run_shader_tests_d3d12(SHADER_MODEL_6_0, SHADER_MODEL_6_0, dxc_compiler); IDxcCompiler3_Release(dxc_compiler); } #endif diff --git a/tests/shader_runner.h b/tests/shader_runner.h index e52a44596..b91e23d08 100644 --- a/tests/shader_runner.h +++ b/tests/shader_runner.h @@ -169,10 +169,10 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o enum shader_model minimum_shader_model, enum shader_model maximum_shader_model);
#ifdef _WIN32 -void run_shader_tests_d3d9(void); -void run_shader_tests_d3d11(void); +void run_shader_tests_d3d9(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model); +void run_shader_tests_d3d11(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model); #else -void run_shader_tests_vulkan(void); +void run_shader_tests_vulkan(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model); #endif -void run_shader_tests_d3d12(void *dxc_compiler, enum shader_model minimum_shader_model, - enum shader_model maximum_shader_model); +void run_shader_tests_d3d12(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model, + void *dxc_compiler); diff --git a/tests/shader_runner_d3d11.c b/tests/shader_runner_d3d11.c index df704da8c..978dd471e 100644 --- a/tests/shader_runner_d3d11.c +++ b/tests/shader_runner_d3d11.c @@ -745,7 +745,7 @@ static const struct shader_runner_ops d3d11_runner_ops = .release_readback = d3d11_runner_release_readback, };
-void run_shader_tests_d3d11(void) +void run_shader_tests_d3d11(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model) { struct d3d11_shader_runner runner; HMODULE dxgi_module, d3d11_module; @@ -760,7 +760,7 @@ void run_shader_tests_d3d11(void) init_adapter_info(); if (init_test_context(&runner)) { - run_shader_tests(&runner.r, &d3d11_runner_ops, NULL, SHADER_MODEL_2_0, SHADER_MODEL_5_1); + run_shader_tests(&runner.r, &d3d11_runner_ops, NULL, minimum_shader_model, maximum_shader_model); destroy_test_context(&runner); } } diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index ccac95189..98e3e7c0f 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -589,8 +589,8 @@ static const struct shader_runner_ops d3d12_runner_ops = .release_readback = d3d12_runner_release_readback, };
-void run_shader_tests_d3d12(void *dxc_compiler, enum shader_model minimum_shader_model, - enum shader_model maximum_shader_model) +void run_shader_tests_d3d12(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model, + void *dxc_compiler) { static const struct test_context_desc desc = { diff --git a/tests/shader_runner_d3d9.c b/tests/shader_runner_d3d9.c index fbd7d6b5b..b05d178b2 100644 --- a/tests/shader_runner_d3d9.c +++ b/tests/shader_runner_d3d9.c @@ -531,7 +531,7 @@ static const struct shader_runner_ops d3d9_runner_ops = .release_readback = d3d9_runner_release_readback, };
-void run_shader_tests_d3d9(void) +void run_shader_tests_d3d9(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model) { struct d3d9_shader_runner runner; HMODULE d3d9_module; @@ -543,7 +543,7 @@ void run_shader_tests_d3d9(void)
init_adapter_info(); init_test_context(&runner); - run_shader_tests(&runner.r, &d3d9_runner_ops, NULL, SHADER_MODEL_2_0, SHADER_MODEL_3_0); + run_shader_tests(&runner.r, &d3d9_runner_ops, NULL, minimum_shader_model, maximum_shader_model); destroy_test_context(&runner); } FreeLibrary(d3d9_module); diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index 131e394b0..418f3e3bd 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -1390,14 +1390,14 @@ static void cleanup_vulkan_runner(struct vulkan_shader_runner *runner) VK_CALL(vkDestroyInstance(runner->instance, NULL)); }
-void run_shader_tests_vulkan(void) +void run_shader_tests_vulkan(enum shader_model minimum_shader_model, enum shader_model maximum_shader_model) { struct vulkan_shader_runner runner = {0};
if (!init_vulkan_runner(&runner)) return;
- run_shader_tests(&runner.r, &vulkan_runner_ops, NULL, SHADER_MODEL_2_0, SHADER_MODEL_5_1); + run_shader_tests(&runner.r, &vulkan_runner_ops, NULL, minimum_shader_model, maximum_shader_model);
cleanup_vulkan_runner(&runner); }