diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c index 596eadd4f85..054ab1d95e4 100644 --- a/src/mesa/main/shaderimage.c +++ b/src/mesa/main/shaderimage.c @@ -479,13 +479,6 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u) if (!t) return GL_FALSE; - /* The GL 4.5 Core spec doesn't say anything about buffers. In practice, - * the image buffer format is always compatible with the underlying - * buffer storage. - */ - if (t->Target == GL_TEXTURE_BUFFER) - return GL_TRUE; - if (!t->_BaseComplete && !t->_MipmapComplete) _mesa_test_texobj_completeness(ctx, t); @@ -499,14 +492,20 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u) u->_Layer >= _mesa_get_texture_layers(t, u->Level)) return GL_FALSE; - struct gl_texture_image *img = (t->Target == GL_TEXTURE_CUBE_MAP ? - t->Image[u->_Layer][u->Level] : - t->Image[0][u->Level]); + if (t->Target == GL_TEXTURE_BUFFER) { + tex_format = _mesa_get_shader_image_format(t->BufferObjectFormat); - if (!img || img->Border || img->NumSamples > ctx->Const.MaxImageSamples) - return GL_FALSE; + } else { + struct gl_texture_image *img = (t->Target == GL_TEXTURE_CUBE_MAP ? + t->Image[u->_Layer][u->Level] : + t->Image[0][u->Level]); + + if (!img || img->Border || img->NumSamples > ctx->Const.MaxImageSamples) + return GL_FALSE; + + tex_format = _mesa_get_shader_image_format(img->InternalFormat); + } - tex_format = _mesa_get_shader_image_format(img->InternalFormat); if (!tex_format) return GL_FALSE;