On 01/06/16 22:07, Ian Romanick wrote: > On 05/13/2016 07:57 AM, Alejandro Piñeiro wrote: >> There are several internalformat that are not supported on gl es, so >> it should return -1 if that is the case. This is needed in order to >> get ARB_internalformat_query2 implementation deciding correctly if >> a resource is supported or not on opengl es. >> >> FWIW, in some cases, _mesa_base_fbo_format has equivalent checks >> for those internalformats, although for this method it is implemented >> as a check/break in most cases, to keep consistency within the function. >> >> Acked-by: Eduardo Lima <el...@igalia.com> >> Acked-by: Antia Puentes <apuen...@igalia.com> >> --- >> src/mesa/main/glformats.c | 76 >> ++++++++++++++++++++++++++++++++++++++--------- >> 1 file changed, 62 insertions(+), 14 deletions(-) >> >> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c >> index 24ce7b0..26644ec 100644 >> --- a/src/mesa/main/glformats.c >> +++ b/src/mesa/main/glformats.c >> @@ -2293,25 +2293,28 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> case 3: >> return (ctx->API != API_OPENGL_CORE) ? GL_RGB : -1; > I don't think 1, 2, 3, or 4 are allowed as internal formats in OpenGL > ES... they might be allowed in OpenGL ES 1.x, but I'm almost certain > they're not allowed in 2.0+.
Yes, 1,2,3,4 are not allowed on OpenGL ES. > If the extra ES checks aren't "reachable," > I'm not sure what the value is in adding them. But that doesn't mean that the other checks are reachable. For example, GL_RGB16 value is different to 1,2,3 or 4. After a quick check, I didn't see any mapping of the original internalformat to 1,2,3,4 before calling this method. And definitively, we don't do that on the implementation of GetInternalformati*v, where we call _mesa_base_tex_format with the internalformat specified by the caller. Am I missing something? > >> case GL_RGB: >> + case GL_RGB8: >> + return GL_RGB; >> case GL_R3_G3_B2: >> case GL_RGB4: >> case GL_RGB5: >> - case GL_RGB8: >> case GL_RGB10: >> case GL_RGB12: >> case GL_RGB16: >> - return GL_RGB; >> + return _mesa_is_desktop_gl(ctx) ? GL_RGB : -1; >> case 4: >> return (ctx->API != API_OPENGL_CORE) ? GL_RGBA : -1; >> case GL_RGBA: >> - case GL_RGBA2: >> case GL_RGBA4: >> case GL_RGB5_A1: >> case GL_RGBA8: >> - case GL_RGB10_A2: >> + return GL_RGBA; >> + case GL_RGBA2: >> case GL_RGBA12: >> case GL_RGBA16: >> - return GL_RGBA; >> + return _mesa_is_desktop_gl(ctx) ? GL_RGBA : -1; >> + case GL_RGB10_A2: >> + return _mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx) ? GL_RGBA : -1; >> default: >> ; /* fallthrough */ >> } >> @@ -2341,7 +2344,10 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> case GL_DEPTH_COMPONENT: >> case GL_DEPTH_COMPONENT16: >> case GL_DEPTH_COMPONENT24: >> + return GL_DEPTH_COMPONENT; >> case GL_DEPTH_COMPONENT32: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_DEPTH_COMPONENT; >> case GL_DEPTH_STENCIL: >> case GL_DEPTH24_STENCIL8: >> @@ -2374,8 +2380,12 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> case GL_COMPRESSED_INTENSITY: >> return GL_INTENSITY; >> case GL_COMPRESSED_RGB: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RGB; >> case GL_COMPRESSED_RGBA: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RGBA; >> default: >> ; /* fallthrough */ >> @@ -2426,37 +2436,57 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> >> if (ctx->Extensions.EXT_texture_snorm) { >> switch (internalFormat) { >> - case GL_RED_SNORM: >> case GL_R8_SNORM: >> + return GL_RED; >> + case GL_RED_SNORM: >> case GL_R16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RED; >> - case GL_RG_SNORM: >> case GL_RG8_SNORM: >> + return GL_RG; >> + case GL_RG_SNORM: >> case GL_RG16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RG; >> - case GL_RGB_SNORM: >> case GL_RGB8_SNORM: >> + return GL_RGB; >> + case GL_RGB_SNORM: >> case GL_RGB16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RGB; >> - case GL_RGBA_SNORM: >> case GL_RGBA8_SNORM: >> + return GL_RGBA; >> + case GL_RGBA_SNORM: >> case GL_RGBA16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RGBA; >> case GL_ALPHA_SNORM: >> case GL_ALPHA8_SNORM: >> case GL_ALPHA16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_ALPHA; >> case GL_LUMINANCE_SNORM: >> case GL_LUMINANCE8_SNORM: >> case GL_LUMINANCE16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_LUMINANCE; >> case GL_LUMINANCE_ALPHA_SNORM: >> case GL_LUMINANCE8_ALPHA8_SNORM: >> case GL_LUMINANCE16_ALPHA16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_LUMINANCE_ALPHA; >> case GL_INTENSITY_SNORM: >> case GL_INTENSITY8_SNORM: >> case GL_INTENSITY16_SNORM: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_INTENSITY; >> default: >> ; /* fallthrough */ >> @@ -2465,21 +2495,31 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> >> if (ctx->Extensions.EXT_texture_sRGB) { >> switch (internalFormat) { >> - case GL_SRGB_EXT: >> case GL_SRGB8_EXT: >> + return GL_RGB; >> + case GL_SRGB_EXT: >> case GL_COMPRESSED_SRGB_EXT: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RGB; >> - case GL_SRGB_ALPHA_EXT: >> case GL_SRGB8_ALPHA8_EXT: >> + return GL_RGBA; >> + case GL_SRGB_ALPHA_EXT: >> case GL_COMPRESSED_SRGB_ALPHA_EXT: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RGBA; >> case GL_SLUMINANCE_ALPHA_EXT: >> case GL_SLUMINANCE8_ALPHA8_EXT: >> case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_LUMINANCE_ALPHA; >> case GL_SLUMINANCE_EXT: >> case GL_SLUMINANCE8_EXT: >> case GL_COMPRESSED_SLUMINANCE_EXT: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_LUMINANCE; >> default: >> ; /* fallthrough */ >> @@ -2559,11 +2599,16 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> break; >> /* FALLTHROUGH */ >> case GL_R8: >> - case GL_R16: >> case GL_RED: >> + return GL_RED; >> case GL_COMPRESSED_RED: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> + return GL_RED; >> + case GL_R16: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RED; >> - >> case GL_RG16F: >> case GL_RG32F: >> if (!ctx->Extensions.ARB_texture_float) >> @@ -2580,8 +2625,11 @@ _mesa_base_tex_format(const struct gl_context *ctx, >> GLint internalFormat) >> /* FALLTHROUGH */ >> case GL_RG: >> case GL_RG8: >> - case GL_RG16: >> + return GL_RG; >> case GL_COMPRESSED_RG: >> + case GL_RG16: >> + if (!_mesa_is_desktop_gl(ctx)) >> + break; >> return GL_RG; >> default: >> ; /* fallthrough */ >> > BR _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev