mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/spirv: Always emit clip/cull builtins as an array.
Clip/cull distance can appear as input in pixel shaders, and the array size must not be forced to zero.
This commit is contained in:
parent
b5c067b41a
commit
9fcc904834
Notes:
Alexandre Julliard
2023-12-06 23:24:41 +01:00
Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/513
@ -4714,8 +4714,11 @@ static uint32_t spirv_compiler_emit_input(struct spirv_compiler *compiler,
|
||||
|
||||
array_sizes[0] = (reg->type == VKD3DSPR_PATCHCONST ? 0 : compiler->input_control_point_count);
|
||||
array_sizes[1] = signature_element->register_count;
|
||||
if (array_sizes[1] == 1 && !vsir_sysval_semantic_is_tess_factor(signature_element->sysval_semantic))
|
||||
if (array_sizes[1] == 1 && !vsir_sysval_semantic_is_tess_factor(signature_element->sysval_semantic)
|
||||
&& (!vsir_sysval_semantic_is_clip_cull(signature_element->sysval_semantic) || array_sizes[0]))
|
||||
{
|
||||
array_sizes[1] = 0;
|
||||
}
|
||||
|
||||
write_mask = signature_element->mask;
|
||||
|
||||
|
@ -980,6 +980,11 @@ static inline bool vsir_sysval_semantic_is_tess_factor(enum vkd3d_shader_sysval_
|
||||
&& sysval_semantic <= VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN;
|
||||
}
|
||||
|
||||
static inline bool vsir_sysval_semantic_is_clip_cull(enum vkd3d_shader_sysval_semantic sysval_semantic)
|
||||
{
|
||||
return sysval_semantic == VKD3D_SHADER_SV_CLIP_DISTANCE || sysval_semantic == VKD3D_SHADER_SV_CULL_DISTANCE;
|
||||
}
|
||||
|
||||
struct signature_element *vsir_signature_find_element_for_reg(const struct shader_signature *signature,
|
||||
unsigned int reg_idx, unsigned int write_mask);
|
||||
void shader_signature_cleanup(struct shader_signature *signature);
|
||||
|
Loading…
x
Reference in New Issue
Block a user