[PATCH vkd3d v2 2/9] vkd3d-shader/hlsl: Check types when folding constants.

Giovanni Mascellani gmascellani at codeweavers.com
Mon Mar 28 03:59:07 CDT 2022


Signed-off-by: Giovanni Mascellani <gmascellani at 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)
-- 
2.35.1




More information about the wine-devel mailing list