Commit Graph

8332 Commits

Author SHA1 Message Date
Henri Verbeet
6e18003aef vkd3d-shader/spirv: Use spirv_get_type_id() in spirv_compiler_emit_movc(). 2025-09-17 12:34:13 +02:00
Henri Verbeet
d52efee466 vkd3d-shader/spirv: Use spirv_get_type_id() in spirv_compiler_emit_ext_glsl_instruction(). 2025-09-17 12:34:13 +02:00
Henri Verbeet
31a4741a3b vkd3d-shader/spirv: Use spirv_get_type_id() in spirv_compiler_emit_workgroup_memory(). 2025-09-17 12:34:13 +02:00
Francisco Casas
d2d22c7af6 vkd3d-shader/ir: Move the source and destination operand allocators to struct vsir_program. 2025-09-17 12:31:49 +02:00
Francisco Casas
6ed78a0211 vkd3d-shader/ir: Store a pointer to the vsir program in struct control_point_normaliser.
We will move the dst_params and src_params fields from struct
vkd3d_shader_instruction_array to the vsir program next, so we need to
widen the scope of this pointer to the whole vsir program.
2025-09-17 12:19:56 +02:00
Francisco Casas
5278b8461f vkd3d-shader/ir: Store a pointer to the instruction array in struct control_point_normaliser.
We stop storing a shallow copy of the vsir_program.instructions on
control_point_normaliser.instructions since
vkd3d_shader_instruction_array is not meant to be copied by value, which
is evidenced by the fact that the struct has to always be copied back to
program->instructions before returning.
2025-09-17 12:19:56 +02:00
Francisco Casas
9323dc429c vkd3d-shader/ir: Move the outpointid_param field out of struct vkd3d_shader_instruction_array.
It is worth noting that previously, the case of
vsir_program_create_outpointid_param() failing on
sm6_parser_init_signature() wasn't properly handled.
2025-09-17 12:19:55 +02:00
Henri Verbeet
84b89f0675 vkd3d-shader/ir: Remove some unused fields from struct io_normaliser. 2025-09-17 12:18:28 +02:00
Francisco Casas
5a563ce05d vkd3d-shader/ir: Move icbs from struct vkd3d_shader_instruction_array to struct vsir_program. 2025-09-17 11:48:19 +02:00
Elizabeth Figura
32e64cafa5 vkd3d-shader/d3dbc: Lower TEXCOORD instructions. 2025-09-17 11:37:49 +02:00
Elizabeth Figura
5706834b37 vkd3d-shader/d3dbc: Lower TEX instructions. 2025-09-17 11:28:48 +02:00
Elizabeth Figura
b09a17ddde vkd3d-shader/d3dbc: Lower TEXTURE to TEMP registers when written. 2025-09-17 11:22:23 +02:00
Elizabeth Figura
2cf883d1dd vkd3d-shader/d3dbc: Move the error for unhandled d3dbc instructions to vsir_program_lower_d3dbc_instructions(). 2025-09-17 11:10:55 +02:00
Giovanni Mascellani
dddc92ccfd vkd3d-shader/ir: Use a faster TEMP allocation algorithm. 2025-09-16 16:14:23 +02:00
Giovanni Mascellani
92ac3b592b vkd3d-shader/ir: Introduce temp_allocator_compute_allocation_map().
This isolates computing the allocation map from modifying the program
itself, to make it easier to change the allocation algorithm.
2025-09-16 15:52:09 +02:00
Henri Verbeet
89641d3d42 vkd3d-shader/ir: Require signed source operands for ITOF instructions. 2025-09-16 15:46:23 +02:00
Henri Verbeet
9ee53c9573 vkd3d-shader/d3d-asm: Handle i64 immediate constants. 2025-09-16 15:46:23 +02:00
Henri Verbeet
8fb8cca0d7 vkd3d-shader/dxil: Allow creating signed parameters in src_param_init_from_value(). 2025-09-16 15:46:23 +02:00
Henri Verbeet
b023b67b95 vkd3d-shader/dxil: Allow creating signed parameters in instruction_dst_param_init_ssa_scalar(). 2025-09-16 15:46:23 +02:00
Henri Verbeet
8700e3a5bd vkd3d-shader/dxil: Allow returning signed types from vsir_data_type_from_dxil().
We have a number of vsir operations which should take a signed type, but
which the DXIL parser currently emits unsigned types for. For example,
ISHR.

In the SPIR-V backend, we translate ISHR to OpShiftRightArithmetic,
which is specified as filling the most-significant bits of the result
with the sign bit of the "Base" operand. For an unsigned type, that
would technically be 0. In practice, implementations like radv/Mesa seem
to fill with the most-significant bit of the "Base" operand for unsigned
types, but arguably that could be considered a bug. Alternatively, the
wording in the specification is just unfortunate; SPIR-V does generally
take the position that signedness of operands should be irrelevant for
almost all operations. Either way, it seems best to avoid using
OpShiftRightArithmetic with unsigned types.

For a target like MSL, allowing ISHR to take an unsigned source operand
is just inconvenient; we'd have to introduce bitcasts to achieve the
desired behaviour, instead of simply using msl_binop().
2025-09-16 15:46:23 +02:00
Henri Verbeet
db3aaeca17 vkd3d-shader/ir: Make the vsir assembly data type names consistent with the corresponding enum elements. 2025-09-16 15:44:48 +02:00
Henri Verbeet
e69f3da089 vkd3d-shader/hlsl: Set the "has_point_size" flag for vertex shaders outputting point sizes. 2025-09-11 16:09:46 +02:00
Henri Verbeet
84d3a8d167 vkd3d-shader/hlsl: Use VKD3DSPR_COMBINED_SAMPLER destination operands in sm1_generate_vsir_sampler_dcls().
That's what the d3d-asm target expects in shader_print_dcl_usage(), and
what vkd3d_shader_scan() requires to create correct descriptor
information.
2025-09-11 16:09:46 +02:00
Henri Verbeet
4569a9d5ba vkd3d-shader/hlsl: Set the "flat constant" count in sm1_generate_vsir().
Aside from being required in order to produce valid vsir, this is used
by vsir_program_scan() to generate descriptor information.
2025-09-11 16:09:46 +02:00
Henri Verbeet
2b5dc156c7 vkd3d-shader/hlsl: vsir constant buffer sizes are specified in bytes. 2025-09-11 16:09:46 +02:00