[Mesa-dev] [PATCH V2 02/12] mesa: Add new functions and enums required by GL_ARB_sample_shading

Ian Romanick idr at freedesktop.org
Mon Oct 28 20:55:58 CET 2013


On 10/28/2013 10:54 AM, Anuj Phogat wrote:
> On Mon, Oct 28, 2013 at 10:29 AM, Ian Romanick <idr at freedesktop.org> wrote:
>> On 10/25/2013 04:44 PM, Anuj Phogat wrote:
>>> New functions added by GL_ARB_sample_shading:
>>> glMinSampleShadingARB()
>>>
>>> New enums:
>>> GL_SAMPLE_SHADING_ARB
>>> GL_MIN_SAMPLE_SHADING_VALUE_ARB
>>>
>>> V2: Update comments.
>>>     Create new GL4x.xml.
>>>     Remove redundant code in get.c.
>>>     Update the API_XML list in Makefile.am.
>>>     Add extra_gl40_ARB_sample_shading predicate to get.c.
>>>
>>> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
>>> Reviewed-by: Ken Graunke <kenneth at whitecape.org>
>>> ---
>>>  src/mapi/glapi/gen/ARB_sample_shading.xml | 19 +++++++++++++++++++
>>>  src/mapi/glapi/gen/GL4x.xml               | 21 +++++++++++++++++++++
>>>  src/mapi/glapi/gen/Makefile.am            |  4 +++-
>>>  src/mapi/glapi/gen/gl_API.xml             |  3 ++-
>>>  src/mesa/main/enable.c                    | 16 ++++++++++++++++
>>>  src/mesa/main/get.c                       |  8 ++++++++
>>>  src/mesa/main/get_hash_params.py          |  3 +++
>>>  src/mesa/main/mtypes.h                    |  2 ++
>>>  src/mesa/main/multisample.c               | 18 ++++++++++++++++++
>>>  src/mesa/main/multisample.h               |  2 ++
>>>  src/mesa/main/tests/dispatch_sanity.cpp   |  2 +-
>>>  11 files changed, 95 insertions(+), 3 deletions(-)
>>>  create mode 100644 src/mapi/glapi/gen/ARB_sample_shading.xml
>>>  create mode 100644 src/mapi/glapi/gen/GL4x.xml
>>>
>>> diff --git a/src/mapi/glapi/gen/ARB_sample_shading.xml b/src/mapi/glapi/gen/ARB_sample_shading.xml
>>> new file mode 100644
>>> index 0000000..a87a517
>>> --- /dev/null
>>> +++ b/src/mapi/glapi/gen/ARB_sample_shading.xml
>>> @@ -0,0 +1,19 @@
>>> +<?xml version="1.0"?>
>>> +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
>>> +
>>> +<!-- Note: no GLX protocol info yet. -->
>>> +
>>> +<OpenGLAPI>
>>> +
>>> +<category name="GL_ARB_sample_shading" number="70">
>>> +
>>> +   <enum name="SAMPLE_SHADING_ARB"                          value="0x8C36"/>
>>> +   <enum name="MIN_SAMPLE_SHADING_VALUE_ARB"                value="0x8C37"/>
>>> +
>>> +   <function name="MinSampleShadingARB" alias="MinSampleShading">
>>> +      <param name="value" type="GLclampf"/>
>>> +   </function>
>>> +
>>> +</category>
>>> +
>>> +</OpenGLAPI>
>>> diff --git a/src/mapi/glapi/gen/GL4x.xml b/src/mapi/glapi/gen/GL4x.xml
>>> new file mode 100644
>>> index 0000000..367741f
>>> --- /dev/null
>>> +++ b/src/mapi/glapi/gen/GL4x.xml
>>> @@ -0,0 +1,21 @@
>>> +<?xml version="1.0"?>
>>> +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
>>> +
>>> +<!-- Note: no GLX protocol info yet. -->
>>> +
>>> +<OpenGLAPI>
>>> +
>>> +<category name="4.0">
>>> +  <enum name="SAMPLE_SHADING"                          value="0x8C36"/>
>>> +  <enum name="MIN_SAMPLE_SHADING_VALUE"                value="0x8C37"/>
>>> +
>>> +  <function name="MinSampleShading" offset="assign">
>>> +    <param name="value" type="GLclampf"/>
>>> +  </function>
>>> +</category>
>>> +
>>> +<category name="4.3">
>>> +
>>> +</category>
>>> +
>>> +</OpenGLAPI>
>>> diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am
>>> index d71d5d2..b8d280c 100644
>>> --- a/src/mapi/glapi/gen/Makefile.am
>>> +++ b/src/mapi/glapi/gen/Makefile.am
>>> @@ -108,6 +108,7 @@ API_XML = \
>>>       ARB_invalidate_subdata.xml \
>>>       ARB_map_buffer_range.xml \
>>>       ARB_robustness.xml \
>>> +     ARB_sample_shading.xml \
>>>       ARB_sampler_objects.xml \
>>>       ARB_seamless_cube_map.xml \
>>>       ARB_sync.xml \
>>> @@ -142,7 +143,8 @@ API_XML = \
>>>       NV_primitive_restart.xml \
>>>       NV_texture_barrier.xml \
>>>       OES_EGL_image.xml \
>>> -     GL3x.xml
>>> +     GL3x.xml \
>>> +     GL4x.xml
>>>
>>>
>>>  COMMON = $(API_XML) \
>>> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
>>> index 48fce36..f0eea9b 100644
>>> --- a/src/mapi/glapi/gen/gl_API.xml
>>> +++ b/src/mapi/glapi/gen/gl_API.xml
>>> @@ -8187,7 +8187,7 @@
>>>  <xi:include href="ARB_draw_buffers_blend.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>  <xi:include href="AMD_draw_buffers_blend.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>
>>> -<!-- 70. GL_ARB_sample_shading -->
>>> +<xi:include href="ARB_sample_shading.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>  <xi:include href="ARB_texture_cube_map_array.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>  <xi:include href="ARB_texture_gather.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>  <!-- 73. GL_ARB_texture_query_lod -->
>>> @@ -13150,4 +13150,5 @@
>>>
>>>  <xi:include href="EXT_transform_feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>
>>> +<xi:include href="GL4x.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
>>>  </OpenGLAPI>
>>> diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
>>> index 5e2fd80..c9ccfd2 100644
>>> --- a/src/mesa/main/enable.c
>>> +++ b/src/mesa/main/enable.c
>>> @@ -802,6 +802,15 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
>>>           ctx->Multisample.SampleCoverageInvert = state;
>>>           break;
>>>
>>> +      /* GL_ARB_sample_shading */
>>> +      case GL_SAMPLE_SHADING:
>>> +         CHECK_EXTENSION(ARB_sample_shading, cap);
>>> +         if (ctx->Multisample.SampleShading == state)
>>> +            return;
>>> +         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
>>> +         ctx->Multisample.SampleShading = state;
>>> +         break;
>>> +
>>>        /* GL_IBM_rasterpos_clip */
>>>        case GL_RASTER_POSITION_UNCLIPPED_IBM:
>>>           if (ctx->API != API_OPENGL_COMPAT)
>>> @@ -1594,6 +1603,13 @@ _mesa_IsEnabled( GLenum cap )
>>>           CHECK_EXTENSION(ARB_texture_multisample);
>>>           return ctx->Multisample.SampleMask;
>>>
>>> +      /* ARB_sample_shading */
>>> +      case GL_SAMPLE_SHADING:
>>> +         if (!_mesa_is_desktop_gl(ctx))
>>> +            goto invalid_enum_error;
>>> +         CHECK_EXTENSION(ARB_sample_shading);
>>> +         return ctx->Multisample.SampleShading;
>>> +
>>>        default:
>>>           goto invalid_enum_error;
>>>     }
>>> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
>>> index 89b3bf0..9ad87c4 100644
>>> --- a/src/mesa/main/get.c
>>> +++ b/src/mesa/main/get.c
>>> @@ -131,6 +131,7 @@ enum value_extra {
>>>     EXTRA_VERSION_30,
>>>     EXTRA_VERSION_31,
>>>     EXTRA_VERSION_32,
>>> +   EXTRA_VERSION_40,
>>>     EXTRA_API_GL,
>>>     EXTRA_API_GL_CORE,
>>>     EXTRA_API_ES2,
>>> @@ -384,6 +385,7 @@ extra_NV_primitive_restart[] = {
>>>  static const int extra_version_30[] = { EXTRA_VERSION_30, EXTRA_END };
>>>  static const int extra_version_31[] = { EXTRA_VERSION_31, EXTRA_END };
>>>  static const int extra_version_32[] = { EXTRA_VERSION_32, EXTRA_END };
>>> +static const int extra_version_40[] = { EXTRA_VERSION_40, EXTRA_END };
>>>
>>>  static const int extra_gl30_es3[] = {
>>>      EXTRA_VERSION_30,
>>> @@ -403,6 +405,12 @@ static const int extra_gl32_ARB_geometry_shader4[] = {
>>>      EXTRA_END
>>>  };
>>>
>>> +static const int extra_gl40_ARB_sample_shading[] = {
>>> +   EXTRA_VERSION_40,
>>> +   EXT(ARB_sample_shading),
>>> +   EXTRA_END
>>> +};
>>> +
>>>  static const int
>>>  extra_ARB_vertex_program_api_es2[] = {
>>>     EXT(ARB_vertex_program),
>>> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
>>> index 9c54af0..2fe0615 100644
>>> --- a/src/mesa/main/get_hash_params.py
>>> +++ b/src/mesa/main/get_hash_params.py
>>> @@ -83,6 +83,9 @@ descriptor=[
>>>    [ "SAMPLE_BUFFERS_ARB", "BUFFER_INT(Visual.sampleBuffers), extra_new_buffers" ],
>>>    [ "SAMPLES_ARB", "BUFFER_INT(Visual.samples), extra_new_buffers" ],
>>>
>>> +# GL_ARB_sample_shading
>>> +  [ "MIN_SAMPLE_SHADING_VALUE_ARB", "CONTEXT_FLOAT(Multisample.MinSampleShadingValue), extra_gl40_ARB_sample_shading" ],
>>> +
>>>  # GL_SGIS_generate_mipmap
>>>    [ "GENERATE_MIPMAP_HINT_SGIS", "CONTEXT_ENUM(Hint.GenerateMipmap), NO_EXTRA" ],
>>>
>>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>>> index 67f1bf6..8306969 100644
>>> --- a/src/mesa/main/mtypes.h
>>> +++ b/src/mesa/main/mtypes.h
>>> @@ -872,6 +872,8 @@ struct gl_multisample_attrib
>>>     GLboolean SampleCoverage;
>>>     GLfloat SampleCoverageValue;
>>>     GLboolean SampleCoverageInvert;
>>> +   GLboolean SampleShading;
>>> +   GLfloat MinSampleShadingValue;
>>>
>>>     /* ARB_texture_multisample / GL3.2 additions */
>>>     GLboolean SampleMask;
>>> diff --git a/src/mesa/main/multisample.c b/src/mesa/main/multisample.c
>>> index bd97c50..9824c0e 100644
>>> --- a/src/mesa/main/multisample.c
>>> +++ b/src/mesa/main/multisample.c
>>> @@ -119,6 +119,24 @@ _mesa_SampleMaski(GLuint index, GLbitfield mask)
>>>     ctx->Multisample.SampleMaskValue = mask;
>>>  }
>>>
>>> +/**
>>> + * Called via glMinSampleShadingARB
>>> + */
>>> +void GLAPIENTRY
>>> +_mesa_MinSampleShading(GLclampf value)
>>> +{
>>> +   GET_CURRENT_CONTEXT(ctx);
>>> +
>>> +   if (!ctx->Extensions.ARB_sample_shading) {
>>> +      _mesa_error(ctx, GL_INVALID_OPERATION, "glMinSampleShading");
>>> +      return;
>>> +   }
>>> +
>>> +   FLUSH_VERTICES(ctx, 0);
>>> +
>>> +   ctx->Multisample.MinSampleShadingValue = CLAMP(value, 0.0, 1.0);
>>> +   ctx->NewState |= _NEW_MULTISAMPLE;
>>> +}
>>>
>>>  /**
>>>   * Helper for checking a requested sample count against the limit
>>> diff --git a/src/mesa/main/multisample.h b/src/mesa/main/multisample.h
>>> index 66848d2..7441d3e 100644
>>> --- a/src/mesa/main/multisample.h
>>> +++ b/src/mesa/main/multisample.h
>>> @@ -44,6 +44,8 @@ _mesa_GetMultisamplefv(GLenum pname, GLuint index, GLfloat* val);
>>>  extern void GLAPIENTRY
>>>  _mesa_SampleMaski(GLuint index, GLbitfield mask);
>>>
>>> +extern void GLAPIENTRY
>>> +_mesa_MinSampleShading(GLclampf value);
>>>
>>>  extern GLenum
>>>  _mesa_check_sample_count(struct gl_context *ctx, GLenum target,
>>> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
>>> index 244173a..771efd9 100644
>>> --- a/src/mesa/main/tests/dispatch_sanity.cpp
>>> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
>>> @@ -542,7 +542,7 @@ const struct function gl_core_functions_possible[] = {
>>>     { "glVertexAttribDivisor", 33, -1 },
>>>
>>>     /* GL 4.0 */
>>> -// { "glMinSampleShading", 40, -1 },                    // XXX: Add to xml
>>> +// { "glMinSampleShadingARB", 40, -1 },                 // XXX: Add to xml
>>>  // { "glBlendEquationi", 40, -1 },                      // XXX: Add to xml
>>>  // { "glBlendEquationSeparatei", 40, -1 },              // XXX: Add to xml
>>>  // { "glBlendFunci", 40, -1 },                          // XXX: Add to xml
>>>
>>
>> Pretty sure this isn't correct... or the feedback I give you in v1.  Did
>> you actually run 'make check' successfully?
> Sorry, I misunderstood your comment in v1. and I didn't run make check :(.
> I'l make the hunk look like:
>     /* GL 4.0 */
> -// { "glMinSampleShading", 40, -1 },                     // XXX: Add to xml
> +   { "glMinSampleShading", 40, -1 },                    // XXX: Add to xml
> 

And uncomment the (existing) line for glMinSampleShadingARB. :)



More information about the mesa-dev mailing list