vkd3d-shader/dxil: Generate IDXTEMP values in sm6_parser_declare_indexable_temp().

This commit is contained in:
Giovanni Mascellani
2025-05-02 12:10:56 +02:00
committed by Henri Verbeet
parent 8635a7ff6e
commit cb5a548740
Notes: Henri Verbeet 2025-05-12 15:43:45 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1486

View File

@@ -649,6 +649,7 @@ enum sm6_value_type
VALUE_TYPE_HANDLE, VALUE_TYPE_HANDLE,
VALUE_TYPE_SSA, VALUE_TYPE_SSA,
VALUE_TYPE_ICB, VALUE_TYPE_ICB,
VALUE_TYPE_IDXTEMP,
VALUE_TYPE_UNDEFINED, VALUE_TYPE_UNDEFINED,
VALUE_TYPE_INVALID, VALUE_TYPE_INVALID,
}; };
@@ -678,6 +679,11 @@ struct sm6_icb_data
unsigned int id; unsigned int id;
}; };
struct sm6_idxtemp_data
{
unsigned int id;
};
struct sm6_value struct sm6_value
{ {
const struct sm6_type *type; const struct sm6_type *type;
@@ -691,6 +697,7 @@ struct sm6_value
struct sm6_handle_data handle; struct sm6_handle_data handle;
struct sm6_ssa_data ssa; struct sm6_ssa_data ssa;
struct sm6_icb_data icb; struct sm6_icb_data icb;
struct sm6_idxtemp_data idxtemp;
} u; } u;
struct vkd3d_shader_register reg; struct vkd3d_shader_register reg;
}; };
@@ -2253,6 +2260,7 @@ static inline bool sm6_value_is_register(const struct sm6_value *value)
case VALUE_TYPE_REG: case VALUE_TYPE_REG:
case VALUE_TYPE_SSA: case VALUE_TYPE_SSA:
case VALUE_TYPE_ICB: case VALUE_TYPE_ICB:
case VALUE_TYPE_IDXTEMP:
case VALUE_TYPE_UNDEFINED: case VALUE_TYPE_UNDEFINED:
case VALUE_TYPE_INVALID: case VALUE_TYPE_INVALID:
return true; return true;
@@ -2438,6 +2446,10 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
register_init_with_id(reg, VKD3DSPR_IMMCONSTBUFFER, data_type, value->u.icb.id); register_init_with_id(reg, VKD3DSPR_IMMCONSTBUFFER, data_type, value->u.icb.id);
break; break;
case VALUE_TYPE_IDXTEMP:
register_init_with_id(reg, VKD3DSPR_IDXTEMP, data_type, value->u.idxtemp.id);
break;
case VALUE_TYPE_UNDEFINED: case VALUE_TYPE_UNDEFINED:
case VALUE_TYPE_INVALID: case VALUE_TYPE_INVALID:
vsir_register_init(reg, VKD3DSPR_UNDEF, data_type, 0); vsir_register_init(reg, VKD3DSPR_UNDEF, data_type, 0);
@@ -3518,7 +3530,9 @@ static void sm6_parser_declare_indexable_temp(struct sm6_parser *sm6, const stru
/* The initialiser value index will be resolved later so forward references can be handled. */ /* The initialiser value index will be resolved later so forward references can be handled. */
ins->declaration.indexable_temp.initialiser = (void *)(uintptr_t)init; ins->declaration.indexable_temp.initialiser = (void *)(uintptr_t)init;
register_init_with_id(&dst->reg, VKD3DSPR_IDXTEMP, data_type, ins->declaration.indexable_temp.register_idx); dst->value_type = VALUE_TYPE_IDXTEMP;
dst->u.idxtemp.id = ins->declaration.indexable_temp.register_idx;
sm6_register_from_value(&dst->reg, dst);
} }
static void sm6_parser_declare_tgsm_raw(struct sm6_parser *sm6, const struct sm6_type *elem_type, static void sm6_parser_declare_tgsm_raw(struct sm6_parser *sm6, const struct sm6_type *elem_type,