[RFC weston 13/16] compositor: Add a function to test if images transformed by a matrix should be bilinearly filtered

Bill Spitzak spitzak at gmail.com
Fri Oct 3 12:46:07 PDT 2014

On 10/03/2014 12:25 AM, Pekka Paalanen wrote:

>> AFFINE: last row is 0,0,?,1
>> NO_SKEW: a00*a01+a10*a11 ~= 0
>> NO_SCALE: a00^2+a01^2 ~= 1 && a10^2+a11^2 ~= 1
>> ORTHO: a00==a11==0 or a01==a10==0
>> NO_ROTATE: a01==a10==0
>> NOT_DEGENERATE: a00*a11-a10*a01 != 0
>> NO_MIRROR: a00,a01,a10,a11 are all >= 0
>> INT_SCALE: a00,a01,a10,a11 are all integers
>> INT_TRANSLATE: a03 and a13 are integers
>> IDENTITY: identity matrix
> You must have missed our code, we already have some flags:
> http://cgit.freedesktop.org/wayland/weston/tree/shared/matrix.h#n30

That looks like a good start, though I would agree that the flags need 
to change. You need a set with each bit as independent as possible, 
which is what I was trying to come up with in the above list. Tests for 
optimization probably require looking at more than one flag, for 
instance 1:1 pixel mappings are require AFFINE, NO_SKEW, NO_SCALE, 
ORTHO, and INT_TRANSLATE all turned on.

I suspect there are a lot of errors in the above list, too...

> We could be using the flags to optimize matrix ops, but we don't so
> far. No-one has seen the need to optimize our matrix ops. I suspect
> very few people if any have even profiled Weston.

You are probably right, it is not to optimize the math. What I was 
trying to optimize was figuring out a new set of flags from the result 
of multiplying two matrices, rather than running the analysis on the result.

The most useful thing to speed this up is to use 32-bit floats, store in 
column-major order (ie the same order OpenGL uses), and get it to use 
the vector built-ins in gcc if possible. I'm pretty certain that will 
result in the fastest multiply and it will be faster than the if 
statements necessary to check the flags.

More information about the wayland-devel mailing list