From: Antia Puentes <apuen...@igalia.com> From the ARB_internalformat_query2 spec:
"If the particular <target> and <internalformat> combination do not make sense, or if a particular type of <target> is not supported by the implementation the "unsupported" answer should be given. This is not an error." This function checks if the <target> is supported by the implementation. v2: Allow RENDERBUFFER targets also on GLES 3 profiles. --- src/mesa/main/formatquery.c | 70 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index 1a9d86c..17de33e 100644 --- a/src/mesa/main/formatquery.c +++ b/src/mesa/main/formatquery.c @@ -28,6 +28,7 @@ #include "enums.h" #include "fbobject.h" #include "formatquery.h" +#include "teximage.h" /* Handles the cases where either ARB_internalformat_query or * ARB_internalformat_query2 have to return an error. @@ -362,6 +363,75 @@ _set_default_response(GLenum pname, GLint buffer[16]) } } +static bool +_is_target_supported(struct gl_context *ctx, GLenum target) +{ + /* The ARB_internalformat_query2 spec says: + * + * "if a particular type of <target> is not supported by the + * implementation the "unsupported" answer should be given. + * This is not an error." + */ + switch(target){ + case GL_TEXTURE_2D: + case GL_TEXTURE_3D: + break; + + case GL_TEXTURE_1D: + if (!_mesa_is_desktop_gl(ctx)) + return false; + break; + + case GL_TEXTURE_1D_ARRAY: + if (!_mesa_has_EXT_texture_array(ctx)) + return false; + break; + + case GL_TEXTURE_2D_ARRAY: + if (!(_mesa_has_EXT_texture_array(ctx) || _mesa_is_gles3(ctx))) + return false; + break; + + case GL_TEXTURE_CUBE_MAP: + if (!_mesa_has_ARB_texture_cube_map(ctx)) + return false; + break; + + case GL_TEXTURE_CUBE_MAP_ARRAY: + if (!_mesa_has_ARB_texture_cube_map_array(ctx)) + return false; + break; + + case GL_TEXTURE_RECTANGLE: + if (!_mesa_has_NV_texture_rectangle(ctx)) + return false; + break; + + case GL_TEXTURE_BUFFER: + if (!_mesa_has_ARB_texture_buffer_object(ctx)) + return false; + break; + + case GL_RENDERBUFFER: + if (!(_mesa_has_ARB_framebuffer_object(ctx) || + _mesa_is_gles3(ctx))) + return false; + break; + + case GL_TEXTURE_2D_MULTISAMPLE: + case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: + if (!(_mesa_has_ARB_texture_multisample(ctx) || + _mesa_is_gles31(ctx))) + return false; + break; + + default: + unreachable("invalid target"); + } + + return true; +} + /* default implementation of QueryInternalFormat driverfunc, for * drivers not implementing ARB_internalformat_query2. */ -- 2.5.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev