u_blitter: unify clear_depth_stencil and flush_depth_stencil
authorMarek Olšák <maraeo@gmail.com>
Thu, 12 Aug 2010 03:06:21 +0000 (05:06 +0200)
committerMarek Olšák <maraeo@gmail.com>
Thu, 12 Aug 2010 04:21:24 +0000 (06:21 +0200)
No need to enable depth test for clear.

src/gallium/auxiliary/util/u_blitter.c
src/gallium/auxiliary/util/u_blitter.h
src/gallium/drivers/r300/r300_blit.c

index b5b86b7214258788a066d1b2ac295c630e8a181b..1b9e957e3c1ce27fa2ea00c85250a292b9785be8 100644 (file)
@@ -87,7 +87,6 @@ struct blitter_context_priv
    void *dsa_write_depth_keep_stencil;
    void *dsa_keep_depth_stencil;
    void *dsa_keep_depth_write_stencil;
-   void *dsa_flush_depth_stencil;
 
    void *velem_state;
 
@@ -158,12 +157,6 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
       pipe->create_depth_stencil_alpha_state(pipe, &dsa);
 
    dsa.depth.writemask = 1;
-   ctx->dsa_flush_depth_stencil =
-      pipe->create_depth_stencil_alpha_state(pipe, &dsa);
-
-   dsa.depth.enabled = 1;
-   dsa.depth.writemask = 1;
-   dsa.depth.func = PIPE_FUNC_ALWAYS;
    ctx->dsa_write_depth_keep_stencil =
       pipe->create_depth_stencil_alpha_state(pipe, &dsa);
 
@@ -945,42 +938,3 @@ void util_blitter_clear_depth_stencil(struct blitter_context *blitter,
                            UTIL_BLITTER_ATTRIB_NONE, NULL);
    blitter_restore_CSOs(ctx);
 }
-
-/* Clear a region of a depth stencil surface. */
-void util_blitter_flush_depth_stencil(struct blitter_context *blitter,
-                                      struct pipe_surface *dstsurf)
-{
-   struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter;
-   struct pipe_context *pipe = ctx->base.pipe;
-   struct pipe_framebuffer_state fb_state;
-
-   assert(dstsurf->texture);
-   if (!dstsurf->texture)
-      return;
-
-   /* check the saved state */
-   blitter_check_saved_CSOs(ctx);
-   assert(blitter->saved_fb_state.nr_cbufs != ~0);
-
-   /* bind CSOs */
-   pipe->bind_blend_state(pipe, ctx->blend_keep_color);
-   pipe->bind_depth_stencil_alpha_state(pipe, ctx->dsa_flush_depth_stencil);
-
-   pipe->bind_rasterizer_state(pipe, ctx->rs_state);
-   pipe->bind_fs_state(pipe, blitter_get_fs_col(ctx, 0));
-   pipe->bind_vs_state(pipe, ctx->vs_col);
-   pipe->bind_vertex_elements_state(pipe, ctx->velem_state);
-
-   /* set a framebuffer state */
-   fb_state.width = dstsurf->width;
-   fb_state.height = dstsurf->height;
-   fb_state.nr_cbufs = 0;
-   fb_state.cbufs[0] = 0;
-   fb_state.zsbuf = dstsurf;
-   pipe->set_framebuffer_state(pipe, &fb_state);
-
-   blitter_set_dst_dimensions(ctx, dstsurf->width, dstsurf->height);
-   blitter->draw_rectangle(blitter, 0, 0, dstsurf->width, dstsurf->height, 0,
-                           UTIL_BLITTER_ATTRIB_NONE, NULL);
-   blitter_restore_CSOs(ctx);
-}
index f316587dea02c19f8e1d868bc38af8ef319d143d..ba3f92eca8584a326328928cce8f6a47c95f4ec4 100644 (file)
@@ -200,8 +200,6 @@ void util_blitter_clear_depth_stencil(struct blitter_context *blitter,
                                       unsigned dstx, unsigned dsty,
                                       unsigned width, unsigned height);
 
-void util_blitter_flush_depth_stencil(struct blitter_context *blitter,
-                                      struct pipe_surface *dstsurf);
 /* The functions below should be used to save currently bound constant state
  * objects inside a driver. The objects are automatically restored at the end
  * of the util_blitter_{clear, copy_region, fill_region} functions and then
index ff52286b5cd0d8fef043ca063acf2dbc8e013ef6..67e828844056879848dfe1a2a3515d526ee49c13 100644 (file)
@@ -279,7 +279,9 @@ void r300_flush_depth_stencil(struct pipe_context *pipe,
                                             PIPE_BIND_DEPTH_STENCIL);
     r300->z_decomp_rd = TRUE;
     r300_blitter_begin(r300, R300_CLEAR_SURFACE);
-    util_blitter_flush_depth_stencil(r300->blitter, dstsurf);
+    util_blitter_clear_depth_stencil(r300->blitter, dstsurf,
+                                     PIPE_CLEAR_DEPTH, 0, 0,
+                                     0, 0, dstsurf->width, dstsurf->height);
     r300_blitter_end(r300);
     r300->z_decomp_rd = FALSE;