diff --git a/source/base.c b/source/base.c index 5eebb9f..46555e6 100644 --- a/source/base.c +++ b/source/base.c @@ -316,9 +316,9 @@ void C3D_BindProgram(shaderProgram_s* program) if (oldProg) { - if (oldProg->vertexShader->dvle->dvlp != program->vertexShader->dvle->dvlp) - ctx->flags |= C3DiF_VshCode; shaderInstance_s* oldGsh = oldProg->geometryShader; + if (oldProg->vertexShader->dvle->dvlp != program->vertexShader->dvle->dvlp || (!newGsh && oldGsh)) + ctx->flags |= C3DiF_VshCode; if (newGsh && (!oldGsh || oldGsh->dvle->dvlp != newGsh->dvle->dvlp)) ctx->flags |= C3DiF_GshCode; } else diff --git a/source/drawElements.c b/source/drawElements.c index 034cb7e..091b6f4 100644 --- a/source/drawElements.c +++ b/source/drawElements.c @@ -39,6 +39,8 @@ void C3D_DrawElements(GPU_Primitive_t primitive, int count, int type, const void } // Clear the post-vertex cache GPUCMD_AddWrite(GPUREG_VTX_FUNC, 1); + GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 0x8, 0); + GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 0x8, 0); C3Di_GetContext()->flags |= C3DiF_DrawUsed; }