Thanks for taking a look!

On 26/09/14 05:48 PM, Bill Spitzak wrote:
> 90 degree rotation about x or y will require filtering.

Yup, you're right.

> You test y scale twice, must be a typo. I think you intended to test z,
> but in fact z scale is not relevant so you should not test it at all.

Argh - thanks.  Why isn't Z scale relevant?  I'm worried about making
assumptions about the transformations these matrices represent and
having those assumptions violated in the future...  For Z not to matter
are we assuming projection will always be orthographic?

> Translation by non-integer will also require filtering.

Good point.

> I recommend instead of checking the rotation to instead look for zeros
> in the correct locations in the matrix. Matrix must be of the form:
> 
>  |sx 0  0 tx|
>  |0  sy 0 ty|
>  |?  ?  ?  ?|
>  |0  0  0  1|
> 
> or
> 
>  |0  sx 0 tx|
>  |sy 0  0 ty|
>  |?  ?  ?  ?|
>  |0  0  0  1|
> 
> sx and sy must be ±1, and tx and ty must be integers. The ? can be any
> value.

That could save us the very expensive matrix decomposition.  I'll try
this out.  Thanks.

I think this may be better than decomposition for deciding to use video
planes in compositor-drm as well.

(In fact, you've got me wondering if we ever need to split a matrix into
basic transformations at all...)

> Also pixman is already doing equivalent tests and short-circuiting to
> nearest filter, so you might not need to check this anyway.

This is also used for the gl renderer, so I don't think I can count on
that short circuit there...  Though bilinear vs nearest doesn't have
anywhere near the same performance impact there.

Are you suggesting pixman always be set to use bilinear, and it'll just
pick nearest automatically when the image transform doesn't require it?

> On 09/26/2014 02:10 PM, Derek Foreman wrote:
> 
>> +WL_EXPORT int
>> +weston_matrix_needs_filtering(struct weston_matrix *matrix)
>> +{
>> +    if (!rot_is_90(weston_matrix_get_rotation_x(matrix))
>> +     || !rot_is_90(weston_matrix_get_rotation_y(matrix))
>> +     || !rot_is_90(weston_matrix_get_rotation_z(matrix))
>> +     || (fabs(weston_matrix_get_scale_x(matrix) - 1.0) > 0.0001)
>> +     || (fabs(weston_matrix_get_scale_y(matrix) - 1.0) > 0.0001)
>> +     || (fabs(weston_matrix_get_scale_y(matrix) - 1.0) > 0.0001))
>> +        return 1;
>> +
>> +    return 0;
>> +}
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to