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_SSA,
VALUE_TYPE_ICB,
VALUE_TYPE_IDXTEMP,
VALUE_TYPE_UNDEFINED,
VALUE_TYPE_INVALID,
};
@@ -678,6 +679,11 @@ struct sm6_icb_data
unsigned int id;
};
struct sm6_idxtemp_data
{
unsigned int id;
};
struct sm6_value
{
const struct sm6_type *type;
@@ -691,6 +697,7 @@ struct sm6_value
struct sm6_handle_data handle;
struct sm6_ssa_data ssa;
struct sm6_icb_data icb;
struct sm6_idxtemp_data idxtemp;
} u;
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_SSA:
case VALUE_TYPE_ICB:
case VALUE_TYPE_IDXTEMP:
case VALUE_TYPE_UNDEFINED:
case VALUE_TYPE_INVALID:
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);
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_INVALID:
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. */
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,