compositor-drm: Determine opaqueness of a surface correctly
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 1 Mar 2013 19:29:16 +0000 (14:29 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 4 Mar 2013 17:35:07 +0000 (12:35 -0500)
We subtract the screen space opaque region from the transformed surface
region.  That's going to fail for when we're scaling up a surface, since
the surface bounding box for the scaled up surface is going to be bigger
than the opaque region.  Instead, subtract the surface-space opaque region
from a 0,0 - width,height region and see if that's empty.

src/compositor-drm.c

index 3c44f7a..d933c92 100644 (file)
@@ -672,9 +672,10 @@ drm_output_check_sprite_format(struct drm_sprite *s,
        if (format == GBM_FORMAT_ARGB8888) {
                pixman_region32_t r;
 
-               pixman_region32_init(&r);
-               pixman_region32_subtract(&r, &es->transform.boundingbox,
-                                        &es->transform.opaque);
+               pixman_region32_init_rect(&r, 0, 0,
+                                         es->geometry.width,
+                                         es->geometry.height);
+               pixman_region32_subtract(&r, &r, &es->opaque);
 
                if (!pixman_region32_not_empty(&r))
                        format = GBM_FORMAT_XRGB8888;