Stencil texturing is required by ES 3.1. Apparently we never actually turned it on, and we missed some necessary code.
Fixes nine dEQP-GLES31.functional tests: stencil_texturing.format.stencil_index8_2d texture.border_clamp.formats.stencil_index8.nearest_size_pot texture.border_clamp.formats.stencil_index8.nearest_size_npot texture.border_clamp.formats.stencil_index8.gather_size_pot texture.border_clamp.formats.stencil_index8.gather_size_npot texture.border_clamp.unused_channels.stencil_index8 state_query.internal_format.renderbuffer.stencil_index8_samples state_query.internal_format.texture_2d_multisample.stencil_index8_samples state_query.internal_format.texture_2d_multisample_array.stencil_index8_samples For now, leave it turned off in desktop GL. There are still bugs with stencil array textures, and I suspect there are multisampling bugs too. v2: Don't trip the assert. Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c | 5 ++--- src/mesa/drivers/dri/i965/brw_surface_formats.c | 1 + src/mesa/drivers/dri/i965/intel_extensions.c | 2 ++ src/mesa/main/texformat.c | 5 +++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c index 5b0c2e9..aefa7b5 100644 --- a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c +++ b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c @@ -435,8 +435,7 @@ brw_meta_stencil_blit(struct brw_context *brw, * returns a valid format. When we properly support the extension, we * should remove this. */ - assert(ctx->Extensions.ARB_texture_stencil8 == false); - ctx->Extensions.ARB_texture_stencil8 = true; + bool save_stencil8_enable = ctx->Extensions.ARB_texture_stencil8; drawFb = ctx->Driver.NewFramebuffer(ctx, 0xDEADBEEF); if (drawFb == NULL) { @@ -479,7 +478,7 @@ brw_meta_stencil_blit(struct brw_context *brw, _mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4); error: - ctx->Extensions.ARB_texture_stencil8 = false; + ctx->Extensions.ARB_texture_stencil8 = save_stencil8_enable; _mesa_meta_fb_tex_blit_end(ctx, target, &blit); _mesa_meta_end(ctx); diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c index 3c0b23b..a1160d9 100644 --- a/src/mesa/drivers/dri/i965/brw_surface_formats.c +++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c @@ -718,6 +718,7 @@ brw_init_surface_formats(struct brw_context *brw) ctx->TextureFormatSupported[MESA_FORMAT_Z24_UNORM_X8_UINT] = true; ctx->TextureFormatSupported[MESA_FORMAT_Z_FLOAT32] = true; ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_S8X24_UINT] = true; + ctx->TextureFormatSupported[MESA_FORMAT_S_UINT8] = true; /* Benchmarking shows that Z16 is slower than Z24, so there's no reason to * use it unless you're under memory (not memory bandwidth) pressure. diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c index 60ac124..8d9dab5 100644 --- a/src/mesa/drivers/dri/i965/intel_extensions.c +++ b/src/mesa/drivers/dri/i965/intel_extensions.c @@ -367,6 +367,8 @@ intelInitExtensions(struct gl_context *ctx) if (brw->gen >= 8) { ctx->Extensions.ARB_stencil_texturing = true; + if (ctx->API == API_OPENGLES2) + ctx->Extensions.ARB_texture_stencil8 = true; } if (brw->gen >= 9) { diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 419fd78..be2581b 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -765,6 +765,11 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; + case GL_STENCIL_INDEX: + case GL_STENCIL_INDEX8: + RETURN_IF_SUPPORTED(MESA_FORMAT_S_UINT8); + break; + default: /* For non-generic compressed format we assert two things: * -- 2.7.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev