mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
tests: Add tests for texture gather methods.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com> Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com> Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
committed by
Alexandre Julliard
parent
6de080088a
commit
d07d0d8eff
@@ -115,9 +115,18 @@ struct texture
|
||||
unsigned int root_index;
|
||||
};
|
||||
|
||||
enum shader_model
|
||||
{
|
||||
SHADER_MODEL_4_0 = 0,
|
||||
SHADER_MODEL_4_1,
|
||||
SHADER_MODEL_5_0,
|
||||
SHADER_MODEL_5_1,
|
||||
};
|
||||
|
||||
struct shader_context
|
||||
{
|
||||
struct test_context c;
|
||||
enum shader_model minimum_shader_model;
|
||||
|
||||
ID3D10Blob *ps_code;
|
||||
|
||||
@@ -160,6 +169,7 @@ enum parse_state
|
||||
STATE_NONE,
|
||||
STATE_PREPROC,
|
||||
STATE_PREPROC_INVALID,
|
||||
STATE_REQUIRE,
|
||||
STATE_SAMPLER,
|
||||
STATE_SHADER_INVALID_PIXEL,
|
||||
STATE_SHADER_PIXEL,
|
||||
@@ -182,6 +192,36 @@ static bool match_string(const char *line, const char *token, const char **const
|
||||
return true;
|
||||
}
|
||||
|
||||
static void parse_require_directive(struct shader_context *context, const char *line)
|
||||
{
|
||||
if (match_string(line, "shader model >=", &line))
|
||||
{
|
||||
static const char *const model_strings[] =
|
||||
{
|
||||
[SHADER_MODEL_4_0] = "4.0",
|
||||
[SHADER_MODEL_4_1] = "4.1",
|
||||
[SHADER_MODEL_5_0] = "5.0",
|
||||
[SHADER_MODEL_5_1] = "5.1",
|
||||
};
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(model_strings); ++i)
|
||||
{
|
||||
if (match_string(line, model_strings[i], &line))
|
||||
{
|
||||
context->minimum_shader_model = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fatal_error("Unknown shader model '%s'.\n", line);
|
||||
}
|
||||
else
|
||||
{
|
||||
fatal_error("Unknown require directive '%s'.\n", line);
|
||||
}
|
||||
}
|
||||
|
||||
static void parse_texture_format(struct texture *texture, const char *line)
|
||||
{
|
||||
static const struct
|
||||
@@ -662,16 +702,27 @@ START_TEST(shader_runner_d3d12)
|
||||
switch (state)
|
||||
{
|
||||
case STATE_NONE:
|
||||
case STATE_REQUIRE:
|
||||
case STATE_SAMPLER:
|
||||
case STATE_TEST:
|
||||
case STATE_TEXTURE:
|
||||
break;
|
||||
|
||||
case STATE_SHADER_PIXEL:
|
||||
if (!(context.ps_code = compile_shader(shader_source, "ps_4_0")))
|
||||
{
|
||||
static const char *const shader_models[] =
|
||||
{
|
||||
[SHADER_MODEL_4_0] = "ps_4_0",
|
||||
[SHADER_MODEL_4_1] = "ps_4_1",
|
||||
[SHADER_MODEL_5_0] = "ps_5_0",
|
||||
[SHADER_MODEL_5_1] = "ps_5_1",
|
||||
};
|
||||
|
||||
if (!(context.ps_code = compile_shader(shader_source, shader_models[context.minimum_shader_model])))
|
||||
return;
|
||||
shader_source_len = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case STATE_SHADER_INVALID_PIXEL:
|
||||
{
|
||||
@@ -755,7 +806,11 @@ START_TEST(shader_runner_d3d12)
|
||||
{
|
||||
unsigned int index;
|
||||
|
||||
if (!strcmp(line, "[pixel shader]\n"))
|
||||
if (!strcmp(line, "[require]\n"))
|
||||
{
|
||||
state = STATE_REQUIRE;
|
||||
}
|
||||
else if (!strcmp(line, "[pixel shader]\n"))
|
||||
{
|
||||
state = STATE_SHADER_PIXEL;
|
||||
|
||||
@@ -844,6 +899,10 @@ START_TEST(shader_runner_d3d12)
|
||||
break;
|
||||
}
|
||||
|
||||
case STATE_REQUIRE:
|
||||
parse_require_directive(&context, line);
|
||||
break;
|
||||
|
||||
case STATE_SAMPLER:
|
||||
parse_sampler_directive(current_sampler, line);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user