From: Evan Tang etang@codeweavers.com
--- Makefile.am | 1 + .../hlsl/rasterizer-ordered-views.shader_test | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 tests/hlsl/rasterizer-ordered-views.shader_test
diff --git a/Makefile.am b/Makefile.am index b36358b23..61777271a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -138,6 +138,7 @@ vkd3d_shader_tests = \ tests/hlsl/object-parameters.shader_test \ tests/hlsl/object-references.shader_test \ tests/hlsl/pow.shader_test \ + tests/hlsl/rasterizer-ordered-views.shader_test \ tests/hlsl/reflect.shader_test \ tests/hlsl/register-reservations.shader_test \ tests/hlsl/return-implicit-conversion.shader_test \ diff --git a/tests/hlsl/rasterizer-ordered-views.shader_test b/tests/hlsl/rasterizer-ordered-views.shader_test new file mode 100644 index 000000000..c731d22df --- /dev/null +++ b/tests/hlsl/rasterizer-ordered-views.shader_test @@ -0,0 +1,50 @@ +[require] +shader model >= 5.0 +features: rov + +[vertex shader] +float4 main(uint vid : SV_VertexID) : SV_Position +{ + uint pos = vid % 3; + return float4(pos == 1 ? 3 : -1, pos == 2 ? 3 : -1, 0, 1); +} + +[render target 0] +format r32 uint +size (640, 480) + +[uav 1] +format r32 uint +size (640, 480) +0 + +[texture 0] +format r32g32b32a32 uint +size (1, 1) +0 0 0 0 + +[pixel shader] +RasterizerOrderedTexture2D<uint4> tex : register(u1); +Texture2D<uint4> spin : register(t0); + +uint4 main(float4 pos : SV_Position, uint id : SV_PrimitiveID) : SV_Target +{ + int2 idx = int2(pos.xy); + uint val = tex[idx].x; + uint flag = 1 << (id & 31); + uint expected = flag - 1; + // Slow down shader to increase likelihood of overlap + int2 bufidx = int2(0, 0); + for (uint i = 0; i < 64; i++) { + uint4 extra = spin[bufidx]; + val |= extra; + bufidx = extra.xy; + } + bool ok = val == expected; + tex[idx] = ok ? val | flag : 0; + return val; +} +[test] +draw triangle list 93 +probe uav 1 all rui ( 0x7fffffff ) +probe all rui ( 0x3fffffff )