tests/shader_runner: Introduce the "f32" probe format.

This commit is contained in:
Henri Verbeet
2025-06-06 01:02:45 +02:00
parent 9c987e5a0b
commit cea7b4e920
Notes: Henri Verbeet 2025-06-10 18:06:45 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1555
17 changed files with 196 additions and 155 deletions

View File

@@ -19,4 +19,4 @@ void main()
[test]
dispatch 1 1 1
probe uav 0 (0, 0) r (-123.0)
probe uav 0 (0, 0) f32(-123.0)

View File

@@ -37,29 +37,29 @@ depth greater equal
clear rtv 0 0.0 0.0 0.0 0.0
clear dsv 0.0
draw quad
probe (0, 0) rgba(0, 0, 0, 0)
probe uav 1 (0) r(0.0)
probe (0, 0) f32(0, 0, 0, 0)
probe uav 1 (0) f32(0.0)
clear rtv 0 0.0 0.0 0.0 0.0
clear dsv 0.3
draw quad
probe (0, 0) rgba(1, 1, 1, 1)
probe uav 1 (0) r(1.0)
probe (0, 0) f32(1, 1, 1, 1)
probe uav 1 (0) f32(1.0)
clear rtv 0 0.0 0.0 0.0 0.0
clear dsv 0.5
draw quad
probe (0, 0) rgba(1, 1, 1, 1)
probe uav 1 (0) r(1.0)
probe (0, 0) f32(1, 1, 1, 1)
probe uav 1 (0) f32(1.0)
clear rtv 0 0.0 0.0 0.0 0.0
clear dsv 0.6
draw quad
probe (0, 0) rgba(1, 1, 1, 1)
probe uav 1 (0) r(1.0)
probe (0, 0) f32(1, 1, 1, 1)
probe uav 1 (0) f32(1.0)
clear rtv 0 0.0 0.0 0.0 0.0
clear dsv 1.0
draw quad
probe (0, 0) rgba(0, 0, 0, 0)
probe uav 1 (0) r(0.0)
probe (0, 0) f32(0, 0, 0, 0)
probe uav 1 (0) f32(0.0)

View File

@@ -17,22 +17,22 @@ uniform 0 float 0.0
clear dsv 1.0
depth less
draw quad
probe dsv (0,0) r (0.0)
probe dsv (0,0) f32(0.0)
uniform 0 float 0.75
clear dsv 1.0
draw quad
probe dsv (0,0) r (0.75)
probe dsv (0,0) f32(0.75)
clear dsv 0.5
depth greater
draw quad
probe dsv (0,0) r (0.75)
probe dsv (0,0) f32(0.75)
depth less
clear dsv 0.5
draw quad
probe dsv (0,0) r (0.5)
probe dsv (0,0) f32(0.5)
[require]
@@ -66,15 +66,15 @@ clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
depth greater equal
todo(sm<6) draw quad
probe (0, 0) rgba (0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) r (0.75)
probe (0, 0) f32(0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) f32(0.75)
uniform 0 float4 0.75 0.375 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
todo(sm<6) draw quad
probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
probe dsv (0,0) r (0.5)
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
probe dsv (0,0) f32(0.5)
[pixel shader todo]
@@ -92,19 +92,19 @@ clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
depth greater equal
todo(sm<6) draw quad
probe (0, 0) rgba (0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) r (0.75)
probe (0, 0) f32(0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) f32(0.75)
uniform 0 float4 0.375 0.625 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
todo(sm<6) draw quad
probe (0, 0) rgba (0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) r (0.625)
probe (0, 0) f32(0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) f32(0.625)
uniform 0 float4 0.375 0.375 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
todo(sm<6) draw quad
probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
probe dsv (0,0) r (0.5)
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
probe dsv (0,0) f32(0.5)

View File

@@ -11,10 +11,10 @@ float4 main() : sv_target
[test]
uniform 0 float4 1 2 3 4
todo(sm<4 | glsl) draw quad
probe (0, 0) rgba (1, 2, 3, 4)
probe (0, 0) f32(1, 2, 3, 4)
uniform 0 float4 9 8 7 6
todo(sm<4 | glsl) draw quad
probe (0, 0) rgba (1, 2, 3, 4)
probe (0, 0) f32(1, 2, 3, 4)
[require]
shader model >= 3.0
@@ -31,14 +31,14 @@ float4 main(float4 pos : sv_position) : sv_target
[test]
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (1, 0, 0, 1)
probe (1, 0) rgba (1, 2, 3, 4)
probe (0, 1) rgba (1, 2, 3, 4)
probe (1, 1) rgba (1, 0, 0, 1)
probe (2, 0) rgba (1, 0, 0, 1)
probe (3, 0) rgba (1, 2, 3, 4)
probe (2, 1) rgba (1, 2, 3, 4)
probe (3, 1) rgba (1, 0, 0, 1)
probe (0, 0) f32(1, 0, 0, 1)
probe (1, 0) f32(1, 2, 3, 4)
probe (0, 1) f32(1, 2, 3, 4)
probe (1, 1) f32(1, 0, 0, 1)
probe (2, 0) f32(1, 0, 0, 1)
probe (3, 0) f32(1, 2, 3, 4)
probe (2, 1) f32(1, 2, 3, 4)
probe (3, 1) f32(1, 0, 0, 1)
[require]
shader model >= 5.0
@@ -69,11 +69,11 @@ float4 main(float4 pos : sv_position) : sv_target
[test]
uniform 0 float4 1 2 3 4
todo(glsl) draw quad
probe (0, 0) rgba (1, 2, 3, 4)
probe uav 1 (0, 0) r (1.0)
probe uav 1 (1, 0) r (1.0)
probe (0, 0) f32(1, 2, 3, 4)
probe uav 1 (0, 0) f32(1.0)
probe uav 1 (1, 0) f32(1.0)
uniform 0 float4 9 8 7 6
todo(glsl) draw quad
probe (0, 0) rgba (1, 2, 3, 4)
probe uav 1 (0, 0) r (2.0)
probe uav 1 (1, 0) r (1.0)
probe (0, 0) f32(1, 2, 3, 4)
probe uav 1 (0, 0) f32(2.0)
probe uav 1 (1, 0) f32(1.0)

View File

@@ -27,5 +27,5 @@ depth greater equal
clear rtv 0 0.0 0.0 0.0 0.0
clear dsv 0.5
todo(msl) draw quad
probe (0, 0) rgba(0, 0, 0, 0)
probe uav 1 (0) r(0.0)
probe (0, 0) f32(0, 0, 0, 0)
probe uav 1 (0) f32(0.0)

View File

@@ -38,7 +38,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.1, 0.2)
probe (0, 0) f32(0.1, 0.2, 0.1, 0.2)
[pixel shader fail todo]
@@ -79,7 +79,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(1.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(1.0, 2.0, 2.0, 2.0)
% float and float1 can be defined separately...
@@ -195,7 +195,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(1.0, 1.0, 1.0, 1.0)
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
% Component type narrowing is preferred over component count narrowing.
[pixel shader]
@@ -209,7 +209,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(1.0, 1.0, 1.0, 1.0)
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
% Let C be the common type that would be produced in an arithmetic expression
% between the parameter and argument types. If C is the same as the parameter, the
@@ -237,7 +237,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(0.0, 0.0, 0.0, 0.0)
probe (0, 0) f32(0.0, 0.0, 0.0, 0.0)
% Let C be the common type that would be produced in an arithmetic expression
% between the parameter and argument types. If C is the same as the argument,
@@ -299,7 +299,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Let C be the common type that would be produced in an arithmetic expression
% between the parameter and argument types. If C is "int" and the parameter is "uint", the
@@ -326,7 +326,7 @@ float4 main() : sv_target
[test]
draw quad
todo(sm<6) probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
todo(sm<6) probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Same as above.
@@ -349,7 +349,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% An exact match is preferred for minimum precision types as well.
[pixel shader todo]
@@ -363,7 +363,7 @@ float4 main() : sv_target
[test]
todo(sm<6) draw quad
probe (0, 0) rgba(1.0, 1.0, 1.0, 1.0)
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
[require]
% Need SM5 for doubles.
@@ -395,7 +395,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Component type widening is preferred over component type narrowing.
[pixel shader]
@@ -409,7 +409,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Component count widening is preferred over component type narrowing.
[pixel shader]
@@ -423,7 +423,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Component count widening is preferred over component type class conversion.
[pixel shader]
@@ -437,7 +437,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Let C be the common type that would be produced in an arithmetic expression
% between the parameter and argument types. If C has the same base type as the argument,
% but with more components, it is preferred over all other cases.
@@ -466,7 +466,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) r(2.0)
probe (0, 0) f32(2.0)
[pixel shader]
float func(uint4 x, double y)
@@ -489,7 +489,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) r(1.0)
probe (0, 0) f32(1.0)
[pixel shader]
float func(uint4 x, double y)
@@ -512,7 +512,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) r(1.0)
probe (0, 0) f32(1.0)
[pixel shader]
float func(half4 x, half y, half z, half a)
@@ -535,7 +535,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) r(1.0)
probe (0, 0) f32(1.0)
[require]
% Reset
@@ -559,7 +559,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
probe (0, 0) f32(2.0, 2.0, 2.0, 2.0)
% Some matrices are implicitly compatible with vectors and will ambiguate with them.
@@ -681,7 +681,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba(42.0, 42.0, 42.0, 42.0)
probe (0, 0) f32(42.0, 42.0, 42.0, 42.0)
[pixel shader]
float func(float x, float y)
@@ -703,7 +703,7 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) r(2.0)
probe (0, 0) f32(2.0)
[pixel shader]
float func(float3 a, float3 b, float3 c, float3 d)
@@ -725,4 +725,4 @@ float4 main() : sv_target
[test]
draw quad
probe (0, 0) r(1.0)
probe (0, 0) f32(1.0)

View File

@@ -9,7 +9,7 @@ float4x1 main() : sv_target
[test]
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
probe (0, 0) f32(1.0, 2.0, 3.0, 4.0)
[pixel shader]
row_major float1x4 main() : sv_target
@@ -19,7 +19,7 @@ row_major float1x4 main() : sv_target
[test]
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
probe (0, 0) f32(1.0, 2.0, 3.0, 4.0)
[rtv 0]
format r32-float
@@ -45,10 +45,10 @@ row_major float4x1 main() : sv_target
[test]
todo(sm>=6) draw quad
probe rtv 0 (0,0) r (1.0)
probe rtv 1 (0,0) r (2.0)
probe rtv 2 (0,0) r (3.0)
probe rtv 3 (0,0) r (4.0)
probe rtv 0 (0,0) f32(1.0)
probe rtv 1 (0,0) f32(2.0)
probe rtv 2 (0,0) f32(3.0)
probe rtv 3 (0,0) f32(4.0)
[pixel shader fail(sm>=6)]
float1x4 main() : sv_target
@@ -58,10 +58,10 @@ float1x4 main() : sv_target
[test]
todo(sm>=6) draw quad
probe rtv 0 (0,0) r (1.0)
probe rtv 1 (0,0) r (2.0)
probe rtv 2 (0,0) r (3.0)
probe rtv 3 (0,0) r (4.0)
probe rtv 0 (0,0) f32(1.0)
probe rtv 1 (0,0) f32(2.0)
probe rtv 2 (0,0) f32(3.0)
probe rtv 3 (0,0) f32(4.0)
[pixel shader fail]
void main(out float1x2 x : sv_target0, out float1x2 y : sv_target1)
@@ -79,10 +79,10 @@ void main(out float1x2 x : sv_target0, out float1x2 y : sv_target2)
[test]
todo(sm>=6) draw quad
probe rtv 0 (0,0) r (1.0)
probe rtv 1 (0,0) r (2.0)
probe rtv 2 (0,0) r (5.0)
probe rtv 3 (0,0) r (6.0)
probe rtv 0 (0,0) f32(1.0)
probe rtv 1 (0,0) f32(2.0)
probe rtv 2 (0,0) f32(5.0)
probe rtv 3 (0,0) f32(6.0)
[rtv 0]
format r32g32b32a32-float
@@ -97,6 +97,6 @@ void main(out row_major float1x4 x : sv_target0, out float1x2 y : sv_target1)
[test]
todo(sm>=6) draw quad
probe rtv 0 (0,0) rgba (1.0, 2.0, 3.0, 4.0)
probe rtv 1 (0,0) r (5.0)
probe rtv 2 (0,0) r (6.0)
probe rtv 0 (0,0) f32(1.0, 2.0, 3.0, 4.0)
probe rtv 1 (0,0) f32(5.0)
probe rtv 2 (0,0) f32(6.0)

View File

@@ -220,9 +220,9 @@ void main(uint2 id : sv_dispatchthreadid)
[test]
dispatch 1 1 1
probe uav 0 (0, 0) r (2.0)
if(sm<6) probe uav 0 (0, 1) r (1.0)
if(sm<6) probe uav 0 (1, 0) r (2.0)
probe uav 0 (1, 1) r (1.0)
if(sm>=6) probe uav 0 (0, 1) r (2.0)
if(sm>=6) probe uav 0 (1, 0) r (1.0)
probe uav 0 (0, 0) f32(2.0)
if(sm<6) probe uav 0 (0, 1) f32(1.0)
if(sm<6) probe uav 0 (1, 0) f32(2.0)
probe uav 0 (1, 1) f32(1.0)
if(sm>=6) probe uav 0 (0, 1) f32(2.0)
if(sm>=6) probe uav 0 (1, 0) f32(1.0)

View File

@@ -50,7 +50,7 @@ float2 main() : sv_target
[test]
draw quad
probe (0, 0) rg (22.0, -22.0)
probe (0, 0) f32(22.0, -22.0)
[rtv 0]
format r32g32b32a32-uint
@@ -94,7 +94,7 @@ float2 main() : sv_target
[test]
todo(mvk & vulkan | msl) draw quad
todo(mvk) probe (0, 0) rg (22.0, -22.0)
todo(mvk) probe (0, 0) f32(22.0, -22.0)
[rtv 0]
format r32g32b32a32-sint
@@ -138,7 +138,7 @@ float2 main() : sv_target
[test]
todo(mvk & vulkan | msl) draw quad
todo(mvk) probe (0, 0) rg (22.0, -22.0)
todo(mvk) probe (0, 0) f32(22.0, -22.0)
[rtv 0]
format r32-uint
@@ -152,7 +152,7 @@ float4 main() : sv_target
[test]
todo(mvk & vulkan | msl) draw quad
todo(mvk) probe (0, 0) r (22.0)
todo(mvk) probe (0, 0) f32(22.0)
[pixel shader]
uint4 main() : sv_target
@@ -182,7 +182,7 @@ float2 main() : sv_target
[test]
todo(mvk & vulkan | msl) draw quad
todo(mvk) probe (0, 0) r (22.0)
todo(mvk) probe (0, 0) f32(22.0)
% For the avoidance of doubt, 64 bit types cannot be used as target outputs.

View File

@@ -27,7 +27,7 @@ float4 main() : sv_target
[test]
draw quad
probe uav 1 (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
probe uav 1 (0, 0) f32(1.0, 2.0, 3.0, 4.0)
[pixel shader fail]
Texture2D<float4> u;
@@ -54,11 +54,11 @@ float4 main() : sv_target
[test]
draw quad
probe uav 0 (0, 0) r (0.5)
probe uav 0 (0, 1) r (0.6)
probe uav 0 (1, 0) r (0.2)
probe uav 0 (1, 1) r (0.7)
probe uav 1 (0, 0) rgba (2.0, 1.0, 4.0, 3.0)
probe uav 0 (0, 0) f32(0.5)
probe uav 0 (0, 1) f32(0.6)
probe uav 0 (1, 0) f32(0.2)
probe uav 0 (1, 1) f32(0.7)
probe uav 1 (0, 0) f32(2.0, 1.0, 4.0, 3.0)
[uav 2]
@@ -77,7 +77,7 @@ float4 main() : sv_target1
[test]
draw quad
probe uav 2 (0, 0) rgba (0.9, 0.8, 0.7, 0.6)
probe uav 2 (0, 0) f32(0.9, 0.8, 0.7, 0.6)
% Uppercase register set name
[pixel shader]
@@ -91,7 +91,7 @@ float4 main() : sv_target1
[test]
draw quad
probe uav 2 (0, 0) rgba (0.9, 0.8, 0.7, 0.6)
probe uav 2 (0, 0) f32(0.9, 0.8, 0.7, 0.6)
% Test that we can declare and use an array of UAVs.
@@ -117,8 +117,8 @@ float4 main() : sv_target1
[test]
todo(mvk) draw quad
probe uav 1 (0, 0) rgba (1.1, 1.2, 1.3, 1.4)
probe uav 2 (0, 0) rgba (2.1, 2.2, 2.3, 2.4)
probe uav 1 (0, 0) f32(1.1, 1.2, 1.3, 1.4)
probe uav 2 (0, 0) f32(2.1, 2.2, 2.3, 2.4)
% RWTexture1D types
[pixel shader]

View File

@@ -192,14 +192,14 @@ void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID,
[test]
uniform 0 uint 1
todo(sm<6) dispatch 2 1 1
probe uav 1 (0) r (0.0)
probe uav 1 (1) r (0.0)
probe uav 1 (2) r (0.0)
probe uav 1 (3) r (0.0)
probe uav 1 (4) r (1.0)
probe uav 1 (5) r (2.0)
probe uav 1 (6) r (3.0)
probe uav 1 (7) r (4.0)
probe uav 1 (0) f32(0.0)
probe uav 1 (1) f32(0.0)
probe uav 1 (2) f32(0.0)
probe uav 1 (3) f32(0.0)
probe uav 1 (4) f32(1.0)
probe uav 1 (5) f32(2.0)
probe uav 1 (6) f32(3.0)
probe uav 1 (7) f32(4.0)
probe uav 2 (0) i32(8)
probe uav 2 (1) i32(4)
probe uav 2 (2) i32(0)

View File

@@ -25,7 +25,7 @@ void main()
[test]
dispatch 1 1 1
probe uav 0 (0, 0) r (0.6)
probe uav 0 (1, 0) r (0.6)
probe uav 0 (2, 0) r (0.6)
probe uav 1 (0, 0) r (0.5)
probe uav 0 (0, 0) f32(0.6)
probe uav 0 (1, 0) f32(0.6)
probe uav 0 (2, 0) f32(0.6)
probe uav 1 (0, 0) f32(0.5)

View File

@@ -27,7 +27,7 @@ void main()
[test]
todo(msl) dispatch 1 1 1
probe uav 0 (0, 0) rgba (0.4, 0.1, 0.2, 0.3)
probe uav 0 (0, 0) f32(0.4, 0.1, 0.2, 0.3)
[uav 0]
format r32-float
@@ -52,4 +52,4 @@ void main()
[test]
todo(msl) dispatch 1 1 1
probe uav 0 (0, 0) r (0.2)
probe uav 0 (0, 0) f32(0.2)

View File

@@ -204,7 +204,7 @@ float4 main() : sv_target1
[test]
todo(msl) draw quad
probe uav 2 (0) rgba (11.1, 12.2, 13.3, 14.4)
probe uav 2 (0) f32(11.1, 12.2, 13.3, 14.4)
[require]
shader model >= 6.2
@@ -228,7 +228,7 @@ void main()
[test]
uniform 0 uint4 0x4a204990 0x4b404ab0 0 0
dispatch 1 1 1
probe uav 1 (0) rgba(11.125, 12.25, 13.375, 14.5)
probe uav 1 (0) f32(11.125, 12.25, 13.375, 14.5)
[compute shader]
uniform half4 h;
@@ -243,7 +243,7 @@ void main()
[test]
uniform 0 uint4 0x4a204990 0x4b404ab0 0 0
dispatch 1 1 1
probe uav 1 (0) rgba(11.125, 12.25, 13.375, 14.5)
probe uav 1 (0) f32(11.125, 12.25, 13.375, 14.5)
[compute shader]
uniform half h;
@@ -258,7 +258,7 @@ void main()
[test]
uniform 0 uint 0x4990
dispatch 1 1 1
probe uav 1 (0) r(11.125)
probe uav 1 (0) f32(11.125)
[uav 1]
format r32g32b32a32-uint

View File

@@ -21,7 +21,7 @@ float4 main() : sv_target
todo(glsl | msl) draw quad
probe uav 1 (0) i32(10)
if(sm<6) probe uav 1 (1) i32(11)
if(sm>=6) probe uav 1 (1) r (11.1)
if(sm>=6) probe uav 1 (1) f32(11.1)
[pixel shader]
RWByteAddressBuffer u : register(u1);

View File

@@ -54,11 +54,11 @@ float4 main() : sv_target
[test]
draw quad
probe uav 1 (0, 0) r (0.5)
probe uav 1 (0, 1) r (0.6)
probe uav 1 (1, 0) r (0.2)
probe uav 1 (1, 1) r (0.7)
probe uav 2 (0, 0) rgba (2.0, 1.0, 4.0, 3.0)
probe uav 1 (0, 0) f32(0.5)
probe uav 1 (0, 1) f32(0.6)
probe uav 1 (1, 0) f32(0.2)
probe uav 1 (1, 1) f32(0.7)
probe uav 2 (0, 0) f32(2.0, 1.0, 4.0, 3.0)
% UAVs are implicitly allocated starting from the highest render target slot.
@@ -105,7 +105,7 @@ float4 main() : sv_target1
[test]
draw quad
probe uav 2 (0, 0) rgba (0.9, 0.8, 0.7, 0.6)
probe uav 2 (0, 0) f32(0.9, 0.8, 0.7, 0.6)
[uav 3]
@@ -125,7 +125,7 @@ float4 main() : sv_target1
[test]
draw quad
probe uav 3 (0, 0) rgba (0.9, 0.8, 0.7, 0.6)
probe uav 3 (0, 0) f32(0.9, 0.8, 0.7, 0.6)
% Uppercase register set name
[pixel shader]
@@ -139,7 +139,7 @@ float4 main() : sv_target1
[test]
draw quad
probe uav 3 (0, 0) rgba (0.9, 0.8, 0.7, 0.6)
probe uav 3 (0, 0) f32(0.9, 0.8, 0.7, 0.6)
% Test that we can declare and use an array of UAVs.
@@ -167,8 +167,8 @@ float4 main() : sv_target1
[test]
draw quad
probe uav 2 (0, 0) rgba (1.1, 1.2, 1.3, 1.4)
probe uav 3 (0, 0) rgba (2.1, 2.2, 2.3, 2.4)
probe uav 2 (0, 0) f32(1.1, 1.2, 1.3, 1.4)
probe uav 3 (0, 0) f32(2.1, 2.2, 2.3, 2.4)
% RWTexture1D types
[pixel shader]

View File

@@ -821,6 +821,21 @@ static void read_uint(const char **line, unsigned int *u, bool is_uniform)
*line = rest;
}
static void read_f32(const char **line, float *f)
{
char *rest;
float val;
errno = 0;
val = strtof(*line, &rest);
if (errno != 0 || rest == *line)
fatal_error("Malformed f32 constant '%s'.\n", *line);
*f = val;
*line = rest;
}
static void read_int4(const char **line, struct ivec4 *v)
{
read_int(line, &v->x, true);
@@ -1342,6 +1357,56 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
check_readback_data_uint(rb, &box, v.x, 0);
}
}
else if (match_string(line, "f32", &line))
{
struct vec4 v;
if (*line != '(')
fatal_error("Malformed probe arguments '%s'.\n", line);
++line;
read_f32(&line, &v.x);
while (isspace(*line))
++line;
if (*line == ',')
{
++line;
read_f32(&line, &v.y);
while (isspace(*line))
++line;
if (*line == ',')
{
++line;
read_f32(&line, &v.z);
while (isspace(*line))
++line;
if (*line != ',')
fatal_error("Malformed probe arguments '%s'.\n", line);
++line;
read_f32(&line, &v.w);
if (sscanf(line, " ) %u", &ulps) < 1)
ulps = 0;
todo_if(runner->is_todo) bug_if(runner->is_bug)
check_readback_data_vec4(rb, &rect, &v, ulps);
}
else
{
if (sscanf(line, " ) %u", &ulps) < 1)
ulps = 0;
todo_if(runner->is_todo) bug_if(runner->is_bug)
check_readback_data_vec2(rb, &rect, &v, ulps);
}
}
else
{
if (sscanf(line, " ) %u", &ulps) < 1)
ulps = 0;
todo_if(runner->is_todo) bug_if(runner->is_bug)
check_readback_data_float(rb, &rect, v.x, ulps);
}
}
else if (match_string(line, "rgba", &line))
{
struct vec4 v;
@@ -1354,30 +1419,6 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
todo_if(runner->is_todo) bug_if(runner->is_bug)
check_readback_data_vec4(rb, &rect, &v, ulps);
}
else if (match_string(line, "rg", &line))
{
struct vec4 v;
ret = sscanf(line, "( %f , %f ) %u", &v.x, &v.y, &ulps);
if (ret < 2)
fatal_error("Malformed probe arguments '%s'.\n", line);
if (ret < 3)
ulps = 0;
todo_if(runner->is_todo) bug_if(runner->is_bug)
check_readback_data_vec2(rb, &rect, &v, ulps);
}
else if (match_string(line, "r", &line))
{
float expect;
ret = sscanf(line, "( %f ) %u", &expect, &ulps);
if (ret < 1)
fatal_error("Malformed probe arguments '%s'.\n", line);
if (ret < 2)
ulps = 0;
todo_if(runner->is_todo) bug_if(runner->is_bug)
check_readback_data_float(rb, &rect, expect, ulps);
}
else
{
fatal_error("Malformed probe arguments '%s'.\n", line);