glthread: track GL_READ_FRAMEBUFFER bindings too
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:
@@ -203,7 +203,7 @@
|
|||||||
</function>
|
</function>
|
||||||
|
|
||||||
<function name="BindFramebuffer" es2="2.0"
|
<function name="BindFramebuffer" es2="2.0"
|
||||||
marshal_call_after="if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER) ctx->GLThread.CurrentDrawFramebuffer = framebuffer;">
|
marshal_call_after="_mesa_glthread_BindFramebuffer(ctx, target, framebuffer);">
|
||||||
<param name="target" type="GLenum"/>
|
<param name="target" type="GLenum"/>
|
||||||
<param name="framebuffer" type="GLuint"/>
|
<param name="framebuffer" type="GLuint"/>
|
||||||
<glx rop="236"/>
|
<glx rop="236"/>
|
||||||
|
@@ -236,6 +236,7 @@ struct glthread_state
|
|||||||
bool CullFace;
|
bool CullFace;
|
||||||
|
|
||||||
GLuint CurrentDrawFramebuffer;
|
GLuint CurrentDrawFramebuffer;
|
||||||
|
GLuint CurrentReadFramebuffer;
|
||||||
GLuint CurrentProgram;
|
GLuint CurrentProgram;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -65,9 +65,12 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p)
|
|||||||
case GL_DRAW_INDIRECT_BUFFER_BINDING:
|
case GL_DRAW_INDIRECT_BUFFER_BINDING:
|
||||||
*p = ctx->GLThread.CurrentDrawIndirectBufferName;
|
*p = ctx->GLThread.CurrentDrawIndirectBufferName;
|
||||||
return;
|
return;
|
||||||
case GL_DRAW_FRAMEBUFFER_BINDING: /* == GL_FRAMEBUFFER_BINDING */
|
case GL_DRAW_FRAMEBUFFER_BINDING:
|
||||||
*p = ctx->GLThread.CurrentDrawFramebuffer;
|
*p = ctx->GLThread.CurrentDrawFramebuffer;
|
||||||
return;
|
return;
|
||||||
|
case GL_READ_FRAMEBUFFER_BINDING:
|
||||||
|
*p = ctx->GLThread.CurrentReadFramebuffer;
|
||||||
|
return;
|
||||||
case GL_PIXEL_PACK_BUFFER_BINDING:
|
case GL_PIXEL_PACK_BUFFER_BINDING:
|
||||||
*p = ctx->GLThread.CurrentPixelPackBufferName;
|
*p = ctx->GLThread.CurrentPixelPackBufferName;
|
||||||
return;
|
return;
|
||||||
|
@@ -779,16 +779,33 @@ _mesa_glthread_DeleteLists(struct gl_context *ctx, GLsizei range)
|
|||||||
_mesa_glthread_flush_batch(ctx);
|
_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
|
static inline void
|
||||||
_mesa_glthread_DeleteFramebuffers(struct gl_context *ctx, GLsizei n,
|
_mesa_glthread_DeleteFramebuffers(struct gl_context *ctx, GLsizei n,
|
||||||
const GLuint *ids)
|
const GLuint *ids)
|
||||||
{
|
{
|
||||||
if (ctx->GLThread.CurrentDrawFramebuffer) {
|
if (ctx->GLThread.CurrentDrawFramebuffer) {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
if (ctx->GLThread.CurrentDrawFramebuffer == ids[i]) {
|
if (ctx->GLThread.CurrentDrawFramebuffer == ids[i])
|
||||||
ctx->GLThread.CurrentDrawFramebuffer = 0;
|
ctx->GLThread.CurrentDrawFramebuffer = 0;
|
||||||
break;
|
if (ctx->GLThread.CurrentReadFramebuffer == ids[i])
|
||||||
}
|
ctx->GLThread.CurrentReadFramebuffer = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user