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