vkd3d-shader/spirv: Remove the unused "array_element_mask field" from struct vkd3d_shader_output_info.

This commit is contained in:
Francisco Casas
2025-10-17 01:59:18 -03:00
committed by Henri Verbeet
parent 41c593ef46
commit 7b1b52df02
Notes: Henri Verbeet 2025-11-25 20:40:54 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1816

View File

@@ -2972,7 +2972,6 @@ struct spirv_compiler
{
uint32_t id;
enum vsir_data_type data_type;
uint32_t array_element_mask;
} *output_info;
uint32_t private_output_variable[MAX_REG_OUTPUT + 1]; /* 1 entry for oDepth */
uint32_t private_output_variable_write_mask[MAX_REG_OUTPUT + 1]; /* 1 entry for oDepth */
@@ -5863,8 +5862,7 @@ static void spirv_compiler_emit_output(struct spirv_compiler *compiler,
use_private_variable = true;
if (!is_patch_constant
&& (get_shader_output_swizzle(compiler, signature_element->register_index) != VKD3D_SHADER_NO_SWIZZLE
|| (compiler->output_info[element_idx].id && compiler->output_info[element_idx].array_element_mask)))
&& get_shader_output_swizzle(compiler, signature_element->register_index) != VKD3D_SHADER_NO_SWIZZLE)
{
use_private_variable = true;
}
@@ -5963,36 +5961,18 @@ static void spirv_compiler_emit_output(struct spirv_compiler *compiler,
}
}
static uint32_t spirv_compiler_get_output_array_index(struct spirv_compiler *compiler,
const struct signature_element *e)
{
enum vkd3d_shader_sysval_semantic sysval = e->sysval_semantic;
const struct vkd3d_spirv_builtin *builtin;
builtin = get_spirv_builtin_for_sysval(compiler, sysval);
switch (sysval)
{
case VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN:
case VKD3D_SHADER_SV_TESS_FACTOR_LINEDET:
return builtin->member_idx;
default:
return e->semantic_index;
}
}
static void spirv_compiler_emit_store_shader_output(struct spirv_compiler *compiler,
const struct shader_signature *signature, const struct signature_element *output,
const struct vkd3d_shader_output_info *output_info,
uint32_t output_index_id, uint32_t val_id, uint32_t write_mask)
{
uint32_t dst_write_mask, use_mask, uninit_mask, swizzle, mask;
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
uint32_t type_id, zero_id, ptr_type_id, chain_id, object_id;
uint32_t dst_write_mask, use_mask, uninit_mask, swizzle;
const struct signature_element *element;
unsigned int i, index, array_idx;
uint32_t type_id, zero_id, ptr_type_id;
enum vsir_data_type data_type;
uint32_t output_id;
unsigned int i;
dst_write_mask = output->mask;
use_mask = output->used_mask;
@@ -6046,31 +6026,8 @@ static void spirv_compiler_emit_store_shader_output(struct spirv_compiler *compi
output_id = vkd3d_spirv_build_op_access_chain1(builder, ptr_type_id, output_id, output_index_id);
}
if (!output_info->array_element_mask)
{
spirv_compiler_emit_store(compiler, output_id, dst_write_mask,
data_type, SpvStorageClassOutput, write_mask, val_id);
return;
}
type_id = spirv_get_type_id(compiler, data_type, 1);
ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, SpvStorageClassOutput, type_id);
mask = output_info->array_element_mask;
array_idx = spirv_compiler_get_output_array_index(compiler, output);
mask &= (1u << (array_idx * VKD3D_VEC4_SIZE)) - 1;
for (i = 0, index = vkd3d_popcount(mask); i < VKD3D_VEC4_SIZE; ++i)
{
if (!(write_mask & (VKD3DSP_WRITEMASK_0 << i)))
continue;
chain_id = vkd3d_spirv_build_op_access_chain1(builder,
ptr_type_id, output_id, spirv_compiler_get_constant_uint(compiler, index));
object_id = spirv_compiler_emit_swizzle(compiler, val_id, write_mask,
data_type, VKD3D_SHADER_NO_SWIZZLE, VKD3DSP_WRITEMASK_0 << i);
spirv_compiler_emit_store(compiler, chain_id, VKD3DSP_WRITEMASK_0, data_type,
SpvStorageClassOutput, VKD3DSP_WRITEMASK_0 << i, object_id);
++index;
}
}
static void spirv_compiler_emit_shader_epilogue_function(struct spirv_compiler *compiler)