[Mesa-dev] [PATCH 2/8] mesa: Add new functions and enums required by GL_ARB_sample_shading

Kenneth Graunke kenneth at whitecape.org
Tue Oct 15 20:03:22 CEST 2013


On 10/14/2013 10:12 AM, Anuj Phogat wrote:
> New functions added by GL_ARB_sample_shading:
> glMinSampleShadingARB()
> 
> New enums:
> GL_SAMPLE_SHADING_ARB
> GL_MIN_SAMPLE_SHADING_VALUE_ARB
> 
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
>  src/mapi/glapi/gen/ARB_sample_shading.xml | 19 +++++++++++++++++++
>  src/mapi/glapi/gen/GL3x.xml               |  5 +++++
>  src/mapi/glapi/gen/gl_API.xml             |  2 +-
>  src/mesa/main/enable.c                    | 16 ++++++++++++++++
>  src/mesa/main/get.c                       |  4 ++++
>  src/mesa/main/get_hash_params.py          |  3 +++
>  src/mesa/main/mtypes.h                    |  2 ++
>  src/mesa/main/multisample.c               | 13 +++++++++++++
>  src/mesa/main/multisample.h               |  2 ++
>  src/mesa/main/tests/dispatch_sanity.cpp   |  4 ++--
>  10 files changed, 67 insertions(+), 3 deletions(-)
>  create mode 100644 src/mapi/glapi/gen/ARB_sample_shading.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/GL3x.xml b/src/mapi/glapi/gen/GL3x.xml
> index 5078f7b..4ec4749 100644
> --- a/src/mapi/glapi/gen/GL3x.xml
> +++ b/src/mapi/glapi/gen/GL3x.xml
> @@ -630,6 +630,11 @@
>      <param name="divisor" type="GLuint"/>
>    </function>

I think you may also want to add the non-ARB versions:

<enum name="SAMPLE_SHADING"                          value="0x8C36"/>
<enum name="MIN_SAMPLE_SHADING_VALUE"                value="0x8C37"/>

(at least, I see other places where people added both)

Jordan also created a GL4x.xml for 4.x functions when he added this back
in November (but Ian NAK'd his patches).  If you're interested, they're
available here:

http://cgit.freedesktop.org/~kwg/mesa/commit/?h=sampleshading&id=0516346f26acb7108b9ff39b31083729912fdd4c
http://cgit.freedesktop.org/~kwg/mesa/commit/?h=sampleshading&id=7586cde6a7ca482dc50891d90e244fadd04fac93

> +  <function name="MinSampleShading" offset="assign">
> +    <param name="value" type="GLclampf"/>
> +  </function>
> +
> +
>  </category>
>  
>  </OpenGLAPI>
> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
> index 48fce36..8919852 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 -->
> diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
> index 5e2fd80..83c59ee 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*/

Spaces around /* and */ would be nice.

> +      case GL_SAMPLE_SHADING_ARB:

I'd drop the _ARB suffix.  I'd like us to just use core names when they
exist.  (Both pnames are the same value.)

> +         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_ARB:

Ditto (_ARB).

> +         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..c52133e 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -894,6 +894,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
>           _mesa_problem(ctx, "driver doesn't implement GetTimestamp");
>        }
>        break;
> +   /* GL_ARB_sample_shading */
> +   case GL_MIN_SAMPLE_SHADING_VALUE_ARB:

Ditto (_ARB).

> +         v->value_float = ctx->Multisample.MinSampleShadingValue;
> +      break;
>     }
>  }
>  
> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> index 9c54af0..0d7effb 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), NO_EXTRA" ],
> +
>  # 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 053514d..5520e86 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..892525e 100644
> --- a/src/mesa/main/multisample.c
> +++ b/src/mesa/main/multisample.c
> @@ -119,6 +119,19 @@ _mesa_SampleMaski(GLuint index, GLbitfield mask)
>     ctx->Multisample.SampleMaskValue = mask;
>  }
>  
> +/**
> + * Called via glMinSampleShadingARB
> + */
> +void GLAPIENTRY
> +_mesa_MinSampleShading(GLclampf value)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   FLUSH_VERTICES(ctx, 0);
> +
> +   ctx->Multisample.MinSampleShadingValue = (GLfloat) CLAMP(value, 0.0, 1.0);

I don't think you need this cast - GLclampf and GLfloat are both
typedefs for "float," so this ought to be the right type already.

> +   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..19a77db 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 },
>  // { "glBlendEquationi", 40, -1 },                      // XXX: Add to xml
>  // { "glBlendEquationSeparatei", 40, -1 },              // XXX: Add to xml
>  // { "glBlendFunci", 40, -1 },                          // XXX: Add to xml
> @@ -603,7 +603,7 @@ const struct function gl_core_functions_possible[] = {
>     { "glBlendEquationSeparateiARB", 43, -1 },
>     { "glBlendFunciARB", 43, -1 },
>     { "glBlendFuncSeparateiARB", 43, -1 },
> -// { "glMinSampleShadingARB", 43, -1 },                 // XXX: Add to xml
> +   { "glMinSampleShadingARB", 43, -1 },
>  // { "glNamedStringARB", 43, -1 },                      // XXX: Add to xml
>  // { "glDeleteNamedStringARB", 43, -1 },                // XXX: Add to xml
>  // { "glCompileShaderIncludeARB", 43, -1 },             // XXX: Add to xml

Other than those minor comments, and Matt's feedback,

Patches 1-3 are:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list