Parts of this were implemented previously, so finish it off. v2: fix getteximage falling into the integer check add fixes for the FBO paths, (fbo-stencil8 test).
Signed-off-by: Dave Airlie <airl...@redhat.com> --- src/mesa/main/extensions.c | 1 + src/mesa/main/fbobject.c | 9 ++++++--- src/mesa/main/texgetimage.c | 2 +- src/mesa/main/teximage.c | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index f212015..eea1ade 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -185,6 +185,7 @@ static const struct extension extension_table[] = { { "GL_ARB_texture_rectangle", o(NV_texture_rectangle), GL, 2004 }, { "GL_ARB_texture_rgb10_a2ui", o(ARB_texture_rgb10_a2ui), GL, 2009 }, { "GL_ARB_texture_rg", o(ARB_texture_rg), GL, 2008 }, + { "GL_ARB_texture_stencil8", o(ARB_texture_stencil8), GL, 2013 }, { "GL_ARB_texture_storage", o(dummy_true), GL, 2011 }, { "GL_ARB_texture_storage_multisample", o(ARB_texture_multisample), GL, 2012 }, { "GL_ARB_texture_view", o(ARB_texture_view), GL, 2012 }, diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 8032585..27cf97f 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -813,8 +813,10 @@ test_attachment_completeness(const struct gl_context *ctx, GLenum format, if (ctx->Extensions.ARB_depth_texture && baseFormat == GL_DEPTH_STENCIL) { /* OK */ - } - else { + } else if (ctx->Extensions.ARB_texture_stencil8 && + baseFormat == GL_STENCIL_INDEX) { + /* OK */ + } else { /* no such thing as stencil-only textures */ att_incomplete("illegal stencil texture"); att->Complete = GL_FALSE; @@ -978,7 +980,8 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, if (!is_format_color_renderable(ctx, attFormat, texImg->InternalFormat) && - !is_legal_depth_format(ctx, f)) { + !is_legal_depth_format(ctx, f) && + f != GL_STENCIL_INDEX) { fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; fbo_incomplete(ctx, "texture attachment incomplete", -1); return; diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c index 255d365..c93c1a2 100644 --- a/src/mesa/main/texgetimage.c +++ b/src/mesa/main/texgetimage.c @@ -879,7 +879,7 @@ getteximage_error_check(struct gl_context *ctx, "glGetTex%sImage(format mismatch)", suffix); return GL_TRUE; } - else if (_mesa_is_enum_format_integer(format) != + else if (!_mesa_is_stencil_format(format) && _mesa_is_enum_format_integer(format) != _mesa_is_format_integer(texImage->TexFormat)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTex%sImage(format mismatch)", suffix); diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 36e0b56..faca801 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1997,7 +1997,8 @@ _mesa_legal_texture_base_format_for_target(struct gl_context *ctx, const char *caller) { if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT - || _mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_STENCIL) { + || _mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_STENCIL + || _mesa_base_tex_format(ctx, internalFormat) == GL_STENCIL_INDEX) { /* Section 3.8.3 (Texture Image Specification) of the OpenGL 3.3 Core * Profile spec says: * -- 2.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev