summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-05-23 23:45:47 +0200
committerSamuel Pitoiset <[email protected]>2017-05-29 10:11:39 +0200
commit1f75915e1a661b0080cf23fa2ea9a55417701f59 (patch)
treed38d064243dd9354f574934eb1162f9b7aeb678d
parentb12dfb1558aa9a5eb4d7cc280e7f423f1f1e9c66 (diff)
mesa: add set_image_binding() helper
Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r--src/mesa/main/shaderimage.c70
1 files changed, 34 insertions, 36 deletions
diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c
index 0b8cfe2468a..ad9fdb0e9bc 100644
--- a/src/mesa/main/shaderimage.c
+++ b/src/mesa/main/shaderimage.c
@@ -564,14 +564,38 @@ validate_bind_image_texture(struct gl_context *ctx, GLuint unit,
return GL_TRUE;
}
+static void
+set_image_binding(struct gl_image_unit *u, struct gl_texture_object *texObj,
+ GLint level, GLboolean layered, GLint layer, GLenum access,
+ GLenum format)
+{
+ u->Level = level;
+ u->Access = access;
+ u->Format = format;
+ u->_ActualFormat = _mesa_get_shader_image_format(format);
+
+ if (texObj && _mesa_tex_target_is_layered(texObj->Target)) {
+ u->Layered = layered;
+ u->Layer = layer;
+ u->_Layer = (u->Layered ? 0 : u->Layer);
+ } else {
+ u->Layered = GL_FALSE;
+ u->Layer = 0;
+ }
+
+ _mesa_reference_texobj(&u->TexObj, texObj);
+}
+
void GLAPIENTRY
_mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
GLboolean layered, GLint layer, GLenum access,
GLenum format)
{
- GET_CURRENT_CONTEXT(ctx);
+ struct gl_texture_object *texObj = NULL;
struct gl_image_unit *u;
+ GET_CURRENT_CONTEXT(ctx);
+
if (!validate_bind_image_texture(ctx, unit, texture, level, layer, access,
format))
return;
@@ -582,9 +606,9 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
ctx->NewDriverState |= ctx->DriverFlags.NewImageUnits;
if (texture) {
- struct gl_texture_object *t = _mesa_lookup_texture(ctx, texture);
+ texObj = _mesa_lookup_texture(ctx, texture);
- if (!t) {
+ if (!texObj) {
_mesa_error(ctx, GL_INVALID_VALUE, "glBindImageTexture(texture)");
return;
}
@@ -599,31 +623,15 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
* recognizes that there is no way to create immutable buffer textures,
* so those are excluded from this requirement.
*/
- if (_mesa_is_gles(ctx) && !t->Immutable &&
- t->Target != GL_TEXTURE_BUFFER) {
+ if (_mesa_is_gles(ctx) && !texObj->Immutable &&
+ texObj->Target != GL_TEXTURE_BUFFER) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glBindImageTexture(!immutable)");
return;
}
-
- _mesa_reference_texobj(&u->TexObj, t);
- } else {
- _mesa_reference_texobj(&u->TexObj, NULL);
}
- u->Level = level;
- u->Access = access;
- u->Format = format;
- u->_ActualFormat = _mesa_get_shader_image_format(format);
-
- if (u->TexObj && _mesa_tex_target_is_layered(u->TexObj->Target)) {
- u->Layered = layered;
- u->Layer = layer;
- u->_Layer = (u->Layered ? 0 : u->Layer);
- } else {
- u->Layered = GL_FALSE;
- u->Layer = 0;
- }
+ set_image_binding(u, texObj, level, layered, layer, access, format);
}
void GLAPIENTRY
@@ -743,22 +751,12 @@ _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures)
}
/* Update the texture binding */
- _mesa_reference_texobj(&u->TexObj, texObj);
- u->Level = 0;
- u->Layered = _mesa_tex_target_is_layered(texObj->Target);
- u->_Layer = u->Layer = 0;
- u->Access = GL_READ_WRITE;
- u->Format = tex_format;
- u->_ActualFormat = _mesa_get_shader_image_format(tex_format);
+ set_image_binding(u, texObj, 0,
+ _mesa_tex_target_is_layered(texObj->Target),
+ 0, GL_READ_WRITE, tex_format);
} else {
/* Unbind the texture from the unit */
- _mesa_reference_texobj(&u->TexObj, NULL);
- u->Level = 0;
- u->Layered = GL_FALSE;
- u->_Layer = u->Layer = 0;
- u->Access = GL_READ_ONLY;
- u->Format = GL_R8;
- u->_ActualFormat = MESA_FORMAT_R_UNORM8;
+ set_image_binding(u, NULL, 0, GL_FALSE, 0, GL_READ_ONLY, GL_R8);
}
}