tests/shader_runner: Add a "compile shader model" require directive.

This directive requires specific shader models to be tested for
compilation, bypassing the default behaviour where only one version from
each shader model set (SM1-3, SM4-5, SM6) is compiled.
This commit is contained in:
Shaun Ren
2025-10-02 16:39:06 -04:00
committed by Henri Verbeet
parent a7e56beb19
commit e5081a1bf9
Notes: Henri Verbeet 2025-10-16 15:22:12 +02:00
Approved-by: Francisco Casas (@fcasas)
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1766
2 changed files with 16 additions and 1 deletions

View File

@@ -516,6 +516,19 @@ static void parse_require_directive(struct shader_runner *runner, const char *li
fatal_error("Unknown shader model '%s'.\n", line);
}
else if (match_string(line, "compile shader model", &line))
{
for (i = 0; i < ARRAY_SIZE(model_strings); ++i)
{
if (match_string(line, model_strings[i], &line))
{
bitmap_set(&runner->compile_model_mask, i);
return;
}
}
fatal_error("Unknown shader model '%s'.\n", line);
}
else if (match_string(line, "options:", &line))
{
static const struct option
@@ -2421,7 +2434,7 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c
static const uint32_t sm1_mask = (1u << SHADER_MODEL_4_0) - 1;
static const uint32_t sm4_mask = ((1u << SHADER_MODEL_6_0) - 1) & ~sm1_mask;
uint32_t model_mask = 0;
uint32_t model_mask = runner->compile_model_mask;
if (runner->hlsl_hrs[runner->minimum_shader_model] == S_OK)
bitmap_set(&model_mask, runner->minimum_shader_model);
@@ -2541,6 +2554,7 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c
state = STATE_REQUIRE;
runner->minimum_shader_model = caps->minimum_shader_model;
runner->maximum_shader_model = caps->maximum_shader_model;
runner->compile_model_mask = 0;
memset(runner->require_shader_caps, 0, sizeof(runner->require_shader_caps));
memset(runner->require_format_caps, 0, sizeof(runner->require_format_caps));
runner->compile_options = 0;

View File

@@ -243,6 +243,7 @@ struct shader_runner
enum source_format shader_format[SHADER_TYPE_COUNT];
enum shader_model minimum_shader_model;
enum shader_model maximum_shader_model;
uint32_t compile_model_mask;
bool require_shader_caps[SHADER_CAP_COUNT];
uint32_t require_format_caps[DXGI_FORMAT_COUNT];