]> Chaos Git - corbenik/ctrulib.git/commitdiff
minifix + geoshader stride
authorsmea <smealum@gmail.com>
Sat, 3 Jan 2015 03:39:37 +0000 (19:39 -0800)
committersmea <smealum@gmail.com>
Sat, 3 Jan 2015 03:39:37 +0000 (19:39 -0800)
libctru/include/3ds/gpu/shaderProgram.h
libctru/source/gpu/shaderProgram.c

index b6f031597122af49d0d339110dac04da06e97e8c..c69e14ecf1fa7992eb4dc7591a49dd89c328ffdf 100644 (file)
@@ -24,6 +24,7 @@ typedef struct
 {\r
        shaderInstance_s* vertexShader;\r
        shaderInstance_s* geometryShader;\r
+       u8 geometryShaderInputStride;\r
 }shaderProgram_s;\r
 \r
 Result shaderInstanceInit(shaderInstance_s* si, DVLE_s* dvle);\r
@@ -34,5 +35,5 @@ Result shaderInstanceGetBool(shaderInstance_s* si, int id, bool* value);
 Result shaderProgramInit(shaderProgram_s* sp);\r
 Result shaderProgramFree(shaderProgram_s* sp);\r
 Result shaderProgramSetVsh(shaderProgram_s* sp, DVLE_s* dvle);\r
-Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle);\r
+Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle, u8 stride);\r
 Result shaderProgramUse(shaderProgram_s* sp);\r
index 338c1190405be6b78423571f39eab5612d99300d..cb53476aa4087e37f6b9d95b65de5d2a68c31aa0 100644 (file)
@@ -87,7 +87,7 @@ Result shaderInstanceSetBool(shaderInstance_s* si, int id, bool value)
        if(id<0 || id>15)return -2;\r
 \r
        si->boolUniforms &= ~(1<<id);\r
-       si->boolUniforms |= (!value)<<id;\r
+       si->boolUniforms |= (value)<<id;\r
 \r
        return 0;\r
 }\r
@@ -138,7 +138,7 @@ Result shaderProgramSetVsh(shaderProgram_s* sp, DVLE_s* dvle)
        return shaderInstanceInit(sp->vertexShader, dvle);\r
 }\r
 \r
-Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle)\r
+Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle, u8 stride)\r
 {\r
        if(!sp || !dvle)return -1;\r
        if(dvle->type != GEOMETRY_SHDR)return -2;\r
@@ -148,6 +148,8 @@ Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle)
        sp->geometryShader = (shaderInstance_s*)malloc(sizeof(shaderInstance_s));\r
        if(!sp->geometryShader)return -3;\r
 \r
+       sp->geometryShaderInputStride = stride;\r
+\r
        return shaderInstanceInit(sp->geometryShader, dvle);\r
 }\r
 \r
@@ -201,7 +203,7 @@ Result shaderProgramUse(shaderProgram_s* sp)
                GPU_SetShaderOutmap((u32*)gshDvle->outmapData);\r
 \r
                //GSH input attributes stuff\r
-               GPUCMD_AddWrite(GPUREG_GSH_INPUTBUFFER_CONFIG, 0x08000003);\r
+               GPUCMD_AddWrite(GPUREG_GSH_INPUTBUFFER_CONFIG, 0x08000000|(sp->geometryShaderInputStride-1));\r
                GPUCMD_AddIncrementalWrites(GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW, ((u32[]){0x76543210, 0xFEDCBA98}), 2);\r
 \r
                GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000002);\r