mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
tests: Add [effect] section support.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
parent
a66acea1b5
commit
214d44fb11
Notes:
Alexandre Julliard
2023-10-31 22:39:21 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Zebediah Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/114
@ -89,6 +89,8 @@ enum parse_state
|
|||||||
STATE_SHADER_PIXEL_TODO,
|
STATE_SHADER_PIXEL_TODO,
|
||||||
STATE_SHADER_VERTEX,
|
STATE_SHADER_VERTEX,
|
||||||
STATE_SHADER_VERTEX_TODO,
|
STATE_SHADER_VERTEX_TODO,
|
||||||
|
STATE_SHADER_EFFECT,
|
||||||
|
STATE_SHADER_EFFECT_TODO,
|
||||||
STATE_TEST,
|
STATE_TEST,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -814,6 +816,7 @@ const char *shader_type_string(enum shader_type type)
|
|||||||
[SHADER_TYPE_CS] = "cs",
|
[SHADER_TYPE_CS] = "cs",
|
||||||
[SHADER_TYPE_PS] = "ps",
|
[SHADER_TYPE_PS] = "ps",
|
||||||
[SHADER_TYPE_VS] = "vs",
|
[SHADER_TYPE_VS] = "vs",
|
||||||
|
[SHADER_TYPE_FX] = "fx",
|
||||||
};
|
};
|
||||||
assert(type < ARRAY_SIZE(shader_types));
|
assert(type < ARRAY_SIZE(shader_types));
|
||||||
return shader_types[type];
|
return shader_types[type];
|
||||||
@ -953,6 +956,14 @@ static void compile_shader(struct shader_runner *runner, IDxcCompiler3 *dxc_comp
|
|||||||
[SHADER_MODEL_6_0] = "6_0",
|
[SHADER_MODEL_6_0] = "6_0",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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",
|
||||||
|
};
|
||||||
|
|
||||||
if (use_dxcompiler)
|
if (use_dxcompiler)
|
||||||
{
|
{
|
||||||
assert(dxc_compiler);
|
assert(dxc_compiler);
|
||||||
@ -960,6 +971,9 @@ static void compile_shader(struct shader_runner *runner, IDxcCompiler3 *dxc_comp
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (type == SHADER_TYPE_FX)
|
||||||
|
sprintf(profile, "%s_%s", shader_type_string(type), effect_models[runner->minimum_shader_model]);
|
||||||
|
else
|
||||||
sprintf(profile, "%s_%s", shader_type_string(type), shader_models[runner->minimum_shader_model]);
|
sprintf(profile, "%s_%s", shader_type_string(type), shader_models[runner->minimum_shader_model]);
|
||||||
hr = D3DCompile(source, len, NULL, NULL, NULL, "main", profile, runner->compile_options, 0, &blob, &errors);
|
hr = D3DCompile(source, len, NULL, NULL, NULL, "main", profile, runner->compile_options, 0, &blob, &errors);
|
||||||
}
|
}
|
||||||
@ -996,8 +1010,10 @@ static enum parse_state read_shader_directive(struct shader_runner *runner, enum
|
|||||||
state = STATE_SHADER_COMPUTE_TODO;
|
state = STATE_SHADER_COMPUTE_TODO;
|
||||||
else if (state == STATE_SHADER_PIXEL)
|
else if (state == STATE_SHADER_PIXEL)
|
||||||
state = STATE_SHADER_PIXEL_TODO;
|
state = STATE_SHADER_PIXEL_TODO;
|
||||||
else
|
else if (state == STATE_SHADER_VERTEX)
|
||||||
state = STATE_SHADER_VERTEX_TODO;
|
state = STATE_SHADER_VERTEX_TODO;
|
||||||
|
else
|
||||||
|
state = STATE_SHADER_EFFECT_TODO;
|
||||||
}
|
}
|
||||||
else if (match_directive_substring(src, "fail", &src))
|
else if (match_directive_substring(src, "fail", &src))
|
||||||
{
|
{
|
||||||
@ -1136,6 +1152,21 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o
|
|||||||
shader_source_size = 0;
|
shader_source_size = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case STATE_SHADER_EFFECT:
|
||||||
|
case STATE_SHADER_EFFECT_TODO:
|
||||||
|
if (!skip_tests)
|
||||||
|
{
|
||||||
|
todo_if (state == STATE_SHADER_EFFECT_TODO)
|
||||||
|
compile_shader(runner, dxc_compiler, shader_source, shader_source_len, SHADER_TYPE_FX,
|
||||||
|
expect_hr);
|
||||||
|
}
|
||||||
|
free(runner->fx_source);
|
||||||
|
runner->fx_source = shader_source;
|
||||||
|
shader_source = NULL;
|
||||||
|
shader_source_len = 0;
|
||||||
|
shader_source_size = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case STATE_PREPROC_INVALID:
|
case STATE_PREPROC_INVALID:
|
||||||
{
|
{
|
||||||
ID3D10Blob *blob = NULL, *errors = NULL;
|
ID3D10Blob *blob = NULL, *errors = NULL;
|
||||||
@ -1324,6 +1355,12 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o
|
|||||||
expect_hr = S_OK;
|
expect_hr = S_OK;
|
||||||
state = read_shader_directive(runner, state, line_buffer, line, &expect_hr);
|
state = read_shader_directive(runner, state, line_buffer, line, &expect_hr);
|
||||||
}
|
}
|
||||||
|
else if (match_directive_substring(line, "[effect", &line))
|
||||||
|
{
|
||||||
|
state = STATE_SHADER_EFFECT;
|
||||||
|
expect_hr = S_OK;
|
||||||
|
state = read_shader_directive(runner, state, line_buffer, line, &expect_hr);
|
||||||
|
}
|
||||||
else if (!strcmp(line, "[input layout]\n"))
|
else if (!strcmp(line, "[input layout]\n"))
|
||||||
{
|
{
|
||||||
state = STATE_INPUT_LAYOUT;
|
state = STATE_INPUT_LAYOUT;
|
||||||
@ -1355,6 +1392,8 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o
|
|||||||
case STATE_SHADER_PIXEL_TODO:
|
case STATE_SHADER_PIXEL_TODO:
|
||||||
case STATE_SHADER_VERTEX:
|
case STATE_SHADER_VERTEX:
|
||||||
case STATE_SHADER_VERTEX_TODO:
|
case STATE_SHADER_VERTEX_TODO:
|
||||||
|
case STATE_SHADER_EFFECT:
|
||||||
|
case STATE_SHADER_EFFECT_TODO:
|
||||||
{
|
{
|
||||||
size_t len = strlen(line);
|
size_t len = strlen(line);
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ enum shader_type
|
|||||||
SHADER_TYPE_CS,
|
SHADER_TYPE_CS,
|
||||||
SHADER_TYPE_PS,
|
SHADER_TYPE_PS,
|
||||||
SHADER_TYPE_VS,
|
SHADER_TYPE_VS,
|
||||||
|
SHADER_TYPE_FX,
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *shader_type_string(enum shader_type type);
|
const char *shader_type_string(enum shader_type type);
|
||||||
@ -118,6 +119,7 @@ struct shader_runner
|
|||||||
char *vs_source;
|
char *vs_source;
|
||||||
char *ps_source;
|
char *ps_source;
|
||||||
char *cs_source;
|
char *cs_source;
|
||||||
|
char *fx_source;
|
||||||
enum shader_model minimum_shader_model;
|
enum shader_model minimum_shader_model;
|
||||||
enum shader_model maximum_shader_model;
|
enum shader_model maximum_shader_model;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user