mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/spirv: Remove the unused "array_element_mask field" from struct vkd3d_shader_output_info.
This commit is contained in:
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
@@ -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;
|
||||
}
|
||||
spirv_compiler_emit_store(compiler, output_id, dst_write_mask,
|
||||
data_type, SpvStorageClassOutput, write_mask, val_id);
|
||||
}
|
||||
|
||||
static void spirv_compiler_emit_shader_epilogue_function(struct spirv_compiler *compiler)
|
||||
|
||||
Reference in New Issue
Block a user