[Mesa-dev] [PATCH] mesa: add GL_OES_texture_border_clamp support

Ilia Mirkin imirkin at alum.mit.edu
Tue Feb 16 16:44:12 UTC 2016


On Tue, Feb 16, 2016 at 11:24 AM, Ian Romanick <idr at freedesktop.org> wrote:
> On 02/15/2016 04:14 PM, Ilia Mirkin wrote:
>> Only minor differences to the existing ARB_texture_border_clamp support.
>>
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>
>> I get 53 failures (and 548 passes) in the dEQP tests, they appear to expect
>> all-red for depth texturing while gallium apparently returns gray. Haven't
>> figured out if it's the fault of the tests or the implementation.
>
> This is a known change from compatibility profile desktop OpenGL to
> GLES3 and core profile.  In compatibility, the default color format for
> depth textures is GL_INTENSITY.  Since GL_INTENSITY is removed or
> deprecated everywhere else, the color format for depth textures is GL_RED.
>
> See commit 9db2098d.

Wow, thanks for that! Should hopefully be an easy fix then.

>
>> (I also had to claim it was the EXT version of the ext, and hack up dEQP to
>> pull the *OES functions instead of the *EXT ones.)
>
> I looked at the two specs.  Doing
>
>    diff -wud gles/extensions/EXT/EXT_texture_border_clamp.txt <(sed
> 's/OES/EXT/g' < gles/extensions/OES/OES_texture_border_clamp.txt)
>
> showed basically no differences.  Maybe we should just expose both?  I
> could probably also be convinced that we should expose the NV extension.
>  The textual differences were quite a bit larger, but that appears to be
> because the EXT and OES extensions add interactions with GLES 3.0.

Happy to do whatever. I was under the impression that only OES exts
should be exposed, but like you said, it's identical to the EXT one.
Let me know.

>
> I haven't check the piglit list yet... are there any piglits for the OES
> version (or just dEQP)?

Just dEQP. I wasn't planning on writing piglit tests.

>
>>  docs/GL3.txt                            |  2 +-
>>  src/mapi/glapi/gen/es_EXT.xml           | 58 ++++++++++++++++++++++++++++++++-
>>  src/mesa/main/extensions_table.h        |  1 +
>>  src/mesa/main/samplerobj.c              |  6 ++--
>>  src/mesa/main/tests/dispatch_sanity.cpp | 10 ++++++
>>  src/mesa/main/texparam.c                | 11 ++++---
>>  6 files changed, 80 insertions(+), 8 deletions(-)
>>
>> diff --git a/docs/GL3.txt b/docs/GL3.txt
>> index ea7ceef..0957247 100644
>> --- a/docs/GL3.txt
>> +++ b/docs/GL3.txt
>> @@ -253,7 +253,7 @@ GLES3.2, GLSL ES 3.2
>>    GL_OES_shader_io_blocks                              not started (based on parts of GLSL 1.50, which is done)
>>    GL_OES_shader_multisample_interpolation              not started (based on parts of GL_ARB_gpu_shader5, which is done)
>>    GL_OES_tessellation_shader                           not started (based on GL_ARB_tessellation_shader, which is done for some drivers)
>> -  GL_OES_texture_border_clamp                          not started (based on GL_ARB_texture_border_clamp, which is done)
>> +  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)
>> diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml
>> index 86df980..fb0ef05 100644
>> --- a/src/mapi/glapi/gen/es_EXT.xml
>> +++ b/src/mapi/glapi/gen/es_EXT.xml
>> @@ -982,5 +982,61 @@
>>          <param name="texture" type="GLuint"/>
>>          <param name="level" type="GLint"/>
>>      </function>
>> -  </category>
>> +</category>
>> +
>> +<category name="GL_OES_texture_border_clamp" number="215">
>> +
>> +    <enum name="TEXTURE_BORDER_COLOR_OES" value ="0x1004"/>
>> +    <enum name="CLAMP_TO_BORDER_OES"      value="0x812D"/>
>> +
>> +    <function name="TexParameterIivOES" es2="3.0" alias="TexParameterIiv">
>> +        <param name="target" type="GLenum"/>
>> +        <param name="pname"  type="GLenum"/>
>> +        <param name="params" type="const GLint *"/>
>> +    </function>
>> +
>> +    <function name="TexParameterIuivOES" es2="3.0" alias="TexParameterIuiv">
>> +        <param name="target" type="GLenum"/>
>> +        <param name="pname"  type="GLenum"/>
>> +        <param name="params" type="const GLuint *"/>
>> +    </function>
>> +
>> +    <function name="GetTexParameterIivOES" es2="3.0" alias="GetTexParameterIiv">
>> +        <param name="target" type="GLenum"/>
>> +        <param name="pname"  type="GLenum"/>
>> +        <param name="params" type="GLint *"/>
>> +    </function>
>> +
>> +    <function name="GetTexParameterIuivOES" es2="3.0" alias="GetTexParameterIuiv">
>> +        <param name="target" type="GLenum"/>
>> +        <param name="pname"  type="GLenum"/>
>> +        <param name="params" type="GLuint *"/>
>> +    </function>
>> +
>> +    <function name="SamplerParameterIivOES" es2="3.0" alias="SamplerParameterIiv">
>> +      <param name="sampler" type="GLuint"/>
>> +      <param name="pname" type="GLenum"/>
>> +      <param name="params" type="const GLint *"/>
>> +    </function>
>> +
>> +    <function name="SamplerParameterIuivOES" es2="3.0" alias="SamplerParameterIuiv">
>> +      <param name="sampler" type="GLuint"/>
>> +      <param name="pname" type="GLenum"/>
>> +      <param name="params" type="const GLuint *"/>
>> +    </function>
>> +
>> +    <function name="GetSamplerParameterIivOES" es2="3.0" alias="GetSamplerParameterIiv">
>> +      <param name="sampler" type="GLuint"/>
>> +      <param name="pname" type="GLenum"/>
>> +      <param name="params" type="GLint *"/>
>> +    </function>
>> +
>> +    <function name="GetSamplerParameterIuivOES" es2="3.0" alias="GetSamplerParameterIuiv">
>> +      <param name="sampler" type="GLuint"/>
>> +      <param name="pname" type="GLenum"/>
>> +      <param name="params" type="GLfloat *"/>
>> +    </function>
>> +
>> +</category>
>> +
>>  </OpenGLAPI>
>> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
>> index d1e3a99..b07d635 100644
>> --- a/src/mesa/main/extensions_table.h
>> +++ b/src/mesa/main/extensions_table.h
>> @@ -333,6 +333,7 @@ EXT(OES_stencil8                            , dummy_true
>>  EXT(OES_stencil_wrap                        , dummy_true                             ,  x ,  x , ES1,  x , 2002)
>>  EXT(OES_surfaceless_context                 , dummy_true                             ,  x ,  x , ES1, ES2, 2012)
>>  EXT(OES_texture_3D                          , dummy_true                             ,  x ,  x ,  x , ES2, 2005)
>> +EXT(OES_texture_border_clamp                , ARB_texture_border_clamp               ,  x ,  x ,  x , ES2, 2014)
>>  EXT(OES_texture_cube_map                    , ARB_texture_cube_map                   ,  x ,  x , ES1,  x , 2007)
>>  EXT(OES_texture_env_crossbar                , ARB_texture_env_crossbar               ,  x ,  x , ES1,  x , 2005)
>>  EXT(OES_texture_float                       , OES_texture_float                      ,  x ,  x ,  x , ES2, 2005)
>> diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c
>> index fe15508..ca366d9 100644
>> --- a/src/mesa/main/samplerobj.c
>> +++ b/src/mesa/main/samplerobj.c
>> @@ -1518,7 +1518,8 @@ _mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params)
>>
>>     sampObj = _mesa_lookup_samplerobj(ctx, sampler);
>>     if (!sampObj) {
>> -      _mesa_error(ctx, GL_INVALID_VALUE,
>> +      _mesa_error(ctx, (_mesa_is_gles(ctx) ?
>> +                        GL_INVALID_OPERATION : GL_INVALID_VALUE),
>>                    "glGetSamplerParameterIiv(sampler %u)",
>>                    sampler);
>>        return;
>> @@ -1593,7 +1594,8 @@ _mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params)
>>
>>     sampObj = _mesa_lookup_samplerobj(ctx, sampler);
>>     if (!sampObj) {
>> -      _mesa_error(ctx, GL_INVALID_VALUE,
>> +      _mesa_error(ctx, (_mesa_is_gles(ctx) ?
>> +                        GL_INVALID_OPERATION : GL_INVALID_VALUE),
>>                    "glGetSamplerParameterIuiv(sampler %u)",
>>                    sampler);
>>        return;
>> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
>> index e641296..24e3d18 100644
>> --- a/src/mesa/main/tests/dispatch_sanity.cpp
>> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
>> @@ -2436,6 +2436,16 @@ const struct function gles3_functions_possible[] = {
>>     { "glGetFragDataIndexEXT", 30, -1 },
>>     { "glBindFragDataLocationEXT", 30, -1 },
>>
>> +   /* GL_OES_texture_border_clamp */
>> +   { "glTexParameterIivOES", 30, -1 },
>> +   { "glTexParameterIuivOES", 30, -1 },
>> +   { "glGetTexParameterIivOES", 30, -1 },
>> +   { "glGetTexParameterIuivOES", 30, -1 },
>> +   { "glSamplerParameterIivOES", 30, -1 },
>> +   { "glSamplerParameterIuivOES", 30, -1 },
>> +   { "glGetSamplerParameterIivOES", 30, -1 },
>> +   { "glGetSamplerParameterIuivOES", 30, -1 },
>> +
>>     { NULL, 0, -1 }
>>  };
>>
>> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
>> index 260b3c3..20770a7 100644
>> --- a/src/mesa/main/texparam.c
>> +++ b/src/mesa/main/texparam.c
>> @@ -72,7 +72,7 @@ validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap)
>>        break;
>>
>>     case GL_CLAMP_TO_BORDER:
>> -      supported = is_desktop_gl && e->ARB_texture_border_clamp
>> +      supported = ctx->API != API_OPENGLES && e->ARB_texture_border_clamp
>>           && (target != GL_TEXTURE_EXTERNAL_OES);
>>        break;
>>
>> @@ -717,7 +717,8 @@ set_tex_parameterf(struct gl_context *ctx,
>>        break;
>>
>>     case GL_TEXTURE_BORDER_COLOR:
>> -      if (!_mesa_is_desktop_gl(ctx))
>> +      if (ctx->API == API_OPENGLES ||
>> +          !ctx->Extensions.ARB_texture_border_clamp)
>>           goto invalid_pname;
>>
>>        if (!target_allows_setting_sampler_parameters(texObj->Target))
>> @@ -1735,7 +1736,8 @@ get_tex_parameterfv(struct gl_context *ctx,
>>           *params = ENUM_TO_FLOAT(obj->Sampler.WrapR);
>>           break;
>>        case GL_TEXTURE_BORDER_COLOR:
>> -         if (!_mesa_is_desktop_gl(ctx))
>> +         if (ctx->API == API_OPENGLES ||
>> +             !ctx->Extensions.ARB_texture_border_clamp)
>>              goto invalid_pname;
>>
>>           if (ctx->NewState & (_NEW_BUFFERS | _NEW_FRAG_CLAMP))
>> @@ -1969,7 +1971,8 @@ get_tex_parameteriv(struct gl_context *ctx,
>>           *params = (GLint) obj->Sampler.WrapR;
>>           break;
>>        case GL_TEXTURE_BORDER_COLOR:
>> -         if (!_mesa_is_desktop_gl(ctx))
>> +         if (ctx->API == API_OPENGLES ||
>> +             !ctx->Extensions.ARB_texture_border_clamp)
>>              goto invalid_pname;
>>
>>           {
>>
>


More information about the mesa-dev mailing list