mesa: Refactor depth range setting even more

Create an internal function that just writes data into the depth range.
In future patches this will see more use because we only want to call
dd_function_table::DepthRange once after setting all of the depth ranges
instead of once per depth range.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Ian Romanick 2013-11-05 21:34:26 -08:00
parent 3eb135d1c7
commit 42f916e150
2 changed files with 41 additions and 19 deletions

View file

@ -108,6 +108,43 @@ _mesa_set_viewport(struct gl_context *ctx, unsigned idx, GLint x, GLint y,
}
}
static void
set_depth_range_no_notify(struct gl_context *ctx, unsigned idx,
GLclampd nearval, GLclampd farval)
{
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->NewState |= _NEW_VIEWPORT;
#if 1
/* XXX remove this someday. Currently the DRI drivers rely on
* the WindowMap matrix being up to date in the driver's Viewport
* and DepthRange functions.
*/
_math_matrix_viewport(&ctx->ViewportArray[idx]._WindowMap,
ctx->ViewportArray[idx].X,
ctx->ViewportArray[idx].Y,
ctx->ViewportArray[idx].Width,
ctx->ViewportArray[idx].Height,
ctx->ViewportArray[idx].Near,
ctx->ViewportArray[idx].Far,
ctx->DrawBuffer->_DepthMaxF);
#endif
}
void
_mesa_set_depth_range(struct gl_context *ctx, unsigned idx,
GLclampd nearval, GLclampd farval)
{
set_depth_range_no_notify(ctx, idx, nearval, farval);
if (ctx->Driver.DepthRange)
ctx->Driver.DepthRange(ctx);
}
/**
* Called by glDepthRange
@ -127,25 +164,7 @@ _mesa_DepthRange(GLclampd nearval, GLclampd farval)
if (MESA_VERBOSE&VERBOSE_API)
_mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval);
if (ctx->ViewportArray[0].Near == nearval &&
ctx->ViewportArray[0].Far == farval)
return;
ctx->ViewportArray[0].Near = CLAMP(nearval, 0.0, 1.0);
ctx->ViewportArray[0].Far = CLAMP(farval, 0.0, 1.0);
ctx->NewState |= _NEW_VIEWPORT;
#if 1
/* XXX remove this someday. Currently the DRI drivers rely on
* the WindowMap matrix being up to date in the driver's Viewport
* and DepthRange functions.
*/
_math_matrix_viewport(&ctx->ViewportArray[0]._WindowMap,
ctx->ViewportArray[0].X, ctx->ViewportArray[0].Y,
ctx->ViewportArray[0].Width, ctx->ViewportArray[0].Height,
ctx->ViewportArray[0].Near, ctx->ViewportArray[0].Far,
ctx->DrawBuffer->_DepthMaxF);
#endif
set_depth_range_no_notify(ctx, 0, nearval, farval);
if (ctx->Driver.DepthRange) {
ctx->Driver.DepthRange(ctx);

View file

@ -46,6 +46,9 @@ _mesa_DepthRange(GLclampd nearval, GLclampd farval);
extern void GLAPIENTRY
_mesa_DepthRangef(GLclampf nearval, GLclampf farval);
extern void
_mesa_set_depth_range(struct gl_context *ctx, unsigned idx,
GLclampd nearval, GLclampd farval);
extern void
_mesa_init_viewport(struct gl_context *ctx);