mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/hlsl: Support indirect addressing of uniforms in sm4_generate_vsir_reg_from_deref().
This commit is contained in:
Notes:
Henri Verbeet
2025-03-12 22:20:19 +01:00
Approved-by: Francisco Casas (@fcasas) Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1388
@@ -7207,7 +7207,7 @@ static bool sm4_generate_vsir_reg_from_deref(struct hlsl_ctx *ctx, struct vsir_p
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned int offset = hlsl_offset_from_deref_safe(ctx, deref) + var->buffer_offset;
|
unsigned int offset = deref->const_offset + var->buffer_offset;
|
||||||
|
|
||||||
VKD3D_ASSERT(data_type->class <= HLSL_CLASS_VECTOR);
|
VKD3D_ASSERT(data_type->class <= HLSL_CLASS_VECTOR);
|
||||||
reg->type = VKD3DSPR_CONSTBUFFER;
|
reg->type = VKD3DSPR_CONSTBUFFER;
|
||||||
@@ -7225,6 +7225,14 @@ static bool sm4_generate_vsir_reg_from_deref(struct hlsl_ctx *ctx, struct vsir_p
|
|||||||
reg->idx[1].offset = offset / 4;
|
reg->idx[1].offset = offset / 4;
|
||||||
reg->idx_count = 2;
|
reg->idx_count = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (deref->rel_offset.node)
|
||||||
|
{
|
||||||
|
if (!(reg->idx[reg->idx_count - 1].rel_addr = sm4_generate_vsir_new_idx_src(ctx,
|
||||||
|
program, deref->rel_offset.node)))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
*writemask = ((1u << data_type->e.numeric.dimx) - 1) << (offset & 3);
|
*writemask = ((1u << data_type->e.numeric.dimx) - 1) << (offset & 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user