r600 : check in shader code test enable flag: if flag
[mesa.git] / src / mesa / drivers / dri / r600 / r700_assembler.c
index 6e8d1cd9270dcc73079503e05ec99ddb6aec1b56..16ac920f293125ff709d50f35a5ca2288296864a 100644 (file)
@@ -4983,17 +4983,31 @@ GLboolean assemble_EXPORT(r700_AssemblerBase *pAsm)
 
 inline void checkStackDepth(r700_AssemblerBase *pAsm, GLuint uReason)
 {
-    switch (uReason)
-    {
-    case FC_PUSH_VPM:
-        break;
-    case FC_PUSH_WQM:
-        break;
-    case FC_LOOP:
-        break;
-    case FC_REP:
-        break;
-    };
+    switch (uReason)\r
+    {\r
+    case FC_PUSH_VPM:\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs++;\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.current++;\r
+        break;\r
+    case FC_PUSH_WQM:\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs++;\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.current += 4;\r
+        break;\r
+    case FC_LOOP:\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs += 4;\r
+        break;\r
+    case FC_REP:\r
+        /* TODO : for 16 vp asic, should += 2; */\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs += 1;\r
+        break;\r
+    };\r
+\r
+    if(pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs\r
+         > pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.max)\r
+    {\r
+        pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.max =\r
+            pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs;\r
+    }
 }
 
 GLboolean jumpToOffest(r700_AssemblerBase *pAsm, GLuint pops, GLint offset)
@@ -5092,10 +5106,6 @@ GLboolean assemble_IF(r700_AssemblerBase *pAsm, GLboolean bHasElse)
 
 GLboolean assemble_ELSE(r700_AssemblerBase *pAsm)
 {
-#ifdef USE_CF_FOR_POP_AFTER
-    pops(pAsm, 1);
-#endif /* USE_CF_FOR_POP_AFTER */
-
     if(GL_FALSE == add_cf_instruction(pAsm) )
     {
         return GL_FALSE;
@@ -5647,7 +5657,9 @@ GLboolean testFlag(r700_AssemblerBase *pAsm)
     {
         return GL_FALSE;
     }
-#endif
+#endif\r
+\r
+    checkStackDepth(pAsm, FC_PUSH_VPM);
 
     return GL_TRUE;
 }