Mesa (mesa_7_6_branch): r300: fallback to software rendering if we are out of free texcoords

Maciej Cencora osiris at kemper.freedesktop.org
Wed Sep 23 21:24:35 UTC 2009


Module: Mesa
Branch: mesa_7_6_branch
Commit: 84c7afd9e0f2df72d90dd82d38384c4f2f45173e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=84c7afd9e0f2df72d90dd82d38384c4f2f45173e

Author: Maciej Cencora <m.cencora at gmail.com>
Date:   Sat Sep 19 18:45:59 2009 +0200

r300: fallback to software rendering if we are out of free texcoords

Fixes #22741

---

 src/mesa/drivers/dri/r300/r300_fragprog_common.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_common.c b/src/mesa/drivers/dri/r300/r300_fragprog_common.c
index 469c278..0bdc90b 100644
--- a/src/mesa/drivers/dri/r300/r300_fragprog_common.c
+++ b/src/mesa/drivers/dri/r300/r300_fragprog_common.c
@@ -99,8 +99,8 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler,
 {
 	int i;
 
+	fp->wpos_attr = FRAG_ATTRIB_MAX;
 	if (!(compiler->Base.Program.InputsRead & FRAG_BIT_WPOS)) {
-		fp->wpos_attr = FRAG_ATTRIB_MAX;
 		return;
 	}
 
@@ -112,6 +112,13 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler,
 		}
 	}
 
+	/* No free texcoord found, fall-back to software rendering */
+	if (fp->wpos_attr == FRAG_ATTRIB_MAX)
+	{
+		compiler->Base.Error = 1;
+		return;
+	}
+
 	rc_transform_fragment_wpos(&compiler->Base, FRAG_ATTRIB_WPOS, fp->wpos_attr);
 }
 
@@ -127,8 +134,8 @@ static void rewriteFog(struct r300_fragment_program_compiler *compiler, struct r
 	struct prog_src_register src;
 	int i;
 
+	fp->fog_attr = FRAG_ATTRIB_MAX;
 	if (!(compiler->Base.Program.InputsRead & FRAG_BIT_FOGC)) {
-		fp->fog_attr = FRAG_ATTRIB_MAX;
 		return;
 	}
 
@@ -140,6 +147,13 @@ static void rewriteFog(struct r300_fragment_program_compiler *compiler, struct r
 		}
 	}
 
+	/* No free texcoord found, fall-back to software rendering */
+	if (fp->fog_attr == FRAG_ATTRIB_MAX)
+	{
+		compiler->Base.Error = 1;
+		return;
+	}
+
 	memset(&src, 0, sizeof(src));
 	src.File = PROGRAM_INPUT;
 	src.Index = fp->fog_attr;




More information about the mesa-commit mailing list