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

index ee4d2828cff21b411494219b9ef22b99bec5bcec..80fab71cf8add065c24fad81de495147b32466b6 100644 (file)
@@ -226,22 +226,23 @@ void Map_Fragment_Program(r700_AssemblerBase         *pAsm,
        pAsm->number_of_exports = 0;
        pAsm->number_of_colorandz_exports = 0; /* don't include stencil and mask out. */
        pAsm->starting_export_register_number = pAsm->number_used_registers;
-       unBit = 1 << FRAG_RESULT_COLOR;
-       if(mesa_fp->Base.OutputsWritten & unBit)
-       {
-               pAsm->uiFP_OutputMap[FRAG_RESULT_COLOR] = pAsm->number_used_registers++;
-               pAsm->number_of_exports++;
-               pAsm->number_of_colorandz_exports++;
-       }
-       unBit = 1 << FRAG_RESULT_DEPTH;
-       if(mesa_fp->Base.OutputsWritten & unBit)
-       {
-        pAsm->depth_export_register_number = pAsm->number_used_registers;
-               pAsm->uiFP_OutputMap[FRAG_RESULT_DEPTH] = pAsm->number_used_registers++;
-               pAsm->number_of_exports++;
-               pAsm->number_of_colorandz_exports++;
-               pAsm->pR700Shader->depthIsExported = 1;
-       }
+
+    for (i = 0; i < FRAG_RESULT_MAX; ++i)
+    {
+        unBit = 1 << i;
+        if (mesa_fp->Base.OutputsWritten & unBit)
+        {
+            if (i == FRAG_RESULT_DEPTH)
+            {
+                pAsm->depth_export_register_number = pAsm->number_used_registers;
+                pAsm->pR700Shader->depthIsExported = 1;
+            }
+
+            pAsm->uiFP_OutputMap[i] = pAsm->number_used_registers++;
+            ++pAsm->number_of_exports;
+            ++pAsm->number_of_colorandz_exports;
+        }
+    }
 
     pAsm->pucOutMask = (unsigned char*) MALLOC(pAsm->number_of_exports);
     for(ui=0; ui<pAsm->number_of_exports; ui++)