vkd3d/tests/hlsl/cast-to-int.shader_test
Francisco Casas 4f7c117296 tests: Test casting negative floats to int.
Turns out we are not doing this correctly in SM1, because the rounding
should be to the number that is closer to zero and lower_casts_to_int()
doesn't do that.

A vertex shader test is added since in SM1 they must rely on the SLT
operation instead of the CMP operation.
2025-01-16 18:43:12 +01:00

88 lines
1.6 KiB
Plaintext

[pixel shader]
uniform float3 f;
float4 main() : sv_target
{
int3 r = f;
return float4(r, 0);
}
[test]
uniform 0 float4 10.3 -11.6 12.8 13.1
draw quad
todo(sm<4) probe (0, 0) rgba(10, -11, 12, 0)
[vertex shader]
uniform float4 f;
void main(float4 pos : position, out float4 t1 : TEXCOORD1, out float4 out_pos : sv_position)
{
out_pos = pos;
t1 = (int4)f;
}
[pixel shader]
float4 main(float4 t1 : TEXCOORD1) : sv_target
{
return t1;
}
[test]
uniform 0 float4 -0.4 -0.7 -12.8 14.8
draw quad
todo(sm<4) probe (0, 0) rgba(0, 0, -12, 14)
[pixel shader todo(sm<4)]
uniform float f;
uniform uint u;
uniform bool b;
uniform float h;
float4 main() : sv_target
{
float4 ret;
ret.x = ((float)(int)f) - 1.5;
ret.y = ((float)(int)u) + 2.5;
ret.z = ((float)(int)b) / 2;
ret.w = ((float)(int)(half)h) + 3.5;
return ret;
}
[test]
if(sm<4) uniform 0 float 2.6
if(sm<4) uniform 4 float -2
if(sm<4) uniform 8 float 1.0
if(sm<4) uniform 12 float -3.6
if(sm>=4) uniform 0 float 2.6
if(sm>=4) uniform 1 int -2
if(sm>=4) uniform 2 int -2
if(sm>=4) uniform 3 float -3.6
todo(sm<4) draw quad
probe (0, 0) rgba (0.5, 0.5, 0.5, 0.5)
[pixel shader]
float4 main() : sv_target
{
float f = 2.6;
uint u = 0xfffffffe;
bool b = true;
half h = -3.6;
float4 ret;
ret.x = ((float)(int)f) - 1.5;
ret.y = ((float)(int)u) + 2.5;
ret.z = ((float)(int)b) / 2;
ret.w = ((float)(int)h) + 3.5;
return ret;
}
[test]
draw quad
if(sm<4) todo probe (0,0) rgba (0.5, 4.2949673e+009, 0.5, 0.5)
if(sm>=4) probe (0,0) rgba (0.5, 0.5, 0.5, 0.5)