gallium: allow choosing which colorbuffers to clear
[mesa.git] / src / gallium / drivers / r300 / r300_blit.c
index 76f83273cf2fe6260e9c33b7b0fad03e980feb4c..a0b4573d0bd3a50727ba6badae803c97e12044ab 100644 (file)
@@ -130,7 +130,7 @@ static boolean r300_cbzb_clear_allowed(struct r300_context *r300,
         (struct pipe_framebuffer_state*)r300->fb_state.state;
 
     /* Only color clear allowed, and only one colorbuffer. */
-    if (clear_buffers != PIPE_CLEAR_COLOR || fb->nr_cbufs != 1)
+    if ((clear_buffers & ~PIPE_CLEAR_COLOR) != 0 || fb->nr_cbufs != 1)
         return FALSE;
 
     return r300_surface(fb->cbufs[0])->cbzb_allowed;
@@ -363,14 +363,10 @@ static void r300_clear(struct pipe_context* pipe,
 
     /* Clear. */
     if (buffers) {
-        enum pipe_format cformat = fb->nr_cbufs ? fb->cbufs[0]->format : PIPE_FORMAT_NONE;
         /* Clear using the blitter. */
         r300_blitter_begin(r300, R300_CLEAR);
-        util_blitter_clear(r300->blitter,
-                           width,
-                           height,
-                           fb->nr_cbufs,
-                           buffers, cformat, color, depth, stencil);
+        util_blitter_clear(r300->blitter, width, height, 1,
+                           buffers, color, depth, stencil);
         r300_blitter_end(r300);
     } else if (r300->zmask_clear.dirty ||
                r300->hiz_clear.dirty ||
@@ -855,6 +851,11 @@ static void r300_blit(struct pipe_context *pipe,
     r300_blitter_end(r300);
 }
 
+static void r300_flush_resource(struct pipe_context *ctx,
+                               struct pipe_resource *resource)
+{
+}
+
 void r300_init_blit_functions(struct r300_context *r300)
 {
     r300->context.clear = r300_clear;
@@ -862,4 +863,5 @@ void r300_init_blit_functions(struct r300_context *r300)
     r300->context.clear_depth_stencil = r300_clear_depth_stencil;
     r300->context.resource_copy_region = r300_resource_copy_region;
     r300->context.blit = r300_blit;
+    r300->context.flush_resource = r300_flush_resource;
 }