vkd3d-shader/spirv: Handle signature element mask left shift in spirv_compiler_emit_output().

Element masks can have a left shift in DXIL, but these must start at
bit 0 in the register info. The SPIR-V declaration will either be a
builtin or have SpvDecorationComponent.
This commit is contained in:
Conor McCarthy 2023-06-15 14:02:34 +10:00 committed by Alexandre Julliard
parent ebc461f795
commit 61a550017f
Notes: Alexandre Julliard 2023-08-30 23:19:25 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/283

View File

@ -4965,7 +4965,6 @@ static void spirv_compiler_emit_output(struct spirv_compiler *compiler,
component_type = builtin->component_type;
if (!builtin->spirv_array_size)
output_component_count = builtin->component_count;
component_idx = 0;
}
else
{
@ -4979,14 +4978,9 @@ static void spirv_compiler_emit_output(struct spirv_compiler *compiler,
|| needs_private_io_variable(builtin))
{
use_private_variable = true;
reg_write_mask = write_mask;
}
else
{
component_idx = vkd3d_write_mask_get_component_idx(write_mask);
reg_write_mask = write_mask >> component_idx;
}
reg_write_mask = write_mask >> component_idx;
vkd3d_symbol_make_register(&reg_symbol, reg);
if (rb_get(&compiler->symbol_table, &reg_symbol))