From 806bc2bf223c03c488de5549582141824dcbbc40 Mon Sep 17 00:00:00 2001 From: Antia Puentes Date: Wed, 16 Dec 2015 20:46:49 +0100 Subject: mesa/formatquery: Added a func to check if the is supported From the ARB_internalformat_query2 spec: "If the particular and combination do not make sense, or if a particular type of is not supported by the implementation the "unsupported" answer should be given. This is not an error." This function checks if the is supported by the implementation. v2: Allow RENDERBUFFER targets also on GLES 3 profiles. Reviewed-by: Dave Airlie --- src/mesa/main/formatquery.c | 70 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'src/mesa') diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index 1a9d86ce56f..17de33ec52c 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 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. */ -- cgit v1.2.3