mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
Note that in d3dbc target profiles it gives different results when this operation is constant folded compared to when it is not. This suggests that whatever pass lowers the modulus operation to d3dbc operations doesn't do it before constant folding. Also note that when constant folded, d3dbc results differ from tpf results for negative operands, because of the loss of precision that happens when NEG is constant folded. So the same integer modulus expression can have 3 different results depending on the context.
266 lines
4.6 KiB
Plaintext
266 lines
4.6 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)
|
|
|
|
[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)
|