r600: update num of interp if posizition is used
authorCooper Yuan <cooperyuan@gmail.com>
Tue, 11 Aug 2009 06:36:01 +0000 (14:36 +0800)
committerCooper Yuan <cooperyuan@gmail.com>
Tue, 11 Aug 2009 06:36:01 +0000 (14:36 +0800)
src/mesa/drivers/dri/r600/r700_fragprog.c

index c914f75..efeea90 100644 (file)
@@ -310,6 +310,16 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
 
     ui = (r700->SPI_PS_IN_CONTROL_0.u32All & NUM_INTERP_mask) / (1 << NUM_INTERP_shift);
 
+    /* PS uses fragment.position */
+    if (mesa_fp->Base.InputsRead & (1 << FRAG_ATTRIB_WPOS))
+    {
+        ui += 1;
+        SETfield(r700->SPI_PS_IN_CONTROL_0.u32All, ui, NUM_INTERP_shift, NUM_INTERP_mask);
+        SETfield(r700->SPI_PS_IN_CONTROL_0.u32All, CENTERS_ONLY, BARYC_SAMPLE_CNTL_shift, BARYC_SAMPLE_CNTL_mask);
+        SETbit(r700->SPI_PS_IN_CONTROL_0.u32All, POSITION_ENA_bit);
+        SETbit(r700->SPI_INPUT_Z.u32All, PROVIDE_Z_TO_SPI_bit);
+    }
+
     ui = (unNumOfReg < ui) ? ui : unNumOfReg;
 
     SETfield(r700->ps.SQ_PGM_RESOURCES_PS.u32All, ui, NUM_GPRS_shift, NUM_GPRS_mask); 
@@ -343,14 +353,6 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
         CLEARbit(r700->DB_SHADER_CONTROL.u32All, Z_EXPORT_ENABLE_bit);
     }
 
-    /* PS uses fragment.position */
-    if (mesa_fp->Base.InputsRead & (1 << FRAG_ATTRIB_WPOS))
-    {
-       SETbit(r700->SPI_PS_IN_CONTROL_0.u32All, POSITION_ENA_bit);
-       SETfield(r700->SPI_PS_IN_CONTROL_0.u32All, CENTERS_ONLY, BARYC_SAMPLE_CNTL_shift, BARYC_SAMPLE_CNTL_mask);
-       SETbit(r700->SPI_INPUT_Z.u32All, PROVIDE_Z_TO_SPI_bit); 
-    }
-
     /* sent out shader constants. */
     paramList = fp->mesa_program.Base.Parameters;