+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);
+}
+
+static void
+bind_image_texture(struct gl_context *ctx, struct gl_texture_object *texObj,
+ GLuint unit, GLint level, GLboolean layered, GLint layer,
+ GLenum access, GLenum format)
+{
+ struct gl_image_unit *u;
+
+ u = &ctx->ImageUnits[unit];
+
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |= ctx->DriverFlags.NewImageUnits;
+
+ set_image_binding(u, texObj, level, layered, layer, access, format);
+}
+
+void GLAPIENTRY
+_mesa_BindImageTexture_no_error(GLuint unit, GLuint texture, GLint level,
+ GLboolean layered, GLint layer, GLenum access,
+ GLenum format)
+{
+ struct gl_texture_object *texObj = NULL;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (texture)
+ texObj = _mesa_lookup_texture(ctx, texture);
+
+ bind_image_texture(ctx, texObj, unit, level, layered, layer, access, format);
+}
+