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;
}
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;
@ -66,12 +66,35 @@ s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID)
int i; DVLE_uniformEntry_s* u=dvle->uniformTableData;
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++;
}
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)
{
if(!dvlp)return;