r300: fix VAP setup
authorMaciej Cencora <m.cencora@gmail.com>
Wed, 10 Jun 2009 15:05:38 +0000 (17:05 +0200)
committerMaciej Cencora <m.cencora@gmail.com>
Thu, 11 Jun 2009 21:25:54 +0000 (23:25 +0200)
If GL context had e.g. tex0, tex2 and fog the VAPOutputCntl1 returned 0x104 instead of 0x124 - that meaned we're sending only 8 texcoords (instead of 12) which ended up in GPU hang.

src/mesa/drivers/dri/r300/r300_emit.c

index 4017224b10a20042fb799c16fab89cd9f56981dd..c3817721dc47566d25d09d375e3ae2e76978b109 100644 (file)
@@ -111,7 +111,7 @@ GLuint r300VAPOutputCntl1(GLcontext * ctx, GLuint vp_writes, GLuint fp_reads)
 
        for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
                if (vp_writes & (1 << (VERT_RESULT_TEX0 + i)) && fp_reads & FRAG_BIT_TEX(i)) {
-                       ret |= (4 << (3 * i));
+                       ret |= (4 << (3 * first_free_texcoord));
                        ++first_free_texcoord;
                }
        }
@@ -122,13 +122,14 @@ GLuint r300VAPOutputCntl1(GLcontext * ctx, GLuint vp_writes, GLuint fp_reads)
        }
 
        if (vp_writes & (1 << VERT_RESULT_FOGC) && fp_reads & FRAG_BIT_FOGC) {
-               if (first_free_texcoord > 8) {
-                       fprintf(stderr, "\tout of free texcoords to write fog coord\n");
-                       _mesa_exit(-1);
-               }
                ret |= 4 << (3 * first_free_texcoord);
        }
 
+       if (first_free_texcoord > 8) {
+               fprintf(stderr, "\tout of free texcoords\n");
+               _mesa_exit(-1);
+       }
+
        return ret;
 }