[PATCH vkd3d v6 9/9] tests: Add tests for texture gather methods.
Matteo Bruni
mbruni at codeweavers.com
Wed Jan 26 08:35:33 CST 2022
From: Francisco Casas <fcasas at codeweavers.com>
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
Makefile.am | 3 +
tests/hlsl-gather-offset.shader_test | 101 +++++++++++++++++++++++
tests/hlsl-gather.shader_test | 115 +++++++++++++++++++++++++++
tests/shader_runner_d3d12.c | 63 ++++++++++++++-
4 files changed, 280 insertions(+), 2 deletions(-)
create mode 100644 tests/hlsl-gather-offset.shader_test
create mode 100644 tests/hlsl-gather.shader_test
diff --git a/Makefile.am b/Makefile.am
index 46f11072..db0a6f68 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -68,6 +68,8 @@ vkd3d_shader_tests = \
tests/hlsl-duplicate-modifiers.shader_test \
tests/hlsl-for.shader_test \
tests/hlsl-function-overload.shader_test \
+ tests/hlsl-gather-offset.shader_test \
+ tests/hlsl-gather.shader_test \
tests/hlsl-intrinsic-override.shader_test \
tests/hlsl-invalid.shader_test \
tests/hlsl-majority-pragma.shader_test \
@@ -294,6 +296,7 @@ XFAIL_TESTS = \
tests/hlsl-duplicate-modifiers.shader_test \
tests/hlsl-for.shader_test \
tests/hlsl-function-overload.shader_test \
+ tests/hlsl-gather.shader_test \
tests/hlsl-intrinsic-override.shader_test \
tests/hlsl-majority-pragma.shader_test \
tests/hlsl-majority-typedef.shader_test \
diff --git a/tests/hlsl-gather-offset.shader_test b/tests/hlsl-gather-offset.shader_test
new file mode 100644
index 00000000..51e6a6b6
--- /dev/null
+++ b/tests/hlsl-gather-offset.shader_test
@@ -0,0 +1,101 @@
+[require]
+shader model >= 4.1
+
+
+[sampler 0]
+filter linear linear linear
+address clamp clamp clamp
+
+[texture 0]
+size (3, 3)
+0.0 0.0 0.0 0.4 0.1 0.0 0.5 0.0 0.2 0.0 0.0 0.4
+0.0 0.1 0.5 0.0 0.1 0.1 0.0 0.4 0.2 0.1 0.5 0.0
+0.0 0.2 0.0 0.4 0.1 0.2 0.5 0.0 0.2 0.2 0.0 0.4
+
+
+[pixel shader]
+sampler s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.Gather(s, float2(0.2, 0.2), int2(1, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.1, 0.2, 0.2, 0.1)
+
+
+[pixel shader]
+sampler s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherRed(s, float2(0.6, 0.6), int2(-1, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.1, 0.1, 0.0)
+
+
+[require]
+shader model >= 5.0
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherGreen(s, float2(0.2, 0.2), int2(0, 1));
+}
+
+[test]
+draw quad
+probe all rgba (0.2, 0.2, 0.1, 0.1)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherGreen(s, float2(0.8, 0.8), int2(-1, -1));
+}
+
+[test]
+draw quad
+probe all rgba (0.1, 0.1, 0.0, 0.0)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherBlue(s, float2(0.2, 0.8), int2(1, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.5, 0.0, 0.5, 0.0)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherAlpha(s, float2(0.2, 0.8), int2(0, -1));
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.4, 0.0, 0.4)
diff --git a/tests/hlsl-gather.shader_test b/tests/hlsl-gather.shader_test
new file mode 100644
index 00000000..57af23d0
--- /dev/null
+++ b/tests/hlsl-gather.shader_test
@@ -0,0 +1,115 @@
+[require]
+shader model >= 4.1
+
+
+[sampler 0]
+filter linear linear linear
+address clamp clamp clamp
+
+[texture 0]
+size (3, 3)
+0.0 0.0 0.0 0.4 0.1 0.0 0.5 0.0 0.2 0.0 0.0 0.4
+0.0 0.1 0.5 0.0 0.1 0.1 0.0 0.4 0.2 0.1 0.5 0.0
+0.0 0.2 0.0 0.4 0.1 0.2 0.5 0.0 0.2 0.2 0.0 0.4
+
+
+[pixel shader]
+sampler s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.Gather(s, float2(0.2, 0.2));
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.1, 0.1, 0.0)
+
+
+[pixel shader]
+sampler s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherRed(s, float2(0.6, 0.6), int2(0, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.1, 0.2, 0.2, 0.1)
+
+
+[require]
+shader model >= 5.0
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherGreen(s, float2(0.2, 0.2), int2(0, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.1, 0.1, 0.0, 0.0)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherGreen(s, float2(0.8, 0.8));
+}
+
+[test]
+draw quad
+probe all rgba (0.2, 0.2, 0.1, 0.1)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherGreen(s, float2(0.2, 0.2), int2(0, 0), int2(0, 0), int2(0, 0), int2(0, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.1, 0.1, 0.0, 0.0)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherBlue(s, float2(0.2, 0.8), int2(0, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.5, 0.0, 0.5)
+
+
+[pixel shader]
+SamplerState s;
+Texture2D t;
+
+float4 main() : sv_target
+{
+ return t.GatherAlpha(s, float2(0.2, 0.8), int2(0, 0));
+}
+
+[test]
+draw quad
+probe all rgba (0.4, 0.0, 0.4, 0.0)
diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c
index 47f419b9..4a8d1f18 100644
--- a/tests/shader_runner_d3d12.c
+++ b/tests/shader_runner_d3d12.c
@@ -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;
--
2.34.1
More information about the wine-devel
mailing list