diff --git a/libctru/source/SHDR.c b/libctru/source/SHDR.c index 2ea940f..a1b241b 100644 --- a/libctru/source/SHDR.c +++ b/libctru/source/SHDR.c @@ -121,10 +121,14 @@ void DVLE_SendOutmap(DVLE_s* dvle) int i; u8 numAttr=0; + u8 maxAttr=0; + u8 attrMask=0; //TODO : should probably preprocess this for(i=0;ioutTableSize;i++) { u32* out=¶m[dvle->outTableData[i].regID]; + + if(*out==0x1F1F1F1F)numAttr++; //desc could include masking/swizzling info not currently taken into account //also TODO : map out other output register values @@ -137,10 +141,15 @@ void DVLE_SendOutmap(DVLE_s* dvle) case RESULT_TEXCOORD2: *out=0x1F1F1716; break; } - if(dvle->outTableData[i].regID+1>numAttr)numAttr=dvle->outTableData[i].regID+1; + attrMask|=1<outTableData[i].regID; + if(dvle->outTableData[i].regID+1>maxAttr)maxAttr=dvle->outTableData[i].regID+1; } - GPUCMD_AddSingleParam(0x000F004F, numAttr); + GPUCMD_AddSingleParam(0x000F0251, numAttr-1); //? + GPUCMD_AddSingleParam(0x000F024A, numAttr-1); //? + GPUCMD_AddSingleParam(0x000F02BD, attrMask); //? + GPUCMD_AddSingleParam(0x0001025E, numAttr-1); //? + GPUCMD_AddSingleParam(0x000F004F, numAttr); //? GPUCMD_Add(0x800F0050, param, 0x00000007); }