Hello,
January 12, 2022 1:35 PM, "Giovanni Mascellani" gmascellani@codeweavers.com wrote:
Hi,
this patch causes a regression on this shader:
float4 main() : SV_TARGET { float3 x = float4(71, 72, 73, 74); return float4(x, 74); }
This is accepted by native compiler and is works before your patch, but is broken after.
(see below)
On 10/01/22 20:33, Francisco Casas wrote:
@@ -1495,23 +1541,27 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t vkd3d_free(v); continue; }
- if (v->initializer.args_count > 1)
- if (type->type <= HLSL_CLASS_LAST_NUMERIC && size == 1)
{
- hlsl_fixme(ctx, &v->loc, "Complex initializer.");
- free_parse_initializer(&v->initializer);
- vkd3d_free(v);
- continue;
- struct hlsl_ir_load *load = hlsl_new_var_load(ctx, var, var->loc);
- list_add_tail(v->initializer.instrs, &load->node.entry);
- add_assignment(ctx, v->initializer.instrs, &load->node, ASSIGN_OP_ASSIGN,
v->initializer.args[0]); }
In other words, it seems that here you have to test for "v->initializer.args_count == 1", not "size == 1". But do your own research.
Yes, it is exactly that. Good catch!
Also, consider adding something similar to my example above to the tests (in the spirit of "everything that was gotten wrong at least once is a good candidate for a test").
Will do.
Thanks, Giovanni.