r600: add assembler support for literal(inline) constants
[mesa.git] / src / mesa / drivers / dri / r600 / r700_assembler.h
index 7efb346fa7f5fb1144a0673bcef8f484b2cac1a2..3fe65654ca0323a9b9f19ac60c0f5a33a7fc36c4 100644 (file)
@@ -114,20 +114,22 @@ typedef struct PVSDSTtag
 
 typedef struct PVSINSTtag
 {
-    BITS literal      :2; 
+    BITS literal_slots      :2; 
     BITS SaturateMode :2; 
+    BITS index_mode   :3;
 } PVSINST;
 
 typedef struct PVSSRCtag 
 {
-       BITS rtype:4;            
+       BITS rtype:3;            
        BITS addrmode0:1;        
-       BITS reg:10;      //15     (8)
+       BITS reg:10;      //14     (8)
        BITS swizzlex:3;
        BITS swizzley:3;
        BITS swizzlez:3;
-       BITS swizzlew:3;  //27        
+       BITS swizzlew:3;  //26        
 
+       BITS abs:1;
        BITS negx:1;
        BITS negy:1;
        BITS negz:1;
@@ -343,8 +345,10 @@ typedef struct r700_AssemblerBase
        PVSDWORD D;
     PVSDWORD D2;
        PVSDWORD S[3];
+        PVSDWORD C[4];
 
        unsigned int uLastPosUpdate;
+       unsigned int last_cond_register;
 
        OUT_FRAGMENT_FMT_0     fp_stOutFmt0;
 
@@ -415,6 +419,7 @@ typedef struct r700_AssemblerBase
     SHADER_PIPE_TYPE currentShaderType;
     struct prog_instruction * pILInst;
     GLuint             uiCurInst;
+    GLubyte SamplerUnits[MAX_SAMPLERS];
     GLboolean   bR6xx;
     /* helper to decide which type of instruction to assemble */
     GLboolean is_tex;
@@ -435,8 +440,6 @@ typedef struct r700_AssemblerBase
 } r700_AssemblerBase;
 
 //Internal use
-inline void checkStackDepth(r700_AssemblerBase *pAsm, GLuint uReason, GLboolean bCheckMaxOnly);
-inline void decreaseCurrent(r700_AssemblerBase *pAsm, GLuint uReason);
 BITS addrmode_PVSDST(PVSDST * pPVSDST);
 void setaddrmode_PVSDST(PVSDST * pPVSDST, BITS addrmode);
 void nomask_PVSDST(PVSDST * pPVSDST);
@@ -528,10 +531,7 @@ GLboolean check_vector(r700_AssemblerBase* pAsm,
 GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm);
 GLboolean next_ins(r700_AssemblerBase *pAsm);
 
-GLboolean next_ins2(r700_AssemblerBase *pAsm);
-GLboolean assemble_alu_instruction2(r700_AssemblerBase *pAsm);
-
-/* TODO : merge next_ins/2/literal, assemble_alu_instruction/2/literal */
+/* TODO : merge next_ins/literal, assemble_alu_instruction/literal */
 GLboolean next_ins_literal(r700_AssemblerBase *pAsm, GLfloat * pLiteral);
 GLboolean assemble_alu_instruction_literal(r700_AssemblerBase *pAsm, GLfloat * pLiteral);
 
@@ -556,7 +556,7 @@ GLboolean assemble_EXP(r700_AssemblerBase *pAsm);
 GLboolean assemble_FLR(r700_AssemblerBase *pAsm);
 GLboolean assemble_FLR_INT(r700_AssemblerBase *pAsm);
 GLboolean assemble_FRC(r700_AssemblerBase *pAsm);
-GLboolean assemble_KIL(r700_AssemblerBase *pAsm);
+GLboolean assemble_KIL(r700_AssemblerBase *pAsm, GLuint opcode);
 GLboolean assemble_LG2(r700_AssemblerBase *pAsm);
 GLboolean assemble_LRP(r700_AssemblerBase *pAsm);
 GLboolean assemble_LOG(r700_AssemblerBase *pAsm);