@@ -1245,6 +1245,7 @@ void LatteSHRC_UpdateActiveShaders()
12451245 _activeVertexShader = shaderStateInfo->vertexShader ;
12461246 _activePixelShader = shaderStateInfo->pixelShader ;
12471247 _activeGeometryShader = shaderStateInfo->geometryShader ;
1248+ LatteGPUState.activeShaderHasError = shaderStateInfo->shaderError ;
12481249 return ;
12491250 }
12501251 for (auto & auxVariant : shaderStateInfo->auxVariants )
@@ -1255,20 +1256,27 @@ void LatteSHRC_UpdateActiveShaders()
12551256 _activeVertexShader = auxVariant.vertexShader ;
12561257 _activePixelShader = auxVariant.pixelShader ;
12571258 _activeGeometryShader = auxVariant.geometryShader ;
1259+ LatteGPUState.activeShaderHasError = shaderStateInfo->shaderError ;
12581260 return ;
12591261 }
12601262 }
12611263 }
12621264 // no cache entry found, get/create shaders individually and add to cache
12631265 LatteFetchShader* fetchShader = LatteSHRC_GetOrCreateFetchShader ();
12641266 _activeFetchShader = fetchShader;
1267+
1268+ // check whether shaders have errors
12651269 bool shaderError = LatteGPUState.activeShaderHasError ;
12661270 LatteDecompilerShader* vertexShader = LatteSHRC_GetOrCreateVertexShader ((uint8*)memory_getPointerFromPhysicalOffset (vsProgramAddr), vsProgramSize, geometryShaderUsed, fetchShader);
1267- shaderError |= LatteGPUState.activeShaderHasError ;
1271+ if (vertexShader)
1272+ shaderError |= vertexShader->hasError ;
12681273 LatteDecompilerShader* pixelShader = LatteSHRC_GetOrCreatePixelShader ((uint8*)memory_getPointerFromPhysicalOffset (psProgramAddr), psProgramSize, geometryShaderUsed);
1269- shaderError |= LatteGPUState.activeShaderHasError ;
1274+ if (pixelShader)
1275+ shaderError |= pixelShader->hasError ;
12701276 LatteDecompilerShader* geometryShader = LatteSHRC_GetOrCreateGeometryShader (geometryShaderUsed, (uint8*)memory_getPointerFromPhysicalOffset (gsProgramAddr), gsProgramSize, (uint8*)memory_getPointerFromPhysicalOffset (copyProgramAddr), copyProgramSize, vertexShader);
1271- shaderError |= LatteGPUState.activeShaderHasError ;
1277+ if (geometryShader)
1278+ shaderError |= geometryShader->hasError ;
1279+
12721280 uint64 combinedAuxHash = CalcCombinedAuxHash (fetchShader, vertexShader, pixelShader);
12731281
12741282 if (!shaderStateInfo)
0 commit comments