i915: Fix incorrect depth scaling when enabling/disabling depth buffers.
authorEric Anholt <eric@anholt.net>
Tue, 12 Jul 2011 20:47:21 +0000 (13:47 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 18 Jul 2011 18:26:33 +0000 (11:26 -0700)
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.

src/mesa/drivers/dri/i915/i915_state.c

index b876717f12a372a1b8f0c4a0196f300d6fd7c0f9..2b35ed7105aa00e3892788b959d04c44f74971d5 100644 (file)
@@ -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);
+   }
 }