From 263406addb90ca7599ddfb210944ab0dd63b973c Mon Sep 17 00:00:00 2001 From: Roland Scheidegger Date: Thu, 11 Feb 2010 18:15:10 +0100 Subject: gallium: give pipe_stencil_ref its own cso_save/restore functions seems cleaner, and other dynamic state like viewport is handled that way too --- src/gallium/auxiliary/cso_cache/cso_context.c | 19 ++++++++++++++----- src/gallium/auxiliary/cso_cache/cso_context.h | 2 ++ 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'src/gallium/auxiliary/cso_cache') diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index e110f051af..b5241fa64c 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -746,7 +746,6 @@ void cso_save_depth_stencil_alpha(struct cso_context *ctx) { assert(!ctx->depth_stencil_saved); ctx->depth_stencil_saved = ctx->depth_stencil; - ctx->stencil_ref_saved = ctx->stencil_ref; } void cso_restore_depth_stencil_alpha(struct cso_context *ctx) @@ -756,10 +755,6 @@ void cso_restore_depth_stencil_alpha(struct cso_context *ctx) ctx->pipe->bind_depth_stencil_alpha_state(ctx->pipe, ctx->depth_stencil_saved); } ctx->depth_stencil_saved = NULL; - if (memcmp(&ctx->stencil_ref, &ctx->stencil_ref_saved, sizeof(ctx->stencil_ref))) { - ctx->stencil_ref = ctx->stencil_ref_saved; - ctx->pipe->set_stencil_ref(ctx->pipe, &ctx->stencil_ref); - } } @@ -1083,6 +1078,20 @@ enum pipe_error cso_set_stencil_ref(struct cso_context *ctx, return PIPE_OK; } +void cso_save_stencil_ref(struct cso_context *ctx) +{ + ctx->stencil_ref_saved = ctx->stencil_ref; +} + + +void cso_restore_stencil_ref(struct cso_context *ctx) +{ + if (memcmp(&ctx->stencil_ref, &ctx->stencil_ref_saved, sizeof(ctx->stencil_ref))) { + ctx->stencil_ref = ctx->stencil_ref_saved; + ctx->pipe->set_stencil_ref(ctx->pipe, &ctx->stencil_ref); + } +} + enum pipe_error cso_set_geometry_shader_handle(struct cso_context *ctx, void *handle) { diff --git a/src/gallium/auxiliary/cso_cache/cso_context.h b/src/gallium/auxiliary/cso_cache/cso_context.h index 3a6fff21e2..707b3c2cee 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.h +++ b/src/gallium/auxiliary/cso_cache/cso_context.h @@ -176,6 +176,8 @@ enum pipe_error cso_set_blend_color(struct cso_context *cso, enum pipe_error cso_set_stencil_ref(struct cso_context *cso, const struct pipe_stencil_ref *sr); +void cso_save_stencil_ref(struct cso_context *cso); +void cso_restore_stencil_ref(struct cso_context *cso); #ifdef __cplusplus -- cgit v1.2.3