mesa/st: Disable OES_texture_3D for PIPE_CAP_MAX_TEXTURE_3D_LEVELS==0.
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 <itoral@igalia.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17350>
This commit is contained in:
@@ -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_EGL_image_external = true;
|
||||||
ctx->Extensions.OES_standard_derivatives = true;
|
ctx->Extensions.OES_standard_derivatives = true;
|
||||||
|
ctx->Extensions.OES_texture_3D = true;
|
||||||
|
|
||||||
ctx->Extensions.EXT_gpu_shader4 = true;
|
ctx->Extensions.EXT_gpu_shader4 = true;
|
||||||
ctx->Extensions.EXT_shader_integer_mix = true;
|
ctx->Extensions.EXT_shader_integer_mix = true;
|
||||||
|
@@ -286,6 +286,7 @@ struct gl_extensions
|
|||||||
GLboolean OES_draw_texture;
|
GLboolean OES_draw_texture;
|
||||||
GLboolean OES_depth_texture_cube_map;
|
GLboolean OES_depth_texture_cube_map;
|
||||||
GLboolean OES_EGL_image_external;
|
GLboolean OES_EGL_image_external;
|
||||||
|
GLboolean OES_texture_3D;
|
||||||
GLboolean OES_texture_float;
|
GLboolean OES_texture_float;
|
||||||
GLboolean OES_texture_float_linear;
|
GLboolean OES_texture_float_linear;
|
||||||
GLboolean OES_texture_half_float;
|
GLboolean OES_texture_half_float;
|
||||||
|
@@ -471,7 +471,7 @@ EXT(OES_stencil_wrap , dummy_true
|
|||||||
EXT(OES_surfaceless_context , dummy_true , x , x , ES1, ES2, 2012)
|
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_point_size , ARB_tessellation_shader , x , x , x , 31, 2014)
|
||||||
EXT(OES_tessellation_shader , 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_border_clamp , dummy_true , x , x , x , ES2, 2014)
|
||||||
EXT(OES_texture_buffer , OES_texture_buffer , x , x , x , 31, 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)
|
EXT(OES_texture_compression_astc , OES_texture_compression_astc , x , x , ES1, ES2, 2015)
|
||||||
|
@@ -3797,7 +3797,8 @@ check_textarget(struct gl_context *ctx, int dims, GLenum target,
|
|||||||
err = dims != 2;
|
err = dims != 2;
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_3D:
|
case GL_TEXTURE_3D:
|
||||||
err = dims != 3;
|
err = dims != 3 ||
|
||||||
|
(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
@@ -2464,7 +2464,9 @@ tex_binding_to_index(const struct gl_context *ctx, GLenum binding)
|
|||||||
case GL_TEXTURE_BINDING_2D:
|
case GL_TEXTURE_BINDING_2D:
|
||||||
return TEXTURE_2D_INDEX;
|
return TEXTURE_2D_INDEX;
|
||||||
case GL_TEXTURE_BINDING_3D:
|
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:
|
case GL_TEXTURE_BINDING_CUBE_MAP:
|
||||||
return TEXTURE_CUBE_INDEX;
|
return TEXTURE_CUBE_INDEX;
|
||||||
case GL_TEXTURE_BINDING_RECTANGLE:
|
case GL_TEXTURE_BINDING_RECTANGLE:
|
||||||
|
@@ -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));
|
return ffs(util_next_power_of_two(ctx->Const.MaxTextureSize));
|
||||||
case GL_TEXTURE_3D:
|
case GL_TEXTURE_3D:
|
||||||
case GL_PROXY_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:
|
||||||
case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
|
case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
|
||||||
case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
|
case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
|
||||||
|
@@ -169,7 +169,8 @@ _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target)
|
|||||||
case GL_TEXTURE_3D:
|
case GL_TEXTURE_3D:
|
||||||
return texUnit->CurrentTex[TEXTURE_3D_INDEX];
|
return texUnit->CurrentTex[TEXTURE_3D_INDEX];
|
||||||
case GL_PROXY_TEXTURE_3D:
|
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_POSITIVE_X:
|
||||||
case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
|
case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
|
||||||
case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
|
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:
|
case GL_TEXTURE_2D:
|
||||||
return TEXTURE_2D_INDEX;
|
return TEXTURE_2D_INDEX;
|
||||||
case GL_TEXTURE_3D:
|
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:
|
case GL_TEXTURE_CUBE_MAP:
|
||||||
return TEXTURE_CUBE_INDEX;
|
return TEXTURE_CUBE_INDEX;
|
||||||
case GL_TEXTURE_RECTANGLE:
|
case GL_TEXTURE_RECTANGLE:
|
||||||
|
@@ -94,6 +94,7 @@ void st_init_limits(struct pipe_screen *screen,
|
|||||||
c->Max3DTextureLevels
|
c->Max3DTextureLevels
|
||||||
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS),
|
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS),
|
||||||
MAX_TEXTURE_LEVELS);
|
MAX_TEXTURE_LEVELS);
|
||||||
|
extensions->OES_texture_3D = c->Max3DTextureLevels != 0;
|
||||||
|
|
||||||
c->MaxCubeTextureLevels
|
c->MaxCubeTextureLevels
|
||||||
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS),
|
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS),
|
||||||
|
Reference in New Issue
Block a user