{\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
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
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
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
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
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