Commit Graph

913 Commits

Author SHA1 Message Date
49fba97b0a vkd3d-shader/spirv: Introduce a SPIR-V parser. 2024-12-09 14:22:24 +01:00
1c93d706d7 vkd3d-shader/ir: Merge removing I/O declarations in the general instruction lowering pass. 2024-12-03 14:36:13 +01:00
18e422dfe4 vkd3d-shader/ir: Encode I/O declarations in vsir_program.
Most I/O registers are already described by the shader signatures.
The registers that are not do not have any property other then
being used by the program or not, so they can be collectively
described with a bitmap.
2024-12-03 14:19:24 +01:00
a92b602b33 vkd3d-shader/spirv: Merge emitting input and output registers.
The register storage class is now represented in
vkd3d_register_builtins, so the spirv_compiler_emit_io_register()
doesn't need to know it from the caller.
2024-12-03 13:48:39 +01:00
f86d1e72a4 vkd3d-shader/ir: Allow controlling fog through parameters.
Fog requires several parameters to even implement the most basic of
functionality correctly, so this commit is relatively large.
2024-12-02 17:12:06 +01:00
a1de406de4 vkd3d-shader/spirv: Handle SSA registers in spirv_compiler_get_register_info().
Instead of in spirv_compiler_emit_load_reg(). This allows arbitrary swizzles to
work and reduces the amount of duplicated code.
2024-12-02 17:08:43 +01:00
1cfe23569c vkd3d-shader/ir: Synthesize the default control point phase in the HS control point I/O normaliser.
This makes it available to all backends, without requiring an
ad-hoc solution for each of them. It also gets rid of an
undocumented flag we're currently passing to
DCL_CONTROL_POINT_PHASE.
2024-11-27 13:57:09 +01:00
1ed8d907b3 vkd3d-shader/ir: Keep track of the tessellator domain in struct vsir_program. 2024-11-21 19:28:46 +01:00
5c00766eff Release 1.14. 2024-11-21 12:35:55 +01:00
7412e66064 vkd3d-shader/spirv: Get rid of the "offset_component_count" field of struct vkd3d_spirv_resource_type.
The number of components needed for texel offsets is the number of
components needed to address a single image/layer of an array. I.e.,
"coordinate_component_count - 1" for array textures, and
"coordinate_component_count" for non-array textures.

This change will also fix sampling of cube textures with explicit
gradients. Because texel offsets are unsupported for cube textures,
"offset_component_count" is currently 0 for cube textures. However, the
SAMPLE_GRAD handler also uses "offset_component_count" to determine the
number of components needed for the explicit gradients, and SAMPLE_GRAD
is supposed to work with cube textures.

This commit fixes the compilation of shaders in Star Wars Jedi:
Survivor.
2024-11-12 19:12:47 +01:00
8438aacc3b vkd3d-shader/spriv: Only lookup resource symbols for UAVs in the ld_raw/ld_structured handler.
We don't need them for SRVs. Worse, if we're using a combined
resource/sampler pair for the SRV, a separate resource symbol may not
even exist.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
2024-11-06 21:47:08 +01:00
08253504dc vkd3d-shader: Make an assert into an explicit check.
For some reason gcc without LTO thinks that component_count can overflow the
array here.
2024-10-28 18:01:06 +01:00
9690ffff61 vkd3d-shader/spirv: Handle oPts in spirv_compiler_get_register_name(). 2024-10-28 17:54:43 +01:00
1113d24a70 vkd3d-shader/ir: Store the global flags in struct vsir_program. 2024-10-22 20:40:31 +02:00
a492d64fef vkd3d-shader/ir: Allow controlling point sprite through a parameter. 2024-10-22 19:14:02 +02:00
ed4d45355a vkd3d-shader/ir: Represent the normalisation level with an enumeration. 2024-10-21 18:21:39 +02:00
d9508558a9 vkd3d-shader: Keep track of whether programs have normalised hull shader control point I/O. 2024-10-17 17:34:55 +02:00
eba8fd4720 vkd3d-shader: Keep track of whether programs have normalised I/O. 2024-10-17 17:34:55 +02:00
54092286be vkd3d-shader/ir: Allow controlling FFP point size through a vkd3d-shader parameter. 2024-10-10 22:25:09 +02:00
6ee17cf77e vkd3d-shader/spirv: Implement shader point size. 2024-10-10 22:14:45 +02:00
56e5fca501 vkd3d-shader/spirv: Always write the point size in vertex shaders.
Vulkan requires that point size be written.

There should be no backwards compatibility concern here, since the vertex shader
supplies point size with the lowest priority.
2024-10-10 21:50:30 +02:00
845d6f9134 vkd3d-shader/ir: Remove VKD3DSIH_DCL_UAV_TYPED instructions. 2024-10-10 20:00:45 +02:00
9cb4207c92 vkd3d-shader/spirv: Write spirv_compiler_emit_variable() in terms of spirv_compiler_emit_array_variable().
Essentially for code clarity, so that it's more obvious that a
non-array variable is indeed an array variable with no indices.
2024-10-09 13:15:25 +02:00
cf92d9f398 vkd3d-shader/ir: Store the thread group size in struct vsir_program. 2024-10-08 22:03:05 +02:00
c571a45e65 vkd3d-shader/ir: Don't shift register write masks by the component index in shader_dst_param_io_normalise().
This loses information about which source elements they want, making
"o.yzw = reg.xxyz" compile to "o = reg.xxy" instead of "o = reg.xyz".
2024-10-07 17:36:11 +02:00