SHDR: Support looking up symbol names for integer and boolean registers.
Also add a consistency check in SHDR_GetUniformRegister to make sure the looked up value is in fact a float uniform. SHDR_GetUniformRegister should be renamed to SHDR_GetFloatUniformRegister. However, I haven't done so to preserve backwards compatibility, for now.
This commit is contained in:
parent
27aedd144c
commit
14f999c124
@ -57,7 +57,7 @@ DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID)
|
static s32 SHDR_GetUniformRegisterInternal(DVLB_s* dvlb, const char* name, u8 programID)
|
||||||
{
|
{
|
||||||
if(!dvlb || !name)return -1;
|
if(!dvlb || !name)return -1;
|
||||||
|
|
||||||
@ -66,12 +66,35 @@ s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID)
|
|||||||
int i; DVLE_uniformEntry_s* u=dvle->uniformTableData;
|
int i; DVLE_uniformEntry_s* u=dvle->uniformTableData;
|
||||||
for(i=0;i<dvle->uniformTableSize;i++)
|
for(i=0;i<dvle->uniformTableSize;i++)
|
||||||
{
|
{
|
||||||
if(!strcmp(&dvle->symbolTableData[u->symbolOffset],name))return (s8)u->startReg-0x10;
|
if(!strcmp(&dvle->symbolTableData[u->symbolOffset],name))
|
||||||
|
return u->startReg;
|
||||||
|
|
||||||
u++;
|
u++;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID)
|
||||||
|
{
|
||||||
|
s32 value = SHDR_GetUniformRegisterInternal(dvlb, name, programID);
|
||||||
|
if (value < 0x10 || value > 0x6f) return -1;
|
||||||
|
else return value - 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
s8 SHDR_GetIntUniformRegster(DVLB_s* dvlb, const char* name, u8 programID)
|
||||||
|
{
|
||||||
|
s32 value = SHDR_GetUniformRegisterInternal(dvlb, name, programID);
|
||||||
|
if (value < 0x70 || value > 0x73) return -1;
|
||||||
|
else return value - 0x70;
|
||||||
|
}
|
||||||
|
|
||||||
|
s8 SHDR_GetBoolUniformRegster(DVLB_s* dvlb, const char* name, u8 programID)
|
||||||
|
{
|
||||||
|
s32 value = SHDR_GetUniformRegisterInternal(dvlb, name, programID);
|
||||||
|
if (value < 0x78 || value > 0x87) return -1;
|
||||||
|
else return value - 0x78;
|
||||||
|
}
|
||||||
|
|
||||||
void DVLP_SendCode(DVLP_s* dvlp)
|
void DVLP_SendCode(DVLP_s* dvlp)
|
||||||
{
|
{
|
||||||
if(!dvlp)return;
|
if(!dvlp)return;
|
||||||
|
Loading…
Reference in New Issue
Block a user