minifix + geoshader stride

This commit is contained in:
smea 2015-01-02 19:39:37 -08:00
parent a1830973c7
commit d195917ec1
2 changed files with 7 additions and 4 deletions

View File

@ -24,6 +24,7 @@ typedef struct
{ {
shaderInstance_s* vertexShader; shaderInstance_s* vertexShader;
shaderInstance_s* geometryShader; shaderInstance_s* geometryShader;
u8 geometryShaderInputStride;
}shaderProgram_s; }shaderProgram_s;
Result shaderInstanceInit(shaderInstance_s* si, DVLE_s* dvle); Result shaderInstanceInit(shaderInstance_s* si, DVLE_s* dvle);
@ -34,5 +35,5 @@ Result shaderInstanceGetBool(shaderInstance_s* si, int id, bool* value);
Result shaderProgramInit(shaderProgram_s* sp); Result shaderProgramInit(shaderProgram_s* sp);
Result shaderProgramFree(shaderProgram_s* sp); Result shaderProgramFree(shaderProgram_s* sp);
Result shaderProgramSetVsh(shaderProgram_s* sp, DVLE_s* dvle); Result shaderProgramSetVsh(shaderProgram_s* sp, DVLE_s* dvle);
Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle); Result shaderProgramSetGsh(shaderProgram_s* sp, DVLE_s* dvle, u8 stride);
Result shaderProgramUse(shaderProgram_s* sp); Result shaderProgramUse(shaderProgram_s* sp);

View File

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