gallium: give pipe_stencil_ref its own cso_save/restore functions
seems cleaner, and other dynamic state like viewport is handled that way too
This commit is contained in:
@@ -746,7 +746,6 @@ void cso_save_depth_stencil_alpha(struct cso_context *ctx)
|
|||||||
{
|
{
|
||||||
assert(!ctx->depth_stencil_saved);
|
assert(!ctx->depth_stencil_saved);
|
||||||
ctx->depth_stencil_saved = ctx->depth_stencil;
|
ctx->depth_stencil_saved = ctx->depth_stencil;
|
||||||
ctx->stencil_ref_saved = ctx->stencil_ref;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cso_restore_depth_stencil_alpha(struct cso_context *ctx)
|
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->pipe->bind_depth_stencil_alpha_state(ctx->pipe, ctx->depth_stencil_saved);
|
||||||
}
|
}
|
||||||
ctx->depth_stencil_saved = NULL;
|
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;
|
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,
|
enum pipe_error cso_set_geometry_shader_handle(struct cso_context *ctx,
|
||||||
void *handle)
|
void *handle)
|
||||||
{
|
{
|
||||||
|
@@ -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,
|
enum pipe_error cso_set_stencil_ref(struct cso_context *cso,
|
||||||
const struct pipe_stencil_ref *sr);
|
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
|
#ifdef __cplusplus
|
||||||
|
@@ -215,6 +215,7 @@ clear_with_quad(GLcontext *ctx,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
cso_save_blend(st->cso_context);
|
cso_save_blend(st->cso_context);
|
||||||
|
cso_save_stencil_ref(st->cso_context);
|
||||||
cso_save_depth_stencil_alpha(st->cso_context);
|
cso_save_depth_stencil_alpha(st->cso_context);
|
||||||
cso_save_rasterizer(st->cso_context);
|
cso_save_rasterizer(st->cso_context);
|
||||||
cso_save_fragment_shader(st->cso_context);
|
cso_save_fragment_shader(st->cso_context);
|
||||||
@@ -280,6 +281,7 @@ clear_with_quad(GLcontext *ctx,
|
|||||||
|
|
||||||
/* Restore pipe state */
|
/* Restore pipe state */
|
||||||
cso_restore_blend(st->cso_context);
|
cso_restore_blend(st->cso_context);
|
||||||
|
cso_restore_stencil_ref(st->cso_context);
|
||||||
cso_restore_depth_stencil_alpha(st->cso_context);
|
cso_restore_depth_stencil_alpha(st->cso_context);
|
||||||
cso_restore_rasterizer(st->cso_context);
|
cso_restore_rasterizer(st->cso_context);
|
||||||
cso_restore_fragment_shader(st->cso_context);
|
cso_restore_fragment_shader(st->cso_context);
|
||||||
|
Reference in New Issue
Block a user