]> Chaos Git - corbenik/ctrulib.git/commitdiff
shbin.c cleanup, shaderInstanceGetUniformLocation
authorsmea <smealum@gmail.com>
Sat, 3 Jan 2015 05:22:37 +0000 (21:22 -0800)
committersmea <smealum@gmail.com>
Sat, 3 Jan 2015 05:22:37 +0000 (21:22 -0800)
libctru/include/3ds/gpu/shaderProgram.h
libctru/include/3ds/gpu/shbin.h
libctru/source/gpu/shaderProgram.c
libctru/source/gpu/shbin.c

index c69e14ecf1fa7992eb4dc7591a49dd89c328ffdf..e4a747aaf07e1193ae3188423e30291c99078ba0 100644 (file)
@@ -31,6 +31,7 @@ Result shaderInstanceInit(shaderInstance_s* si, DVLE_s* dvle);
 Result shaderInstanceFree(shaderInstance_s* si);\r
 Result shaderInstanceSetBool(shaderInstance_s* si, int id, bool value);\r
 Result shaderInstanceGetBool(shaderInstance_s* si, int id, bool* value);\r
+Result shaderInstanceGetUniformLocation(shaderInstance_s* si, const char* name);\r
 \r
 Result shaderProgramInit(shaderProgram_s* sp);\r
 Result shaderProgramFree(shaderProgram_s* sp);\r
index ed41114c4354be741ac1cd796af46c29696a9af3..b0555671f17100a0356ffdce451b1034e1360a5e 100644 (file)
@@ -71,14 +71,8 @@ typedef struct{
        DVLE_s* DVLE;
 }DVLB_s;
 
-DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize);
-void SHDR_UseProgram(DVLB_s* dvlb, u8 id);
-void SHDR_FreeDVLB(DVLB_s* dvlb);
-s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID);
+DVLB_s* DVLB_ParseFile(u32* shbinData, u32 shbinSize);
+void DVLB_Free(DVLB_s* dvlb);
 
-void DVLP_SendCode(DVLP_s* dvlp, DVLE_type type);
-void DVLP_SendOpDesc(DVLP_s* dvlp, DVLE_type type);
-
-void DVLE_SendOutmap(DVLE_s* dvle);
-void DVLE_SendConstants(DVLE_s* dvle);
+s8 DVLE_GetUniformRegister(DVLE_s* dvle, const char* name);
 void DVLE_GenerateOutmap(DVLE_s* dvle);
index cb53476aa4087e37f6b9d95b65de5d2a68c31aa0..66466e551e869d32b0c644016c722435822e0383 100644 (file)
@@ -103,6 +103,13 @@ Result shaderInstanceGetBool(shaderInstance_s* si, int id, bool* value)
        return 0;\r
 }\r
 \r
+Result shaderInstanceGetUniformLocation(shaderInstance_s* si, const char* name)\r
+{\r
+       if(!si)return -1;\r
+\r
+       return DVLE_GetUniformRegister(si->dvle, name);\r
+}\r
+\r
 Result shaderProgramInit(shaderProgram_s* sp)\r
 {\r
        if(!sp)return -1;\r
index 9c51f9b54eb7fb1d27b0f9c2e59bcd7e4cfe0244..1875a4dd153c3547c5e1503c4dffb6fd73a00fa4 100644 (file)
@@ -9,7 +9,7 @@
 #include <3ds/gpu/shbin.h>
 
 //please don't feed this an invalid SHBIN
-DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize)
+DVLB_s* DVLB_ParseFile(u32* shbinData, u32 shbinSize)
 {
        if(!shbinData)return NULL;
        DVLB_s* ret=malloc(sizeof(DVLB_s));
@@ -66,17 +66,15 @@ DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize)
 }
 
 //TODO
-void SHDR_FreeDVLB(DVLB_s* dvlb)
+void DVLB_Free(DVLB_s* dvlb)
 {
        if(!dvlb)return;
 
 }
 
-s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID)
+s8 DVLE_GetUniformRegister(DVLE_s* dvle, const char* name)
 {
-       if(!dvlb || !name)return -1;
-
-       DVLE_s* dvle=&dvlb->DVLE[programID];
+       if(!dvle || !name)return -1;
 
        int i;  DVLE_uniformEntry_s* u=dvle->uniformTableData;
        for(i=0;i<dvle->uniformTableSize;i++)
@@ -87,20 +85,6 @@ s8 SHDR_GetUniformRegister(DVLB_s* dvlb, const char* name, u8 programID)
        return -1;
 }
 
-void DVLP_SendCode(DVLP_s* dvlp, DVLE_type type)
-{
-       if(!dvlp)return;
-       
-       GPU_SendShaderCode(type, dvlp->codeData, 0, dvlp->codeSize);
-}
-
-void DVLP_SendOpDesc(DVLP_s* dvlp, DVLE_type type)
-{
-       if(!dvlp)return;
-
-       GPU_SendOperandDescriptors(type, dvlp->opcdescData, 0, dvlp->opdescSize);
-}
-
 void DVLE_GenerateOutmap(DVLE_s* dvle)
 {
        if(!dvle)return;
@@ -145,73 +129,3 @@ void DVLE_GenerateOutmap(DVLE_s* dvle)
        dvle->outmapData[0]=numAttr;
        dvle->outmapMask=attrMask;
 }
-
-void DVLE_SendOutmap(DVLE_s* dvle)
-{
-       if(!dvle)return;
-
-       u32 regOffset=(dvle->type==GEOMETRY_SHDR)?(-0x30):(0x0);
-
-       if(dvle->type==VERTEX_SHDR)
-       {
-               GPUCMD_AddWrite(GPUREG_024A, dvle->outmapData[0]-1); //?
-               GPUCMD_AddWrite(GPUREG_0251, dvle->outmapData[0]-1); //?
-       }
-       
-       GPUCMD_AddWrite(GPUREG_VSH_OUTMAP_MASK+regOffset, dvle->outmapMask);
-       GPU_SetShaderOutmap(dvle->outmapData);
-}
-
-void DVLE_SendConstants(DVLE_s* dvle)
-{
-       if(!dvle)return;
-
-       u32 regOffset=(dvle->type==GEOMETRY_SHDR)?(-0x30):(0x0);
-
-       u32 param[4];
-       u32 rev[3];
-       u8* rev8=(u8*)rev;
-
-       int i;
-       DVLE_constEntry_s* cnst=dvle->constTableData;
-       for(i=0;i<dvle->constTableSize;i++,cnst++)
-       {
-               memcpy(&rev8[0], &cnst->data[0], 3);
-               memcpy(&rev8[3], &cnst->data[1], 3);
-               memcpy(&rev8[6], &cnst->data[2], 3);
-               memcpy(&rev8[9], &cnst->data[3], 3);
-
-               param[0x0]=(cnst->id)&0xFF;
-               param[0x1]=rev[2];
-               param[0x2]=rev[1];
-               param[0x3]=rev[0];
-
-               GPUCMD_AddIncrementalWrites(GPUREG_VSH_FLOATUNIFORM_CONFIG+regOffset, param, 4);
-       }
-}
-
-void SHDR_UseProgram(DVLB_s* dvlb, u8 id)
-{
-       if(!dvlb || id>dvlb->numDVLE)return;
-       DVLE_s* dvle=&dvlb->DVLE[id];
-
-       u32 regOffset=(dvlb->DVLE[id].type==GEOMETRY_SHDR)?(-0x30):(0x0);
-
-       GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000000);
-       GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, (dvlb->DVLE[id].type==GEOMETRY_SHDR)?0x1:0x0);
-
-       DVLP_SendCode(&dvlb->DVLP, dvlb->DVLE[id].type);
-       DVLP_SendOpDesc(&dvlb->DVLP, dvlb->DVLE[id].type);
-       DVLE_SendConstants(dvle);
-
-       GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x8, 0x00000000);
-       GPUCMD_AddWrite(GPUREG_VSH_ENTRYPOINT-regOffset, 0x7FFF0000|(dvle->mainOffset&0xFFFF)); //set entrypoint
-
-       GPUCMD_AddWrite(GPUREG_0252, 0x00000000); // gsh related ?
-
-       DVLE_SendOutmap(dvle);
-
-       //?
-               GPUCMD_AddWrite(GPUREG_0064, 0x00000001);
-               GPUCMD_AddWrite(GPUREG_006F, 0x00000703);
-}