From: "U-GPD3\fjacb" fcasas@codeweavers.com
--- tests/shader_runner.c | 14 +++++++++++--- tests/shader_runner.h | 4 ++-- tests/shader_runner_d3d11.c | 2 +- tests/shader_runner_d3d12.c | 24 ++++++++++++++++++------ tests/shader_runner_d3d9.c | 2 +- tests/shader_runner_vulkan.c | 2 +- 6 files changed, 34 insertions(+), 14 deletions(-)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 9a4840cb0..3f4586489 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,8 +1031,8 @@ static enum parse_state read_shader_directive(struct shader_runner *runner, enum return state; }
-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) +static void run_shader_tests_range(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) { size_t shader_source_size = 0, shader_source_len = 0; struct resource_params current_resource; @@ -1405,6 +1406,13 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o fclose(f); }
+void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, void *dxc_compiler) +{ + run_shader_tests_range(runner, ops, dxc_compiler, SHADER_MODEL_2_0, SHADER_MODEL_3_0); + run_shader_tests_range(runner, ops, dxc_compiler, SHADER_MODEL_4_0, SHADER_MODEL_5_1); + run_shader_tests_range(runner, ops, dxc_compiler, SHADER_MODEL_6_0, SHADER_MODEL_6_0); +} + #ifdef _WIN32 static void print_dll_version(const char *file_name) { diff --git a/tests/shader_runner.h b/tests/shader_runner.h index e52a44596..fe1e24cca 100644 --- a/tests/shader_runner.h +++ b/tests/shader_runner.h @@ -165,8 +165,8 @@ void init_resource(struct resource *resource, const struct resource_params *para HRESULT dxc_compiler_compile_shader(void *dxc_compiler, enum shader_type type, unsigned int compile_options, const char *hlsl, ID3D10Blob **blob_out, ID3D10Blob **errors_out);
-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); +void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, + void *dxc_compiler);
#ifdef _WIN32 void run_shader_tests_d3d9(void); diff --git a/tests/shader_runner_d3d11.c b/tests/shader_runner_d3d11.c index df704da8c..4f663bc8f 100644 --- a/tests/shader_runner_d3d11.c +++ b/tests/shader_runner_d3d11.c @@ -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); destroy_test_context(&runner); } } diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index ccac95189..46bdb35e9 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -51,6 +51,8 @@ struct d3d12_shader_runner ID3D12CommandAllocator *compute_allocator; ID3D12GraphicsCommandList *compute_list;
+ enum shader_model target_minimum_shader_model, target_maximum_shader_model; + IDxcCompiler3 *dxc_compiler; };
@@ -97,14 +99,21 @@ static ID3D10Blob *compile_shader(const struct d3d12_shader_runner *runner, cons static bool d3d12_runner_check_requirements(struct shader_runner *r, enum shader_model *model) { struct d3d12_shader_runner *runner = d3d12_shader_runner(r); + enum shader_model range_min, range_max; + + range_min = max(runner->target_minimum_shader_model, runner->r.minimum_shader_model); + range_max = min(runner->target_maximum_shader_model, runner->r.maximum_shader_model);
- if (runner->r.maximum_shader_model < SHADER_MODEL_4_0) + if (range_max < range_min) return false;
- if (runner->r.minimum_shader_model >= SHADER_MODEL_6_0 && !runner->dxc_compiler) + if (range_max < SHADER_MODEL_4_0) return false;
- *model = max(SHADER_MODEL_4_0, runner->r.minimum_shader_model); + if (range_min >= SHADER_MODEL_6_0 && !runner->dxc_compiler) + return false; + + *model = max(SHADER_MODEL_4_0, range_min);
return true; } @@ -589,8 +598,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(void *dxc_compiler, enum shader_model target_minimum_shader_model, + enum shader_model target_maximum_shader_model) { static const struct test_context_desc desc = { @@ -603,6 +612,9 @@ void run_shader_tests_d3d12(void *dxc_compiler, enum shader_model minimum_shader ID3D12Device *device; HRESULT hr;
+ runner.target_minimum_shader_model = target_minimum_shader_model; + runner.target_maximum_shader_model = target_maximum_shader_model; + enable_d3d12_debug_layer(); init_adapter_info(); if (!init_test_context(&runner.test_context, &desc)) @@ -622,7 +634,7 @@ void run_shader_tests_d3d12(void *dxc_compiler, enum shader_model minimum_shader runner.compute_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&runner.compute_list); ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
- run_shader_tests(&runner.r, &d3d12_runner_ops, dxc_compiler, minimum_shader_model, maximum_shader_model); + run_shader_tests(&runner.r, &d3d12_runner_ops, dxc_compiler);
ID3D12GraphicsCommandList_Release(runner.compute_list); ID3D12CommandAllocator_Release(runner.compute_allocator); diff --git a/tests/shader_runner_d3d9.c b/tests/shader_runner_d3d9.c index fbd7d6b5b..48b49d09a 100644 --- a/tests/shader_runner_d3d9.c +++ b/tests/shader_runner_d3d9.c @@ -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); destroy_test_context(&runner); } FreeLibrary(d3d9_module); diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index 131e394b0..79dce6bf2 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -1397,7 +1397,7 @@ void run_shader_tests_vulkan(void) 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);
cleanup_vulkan_runner(&runner); }