GPU : GPU_SetUniform

This commit is contained in:
smea 2014-03-09 16:38:55 +01:00
parent 5683e006d0
commit 0761e6db1e
4 changed files with 43 additions and 24 deletions

View File

@ -9,4 +9,6 @@ void GPUCMD_Add(u32 cmd, u32* param, u32 paramlength);
void GPUCMD_AddSingleParam(u32 cmd, u32 param); void GPUCMD_AddSingleParam(u32 cmd, u32 param);
void GPUCMD_Finalize(); void GPUCMD_Finalize();
void GPU_SetUniform(u32 startreg, u32* data, u32 numreg);
#endif #endif

View File

@ -47,4 +47,13 @@ typedef struct{
DVLE_s* DVLE; DVLE_s* DVLE;
}DVLB_s; }DVLB_s;
DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize);
void SHDR_FreeDVLB(DVLB_s* dvlb);
void DVLP_SendCode(DVLP_s* dvlp);
void DVLP_SendOpDesc(DVLP_s* dvlp);
void DVLE_SendOutmap(DVLE_s* dvle);
#endif #endif

View File

@ -69,3 +69,11 @@ void GPUCMD_Finalize()
GPUCMD_AddSingleParam(0x000F0110, 0x00000001); GPUCMD_AddSingleParam(0x000F0110, 0x00000001);
GPUCMD_AddSingleParam(0x000F0010, 0x12345678); GPUCMD_AddSingleParam(0x000F0010, 0x12345678);
} }
void GPU_SetUniform(u32 startreg, u32* data, u32 numreg)
{
if(!data)return;
GPUCMD_AddSingleParam(0x000F02C0, 0x80000000|startreg);
GPUCMD_Add(0x000F02C1, data, numreg*4);
}

View File

@ -15,35 +15,35 @@ DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize)
DVLB_s* ret=malloc(sizeof(DVLB_s)); DVLB_s* ret=malloc(sizeof(DVLB_s));
if(!ret)goto exit; if(!ret)goto exit;
//parse DVLB // //parse DVLB
ret->numDVLE=shbinData[1]; // ret->numDVLE=shbinData[1];
ret->DVLE=malloc(sizeof(DVLE_s)*ret->numDVLE); // ret->DVLE=malloc(sizeof(DVLE_s)*ret->numDVLE);
if(!ret->DVLE)goto clean1; // if(!ret->DVLE)goto clean1;
//parse DVLP // //parse DVLP
u32* dvlpData=&shbinData[2+ret->numDVLE]; // u32* dvlpData=&shbinData[2+ret->numDVLE];
ret->DVLP.codeSize=dvlpData[3]; // ret->DVLP.codeSize=dvlpData[3];
ret->DVLP.codeData=&dvlpData[dvlpData[2]/4]; // ret->DVLP.codeData=&dvlpData[dvlpData[2]/4];
ret->DVLP.opdescSize=dvlpData[5]; // ret->DVLP.opdescSize=dvlpData[5];
ret->DVLP.opcdescData=&dvlpData[dvlpData[4]/4]; // ret->DVLP.opcdescData=&dvlpData[dvlpData[4]/4];
//parse DVLE // //parse DVLE
int i; // int i;
for(i=0;i<ret->numDVLE;i++) // for(i=0;i<ret->numDVLE;i++)
{ // {
DVLE_s* dvle=&ret->DVLE[i]; // DVLE_s* dvle=&ret->DVLE[i];
u32* dvleData=&shbinData[shbinData[2+i]/4]; // u32* dvleData=&shbinData[shbinData[2+i]/4];
dvle->type=(dvleData[1]>>16)&0xFF; // dvle->type=(dvleData[1]>>16)&0xFF;
dvle->mainOffset=dvleData[2]; // dvle->mainOffset=dvleData[2];
dvle->endmainOffset=dvleData[3]; // dvle->endmainOffset=dvleData[3];
dvle->constTableSize=dvleData[7]; // dvle->constTableSize=dvleData[7];
dvle->constTableData=(DVLE_constEntry_s*)&dvleData[dvleData[6]/4]; // dvle->constTableData=(DVLE_constEntry_s*)&dvleData[dvleData[6]/4];
dvle->outTableSize=dvleData[11]; // dvle->outTableSize=dvleData[11];
dvle->outTableData=(DVLE_outEntry_s*)&dvleData[dvleData[10]/4]; // dvle->outTableData=(DVLE_outEntry_s*)&dvleData[dvleData[10]/4];
} // }
clean1: clean1:
free(ret); free(ret);