mesa/main: correct formatquery error-handling

Most of the time, we remember to check for both extensions. But in one
case, it seems we forgot the GLES extension. Whoops.

Let's switch to a helper here, so we don't have to repeat the logic over
and over again.

Fixes: b4c0c514b1 ("mesa: add OES_texture_buffer and EXT_texture_buffer support")
Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
(cherry picked from commit 9d5e0c1ad2)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38803>
This commit is contained in:
Erik Faye-Lund 2025-10-30 19:58:59 +01:00 committed by Dylan Baker
parent d9cbd8ce83
commit 5dde2812b9
8 changed files with 19 additions and 22 deletions

View file

@ -344,7 +344,7 @@
"description": "mesa/main: correct formatquery error-handling",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "b4c0c514b10ed85b50e4fc3bbd9c740db21e5720",
"notes": null

View file

@ -728,9 +728,7 @@ get_buffer_target(struct gl_context *ctx, GLenum target, bool no_error)
}
break;
case GL_TEXTURE_BUFFER:
if (no_error ||
_mesa_has_ARB_texture_buffer_object(ctx) ||
_mesa_has_OES_texture_buffer(ctx)) {
if (no_error || _mesa_has_texture_buffer_object(ctx)) {
return &ctx->Texture.BufferObject;
}
break;

View file

@ -483,6 +483,13 @@ _mesa_has_texture_cube_map_array(const struct gl_context *ctx)
_mesa_has_OES_texture_cube_map_array(ctx);
}
static inline bool
_mesa_has_texture_buffer_object(const struct gl_context *ctx)
{
return _mesa_has_ARB_texture_buffer_object(ctx) ||
_mesa_has_OES_texture_buffer(ctx);
}
static inline bool
_mesa_has_texture_view(const struct gl_context *ctx)
{

View file

@ -473,7 +473,7 @@ _is_target_supported(struct gl_context *ctx, GLenum target)
break;
case GL_TEXTURE_BUFFER:
if (!_mesa_has_ARB_texture_buffer_object(ctx))
if (!_mesa_has_texture_buffer_object(ctx))
return false;
break;

View file

@ -2528,9 +2528,7 @@ tex_binding_to_index(const struct gl_context *ctx, GLenum binding)
|| _mesa_is_gles3(ctx)
? TEXTURE_2D_ARRAY_INDEX : -1;
case GL_TEXTURE_BINDING_BUFFER:
return (_mesa_has_ARB_texture_buffer_object(ctx) ||
_mesa_has_OES_texture_buffer(ctx)) ?
TEXTURE_BUFFER_INDEX : -1;
return _mesa_has_texture_buffer_object(ctx) ? TEXTURE_BUFFER_INDEX : -1;
case GL_TEXTURE_BINDING_CUBE_MAP_ARRAY:
return _mesa_has_texture_cube_map_array(ctx)
? TEXTURE_CUBE_ARRAY_INDEX : -1;

View file

@ -525,8 +525,7 @@ _mesa_max_texture_levels(const struct gl_context *ctx, GLenum target)
return _mesa_has_texture_cube_map_array(ctx)
? ctx->Const.MaxCubeTextureLevels : 0;
case GL_TEXTURE_BUFFER:
return (_mesa_has_ARB_texture_buffer_object(ctx) ||
_mesa_has_OES_texture_buffer(ctx)) ? 1 : 0;
return _mesa_has_texture_buffer_object(ctx) ? 1 : 0;
case GL_TEXTURE_2D_MULTISAMPLE:
case GL_PROXY_TEXTURE_2D_MULTISAMPLE:
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
@ -6499,8 +6498,7 @@ _mesa_get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat)
}
}
if (_mesa_has_ARB_texture_buffer_object_rgb32(ctx) ||
_mesa_has_OES_texture_buffer(ctx)) {
if (_mesa_has_texture_buffer_object(ctx)) {
switch (internalFormat) {
case GL_RGB32F:
return MESA_FORMAT_RGB_FLOAT32;
@ -6649,8 +6647,7 @@ texture_buffer_range(struct gl_context *ctx,
/* NOTE: ARB_texture_buffer_object might not be supported in
* the compatibility profile.
*/
if (!_mesa_has_ARB_texture_buffer_object(ctx) &&
!_mesa_has_OES_texture_buffer(ctx)) {
if (!_mesa_has_texture_buffer_object(ctx)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(ARB_texture_buffer_object is not"
" implemented for the compatibility profile)", caller);

View file

@ -202,9 +202,8 @@ _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target)
case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
case GL_TEXTURE_BUFFER:
return (_mesa_has_ARB_texture_buffer_object(ctx) ||
_mesa_has_OES_texture_buffer(ctx)) ?
texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;
return _mesa_has_texture_buffer_object(ctx)
? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;
case GL_TEXTURE_EXTERNAL_OES:
return _mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external
? texUnit->CurrentTex[TEXTURE_EXTERNAL_INDEX] : NULL;
@ -1639,9 +1638,8 @@ _mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target)
|| _mesa_is_gles3(ctx)
? TEXTURE_2D_ARRAY_INDEX : -1;
case GL_TEXTURE_BUFFER:
return (_mesa_has_ARB_texture_buffer_object(ctx) ||
_mesa_has_OES_texture_buffer(ctx)) ?
TEXTURE_BUFFER_INDEX : -1;
return _mesa_has_texture_buffer_object(ctx)
? TEXTURE_BUFFER_INDEX : -1;
case GL_TEXTURE_EXTERNAL_OES:
return _mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external
? TEXTURE_EXTERNAL_INDEX : -1;

View file

@ -1931,8 +1931,7 @@ get_tex_level_parameter_image(struct gl_context *ctx,
/* GL_ARB_texture_buffer_object */
case GL_TEXTURE_BUFFER_DATA_STORE_BINDING:
if (!_mesa_has_ARB_texture_buffer_object(ctx) &&
!_mesa_has_OES_texture_buffer(ctx))
if (!_mesa_has_texture_buffer_object(ctx))
goto invalid_pname;
*params = 0;
break;