From 421aa5dfacf292956e5e5688d952affef304ad55 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 28 Jun 2022 21:57:14 -0700 Subject: [PATCH] mesa/st: Disable OES_texture_3D for PIPE_CAP_MAX_TEXTURE_3D_LEVELS==0. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be used for vc4, where incorrectly exposing 3D textures accounts for most of the GLES2 conformance failures it has. This leaves EXT_texture3d exposed in the (already non-conformant) GL2.1 support it exposes, which has always been a best-effort thing. Reviewed-by: Iago Toral Quiroga Reviewed-by: Marek Olšák Part-of: --- src/compiler/glsl/standalone_scaffolding.cpp | 1 + src/mesa/main/consts_exts.h | 1 + src/mesa/main/extensions_table.h | 2 +- src/mesa/main/fbobject.c | 3 ++- src/mesa/main/get.c | 4 +++- src/mesa/main/teximage.c | 3 ++- src/mesa/main/texobj.c | 7 +++++-- src/mesa/state_tracker/st_extensions.c | 1 + 8 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/compiler/glsl/standalone_scaffolding.cpp b/src/compiler/glsl/standalone_scaffolding.cpp index 03ffefdd00a..f875e2e08bf 100644 --- a/src/compiler/glsl/standalone_scaffolding.cpp +++ b/src/compiler/glsl/standalone_scaffolding.cpp @@ -218,6 +218,7 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) ctx->Extensions.OES_EGL_image_external = true; ctx->Extensions.OES_standard_derivatives = true; + ctx->Extensions.OES_texture_3D = true; ctx->Extensions.EXT_gpu_shader4 = true; ctx->Extensions.EXT_shader_integer_mix = true; diff --git a/src/mesa/main/consts_exts.h b/src/mesa/main/consts_exts.h index f8572683eb4..fc0dd3d52cf 100644 --- a/src/mesa/main/consts_exts.h +++ b/src/mesa/main/consts_exts.h @@ -286,6 +286,7 @@ struct gl_extensions GLboolean OES_draw_texture; GLboolean OES_depth_texture_cube_map; GLboolean OES_EGL_image_external; + GLboolean OES_texture_3D; GLboolean OES_texture_float; GLboolean OES_texture_float_linear; GLboolean OES_texture_half_float; diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index 74cec475c99..513450ca676 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -471,7 +471,7 @@ EXT(OES_stencil_wrap , dummy_true EXT(OES_surfaceless_context , dummy_true , x , x , ES1, ES2, 2012) EXT(OES_tessellation_point_size , ARB_tessellation_shader , x , x , x , 31, 2014) EXT(OES_tessellation_shader , ARB_tessellation_shader , x , x , x , 31, 2014) -EXT(OES_texture_3D , dummy_true , x , x , x , ES2, 2005) +EXT(OES_texture_3D , OES_texture_3D , x , x , x , ES2, 2005) EXT(OES_texture_border_clamp , dummy_true , x , x , x , ES2, 2014) EXT(OES_texture_buffer , OES_texture_buffer , x , x , x , 31, 2014) EXT(OES_texture_compression_astc , OES_texture_compression_astc , x , x , ES1, ES2, 2015) diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 48df6d7c4de..ba9dcd37d37 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -3797,7 +3797,8 @@ check_textarget(struct gl_context *ctx, int dims, GLenum target, err = dims != 2; break; case GL_TEXTURE_3D: - err = dims != 3; + err = dims != 3 || + (ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D); break; default: _mesa_error(ctx, GL_INVALID_ENUM, diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 89b90e6eef7..6d6a0f864f4 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -2464,7 +2464,9 @@ tex_binding_to_index(const struct gl_context *ctx, GLenum binding) case GL_TEXTURE_BINDING_2D: return TEXTURE_2D_INDEX; case GL_TEXTURE_BINDING_3D: - return ctx->API != API_OPENGLES ? TEXTURE_3D_INDEX : -1; + return (ctx->API != API_OPENGLES && + !(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D)) + ? TEXTURE_3D_INDEX : -1; case GL_TEXTURE_BINDING_CUBE_MAP: return TEXTURE_CUBE_INDEX; case GL_TEXTURE_BINDING_RECTANGLE: diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 0766c840073..b9f2e88e032 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -497,7 +497,8 @@ _mesa_max_texture_levels(const struct gl_context *ctx, GLenum target) return ffs(util_next_power_of_two(ctx->Const.MaxTextureSize)); case GL_TEXTURE_3D: case GL_PROXY_TEXTURE_3D: - return ctx->Const.Max3DTextureLevels; + return !(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D) + ? ctx->Const.Max3DTextureLevels : 0; case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP_POSITIVE_X: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 266384ad18e..8e8cbb948dd 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -169,7 +169,8 @@ _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target) case GL_TEXTURE_3D: return texUnit->CurrentTex[TEXTURE_3D_INDEX]; case GL_PROXY_TEXTURE_3D: - return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX]; + return !(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D) + ? ctx->Texture.ProxyTex[TEXTURE_3D_INDEX] : NULL; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: @@ -1537,7 +1538,9 @@ _mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target) case GL_TEXTURE_2D: return TEXTURE_2D_INDEX; case GL_TEXTURE_3D: - return ctx->API != API_OPENGLES ? TEXTURE_3D_INDEX : -1; + return (ctx->API != API_OPENGLES && + !(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D)) + ? TEXTURE_3D_INDEX : -1; case GL_TEXTURE_CUBE_MAP: return TEXTURE_CUBE_INDEX; case GL_TEXTURE_RECTANGLE: diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 4280866d762..7461f4aaeb5 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -94,6 +94,7 @@ void st_init_limits(struct pipe_screen *screen, c->Max3DTextureLevels = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS), MAX_TEXTURE_LEVELS); + extensions->OES_texture_3D = c->Max3DTextureLevels != 0; c->MaxCubeTextureLevels = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS),