[PATCH 0/1] MR90: vkd3d-shader/hlsl: Improve mul vs dp* selection for dot().
From: Nikolay Sivov <nsivov(a)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; -- GitLab https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/90
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. -- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/90#note_23901
This merge request was approved by Zebediah Figura. -- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/90
participants (4)
-
Giovanni Mascellani (@giomasce) -
Nikolay Sivov -
Nikolay Sivov (@nsivov) -
Zebediah Figura (@zfigura)