glamor_render: fix PictFilters
authorGrigori Goronzy <greg@chown.ath.cx>
Tue, 1 Oct 2013 22:37:57 +0000 (00:37 +0200)
committerEric Anholt <eric@anholt.net>
Wed, 18 Dec 2013 19:23:54 +0000 (11:23 -0800)
Add Fast/Good/Best and appropriately map to Nearest and
Bilinear. Additionally, add a fallback path for unsupported filters.

Notably, this fixes window shadow rendering with Compiz, which uses
PictFilterConvolution for some odd reason.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
glamor/glamor_render.c

index ca8e509..76a571f 100644 (file)
@@ -568,6 +568,7 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
 
        switch (picture->filter) {
        default:
+       case PictFilterFast:
        case PictFilterNearest:
                dispatch->glTexParameteri(GL_TEXTURE_2D,
                                          GL_TEXTURE_MIN_FILTER,
@@ -576,6 +577,8 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
                                          GL_TEXTURE_MAG_FILTER,
                                          GL_NEAREST);
                break;
+       case PictFilterGood:
+       case PictFilterBest:
        case PictFilterBilinear:
                dispatch->glTexParameteri(GL_TEXTURE_2D,
                                          GL_TEXTURE_MIN_FILTER,
@@ -1771,6 +1774,12 @@ _glamor_composite(CARD8 op,
                }
        }
 
+       if ((source && source->filter >= PictFilterConvolution)
+                       || (mask && mask->filter >= PictFilterConvolution)) {
+               glamor_fallback("glamor_composite(): unsupported filter\n");
+               goto fail;
+       }
+
        if (!miComputeCompositeRegion(&region,
                                      source, mask, dest,
                                      x_source + (source_pixmap ? source->pDrawable->x : 0),