r600: A shader is bound that exports Z as a float into Red channel
authorCooper Yuan <cooperyuan@gmail.com>
Wed, 12 Aug 2009 09:39:18 +0000 (17:39 +0800)
committerCooper Yuan <cooperyuan@gmail.com>
Wed, 12 Aug 2009 09:39:18 +0000 (17:39 +0800)
src/mesa/drivers/dri/r600/r700_assembler.c
src/mesa/drivers/dri/r600/r700_fragprog.c

index 0abf112..eaacd06 100644 (file)
@@ -3839,6 +3839,9 @@ GLboolean Process_Export(r700_AssemblerBase* pAsm,
     if (export_count == 1) 
     {
         ucWriteMask = pAsm->pucOutMask[starting_register_number - pAsm->starting_export_register_number];
+       /* exports Z as a float into Red channel */
+       if (GL_TRUE == is_depth_export)
+           ucWriteMask = 0x1;
 
         if( (ucWriteMask & 0x1) != 0)
         {
index efeea90..6249bde 100644 (file)
@@ -118,6 +118,7 @@ void Map_Fragment_Program(r700_AssemblerBase         *pAsm,
                pAsm->uiFP_OutputMap[FRAG_RESULT_DEPTH] = pAsm->number_used_registers++;
                pAsm->number_of_exports++;
                pAsm->number_of_colorandz_exports++;
+               pAsm->pR700Shader->depthIsExported = 1;
        }
 
     pAsm->pucOutMask = (unsigned char*) MALLOC(pAsm->number_of_exports);