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. 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"). Thanks, Giovanni.