summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r600/r700_assembler.c
diff options
context:
space:
mode:
authorRichard Li <richardradeon@gmail.com>2009-11-19 16:05:43 -0500
committerRichard Li <richardradeon@gmail.com>2009-11-19 16:05:43 -0500
commit6345a7ba447d3e04b939ead6fee44fe9201ec2e3 (patch)
tree7e5aee41cc905c39e074f9a05851dd3535538a8b /src/mesa/drivers/dri/r600/r700_assembler.c
parenteec428280075c12dfef61bf3f18012dece384923 (diff)
r600 : check in shader code test enable flag: if flag
R600_ENABLE_GLSL_TEST defined, IL shader code will goto r600 assembler. The test base is /mesa/progs/glsl/brick, and changes shader code in CH06-brick.frag/vert to test different logic op combination. (if,else,while,function,...). The stack depth code is not in yet, so it is hard coded now. So complex code would not run (such as things like 8 loops embeded loop in loop).
Diffstat (limited to 'src/mesa/drivers/dri/r600/r700_assembler.c')
-rw-r--r--src/mesa/drivers/dri/r600/r700_assembler.c44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index 6e8d1cd927..16ac920f29 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -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)
+ {
+ case FC_PUSH_VPM:
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs++;
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.current++;
+ break;
+ case FC_PUSH_WQM:
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs++;
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.current += 4;
+ break;
+ case FC_LOOP:
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs += 4;
+ break;
+ case FC_REP:
+ /* TODO : for 16 vp asic, should += 2; */
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs += 1;
+ break;
+ };
+
+ if(pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs
+ > pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.max)
+ {
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.max =
+ pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.su.pushs;
+ }
}
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
+
+ checkStackDepth(pAsm, FC_PUSH_VPM);
return GL_TRUE;
}