svga: adapt to clear interface changes
authorRoland Scheidegger <sroland@vmware.com>
Fri, 28 May 2010 23:22:23 +0000 (01:22 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 28 May 2010 23:22:23 +0000 (01:22 +0200)
this should support separate stencil/depth clears just fine.

src/gallium/drivers/svga/svga_pipe_blit.c
src/gallium/drivers/svga/svga_pipe_clear.c
src/gallium/drivers/svga/svga_screen.c

index 2dd99b4..e742fec 100644 (file)
@@ -108,5 +108,4 @@ void
 svga_init_blit_functions(struct svga_context *svga)
 {
    svga->pipe.resource_copy_region = svga_surface_copy;
-   svga->pipe.resource_fill_region = util_resource_fill_region;
 }
index cbff95c..41f239c 100644 (file)
@@ -61,9 +61,11 @@ try_clear(struct svga_context *svga,
    }
 
    if ((buffers & PIPE_CLEAR_DEPTHSTENCIL) && fb->zsbuf) {
-      flags |= SVGA3D_CLEAR_DEPTH;
+      if (buffers & PIPE_CLEAR_DEPTH)
+         flags |= SVGA3D_CLEAR_DEPTH;
 
-      if (svga->curr.framebuffer.zsbuf->format == PIPE_FORMAT_S8_USCALED_Z24_UNORM)
+      if ((svga->curr.framebuffer.zsbuf->format == PIPE_FORMAT_S8_USCALED_Z24_UNORM) &&
+          (buffers & PIPE_CLEAR_STENCIL))
          flags |= SVGA3D_CLEAR_STENCIL;
 
       rect.w = MAX2(rect.w, fb->zsbuf->width);
@@ -100,7 +102,7 @@ svga_clear(struct pipe_context *pipe, unsigned buffers, const float *rgba,
 {
    struct svga_context *svga = svga_context( pipe );
    int ret;
-   
+
    if (buffers & PIPE_CLEAR_COLOR)
       SVGA_DBG(DEBUG_DMA, "clear sid %p\n",
                svga_surface(svga->curr.framebuffer.cbufs[0])->handle);
index 99b4191..099d8f9 100644 (file)
@@ -230,6 +230,9 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_MAX_VS_PREDS:
       return svgascreen->use_vs30 ? 1 : 0;
 
+   case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
+      return 1;
+
    default:
       return 0;
    }