mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/d3dbc: Introduce d3dbc_parse_register().
This commit is contained in:
parent
3c53293028
commit
d164752efc
Notes:
Henri Verbeet
2024-12-18 17:39:58 +01:00
Approved-by: Francisco Casas (@fcasas) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1322
@ -555,28 +555,34 @@ static enum vkd3d_shader_register_type parse_register_type(
|
||||
return VKD3DSPR_INVALID;
|
||||
}
|
||||
|
||||
static void shader_sm1_parse_src_param(struct vkd3d_shader_sm1_parser *sm1, uint32_t param,
|
||||
struct vkd3d_shader_src_param *rel_addr, struct vkd3d_shader_src_param *src)
|
||||
static void d3dbc_parse_register(struct vkd3d_shader_sm1_parser *d3dbc,
|
||||
struct vkd3d_shader_register *reg, uint32_t param, struct vkd3d_shader_src_param *rel_addr)
|
||||
{
|
||||
enum vkd3d_shader_register_type reg_type;
|
||||
unsigned int index_offset, idx_count;
|
||||
|
||||
reg_type = parse_register_type(sm1, param, &index_offset);
|
||||
reg_type = parse_register_type(d3dbc, param, &index_offset);
|
||||
idx_count = idx_count_from_reg_type(reg_type);
|
||||
vsir_register_init(&src->reg, reg_type, VKD3D_DATA_FLOAT, idx_count);
|
||||
src->reg.precision = VKD3D_SHADER_REGISTER_PRECISION_DEFAULT;
|
||||
src->reg.non_uniform = false;
|
||||
vsir_register_init(reg, reg_type, VKD3D_DATA_FLOAT, idx_count);
|
||||
reg->precision = VKD3D_SHADER_REGISTER_PRECISION_DEFAULT;
|
||||
reg->non_uniform = false;
|
||||
if (idx_count == 1)
|
||||
{
|
||||
src->reg.idx[0].offset = index_offset + (param & VKD3D_SM1_REGISTER_NUMBER_MASK);
|
||||
src->reg.idx[0].rel_addr = rel_addr;
|
||||
reg->idx[0].offset = index_offset + (param & VKD3D_SM1_REGISTER_NUMBER_MASK);
|
||||
reg->idx[0].rel_addr = rel_addr;
|
||||
}
|
||||
if (src->reg.type == VKD3DSPR_SAMPLER)
|
||||
src->reg.dimension = VSIR_DIMENSION_NONE;
|
||||
else if (src->reg.type == VKD3DSPR_DEPTHOUT)
|
||||
src->reg.dimension = VSIR_DIMENSION_SCALAR;
|
||||
if (reg->type == VKD3DSPR_SAMPLER)
|
||||
reg->dimension = VSIR_DIMENSION_NONE;
|
||||
else if (reg->type == VKD3DSPR_DEPTHOUT)
|
||||
reg->dimension = VSIR_DIMENSION_SCALAR;
|
||||
else
|
||||
src->reg.dimension = VSIR_DIMENSION_VEC4;
|
||||
reg->dimension = VSIR_DIMENSION_VEC4;
|
||||
}
|
||||
|
||||
static void shader_sm1_parse_src_param(struct vkd3d_shader_sm1_parser *sm1, uint32_t param,
|
||||
struct vkd3d_shader_src_param *rel_addr, struct vkd3d_shader_src_param *src)
|
||||
{
|
||||
d3dbc_parse_register(sm1, &src->reg, param, rel_addr);
|
||||
src->swizzle = swizzle_from_sm1((param & VKD3D_SM1_SWIZZLE_MASK) >> VKD3D_SM1_SWIZZLE_SHIFT);
|
||||
src->modifiers = (param & VKD3D_SM1_SRC_MODIFIER_MASK) >> VKD3D_SM1_SRC_MODIFIER_SHIFT;
|
||||
}
|
||||
@ -584,25 +590,7 @@ static void shader_sm1_parse_src_param(struct vkd3d_shader_sm1_parser *sm1, uint
|
||||
static void shader_sm1_parse_dst_param(struct vkd3d_shader_sm1_parser *sm1, uint32_t param,
|
||||
struct vkd3d_shader_src_param *rel_addr, struct vkd3d_shader_dst_param *dst)
|
||||
{
|
||||
enum vkd3d_shader_register_type reg_type;
|
||||
unsigned int index_offset, idx_count;
|
||||
|
||||
reg_type = parse_register_type(sm1, param, &index_offset);
|
||||
idx_count = idx_count_from_reg_type(reg_type);
|
||||
vsir_register_init(&dst->reg, reg_type, VKD3D_DATA_FLOAT, idx_count);
|
||||
dst->reg.precision = VKD3D_SHADER_REGISTER_PRECISION_DEFAULT;
|
||||
dst->reg.non_uniform = false;
|
||||
if (idx_count == 1)
|
||||
{
|
||||
dst->reg.idx[0].offset = index_offset + (param & VKD3D_SM1_REGISTER_NUMBER_MASK);
|
||||
dst->reg.idx[0].rel_addr = rel_addr;
|
||||
}
|
||||
if (dst->reg.type == VKD3DSPR_SAMPLER)
|
||||
dst->reg.dimension = VSIR_DIMENSION_NONE;
|
||||
else if (dst->reg.type == VKD3DSPR_DEPTHOUT)
|
||||
dst->reg.dimension = VSIR_DIMENSION_SCALAR;
|
||||
else
|
||||
dst->reg.dimension = VSIR_DIMENSION_VEC4;
|
||||
d3dbc_parse_register(sm1, &dst->reg, param, rel_addr);
|
||||
dst->modifiers = (param & VKD3D_SM1_DST_MODIFIER_MASK) >> VKD3D_SM1_DST_MODIFIER_SHIFT;
|
||||
dst->shift = (param & VKD3D_SM1_DSTSHIFT_MASK) >> VKD3D_SM1_DSTSHIFT_SHIFT;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user