2d91bd9200
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-16 18:46:49 +01:00
efd7f2e014
vkd3d-shader/hlsl: Don't lower separate samples with texel offsets.
2025-01-14 17:59:50 +01:00
0a5955372a
vkd3d-shader/hlsl: Lower separate SampleGrad() for SM1.
2025-01-14 17:59:50 +01:00
4227858cfe
vkd3d-shader/hlsl: Move RDEF generation to hlsl_codegen.c.
2025-01-10 20:03:14 +01:00
7b23cd4d3c
vkd3d-shader: Avoid passing NULL to qsort(). (ubsan)
...
Otherwise ubsan reports runtime errors such as:
libs/vkd3d-shader/ir.c:4731:5: runtime error: null pointer passed as argument 1, which is declared to never be null
2025-01-10 19:51:55 +01:00
29bac62ba2
vkd3d-shader/hlsl: Move the "dimx" and "dimy" fields to the type-specific union.
2025-01-10 19:38:13 +01:00
392398794f
vkd3d-shader/d3dbc: Do not access the type dimensions for non-numeric types.
2025-01-10 19:24:21 +01:00
1ff1a51e4b
vkd3d-shader/hlsl: Avoid some uses of the default case when switching over hlsl_base_type.
...
Since we have -Wswitch, this forces the developer to update all relevant
switches when an enum case is added.
Places where the default is just a FIXME are left alone.
2025-01-10 19:24:10 +01:00
45d9a097e6
vkd3d-shader/hlsl: Move sm4_free_extern_resources() to hlsl_codegen.c.
2024-12-19 21:09:32 +01:00
b143754360
vkd3d-shader/hlsl: Move sm4_get_extern_resources() to hlsl_codegen.c.
2024-12-19 21:09:32 +01:00
0236c480e3
vkd3d-shader/hlsl: Make sm4_get_interpolation_mode() static.
2024-12-19 21:09:32 +01:00
59df26af79
vkd3d-shader/hlsl: Lower sample lods for SM1.
...
For SM1 the lod bias should be in src0.w.
2024-12-18 17:27:43 +01:00
f09ac4959e
vkd3d-shader/hlsl: Implement the GatherCmp() methods.
2024-12-18 17:27:43 +01:00
e8cc288426
vkd3d-shader/hlsl: Move CTAB generation to hlsl_codegen.c.
2024-12-17 16:42:53 +01:00
64126a00c3
vkd3d-shader/ir: Give more meaningful names to I/O normalisation levels.
...
The previous names "not normalised" and "fully normalised" have meanings
which are likely to change with time. OTOH including a description of the
normalisation level in the enumerant seems excessive. Relating
normalisation levels to shader model versions might be a reasonable
compromise.
2024-12-12 17:21:49 +01:00
09095403ac
vkd3d-shader/hlsl: Store swizzles in vsir format.
...
The previous format matched sm1 and sm4, but if we're going to be feeding
everything through vsir, we want vsir's format.
2024-12-12 17:20:23 +01:00
474a0ac4e2
vkd3d-shader/hlsl: Use swizzle helpers in more places.
2024-12-12 17:11:53 +01:00
a905a78a96
vkd3d-shader/hlsl: Use a structure for matrix swizzles.
2024-12-12 17:11:27 +01:00
ed6061dfae
vkd3d-shader/hlsl: Drop the _ir_ infix from enum hlsl_loop_unroll_type.
2024-12-12 16:54:07 +01:00
a1d995e740
vkd3d-shader/hlsl: Unroll loops with conditional jumps.
2024-12-12 16:54:04 +01:00
351d58a95b
vkd3d-shader/hlsl: Partially defer continue resolution.
...
We need 'for' iter blocks to be separate for loop unrolling.
2024-12-12 16:41:34 +01:00
5d8448a44e
vkd3d-shader/hlsl: Remove loop_unrolling_find_unrollable_loop().
...
Since loop unrolling doesn't clone the entire program anymore, we can
express it as a hlsl_transform_ir() transform.
2024-12-12 16:41:34 +01:00
de3a365fea
vkd3d-shader/hlsl: Do not clone the entire program for loop unrolling.
2024-12-12 16:41:34 +01:00
0a8c4a6fa2
vkd3d-shader/hlsl: Run copy propagation incrementally during loop unrolling.
2024-12-12 16:41:34 +01:00
7bee33f948
vkd3d-shader/hlsl: Allow copy propagation to be stopped early.
2024-12-12 16:41:34 +01:00