Mesa (gallium-dynamicstencilref): gallium: make u_blitter code save/ restore stencil ref values

Roland Scheidegger sroland at kemper.freedesktop.org
Thu Feb 11 19:57:19 UTC 2010


Module: Mesa
Branch: gallium-dynamicstencilref
Commit: ed0f3b08b65679452132a9caeef1509a8dac23b9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed0f3b08b65679452132a9caeef1509a8dac23b9

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Thu Feb 11 19:01:10 2010 +0100

gallium: make u_blitter code save/restore stencil ref values

---

 src/gallium/auxiliary/util/u_blitter.c |    2 ++
 src/gallium/auxiliary/util/u_blitter.h |    8 ++++++++
 src/gallium/drivers/r300/r300_blit.c   |    1 +
 3 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index 0504538..1f7e25b 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -262,6 +262,8 @@ static void blitter_restore_CSOs(struct blitter_context_priv *ctx)
    ctx->blitter.saved_fs = INVALID_PTR;
    ctx->blitter.saved_vs = INVALID_PTR;
 
+   pipe->set_stencil_ref(pipe, &ctx->blitter.saved_stencil_ref);
+
    /* restore the state objects which are required to be saved before copy/fill
     */
    if (ctx->blitter.saved_fb_state.nr_cbufs != ~0) {
diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h
index 3da5a6c..a2f1707 100644
--- a/src/gallium/auxiliary/util/u_blitter.h
+++ b/src/gallium/auxiliary/util/u_blitter.h
@@ -47,6 +47,7 @@ struct blitter_context
    void *saved_fs, *saved_vs; /**< fragment shader, vertex shader */
 
    struct pipe_framebuffer_state saved_fb_state;  /**< framebuffer state */
+   struct pipe_stencil_ref saved_stencil_ref;     /**< stencil ref */
 
    int saved_num_sampler_states;
    void *saved_sampler_states[32];
@@ -170,6 +171,13 @@ void util_blitter_save_depth_stencil_alpha(struct blitter_context *blitter,
 }
 
 static INLINE
+void util_blitter_save_stencil_ref(struct blitter_context *blitter,
+                                   const struct pipe_stencil_ref *state)
+{
+   blitter->saved_stencil_ref = *state;
+}
+
+static INLINE
 void util_blitter_save_rasterizer(struct blitter_context *blitter,
                                   void *state)
 {
diff --git a/src/gallium/drivers/r300/r300_blit.c b/src/gallium/drivers/r300/r300_blit.c
index cdedb30..faaf952 100644
--- a/src/gallium/drivers/r300/r300_blit.c
+++ b/src/gallium/drivers/r300/r300_blit.c
@@ -27,6 +27,7 @@ static void r300_blitter_save_states(struct r300_context* r300)
 {
     util_blitter_save_blend(r300->blitter, r300->blend_state.state);
     util_blitter_save_depth_stencil_alpha(r300->blitter, r300->dsa_state.state);
+    util_blitter_save_stencil_ref(r300->blitter, &(r300->stencil_ref));
     util_blitter_save_rasterizer(r300->blitter, r300->rs_state.state);
     util_blitter_save_fragment_shader(r300->blitter, r300->fs);
     util_blitter_save_vertex_shader(r300->blitter, r300->vs);




More information about the mesa-commit mailing list