From 4739cf1d330706d9c91aefcc14af086f1a1871f7 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Tue, 5 Apr 2022 12:33:07 +0200 Subject: [PATCH] vkd3d-shader/hlsl: Check types when folding constants. Signed-off-by: Giovanni Mascellani Signed-off-by: Francisco Casas Signed-off-by: Zebediah Figura Signed-off-by: Matteo Bruni Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- libs/vkd3d-shader/hlsl_constant_ops.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/vkd3d-shader/hlsl_constant_ops.c b/libs/vkd3d-shader/hlsl_constant_ops.c index 109fc2ee..e4e60310 100644 --- a/libs/vkd3d-shader/hlsl_constant_ops.c +++ b/libs/vkd3d-shader/hlsl_constant_ops.c @@ -236,10 +236,17 @@ bool hlsl_fold_constants(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr, void return false; expr = hlsl_ir_expr(instr); + if (instr->data_type->type > HLSL_CLASS_VECTOR) + return false; + for (i = 0; i < ARRAY_SIZE(expr->operands); ++i) { - if (expr->operands[i].node && expr->operands[i].node->type != HLSL_IR_CONSTANT) - return false; + if (expr->operands[i].node) + { + if (expr->operands[i].node->type != HLSL_IR_CONSTANT) + return false; + assert(expr->operands[i].node->data_type->type <= HLSL_CLASS_VECTOR); + } } arg1 = hlsl_ir_constant(expr->operands[0].node); if (expr->operands[1].node)