Signed-off-by: Jason Ekstrand <jason.ekstr...@intel.com> --- src/mesa/drivers/common/meta.c | 13 +++++++++++++ src/mesa/drivers/common/meta.h | 4 ++++ src/mesa/drivers/common/meta_blit.c | 3 ++- 3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index f1155b4..8c515e0 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -822,6 +822,15 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state) } } + if (state & MESA_META_READ_BUFFER) { + int buf_index = ctx->ReadBuffer->_ColorReadBufferIndex; + + if (buf_index == -1) + save->ColorReadBuffer = 0; + else + save->ColorReadBuffer = gl_buffer_index_to_drawbuffers_enum(buf_index); + } + /* misc */ { save->Lighting = ctx->Light.Enabled; @@ -1227,6 +1236,10 @@ _mesa_meta_end(struct gl_context *ctx) _mesa_DrawBuffers(ctx->Const.MaxDrawBuffers, save->ColorDrawBuffers); } + if (state & MESA_META_READ_BUFFER) { + _mesa_ReadBuffer(save->ColorReadBuffer); + } + ctx->Meta->SaveStackDepth--; ctx->API = save->API; diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h index f12dc65..cb25b3a 100644 --- a/src/mesa/drivers/common/meta.h +++ b/src/mesa/drivers/common/meta.h @@ -60,6 +60,7 @@ #define MESA_META_OCCLUSION_QUERY 0x400000 #define MESA_META_DRAW_BUFFERS 0x800000 #define MESA_META_DITHER 0x1000000 +#define MESA_META_READ_BUFFER 0x2000000 /**\}*/ /** @@ -188,6 +189,9 @@ struct save_state /** MESA_META_DRAW_BUFFERS */ GLenum ColorDrawBuffers[MAX_DRAW_BUFFERS]; + + /** MESA_META_READ_BUFFER */ + GLenum ColorReadBuffer; }; /** diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c index bbf0c3c..e4c0f07 100644 --- a/src/mesa/drivers/common/meta_blit.c +++ b/src/mesa/drivers/common/meta_blit.c @@ -707,7 +707,8 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx, /* Only scissor affects blit, but we're doing to set a custom scissor if * necessary anyway, so save/clear state. */ - _mesa_meta_begin(ctx, MESA_META_ALL & ~MESA_META_DRAW_BUFFERS); + _mesa_meta_begin(ctx, MESA_META_ALL & ~MESA_META_DRAW_BUFFERS & + ~MESA_META_READ_BUFFER); /* If the clipping earlier changed the destination rect at all, then * enable the scissor to clip to it. -- 2.0.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev