Commit Graph

4967 Commits

Author SHA1 Message Date
Francisco Casas
7b1b52df02 vkd3d-shader/spirv: Remove the unused "array_element_mask field" from struct vkd3d_shader_output_info. 2025-11-25 19:58:45 +01:00
Henri Verbeet
60fc072877 vkd3d-shader/ir: Move "has_descriptor_info" and "has_no_modifiers" to struct vsir_normalisation_flags. 2025-11-25 19:49:28 +01:00
Francisco Casas
0dabfdee63 vkd3d-shader/ir: Transform clip/cull inputs/outputs into arrays.
Takes care of transforming clip/cull system values from the Direct3D
convention of 2 4-component registers, into the SPIR-V/GLSL convention
of 8-element scalar float arrays.

This fixes SPIR-V validation errors in clip-cull-distance.shader_test,
as well as segfaults on Mesa 25.1.1-arch1.2 if those shaders are
executed regardless.

We create indexable temporaries of the appropriate size, and replace
accesses to clip/cull I/O signature elements with accesses to those
temporaries. The existing clip/cull signature elements are then replaced
with new scalar signature element arrays, and we copy the contents of
those I/O signature elements to/from the corresponding temporaries at
the start/end of the vsir program.

It is worth pointing out that the current implementation assumes that
every instance of the control point phase of a hull shader only writes
to the output registers of its control point, given by
vOutputControlPointID, and not to other control points. Shader
compilation will fail if that constraint is violated.
2025-11-25 19:49:11 +01:00
Francisco Casas
85b7b9c6b4 vkd3d-shader/ir: Introduce vsir_signature_element_is_array(). 2025-11-25 19:45:19 +01:00
Francisco Casas
1307659e74 vkd3d-shader/ir: Assign new register indexes to clip plane signature elements. 2025-11-25 17:24:29 +01:00
Francisco Casas
e00bc4b91b vkd3d-shader/ir: Introduce vsir_opcode_is_control_point_phase(). 2025-11-25 17:01:59 +01:00
Francisco Casas
59ba079ebb vkd3d-shader/ir: Introduce vsir_opcode_is_fork_or_join_phase(). 2025-11-25 17:01:12 +01:00
Giovanni Mascellani
e9d08df010 vkd3d-shader/dxil: Check the fields of well-known structure types.
The main reason is to avoid making false assumptions in the code.
I don't know how that could be used, say, to introduce a security
bug, but I think validating untrusted input should be done by
default.

Conveniently this also acts as documentation for who needs to know
what fields we indeed expect to find in a well-known structure.
2025-11-24 19:03:29 +01:00
Anna (navi) Figueiredo Gomes
13ee6d74ad vkd3d-shader/hlsl: Store statically initialized constant scalars/vectors in ctx->static_initializers.
Constant numeric local variables can be used in places were literals are
expected if they're initialized with a static expression.

Storing such constant in ctx->static_initializers allows copy-prop to
handle such cases properly.
2025-11-24 17:09:15 +01:00
Elizabeth Figura
c50210f230 vkd3d-shader: Implement shader model 1.0-1.3 texture projection. 2025-11-20 18:15:15 +01:00
Giovanni Mascellani
44c80c60b8 vkd3d-shader/dxil: Parse string attributes with string value in parameter attribute groups. 2025-11-20 17:47:47 +01:00
Giovanni Mascellani
64738f5d9f vkd3d-shader/dxil: Parse string attributes in parameter attribute groups. 2025-11-20 17:43:07 +01:00
Giovanni Mascellani
e8db25750c vkd3d-shader/dxil: Parse well-known attributes with numeric value in parameter attribute groups. 2025-11-20 17:42:23 +01:00
Giovanni Mascellani
090490576a vkd3d-shader/dxil: Parse well-known attributes in parameter attribute groups. 2025-11-20 17:41:00 +01:00
Giovanni Mascellani
b174c64308 vkd3d-shader/dxil: Parse the parameter attribute group records.
Except that individual attributes are not parsed yet.
2025-11-20 17:30:22 +01:00
Giovanni Mascellani
c8d95c2fe4 vkd3d-shader: Explicitly initialize the parser status to VKD3D_OK.
That's already happening because all parsers are zero-initialized,
but making it explicit is clearer.
2025-11-20 17:24:39 +01:00
Conor McCarthy
25719f93fa vkd3d-shader/dxil: Get rid of struct sm6_block.
Emission of code into individual block instruction arrays was done to
enable construction of a control flow graph. A graph is constructed from
the flat instruction array in a later pass, so blocks are not needed.

It is possible to emit instructions directly into the array in struct
vsir_program instead of from sm6_function_emit_instructions(), but since
the patch constant function occurs first in DXIL hull shaders, this would
reverse the current order of functions in the flat array. That may be
acceptable, but it is left for a later patch in case any issues arise.
2025-11-20 17:21:16 +01:00
Conor McCarthy
6643c848fd vkd3d-shader/dxil: Emit phi instructions during parsing. 2025-11-20 17:21:16 +01:00
Conor McCarthy
28e58e0c85 vkd3d-shader/dxil: Move relative index validation outside sm6_parser_get_value_index().
This allows sm6_parser_get_value_index() to be called with relative indices
requiring different validation.
2025-11-20 17:21:16 +01:00
Conor McCarthy
7d3a520060 vkd3d-shader/dxil: Initialise or validate forward-referenced values in a helper function.
A future patch needs to call this function from another location.
2025-11-20 17:21:16 +01:00
Conor McCarthy
8a6c5cb401 vkd3d-shader/dxil: Emit an error if a return instruction has operands. 2025-11-20 17:21:16 +01:00
Conor McCarthy
32d0613bcb vkd3d-shader/dxil: Emit return instructions during parsing. 2025-11-20 17:21:15 +01:00
Conor McCarthy
c9f660ec55 vkd3d-shader/dxil: Emit switch instructions during parsing. 2025-11-20 17:21:15 +01:00
Conor McCarthy
8fdc156adb vkd3d-shader/dxil: Emit branch instructions during parsing. 2025-11-20 17:21:15 +01:00
Henri Verbeet
cfe9cd3794 Release 1.18. 2025-11-20 11:36:06 +01:00