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:
Tony Wasserka 2015-03-01 16:22:27 +01:00 committed by Tony Wasserka
parent 27aedd144c
commit 14f999c124

View File

@ -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;