From 46117ec90a51962b27406bf999b1a2f457e5c02d Mon Sep 17 00:00:00 2001 From: fincs Date: Wed, 15 Feb 2017 00:31:27 +0100 Subject: [PATCH] Fix some cases of GPU freezing when changing programs --- source/base.c | 4 ++-- source/drawElements.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) 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; }