[PATCH vkd3d v2] vkd3d-shader/hlsl: Return the shape of the left operand when appropriate.
Giovanni Mascellani
gmascellani at codeweavers.com
Tue Oct 19 02:33:55 CDT 2021
This supersedes 217302. Also, 217464, from the same patch set, is revoked.
Thanks, Giovanni.
Il 19/10/21 09:32, Giovanni Mascellani ha scritto:
> The assumption about the size of matrices is not correct: it is
> legitimate to compose a matrix 2x2 with a vector of length 4, in which
> case it appears that the result has the shape of the first (leftmost)
> operand. Even for matrices 1xN or Nx1, the result is not always a
> vector: in general it has the shape of the first operand again.
>
> Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
> ---
> libs/vkd3d-shader/hlsl.y | 13 +------------
> 1 file changed, 1 insertion(+), 12 deletions(-)
>
> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
> index bfe2bbb9..c42e372e 100644
> --- a/libs/vkd3d-shader/hlsl.y
> +++ b/libs/vkd3d-shader/hlsl.y
> @@ -971,18 +971,7 @@ static bool expr_common_shape(struct hlsl_ctx *ctx, struct hlsl_type *t1, struct
> }
> else
> {
> - /* Two vectors or a vector and a matrix (matrix must be 1xn or nx1) */
> - unsigned int max_dim_1, max_dim_2;
> -
> - max_dim_1 = max(t1->dimx, t1->dimy);
> - max_dim_2 = max(t2->dimx, t2->dimy);
> - if (t1->dimx * t1->dimy == t2->dimx * t2->dimy)
> - {
> - *type = HLSL_CLASS_VECTOR;
> - *dimx = max(t1->dimx, t2->dimx);
> - *dimy = 1;
> - }
> - else if (max_dim_1 <= max_dim_2)
> + if (t1->dimx * t1->dimy <= t2->dimx * t2->dimy)
> {
> *type = t1->type;
> *dimx = t1->dimx;
>
More information about the wine-devel
mailing list