Module: Mesa Branch: 7.10 Commit: 7e856fd0430a6d4272b60511b9aac06c91c24887 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e856fd0430a6d4272b60511b9aac06c91c24887
Author: Xiang, Haihao <[email protected]> Date: Fri Dec 10 09:31:19 2010 +0800 meta: allow nested meta operations _mesa_meta_CopyPixels results in nested meta operations on Sandybridge. Previoulsy the second meta operation overrides all states saved by the first meta function. (cherry picked from commit d1196bbc191c4f1b355d432dcb2eeff9790fda34) --- src/mesa/drivers/common/meta.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 95accc1..cbc0512 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -266,13 +266,14 @@ struct gen_mipmap_state GLuint FBO; }; - +#define MAX_META_OPS_DEPTH 2 /** * All per-context meta state. */ struct gl_meta_state { - struct save_state Save; /**< state saved during meta-ops */ + struct save_state Save[MAX_META_OPS_DEPTH]; /**< state saved during meta-ops */ + int current_save_state; struct temp_texture TempTex; @@ -324,8 +325,13 @@ _mesa_meta_free(struct gl_context *ctx) static void _mesa_meta_begin(struct gl_context *ctx, GLbitfield state) { - struct save_state *save = &ctx->Meta->Save; + struct save_state *save; + + /* hope MAX_META_OPS_DEPTH is large enough */ + assert(current_save_state < MAX_META_OPS_DEPTH); + save = &ctx->Meta->Save[ctx->Meta->current_save_state++]; + memset(save, 0, sizeof(*save)); save->SavedState = state; if (state & META_ALPHA_TEST) { @@ -575,7 +581,7 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state) static void _mesa_meta_end(struct gl_context *ctx) { - struct save_state *save = &ctx->Meta->Save; + struct save_state *save = &ctx->Meta->Save[--ctx->Meta->current_save_state]; const GLbitfield state = save->SavedState; if (state & META_ALPHA_TEST) { _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
