mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
mesa: delete framebuffer texture attachment sampler views
When a context is destroyed the destroy_tex_sampler_cb makes sure that all the
sampler views created by that context are destroyed.
This is done by walking the ctx->Shared->TexObjects hash table.
In a multiple context environment the texture can be deleted by a different context,
so it will be removed from the TexObjects table and will prevent the above mechanism
to work.
This can result in an assertion in st_save_zombie_sampler_view because the
sampler_view owns a reference to a destroyed context.
This issue occurs in blender 2.80.
This commit fixes this by explicitly releasing sampler_view created by the destroyed
context for all texture attachments.
Fixes: 593e36f956 (st/mesa: implement "zombie" sampler views (v2))
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110944
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
7389bf9761
commit
c37f03d464
1 changed files with 15 additions and 0 deletions
|
|
@ -921,6 +921,19 @@ destroy_tex_sampler_cb(GLuint id, void *data, void *userData)
|
|||
st_texture_release_context_sampler_view(st, st_texture_object(texObj));
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_framebuffer_attachment_sampler_cb(GLuint id, void *data, void *userData)
|
||||
{
|
||||
struct gl_framebuffer* glfb = (struct gl_framebuffer*) data;
|
||||
struct st_context *st = (struct st_context *) userData;
|
||||
|
||||
for (unsigned i = 0; i < BUFFER_COUNT; i++) {
|
||||
struct gl_renderbuffer_attachment *att = &glfb->Attachment[i];
|
||||
if (att->Texture) {
|
||||
st_texture_release_context_sampler_view(st, st_texture_object(att->Texture));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
st_destroy_context(struct st_context *st)
|
||||
|
|
@ -979,6 +992,8 @@ st_destroy_context(struct st_context *st)
|
|||
st_framebuffer_reference(&stfb, NULL);
|
||||
}
|
||||
|
||||
_mesa_HashWalk(ctx->Shared->FrameBuffers, destroy_framebuffer_attachment_sampler_cb, st);
|
||||
|
||||
pipe_sampler_view_reference(&st->pixel_xfer.pixelmap_sampler_view, NULL);
|
||||
pipe_resource_reference(&st->pixel_xfer.pixelmap_texture, NULL);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue