This patch is Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
On 09/14/2014 10:07 AM, mathias.froehl...@gmx.net wrote: > From: Mathias Froehlich <mathias.froehl...@web.de> > > Factor out some functions that will get additional callers > with the implementation of NV_depth_buffer_float. > > Signed-off-by: Mathias Froehlich <mathias.froehl...@web.de> > --- > src/mesa/main/attrib.c | 2 +- > src/mesa/main/depth.c | 66 > ++++++++++++++++++++++++++++++------------------ > src/mesa/main/viewport.c | 64 +++++++++++++++++++++++++++------------------- > src/mesa/main/viewport.h | 2 +- > 4 files changed, 82 insertions(+), 52 deletions(-) > > diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c > index 2e289b6..97115a1 100644 > --- a/src/mesa/main/attrib.c > +++ b/src/mesa/main/attrib.c > @@ -1364,7 +1364,7 @@ _mesa_PopAttrib(void) > for (i = 0; i < ctx->Const.MaxViewports; i++) { > _mesa_set_viewport(ctx, i, vp[i].X, vp[i].Y, vp[i].Width, > vp[i].Height); > - _mesa_set_depth_range(ctx, i, vp[i].Near, vp[i].Far); > + _mesa_set_depth_range(ctx, i, vp[i].Near, vp[i].Far, > false); > } > } > break; > diff --git a/src/mesa/main/depth.c b/src/mesa/main/depth.c > index 29851ec..8ae3cb6 100644 > --- a/src/mesa/main/depth.c > +++ b/src/mesa/main/depth.c > @@ -32,6 +32,44 @@ > #include "mtypes.h" > > > +static void > +set_clear_depth( struct gl_context *ctx, const char* fcn, > + GLdouble depth, bool clamp ) > +{ > + if (MESA_VERBOSE & VERBOSE_API) > + _mesa_debug(ctx, "%s(%f)\n", fcn, depth); > + > + if (clamp) > + depth = CLAMP( depth, 0.0, 1.0 ); > + > + ctx->Depth.Clear = depth; > +} > + > +static void > +set_depth_bounds( struct gl_context *ctx, const char* fcn, > + GLdouble zmin, GLdouble zmax, bool clamp ) > +{ > + if (MESA_VERBOSE & VERBOSE_API) > + _mesa_debug(ctx, "%s(%f, %f)\n", fcn, zmin, zmax); > + > + if (zmin > zmax) { > + _mesa_error(ctx, GL_INVALID_VALUE, "%s(zmin > zmax)", fcn); > + return; > + } > + > + if (clamp) { > + zmin = CLAMP(zmin, 0.0, 1.0); > + zmax = CLAMP(zmax, 0.0, 1.0); > + } > + > + if (ctx->Depth.BoundsMin == zmin && ctx->Depth.BoundsMax == zmax) > + return; > + > + FLUSH_VERTICES(ctx, _NEW_DEPTH); > + ctx->Depth.BoundsMin = (GLfloat) zmin; > + ctx->Depth.BoundsMax = (GLfloat) zmax; > +} > + > /**********************************************************************/ > /***** API Functions *****/ > /**********************************************************************/ > @@ -42,18 +80,15 @@ void GLAPIENTRY > _mesa_ClearDepth( GLclampd depth ) > { > GET_CURRENT_CONTEXT(ctx); > - > - if (MESA_VERBOSE & VERBOSE_API) > - _mesa_debug(ctx, "glClearDepth(%f)\n", depth); > - > - ctx->Depth.Clear = CLAMP( depth, 0.0, 1.0 ); > + set_clear_depth(ctx, "glClearDepth", depth, true); > } > > > void GLAPIENTRY > _mesa_ClearDepthf( GLclampf depth ) > { > - _mesa_ClearDepth(depth); > + GET_CURRENT_CONTEXT(ctx); > + set_clear_depth(ctx, "glClearDepthf", depth, true); > } > > > @@ -123,24 +158,7 @@ void GLAPIENTRY > _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax ) > { > GET_CURRENT_CONTEXT(ctx); > - > - if (MESA_VERBOSE & VERBOSE_API) > - _mesa_debug(ctx, "glDepthBounds(%f, %f)\n", zmin, zmax); > - > - if (zmin > zmax) { > - _mesa_error(ctx, GL_INVALID_VALUE, "glDepthBoundsEXT(zmin > zmax)"); > - return; > - } > - > - zmin = CLAMP(zmin, 0.0, 1.0); > - zmax = CLAMP(zmax, 0.0, 1.0); > - > - if (ctx->Depth.BoundsMin == zmin && ctx->Depth.BoundsMax == zmax) > - return; > - > - FLUSH_VERTICES(ctx, _NEW_DEPTH); > - ctx->Depth.BoundsMin = (GLfloat) zmin; > - ctx->Depth.BoundsMax = (GLfloat) zmax; > + set_depth_bounds(ctx, "glDepthBoundsEXT", zmin, zmax, true); > } > > > diff --git a/src/mesa/main/viewport.c b/src/mesa/main/viewport.c > index 6545bf6..e86a77c 100644 > --- a/src/mesa/main/viewport.c > +++ b/src/mesa/main/viewport.c > @@ -240,14 +240,19 @@ _mesa_ViewportIndexedfv(GLuint index, const GLfloat *v) > > static void > set_depth_range_no_notify(struct gl_context *ctx, unsigned idx, > - GLclampd nearval, GLclampd farval) > + GLdouble nearval, GLdouble farval, bool clamp) > { > + if (clamp) { > + nearval = CLAMP(nearval, 0.0, 1.0); > + farval = CLAMP(farval, 0.0, 1.0); > + } > + > if (ctx->ViewportArray[idx].Near == nearval && > ctx->ViewportArray[idx].Far == farval) > return; > > - ctx->ViewportArray[idx].Near = CLAMP(nearval, 0.0, 1.0); > - ctx->ViewportArray[idx].Far = CLAMP(farval, 0.0, 1.0); > + ctx->ViewportArray[idx].Near = nearval; > + ctx->ViewportArray[idx].Far = farval; > ctx->NewState |= _NEW_VIEWPORT; > > #if 1 > @@ -268,32 +273,19 @@ set_depth_range_no_notify(struct gl_context *ctx, > unsigned idx, > > void > _mesa_set_depth_range(struct gl_context *ctx, unsigned idx, > - GLclampd nearval, GLclampd farval) > + GLdouble nearval, GLdouble farval, bool clamp) > { > - set_depth_range_no_notify(ctx, idx, nearval, farval); > + set_depth_range_no_notify(ctx, idx, nearval, farval, clamp); > > if (ctx->Driver.DepthRange) > ctx->Driver.DepthRange(ctx); > } > > -/** > - * Called by glDepthRange > - * > - * \param nearval specifies the Z buffer value which should correspond to > - * the near clip plane > - * \param farval specifies the Z buffer value which should correspond to > - * the far clip plane > - */ > -void GLAPIENTRY > -_mesa_DepthRange(GLclampd nearval, GLclampd farval) > +static void > +set_all_depth_range(struct gl_context *ctx, > + GLdouble nearval, GLdouble farval, bool clamp) > { > unsigned i; > - GET_CURRENT_CONTEXT(ctx); > - > - FLUSH_VERTICES(ctx, 0); > - > - if (MESA_VERBOSE&VERBOSE_API) > - _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); > > /* The GL_ARB_viewport_array spec says: > * > @@ -307,11 +299,31 @@ _mesa_DepthRange(GLclampd nearval, GLclampd farval) > * implementation, but only signal the driver once at the end. > */ > for (i = 0; i < ctx->Const.MaxViewports; i++) > - set_depth_range_no_notify(ctx, i, nearval, farval); > + set_depth_range_no_notify(ctx, i, nearval, farval, clamp); > > - if (ctx->Driver.DepthRange) { > + if (ctx->Driver.DepthRange) > ctx->Driver.DepthRange(ctx); > - } > +} > + > +/** > + * Called by glDepthRange > + * > + * \param nearval specifies the Z buffer value which should correspond to > + * the near clip plane > + * \param farval specifies the Z buffer value which should correspond to > + * the far clip plane > + */ > +void > +_mesa_DepthRange(GLclampd nearval, GLclampd farval) > +{ > + GET_CURRENT_CONTEXT(ctx); > + > + FLUSH_VERTICES(ctx, 0); > + > + if (MESA_VERBOSE&VERBOSE_API) > + _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); > + > + set_all_depth_range(ctx, nearval, farval, true); > } > > void GLAPIENTRY > @@ -347,7 +359,7 @@ _mesa_DepthRangeArrayv(GLuint first, GLsizei count, const > GLclampd *v) > } > > for (i = 0; i < count; i++) > - set_depth_range_no_notify(ctx, i + first, p[i].Near, p[i].Far); > + set_depth_range_no_notify(ctx, i + first, p[i].Near, p[i].Far, true); > > if (ctx->Driver.DepthRange) > ctx->Driver.DepthRange(ctx); > @@ -378,7 +390,7 @@ _mesa_DepthRangeIndexed(GLuint index, GLclampd nearval, > GLclampd farval) > return; > } > > - _mesa_set_depth_range(ctx, index, nearval, farval); > + _mesa_set_depth_range(ctx, index, nearval, farval, true); > } > > /** > diff --git a/src/mesa/main/viewport.h b/src/mesa/main/viewport.h > index f2311c0..6324cab 100644 > --- a/src/mesa/main/viewport.h > +++ b/src/mesa/main/viewport.h > @@ -62,7 +62,7 @@ _mesa_DepthRangeIndexed(GLuint index, GLclampd n, GLclampd > f); > > extern void > _mesa_set_depth_range(struct gl_context *ctx, unsigned idx, > - GLclampd nearval, GLclampd farval); > + GLdouble nearval, GLdouble farval, bool clamp); > > extern void > _mesa_init_viewport(struct gl_context *ctx); > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev