shaderProgram: manage GPUREG_SH_OUTATTR_MODE/CLOCK
This commit is contained in:
parent
f7798302ea
commit
f052d22ceb
@ -76,6 +76,8 @@ typedef struct{
|
|||||||
char* symbolTableData; ///< Symbol table data.
|
char* symbolTableData; ///< Symbol table data.
|
||||||
u8 outmapMask; ///< Output map mask.
|
u8 outmapMask; ///< Output map mask.
|
||||||
u32 outmapData[8]; ///< Output map data.
|
u32 outmapData[8]; ///< Output map data.
|
||||||
|
u32 outmapMode; ///< Output map mode.
|
||||||
|
u32 outmapClock; ///< Output map attribute clock.
|
||||||
}DVLE_s;
|
}DVLE_s;
|
||||||
|
|
||||||
/// DVLB data.
|
/// DVLB data.
|
||||||
|
@ -220,8 +220,8 @@ Result shaderProgramConfigure(shaderProgram_s* sp, bool sendVshCode, bool sendGs
|
|||||||
// finish setting up vertex shader alone
|
// finish setting up vertex shader alone
|
||||||
GPU_SetShaderOutmap((u32*)vshDvle->outmapData);
|
GPU_SetShaderOutmap((u32*)vshDvle->outmapData);
|
||||||
|
|
||||||
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, 0x00000001); // ?
|
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, vshDvle->outmapMode);
|
||||||
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, 0x00000703); // ?
|
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, vshDvle->outmapClock);
|
||||||
}else{
|
}else{
|
||||||
// setup both vertex and geometry shader
|
// setup both vertex and geometry shader
|
||||||
const DVLE_s* gshDvle = sp->geometryShader->dvle;
|
const DVLE_s* gshDvle = sp->geometryShader->dvle;
|
||||||
@ -240,8 +240,8 @@ Result shaderProgramConfigure(shaderProgram_s* sp, bool sendVshCode, bool sendGs
|
|||||||
GPUCMD_AddWrite(GPUREG_GSH_INPUTBUFFER_CONFIG, 0x08000000|(sp->geoShaderInputStride-1));
|
GPUCMD_AddWrite(GPUREG_GSH_INPUTBUFFER_CONFIG, 0x08000000|(sp->geoShaderInputStride-1));
|
||||||
GPUCMD_AddIncrementalWrites(GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW, sp->geoShaderInputPermutation, 2);
|
GPUCMD_AddIncrementalWrites(GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW, sp->geoShaderInputPermutation, 2);
|
||||||
|
|
||||||
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, 0x00000001); // ?
|
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, gshDvle->outmapMode);
|
||||||
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, 0x01030703); // ?
|
GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, gshDvle->outmapClock);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -97,6 +97,8 @@ void DVLE_GenerateOutmap(DVLE_s* dvle)
|
|||||||
u8 numAttr=0;
|
u8 numAttr=0;
|
||||||
u8 maxAttr=0;
|
u8 maxAttr=0;
|
||||||
u8 attrMask=0;
|
u8 attrMask=0;
|
||||||
|
u32 attrMode=0;
|
||||||
|
u32 attrClock=0;
|
||||||
|
|
||||||
for(i=0;i<dvle->outTableSize;i++)
|
for(i=0;i<dvle->outTableSize;i++)
|
||||||
{
|
{
|
||||||
@ -124,10 +126,43 @@ void DVLE_GenerateOutmap(DVLE_s* dvle)
|
|||||||
}
|
}
|
||||||
*out=((*out)&~mask)|(val&mask);
|
*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;
|
attrMask|=1<<dvle->outTableData[i].regID;
|
||||||
if(dvle->outTableData[i].regID+1>maxAttr)maxAttr=dvle->outTableData[i].regID+1;
|
if(dvle->outTableData[i].regID+1>maxAttr)maxAttr=dvle->outTableData[i].regID+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dvle->outmapData[0]=numAttr;
|
dvle->outmapData[0]=numAttr;
|
||||||
dvle->outmapMask=attrMask;
|
dvle->outmapMask=attrMask;
|
||||||
|
dvle->outmapMode=attrMode;
|
||||||
|
dvle->outmapClock=attrClock;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user