mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
tests/shader_runner: Keep a single array of shader model strings.
That is, one with dots and one with underscores.
This commit is contained in:
committed by
Henri Verbeet
parent
13ee6d74ad
commit
b93fceb6a5
Notes:
Henri Verbeet
2025-11-24 19:12:37 +01:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1812
@@ -73,7 +73,7 @@ static struct shader_test_options
|
|||||||
const char *compiler_filter;
|
const char *compiler_filter;
|
||||||
} shader_test_options = {0};
|
} shader_test_options = {0};
|
||||||
|
|
||||||
static const char *const model_strings[] =
|
static const char *const sm_strings_dot[] =
|
||||||
{
|
{
|
||||||
[SHADER_MODEL_2_0] = "2.0",
|
[SHADER_MODEL_2_0] = "2.0",
|
||||||
[SHADER_MODEL_3_0] = "3.0",
|
[SHADER_MODEL_3_0] = "3.0",
|
||||||
@@ -85,6 +85,18 @@ static const char *const model_strings[] =
|
|||||||
[SHADER_MODEL_6_2] = "6.2",
|
[SHADER_MODEL_6_2] = "6.2",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *const sm_strings_underscore[] =
|
||||||
|
{
|
||||||
|
[SHADER_MODEL_2_0] = "2_0",
|
||||||
|
[SHADER_MODEL_3_0] = "3_0",
|
||||||
|
[SHADER_MODEL_4_0] = "4_0",
|
||||||
|
[SHADER_MODEL_4_1] = "4_1",
|
||||||
|
[SHADER_MODEL_5_0] = "5_0",
|
||||||
|
[SHADER_MODEL_5_1] = "5_1",
|
||||||
|
[SHADER_MODEL_6_0] = "6_0",
|
||||||
|
[SHADER_MODEL_6_2] = "6_2",
|
||||||
|
};
|
||||||
|
|
||||||
void fatal_error(const char *format, ...)
|
void fatal_error(const char *format, ...)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@@ -115,15 +127,15 @@ enum parse_state
|
|||||||
|
|
||||||
static enum shader_model match_shader_model_string(const char *string, const char **rest)
|
static enum shader_model match_shader_model_string(const char *string, const char **rest)
|
||||||
{
|
{
|
||||||
for (enum shader_model i = 0; i < ARRAY_SIZE(model_strings); ++i)
|
for (enum shader_model i = 0; i < ARRAY_SIZE(sm_strings_dot); ++i)
|
||||||
{
|
{
|
||||||
if (!strncmp(string, model_strings[i], strlen(model_strings[i])))
|
if (!strncmp(string, sm_strings_dot[i], strlen(sm_strings_dot[i])))
|
||||||
{
|
{
|
||||||
*rest = string + strlen(model_strings[i]);
|
*rest = string + strlen(sm_strings_dot[i]);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
/* Allow e.g. "4" as a shorthand for "4.0". */
|
/* Allow e.g. "4" as a shorthand for "4.0". */
|
||||||
if (string[0] == model_strings[i][0] && !strcmp(&model_strings[i][1], ".0")
|
if (string[0] == sm_strings_dot[i][0] && !strcmp(&sm_strings_dot[i][1], ".0")
|
||||||
&& string[1] != '.' && !isdigit(string[1]))
|
&& string[1] != '.' && !isdigit(string[1]))
|
||||||
{
|
{
|
||||||
*rest = string + 1;
|
*rest = string + 1;
|
||||||
@@ -500,9 +512,9 @@ static void parse_require_directive(struct shader_runner *runner, const char *li
|
|||||||
if (match_string(line, "shader model >=", &line)
|
if (match_string(line, "shader model >=", &line)
|
||||||
|| (less_than = match_string(line, "shader model <", &line)))
|
|| (less_than = match_string(line, "shader model <", &line)))
|
||||||
{
|
{
|
||||||
for (i = 0; i < ARRAY_SIZE(model_strings); ++i)
|
for (i = 0; i < ARRAY_SIZE(sm_strings_dot); ++i)
|
||||||
{
|
{
|
||||||
if (match_string(line, model_strings[i], &line))
|
if (match_string(line, sm_strings_dot[i], &line))
|
||||||
{
|
{
|
||||||
if (less_than)
|
if (less_than)
|
||||||
{
|
{
|
||||||
@@ -522,9 +534,9 @@ static void parse_require_directive(struct shader_runner *runner, const char *li
|
|||||||
}
|
}
|
||||||
else if (match_string(line, "compile shader model", &line))
|
else if (match_string(line, "compile shader model", &line))
|
||||||
{
|
{
|
||||||
for (i = 0; i < ARRAY_SIZE(model_strings); ++i)
|
for (i = 0; i < ARRAY_SIZE(sm_strings_dot); ++i)
|
||||||
{
|
{
|
||||||
if (match_string(line, model_strings[i], &line))
|
if (match_string(line, sm_strings_dot[i], &line))
|
||||||
{
|
{
|
||||||
bitmap_set(&runner->compile_model_mask, i);
|
bitmap_set(&runner->compile_model_mask, i);
|
||||||
return;
|
return;
|
||||||
@@ -2003,18 +2015,6 @@ ID3D10Blob *compile_hlsl(const struct shader_runner *runner, enum shader_type ty
|
|||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
char profile[7];
|
char profile[7];
|
||||||
|
|
||||||
static const char *const shader_models[] =
|
|
||||||
{
|
|
||||||
[SHADER_MODEL_2_0] = "2_0",
|
|
||||||
[SHADER_MODEL_3_0] = "3_0",
|
|
||||||
[SHADER_MODEL_4_0] = "4_0",
|
|
||||||
[SHADER_MODEL_4_1] = "4_1",
|
|
||||||
[SHADER_MODEL_5_0] = "5_0",
|
|
||||||
[SHADER_MODEL_5_1] = "5_1",
|
|
||||||
[SHADER_MODEL_6_0] = "6_0",
|
|
||||||
[SHADER_MODEL_6_2] = "6_2",
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Behaviour is inconsistent between different versions of
|
/* Behaviour is inconsistent between different versions of
|
||||||
* d3dcompiler_47.dll. Version 10.0.17134.12 seems to reject
|
* d3dcompiler_47.dll. Version 10.0.17134.12 seems to reject
|
||||||
* D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY for 5.1 profiles, while
|
* D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY for 5.1 profiles, while
|
||||||
@@ -2022,7 +2022,7 @@ ID3D10Blob *compile_hlsl(const struct shader_runner *runner, enum shader_type ty
|
|||||||
if (runner->minimum_shader_model >= SHADER_MODEL_5_1)
|
if (runner->minimum_shader_model >= SHADER_MODEL_5_1)
|
||||||
options &= ~D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY;
|
options &= ~D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY;
|
||||||
|
|
||||||
sprintf(profile, "%s_%s", shader_type_string(type), shader_models[runner->minimum_shader_model]);
|
sprintf(profile, "%s_%s", shader_type_string(type), sm_strings_underscore[runner->minimum_shader_model]);
|
||||||
|
|
||||||
switch (runner->shader_format[type])
|
switch (runner->shader_format[type])
|
||||||
{
|
{
|
||||||
@@ -2086,26 +2086,6 @@ static void compile_shader(struct shader_runner *runner, const char *source,
|
|||||||
char profile[7];
|
char profile[7];
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
static const char *const shader_models[] =
|
|
||||||
{
|
|
||||||
[SHADER_MODEL_2_0] = "2_0",
|
|
||||||
[SHADER_MODEL_3_0] = "3_0",
|
|
||||||
[SHADER_MODEL_4_0] = "4_0",
|
|
||||||
[SHADER_MODEL_4_1] = "4_1",
|
|
||||||
[SHADER_MODEL_5_0] = "5_0",
|
|
||||||
[SHADER_MODEL_5_1] = "5_1",
|
|
||||||
[SHADER_MODEL_6_0] = "6_0",
|
|
||||||
[SHADER_MODEL_6_2] = "6_2",
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *const effect_models[] =
|
|
||||||
{
|
|
||||||
[SHADER_MODEL_2_0] = "2_0",
|
|
||||||
[SHADER_MODEL_4_0] = "4_0",
|
|
||||||
[SHADER_MODEL_4_1] = "4_1",
|
|
||||||
[SHADER_MODEL_5_0] = "5_0",
|
|
||||||
};
|
|
||||||
|
|
||||||
switch (runner->shader_format[type])
|
switch (runner->shader_format[type])
|
||||||
{
|
{
|
||||||
case SOURCE_FORMAT_HLSL:
|
case SOURCE_FORMAT_HLSL:
|
||||||
@@ -2131,10 +2111,7 @@ static void compile_shader(struct shader_runner *runner, const char *source,
|
|||||||
if (model >= SHADER_MODEL_5_1)
|
if (model >= SHADER_MODEL_5_1)
|
||||||
options &= ~D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY;
|
options &= ~D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY;
|
||||||
|
|
||||||
if (type == SHADER_TYPE_FX)
|
sprintf(profile, "%s_%s", shader_type_string(type), sm_strings_underscore[model]);
|
||||||
sprintf(profile, "%s_%s", shader_type_string(type), effect_models[model]);
|
|
||||||
else
|
|
||||||
sprintf(profile, "%s_%s", shader_type_string(type), shader_models[model]);
|
|
||||||
|
|
||||||
if (use_dxcompiler)
|
if (use_dxcompiler)
|
||||||
{
|
{
|
||||||
@@ -2510,7 +2487,7 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c
|
|||||||
maximum_shader_model = min(caps->maximum_shader_model, shader_test_options.maximum_shader_model);
|
maximum_shader_model = min(caps->maximum_shader_model, shader_test_options.maximum_shader_model);
|
||||||
|
|
||||||
trace("Compiling SM%s-SM%s shaders with %s and executing with %s.\n",
|
trace("Compiling SM%s-SM%s shaders with %s and executing with %s.\n",
|
||||||
model_strings[minimum_shader_model], model_strings[maximum_shader_model],
|
sm_strings_dot[minimum_shader_model], sm_strings_dot[maximum_shader_model],
|
||||||
caps->compiler, caps->runner);
|
caps->compiler, caps->runner);
|
||||||
trace_tags(caps);
|
trace_tags(caps);
|
||||||
trace_shader_caps(caps->shader_caps);
|
trace_shader_caps(caps->shader_caps);
|
||||||
@@ -2638,7 +2615,7 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c
|
|||||||
{
|
{
|
||||||
if (!bitmap_is_set(&model_mask, model))
|
if (!bitmap_is_set(&model_mask, model))
|
||||||
continue;
|
continue;
|
||||||
vkd3d_test_push_context("Model %s", model_strings[model]);
|
vkd3d_test_push_context("Model %s", sm_strings_dot[model]);
|
||||||
compile_shader(runner, shader_source, shader_source_len, shader_type, model);
|
compile_shader(runner, shader_source, shader_source_len, shader_type, model);
|
||||||
vkd3d_test_pop_context();
|
vkd3d_test_pop_context();
|
||||||
}
|
}
|
||||||
@@ -3030,7 +3007,7 @@ static bool parse_shader_model(const char *str, enum shader_model *sm)
|
|||||||
{
|
{
|
||||||
for (enum shader_model model = SHADER_MODEL_MIN; model <= SHADER_MODEL_MAX; ++model)
|
for (enum shader_model model = SHADER_MODEL_MIN; model <= SHADER_MODEL_MAX; ++model)
|
||||||
{
|
{
|
||||||
if (!strcmp(str, model_strings[model]))
|
if (!strcmp(str, sm_strings_dot[model]))
|
||||||
{
|
{
|
||||||
*sm = model;
|
*sm = model;
|
||||||
return true;
|
return true;
|
||||||
@@ -3073,8 +3050,8 @@ START_TEST(shader_runner)
|
|||||||
|| shader_test_options.maximum_shader_model != SHADER_MODEL_MAX)
|
|| shader_test_options.maximum_shader_model != SHADER_MODEL_MAX)
|
||||||
{
|
{
|
||||||
trace("Running shader models where %s <= SM <= %s\n",
|
trace("Running shader models where %s <= SM <= %s\n",
|
||||||
model_strings[shader_test_options.minimum_shader_model],
|
sm_strings_dot[shader_test_options.minimum_shader_model],
|
||||||
model_strings[shader_test_options.maximum_shader_model]);
|
sm_strings_dot[shader_test_options.maximum_shader_model]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shader_test_options.executor_filter)
|
if (shader_test_options.executor_filter)
|
||||||
|
|||||||
Reference in New Issue
Block a user