[Mesa-dev] [PATCH 2/4] mesa: add support for GL_EXT_polygon_offset_clamp

Kenneth Graunke kenneth at whitecape.org
Thu Jan 1 01:44:40 PST 2015


On Wednesday, December 31, 2014 02:38:12 AM Ilia Mirkin wrote:
> Nothing enables the extension yet, but the values are now available.
> The spec calls for it to only be exposed for GL 3.3+, which is core-only
> in mesa. Restrict it as such so that drivers enabling the extension
> don't end up accidentally exposing the function in compat contexts.
> 
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/mesa/drivers/dri/nouveau/nouveau_state.c |  2 +-
>  src/mesa/drivers/dri/r200/r200_state.c       |  2 +-
>  src/mesa/drivers/dri/radeon/radeon_state.c   |  2 +-
>  src/mesa/main/dd.h                           |  2 +-
>  src/mesa/main/extensions.c                   |  1 +
>  src/mesa/main/get.c                          |  1 +
>  src/mesa/main/get_hash_params.py             |  4 ++++
>  src/mesa/main/mtypes.h                       |  2 ++
>  src/mesa/main/polygon.c                      | 28 ++++++++++++++++++++++++++--
>  9 files changed, 38 insertions(+), 6 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c b/src/mesa/drivers/dri/nouveau/nouveau_state.c
> index db4915f..3aad10e 100644
> --- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
> +++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
> @@ -319,7 +319,7 @@ nouveau_polygon_mode(struct gl_context *ctx, GLenum face, GLenum mode)
>  }
>  
>  static void
> -nouveau_polygon_offset(struct gl_context *ctx, GLfloat factor, GLfloat units)
> +nouveau_polygon_offset(struct gl_context *ctx, GLfloat factor, GLfloat units, GLfloat clamp)
>  {
>  	context_dirty(ctx, POLYGON_OFFSET);
>  }
> diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
> index 2ad8439..930ead8 100644
> --- a/src/mesa/drivers/dri/r200/r200_state.c
> +++ b/src/mesa/drivers/dri/r200/r200_state.c
> @@ -712,7 +712,7 @@ static void r200ColorMask( struct gl_context *ctx,
>   */
>  
>  static void r200PolygonOffset( struct gl_context *ctx,
> -			       GLfloat factor, GLfloat units )
> +			       GLfloat factor, GLfloat units, GLfloat clamp )
>  {
>     r200ContextPtr rmesa = R200_CONTEXT(ctx);
>     const GLfloat depthScale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
> diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c
> index 0f4d84f..726b06d 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_state.c
> +++ b/src/mesa/drivers/dri/radeon/radeon_state.c
> @@ -520,7 +520,7 @@ static void radeonColorMask( struct gl_context *ctx,
>   */
>  
>  static void radeonPolygonOffset( struct gl_context *ctx,
> -				 GLfloat factor, GLfloat units )
> +				 GLfloat factor, GLfloat units, GLfloat clamp )
>  {
>     r100ContextPtr rmesa = R100_CONTEXT(ctx);
>     const GLfloat depthScale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
> diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
> index 2f40915..6ba0959 100644
> --- a/src/mesa/main/dd.h
> +++ b/src/mesa/main/dd.h
> @@ -563,7 +563,7 @@ struct dd_function_table {
>     /** Select a polygon rasterization mode */
>     void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode);
>     /** Set the scale and units used to calculate depth values */
> -   void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units);
> +   void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units, GLfloat clamp);
>     /** Set the polygon stippling pattern */
>     void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask );
>     /* Specifies the current buffer for reading */
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index 0df04c2..bffa6b2 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -231,6 +231,7 @@ static const struct extension extension_table[] = {
>     { "GL_EXT_pixel_buffer_object",                 o(EXT_pixel_buffer_object),                 GL,             2004 },
>     { "GL_EXT_point_parameters",                    o(EXT_point_parameters),                    GLL,            1997 },
>     { "GL_EXT_polygon_offset",                      o(dummy_true),                              GLL,            1995 },
> +   { "GL_EXT_polygon_offset_clamp",                o(EXT_polygon_offset_clamp),                GLC,            2014 },
>     { "GL_EXT_provoking_vertex",                    o(EXT_provoking_vertex),                    GL,             2009 },
>     { "GL_EXT_rescale_normal",                      o(dummy_true),                              GLL,            1997 },
>     { "GL_EXT_secondary_color",                     o(dummy_true),                              GLL,            1999 },
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 6091efc..3f9d745 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -392,6 +392,7 @@ EXTRA_EXT2(ARB_transform_feedback3, ARB_gpu_shader5);
>  EXTRA_EXT(INTEL_performance_query);
>  EXTRA_EXT(ARB_explicit_uniform_location);
>  EXTRA_EXT(ARB_clip_control);
> +EXTRA_EXT(EXT_polygon_offset_clamp);
>  
>  static const int
>  extra_ARB_color_buffer_float_or_glcore[] = {
> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> index 09a61ac..299ad24 100644
> --- a/src/mesa/main/get_hash_params.py
> +++ b/src/mesa/main/get_hash_params.py
> @@ -811,6 +811,10 @@ descriptor=[
>    [ "VIEWPORT_BOUNDS_RANGE", "CONTEXT_FLOAT2(Const.ViewportBounds), extra_ARB_viewport_array" ],
>    [ "LAYER_PROVOKING_VERTEX", "CONTEXT_ENUM(Light.ProvokingVertex), extra_ARB_viewport_array" ],
>    [ "VIEWPORT_INDEX_PROVOKING_VERTEX", "CONTEXT_ENUM(Light.ProvokingVertex), extra_ARB_viewport_array" ],
> +
> +# GL_EXT_polygon_offset_clamp
> +  [ "POLYGON_OFFSET_CLAMP_EXT", "CONTEXT_FLOAT(Polygon.OffsetUnits), extra_EXT_polygon_offset_clamp" ],
> +
>  ]}
>  
>  ]

You want CONTEXT_FLOAT(Polygon.OffsetClamp) here, not OffsetUnits.

With that fixed, patches 1-3 are:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

Patch 4 looks fine too, but I haven't verified that every Gallium driver
exposing core profile actually has the feature wired up.

There are a couple of existing PolygonOffset piglit tests - perhaps those
could be extended to handle this?  In the meantime, I dug out some of Intel's
tests, hacked both the tests and Mesa to let me run them in core profile,
and they all pass.  So I suspect this is working fine.

Nice to finally have this wired up :)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150101/d9908541/attachment.sig>


More information about the mesa-dev mailing list