From: Francisco Casas fcasas@codeweavers.com
To make the shader_runner expressive enough to handle SM1 and SM6 shader models on tests, we need to intercept the shader model ranges for which we want to run the tests with the ranges that each backend is capable of running, this is complicated.
So, to make it more clear, the test's shader models are specified individually, and runner->minimum_shader_model and runner->maximum_shader_model are replaced with just runner->current_shader_model.
The supported ranges are removed from the backends (except for d3d12) and their check_requirements functions is always assumed to exist and return either true or false for just a single shader model.
Something that must be kept in mind with these changes is that if two tests with different shader models rely on the same resources, these resources must be either specified twice, or after a [require] directive that includes all the pertaining models. This was necessary for gather.shader_test and gather-offset.shader_test. --- tests/hlsl/all.shader_test | 3 +- tests/hlsl/any.shader_test | 3 +- .../hlsl/arithmetic-float-uniform.shader_test | 3 +- tests/hlsl/arithmetic-float.shader_test | 3 +- tests/hlsl/arithmetic-int.shader_test | 6 +- tests/hlsl/arithmetic-uint.shader_test | 3 +- tests/hlsl/asfloat.shader_test | 3 +- tests/hlsl/asuint.shader_test | 3 +- tests/hlsl/bitwise.shader_test | 3 +- tests/hlsl/bool-cast.shader_test | 3 +- tests/hlsl/bool-semantics.shader_test | 3 +- tests/hlsl/cast-to-float.shader_test | 3 +- tests/hlsl/cast-to-half.shader_test | 3 +- tests/hlsl/cast-to-int.shader_test | 3 +- tests/hlsl/cast-to-uint.shader_test | 3 +- tests/hlsl/cbuffer.shader_test | 6 +- tests/hlsl/combined-samplers.shader_test | 6 +- tests/hlsl/compute.shader_test | 3 +- tests/hlsl/conditional.shader_test | 4 +- tests/hlsl/d3dcolor-to-ubyte4.shader_test | 3 +- tests/hlsl/ddxddy.shader_test | 7 +- tests/hlsl/duplicate-modifiers.shader_test | 3 +- tests/hlsl/entry-point-semantics.shader_test | 10 +- tests/hlsl/floor.shader_test | 3 +- tests/hlsl/function-cast.shader_test | 3 +- tests/hlsl/fwidth.shader_test | 4 +- tests/hlsl/gather-offset.shader_test | 12 +- tests/hlsl/gather.shader_test | 12 +- tests/hlsl/getdimensions.shader_test | 3 +- tests/hlsl/half.shader_test | 3 + .../initializer-implicit-array.shader_test | 6 +- tests/hlsl/initializer-objects.shader_test | 3 +- tests/hlsl/intrinsic-override.shader_test | 2 +- tests/hlsl/is-front-face.shader_test | 3 +- tests/hlsl/ldexp.shader_test | 3 +- tests/hlsl/lerp.shader_test | 3 +- tests/hlsl/load-level.shader_test | 3 +- tests/hlsl/majority-pragma.shader_test | 18 +++ tests/hlsl/matrix-semantics.shader_test | 3 +- tests/hlsl/minimum-precision.shader_test | 3 +- tests/hlsl/nointerpolation.shader_test | 3 +- tests/hlsl/numthreads.shader_test | 3 +- tests/hlsl/object-field-offsets.shader_test | 3 +- tests/hlsl/object-parameters.shader_test | 6 +- tests/hlsl/object-references.shader_test | 6 +- tests/hlsl/register-reservations.shader_test | 6 +- tests/hlsl/sample-grad.shader_test | 3 +- tests/hlsl/sample-level.shader_test | 4 +- tests/hlsl/sampler-offset.shader_test | 3 +- tests/hlsl/sampler.shader_test | 3 + .../shader-interstage-interface.shader_test | 3 +- tests/hlsl/side-effects.shader_test | 3 +- tests/hlsl/sign.shader_test | 3 +- tests/hlsl/static-initializer.shader_test | 3 +- tests/hlsl/struct-array.shader_test | 3 +- tests/hlsl/swizzle-constant-prop.shader_test | 3 +- tests/hlsl/texture-load-offset.shader_test | 3 +- tests/hlsl/texture-load-typed.shader_test | 3 +- tests/hlsl/texture-load.shader_test | 3 +- tests/hlsl/texture-ordering.shader_test | 6 +- tests/hlsl/trunc.shader_test | 3 +- tests/hlsl/uav-load.shader_test | 3 +- tests/hlsl/uav-out-param.shader_test | 3 +- tests/hlsl/uav-rwbuffer.shader_test | 3 +- tests/hlsl/uav-rwstructuredbuffer.shader_test | 3 +- tests/hlsl/uav-rwtexture.shader_test | 3 +- tests/hlsl/uniform-parameters.shader_test | 3 +- tests/shader_runner.c | 103 ++++++++++-------- tests/shader_runner.h | 7 +- tests/shader_runner_d3d11.c | 14 ++- tests/shader_runner_d3d12.c | 35 ++++-- tests/shader_runner_d3d9.c | 11 +- tests/shader_runner_vulkan.c | 14 ++- 73 files changed, 300 insertions(+), 155 deletions(-)
diff --git a/tests/hlsl/all.shader_test b/tests/hlsl/all.shader_test index 564cc5b00..7988e5585 100644 --- a/tests/hlsl/all.shader_test +++ b/tests/hlsl/all.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float4 f; diff --git a/tests/hlsl/any.shader_test b/tests/hlsl/any.shader_test index 9b8b922c9..5863e0cd4 100644 --- a/tests/hlsl/any.shader_test +++ b/tests/hlsl/any.shader_test @@ -49,7 +49,8 @@ todo(sm>=6) draw quad probe all rgba (1.0, 1.0, 1.0, 1.0)
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform uint4 b; diff --git a/tests/hlsl/arithmetic-float-uniform.shader_test b/tests/hlsl/arithmetic-float-uniform.shader_test index 8aaca621a..9d227cb1e 100644 --- a/tests/hlsl/arithmetic-float-uniform.shader_test +++ b/tests/hlsl/arithmetic-float-uniform.shader_test @@ -74,7 +74,8 @@ probe all rgba (5.0, -2.1, 4.0, 0.0) 4
[require] % Infinities are not allowed in SM1 -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float2 a; diff --git a/tests/hlsl/arithmetic-float.shader_test b/tests/hlsl/arithmetic-float.shader_test index 71835082c..304a5d9f0 100644 --- a/tests/hlsl/arithmetic-float.shader_test +++ b/tests/hlsl/arithmetic-float.shader_test @@ -65,7 +65,8 @@ probe all rgba (5.0, -2.1, 4.0, 0.0) 6
[require] % Infinities are not allowed in SM1 -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4 main() : SV_TARGET diff --git a/tests/hlsl/arithmetic-int.shader_test b/tests/hlsl/arithmetic-int.shader_test index f2044c42c..24369e7f5 100644 --- a/tests/hlsl/arithmetic-int.shader_test +++ b/tests/hlsl/arithmetic-int.shader_test @@ -103,9 +103,8 @@ draw quad probe all rgba (0.0, 0.0, 0.0, 0.0)
[require] -shader model >= 4.0 +shader model 4.0 % dxcompiler performs this calculation on unsigned values and emits zero. -shader model < 6.0
[pixel shader] float4 main() : SV_TARGET @@ -121,7 +120,8 @@ draw quad probe all rgba (-2147483648.0, -2147483648.0, -2147483648.0, -2147483648.0)
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4 main() : sv_target diff --git a/tests/hlsl/arithmetic-uint.shader_test b/tests/hlsl/arithmetic-uint.shader_test index c245d447d..143b851f0 100644 --- a/tests/hlsl/arithmetic-uint.shader_test +++ b/tests/hlsl/arithmetic-uint.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4 main() : SV_TARGET diff --git a/tests/hlsl/asfloat.shader_test b/tests/hlsl/asfloat.shader_test index d2c0f9aab..5cb6b1723 100644 --- a/tests/hlsl/asfloat.shader_test +++ b/tests/hlsl/asfloat.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float f; diff --git a/tests/hlsl/asuint.shader_test b/tests/hlsl/asuint.shader_test index 0a2e39e53..e61470fb5 100644 --- a/tests/hlsl/asuint.shader_test +++ b/tests/hlsl/asuint.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float f; diff --git a/tests/hlsl/bitwise.shader_test b/tests/hlsl/bitwise.shader_test index 20a9db55f..8348a3bec 100644 --- a/tests/hlsl/bitwise.shader_test +++ b/tests/hlsl/bitwise.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4 main() : SV_TARGET diff --git a/tests/hlsl/bool-cast.shader_test b/tests/hlsl/bool-cast.shader_test index dc75ea376..eb2aae6ea 100644 --- a/tests/hlsl/bool-cast.shader_test +++ b/tests/hlsl/bool-cast.shader_test @@ -15,7 +15,8 @@ probe all rgba (0.0, 0.0, 1.0, 1.0)
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] diff --git a/tests/hlsl/bool-semantics.shader_test b/tests/hlsl/bool-semantics.shader_test index d8df96a2a..a49bf163b 100644 --- a/tests/hlsl/bool-semantics.shader_test +++ b/tests/hlsl/bool-semantics.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[input layout] 0 r32g32b32a32 uint apple diff --git a/tests/hlsl/cast-to-float.shader_test b/tests/hlsl/cast-to-float.shader_test index 7c32acfa3..58746baae 100644 --- a/tests/hlsl/cast-to-float.shader_test +++ b/tests/hlsl/cast-to-float.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int i; diff --git a/tests/hlsl/cast-to-half.shader_test b/tests/hlsl/cast-to-half.shader_test index 1579c63f3..ce257ed23 100644 --- a/tests/hlsl/cast-to-half.shader_test +++ b/tests/hlsl/cast-to-half.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int i; diff --git a/tests/hlsl/cast-to-int.shader_test b/tests/hlsl/cast-to-int.shader_test index ae566a039..bff1399fe 100644 --- a/tests/hlsl/cast-to-int.shader_test +++ b/tests/hlsl/cast-to-int.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float f; diff --git a/tests/hlsl/cast-to-uint.shader_test b/tests/hlsl/cast-to-uint.shader_test index dece99b75..320293f19 100644 --- a/tests/hlsl/cast-to-uint.shader_test +++ b/tests/hlsl/cast-to-uint.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float f; diff --git a/tests/hlsl/cbuffer.shader_test b/tests/hlsl/cbuffer.shader_test index 59dda97a5..b6be7cdb4 100644 --- a/tests/hlsl/cbuffer.shader_test +++ b/tests/hlsl/cbuffer.shader_test @@ -37,7 +37,8 @@ probe all rgba (1.0, 2.0, 3.0, 4.0) % SM1 buffer offset allocation follows different rules than SM4. % Those would have to be tested separately. [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader fail] @@ -696,7 +697,8 @@ float4 main() : sv_target
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[texture 0] size (1, 1) diff --git a/tests/hlsl/combined-samplers.shader_test b/tests/hlsl/combined-samplers.shader_test index 235537594..24077297d 100644 --- a/tests/hlsl/combined-samplers.shader_test +++ b/tests/hlsl/combined-samplers.shader_test @@ -1,6 +1,5 @@ [require] -shader model >= 4.0 -shader model < 6.0 +shader model 4.0 options: backcompat
@@ -134,8 +133,7 @@ probe all rgba (1, 1, 1, 11)
[require] -shader model >= 5.0 -shader model < 6.0 +shader model 5.0 options: backcompat
diff --git a/tests/hlsl/compute.shader_test b/tests/hlsl/compute.shader_test index 2f2af9fc8..78bbb0e39 100644 --- a/tests/hlsl/compute.shader_test +++ b/tests/hlsl/compute.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[uav 0] format r32 float diff --git a/tests/hlsl/conditional.shader_test b/tests/hlsl/conditional.shader_test index 4175813bd..6d9bc5a2f 100644 --- a/tests/hlsl/conditional.shader_test +++ b/tests/hlsl/conditional.shader_test @@ -72,7 +72,9 @@ float main() : sv_target
% Using older profiles fails to compile with forced control flow instruction [require] -shader model >= 3.0 +shader model 3.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float4 u; diff --git a/tests/hlsl/d3dcolor-to-ubyte4.shader_test b/tests/hlsl/d3dcolor-to-ubyte4.shader_test index 01b7f2f64..2e20d8d66 100644 --- a/tests/hlsl/d3dcolor-to-ubyte4.shader_test +++ b/tests/hlsl/d3dcolor-to-ubyte4.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform float4 u; diff --git a/tests/hlsl/ddxddy.shader_test b/tests/hlsl/ddxddy.shader_test index ba7215ca0..aecf22ea3 100644 --- a/tests/hlsl/ddxddy.shader_test +++ b/tests/hlsl/ddxddy.shader_test @@ -1,5 +1,7 @@ [require] -shader model >= 3.0 +shader model 3.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4 main(float4 pos : sv_position) : sv_target @@ -40,7 +42,8 @@ probe (150, 150) rgba (-226.0, -47.0, 45.0, 0.0)
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader] diff --git a/tests/hlsl/duplicate-modifiers.shader_test b/tests/hlsl/duplicate-modifiers.shader_test index bf1d9c1b8..c4184e3cd 100644 --- a/tests/hlsl/duplicate-modifiers.shader_test +++ b/tests/hlsl/duplicate-modifiers.shader_test @@ -1,6 +1,7 @@ % Returns (0.1, 0.3, 0.2, 0.4) with dxcompiler [require] -shader model < 6.0 +shader model 2.0 +shader model 4.0
[pixel shader] typedef const precise row_major float2x2 mat_t; diff --git a/tests/hlsl/entry-point-semantics.shader_test b/tests/hlsl/entry-point-semantics.shader_test index d177b0376..3836cbaa2 100644 --- a/tests/hlsl/entry-point-semantics.shader_test +++ b/tests/hlsl/entry-point-semantics.shader_test @@ -106,7 +106,8 @@ probe (0, 0) rgba (10.0, 11.0, 30.0, 31.0)
% dxcompiler emits correct array addressing. [require] -shader model < 6.0 +shader model 2.0 +shader model 4.0
% Arrays (even multi-dimensional) of struct elements are allowed. The fields in the different struct @@ -151,7 +152,9 @@ todo(sm>=6) probe (0, 0) rgba (10.0, 11.0, 20.0, 21.0)
[require] -% reset requirements +shader model 2.0 +shader model 4.0 +shader model 6.0
[pixel shader fail] @@ -301,7 +304,8 @@ float4 main(in uint2 a : TEXCOORD0, in int2 b : TEXCOORD0, in int2x1 c : TEXCOOR
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader fail] diff --git a/tests/hlsl/floor.shader_test b/tests/hlsl/floor.shader_test index deb9acf91..302190036 100644 --- a/tests/hlsl/floor.shader_test +++ b/tests/hlsl/floor.shader_test @@ -28,7 +28,8 @@ todo(sm>=6) draw quad probe all rgba (6.0, 7.0, -1.0, 3.0) 4
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int4 u; diff --git a/tests/hlsl/function-cast.shader_test b/tests/hlsl/function-cast.shader_test index a2b9cf4f4..093b97692 100644 --- a/tests/hlsl/function-cast.shader_test +++ b/tests/hlsl/function-cast.shader_test @@ -70,7 +70,8 @@ todo draw quad probe all rgba (-1.0, -1.0, 2.0, 4.0)
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader todo] uniform int4 i; diff --git a/tests/hlsl/fwidth.shader_test b/tests/hlsl/fwidth.shader_test index d4c20f4e0..3baa29a06 100644 --- a/tests/hlsl/fwidth.shader_test +++ b/tests/hlsl/fwidth.shader_test @@ -1,5 +1,7 @@ [require] -shader model >= 3.0 +shader model 3.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4 main(float4 pos : sv_position) : sv_target diff --git a/tests/hlsl/gather-offset.shader_test b/tests/hlsl/gather-offset.shader_test index 6360d1fc8..cc414e3e0 100644 --- a/tests/hlsl/gather-offset.shader_test +++ b/tests/hlsl/gather-offset.shader_test @@ -1,5 +1,7 @@ [require] -shader model >= 4.1 +shader model 4.1 +shader model 5.0 +shader model 6.0
[sampler 0] @@ -13,6 +15,11 @@ size (3, 3) 0.0 0.2 0.0 0.4 0.1 0.2 0.5 0.0 0.2 0.2 0.0 0.4
+[require] +shader model 4.1 +shader model 6.0 + + [pixel shader] sampler s; Texture2D t; @@ -42,7 +49,8 @@ probe all rgba (0.0, 0.1, 0.1, 0.0)
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader] diff --git a/tests/hlsl/gather.shader_test b/tests/hlsl/gather.shader_test index 9cfc2d599..7eeee39a0 100644 --- a/tests/hlsl/gather.shader_test +++ b/tests/hlsl/gather.shader_test @@ -1,5 +1,7 @@ [require] -shader model >= 4.1 +shader model 4.1 +shader model 5.0 +shader model 6.0
[sampler 0] @@ -13,6 +15,11 @@ size (3, 3) 0.0 0.2 0.0 0.4 0.1 0.2 0.5 0.0 0.2 0.2 0.0 0.4
+[require] +shader model 4.1 +shader model 6.0 + + [pixel shader] sampler s; Texture2D t; @@ -42,7 +49,8 @@ probe all rgba (0.1, 0.2, 0.2, 0.1)
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader] diff --git a/tests/hlsl/getdimensions.shader_test b/tests/hlsl/getdimensions.shader_test index 01d12f87a..b068d668a 100644 --- a/tests/hlsl/getdimensions.shader_test +++ b/tests/hlsl/getdimensions.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] size (2, 3) diff --git a/tests/hlsl/half.shader_test b/tests/hlsl/half.shader_test index 956102359..29f299fff 100644 --- a/tests/hlsl/half.shader_test +++ b/tests/hlsl/half.shader_test @@ -7,6 +7,9 @@ float4 main() : sv_target }
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: backcompat
[pixel shader] diff --git a/tests/hlsl/initializer-implicit-array.shader_test b/tests/hlsl/initializer-implicit-array.shader_test index fff2b8fdf..094abb08f 100644 --- a/tests/hlsl/initializer-implicit-array.shader_test +++ b/tests/hlsl/initializer-implicit-array.shader_test @@ -13,7 +13,8 @@ probe all rgba (50, 60, 70, 80)
% dxcompiler emits a nop shader which returns immediately. [require] -shader model < 6.0 +shader model 2.0 +shader model 4.0
[pixel shader] float4 main() : sv_target @@ -198,7 +199,8 @@ float4 main() : sv_target
% dxcompiler crashes. [require] -shader model < 6.0 +shader model 2.0 +shader model 4.0
[pixel shader fail] diff --git a/tests/hlsl/initializer-objects.shader_test b/tests/hlsl/initializer-objects.shader_test index 514a7cebb..9b2b86f44 100644 --- a/tests/hlsl/initializer-objects.shader_test +++ b/tests/hlsl/initializer-objects.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] size (3, 3) diff --git a/tests/hlsl/intrinsic-override.shader_test b/tests/hlsl/intrinsic-override.shader_test index b95f80e7f..852a65474 100644 --- a/tests/hlsl/intrinsic-override.shader_test +++ b/tests/hlsl/intrinsic-override.shader_test @@ -32,7 +32,7 @@ probe all rgba (0.3, 0.3, 0.3, 0.4)
[require] -shader model >= 6.0 +shader model 6.0
[pixel shader]
diff --git a/tests/hlsl/is-front-face.shader_test b/tests/hlsl/is-front-face.shader_test index 162d4e634..4464df6d2 100644 --- a/tests/hlsl/is-front-face.shader_test +++ b/tests/hlsl/is-front-face.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[input layout] 0 r32g32 float sv_position diff --git a/tests/hlsl/ldexp.shader_test b/tests/hlsl/ldexp.shader_test index 2db624067..e784748c0 100644 --- a/tests/hlsl/ldexp.shader_test +++ b/tests/hlsl/ldexp.shader_test @@ -14,7 +14,8 @@ todo(sm>=6) draw quad probe all rgba (2.0, 0.00292968750, 4096.0, 6.33825300e+030) 2
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int4 x; diff --git a/tests/hlsl/lerp.shader_test b/tests/hlsl/lerp.shader_test index 27c45fe7d..aed7a5dc9 100644 --- a/tests/hlsl/lerp.shader_test +++ b/tests/hlsl/lerp.shader_test @@ -16,7 +16,8 @@ todo(sm>=6) draw quad probe all rgba (2.0, -10.0, -2.0, 76.25)
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int4 x; diff --git a/tests/hlsl/load-level.shader_test b/tests/hlsl/load-level.shader_test index 9df2f01fb..3e2b30a77 100644 --- a/tests/hlsl/load-level.shader_test +++ b/tests/hlsl/load-level.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] size (2, 2) diff --git a/tests/hlsl/majority-pragma.shader_test b/tests/hlsl/majority-pragma.shader_test index f7baa90b9..a6298ed3a 100644 --- a/tests/hlsl/majority-pragma.shader_test +++ b/tests/hlsl/majority-pragma.shader_test @@ -226,6 +226,9 @@ probe all rgba (0.3, 0.4, 0.5, 0.6)
% Compiler options [require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: row-major
[pixel shader] @@ -249,6 +252,9 @@ todo(sm>=6) draw quad probe all rgba (0.2, 0.3, 0.6, 0.7) 1
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: column-major
[pixel shader] @@ -271,6 +277,9 @@ todo(sm>=6) draw quad probe all rgba (0.2, 0.3, 0.6, 0.7) 1
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: row-major
[pixel shader] @@ -293,6 +302,9 @@ todo(sm>=6) draw quad probe all rgba (0.5, 0.9, 0.6, 1.0) 1
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: column-major
[pixel shader] @@ -321,6 +333,9 @@ todo(sm>=6) draw quad probe all rgba (0.3, 0.4, 2.5, 2.9) 1
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: row-major
[pixel shader] @@ -349,6 +364,9 @@ todo(sm>=6) draw quad probe all rgba (1.2, 1.6, 3.1, 3.2) 1
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: column-major row-major
[pixel shader] diff --git a/tests/hlsl/matrix-semantics.shader_test b/tests/hlsl/matrix-semantics.shader_test index e19b6b48c..f5f32d9e2 100644 --- a/tests/hlsl/matrix-semantics.shader_test +++ b/tests/hlsl/matrix-semantics.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] float4x1 main() : sv_target diff --git a/tests/hlsl/minimum-precision.shader_test b/tests/hlsl/minimum-precision.shader_test index e5053e3d1..0bb608f86 100644 --- a/tests/hlsl/minimum-precision.shader_test +++ b/tests/hlsl/minimum-precision.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] diff --git a/tests/hlsl/nointerpolation.shader_test b/tests/hlsl/nointerpolation.shader_test index a3c9edfd1..ff9b0d191 100644 --- a/tests/hlsl/nointerpolation.shader_test +++ b/tests/hlsl/nointerpolation.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[input layout] 0 r32g32b32a32 float texcoord diff --git a/tests/hlsl/numthreads.shader_test b/tests/hlsl/numthreads.shader_test index fb11dc480..09850f456 100644 --- a/tests/hlsl/numthreads.shader_test +++ b/tests/hlsl/numthreads.shader_test @@ -1,7 +1,8 @@ % Test allowed syntax for the "numthreads" attribute.
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[compute shader]
diff --git a/tests/hlsl/object-field-offsets.shader_test b/tests/hlsl/object-field-offsets.shader_test index d1741c3e4..eebd1c790 100644 --- a/tests/hlsl/object-field-offsets.shader_test +++ b/tests/hlsl/object-field-offsets.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader] struct apple { diff --git a/tests/hlsl/object-parameters.shader_test b/tests/hlsl/object-parameters.shader_test index 0d279fb27..2e049aef8 100644 --- a/tests/hlsl/object-parameters.shader_test +++ b/tests/hlsl/object-parameters.shader_test @@ -9,7 +9,8 @@ float4 main(out Texture2D tex : TEXTURE) : sv_target
% dxcompiler crashes. [require] -shader model < 6.0 +shader model 2.0 +shader model 4.0
[pixel shader fail todo] @@ -25,7 +26,8 @@ float4 main(inout params x) : sv_target
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader todo fail(sm>=6)] diff --git a/tests/hlsl/object-references.shader_test b/tests/hlsl/object-references.shader_test index ff405559c..0fec47089 100644 --- a/tests/hlsl/object-references.shader_test +++ b/tests/hlsl/object-references.shader_test @@ -11,7 +11,8 @@ float4 main() : sv_target
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] @@ -216,7 +217,8 @@ float4 main(Texture2D tex2) : sv_target
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[texture 0] diff --git a/tests/hlsl/register-reservations.shader_test b/tests/hlsl/register-reservations.shader_test index 9539b05ff..c2c0ad0fd 100644 --- a/tests/hlsl/register-reservations.shader_test +++ b/tests/hlsl/register-reservations.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] @@ -159,7 +160,8 @@ probe all rgba (2.0, 2.0, 2.0, 99.0)
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[texture 0] size (2, 2) diff --git a/tests/hlsl/sample-grad.shader_test b/tests/hlsl/sample-grad.shader_test index 298037a77..bbad6efee 100644 --- a/tests/hlsl/sample-grad.shader_test +++ b/tests/hlsl/sample-grad.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[sampler 0] filter linear linear linear diff --git a/tests/hlsl/sample-level.shader_test b/tests/hlsl/sample-level.shader_test index c91c65493..1a252da69 100644 --- a/tests/hlsl/sample-level.shader_test +++ b/tests/hlsl/sample-level.shader_test @@ -1,5 +1,7 @@ [require] -shader model >= 3.0 +shader model 3.0 +shader model 4.0 +shader model 6.0
[sampler 0] filter linear linear linear diff --git a/tests/hlsl/sampler-offset.shader_test b/tests/hlsl/sampler-offset.shader_test index 498a8ed3a..128055c38 100644 --- a/tests/hlsl/sampler-offset.shader_test +++ b/tests/hlsl/sampler-offset.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[sampler 0] filter point point point diff --git a/tests/hlsl/sampler.shader_test b/tests/hlsl/sampler.shader_test index caff7b2fa..a56033e3c 100644 --- a/tests/hlsl/sampler.shader_test +++ b/tests/hlsl/sampler.shader_test @@ -51,6 +51,9 @@ float4 main() : sv_target }
[require] +shader model 2.0 +shader model 4.0 +shader model 6.0 options: backcompat
[pixel shader fail(sm>=6)] diff --git a/tests/hlsl/shader-interstage-interface.shader_test b/tests/hlsl/shader-interstage-interface.shader_test index 271eb3bbe..22f66e3b3 100644 --- a/tests/hlsl/shader-interstage-interface.shader_test +++ b/tests/hlsl/shader-interstage-interface.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[input layout] 0 r32g32 float SV_POSITION diff --git a/tests/hlsl/side-effects.shader_test b/tests/hlsl/side-effects.shader_test index f41e98510..0b6515c1b 100644 --- a/tests/hlsl/side-effects.shader_test +++ b/tests/hlsl/side-effects.shader_test @@ -29,7 +29,8 @@ probe all rgba (11.0, 11.0, 11.0, 11.0)
% dxcompiler performs the first call to func() before the array index call. [require] -shader model < 6.0 +shader model 2.0 +shader model 4.0
[pixel shader] diff --git a/tests/hlsl/sign.shader_test b/tests/hlsl/sign.shader_test index 54b953681..6adca4b72 100644 --- a/tests/hlsl/sign.shader_test +++ b/tests/hlsl/sign.shader_test @@ -46,7 +46,8 @@ probe all rgba (1.0, 1.0, 1.0, 1.0)
[require] % SM1-3 doesn't support integral types -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int f; diff --git a/tests/hlsl/static-initializer.shader_test b/tests/hlsl/static-initializer.shader_test index 217444308..d9aecfd48 100644 --- a/tests/hlsl/static-initializer.shader_test +++ b/tests/hlsl/static-initializer.shader_test @@ -167,7 +167,8 @@ probe all rgba (1, 2, 3, 4)
[require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[uav 1] diff --git a/tests/hlsl/struct-array.shader_test b/tests/hlsl/struct-array.shader_test index 4097f3835..45a1a9f50 100644 --- a/tests/hlsl/struct-array.shader_test +++ b/tests/hlsl/struct-array.shader_test @@ -1,7 +1,8 @@ % In SM4, array elements are always aligned to the next vec4, although structs are not.
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform struct diff --git a/tests/hlsl/swizzle-constant-prop.shader_test b/tests/hlsl/swizzle-constant-prop.shader_test index a0ec18e45..1af18d1c4 100644 --- a/tests/hlsl/swizzle-constant-prop.shader_test +++ b/tests/hlsl/swizzle-constant-prop.shader_test @@ -2,7 +2,8 @@ % make sure that we can do so.
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] diff --git a/tests/hlsl/texture-load-offset.shader_test b/tests/hlsl/texture-load-offset.shader_test index f32b2191f..7c972f98f 100644 --- a/tests/hlsl/texture-load-offset.shader_test +++ b/tests/hlsl/texture-load-offset.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] size (3, 3) diff --git a/tests/hlsl/texture-load-typed.shader_test b/tests/hlsl/texture-load-typed.shader_test index 67a13f10d..4e2194109 100644 --- a/tests/hlsl/texture-load-typed.shader_test +++ b/tests/hlsl/texture-load-typed.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader fail] texture<float> t; diff --git a/tests/hlsl/texture-load.shader_test b/tests/hlsl/texture-load.shader_test index 8609828b8..a3bfe858f 100644 --- a/tests/hlsl/texture-load.shader_test +++ b/tests/hlsl/texture-load.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[texture 0] size (2, 2) diff --git a/tests/hlsl/texture-ordering.shader_test b/tests/hlsl/texture-ordering.shader_test index 24cd986ca..c6253e63d 100644 --- a/tests/hlsl/texture-ordering.shader_test +++ b/tests/hlsl/texture-ordering.shader_test @@ -1,6 +1,5 @@ [require] -shader model >= 4.0 -shader model < 6.0 +shader model 4.0
[sampler 0] filter linear linear linear @@ -85,8 +84,7 @@ size (1, 1) % table, and may be larger than the "bind count".
[require] -shader model >= 4.0 -shader model < 6.0 +shader model 4.0 options: backcompat
[pixel shader] diff --git a/tests/hlsl/trunc.shader_test b/tests/hlsl/trunc.shader_test index a359cd03a..9e471a8bd 100644 --- a/tests/hlsl/trunc.shader_test +++ b/tests/hlsl/trunc.shader_test @@ -31,7 +31,8 @@ todo(sm>=6) draw quad probe all rgba (6.0, 7.0, 0.0, 3.0)
[require] -shader model >= 4.0 +shader model 4.0 +shader model 6.0
[pixel shader] uniform int4 u; diff --git a/tests/hlsl/uav-load.shader_test b/tests/hlsl/uav-load.shader_test index 9088ffa0d..0da5f5406 100644 --- a/tests/hlsl/uav-load.shader_test +++ b/tests/hlsl/uav-load.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[uav 0] format r32 float diff --git a/tests/hlsl/uav-out-param.shader_test b/tests/hlsl/uav-out-param.shader_test index 796c4bf1f..c9a2e4ea5 100644 --- a/tests/hlsl/uav-out-param.shader_test +++ b/tests/hlsl/uav-out-param.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[uav 0] format r32g32b32a32 float diff --git a/tests/hlsl/uav-rwbuffer.shader_test b/tests/hlsl/uav-rwbuffer.shader_test index b476c7854..959b8c998 100644 --- a/tests/hlsl/uav-rwbuffer.shader_test +++ b/tests/hlsl/uav-rwbuffer.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
% UAVs are implicitly allocated starting from the highest render target slot. % They cannot overlap render target slots, and also cannot be allocated any diff --git a/tests/hlsl/uav-rwstructuredbuffer.shader_test b/tests/hlsl/uav-rwstructuredbuffer.shader_test index 904d15514..0e0d9eaa6 100644 --- a/tests/hlsl/uav-rwstructuredbuffer.shader_test +++ b/tests/hlsl/uav-rwstructuredbuffer.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader todo] struct s diff --git a/tests/hlsl/uav-rwtexture.shader_test b/tests/hlsl/uav-rwtexture.shader_test index 76535bd59..1589177c1 100644 --- a/tests/hlsl/uav-rwtexture.shader_test +++ b/tests/hlsl/uav-rwtexture.shader_test @@ -1,5 +1,6 @@ [require] -shader model >= 5.0 +shader model 5.0 +shader model 6.0
[pixel shader fail(sm<6)] RWTexture2D<float4> u; diff --git a/tests/hlsl/uniform-parameters.shader_test b/tests/hlsl/uniform-parameters.shader_test index 1951987f0..08a4e60c7 100644 --- a/tests/hlsl/uniform-parameters.shader_test +++ b/tests/hlsl/uniform-parameters.shader_test @@ -1,8 +1,7 @@ % 'uniform' in the parameter list is not supported in SM >= 6.0.
[require] -shader model >= 4.0 -shader model < 6.0 +shader model 4.0
[pixel shader] float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv_target diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 59c1408c4..fa631588d 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -64,6 +64,17 @@ typedef int HRESULT;
struct test_options test_options = {0};
+static const char *const model_strings[] = +{ + [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", +}; + void fatal_error(const char *format, ...) { va_list args; @@ -128,39 +139,18 @@ static bool match_directive_substring(const char *line, const char *token, const return true; }
-static void parse_require_directive(struct shader_runner *runner, const char *line) +static void parse_require_directive(struct shader_runner *runner, const char *line, bool *skip_tests) { - bool less_than = false; unsigned int i;
- if (match_string(line, "shader model >=", &line) - || (less_than = match_string(line, "shader model <", &line))) + if (match_string(line, "shader model", &line)) { - static const char *const model_strings[] = - { - [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", - }; - for (i = 0; i < ARRAY_SIZE(model_strings); ++i) { if (match_string(line, model_strings[i], &line)) { - if (less_than) - { - if (!i) - fatal_error("Shader model < '%s' is invalid.\n", line); - runner->maximum_shader_model = min(runner->maximum_shader_model, i - 1); - } - else - { - runner->minimum_shader_model = max(runner->minimum_shader_model, i); - } + if (i == runner->current_shader_model) + *skip_tests = false; return; } } @@ -499,9 +489,9 @@ static void parse_test_directive(struct shader_runner *runner, const char *line) if (match_string(line, "todo", &line)) runner->is_todo = true; else if (match_string(line, "todo(sm<6)", &line)) - runner->is_todo = runner->minimum_shader_model < SHADER_MODEL_6_0; + runner->is_todo = runner->current_shader_model < SHADER_MODEL_6_0; else if (match_string(line, "todo(sm>=6)", &line)) - runner->is_todo = runner->minimum_shader_model >= SHADER_MODEL_6_0; + runner->is_todo = runner->current_shader_model >= SHADER_MODEL_6_0;
if (match_string(line, "dispatch", &line)) { @@ -937,7 +927,7 @@ result_release: static void compile_shader(struct shader_runner *runner, IDxcCompiler3 *dxc_compiler, const char *source, size_t len, enum shader_type type, HRESULT expect) { - bool use_dxcompiler = runner->minimum_shader_model >= SHADER_MODEL_6_0; + bool use_dxcompiler = runner->current_shader_model >= SHADER_MODEL_6_0; ID3D10Blob *blob = NULL, *errors = NULL; char profile[7]; HRESULT hr; @@ -960,7 +950,7 @@ static void compile_shader(struct shader_runner *runner, IDxcCompiler3 *dxc_comp } 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->current_shader_model]); hr = D3DCompile(source, len, NULL, NULL, NULL, "main", profile, runner->compile_options, 0, &blob, &errors); } hr = map_unidentified_hrs(hr); @@ -990,7 +980,7 @@ static enum parse_state read_shader_directive(struct shader_runner *runner, enum /* 'todo' is not meaningful when dxcompiler is in use, so it has no '(sm<6) qualifier. */ if (match_directive_substring(src, "todo", &src)) { - if (runner->minimum_shader_model >= SHADER_MODEL_6_0) + if (runner->current_shader_model >= SHADER_MODEL_6_0) continue; if (state == STATE_SHADER_COMPUTE) state = STATE_SHADER_COMPUTE_TODO; @@ -1005,17 +995,17 @@ static enum parse_state read_shader_directive(struct shader_runner *runner, enum } else if (match_directive_substring(src, "fail(sm<6)", &src)) { - if (runner->minimum_shader_model < SHADER_MODEL_6_0) + if (runner->current_shader_model < SHADER_MODEL_6_0) *expect_hr = E_FAIL; } else if (match_directive_substring(src, "fail(sm>=6)", &src)) { - if (runner->minimum_shader_model >= SHADER_MODEL_6_0) + if (runner->current_shader_model >= SHADER_MODEL_6_0) *expect_hr = E_FAIL; } else if (match_directive_substring(src, "notimpl(sm<6)", &src)) { - if (runner->minimum_shader_model < SHADER_MODEL_6_0) + if (runner->current_shader_model < SHADER_MODEL_6_0) *expect_hr = E_NOTIMPL; } else @@ -1030,8 +1020,8 @@ static enum parse_state read_shader_directive(struct shader_runner *runner, enum return state; }
-void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, void *dxc_compiler, - enum shader_model minimum_shader_model, enum shader_model maximum_shader_model) +static void run_shader_tests_with_model(struct shader_runner *runner, const struct shader_runner_ops *ops, + void *dxc_compiler, enum shader_model model) { size_t shader_source_size = 0, shader_source_len = 0; struct resource_params current_resource; @@ -1040,8 +1030,8 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o unsigned int i, line_number = 0; char *shader_source = NULL; HRESULT expect_hr = S_OK; - bool skip_tests = false; char line_buffer[256]; + bool skip_tests; FILE *f;
if (!test_options.filename) @@ -1052,8 +1042,21 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o
memset(runner, 0, sizeof(*runner)); runner->ops = ops; - runner->minimum_shader_model = minimum_shader_model; - runner->maximum_shader_model = maximum_shader_model; + + runner->current_shader_model = model; + + /* Default shader models. */ + skip_tests = true; + if (runner->current_shader_model == SHADER_MODEL_2_0) + skip_tests = false; + if (runner->current_shader_model == SHADER_MODEL_4_0) + skip_tests = false; + if (runner->current_shader_model == SHADER_MODEL_6_0) + skip_tests = false; + + assert(runner->ops->check_requirements); + if (!runner->ops->check_requirements(runner)) + skip_tests = true;
for (;;) { @@ -1073,11 +1076,9 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o break;
case STATE_REQUIRE: - if (runner->maximum_shader_model < runner->minimum_shader_model - || (runner->ops->check_requirements && !runner->ops->check_requirements(runner))) - { + if (!runner->ops->check_requirements(runner)) skip_tests = true; - } + break;
case STATE_RESOURCE: @@ -1215,10 +1216,8 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o else if (!strcmp(line, "[require]\n")) { state = STATE_REQUIRE; - runner->minimum_shader_model = minimum_shader_model; - runner->maximum_shader_model = maximum_shader_model; runner->compile_options = 0; - skip_tests = false; + skip_tests = true; } else if (match_directive_substring(line, "[pixel shader", &line)) { @@ -1365,7 +1364,7 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o }
case STATE_REQUIRE: - parse_require_directive(runner, line); + parse_require_directive(runner, line, &skip_tests); break;
case STATE_RESOURCE: @@ -1400,6 +1399,18 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o fclose(f); }
+void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, void *dxc_compiler) +{ + unsigned int i; + + for (i = SHADER_MODEL_2_0; i <= SHADER_MODEL_6_0; ++i) + { + vkd3d_test_push_context("Model %s", model_strings[i]); + run_shader_tests_with_model(runner, ops, dxc_compiler, i); + vkd3d_test_pop_context(); + } +} + #ifdef _WIN32 static void print_dll_version(const char *file_name) { diff --git a/tests/shader_runner.h b/tests/shader_runner.h index 3efbcf362..90202c6a7 100644 --- a/tests/shader_runner.h +++ b/tests/shader_runner.h @@ -118,8 +118,8 @@ struct shader_runner char *vs_source; char *ps_source; char *cs_source; - enum shader_model minimum_shader_model; - enum shader_model maximum_shader_model; + + enum shader_model current_shader_model;
bool last_render_failed;
@@ -163,8 +163,7 @@ void init_resource(struct resource *resource, const struct resource_params *para HRESULT dxc_compiler_compile_shader(void *dxc_compiler, enum shader_type type, unsigned int compile_options, const char *hlsl, ID3D10Blob **blob_out, ID3D10Blob **errors_out);
-void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, void *dxc_compiler, - enum shader_model minimum_shader_model, enum shader_model maximum_shader_model); +void run_shader_tests(struct shader_runner *runner, const struct shader_runner_ops *ops, void *dxc_compiler);
#ifdef _WIN32 void run_shader_tests_d3d9(void); diff --git a/tests/shader_runner_d3d11.c b/tests/shader_runner_d3d11.c index bd9d363ce..fa05b7491 100644 --- a/tests/shader_runner_d3d11.c +++ b/tests/shader_runner_d3d11.c @@ -80,15 +80,13 @@ static ID3D10Blob *compile_shader(const struct d3d11_shader_runner *runner, cons
static const char *const shader_models[] = { - [SHADER_MODEL_2_0] = "4_0", - [SHADER_MODEL_3_0] = "4_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", };
- sprintf(profile, "%s_%s", type, shader_models[runner->r.minimum_shader_model]); + sprintf(profile, "%s_%s", type, shader_models[runner->r.current_shader_model]); hr = D3DCompile(source, strlen(source), NULL, NULL, NULL, "main", profile, runner->r.compile_options, 0, &blob, &errors); ok(hr == S_OK, "Failed to compile shader, hr %#lx.\n", hr); if (errors) @@ -100,6 +98,13 @@ static ID3D10Blob *compile_shader(const struct d3d11_shader_runner *runner, cons return blob; }
+static bool d3d11_runner_check_requirements(struct shader_runner *r) +{ + enum shader_model model = r->current_shader_model; + + return (SHADER_MODEL_4_0 <= model) && (model < SHADER_MODEL_6_0); +} + static IDXGIAdapter *create_adapter(void) { IDXGIFactory4 *factory4; @@ -724,6 +729,7 @@ static void d3d11_runner_release_readback(struct shader_runner *r, struct resour
static const struct shader_runner_ops d3d11_runner_ops = { + .check_requirements = d3d11_runner_check_requirements, .create_resource = d3d11_runner_create_resource, .destroy_resource = d3d11_runner_destroy_resource, .dispatch = d3d11_runner_dispatch, @@ -747,7 +753,7 @@ void run_shader_tests_d3d11(void) init_adapter_info(); if (init_test_context(&runner)) { - run_shader_tests(&runner.r, &d3d11_runner_ops, NULL, SHADER_MODEL_2_0, SHADER_MODEL_5_1); + run_shader_tests(&runner.r, &d3d11_runner_ops, NULL); destroy_test_context(&runner); } } diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index 8453617ef..1427aac79 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -45,6 +45,9 @@ struct d3d12_shader_runner
struct test_context test_context;
+ enum shader_model minimum_shader_model; + enum shader_model maximum_shader_model; + ID3D12DescriptorHeap *heap, *rtv_heap;
ID3D12CommandQueue *compute_queue; @@ -67,8 +70,6 @@ static ID3D10Blob *compile_shader(const struct d3d12_shader_runner *runner, cons
static const char *const shader_models[] = { - [SHADER_MODEL_2_0] = "4_0", - [SHADER_MODEL_3_0] = "4_0", [SHADER_MODEL_4_0] = "4_0", [SHADER_MODEL_4_1] = "4_1", [SHADER_MODEL_5_0] = "5_0", @@ -76,14 +77,15 @@ static ID3D10Blob *compile_shader(const struct d3d12_shader_runner *runner, cons [SHADER_MODEL_6_0] = "6_0", };
- if (runner->r.minimum_shader_model >= SHADER_MODEL_6_0) + + if (runner->r.current_shader_model >= SHADER_MODEL_6_0) { assert(runner->dxc_compiler); hr = dxc_compiler_compile_shader(runner->dxc_compiler, type, runner->r.compile_options, source, &blob, &errors); } else { - sprintf(profile, "%s_%s", shader_type_string(type), shader_models[runner->r.minimum_shader_model]); + sprintf(profile, "%s_%s", shader_type_string(type), shader_models[runner->r.current_shader_model]); hr = D3DCompile(source, strlen(source), NULL, NULL, NULL, "main", profile, runner->r.compile_options, 0, &blob, &errors); } ok(FAILED(hr) == !blob, "Got unexpected hr %#x, blob %p.\n", hr, blob); @@ -96,6 +98,22 @@ static ID3D10Blob *compile_shader(const struct d3d12_shader_runner *runner, cons return blob; }
+static bool d3d12_runner_check_requirements(struct shader_runner *r) +{ + struct d3d12_shader_runner *runner = d3d12_shader_runner(r); + enum shader_model model = r->current_shader_model; + + if (model < runner->minimum_shader_model) + return false; + if (model > runner->maximum_shader_model) + return false; + + if (!runner->dxc_compiler) + return (SHADER_MODEL_4_0 <= model) && (model < SHADER_MODEL_6_0); + else + return (SHADER_MODEL_4_0 <= model) && (model <= SHADER_MODEL_6_0); +} + #define MAX_RESOURCE_DESCRIPTORS (MAX_RESOURCES * 2)
static struct resource *d3d12_runner_create_resource(struct shader_runner *r, const struct resource_params *params) @@ -323,7 +341,7 @@ static bool d3d12_runner_dispatch(struct shader_runner *r, unsigned int x, unsig size_t i;
cs_code = compile_shader(runner, runner->r.cs_source, SHADER_TYPE_CS); - todo_if(runner->r.is_todo && runner->r.minimum_shader_model < SHADER_MODEL_6_0) ok(cs_code, "Failed to compile shader.\n"); + todo_if(runner->r.is_todo && runner->r.current_shader_model < SHADER_MODEL_6_0) ok(cs_code, "Failed to compile shader.\n"); if (!cs_code) return false;
@@ -407,7 +425,7 @@ static bool d3d12_runner_draw(struct shader_runner *r,
ps_code = compile_shader(runner, runner->r.ps_source, SHADER_TYPE_PS); vs_code = compile_shader(runner, runner->r.vs_source, SHADER_TYPE_VS); - todo_if(runner->r.is_todo && runner->r.minimum_shader_model < SHADER_MODEL_6_0) + todo_if(runner->r.is_todo && runner->r.current_shader_model < SHADER_MODEL_6_0) ok(ps_code && vs_code, "Failed to compile shaders.\n");
if (!ps_code || !vs_code) @@ -567,6 +585,7 @@ static void d3d12_runner_release_readback(struct shader_runner *r, struct resour
static const struct shader_runner_ops d3d12_runner_ops = { + .check_requirements = d3d12_runner_check_requirements, .create_resource = d3d12_runner_create_resource, .destroy_resource = d3d12_runner_destroy_resource, .dispatch = d3d12_runner_dispatch, @@ -596,6 +615,8 @@ void run_shader_tests_d3d12(void *dxc_compiler, enum shader_model minimum_shader device = runner.test_context.device;
runner.dxc_compiler = dxc_compiler; + runner.minimum_shader_model = minimum_shader_model; + runner.maximum_shader_model = maximum_shader_model;
runner.compute_queue = create_command_queue(device, D3D12_COMMAND_LIST_TYPE_COMPUTE, D3D12_COMMAND_QUEUE_PRIORITY_NORMAL); @@ -608,7 +629,7 @@ void run_shader_tests_d3d12(void *dxc_compiler, enum shader_model minimum_shader runner.compute_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&runner.compute_list); ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
- run_shader_tests(&runner.r, &d3d12_runner_ops, dxc_compiler, minimum_shader_model, maximum_shader_model); + run_shader_tests(&runner.r, &d3d12_runner_ops, dxc_compiler);
ID3D12GraphicsCommandList_Release(runner.compute_list); ID3D12CommandAllocator_Release(runner.compute_allocator); diff --git a/tests/shader_runner_d3d9.c b/tests/shader_runner_d3d9.c index 0b33c1c53..fe7abc327 100644 --- a/tests/shader_runner_d3d9.c +++ b/tests/shader_runner_d3d9.c @@ -68,7 +68,7 @@ static ID3D10Blob *compile_shader(const struct d3d9_shader_runner *runner, const [SHADER_MODEL_3_0] = "3_0", };
- sprintf(profile, "%s_%s", type, shader_models[runner->r.minimum_shader_model]); + sprintf(profile, "%s_%s", type, shader_models[runner->r.current_shader_model]); hr = D3DCompile(source, strlen(source), NULL, NULL, NULL, "main", profile, runner->r.compile_options, 0, &blob, &errors); ok(hr == S_OK, "Failed to compile shader, hr %#lx.\n", hr); if (errors) @@ -185,12 +185,9 @@ static D3DTEXTUREADDRESS sampler_address_to_d3d9(D3D12_TEXTURE_ADDRESS_MODE addr
static bool d3d9_runner_check_requirements(struct shader_runner *r) { - struct d3d9_shader_runner *runner = d3d9_shader_runner(r); - - if (runner->r.minimum_shader_model >= SHADER_MODEL_4_0) - return false; + enum shader_model model = r->current_shader_model;
- return true; + return (SHADER_MODEL_2_0 <= model) && (model < SHADER_MODEL_4_0); }
static struct resource *d3d9_runner_create_resource(struct shader_runner *r, const struct resource_params *params) @@ -541,7 +538,7 @@ void run_shader_tests_d3d9(void)
init_adapter_info(); init_test_context(&runner); - run_shader_tests(&runner.r, &d3d9_runner_ops, NULL, SHADER_MODEL_2_0, SHADER_MODEL_3_0); + run_shader_tests(&runner.r, &d3d9_runner_ops, NULL); destroy_test_context(&runner); } FreeLibrary(d3d9_module); diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index f89b4d624..a82178c04 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -83,6 +83,13 @@ static struct vulkan_shader_runner *vulkan_shader_runner(struct shader_runner *r
#define VK_CALL(f) (runner->f)
+static bool vulkan_runner_check_requirements(struct shader_runner *r) +{ + enum shader_model model = r->current_shader_model; + + return (SHADER_MODEL_4_0 <= model) && (model < SHADER_MODEL_6_0); +} + static void begin_command_buffer(struct vulkan_shader_runner *runner) { VkCommandBufferBeginInfo buffer_begin_desc = {.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO}; @@ -395,8 +402,6 @@ static bool compile_shader(const struct vulkan_shader_runner *runner, const char
static const char *const shader_models[] = { - [SHADER_MODEL_2_0] = "4_0", - [SHADER_MODEL_3_0] = "4_0", [SHADER_MODEL_4_0] = "4_0", [SHADER_MODEL_4_1] = "4_1", [SHADER_MODEL_5_0] = "5_0", @@ -439,7 +444,7 @@ static bool compile_shader(const struct vulkan_shader_runner *runner, const char }
hlsl_info.entry_point = "main"; - sprintf(profile, "%s_%s", type, shader_models[runner->r.minimum_shader_model]); + sprintf(profile, "%s_%s", type, shader_models[runner->r.current_shader_model]); hlsl_info.profile = profile;
ret = vkd3d_shader_compile(&info, dxbc, &messages); @@ -1157,6 +1162,7 @@ static void vulkan_runner_release_readback(struct shader_runner *r, struct resou
static const struct shader_runner_ops vulkan_runner_ops = { + .check_requirements = vulkan_runner_check_requirements, .create_resource = vulkan_runner_create_resource, .destroy_resource = vulkan_runner_destroy_resource, .dispatch = vulkan_runner_dispatch, @@ -1384,7 +1390,7 @@ void run_shader_tests_vulkan(void) if (!init_vulkan_runner(&runner)) return;
- run_shader_tests(&runner.r, &vulkan_runner_ops, NULL, SHADER_MODEL_2_0, SHADER_MODEL_5_1); + run_shader_tests(&runner.r, &vulkan_runner_ops, NULL);
cleanup_vulkan_runner(&runner); }