mesa: Branch 'master'

Patrice Mandin pmandin at kemper.freedesktop.org
Tue Jan 2 15:39:39 UTC 2007


 src/mesa/drivers/dri/nouveau/nv10_state.c |   27 +++++++++++++++------------
 src/mesa/drivers/dri/nouveau/nv20_state.c |   27 +++++++++++++++------------
 src/mesa/drivers/dri/nouveau/nv30_state.c |   27 +++++++++++++++------------
 3 files changed, 45 insertions(+), 36 deletions(-)

New commits:
diff-tree bbfd963f492683dc359b7e3f8fcb7ceb2483f886 (from 254ce75ac300d8d20ba4e2fce81c4459c692d2b1)
Author: Patrice Mandin <patrice at manoir.racoon.city>
Date:   Tue Jan 2 14:31:16 2007 +0100

    Update spot light params

diff --git a/src/mesa/drivers/dri/nouveau/nv10_state.c b/src/mesa/drivers/dri/nouveau/nv10_state.c
index be5f5f6..c028be2 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state.c
@@ -327,6 +327,7 @@ static void nv10Hint(GLcontext *ctx, GLe
 // void (*IndexMask)(GLcontext *ctx, GLuint mask);
 
 enum {
+	SPOTLIGHT_NO_UPDATE,
 	SPOTLIGHT_UPDATE_EXPONENT,
 	SPOTLIGHT_UPDATE_DIRECTION,
 	SPOTLIGHT_UPDATE_ALL
@@ -337,7 +338,7 @@ static void nv10Lightfv(GLcontext *ctx, 
 	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
 	GLint p = light - GL_LIGHT0;
 	struct gl_light *l = &ctx->Light.Light[p];
-	int spotlightUpdate = -1;
+	int spotlight_update = SPOTLIGHT_NO_UPDATE;
 
 	switch(pname)
 	{
@@ -366,13 +367,13 @@ static void nv10Lightfv(GLcontext *ctx, 
 			OUT_RING_CACHEf(params[2]);
 			break;
 		case GL_SPOT_DIRECTION:
-			spotlightUpdate = SPOTLIGHT_UPDATE_DIRECTION;
+			spotlight_update = SPOTLIGHT_UPDATE_DIRECTION;
 			break;
 		case GL_SPOT_EXPONENT:
-			spotlightUpdate = SPOTLIGHT_UPDATE_EXPONENT;
+			spotlight_update = SPOTLIGHT_UPDATE_EXPONENT;
 			break;
 		case GL_SPOT_CUTOFF:
-			spotlightUpdate = SPOTLIGHT_UPDATE_ALL;
+			spotlight_update = SPOTLIGHT_UPDATE_ALL;
 			break;
 		case GL_CONSTANT_ATTENUATION:
 			BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LIGHT_CONSTANT_ATTENUATION(p), 1);
@@ -390,13 +391,14 @@ static void nv10Lightfv(GLcontext *ctx, 
 			break;
 	}
 
-	switch(spotlightUpdate) {
+	switch(spotlight_update) {
 		case SPOTLIGHT_UPDATE_DIRECTION:
 			{
 				GLfloat x,y,z;
-				x = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[0];
-				y = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[1];
-				z = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[2];
+				GLfloat spot_light_coef_a = 1.0 / (l->_CosCutoff - 1.0);
+				x = spot_light_coef_a * l->_NormDirection[0];
+				y = spot_light_coef_a * l->_NormDirection[1];
+				z = spot_light_coef_a * l->_NormDirection[2];
 				BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LIGHT_SPOT_DIR_X(p), 3);
 				OUT_RING_CACHEf(x);
 				OUT_RING_CACHEf(y);
@@ -418,13 +420,14 @@ static void nv10Lightfv(GLcontext *ctx, 
 		case SPOTLIGHT_UPDATE_ALL:
 			{
 				GLfloat cc,lc,qc, x,y,z, c;
+				GLfloat spot_light_coef_a = 1.0 / (l->_CosCutoff - 1.0);
 				cc = 1.0;	/* FIXME: These need to be correctly computed */
 				lc = 0.0;
 				qc = 2.0;
-				x = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[0];
-				y = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[1];
-				z = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[2];
-				c = -2.0 * (0.5 + l->_CosCutoff);
+				x = spot_light_coef_a * l->_NormDirection[0];
+				y = spot_light_coef_a * l->_NormDirection[1];
+				z = spot_light_coef_a * l->_NormDirection[2];
+				c = spot_light_coef_a + 1.0;
 				BEGIN_RING_CACHE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_A(p), 7);
 				OUT_RING_CACHEf(cc);
 				OUT_RING_CACHEf(lc);
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state.c b/src/mesa/drivers/dri/nouveau/nv20_state.c
index 6bfac84..8e38d6e 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state.c
@@ -338,6 +338,7 @@ static void nv20Hint(GLcontext *ctx, GLe
 // void (*IndexMask)(GLcontext *ctx, GLuint mask);
 
 enum {
+	SPOTLIGHT_NO_UPDATE,
 	SPOTLIGHT_UPDATE_EXPONENT,
 	SPOTLIGHT_UPDATE_DIRECTION,
 	SPOTLIGHT_UPDATE_ALL
@@ -348,7 +349,7 @@ static void nv20Lightfv(GLcontext *ctx, 
 	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
 	GLint p = light - GL_LIGHT0;
 	struct gl_light *l = &ctx->Light.Light[p];
-	int spotlightUpdate = -1;
+	int spotlight_update = SPOTLIGHT_NO_UPDATE;
 
 	/* not sure where the fourth param value goes...*/
 	switch(pname)
@@ -378,13 +379,13 @@ static void nv20Lightfv(GLcontext *ctx, 
 			OUT_RING_CACHEf(params[2]);
 			break;
 		case GL_SPOT_DIRECTION:
-			spotlightUpdate = SPOTLIGHT_UPDATE_DIRECTION;
+			spotlight_update = SPOTLIGHT_UPDATE_DIRECTION;
 			break;
 		case GL_SPOT_EXPONENT:
-			spotlightUpdate = SPOTLIGHT_UPDATE_EXPONENT;
+			spotlight_update = SPOTLIGHT_UPDATE_EXPONENT;
 			break;
 		case GL_SPOT_CUTOFF:
-			spotlightUpdate = SPOTLIGHT_UPDATE_ALL;
+			spotlight_update = SPOTLIGHT_UPDATE_ALL;
 			break;
 		case GL_CONSTANT_ATTENUATION:
 			BEGIN_RING_CACHE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_CONSTANT_ATTENUATION(p), 1);
@@ -402,13 +403,14 @@ static void nv20Lightfv(GLcontext *ctx, 
 			break;
 	}
 
-	switch(spotlightUpdate) {
+	switch(spotlight_update) {
 		case SPOTLIGHT_UPDATE_DIRECTION:
 			{
 				GLfloat x,y,z;
-				x = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[0];
-				y = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[1];
-				z = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[2];
+				GLfloat spot_light_coef_a = 1.0 / (l->_CosCutoff - 1.0);
+				x = spot_light_coef_a * l->_NormDirection[0];
+				y = spot_light_coef_a * l->_NormDirection[1];
+				z = spot_light_coef_a * l->_NormDirection[2];
 				BEGIN_RING_CACHE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_DIR_X(p), 3);
 				OUT_RING_CACHEf(x);
 				OUT_RING_CACHEf(y);
@@ -430,13 +432,14 @@ static void nv20Lightfv(GLcontext *ctx, 
 		case SPOTLIGHT_UPDATE_ALL:
 			{
 				GLfloat cc,lc,qc, x,y,z, c;
+				GLfloat spot_light_coef_a = 1.0 / (l->_CosCutoff - 1.0);
 				cc = 1.0;	/* FIXME: These need to be correctly computed */
 				lc = 0.0;
 				qc = 2.0;
-				x = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[0];
-				y = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[1];
-				z = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[2];
-				c = -2.0 * (0.5 + l->_CosCutoff);
+				x = spot_light_coef_a * l->_NormDirection[0];
+				y = spot_light_coef_a * l->_NormDirection[1];
+				z = spot_light_coef_a * l->_NormDirection[2];
+				c = spot_light_coef_a + 1.0;
 				BEGIN_RING_CACHE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_A(p), 7);
 				OUT_RING_CACHEf(cc);
 				OUT_RING_CACHEf(lc);
diff --git a/src/mesa/drivers/dri/nouveau/nv30_state.c b/src/mesa/drivers/dri/nouveau/nv30_state.c
index 45befd0..9bf5f2a 100644
--- a/src/mesa/drivers/dri/nouveau/nv30_state.c
+++ b/src/mesa/drivers/dri/nouveau/nv30_state.c
@@ -369,6 +369,7 @@ static void nv30Hint(GLcontext *ctx, GLe
 // void (*IndexMask)(GLcontext *ctx, GLuint mask);
 
 enum {
+	SPOTLIGHT_NO_UPDATE,
 	SPOTLIGHT_UPDATE_EXPONENT,
 	SPOTLIGHT_UPDATE_DIRECTION,
 	SPOTLIGHT_UPDATE_ALL
@@ -379,7 +380,7 @@ static void nv30Lightfv(GLcontext *ctx, 
 	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);
 	GLint p = light - GL_LIGHT0;
 	struct gl_light *l = &ctx->Light.Light[p];
-	int spotlightUpdate = -1;
+	int spotlight_update = SPOTLIGHT_NO_UPDATE;
 
 	if (NOUVEAU_CARD_USING_SHADERS)
 	   return;
@@ -412,13 +413,13 @@ static void nv30Lightfv(GLcontext *ctx, 
 			OUT_RING_CACHEf(params[2]);
 			break;
 		case GL_SPOT_DIRECTION:
-			spotlightUpdate = SPOTLIGHT_UPDATE_DIRECTION;
+			spotlight_update = SPOTLIGHT_UPDATE_DIRECTION;
 			break;
 		case GL_SPOT_EXPONENT:
-			spotlightUpdate = SPOTLIGHT_UPDATE_EXPONENT;
+			spotlight_update = SPOTLIGHT_UPDATE_EXPONENT;
 			break;
 		case GL_SPOT_CUTOFF:
-			spotlightUpdate = SPOTLIGHT_UPDATE_ALL;
+			spotlight_update = SPOTLIGHT_UPDATE_ALL;
 			break;
 		case GL_CONSTANT_ATTENUATION:
 			BEGIN_RING_CACHE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LIGHT_CONSTANT_ATTENUATION(p), 1);
@@ -436,13 +437,14 @@ static void nv30Lightfv(GLcontext *ctx, 
 			break;
 	}
 
-	switch(spotlightUpdate) {
+	switch(spotlight_update) {
 		case SPOTLIGHT_UPDATE_DIRECTION:
 			{
 				GLfloat x,y,z;
-				x = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[0];
-				y = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[1];
-				z = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[2];
+				GLfloat spot_light_coef_a = 1.0 / (l->_CosCutoff - 1.0);
+				x = spot_light_coef_a * l->_NormDirection[0];
+				y = spot_light_coef_a * l->_NormDirection[1];
+				z = spot_light_coef_a * l->_NormDirection[2];
 				BEGIN_RING_CACHE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LIGHT_SPOT_DIR_X(p), 3);
 				OUT_RING_CACHEf(x);
 				OUT_RING_CACHEf(y);
@@ -464,13 +466,14 @@ static void nv30Lightfv(GLcontext *ctx, 
 		case SPOTLIGHT_UPDATE_ALL:
 			{
 				GLfloat cc,lc,qc, x,y,z, c;
+				GLfloat spot_light_coef_a = 1.0 / (l->_CosCutoff - 1.0);
 				cc = 1.0;	/* FIXME: These need to be correctly computed */
 				lc = 0.0;
 				qc = 2.0;
-				x = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[0];
-				y = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[1];
-				z = -2.0 * (1.0 + l->_CosCutoff) * l->_NormDirection[2];
-				c = -2.0 * (0.5 + l->_CosCutoff);
+				x = spot_light_coef_a * l->_NormDirection[0];
+				y = spot_light_coef_a * l->_NormDirection[1];
+				z = spot_light_coef_a * l->_NormDirection[2];
+				c = spot_light_coef_a + 1.0;
 				BEGIN_RING_CACHE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_A(p), 7);
 				OUT_RING_CACHEf(cc);
 				OUT_RING_CACHEf(lc);



More information about the mesa-commit mailing list