mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader: Allocate constant buffers.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
committed by
Alexandre Julliard
parent
f7bf1dc01c
commit
dd03242417
@@ -112,6 +112,18 @@ static unsigned int get_array_size(const struct hlsl_type *type)
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int hlsl_type_get_sm4_offset(const struct hlsl_type *type, unsigned int offset)
|
||||
{
|
||||
/* Align to the next vec4 boundary if:
|
||||
* (a) the type is a struct or array type, or
|
||||
* (b) the type would cross a vec4 boundary; i.e. a vec3 and a
|
||||
* vec1 can be packed together, but not a vec3 and a vec2.
|
||||
*/
|
||||
if (type->type > HLSL_CLASS_LAST_NUMERIC || (offset & 3) + type->reg_size > 4)
|
||||
return align(offset, 4);
|
||||
return offset;
|
||||
}
|
||||
|
||||
static void hlsl_type_calculate_reg_size(struct hlsl_ctx *ctx, struct hlsl_type *type)
|
||||
{
|
||||
bool is_sm4 = (ctx->profile->major_version >= 4);
|
||||
@@ -155,14 +167,7 @@ static void hlsl_type_calculate_reg_size(struct hlsl_ctx *ctx, struct hlsl_type
|
||||
|
||||
assert(field_size);
|
||||
|
||||
/* Align to the next vec4 boundary if:
|
||||
* (a) the type is a struct or array type, or
|
||||
* (b) the type would cross a vec4 boundary; i.e. a vec3 and a
|
||||
* vec1 can be packed together, but not a vec3 and a vec2.
|
||||
*/
|
||||
if (field->type->type > HLSL_CLASS_LAST_NUMERIC || (type->reg_size & 3) + field_size > 4)
|
||||
type->reg_size = align(type->reg_size, 4);
|
||||
|
||||
type->reg_size = hlsl_type_get_sm4_offset(field->type, type->reg_size);
|
||||
field->reg_offset = type->reg_size;
|
||||
type->reg_size += field_size;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user