[PATCH v5 vkd3d 13/13] tests: Add tests for texture gather methods.
Giovanni Mascellani
gmascellani at codeweavers.com
Wed Dec 22 04:46:27 CST 2021
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
On 22/12/21 00:08, Zebediah Figura wrote:
> 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>
> ---
> v5: Split from the previous patch, add require directives to allow the tests to
> pass with native d3dcompiler.
>
> 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 d0729681a..3aaa67b55 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 \
> @@ -295,6 +297,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 000000000..51e6a6b64
> --- /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 000000000..57af23d02
> --- /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 d404895fb..fa73b31b7 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
> @@ -661,16 +701,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:
> {
> @@ -754,7 +805,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;
>
> @@ -843,6 +898,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;
More information about the wine-devel
mailing list