[Mesa-dev] [PATCH] mesa: call DrawBuffer(s) driver hook in update_framebuffer for windows-system FB

Boyan Ding boyan.j.ding at gmail.com
Fri Jan 20 09:38:13 UTC 2017


When draw buffers are changed on a bound framebuffer, DrawBuffer(s) hook
should be called. However, it is missing in update_framebuffer with
window-system framebuffer, in which FB's draw buffer state should match
context state, potentially resulting in a change.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99116
Signed-off-by: Boyan Ding <boyan.j.ding at gmail.com>
---
 src/mesa/main/framebuffer.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index c06130dc8d..55a6d5c004 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -670,6 +670,16 @@ update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
       if (fb->ColorDrawBuffer[0] != ctx->Color.DrawBuffer[0]) {
          _mesa_drawbuffers(ctx, fb, ctx->Const.MaxDrawBuffers,
                            ctx->Color.DrawBuffer, NULL);
+
+         /* Call device driver function if fb is the bound draw buffer. */
+         if (fb == ctx->DrawBuffer) {
+            if (ctx->Driver.DrawBuffers) {
+               ctx->Driver.DrawBuffers(ctx, ctx->Const.MaxDrawBuffers,
+                                      ctx->Color.DrawBuffer);
+            } else if (ctx->Driver.DrawBuffer) {
+               ctx->Driver.DrawBuffer(ctx, ctx->Color.DrawBuffer[0]);
+            }
+         }
       }
    }
    else {
-- 
2.11.0



More information about the mesa-dev mailing list