mesa: Branch 'master'

Patrice Mandin pmandin at kemper.freedesktop.org
Fri Feb 16 18:48:49 UTC 2007


 src/mesa/drivers/dri/nouveau/nv10_state.c |   45 ++++++++++++++++++++++--------
 1 files changed, 33 insertions(+), 12 deletions(-)

New commits:
diff-tree 252d1de05430cbed532b5a716cbd7da0ee7dd0d1 (from e4c772bead57c0190f74f1fa43dd129e170567f7)
Author: Patrice Mandin <pmandin at caramail.com>
Date:   Fri Feb 16 19:46:54 2007 +0100

    nouveau: nv10: fix viewport scale and origin

diff --git a/src/mesa/drivers/dri/nouveau/nv10_state.c b/src/mesa/drivers/dri/nouveau/nv10_state.c
index d69c682..e64fcb1 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state.c
@@ -34,6 +34,29 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "mtypes.h"
 #include "colormac.h"
 
+static void nv10ViewportScale(nouveauContextPtr nmesa)
+{
+	GLcontext *ctx = nmesa->glCtx;
+	GLuint w = ctx->Viewport.Width;
+	GLuint h = ctx->Viewport.Height;
+
+	GLfloat max_depth = (ctx->Viewport.Near + ctx->Viewport.Far) * 0.5;
+	switch (ctx->DrawBuffer->_DepthBuffer->DepthBits) {
+		case 16:
+			max_depth *= 32767.0;
+			break;
+		case 24:
+			max_depth *= 16777215.0;
+			break;
+	}
+
+	BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_VIEWPORT_SCALE_X, 4);
+	OUT_RING_CACHEf ((((GLfloat) w) * 0.5) - 2048.0);
+	OUT_RING_CACHEf ((((GLfloat) h) * 0.5) - 2048.0);
+	OUT_RING_CACHEf (max_depth);
+	OUT_RING_CACHEf (0.0);
+}
+
 static void nv10AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
 {
 	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
@@ -167,6 +190,8 @@ static void nv10DepthRange(GLcontext *ct
 	BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_DEPTH_RANGE_NEAR, 2);
 	OUT_RING_CACHEf(nearval);
 	OUT_RING_CACHEf(farval);
+
+	nv10ViewportScale(nmesa);
 }
 
 /** Specify the current buffer for writing */
@@ -628,18 +653,7 @@ static void nv10WindowMoved(nouveauConte
 	        OUT_RING_CACHE(0);
 	}
 
-	/* viewport transform */
-	BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_VIEWPORT_ORIGIN_X, 4);
-	OUT_RING_CACHEf ((GLfloat) x);
-	OUT_RING_CACHEf ((GLfloat) (y+h));
-	OUT_RING_CACHEf (0.0);
-	OUT_RING_CACHEf (0.0);
-
-	BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_VIEWPORT_SCALE_X, 4);
-	OUT_RING_CACHEf ((((GLfloat) w) * 0.5) - 2048.0);
-	OUT_RING_CACHEf ((((GLfloat) h) * 0.5) - 2048.0);
-	OUT_RING_CACHEf (16777215.0 * 0.5);
-	OUT_RING_CACHEf (0.0);
+	nv10ViewportScale(nmesa);
 }
 
 /* Initialise any card-specific non-GL related state */
@@ -700,6 +714,13 @@ static GLboolean nv10BindBuffers(nouveau
 	OUT_RING_CACHE(color[0]->offset);
 	OUT_RING_CACHE(depth ? depth->offset : color[0]->offset);
 
+	/* Always set to bottom left of buffer */
+	BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_VIEWPORT_ORIGIN_X, 4);
+	OUT_RING_CACHEf (0.0);
+	OUT_RING_CACHEf ((GLfloat) h);
+	OUT_RING_CACHEf (0.0);
+	OUT_RING_CACHEf (0.0);
+
 	return GL_TRUE;
 }
 



More information about the mesa-commit mailing list