mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 15:58:05 +02:00
mesa: Expose function to calculate whether a shader image unit is valid.
A future commit will remove all texture object-dependent derived state
from the image unit struct to make validation unnecessary on texture
state changes. Instead of checking gl_image_unit::_Valid drivers will
be required to call this function when needed to find out whether an
image unit is in a valid state and whether access from the shader is
allowed.
Tested-by: Ye Tian <yex.tian@intel.com>
CC: "11.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
(cherry picked from commit 5152db415f)
This commit is contained in:
parent
37b647b979
commit
7259f17eca
2 changed files with 15 additions and 4 deletions
|
|
@ -415,8 +415,8 @@ _mesa_init_image_units(struct gl_context *ctx)
|
|||
ctx->ImageUnits[i] = _mesa_default_image_unit(ctx);
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
validate_image_unit(struct gl_context *ctx, struct gl_image_unit *u)
|
||||
GLboolean
|
||||
_mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u)
|
||||
{
|
||||
struct gl_texture_object *t = u->TexObj;
|
||||
mesa_format tex_format;
|
||||
|
|
@ -567,7 +567,7 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
|
|||
u->Access = access;
|
||||
u->Format = format;
|
||||
u->_ActualFormat = _mesa_get_shader_image_format(format);
|
||||
u->_Valid = validate_image_unit(ctx, u);
|
||||
u->_Valid = _mesa_is_image_unit_valid(ctx, u);
|
||||
|
||||
if (u->TexObj && _mesa_tex_target_is_layered(u->TexObj->Target)) {
|
||||
u->Layered = layered;
|
||||
|
|
@ -707,7 +707,7 @@ _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures)
|
|||
u->Access = GL_READ_WRITE;
|
||||
u->Format = tex_format;
|
||||
u->_ActualFormat = _mesa_get_shader_image_format(tex_format);
|
||||
u->_Valid = validate_image_unit(ctx, u);
|
||||
u->_Valid = _mesa_is_image_unit_valid(ctx, u);
|
||||
} else {
|
||||
/* Unbind the texture from the unit */
|
||||
_mesa_reference_texobj(&u->TexObj, NULL);
|
||||
|
|
|
|||
|
|
@ -54,6 +54,17 @@ _mesa_default_image_unit(struct gl_context *ctx);
|
|||
void
|
||||
_mesa_init_image_units(struct gl_context *ctx);
|
||||
|
||||
/**
|
||||
* Return GL_TRUE if the state of the image unit passed as argument is valid
|
||||
* and access from the shader is allowed. Otherwise loads from this unit
|
||||
* should return zero and stores should have no effect.
|
||||
*
|
||||
* The result depends on context state other than the passed image unit, part
|
||||
* of the _NEW_TEXTURE set.
|
||||
*/
|
||||
GLboolean
|
||||
_mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u);
|
||||
|
||||
/**
|
||||
* Recalculate the \c _Valid flag of a context's shader image units.
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue