mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
6a8939e19f
These tests should actually compile and run in SM1, which is possible if we pass the int and uint uniforms in the expected IEEE 754 float format for SM1 shaders. Also, bools should be passed as 1.0f or 0.0f to SM1.
619 lines
9.8 KiB
Plaintext
619 lines
9.8 KiB
Plaintext
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
return 3.0;
|
|
case 1:
|
|
return 4.0;
|
|
default:
|
|
return 5.0;
|
|
}
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 3 0 0 0
|
|
if(sm>=4) uniform 0 uint4 3 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (5.0, 5.0, 5.0, 5.0)
|
|
if(sm<4) uniform 0 float4 1 0 0 0
|
|
if(sm>=4) uniform 0 uint4 1 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (4.0, 4.0, 4.0, 4.0)
|
|
if(sm<4) uniform 0 float4 0 0 0 0
|
|
if(sm>=4) uniform 0 uint4 0 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (3.0, 3.0, 3.0, 3.0)
|
|
|
|
|
|
% just a default case
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
default:
|
|
return 5.0;
|
|
}
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 3 0 0 0
|
|
if(sm>=4) uniform 0 uint4 3 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (5.0, 5.0, 5.0, 5.0)
|
|
if(sm<4) uniform 0 float4 1 0 0 0
|
|
if(sm>=4) uniform 0 uint4 1 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (5.0, 5.0, 5.0, 5.0)
|
|
if(sm<4) uniform 0 float4 0 0 0 0
|
|
if(sm>=4) uniform 0 uint4 0 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (5.0, 5.0, 5.0, 5.0)
|
|
|
|
|
|
% completely empty
|
|
[pixel shader fail]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
}
|
|
}
|
|
|
|
|
|
% falling through is only supported for empty case statements
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
c.x += 0.1f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 2 0 0 0
|
|
if(sm>=4) uniform 0 uint4 2 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
if(sm<4) uniform 0 float4 1 0 0 0
|
|
if(sm>=4) uniform 0 uint4 1 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.1, 2.0, 3.0, 4.0)
|
|
if(sm<4) uniform 0 float4 0 0 0 0
|
|
if(sm>=4) uniform 0 uint4 0 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.1, 2.0, 3.0, 4.0)
|
|
|
|
|
|
% case value evaluation
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 1+1:
|
|
c += 0.1f;
|
|
break;
|
|
case 0:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 2 0 0 0
|
|
if(sm>=4) uniform 0 uint4 2 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.1, 2.1, 3.1, 4.1)
|
|
if(sm<4) uniform 0 float4 1 0 0 0
|
|
if(sm>=4) uniform 0 uint4 1 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
|
|
|
|
% floats are accepted
|
|
[pixel shader fail(sm>=6) todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 2.1f:
|
|
c += 0.1f;
|
|
break;
|
|
case 0.9f:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 2 0 0 0
|
|
if(sm>=4) uniform 0 uint4 2 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.1, 2.1, 3.1, 4.1)
|
|
if(sm<4) uniform 0 float4 1 0 0 0
|
|
if(sm>=4) uniform 0 uint4 1 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
|
|
[pixel shader fail(sm<4 | sm>=6) todo(sm<4)]
|
|
float4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 2.1f:
|
|
c += 0.1f;
|
|
break;
|
|
case 0.9f:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
uniform 0 float4 2.0 0.0 0.0 0.0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.1, 2.1, 3.1, 4.1)
|
|
uniform 0 float4 1.0 0.0 0.0 0.0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
|
|
[pixel shader fail]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
uint a = 1;
|
|
|
|
switch (v.x)
|
|
{
|
|
case 1+a:
|
|
c += 0.1f;
|
|
break;
|
|
case 0:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
% duplicate cases
|
|
[pixel shader fail]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 2:
|
|
c += 0.1f;
|
|
break;
|
|
case 1+1:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
% multiple default cases
|
|
[pixel shader fail]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
default:
|
|
case 2:
|
|
c += 0.1f;
|
|
break;
|
|
case 1:
|
|
c += 0.2f;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
% unterminated cases
|
|
[pixel shader fail(sm<6)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
c += 0.1f;
|
|
case 1:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[pixel shader fail]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
return 3.0;
|
|
case 1:
|
|
return 4.0;
|
|
case 2:
|
|
}
|
|
return 0.0;
|
|
}
|
|
|
|
[pixel shader fail]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
return 3.0;
|
|
case 1:
|
|
return 4.0;
|
|
default:
|
|
}
|
|
return 0.0;
|
|
}
|
|
|
|
[pixel shader fail(sm<6)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
return 3.0;
|
|
case 1:
|
|
return 4.0;
|
|
default:
|
|
discard;
|
|
}
|
|
return 0.0;
|
|
}
|
|
|
|
[pixel shader fail(sm<6)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
return 3.0;
|
|
case 1:
|
|
return 4.0;
|
|
case 2:
|
|
discard;
|
|
}
|
|
return 0.0;
|
|
}
|
|
|
|
[pixel shader fail(sm<6)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
discard;
|
|
case 1:
|
|
return 4.0;
|
|
}
|
|
return 0.0;
|
|
}
|
|
|
|
% more complicated breaks
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 2:
|
|
c += 0.1f;
|
|
if (true) break;
|
|
c = 9.0f;
|
|
case 1:
|
|
if (false) break;
|
|
c += 0.2f;
|
|
break;
|
|
default:
|
|
case 0:
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 2 0 0 0
|
|
if(sm>=4) uniform 0 uint4 2 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.1, 2.1, 3.1, 4.1)
|
|
if(sm<4) uniform 0 float4 1 0 0 0
|
|
if(sm>=4) uniform 0 uint4 1 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.2, 2.2, 3.2, 4.2)
|
|
if(sm<4) uniform 0 float4 0 0 0 0
|
|
if(sm>=4) uniform 0 uint4 0 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
|
|
% switch breaks within a loop
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0f, 2.0f, 3.0f, 4.0f};
|
|
|
|
for (int i = 0; i < 4; ++i)
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 2:
|
|
c += 1.0f;
|
|
break;
|
|
case 1:
|
|
c -= 1.0f;
|
|
break;
|
|
default:
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 2 0 0 0
|
|
if(sm>=4) uniform 0 uint4 2 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (5.0, 6.0, 7.0, 8.0)
|
|
|
|
|
|
% default case placement
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0f, 2.0f, 3.0f, 4.0f};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 2:
|
|
c += 1.0f;
|
|
break;
|
|
case 1:
|
|
c -= 1.0f;
|
|
break;
|
|
case 3:
|
|
default:
|
|
case 0:
|
|
c += 3.0f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 0 0 0 0
|
|
if(sm>=4) uniform 0 uint4 0 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (4.0, 5.0, 6.0, 7.0)
|
|
if(sm<4) uniform 0 float4 2 0 0 0
|
|
if(sm>=4) uniform 0 uint4 2 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (2.0, 3.0, 4.0, 5.0)
|
|
if(sm<4) uniform 0 float4 3 0 0 0
|
|
if(sm>=4) uniform 0 uint4 3 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (4.0, 5.0, 6.0, 7.0)
|
|
|
|
|
|
[pixel shader todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0f, 2.0f, 3.0f, 4.0f};
|
|
|
|
switch (v.x)
|
|
{
|
|
case 2:
|
|
c += 1.0f;
|
|
break;
|
|
case 1:
|
|
c -= 1.0f;
|
|
break;
|
|
case 3:
|
|
default:
|
|
break;
|
|
case 0:
|
|
c += 3.0f;
|
|
break;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 3 0 0 0
|
|
if(sm>=4) uniform 0 uint4 3 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
if(sm<4) uniform 0 float4 0 0 0 0
|
|
if(sm>=4) uniform 0 uint4 0 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (4.0, 5.0, 6.0, 7.0)
|
|
if(sm<4) uniform 0 float4 5 0 0 0
|
|
if(sm>=4) uniform 0 uint4 5 0 0 0
|
|
todo(sm<4) draw quad
|
|
probe all rgba (1.0, 2.0, 3.0, 4.0)
|
|
|
|
% 'continue' is not supported in switches
|
|
[pixel shader fail(sm<6)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
uint i, j;
|
|
|
|
for (i = 0; i < v.z; i++)
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
c += 0.1f;
|
|
continue;
|
|
break;
|
|
case 1:
|
|
c += 0.2f;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[pixel shader fail(sm<4) todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
uint i, j;
|
|
|
|
for (i = 0; i < v.z; i++)
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 1:
|
|
for (j = 0; j < v.z; j++)
|
|
{
|
|
c += 1.0f;
|
|
if (v.w)
|
|
continue;
|
|
}
|
|
break;
|
|
case 0:
|
|
c += 2.0f;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 1 0 3 1
|
|
if(sm>=4) uniform 0 uint4 1 0 3 1
|
|
draw quad
|
|
probe all rgba (10.0, 11.0, 12.0, 13.0)
|
|
if(sm<4) uniform 0 float4 0 0 3 1
|
|
if(sm>=4) uniform 0 uint4 0 0 3 1
|
|
draw quad
|
|
probe all rgba (7.0, 8.0, 9.0, 10.0)
|
|
|
|
% return from a switch nested in a loop
|
|
[pixel shader fail(sm<4) todo(sm<4)]
|
|
uint4 v;
|
|
|
|
float4 main() : sv_target
|
|
{
|
|
float4 c = {1.0, 2.0, 3.0, 4.0};
|
|
uint i, j;
|
|
|
|
for (i = 0; i < v.z; i++)
|
|
{
|
|
switch (v.x)
|
|
{
|
|
case 0:
|
|
c += 1.0f;
|
|
break;
|
|
case 1:
|
|
c += 2.0f;
|
|
return c;
|
|
}
|
|
c += 100.0f;
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
[test]
|
|
if(sm<4) uniform 0 float4 0 0 3 1
|
|
if(sm>=4) uniform 0 uint4 0 0 3 1
|
|
draw quad
|
|
probe all rgba (304.0, 305.0, 306.0, 307.0)
|
|
if(sm<4) uniform 0 float4 1 0 3 1
|
|
if(sm>=4) uniform 0 uint4 1 0 3 1
|
|
draw quad
|
|
probe all rgba (3.0, 4.0, 5.0, 6.0)
|