mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-26 15:40:30 +01:00
mesa: Unbind deleted textures from the shader image units.
From ARB_shader_image_load_store: If a texture object bound to one or more image units is deleted by DeleteTextures, it is detached from each such image unit, as though BindImageTexture were called with <unit> identifying the image unit and <texture> set to zero. Reviewed-by: Chris Forbes <chrisf@ijw.co.nz> Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
parent
902f9df36b
commit
ace31f4bc0
1 changed files with 25 additions and 0 deletions
|
|
@ -1099,6 +1099,25 @@ unbind_texobj_from_texunits(struct gl_context *ctx,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the given texture object is bound to any shader image unit
|
||||
* and unbind it if that's the case.
|
||||
*/
|
||||
static void
|
||||
unbind_texobj_from_imgunits(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ctx->Const.MaxImageUnits; i++) {
|
||||
struct gl_image_unit *unit = &ctx->ImageUnits[i];
|
||||
|
||||
if (texObj == unit->TexObj)
|
||||
_mesa_reference_texobj(&unit->TexObj, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Delete named textures.
|
||||
*
|
||||
|
|
@ -1146,6 +1165,12 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures)
|
|||
*/
|
||||
unbind_texobj_from_texunits(ctx, delObj);
|
||||
|
||||
/* Check if this texture is currently bound to any shader
|
||||
* image unit. If so, unbind it.
|
||||
* See section 3.9.X of GL_ARB_shader_image_load_store.
|
||||
*/
|
||||
unbind_texobj_from_imgunits(ctx, delObj);
|
||||
|
||||
_mesa_unlock_texture(ctx, delObj);
|
||||
|
||||
ctx->NewState |= _NEW_TEXTURE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue