[PATCH vkd3d 5/8] vkd3d-shader/hlsl: Support initialization of implicit size arrays.
Giovanni Mascellani
gmascellani at codeweavers.com
Tue May 3 06:14:00 CDT 2022
Hi,
Il 03/05/22 11:57, Giovanni Mascellani ha scritto:
> --- a/libs/vkd3d-shader/hlsl.c
> +++ b/libs/vkd3d-shader/hlsl.c
> @@ -165,6 +165,8 @@ static void hlsl_type_calculate_reg_size(struct hlsl_ctx *ctx, struct hlsl_type
> {
> unsigned int element_size = type->e.array.type->reg_size;
>
> + if (type->e.array.elements_count == HLSL_ARRAY_ELEMENTS_COUNT_IMPLICIT)
> + type->reg_size = 0;
> if (is_sm4)
> type->reg_size = (type->e.array.elements_count - 1) * align(element_size, 4) + element_size;
> else
I guess "if (is_sm4)" should become an "else if"?
> diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h
> index 28b2ff1b..1dce223a 100644
> --- a/libs/vkd3d-shader/hlsl.h
> +++ b/libs/vkd3d-shader/hlsl.h
> @@ -139,6 +139,7 @@ struct hlsl_type
> size_t bytecode_offset;
> };
>
> +
> struct hlsl_semantic
> {
> const char *name;
I guess this is just a mistake?
> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
> index 44e4964f..eb96a4c2 100644
> --- a/libs/vkd3d-shader/hlsl.y
> +++ b/libs/vkd3d-shader/hlsl.y
> @@ -789,7 +789,26 @@ static struct list *gen_struct_fields(struct hlsl_ctx *ctx,
>
> field->type = type;
> for (i = 0; i < v->arrays.count; ++i)
> + {
> + if (v->arrays.sizes[i] == HLSL_ARRAY_ELEMENTS_COUNT_IMPLICIT)
> + {
> + if (i < v->arrays.count - 1)
> + {
> + hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE,
> + "Inner array cannot be implicit.");
> + }
> + else if (type->type == HLSL_CLASS_OBJECT)
> + {
> + hlsl_fixme(ctx, &v->loc, "Unbounded resource arrays.");
> + }
> + else
> + {
> + hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE,
> + "Implicit arrays not allowed in struct fieds.");
> + }
> + }
> field->type = hlsl_new_array_type(ctx, field->type, v->arrays.sizes[i]);
> + }
Minor typo: "fieds" instead of "fields".
It seems that unbounded texture arrays are not supported below shader
model 5.1, so I wonder if the hlsl_fixme() should only be emitted when
shader model >= 5.1. But maybe we can just ignore this point and leave
it for when somebody will actually implement unbounded texture arrays.
Thanks, Giovanni.
More information about the wine-devel
mailing list