summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2011-07-12 13:47:21 -0700
committerEric Anholt <[email protected]>2011-07-18 11:26:33 -0700
commitdebf751aeaf0f02b9a7fc0e242ae3b97dde8416f (patch)
treea15ceec51c3427ffcedea4835fe3b4da4192468f /src
parent79fee3a76b7f4f63d01266fc3a3cd6ca44d1e513 (diff)
i915: Fix incorrect depth scaling when enabling/disabling depth buffers.
We were updating our new viewport using the old buffers' _WindowMap.m. We can do less math and avoid using that deprecated matrix by just folding the viewport calculation right in to the driver. Fixes piglit fbo-depthtex.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/i915/i915_state.c43
1 files changed, 19 insertions, 24 deletions
diff --git a/src/mesa/drivers/dri/i915/i915_state.c b/src/mesa/drivers/dri/i915/i915_state.c
index b876717f12a..2b35ed7105a 100644
--- a/src/mesa/drivers/dri/i915/i915_state.c
+++ b/src/mesa/drivers/dri/i915/i915_state.c
@@ -401,31 +401,26 @@ void
intelCalcViewport(struct gl_context * ctx)
{
struct intel_context *intel = intel_context(ctx);
- const GLfloat *v = ctx->Viewport._WindowMap.m;
- const GLfloat depthScale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
- GLfloat *m = intel->ViewportMatrix.m;
- GLfloat yScale, yBias;
-
- if (ctx->DrawBuffer->Name) {
- /* User created FBO */
- /* y=0=bottom */
- yScale = 1.0;
- yBias = 0.0;
- }
- else {
- /* window buffer, y=0=top */
- yScale = -1.0;
- yBias = ctx->DrawBuffer->Height;
- }
-
- m[MAT_SX] = v[MAT_SX];
- m[MAT_TX] = v[MAT_TX];
- m[MAT_SY] = v[MAT_SY] * yScale;
- m[MAT_TY] = v[MAT_TY] * yScale + yBias;
-
- m[MAT_SZ] = v[MAT_SZ] * depthScale;
- m[MAT_TZ] = v[MAT_TZ] * depthScale;
+ if (ctx->DrawBuffer->Name == 0) {
+ _math_matrix_viewport(&intel->ViewportMatrix,
+ ctx->Viewport.X,
+ ctx->DrawBuffer->Height - ctx->Viewport.Y,
+ ctx->Viewport.Width,
+ -ctx->Viewport.Height,
+ ctx->Viewport.Near,
+ ctx->Viewport.Far,
+ 1.0);
+ } else {
+ _math_matrix_viewport(&intel->ViewportMatrix,
+ ctx->Viewport.X,
+ ctx->Viewport.Y,
+ ctx->Viewport.Width,
+ ctx->Viewport.Height,
+ ctx->Viewport.Near,
+ ctx->Viewport.Far,
+ 1.0);
+ }
}