mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
Revert "mesa: simplify _mesa_is_image_unit_valid for buffers"
This reverts commitc0ed52f614. It was preventing the image format validation from being done on buffer textures, which is required to ensure that the application doesn't attempt to bind a buffer texture with an internal format incompatible with the image unit format (e.g. of different texel size), which is not allowed by the spec (it's not allowed for *any* texture target, whether or not there is spec wording restricting this behavior specifically for buffer textures) and will cause the driver to calculate texel bounds incorrectly and potentially crash instead of the expected behavior. Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Marek Olšák <marek.olsak@amd.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106465 Reviewed-by: Nanley Chery <nanley.g.chery@intel.com> (cherry picked from commit5a68147803)
This commit is contained in:
parent
7366a91340
commit
d795a1a691
1 changed files with 12 additions and 13 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue