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.d...@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

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to