]> Chaos Git - corbenik/ctrulib.git/commitdiff
fixed shaderProgramUse so that programs without geoshaders will play nice with those...
authorsmea <smealum@gmail.com>
Sun, 4 Jan 2015 02:06:22 +0000 (18:06 -0800)
committersmea <smealum@gmail.com>
Sun, 4 Jan 2015 02:06:22 +0000 (18:06 -0800)
libctru/source/gpu/shaderProgram.c

index 66466e551e869d32b0c644016c722435822e0383..95ff7c8703485d9a08e3c41e184b66fd32958d0f 100644 (file)
@@ -168,6 +168,17 @@ Result shaderProgramUse(shaderProgram_s* sp)
 \r
        int i;\r
 \r
+       // configure geostage\r
+       // has to be done first or else VSH registers might only reconfigure 3 of the 4 shader units !\r
+       if(!sp->geometryShader)\r
+       {\r
+               GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000000);\r
+               GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, 0x00000000);\r
+       }else{\r
+               GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000002);\r
+               GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, 0x00000001);\r
+       }\r
+\r
        // setup vertex shader stuff no matter what\r
        const DVLE_s* vshDvle = sp->vertexShader->dvle;\r
        const DVLP_s* vshDvlp = vshDvle->dvlp;\r
@@ -190,9 +201,6 @@ Result shaderProgramUse(shaderProgram_s* sp)
                // finish setting up vertex shader alone\r
                GPU_SetShaderOutmap((u32*)vshDvle->outmapData);\r
 \r
-               GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000000);\r
-               GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, 0x00000000);\r
-\r
                GPUCMD_AddWrite(GPUREG_0064, 0x00000001); // ?\r
                GPUCMD_AddWrite(GPUREG_006F, 0x00000703); // ?\r
        }else{\r
@@ -213,9 +221,6 @@ Result shaderProgramUse(shaderProgram_s* sp)
                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
-               GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, 0x00000001);\r
-\r
                GPUCMD_AddWrite(GPUREG_0064, 0x00000001); // ?\r
                GPUCMD_AddWrite(GPUREG_006F, 0x01030703); // ?\r
        }\r