Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- Again, a few minor comments you might want to address later.
Il 15/02/22 21:17, Francisco Casas ha scritto:
@@ -1633,69 +1647,36 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
if (v->initializer.args_count) {
unsigned int size = initializer_size(&v->initializer);
if (type->type <= HLSL_CLASS_LAST_NUMERIC && v->initializer.args_count != 1
&& type->dimx * type->dimy != size)
{
hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_WRONG_PARAMETER_COUNT,
"Expected %u components in numeric initializer, but got %u.",
type->dimx * type->dimy, v->initializer.args_count);
free_parse_initializer(&v->initializer);
vkd3d_free(v);
continue;
}
if ((type->type == HLSL_CLASS_STRUCT || type->type == HLSL_CLASS_ARRAY)
&& hlsl_type_component_count(type) != size)
{
hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_WRONG_PARAMETER_COUNT,
"Expected %u components in initializer, but got %u.", hlsl_type_component_count(type), size);
free_parse_initializer(&v->initializer);
vkd3d_free(v);
continue;
}
if (type->type == HLSL_CLASS_STRUCT)
{
struct_var_initializer(ctx, var, &v->initializer);
list_move_tail(statements_list, v->initializer.instrs);
free_parse_initializer(&v->initializer);
vkd3d_free(v);
continue;
}
if (type->type > HLSL_CLASS_LAST_NUMERIC)
{
FIXME("Initializers for non scalar/struct variables not supported yet.\n");
free_parse_initializer(&v->initializer);
if (v->arrays.count)
vkd3d_free(v->arrays.sizes);
vkd3d_free(v);
continue;
}
if (v->arrays.count)
{
hlsl_fixme(ctx, &v->loc, "Array initializer.");
free_parse_initializer(&v->initializer);
vkd3d_free(v->arrays.sizes);
vkd3d_free(v);
continue;
}
if (v->initializer.args_count > 1) {
The flow structure here is a bit funny: instead of
if (count != 0) { if (count > 1) ... else ... }
I'd find more logical
if (count == 1) ... else if (count > 1) ...
(main point here is not introducing a useless embedding level, not really the case order)
initialize_numeric_var(ctx, var, &v->initializer, 0, type, &initializer_offset);
if (type->type <= HLSL_CLASS_LAST_NUMERIC)
{
flatten_parse_initializer(ctx, &v->initializer);
if (v->initializer.args_count != size)
{
hlsl_fixme(ctx, &v->loc, "Could not flatten initializer.");
free_parse_initializer(&v->initializer);
if (v->arrays.count)
vkd3d_free(v->arrays.sizes);
Here there is a missing indentation.
BTW, this gadget "if (count) free(sizes)" appears frequently. But I guess that if count is zero, then you can assume that sizes is NULL. If so, you don't need to guard the call to free(): free(NULL) is a no-op.
Thanks, Giovanni.