st/xa: Disable composite solid fill with mask
authorThomas Hellstrom <thellstrom@vmware.com>
Wed, 14 Dec 2011 15:18:06 +0000 (16:18 +0100)
committerThomas Hellstrom <thellstrom@vmware.com>
Thu, 15 Dec 2011 07:28:22 +0000 (08:28 +0100)
Xa doesn't support it yet. Trying to do that would cause a segfault.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
src/gallium/state_trackers/xa/xa_composite.c

index 43940e768d877bd7d82c3cacbecc64d9b7752a9b..1f076ff26a84ee9aab51703c01affd2853db7992 100644 (file)
@@ -227,6 +227,14 @@ xa_composite_check_accelerated(const struct xa_composite *comp)
     if (src_pic->src_pict) {
        if (src_pic->src_pict->type != xa_src_pict_solid_fill)
            return -XA_ERR_INVAL;
+
+       /*
+        * Currently we don't support solid fill with a mask.
+        * We can easily do that, but that would require shader,
+        * sampler view setup and vertex setup modification.
+        */
+       if (comp->mask)
+           return -XA_ERR_INVAL;
     }
 
     if (blend_for_op(&blend, comp->op, comp->src, comp->mask, comp->dst)) {
@@ -329,7 +337,7 @@ bind_shaders(struct xa_context *ctx, const struct xa_composite *comp)
 
        if (src_pic->src_pict) {
            if (src_pic->src_pict->type == xa_src_pict_solid_fill) {
-               fs_traits |= FS_SOLID_FILL;
+               fs_traits |= FS_SOLID_FILL | FS_FILL;
                vs_traits |= VS_SOLID_FILL;
                xa_pixel_to_float4(src_pic->src_pict->solid_fill.color,
                                   ctx->solid_color);
@@ -439,6 +447,16 @@ bind_samplers(struct xa_context *ctx,
                                             &view_templ);
        pipe_sampler_view_reference(&ctx->bound_sampler_views[1], NULL);
        ctx->bound_sampler_views[1] = src_view;
+
+
+       /*
+        * If src is a solid color, we have no src view, so set up a
+        * dummy one that will not be used anyway.
+        */
+       if (ctx->bound_sampler_views[0] == NULL)
+           pipe_sampler_view_reference(&ctx->bound_sampler_views[0],
+                                       src_view);
+
     }
 
     cso_set_samplers(ctx->cso, ctx->num_bound_samplers,