g3dvl: Preserve previously rendered components for MC output.
authorYounes Manton <younes.m@gmail.com>
Wed, 20 Jul 2011 17:49:56 +0000 (13:49 -0400)
committerYounes Manton <younes.m@gmail.com>
Wed, 20 Jul 2011 17:52:45 +0000 (13:52 -0400)
Fixes xvmc-softpipe MC entrypoint, amongst others.

src/gallium/auxiliary/vl/vl_mc.c

index bd05205b52d0a951125394a59b2122da11ec6b90..add367e3ac6b1e46b18b0e526220833b120c63c0 100644 (file)
@@ -590,7 +590,7 @@ vl_mc_set_surface(struct vl_mc_buffer *buffer, struct pipe_surface *surface)
 }
 
 static void
-prepare_pipe_4_rendering(struct vl_mc_buffer *buffer, unsigned mask)
+prepare_pipe_4_rendering(struct vl_mc_buffer *buffer, unsigned component, unsigned mask)
 {
    struct vl_mc *renderer;
 
@@ -599,7 +599,7 @@ prepare_pipe_4_rendering(struct vl_mc_buffer *buffer, unsigned mask)
    renderer = buffer->renderer;
    renderer->pipe->bind_rasterizer_state(renderer->pipe, renderer->rs_state);
 
-   if (buffer->surface_cleared)
+   if (buffer->surface_cleared || component > 0)
       renderer->pipe->bind_blend_state(renderer->pipe, renderer->blend_add[mask]);
    else
       renderer->pipe->bind_blend_state(renderer->pipe, renderer->blend_clear[mask]);
@@ -615,7 +615,7 @@ vl_mc_render_ref(struct vl_mc_buffer *buffer, struct pipe_sampler_view *ref)
 
    assert(buffer && ref);
 
-   prepare_pipe_4_rendering(buffer, PIPE_MASK_R | PIPE_MASK_G | PIPE_MASK_B);
+   prepare_pipe_4_rendering(buffer, 0, PIPE_MASK_R | PIPE_MASK_G | PIPE_MASK_B);
 
    renderer = buffer->renderer;
 
@@ -643,7 +643,7 @@ vl_mc_render_ycbcr(struct vl_mc_buffer *buffer, unsigned component, unsigned num
    if (num_instances == 0)
       return;
 
-   prepare_pipe_4_rendering(buffer, mask);
+   prepare_pipe_4_rendering(buffer, component, mask);
 
    renderer = buffer->renderer;