From f9b0dc9377913d2745f6fb89912e94ce22d64681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 9 Aug 2022 19:45:08 -0400 Subject: [PATCH] glthread: track GL_READ_FRAMEBUFFER bindings too Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/mapi/glapi/gen/ARB_framebuffer_object.xml | 2 +- src/mesa/main/glthread.h | 1 + src/mesa/main/glthread_get.c | 5 +++- src/mesa/main/glthread_marshal.h | 23 ++++++++++++++++--- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_framebuffer_object.xml b/src/mapi/glapi/gen/ARB_framebuffer_object.xml index c7a117dcd02..500c8f11203 100644 --- a/src/mapi/glapi/gen/ARB_framebuffer_object.xml +++ b/src/mapi/glapi/gen/ARB_framebuffer_object.xml @@ -203,7 +203,7 @@ + marshal_call_after="_mesa_glthread_BindFramebuffer(ctx, target, framebuffer);"> diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index ee15d5f4865..de9783443b0 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -236,6 +236,7 @@ struct glthread_state bool CullFace; GLuint CurrentDrawFramebuffer; + GLuint CurrentReadFramebuffer; GLuint CurrentProgram; }; diff --git a/src/mesa/main/glthread_get.c b/src/mesa/main/glthread_get.c index ed56d6a8970..2c85d605ef9 100644 --- a/src/mesa/main/glthread_get.c +++ b/src/mesa/main/glthread_get.c @@ -65,9 +65,12 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p) case GL_DRAW_INDIRECT_BUFFER_BINDING: *p = ctx->GLThread.CurrentDrawIndirectBufferName; return; - case GL_DRAW_FRAMEBUFFER_BINDING: /* == GL_FRAMEBUFFER_BINDING */ + case GL_DRAW_FRAMEBUFFER_BINDING: *p = ctx->GLThread.CurrentDrawFramebuffer; return; + case GL_READ_FRAMEBUFFER_BINDING: + *p = ctx->GLThread.CurrentReadFramebuffer; + return; case GL_PIXEL_PACK_BUFFER_BINDING: *p = ctx->GLThread.CurrentPixelPackBufferName; return; diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 5268ae2a472..c27412980be 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -779,16 +779,33 @@ _mesa_glthread_DeleteLists(struct gl_context *ctx, GLsizei range) _mesa_glthread_flush_batch(ctx); } +static inline void +_mesa_glthread_BindFramebuffer(struct gl_context *ctx, GLenum target, GLuint id) +{ + switch (target) { + case GL_FRAMEBUFFER: + ctx->GLThread.CurrentDrawFramebuffer = id; + ctx->GLThread.CurrentReadFramebuffer = id; + break; + case GL_DRAW_FRAMEBUFFER: + ctx->GLThread.CurrentDrawFramebuffer = id; + break; + case GL_READ_FRAMEBUFFER: + ctx->GLThread.CurrentReadFramebuffer = id; + break; + } +} + static inline void _mesa_glthread_DeleteFramebuffers(struct gl_context *ctx, GLsizei n, const GLuint *ids) { if (ctx->GLThread.CurrentDrawFramebuffer) { for (int i = 0; i < n; i++) { - if (ctx->GLThread.CurrentDrawFramebuffer == ids[i]) { + if (ctx->GLThread.CurrentDrawFramebuffer == ids[i]) ctx->GLThread.CurrentDrawFramebuffer = 0; - break; - } + if (ctx->GLThread.CurrentReadFramebuffer == ids[i]) + ctx->GLThread.CurrentReadFramebuffer = 0; } } }