[Mesa-dev] [PATCH v2] mesa: add GL_OES_texture_stencil8 support

Eduardo Lima Mitev elima at igalia.com
Fri Feb 19 10:33:52 UTC 2016


Patch needs rebase, but see a comment below.

On 02/18/2016 02:27 AM, Ilia Mirkin wrote:
> It's basically the same thing as GL_ARB_texture_stencil8 except that
> glCopyTexImage isn't supported, so add STENCIL_INDEX to the list of
> invalid GLES formats for glCopyTexImage.
> 
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
> 
> v1 -> v2: add checking to es3_error_check_format_and_type.
> 
> I only get 2 dEQP test failures, and they're both related to the, I believe incorrect, computation of baseFormat based on the texture's/rb's real internal format instead of the "real" base format it was created with.
> 
>  docs/GL3.txt                     | 2 +-
>  src/mesa/main/extensions_table.h | 1 +
>  src/mesa/main/glformats.c        | 7 +++++++
>  src/mesa/main/teximage.c         | 2 ++
>  4 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/docs/GL3.txt b/docs/GL3.txt
> index 3c4db06..26847b9 100644
> --- a/docs/GL3.txt
> +++ b/docs/GL3.txt
> @@ -256,7 +256,7 @@ GLES3.2, GLSL ES 3.2
>    GL_OES_texture_border_clamp                          DONE (all drivers)
>    GL_OES_texture_buffer                                not started (based on GL_ARB_texture_buffer_object, GL_ARB_texture_buffer_range, and GL_ARB_texture_buffer_object_rgb32 that are all done)
>    GL_OES_texture_cube_map_array                        not started (based on GL_ARB_texture_cube_map_array, which is done for all drivers)
> -  GL_OES_texture_stencil8                              not started (based on GL_ARB_texture_stencil8, which is done for some drivers)
> +  GL_OES_texture_stencil8                              DONE (all drivers that support GL_ARB_texture_stencil8)
>    GL_OES_texture_storage_multisample_2d_array          DONE (all drivers that support GL_ARB_texture_multisample)
>  
>  More info about these features and the work involved can be found at
> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
> index c94928b..3a90bc9 100644
> --- a/src/mesa/main/extensions_table.h
> +++ b/src/mesa/main/extensions_table.h
> @@ -345,6 +345,7 @@ EXT(OES_texture_half_float                  , OES_texture_half_float
>  EXT(OES_texture_half_float_linear           , OES_texture_half_float_linear          ,  x ,  x ,  x , ES2, 2005)
>  EXT(OES_texture_mirrored_repeat             , dummy_true                             ,  x ,  x , ES1,  x , 2005)
>  EXT(OES_texture_npot                        , ARB_texture_non_power_of_two           ,  x ,  x , ES1, ES2, 2005)
> +EXT(OES_texture_stencil8                    , ARB_texture_stencil8                   ,  x ,  x ,  x ,  30, 2014)
>  EXT(OES_texture_storage_multisample_2d_array, ARB_texture_multisample                ,  x ,  x , ES1,  31, 2014)
>  EXT(OES_texture_view                        , ARB_texture_view                       ,  x ,  x ,  x ,  31, 2014)
>  EXT(OES_vertex_array_object                 , dummy_true                             ,  x ,  x , ES1, ES2, 2010)
> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
> index f528444..2660ecc 100644
> --- a/src/mesa/main/glformats.c
> +++ b/src/mesa/main/glformats.c
> @@ -3153,6 +3153,13 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
>        }
>        break;
>  
> +   case GL_STENCIL_INDEX:
> +      if (_mesa_has_OES_texture_stencil8(ctx) &&
> +          type == GL_UNSIGNED_BYTE &&
> +          internalFormat == GL_STENCIL_INDEX8)
> +         break;
> +      return GL_INVALID_OPERATION;
> +

Nitpicking, I would prefer the logic inverted, as most of cases in that
function. IMHO, the error condition looks more explicit if one does:

case GL_STENCIL_INDEX:
   if (!_mesa_has_OES_texture_stencil8(ctx) ||
       type != GL_UNSIGNED_BYTE ||
       internalFormat != GL_STENCIL_INDEX8) {
          return GL_INVALID_OPERATION;
   }
   break;

But feel free to ignore this.

After rebasing, patch is:

Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>

>     case GL_ALPHA:
>     case GL_LUMINANCE:
>     case GL_LUMINANCE_ALPHA:
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 57765d7..8a4c628 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -2285,8 +2285,10 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
>        }
>        if (baseFormat == GL_DEPTH_COMPONENT ||
>            baseFormat == GL_DEPTH_STENCIL ||
> +          baseFormat == GL_STENCIL_INDEX ||
>            rb_base_format == GL_DEPTH_COMPONENT ||
>            rb_base_format == GL_DEPTH_STENCIL ||
> +          rb_base_format == GL_STENCIL_INDEX ||
>            ((baseFormat == GL_LUMINANCE_ALPHA ||
>              baseFormat == GL_ALPHA) &&
>             rb_base_format != GL_RGBA) ||
> 



More information about the mesa-dev mailing list