Eliminate struct pipe_region.
[mesa.git] / src / mesa / pipe / softpipe / sp_clear.c
index 539da1d58b3720e9cc716cf2bb3a45d93c34243e..496b38fd5f12b82ef5449823ebd0945286a80da5 100644 (file)
@@ -35,6 +35,7 @@
 #include "sp_context.h"
 #include "sp_surface.h"
 #include "sp_state.h"
+#include "sp_tile_cache.h"
 
 
 /**
@@ -46,23 +47,27 @@ softpipe_clear(struct pipe_context *pipe, struct pipe_surface *ps,
                unsigned clearValue)
 {
    struct softpipe_context *softpipe = softpipe_context(pipe);
-   unsigned x, y, w, h;
 
    softpipe_update_derived(softpipe); /* not needed?? */
 
-   w = softpipe->framebuffer.cbufs[0]->width;
-   h = softpipe->framebuffer.cbufs[0]->height;
+   if (ps == sp_tile_cache_get_surface(softpipe, softpipe->zbuf_cache)) {
+      float clear[4];
+      clear[0] = 1.0; /* XXX hack */
+      sp_tile_cache_clear(softpipe->zbuf_cache, clear);
+   }
+   else if (ps == sp_tile_cache_get_surface(softpipe, softpipe->cbuf_cache[0])) {
+      float clear[4];
+      clear[0] = 0.2f; /* XXX hack */
+      clear[1] = 0.2f; /* XXX hack */
+      clear[2] = 0.2f; /* XXX hack */
+      clear[3] = 0.2f; /* XXX hack */
+      sp_tile_cache_clear(softpipe->cbuf_cache[0], clear);
+   }
 
-   /* Use the X coord to trick region_fill() into filling at an offset
-    * from the start of the region.  Perhaps pipe_region should have the
-    * 'offset' field, not pipe_surface???
-    */
-   assert(ps->offset % ps->region->cpp == 0);
-   x = ps->offset / ps->region->cpp;
-   y = 0;
+   pipe->surface_fill(pipe, ps, 0, 0, ps->width, ps->height, clearValue);
 
-   assert(w <= ps->region->pitch);
-   assert(h <= ps->region->height);
 
-   pipe->region_fill(pipe, ps->region, 0, x, y, w, h, clearValue);
+#if 0
+   sp_clear_tile_cache(ps, clearValue);
+#endif
 }