2023-10-20 23:23:46 -03:00
|
|
|
[pixel shader]
|
2024-01-26 22:07:15 -03:00
|
|
|
uniform float3 f;
|
|
|
|
|
|
|
|
float4 main() : sv_target
|
|
|
|
{
|
|
|
|
int3 r = f;
|
|
|
|
|
|
|
|
return float4(r, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2025-01-14 20:54:19 -03:00
|
|
|
uniform 0 float4 10.3 -11.6 12.8 13.1
|
2024-11-22 15:45:54 +08:00
|
|
|
draw quad
|
vkd3d-shader/hlsl: Properly lower casts to int for negative numbers.
While it looks complicated, it is what fxc/d3dcompiler does.
A shader as simple as:
float4 f;
float4 main() : sv_target
{
return (int4)f;
}
results in the following instructions:
ps_2_0
def c1, 0, 1, 0, 0
frc r0, c0
cmp r1, -r0, c1.x, c1.y
add r0, -r0, c0
mov r2, c0
cmp r1, r2, c1.x, r1
add r0, r0, r1
mov oC0, r0
2025-01-15 10:45:39 -03:00
|
|
|
probe (0, 0) rgba(10, -11, 12, 0)
|
2025-01-14 20:54:19 -03:00
|
|
|
|
|
|
|
|
|
|
|
[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
|
vkd3d-shader/hlsl: Properly lower casts to int for negative numbers.
While it looks complicated, it is what fxc/d3dcompiler does.
A shader as simple as:
float4 f;
float4 main() : sv_target
{
return (int4)f;
}
results in the following instructions:
ps_2_0
def c1, 0, 1, 0, 0
frc r0, c0
cmp r1, -r0, c1.x, c1.y
add r0, -r0, c0
mov r2, c0
cmp r1, r2, c1.x, r1
add r0, r0, r1
mov oC0, r0
2025-01-15 10:45:39 -03:00
|
|
|
probe (0, 0) rgba(0, 0, -12, 14)
|
2024-01-26 22:07:15 -03:00
|
|
|
|
|
|
|
|
2024-01-31 17:10:29 -03:00
|
|
|
[pixel shader todo(sm<4)]
|
2023-09-14 19:29:24 +10:00
|
|
|
uniform float f;
|
|
|
|
uniform uint u;
|
|
|
|
uniform bool b;
|
2023-10-13 16:55:50 +02:00
|
|
|
uniform float h;
|
2021-09-09 21:11:34 -05:00
|
|
|
|
2023-09-14 19:29:24 +10:00
|
|
|
float4 main() : sv_target
|
2021-09-09 21:11:34 -05:00
|
|
|
{
|
|
|
|
float4 ret;
|
|
|
|
|
|
|
|
ret.x = ((float)(int)f) - 1.5;
|
|
|
|
ret.y = ((float)(int)u) + 2.5;
|
|
|
|
ret.z = ((float)(int)b) / 2;
|
2023-10-13 16:55:50 +02:00
|
|
|
ret.w = ((float)(int)(half)h) + 3.5;
|
2021-09-09 21:11:34 -05:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
[test]
|
2024-01-31 17:10:29 -03:00
|
|
|
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
|
2024-11-22 15:45:54 +08:00
|
|
|
todo(sm<4) draw quad
|
2024-02-10 13:16:22 -06:00
|
|
|
probe (0, 0) rgba (0.5, 0.5, 0.5, 0.5)
|
2021-09-09 21:11:34 -05:00
|
|
|
|
|
|
|
|
2024-01-31 17:10:29 -03:00
|
|
|
[pixel shader]
|
2021-09-09 21:11:34 -05:00
|
|
|
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]
|
2024-11-22 15:45:54 +08:00
|
|
|
draw quad
|
2024-02-10 13:16:22 -06:00
|
|
|
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)
|