Mesa (master): dri/nv10-nv20: Add support for NV_texture_env_combine4.

Francisco Jerez currojerez at kemper.freedesktop.org
Thu Sep 9 12:21:36 UTC 2010


Module: Mesa
Branch: master
Commit: 3bbad7f1084c3d6259dfa23fd60f654c949f7408
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3bbad7f1084c3d6259dfa23fd60f654c949f7408

Author: Francisco Jerez <currojerez at riseup.net>
Date:   Thu Sep  9 14:14:48 2010 +0200

dri/nv10-nv20: Add support for NV_texture_env_combine4.

---

 src/mesa/drivers/dri/nouveau/nouveau_context.c |    1 +
 src/mesa/drivers/dri/nouveau/nv10_state_frag.c |   31 ++++++++++++++----------
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index b1d4152..287f77d 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -60,6 +60,7 @@ static const struct dri_extension nouveau_extensions[] = {
 	{ "GL_EXT_stencil_wrap",	NULL },
 	{ "GL_EXT_texture_lod_bias",	NULL },
 	{ "GL_NV_blend_square",         NULL },
+	{ "GL_NV_texture_env_combine4",	NULL },
 	{ "GL_SGIS_generate_mipmap",	NULL },
 	{ NULL,				NULL }
 };
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
index 76b95fd..ab713f9 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
@@ -63,6 +63,7 @@
 struct combiner_state {
 	GLcontext *ctx;
 	int unit;
+	GLboolean premodulate;
 
 	/* GL state */
 	GLenum mode;
@@ -82,6 +83,7 @@ struct combiner_state {
 			ctx->Texture.Unit[i]._CurrentCombine;	\
 		(rc)->ctx = ctx;				\
 		(rc)->unit = i;					\
+		(rc)->premodulate = c->_NumArgs##chan == 4;	\
 		(rc)->mode = c->Mode##chan;			\
 		(rc)->source = c->Source##chan;			\
 		(rc)->operand = c->Operand##chan;		\
@@ -95,6 +97,9 @@ static uint32_t
 get_input_source(struct combiner_state *rc, int source)
 {
 	switch (source) {
+	case GL_ZERO:
+		return RC_IN_SOURCE(ZERO);
+
 	case GL_TEXTURE:
 		return RC_IN_SOURCE(TEXTURE0) + rc->unit;
 
@@ -228,21 +233,21 @@ setup_combiner(struct combiner_state *rc)
 		break;
 
 	case GL_ADD:
-		INPUT_ARG(rc, A, 0, 0);
-		INPUT_ONE(rc, B, 0);
-		INPUT_ARG(rc, C, 1, 0);
-		INPUT_ONE(rc, D, 0);
-
-		rc->out = RC_OUT_SUM;
-		break;
-
 	case GL_ADD_SIGNED:
-		INPUT_ARG(rc, A, 0, 0);
-		INPUT_ONE(rc, B, 0);
-		INPUT_ARG(rc, C, 1, 0);
-		INPUT_ONE(rc, D, 0);
+		if (rc->premodulate) {
+			INPUT_ARG(rc, A, 0, 0);
+			INPUT_ARG(rc, B, 1, 0);
+			INPUT_ARG(rc, C, 2, 0);
+			INPUT_ARG(rc, D, 3, 0);
+		} else {
+			INPUT_ARG(rc, A, 0, 0);
+			INPUT_ONE(rc, B, 0);
+			INPUT_ARG(rc, C, 1, 0);
+			INPUT_ONE(rc, D, 0);
+		}
 
-		rc->out = RC_OUT_SUM | RC_OUT_BIAS;
+		rc->out = RC_OUT_SUM |
+			(rc->mode == GL_ADD_SIGNED ? RC_OUT_BIAS : 0);
 		break;
 
 	case GL_INTERPOLATE:




More information about the mesa-commit mailing list