Files
vkd3d/tests/hlsl/arithmetic-int-uniform.shader_test
Francisco Casas e3923876c0 tests/hlsl: Test integer division with big integers.
Similarly to the modulus operator, d3dbc results with constant folding
are different from results when constant folding cannot be applied, and
different from tpf results.
2025-03-18 15:25:41 +01:00

299 lines
5.2 KiB
Plaintext

[pixel shader todo(sm<4)]
uniform float2 a;
float4 main() : SV_TARGET
{
int x = a.x;
int y = a.y;
return float4(x + y, x - y, x * y, x / y);
}
[test]
uniform 0 float4 5.0 16.0 0.0 0.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (21.0, -11.0, 80.0, 0.0)
[pixel shader todo(sm<4)]
uniform float2 a;
float4 main() : SV_TARGET
{
int x = a.x;
int y = a.y;
return float4(x % y, +x, -x, y / x);
}
[test]
uniform 0 float4 5.0 16.0 0.0 0.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (5.0, 5.0, -5.0, 3.0)
[pixel shader todo(sm<4)]
uniform float2 a;
float4 main() : SV_TARGET
{
int x = a.x;
int y = a.y;
return float4(x / y, -x / y, x / -y, -x / -y);
}
[test]
uniform 0 float4 42.0 5.0 0.0 0.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (8.0, -8.0, -8.0, 8.0)
[pixel shader todo(sm<4)]
uniform float2 a;
float4 main() : SV_TARGET
{
int x = a.x;
int y = a.y;
return float4(x % y, -x % y, x % -y, -x % -y);
}
[test]
uniform 0 float4 42.0 5.0 0.0 0.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (2.0, -2.0, 2.0, -2.0)
[pixel shader todo(sm<4)]
uniform float2 a;
float4 main() : SV_TARGET
{
int x = a.x;
int y = a.y;
return float4(x / y, -x / y, x / -y, -x / -y);
}
[test]
uniform 0 float4 45.0 5.0 0.0 0.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (9.0, -9.0, -9.0, 9.0)
[pixel shader todo(sm<4)]
uniform float2 a;
float4 main() : SV_TARGET
{
int x = a.x;
int y = a.y;
return float4(x % y, -x % y, x % -y, -x % -y);
}
[test]
uniform 0 float4 45.0 5.0 0.0 0.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
[pixel shader]
uniform float4 a;
float4 main() : SV_TARGET
{
return abs(int4(a));
}
[test]
uniform 0 float4 5.0 -7.0 0.0 -10.0
todo(msl) draw quad
probe (0, 0) rgba (5.0, 7.0, 0.0, 10.0)
[pixel shader todo(sm<4)]
uniform float4 a;
uniform float4 b;
float4 main() : sv_target
{
int2 x = a.xz;
int2 y = a.yw;
int2 z = b.xy;
int2 w = b.zw;
return float4(x / y, z % w);
}
[test]
uniform 0 float4 45.0 5.0 50.0 10.0
uniform 4 float4 3.0 8.0 2.0 5.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba (9.0, 5.0, 1.0, 3.0)
[pixel shader todo(sm<4)]
float f;
float4 main() : sv_target
{
int a = 16777217; // This rounds down to 16777216 when converted to float.
int b = f;
return float4(a % b, a % (-b), (-a) % b, (-a) % (-b));
}
[test]
uniform 0 float 10.0
todo(sm<4 | glsl | msl) draw quad
if(sm<4) probe (0, 0) rgba(6, 6, -6, -6)
if(sm>=4) probe (0, 0) rgba(7, 7, -7, -7)
[pixel shader todo(sm<4)]
float f;
float4 main() : sv_target
{
int a = 16782201; // This rounds down to 16782200 when converted to float.
int b = f;
return float4(a / b, a / (-b), (-a) / b, (-a) / (-b));
}
[test]
uniform 0 float 999.0
todo(sm<4 | glsl | msl) draw quad
if(sm<4) probe (0, 0) rgba(16798, -16798, -16798, 16798)
if(sm>=4) probe (0, 0) rgba(16799, -16799, -16799, 16799)
[pixel shader todo(sm<4)]
float f;
float4 main() : sv_target
{
int a = 16782200;
int b = f;
return float4(a / b, a / (-b), (-a) / b, (-a) / (-b));
}
[test]
uniform 0 float 999.0
todo(sm<4 | glsl | msl) draw quad
probe (0, 0) rgba(16798, -16798, -16798, 16798)
[require]
shader model >= 6.0
int64
[pixel shader]
uniform int64_t2 a;
float4 main() : SV_TARGET
{
int64_t x = a.x;
int64_t y = a.y;
return float4(x + y, x - y, x * (y >> 4), x / y);
}
[test]
uniform 0 int64_t2 5000000000 16000000000
draw quad
probe (0, 0) rgba (21.0e9, -11.0e9, 5.0e18, 0.0) 1
[pixel shader]
uniform int64_t2 a;
float4 main() : SV_TARGET
{
int64_t x = a.x;
int64_t y = a.y;
return float4(x % y, +x, -x, y / x);
}
[test]
uniform 0 int64_t2 5000000000 16000000000
draw quad
probe (0, 0) rgba (5.0e9, 5.0e9, -5.0e9, 3.0)
[pixel shader]
uniform int64_t2 a;
float4 main() : SV_TARGET
{
int64_t x = a.x;
int64_t y = a.y;
return float4(x / y, -x / y, x / -y, -x / -y);
}
[test]
uniform 0 int64_t2 42000000000 5000000000
draw quad
probe (0, 0) rgba (8.0, -8.0, -8.0, 8.0)
[pixel shader]
uniform int64_t2 a;
float4 main() : SV_TARGET
{
int64_t x = a.x;
int64_t y = a.y;
return float4(x % y, -x % y, x % -y, -x % -y);
}
[test]
uniform 0 int64_t2 42000000000 5000000000
draw quad
probe (0, 0) rgba (2.0e9, -2.0e9, 2.0e9, -2.0e9)
[pixel shader]
uniform int64_t2 a;
float4 main() : SV_TARGET
{
return float4(abs(a), 0, 0);
}
[test]
uniform 0 int64_t2 5000000000 -7000000000
draw quad
probe (0, 0) rgba (5.0e9, 7.0e9, 0.0, 0.0)
[require]
shader model >= 6.2
native-16-bit
[pixel shader]
uniform int16_t4 u;
int4 main() : sv_target
{
int16_t i = 1, j = 0x7fff;
return int4(u.x + i, u.y + j, u.z + i, u.w + j);
}
[test]
uniform 0 uint 0
uniform 1 uint 0x0001fffd
draw quad
probe (0, 0) rgbai(1, 0x7fff, -2, -32768)
[pixel shader]
uniform int16_t4 u;
int4 main() : sv_target
{
int16_t i = -3, j = 5;
return int4(u.x * i, u.y * j, u.z * i, u.w * j);
}
[test]
uniform 0 uint 0xfff70007
uniform 1 uint4 0x9fff9
draw quad
probe (0, 0) rgbai(-21, -45, 21, 45)
[pixel shader]
uniform int16_t4 u;
int4 main() : sv_target
{
int16_t i = 32767, j = -5;
return int4(u.x / i, u.y / j, u.z / i, u.w / j);
}
[test]
uniform 0 uint 0x000b7ffe
uniform 1 uint 0x80007fff
draw quad
probe (0, 0) rgbai(0, -2, 1, 6553)