Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- v2: * New --- 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)