From: Antia Puentes <apuen...@igalia.com> From the ARB_internalformat_query2 specification:
"- FRAMEBUFFER_RENDERABLE: The support for rendering to the resource via framebuffer attachment is returned in <params>. - FRAMEBUFFER_RENDERABLE_LAYERED: The support for layered rendering to the resource via framebuffer attachment is returned in <params>. - FRAMEBUFFER_BLEND: The support for rendering to the resource via framebuffer attachment when blending is enabled is returned in <params>." For all of them, "Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. If the resource is unsupported, NONE is returned." --- src/mesa/main/formatquery.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index a412c3d..d720fc2 100644 --- a/src/mesa/main/formatquery.c +++ b/src/mesa/main/formatquery.c @@ -571,6 +571,23 @@ _is_internalformat_supported(struct gl_context *ctx, GLenum target, return (buffer[0] == GL_TRUE); } +static bool +_legal_target_for_framebuffer_texture_layer(struct gl_context *ctx, + GLenum target) +{ + switch (target) { + case GL_TEXTURE_3D: + case GL_TEXTURE_1D_ARRAY: + case GL_TEXTURE_2D_ARRAY: + case GL_TEXTURE_CUBE_MAP_ARRAY: + case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: + case GL_TEXTURE_CUBE_MAP: + return true; + default: + return false; + } +} + /* default implementation of QueryInternalFormat driverfunc, for * drivers not implementing ARB_internalformat_query2. */ @@ -620,6 +637,9 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target, case GL_TEXTURE_SHADOW: case GL_TEXTURE_GATHER: case GL_TEXTURE_GATHER_SHADOW: + case GL_FRAMEBUFFER_RENDERABLE: + case GL_FRAMEBUFFER_RENDERABLE_LAYERED: + case GL_FRAMEBUFFER_BLEND: params[0] = GL_FULL_SUPPORT; break; @@ -1046,16 +1066,22 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, buffer[0] = GL_TRUE; break; + case GL_FRAMEBUFFER_RENDERABLE_LAYERED: + if (!ctx->Extensions.EXT_texture_array || + _legal_target_for_framebuffer_texture_layer(ctx, target)) + goto end; + /* fallthrough */ case GL_FRAMEBUFFER_RENDERABLE: - /* @TODO */ - break; + case GL_FRAMEBUFFER_BLEND: + if (!ctx->Extensions.ARB_framebuffer_object) + goto end; - case GL_FRAMEBUFFER_RENDERABLE_LAYERED: - /* @TODO */ - break; + if (target == GL_TEXTURE_BUFFER || + !_is_renderable(ctx, internalformat)) + goto end; - case GL_FRAMEBUFFER_BLEND: - /* @TODO */ + ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname, + buffer); break; case GL_READ_PIXELS: -- 2.5.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev