On Thu, Jan 1, 2015 at 4:44 AM, Kenneth Graunke <kenn...@whitecape.org> wrote: > 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 <imir...@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 <kenn...@whitecape.org>
Thanks! I actually caught that, and a few other things last night... updated patches at https://github.com/imirkin/mesa/commits/master Things like dispatch_test failing, a missing return in the "is this supported" check. (I think that's it.) > > Patch 4 looks fine too, but I haven't verified that every Gallium driver > exposing core profile actually has the feature wired up. grep shows that they all seem to do it... perhaps I missed one. > > 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. Those tests are way too complex for me to comprehend... I have an idea for something relatively simple -- draw a sloped quad, and a flat one strictly above it, then use clamps and a high slope factor to control whether the sloped quad appears above or below the flat one. That seems like it could work, right? -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev