tests/shader-runner: Test shaders with dxcompiler.

The location of dxcompiler should be set during configuration with
'DXCOMPILER_LIBS=-L/path/to/dxcompiler', and then at runtime with
LD_LIBRARY_PATH, WINEPATH or PATH as applicable.

A new 'fail(sm<6)' decoration is needed on many shader declarations
because dxcompiler succeeds on many shaders which fail with fxc. The
opposite case is less common and is flagged with 'fail(sm>=6)'. A few
tests cause dxcompiler to crash or hang, so these are avoided using
[require], which now skips tests until reset instead of exiting. Also,
'todo(sm<6)' and 'todo(sm>=6)' are used to separate checking of results.
This commit is contained in:
Conor McCarthy
2023-09-14 19:29:24 +10:00
committed by Alexandre Julliard
parent d211160b89
commit 57280673e5
Notes: Alexandre Julliard 2023-10-11 22:53:48 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Zebediah Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/346
133 changed files with 1284 additions and 572 deletions

View File

@@ -1,13 +1,15 @@
[pixel shader]
float4 main(uniform float2 u) : sv_target
uniform float2 u;
float4 main() : sv_target
{
return float4(abs(u), abs(u.x - 0.5), abs(-0.4));
}
[test]
uniform 0 float4 0.1 0.7 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.1, 0.7, 0.4, 0.4)
uniform 0 float4 -0.7 0.1 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.7, 0.1, 1.2, 0.4)

View File

@@ -11,17 +11,17 @@ float4 main() : sv_target
[test]
uniform 0 float4 -1.1 1.6 1.3 0.5
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
[test]
uniform 0 float4 0.0 1.6 1.3 0.5
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[test]
uniform 0 float4 1.0 0.0 1.3 0.5
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader]
@@ -34,12 +34,12 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
[test]
uniform 0 float4 0.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader]
@@ -53,11 +53,11 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 0.0 0.0
uniform 4 float4 3.0 4.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
[test]
uniform 0 float4 1.0 2.0 0.0 0.0
uniform 4 float4 0.0 4.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)

View File

@@ -8,25 +8,25 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 1.0 1.0 1.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 float4 1.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 float4 0.0 1.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 float4 0.0 0.0 1.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 float4 0.0 0.0 0.0 1.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 float4 0.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
uniform 0 float4 -1.0 -1.0 -1.0 -1.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
[pixel shader]
@@ -39,13 +39,13 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 float4 0.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
uniform 0 float4 -1.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
[require]
@@ -61,22 +61,22 @@ float4 main() : sv_target
[test]
uniform 0 uint4 1 1 1 1
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 uint4 1 0 0 0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 uint4 0 1 0 0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 uint4 0 0 1 0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 uint4 0 0 0 1
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 uint4 0 0 0 0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader]
@@ -89,8 +89,8 @@ float4 main() : sv_target
[test]
uniform 0 uint4 1 0 0 0
draw quad
todo(sm>=6) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
uniform 0 uint4 0 0 0 0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)

View File

@@ -10,7 +10,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 5.0 15.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (20.0, -10.0, 75.0, 0.33333333) 1
[pixel shader]
@@ -25,7 +25,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 5.0 15.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (5.0, 5.0, -5.0, 3.0) 1
[pixel shader]
@@ -40,7 +40,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 42.0 5.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (2.0, -2.0, 2.0, -2.0) 16
[pixel shader]
@@ -55,7 +55,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 45.0 5.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader]
@@ -69,7 +69,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 5.0 -42.1 4.0 45.0
uniform 4 float4 15.0 -5.0 4.1 5.0
draw quad
todo(sm>=6) draw quad
probe all rgba (5.0, -2.1, 4.0, 0.0) 4
[require]
@@ -88,5 +88,5 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 1.0 0.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (1e99, 1e99, 1e99, 1e99)

View File

@@ -61,7 +61,7 @@ float4 main() : sv_target
[test]
draw quad
probe all rgba (5.0, -2.1, 4.0, 0.0) 4
probe all rgba (5.0, -2.1, 4.0, 0.0) 6
[require]
% Infinities are not allowed in SM1

View File

@@ -10,7 +10,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 5.0 16.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (21.0, -11.0, 80.0, 0.0)
[pixel shader]
@@ -25,7 +25,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 5.0 16.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (5.0, 5.0, -5.0, 3.0)
[pixel shader]
@@ -40,7 +40,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 42.0 5.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (8.0, -8.0, -8.0, 8.0)
[pixel shader]
@@ -55,7 +55,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 42.0 5.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (2.0, -2.0, 2.0, -2.0)
[pixel shader]
@@ -70,7 +70,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 45.0 5.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (9.0, -9.0, -9.0, 9.0)
[pixel shader]
@@ -85,7 +85,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 45.0 5.0 0.0 0.0
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader]
@@ -98,7 +98,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 5.0 -7.0 0.0 -10.0
draw quad
todo(sm>=6) draw quad
probe all rgba (5.0, 7.0, 0.0, 10.0)
[pixel shader]
@@ -117,5 +117,5 @@ float4 main() : sv_target
[test]
uniform 0 float4 45.0 5.0 50.0 10.0
uniform 4 float4 3.0 8.0 2.0 5.0
draw quad
todo(sm>=6) draw quad
probe all rgba (9.0, 5.0, 1.0, 3.0)

View File

@@ -76,7 +76,7 @@ float4 main() : SV_TARGET
draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
float4 main() : SV_TARGET
{
int x = 1;
@@ -85,7 +85,11 @@ float4 main() : SV_TARGET
return x / y;
}
[pixel shader fail]
[test]
draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader fail(sm<6)]
float4 main() : SV_TARGET
{
int x = 1;
@@ -94,8 +98,14 @@ float4 main() : SV_TARGET
return x % y;
}
[test]
draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[require]
shader model >= 4.0
% dxcompiler performs this calculation on unsigned values and emits zero.
shader model < 6.0
[pixel shader]
float4 main() : SV_TARGET
@@ -110,6 +120,9 @@ float4 main() : SV_TARGET
draw quad
probe all rgba (-2147483648.0, -2147483648.0, -2147483648.0, -2147483648.0)
[require]
shader model >= 4.0
[pixel shader]
float4 main() : sv_target
{

View File

@@ -27,7 +27,7 @@ float4 main() : SV_TARGET
draw quad
probe all rgba (5.0, 5.0, 4294967296.0, 3.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
float4 main() : SV_TARGET
{
uint x = 1;
@@ -36,7 +36,11 @@ float4 main() : SV_TARGET
return x / y;
}
[pixel shader fail]
[test]
draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader fail(sm<6)]
float4 main() : SV_TARGET
{
uint x = 1;
@@ -44,3 +48,7 @@ float4 main() : SV_TARGET
return x % y;
}
[test]
draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)

View File

@@ -5,7 +5,12 @@ float4 main() : sv_target
{
const int dim = 4;
float a[2 * 2] = {0.1, 0.2, 0.3, 0.4};
#ifdef __hlsl_dx_compiler
/* float array dimensions are not valid. */
float b[4] = a;
#else
float b[4.1] = a;
#endif
float c[dim] = b;
float d[true] = {c[0]};
float e[65536];
@@ -13,5 +18,5 @@ float4 main() : sv_target
}
[test]
todo draw quad
todo(sm<6) draw quad
probe all rgba (0.1, 0.1, 0.2, 0.4)

View File

@@ -36,16 +36,16 @@ float4 main() : SV_TARGET
[test]
uniform 0 float 0
draw quad
todo(sm>=6) draw quad
probe all rgba (11.0, 11.0, 11.0, 11.0)
uniform 0 float 1
draw quad
todo(sm>=6) draw quad
probe all rgba (12.0, 12.0, 12.0, 12.0)
uniform 0 float 2
draw quad
todo(sm>=6) draw quad
probe all rgba (13.0, 13.0, 13.0, 13.0)
uniform 0 float 3
draw quad
todo(sm>=6) draw quad
probe all rgba (14.0, 14.0, 14.0, 14.0)
@@ -61,16 +61,16 @@ float4 main() : SV_TARGET
[test]
uniform 0 float 0
draw quad
todo(sm>=6) draw quad
probe all rgba (21.0, 1.0, 24.0, 0.0)
uniform 0 float 1
draw quad
todo(sm>=6) draw quad
probe all rgba (22.0, 0.0, 23.0, 1.0)
uniform 0 float 2
draw quad
todo(sm>=6) draw quad
probe all rgba (23.0, 1.0, 22.0, 0.0)
uniform 0 float 3
draw quad
todo(sm>=6) draw quad
probe all rgba (24.0, 0.0, 21.0, 1.0)

View File

@@ -111,7 +111,7 @@ float4 main() : sv_target
% Implicit size arrays are not allowed.
[pixel shader fail]
[pixel shader fail(sm<6)]
float fun(float a[])
{
return 0;

View File

@@ -53,7 +53,7 @@ draw quad
probe all rgba (2, 3, 6, 1)
% Additional level of indirection
[pixel shader todo]
[pixel shader todo fail(sm>=6)]
static const float array[8] = {1, 2, 3, 4, 5, 6, 7, 8};
static const int idx = 2;
static const float array2[array[idx]] = {1, 2, 3};

View File

@@ -2,7 +2,12 @@
shader model >= 4.0
[pixel shader]
float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv_target
uniform float f;
uniform int i;
uniform uint u;
uniform half h;
float4 main() : sv_target
{
float4 ret;
@@ -15,11 +20,14 @@ float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv
[test]
uniform 0 float4 123.0 -2.0 456 0.01
draw quad
todo(sm>=6) draw quad
probe (320,240) rgba (123.0, -2.0, 456.0, 0.01)
[pixel shader]
float4 main(uniform float2x2 m, uniform float4 v) : sv_target
uniform float2x2 m;
uniform float4 v;
float4 main() : sv_target
{
return float4(asfloat(m)[0][1], asfloat(v).y, 0, 0);
}
@@ -28,7 +36,7 @@ float4 main(uniform float2x2 m, uniform float4 v) : sv_target
uniform 0 float4 11 12 0 0
uniform 4 float4 13 14 0 0
uniform 8 float4 20 21 22 23
draw quad
todo(sm>=6) draw quad
probe (320,240) rgba (13.0, 21.0, 0.0, 0.0)
[pixel shader fail]

View File

@@ -2,8 +2,12 @@
shader model >= 4.0
[pixel shader]
uniform float f;
uniform int i;
uniform uint u;
uniform half h;
float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv_target
float4 main() : sv_target
{
uint4 ret;
@@ -16,13 +20,15 @@ float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv
[test]
uniform 0 uint4 123 0xc0000000 456 0x7fd69345
draw quad
todo(sm>=6) draw quad
probe (320,240) rgba (123.0, 3221225472.0, 456.0, 2144768896.0)
[pixel shader]
uniform float2x2 m;
uniform float4 v;
float4 main(uniform float2x2 m, uniform float4 v) : sv_target
float4 main() : sv_target
{
return float4(asuint(m)[0][1], asuint(v).y, 0, 0);
}
@@ -31,7 +37,7 @@ float4 main(uniform float2x2 m, uniform float4 v) : sv_target
uniform 0 uint4 11 12 0 0
uniform 4 uint4 13 14 0 0
uniform 8 uint4 20 21 22 23
draw quad
todo(sm>=6) draw quad
probe (320,240) rgba (13.0, 21.0, 0.0, 0.0)

View File

@@ -2,32 +2,32 @@
% we need to get the parsing syntax right. Most of the following tests which
% succeed print warnings.
[pixel shader]
[pixel shader fail(sm>=6)]
[numthreads]
float4 main() : sv_target { return 0; }
[pixel shader]
[pixel shader fail(sm>=6)]
[ numthreads ]
float4 main() : sv_target { return 0; }
[pixel shader]
[pixel shader fail(sm>=6)]
[numthreads(1)]
float4 main() : sv_target { return 0; }
[pixel shader todo]
[pixel shader todo fail(sm>=6)]
[numthreads("")]
float4 main() : sv_target { return 0; }
[pixel shader todo]
[pixel shader todo fail(sm>=6)]
[numthreads("one")]
float4 main() : sv_target { return 0; }
[pixel shader todo]
[pixel shader todo fail(sm>=6)]
uniform float4 f;
@@ -77,12 +77,12 @@ float4 main() : sv_target { return 0; }
[one][two]
float4 main() : sv_target { return 0; }
[pixel shader fail todo]
[pixel shader fail(sm<6) todo]
[one][one]
float4 main() : sv_target { return 0; }
[pixel shader fail todo]
[pixel shader fail(sm<6) todo]
[one][one(1)]
float4 main() : sv_target { return 0; }
@@ -92,7 +92,7 @@ float4 main() : sv_target { return 0; }
[one][One]
float4 main() : sv_target { return 0; }
[pixel shader]
[pixel shader fail(sm>=6)]
[numthreads]
float4 main();
@@ -112,7 +112,7 @@ static int i = 1;
[three(i = 4)]
float4 main() : sv_target { return 0; }
[pixel shader fail]
[pixel shader fail(sm<6)]
[one]
float4 f;

View File

@@ -30,7 +30,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 0.0 0.0 2.0 4.0
uniform 4 int4 0 1 0 10
draw quad
todo(sm>=6) draw quad
probe all rgba (0.0, 10.0, 1.0, 11.0)
@@ -44,5 +44,5 @@ float4 main() : sv_target
[test]
uniform 0 uint4 0x00000001 0x00000002 0x80000000 0x00000000
draw quad
todo(sm>=6) draw quad
probe all rgba (2.0, 2.0, 2.0, 0.0)

View File

@@ -49,5 +49,5 @@ float4 main(struct input i) : sv_target
}
[test]
draw triangle strip 4
todo(sm>=6) draw triangle strip 4
probe all rgba (0.0, 2.0, 2.0, 2.0)

View File

@@ -262,7 +262,7 @@ draw quad
probe all rgba (41.0, 42.0, 43.0, 44.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
struct apple
{
float2 aa;
@@ -301,7 +301,7 @@ draw quad
probe all rgba (55.0, 56.0, 57.0, 58.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
struct apple
{
float2 aa;
@@ -333,7 +333,7 @@ draw quad
probe all rgba (61.0, 62.0, 63.0, 64.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
float4 main() : sv_target
{
float arr[5] = {1, 2, 3, 4, 5};
@@ -359,7 +359,7 @@ draw quad
probe all rgba (71.0, 72.0, 73.0, 74.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
float4 main() : sv_target
{
float2x2 mat = {1, 2, 3, 4};
@@ -381,7 +381,7 @@ float4 main() : sv_target
}
[pixel shader fail]
[pixel shader fail(sm<6)]
float4 main() : sv_target
{
float arr[5] = {1, 2, 3, 4, 5};
@@ -440,7 +440,7 @@ draw quad
probe all rgba (11.0, 12.0, 13.0, 0.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
struct apple
{
float3 aa;
@@ -541,7 +541,7 @@ draw quad
probe all rgba (51.0, 52.0, 53.0, 0.0)
[pixel shader fail]
[pixel shader fail(sm<6)]
float4 main() : sv_target
{
float4 vec = {1, 2, 3, 4};

View File

@@ -32,7 +32,7 @@ float4 main() : sv_target
}
[pixel shader]
[pixel shader fail(sm>=6)]
struct apple
{
float3 aa;
@@ -71,7 +71,7 @@ float4 main() : sv_target
}
[pixel shader]
[pixel shader fail(sm>=6)]
struct apple
{
float3 aa;
@@ -93,7 +93,7 @@ draw quad
probe all rgba (5.0, 6.0, 7.0, 8.0)
[pixel shader]
[pixel shader fail(sm>=6)]
Texture2D tex;
struct apple
@@ -124,7 +124,7 @@ draw quad
probe all rgba (4.0, 4.0, 4.0, 4.0)
[pixel shader]
[pixel shader fail(sm>=6)]
Texture2D tex;
struct apple
@@ -158,7 +158,7 @@ draw quad
probe all rgba (5.0, 5.0, 5.0, 5.0)
[pixel shader]
[pixel shader fail(sm>=6)]
struct apple
{
float3 xx[2];

View File

@@ -2,7 +2,12 @@
shader model >= 4.0
[pixel shader]
float4 main(uniform int i, uniform uint u, uniform bool b, uniform half h) : sv_target
uniform int i;
uniform uint u;
uniform bool b;
uniform half h;
float4 main() : sv_target
{
return float4(((float)i) + 1.5, ((float)u) - 2.5, ((float)b) / 2, h);
}
@@ -12,7 +17,7 @@ uniform 0 int -1
uniform 1 uint 3
uniform 2 int -2
uniform 3 float 0.5
draw quad
todo(sm>=6) draw quad
probe all rgba (0.5, 0.5, 0.5, 0.5)
[pixel shader]

Some files were not shown because too many files have changed in this diff Show More