char* symbolTableData; ///< Symbol table data.
u8 outmapMask; ///< Output map mask.
u32 outmapData[8]; ///< Output map data.
+ u32 outmapMode; ///< Output map mode.
+ u32 outmapClock; ///< Output map attribute clock.
}DVLE_s;
/// DVLB data.
// finish setting up vertex shader alone\r
GPU_SetShaderOutmap((u32*)vshDvle->outmapData);\r
\r
- GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, 0x00000001); // ?\r
- GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, 0x00000703); // ?\r
+ GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, vshDvle->outmapMode);\r
+ GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, vshDvle->outmapClock);\r
}else{\r
// setup both vertex and geometry shader\r
const DVLE_s* gshDvle = sp->geometryShader->dvle;\r
GPUCMD_AddWrite(GPUREG_GSH_INPUTBUFFER_CONFIG, 0x08000000|(sp->geoShaderInputStride-1));\r
GPUCMD_AddIncrementalWrites(GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW, sp->geoShaderInputPermutation, 2);\r
\r
- GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, 0x00000001); // ?\r
- GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, 0x01030703); // ?\r
+ GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, gshDvle->outmapMode);\r
+ GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, gshDvle->outmapClock);\r
}\r
\r
return 0;\r
u8 numAttr=0;
u8 maxAttr=0;
u8 attrMask=0;
+ u32 attrMode=0;
+ u32 attrClock=0;
for(i=0;i<dvle->outTableSize;i++)
{
}
*out=((*out)&~mask)|(val&mask);
+ switch(dvle->outTableData[i].type)
+ {
+ case RESULT_POSITION:
+ if ((*out & 0xFF0000)==0x020000)
+ attrClock |= BIT(0);
+ break;
+ case RESULT_COLOR:
+ attrClock |= BIT(1);
+ break;
+ case RESULT_TEXCOORD0:
+ attrMode = 1;
+ attrClock |= BIT(8);
+ break;
+ case RESULT_TEXCOORD1:
+ attrMode = 1;
+ attrClock |= BIT(9);
+ break;
+ case RESULT_TEXCOORD2:
+ attrMode = 1;
+ attrClock |= BIT(10);
+ break;
+ case RESULT_TEXCOORD0W:
+ attrMode = 1;
+ attrClock |= BIT(16);
+ break;
+ case RESULT_NORMALQUAT:
+ case RESULT_VIEW:
+ attrClock |= BIT(24);
+ break;
+ }
+
attrMask|=1<<dvle->outTableData[i].regID;
if(dvle->outTableData[i].regID+1>maxAttr)maxAttr=dvle->outTableData[i].regID+1;
}
dvle->outmapData[0]=numAttr;
dvle->outmapMask=attrMask;
+ dvle->outmapMode=attrMode;
+ dvle->outmapClock=attrClock;
}