[PATCH 1/5] glamor: Fix coordinates handling for composite source/mask pictures

Michel Dänzer michel at daenzer.net
Wed Apr 23 02:54:41 PDT 2014


From: Anthony Waters <awaters1 at gmail.com>

There were actually two issues with the original code I believe, the
first is that the call to glamor_convert_gradient_picture wasn't
properly referencing the coordinates of the source/mask pictures.  The
second, was that the updated references (x_temp/y_temp) were also
improperly set, they should always be 0 because the temp pictures are
new ones that start at (0, 0).  The reason it worked in certain cases
and it didn't in others (notably the tray icons) was due to the
numbers working out based on the call to glamor_composite.  In the
cases that it did work extent->x1 would equal x_dest and extent->y1
would equal y_dest, making it so what was actually passed into
glamor_convert_gradient_picture and the settings for x_temp/y_temp
were correct.  However, for the case when extent->x1 wouldn't equal
x_dest and extent->y1 wouldn't equal y_dest (for example with the tray
icons) then the wrong parameters get passed into
glamor_convert_gradient_picture and x_temp/y_temp are set improperly.

Fixes issues with tray icons not appearing properly in certain cases.

Bug:
https://bugs.freedesktop.org/show_bug.cgi?id=64738

Signed-Off-by: Anthony Waters <awaters1 at gmail.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Zhigang Gong <zhigang.gong at linux.intel.com>
Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 glamor/glamor_render.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 294a4ae..43f965b 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -1447,8 +1447,8 @@ glamor_composite_clipped_region(CARD8 op,
                     || source_pixmap->drawable.height != height)))) {
         temp_src =
             glamor_convert_gradient_picture(screen, source,
-                                            extent->x1 + x_source - x_dest,
-                                            extent->y1 + y_source - y_dest,
+                                            x_source,
+                                            y_source,
                                             width, height);
         if (!temp_src) {
             temp_src = source;
@@ -1456,8 +1456,8 @@ glamor_composite_clipped_region(CARD8 op,
         }
         temp_src_priv =
             glamor_get_pixmap_private((PixmapPtr) (temp_src->pDrawable));
-        x_temp_src = -extent->x1 + x_dest;
-        y_temp_src = -extent->y1 + y_dest;
+        x_temp_src = 0;
+        y_temp_src = 0;
     }
 
     if (mask
@@ -1471,8 +1471,8 @@ glamor_composite_clipped_region(CARD8 op,
          * to do reduce one convertion. */
         temp_mask =
             glamor_convert_gradient_picture(screen, mask,
-                                            extent->x1 + x_mask - x_dest,
-                                            extent->y1 + y_mask - y_dest,
+                                            x_mask,
+                                            y_mask,
                                             width, height);
         if (!temp_mask) {
             temp_mask = mask;
@@ -1480,8 +1480,8 @@ glamor_composite_clipped_region(CARD8 op,
         }
         temp_mask_priv =
             glamor_get_pixmap_private((PixmapPtr) (temp_mask->pDrawable));
-        x_temp_mask = -extent->x1 + x_dest;
-        y_temp_mask = -extent->y1 + y_dest;
+        x_temp_mask = 0;
+        y_temp_mask = 0;
     }
     /* Do two-pass PictOpOver componentAlpha, until we enable
      * dual source color blending.
-- 
1.9.2



More information about the xorg-devel mailing list