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;
|
uint32_t id;
|
||||||
enum vsir_data_type data_type;
|
enum vsir_data_type data_type;
|
||||||
uint32_t array_element_mask;
|
|
||||||
} *output_info;
|
} *output_info;
|
||||||
uint32_t private_output_variable[MAX_REG_OUTPUT + 1]; /* 1 entry for oDepth */
|
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 */
|
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;
|
use_private_variable = true;
|
||||||
|
|
||||||
if (!is_patch_constant
|
if (!is_patch_constant
|
||||||
&& (get_shader_output_swizzle(compiler, signature_element->register_index) != VKD3D_SHADER_NO_SWIZZLE
|
&& 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)))
|
|
||||||
{
|
{
|
||||||
use_private_variable = true;
|
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,
|
static void spirv_compiler_emit_store_shader_output(struct spirv_compiler *compiler,
|
||||||
const struct shader_signature *signature, const struct signature_element *output,
|
const struct shader_signature *signature, const struct signature_element *output,
|
||||||
const struct vkd3d_shader_output_info *output_info,
|
const struct vkd3d_shader_output_info *output_info,
|
||||||
uint32_t output_index_id, uint32_t val_id, uint32_t write_mask)
|
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;
|
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;
|
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;
|
enum vsir_data_type data_type;
|
||||||
uint32_t output_id;
|
uint32_t output_id;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
dst_write_mask = output->mask;
|
dst_write_mask = output->mask;
|
||||||
use_mask = output->used_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);
|
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,
|
spirv_compiler_emit_store(compiler, output_id, dst_write_mask,
|
||||||
data_type, SpvStorageClassOutput, write_mask, val_id);
|
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)
|
static void spirv_compiler_emit_shader_epilogue_function(struct spirv_compiler *compiler)
|
||||||
|
|||||||
Reference in New Issue
Block a user