00001 #ifndef __VTXPROG_COMMON_H__ 00002 #define __SHADER_COMMON_H__ 00003 00029 typedef struct _ShaderFunc ShaderFunc; 00030 00031 typedef enum { 00032 SRF_NONE, 00033 SRF_TEMP, 00034 SRF_ATTRIB, 00035 SRF_CONST, 00036 SRF_RESULT, 00037 SRF_ADDRESS, 00038 SRF_TEXUNIT, 00039 SRF_UNKNOWN 00040 } ShaderRegFile; 00041 00042 typedef enum { 00043 SOP_UNKNOWN = 0, 00044 SOP_NOP, 00045 SOP_ABS, SOP_ADD, SOP_ARA, SOP_ARL, SOP_ARR, 00046 SOP_BRA, SOP_BRK, 00047 SOP_CAL, SOP_CMP, SOP_COS, 00048 SOP_DDX, SOP_DDY, SOP_DIV, SOP_DP2, SOP_DP2A, SOP_DP3, SOP_DP4, SOP_DPH, 00049 SOP_DST, 00050 SOP_EX2, SOP_EXP, 00051 SOP_FLR, SOP_FRC, 00052 SOP_IF, 00053 SOP_KIL, 00054 SOP_LG2, SOP_LIT, SOP_LOG, SOP_LOOP, SOP_LRP, 00055 SOP_MAD, SOP_MAX, SOP_MIN, SOP_MOV, SOP_MUL, 00056 SOP_NRM, 00057 SOP_PK2H, SOP_PK2US, SOP_PK4B, SOP_PK4UB, SOP_POW, SOP_POPA, SOP_PUSHA, 00058 SOP_RCC, SOP_RCP, SOP_REP, SOP_RET, SOP_RFL, SOP_RSQ, 00059 SOP_SCS, SOP_SEQ, SOP_SFL, SOP_SGE, SOP_SGT, SOP_SIN, SOP_SLE, SOP_SLT, 00060 SOP_SNE, SOP_SSG, SOP_STR, SOP_SUB, SOP_SWZ, 00061 SOP_TEX, SOP_TXB, SOP_TXD, SOP_TXL, SOP_TXP, 00062 SOP_UP2H, SOP_UP2US, SOP_UP4B, SOP_UP4UB, 00063 SOP_X2D, SOP_XPD 00064 } ShaderOpcode; 00065 00066 typedef enum { 00067 SP_FLOAT32, 00068 SP_FLOAT16, 00069 SP_FIXED12, 00070 SP_UNKNOWN 00071 } ShaderPrecision; 00072 00073 typedef enum { 00074 SSC_X, SSC_Y, SSC_Z, SSC_W, 00075 } ShaderSwzComp; 00076 00077 typedef struct _ShaderRegSwz { 00078 ShaderSwzComp x, y, z, w; 00079 } ShaderRegSwz; 00080 00081 typedef enum { 00082 SR_POSITION, 00083 SR_WEIGHT, 00084 SR_NORMAL, 00085 SR_COL0, 00086 SR_COL1, 00087 SR_BFC0, 00088 SR_BFC1, 00089 SR_FOGCOORD, 00090 SR_POINTSZ, 00091 SR_TEXCOORD0, 00092 SR_TEXCOORD1, 00093 SR_TEXCOORD2, 00094 SR_TEXCOORD3, 00095 SR_TEXCOORD4, 00096 SR_TEXCOORD5, 00097 SR_TEXCOORD6, 00098 SR_TEXCOORD7, 00099 SR_FRAGDATA0, 00100 SR_FRAGDATA1, 00101 SR_FRAGDATA2, 00102 SR_FRAGDATA3, 00103 SR_UNKNOWN 00104 } ShaderFixedReg; 00105 00106 typedef enum { 00107 SC_FL, SC_LT, SC_EQ, SC_LE, SC_GT, SC_NE, SC_GE, SC_TR, 00108 SC_UNKNOWN 00109 } ShaderCond; 00110 00111 #define SMASK_X (1<<0) 00112 #define SMASK_Y (1<<1) 00113 #define SMASK_Z (1<<2) 00114 #define SMASK_W (1<<3) 00115 #define SMASK_ALL (SMASK_X|SMASK_Y|SMASK_Z|SMASK_W) 00116 00117 #define SPOS_ADDRESS 3 00118 #define SPOS_TEXUNIT 4 00119 struct _op_xlat { 00120 unsigned int NV; 00121 ShaderOpcode SOP; 00122 int srcpos[3]; 00123 }; 00124 #define MOD_OPCODE(t,hw,sop,s0,s1,s2) do { \ 00125 t[hw].NV = hw; \ 00126 t[hw].SOP = sop; \ 00127 t[hw].srcpos[0] = s0; \ 00128 t[hw].srcpos[1] = s1; \ 00129 t[hw].srcpos[2] = s2; \ 00130 } while(0) 00131 00132 extern unsigned int NVVP_TX_VOP_COUNT; 00133 extern unsigned int NVVP_TX_SOP_COUNT; 00134 extern struct _op_xlat NVVP_TX_VOP[]; 00135 extern struct _op_xlat NVVP_TX_SOP[]; 00136 00137 struct _ShaderFunc { 00138 unsigned int * inst; 00139 struct _op_xlat*(*GetOPTXRec) (ShaderFunc *, int merged); 00140 00141 int (*HasMergedInst) (ShaderFunc *); 00142 int (*IsLastInst) (ShaderFunc *); 00143 int (*GetOffsetNext) (ShaderFunc *); 00144 00145 int (*GetOpcodeSlot) (ShaderFunc *, int merged); 00146 unsigned int (*GetOpcodeHW) (ShaderFunc *, int slot); 00147 ShaderOpcode (*GetOpcode) (ShaderFunc *, int merged); 00148 00149 ShaderPrecision (*GetPrecision) (ShaderFunc *); 00150 int (*GetSaturate) (ShaderFunc *); 00151 00152 ShaderRegFile (*GetDestFile) (ShaderFunc *, int merged); 00153 unsigned int (*GetDestID) (ShaderFunc *, int merged); 00154 unsigned int (*GetDestMask) (ShaderFunc *, int merged); 00155 00156 unsigned int (*GetSourceHW) (ShaderFunc *, int merged, int pos); 00157 ShaderRegFile (*GetSourceFile) (ShaderFunc *, int merged, int pos); 00158 int (*GetSourceID) (ShaderFunc *, int merged, int pos); 00159 int (*GetSourceNegate) (ShaderFunc *, int merged, int pos); 00160 int (*GetSourceAbs) (ShaderFunc *, int merged, int pos); 00161 ShaderRegSwz (*GetSourceSwizzle) (ShaderFunc *, int merged, int pos); 00162 int (*GetSourceIndexed) (ShaderFunc *, int merged, int pos); 00163 void (*GetSourceConstVal) (ShaderFunc *, int merged, int pos, float *val); 00164 int (*GetSourceScale) (ShaderFunc *, int merged, int pos); 00165 00166 int (*GetRelAddressRegID) (ShaderFunc *); 00167 ShaderSwzComp (*GetRelAddressSwizzle) (ShaderFunc *); 00168 00169 int (*SupportsConditional) (ShaderFunc *); 00170 int (*GetConditionUpdate) (ShaderFunc *); 00171 int (*GetConditionTest) (ShaderFunc *); 00172 ShaderCond (*GetCondition) (ShaderFunc *); 00173 ShaderRegSwz (*GetCondRegSwizzle) (ShaderFunc *); 00174 int (*GetCondRegID) (ShaderFunc *); 00175 00176 int (*GetBranch) (ShaderFunc *); 00177 int (*GetBranchElse) (ShaderFunc *); 00178 int (*GetBranchEnd) (ShaderFunc *); 00179 00180 int (*GetLoopCount) (ShaderFunc *); 00181 int (*GetLoopInitial) (ShaderFunc *); 00182 int (*GetLoopIncrement) (ShaderFunc *); 00183 }; 00184 00185 extern void NV20VPInitShaderFuncs(ShaderFunc *); 00186 extern void NV30VPInitShaderFuncs(ShaderFunc *); 00187 extern void NV40VPInitShaderFuncs(ShaderFunc *); 00188 00189 extern void NV30FPInitShaderFuncs(ShaderFunc *); 00190 00191 #endif