glthread: unbind framebuffers in glDeleteFramebuffers

Tests:
    dEQP-GLES2.functional.lifetime.delete_bound.framebuffer
    dEQP-GLES2.functional.state_query.integers.framebuffer_binding_getinteger

Fixes: e48f676835 - glthread: don't sync for more glGetIntegerv enums for glretrace

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17976>
This commit is contained in:
Marek Olšák
2022-08-09 19:10:35 -04:00
committed by Marge Bot
parent a9b64bd7ad
commit eb4036ea5b
2 changed files with 16 additions and 1 deletions

View File

@@ -209,7 +209,8 @@
<glx rop="236"/>
</function>
<function name="DeleteFramebuffers" es2="2.0">
<function name="DeleteFramebuffers" es2="2.0"
marshal_call_after="_mesa_glthread_DeleteFramebuffers(ctx, n, framebuffers);">
<param name="n" type="GLsizei" counter="true"/>
<param name="framebuffers" type="const GLuint *" count="n"/>
<glx rop="4320"/>

View File

@@ -779,6 +779,20 @@ _mesa_glthread_DeleteLists(struct gl_context *ctx, GLsizei range)
_mesa_glthread_flush_batch(ctx);
}
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]) {
ctx->GLThread.CurrentDrawFramebuffer = 0;
break;
}
}
}
}
struct marshal_cmd_CallList
{
struct marshal_cmd_base cmd_base;