[PATCH vkd3d 05/11] vkd3d-shader/hlsl: Check types when folding constants.

Matteo Bruni mbruni at codeweavers.com
Tue Apr 5 05:33:07 CDT 2022


From: Giovanni Mascellani <gmascellani at codeweavers.com>

Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
 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.34.1




More information about the wine-devel mailing list