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_Finalize();
void GPU_SetUniform(u32 startreg, u32* data, u32 numreg);
#endif

View File

@ -47,4 +47,13 @@ typedef struct{
DVLE_s* DVLE;
}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

View File

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