mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/tpf: Set the interpolation mode for signature elements.
This commit is contained in:
parent
6b7834d635
commit
15b69721de
Notes:
Alexandre Julliard
2023-10-31 22:39:02 +01: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/422
@ -581,6 +581,12 @@ static unsigned int shader_signature_find_element_for_reg(const struct shader_si
|
||||
vkd3d_unreachable();
|
||||
}
|
||||
|
||||
struct signature_element *vsir_signature_find_element_for_reg(const struct shader_signature *signature,
|
||||
unsigned int reg_idx, unsigned int write_mask)
|
||||
{
|
||||
return &signature->elements[shader_signature_find_element_for_reg(signature, reg_idx, write_mask)];
|
||||
}
|
||||
|
||||
static unsigned int range_map_get_register_count(uint8_t range_map[][VKD3D_VEC4_SIZE],
|
||||
unsigned int register_idx, unsigned int write_mask)
|
||||
{
|
||||
|
@ -1070,16 +1070,31 @@ static void shader_sm4_read_declaration_register_semantic(struct vkd3d_shader_in
|
||||
static void shader_sm4_read_dcl_input_ps(struct vkd3d_shader_instruction *ins, uint32_t opcode,
|
||||
uint32_t opcode_token, const uint32_t *tokens, unsigned int token_count, struct vkd3d_shader_sm4_parser *priv)
|
||||
{
|
||||
struct vkd3d_shader_dst_param *dst = &ins->declaration.dst;
|
||||
|
||||
ins->flags = (opcode_token & VKD3D_SM4_INTERPOLATION_MODE_MASK) >> VKD3D_SM4_INTERPOLATION_MODE_SHIFT;
|
||||
shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], VKD3D_DATA_FLOAT, &ins->declaration.dst);
|
||||
if (shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], VKD3D_DATA_FLOAT, dst))
|
||||
{
|
||||
struct signature_element *e = vsir_signature_find_element_for_reg(
|
||||
&priv->p.shader_desc.input_signature, dst->reg.idx[dst->reg.idx_count - 1].offset, dst->write_mask);
|
||||
|
||||
e->interpolation_mode = ins->flags;
|
||||
}
|
||||
}
|
||||
|
||||
static void shader_sm4_read_dcl_input_ps_siv(struct vkd3d_shader_instruction *ins, uint32_t opcode,
|
||||
uint32_t opcode_token, const uint32_t *tokens, unsigned int token_count, struct vkd3d_shader_sm4_parser *priv)
|
||||
{
|
||||
struct vkd3d_shader_dst_param *dst = &ins->declaration.register_semantic.reg;
|
||||
|
||||
ins->flags = (opcode_token & VKD3D_SM4_INTERPOLATION_MODE_MASK) >> VKD3D_SM4_INTERPOLATION_MODE_SHIFT;
|
||||
shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], VKD3D_DATA_FLOAT,
|
||||
&ins->declaration.register_semantic.reg);
|
||||
if (shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], VKD3D_DATA_FLOAT, dst))
|
||||
{
|
||||
struct signature_element *e = vsir_signature_find_element_for_reg(
|
||||
&priv->p.shader_desc.input_signature, dst->reg.idx[dst->reg.idx_count - 1].offset, dst->write_mask);
|
||||
|
||||
e->interpolation_mode = ins->flags;
|
||||
}
|
||||
ins->declaration.register_semantic.sysval_semantic = *tokens;
|
||||
}
|
||||
|
||||
|
@ -916,6 +916,8 @@ struct shader_signature
|
||||
unsigned int element_count;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
struct vkd3d_shader_desc
|
||||
|
Loading…
x
Reference in New Issue
Block a user