Mesa (master): r600 : add some defs

Richard Li richardradeon at kemper.freedesktop.org
Wed Nov 18 20:41:32 UTC 2009


Module: Mesa
Branch: master
Commit: de460871605c5575c5513dd1283cb61710b60cfe
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=de460871605c5575c5513dd1283cb61710b60cfe

Author: Richard Li <richardradeon at gmail.com>
Date:   Wed Nov 18 14:43:59 2009 -0500

r600 : add some defs

---

 src/mesa/drivers/dri/r600/r700_assembler.c |   35 ++++++++++++++++++++++++++-
 src/mesa/drivers/dri/r600/r700_assembler.h |   21 ++++++++++++++++
 src/mesa/drivers/dri/r600/r700_shader.c    |    2 +-
 3 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index 4b5d40b..6e8d1cd 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -39,6 +39,7 @@
 #include "r700_assembler.h"
 
 #define USE_CF_FOR_CONTINUE_BREAK 1
+#define USE_CF_FOR_POP_AFTER      1
 
 BITS addrmode_PVSDST(PVSDST * pPVSDST)
 {
@@ -489,10 +490,12 @@ int Init_r700_AssemblerBase(SHADER_PIPE_TYPE spt, r700_AssemblerBase* pAsm, R700
     pAsm->unCallerArrayPointer = 0;
 
     pAsm->CALLSP = 0;
-    pAsm->CALLSTACK[0].FCSP_BeforeEntry;
+    pAsm->CALLSTACK[0].FCSP_BeforeEntry = 0;
     pAsm->CALLSTACK[0].plstCFInstructions_local
           = &(pAsm->pR700Shader->lstCFInstructions);
 
+    pAsm->CALLSTACK[0].stackUsage.bits = 0;
+
     SetActiveCFlist(pAsm->pR700Shader, pAsm->CALLSTACK[0].plstCFInstructions_local);
 
     pAsm->unCFflags = 0;
@@ -4978,6 +4981,21 @@ GLboolean assemble_EXPORT(r700_AssemblerBase *pAsm)
     return GL_TRUE;
 }
 
+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;
+    };
+}
+
 GLboolean jumpToOffest(r700_AssemblerBase *pAsm, GLuint pops, GLint offset)
 {
     if(GL_FALSE == add_cf_instruction(pAsm) )
@@ -5024,7 +5042,7 @@ GLboolean pops(r700_AssemblerBase *pAsm, GLuint pops)
     return GL_TRUE;
 }
 
-GLboolean assemble_IF(r700_AssemblerBase *pAsm)
+GLboolean assemble_IF(r700_AssemblerBase *pAsm, GLboolean bHasElse)
 {
     if(GL_FALSE == add_cf_instruction(pAsm) )
     {
@@ -5056,10 +5074,12 @@ GLboolean assemble_IF(r700_AssemblerBase *pAsm)
     pAsm->fc_stack[pAsm->FCSP].midLen= 0;
     pAsm->fc_stack[pAsm->FCSP].first = pAsm->cf_current_cf_clause_ptr;
 
+#ifndef USE_CF_FOR_POP_AFTER
     if(GL_TRUE != bHasElse)
     {
         pAsm->alu_x_opcode = SQ_CF_INST_ALU_POP_AFTER;
     }
+#endif /* USE_CF_FOR_POP_AFTER */
 
     pAsm->branch_depth++;
 
@@ -5072,6 +5092,10 @@ GLboolean assemble_IF(r700_AssemblerBase *pAsm)
 
 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;
@@ -5094,7 +5118,9 @@ GLboolean assemble_ELSE(r700_AssemblerBase *pAsm)
     pAsm->fc_stack[pAsm->FCSP].mid[0] = pAsm->cf_current_cf_clause_ptr;
     //pAsm->fc_stack[pAsm->FCSP].unNumMid = 1;
 
+#ifndef USE_CF_FOR_POP_AFTER
     pAsm->alu_x_opcode = SQ_CF_INST_ALU_POP_AFTER;
+#endif /* USE_CF_FOR_POP_AFTER */
 
     pAsm->fc_stack[pAsm->FCSP].first->m_Word0.f.addr = pAsm->pR700Shader->plstCFInstructions_active->uNumOfNode - 1; 
 
@@ -5103,6 +5129,10 @@ GLboolean assemble_ELSE(r700_AssemblerBase *pAsm)
 
 GLboolean assemble_ENDIF(r700_AssemblerBase *pAsm)
 {
+#ifdef USE_CF_FOR_POP_AFTER
+    pops(pAsm, 1);
+#endif /* USE_CF_FOR_POP_AFTER */
+
     pAsm->alu_x_opcode = SQ_CF_INST_ALU;
 
     if(NULL == pAsm->fc_stack[pAsm->FCSP].mid)
@@ -5410,6 +5440,7 @@ GLboolean assemble_BGNSUB(r700_AssemblerBase *pAsm, GLint nILindex)
     pAsm->CALLSTACK[pAsm->CALLSP].FCSP_BeforeEntry = pAsm->FCSP;
     pAsm->CALLSTACK[pAsm->CALLSP].plstCFInstructions_local
                    = &(pAsm->subs[pAsm->unSubArrayPointer].lstCFInstructions_local);
+    pAsm->CALLSTACK[pAsm->CALLSP].stackUsage.bits = 0;
     SetActiveCFlist(pAsm->pR700Shader, 
                     pAsm->CALLSTACK[pAsm->CALLSP].plstCFInstructions_local);
 
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.h b/src/mesa/drivers/dri/r600/r700_assembler.h
index 85d3221..516923f 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.h
+++ b/src/mesa/drivers/dri/r600/r700_assembler.h
@@ -259,6 +259,8 @@ enum
     FC_IF = 1,
     FC_LOOP = 2,
     FC_REP = 3,
+    FC_PUSH_VPM = 4,
+    FC_PUSH_WQM = 5,
 
     COND_NONE = 0,
     COND_BOOL = 1,
@@ -304,12 +306,30 @@ typedef struct CALLER_POINTER
 
 #define SQ_MAX_CALL_DEPTH 0x00000020
 
+typedef struct STACK_USAGE 
+{
+	BITS pushs   :8;
+	BITS current :8;
+	BITS max     :8;
+} STACK_USAGE;
+
+typedef union STACKDWORDtag 
+{
+	BITS        bits;
+	STACK_USAGE su;
+} STACKDWORD;
+
 typedef struct CALL_LEVEL
 {
     unsigned int      FCSP_BeforeEntry;
+    STACKDWORD        stackUsage;
     TypedShaderList * plstCFInstructions_local;
 } CALL_LEVEL;
 
+#define HAS_CURRENT_LOOPRET 0x1L
+#define HAS_LOOPRET         0x2L
+#define LOOPRET_FLAGS       HAS_LOOPRET | HAS_CURRENT_LOOPRET
+
 typedef struct r700_AssemblerBase 
 {
 	R700ControlFlowSXClause*      cf_last_export_ptr;
@@ -429,6 +449,7 @@ typedef struct r700_AssemblerBase
 } r700_AssemblerBase;
 
 //Internal use
+inline void checkStackDepth(r700_AssemblerBase *pAsm, GLuint uReason);
 BITS addrmode_PVSDST(PVSDST * pPVSDST);
 void setaddrmode_PVSDST(PVSDST * pPVSDST, BITS addrmode);
 void nomask_PVSDST(PVSDST * pPVSDST);
diff --git a/src/mesa/drivers/dri/r600/r700_shader.c b/src/mesa/drivers/dri/r600/r700_shader.c
index 2eed1ac..db951e4 100644
--- a/src/mesa/drivers/dri/r600/r700_shader.c
+++ b/src/mesa/drivers/dri/r600/r700_shader.c
@@ -140,7 +140,7 @@ void Init_R700_Shader(R700_Shader * pShader)
 	pShader->killIsUsed = GL_FALSE;
 
 	pShader->uCFOffset = 0;
-	pShader->uStackSize = 0;
+	pShader->uStackSize = 10; //richard test
 	pShader->uMaxCallDepth = 0;
 
 	pShader->bSurfAllocated = GL_FALSE;




More information about the mesa-commit mailing list