r600: Process exports for all written fragment outputs.
authorHenri Verbeet <hverbeet@gmail.com>
Tue, 8 Jun 2010 19:28:32 +0000 (15:28 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Tue, 8 Jun 2010 19:40:25 +0000 (15:40 -0400)
src/mesa/drivers/dri/r600/r700_assembler.c

index 0677c54bea1a4e71b05239c6724560c0eaf30138..2e64a5778c9184e6db4d1ea08441c50980fc8555 100644 (file)
@@ -6437,6 +6437,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
 { 
     unsigned int unBit;
     GLuint export_count = 0;
+    unsigned int i;
 
     if(pR700AsmCode->depth_export_register_number >= 0) 
     {
@@ -6446,34 +6447,19 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
                }
     }
 
-    unBit = 1 << FRAG_RESULT_COLOR;
-       if(OutputsWritten & unBit)
-       {
-               if( GL_FALSE == Process_Export(pR700AsmCode,
-                                       SQ_EXPORT_PIXEL, 
-                                       0, 
-                                       1, 
-                                       pR700AsmCode->uiFP_OutputMap[FRAG_RESULT_COLOR], 
-                                       GL_FALSE) ) 
-        {
-            return GL_FALSE;
-        }
-        export_count++;
-       }
-       unBit = 1 << FRAG_RESULT_DEPTH;
-       if(OutputsWritten & unBit)
-       {
-        if( GL_FALSE == Process_Export(pR700AsmCode,
-                                       SQ_EXPORT_PIXEL, 
-                                       0, 
-                                       1, 
-                                       pR700AsmCode->uiFP_OutputMap[FRAG_RESULT_DEPTH], 
-                                       GL_TRUE)) 
+    for (i = 0; i < FRAG_RESULT_MAX; ++i)
+    {
+        unBit = 1 << i;
+
+        if (OutputsWritten & unBit)
         {
-            return GL_FALSE;
+            GLboolean is_depth = i == FRAG_RESULT_DEPTH ? GL_TRUE : GL_FALSE;
+            if (!Process_Export(pR700AsmCode, SQ_EXPORT_PIXEL, 0, 1, pR700AsmCode->uiFP_OutputMap[i], is_depth))
+                return GL_FALSE;
+            ++export_count;
         }
-        export_count++;
-       }
+    }
+
     /* Need to export something, otherwise we'll hang
      * results are undefined anyway */
     if(export_count == 0)