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

Author: Maciej Cencora <[email protected]>
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;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to