mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/dxil: Generate IDXTEMP values in sm6_parser_declare_indexable_temp().
This commit is contained in:
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
@@ -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,
|
||||||
|
Reference in New Issue
Block a user