xserver: Branch 'master'

Eric Anholt anholt at kemper.freedesktop.org
Tue Jan 24 23:23:55 UTC 2017


 glamor/glamor_render.c |    4 ++++
 1 file changed, 4 insertions(+)

New commits:
commit 86463981361064dd0352ec215abf1696ce7fc5ea
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Tue Jan 24 18:08:30 2017 +0100

    glamor: Two pass won't work on memory pixmaps
    
    When selecting "CA_TWO_PASS" in glamor_composite_clipped_region() when
    the hardware does not support "GL_ARB_blend_func_extended", we call
    glamor_composite_choose_shader() twice in a row, which in turn calls
    glamor_pixmap_ensure_fbo().
    
    On memory pixmaps, the first call will set the FBO and the second one
    will fail an assertion in glamor_upload_picture_to_texture() because
    the FBO is already set.
    
    Bail out earlier when the mask pixmap is in memory and the hardware
    capabilities would require to use two pass, so that the assertion is not
    failed and the rendering is correct.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99346
    Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
    Reviewed-by: Eric Anholt <eric at anholt.net>

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index e04dd21..52f073d 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -1494,6 +1494,10 @@ glamor_composite_clipped_region(CARD8 op,
             ca_state = CA_DUAL_BLEND;
         } else {
             if (op == PictOpOver) {
+                if (glamor_pixmap_is_memory(mask_pixmap)) {
+                    glamor_fallback("two pass not supported on memory pximaps\n");
+                    goto out;
+                }
                 ca_state = CA_TWO_PASS;
                 op = PictOpOutReverse;
             }


More information about the xorg-commit mailing list