From: Nikolay Sivov nsivov@codeweavers.com
--- libs/vkd3d-shader/hlsl.y | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index d5e2b2a9..b67d393e 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -1636,12 +1636,12 @@ static struct hlsl_ir_node *add_binary_dot_expr(struct hlsl_ctx *ctx, struct lis return NULL; }
- if (arg1->data_type->type == HLSL_CLASS_SCALAR) - dim = arg2->data_type->dimx; - else if (arg1->data_type->type == HLSL_CLASS_SCALAR) - dim = arg1->data_type->dimx; - else + if (arg1->data_type->type == HLSL_CLASS_SCALAR && arg2->data_type->type == HLSL_CLASS_SCALAR) + dim = 1; + else if (arg1->data_type->type == HLSL_CLASS_VECTOR && arg2->data_type->type == HLSL_CLASS_VECTOR) dim = min(arg1->data_type->dimx, arg2->data_type->dimx); + else + dim = max(arg1->data_type->dimx, arg2->data_type->dimx);
if (dim == 1) op = HLSL_OP2_MUL;
Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/hlsl.y:
return NULL; }
- if (arg1->data_type->type == HLSL_CLASS_SCALAR)
dim = arg2->data_type->dimx;
- else if (arg1->data_type->type == HLSL_CLASS_SCALAR)
dim = arg1->data_type->dimx;
- else
- if (arg1->data_type->type == HLSL_CLASS_SCALAR && arg2->data_type->type == HLSL_CLASS_SCALAR)
dim = 1;
- else if (arg1->data_type->type == HLSL_CLASS_VECTOR && arg2->data_type->type == HLSL_CLASS_VECTOR) dim = min(arg1->data_type->dimx, arg2->data_type->dimx);
- else
dim = max(arg1->data_type->dimx, arg2->data_type->dimx);
The change itself looks fine, if a tad complicated (it would have been enough to change one character: from `else if (arg1->data_type->type == HLSL_CLASS_SCALAR)` to `else if (arg2->data_type->type == HLSL_CLASS_SCALAR)`).
Though it's easy to write a test that shows that this fixes a bug, so I think there should be one.
This merge request was approved by Zebediah Figura.