Latte: Refactor legacy OpenGL code for shader binding

This commit is contained in:
Exzap 2023-12-07 13:50:16 +01:00
parent dee764473d
commit 646835346c
14 changed files with 25 additions and 81 deletions

View file

@ -838,7 +838,6 @@ LatteDecompilerShader* LatteShader_CompileSeparablePixelShader(uint64 baseHash,
void LatteSHRC_UpdateVertexShader(uint8* vertexShaderPtr, uint32 vertexShaderSize, bool usesGeometryShader)
{
// todo - should include VTX_SEMANTIC table in state
LatteSHRC_UpdateVSBaseHash(vertexShaderPtr, vertexShaderSize, usesGeometryShader);
uint64 vsAuxHash = 0;
auto itBaseShader = sVertexShaders.find(_shaderBaseHash_vs);
@ -855,15 +854,13 @@ void LatteSHRC_UpdateVertexShader(uint8* vertexShaderPtr, uint32 vertexShaderSiz
LatteGPUState.activeShaderHasError = true;
return;
}
g_renderer->shader_bind(vertexShader->shader);
_activeVertexShader = vertexShader;
}
void LatteSHRC_UpdateGeometryShader(bool usesGeometryShader, uint8* geometryShaderPtr, uint32 geometryShaderSize, uint8* geometryCopyShader, uint32 geometryCopyShaderSize)
{
if (usesGeometryShader == false || _activeVertexShader == nullptr)
if (!usesGeometryShader || !_activeVertexShader)
{
g_renderer->shader_unbind(RendererShader::ShaderType::kGeometry);
_shaderBaseHash_gs = 0;
_activeGeometryShader = nullptr;
return;
@ -887,21 +884,11 @@ void LatteSHRC_UpdateGeometryShader(bool usesGeometryShader, uint8* geometryShad
LatteGPUState.activeShaderHasError = true;
return;
}
g_renderer->shader_bind(geometryShader->shader);
_activeGeometryShader = geometryShader;
}
void LatteSHRC_UpdatePixelShader(uint8* pixelShaderPtr, uint32 pixelShaderSize, bool usesGeometryShader)
{
if (LatteGPUState.contextRegister[mmVGT_STRMOUT_EN] != 0 && g_renderer->GetType() == RendererAPI::OpenGL)
{
if (_activePixelShader)
{
g_renderer->shader_unbind(RendererShader::ShaderType::kFragment);
_activePixelShader = nullptr;
}
return;
}
LatteSHRC_UpdatePSBaseHash(pixelShaderPtr, pixelShaderSize, usesGeometryShader);
uint64 psAuxHash = 0;
auto itBaseShader = sPixelShaders.find(_shaderBaseHash_ps);
@ -918,7 +905,6 @@ void LatteSHRC_UpdatePixelShader(uint8* pixelShaderPtr, uint32 pixelShaderSize,
LatteGPUState.activeShaderHasError = true;
return;
}
g_renderer->shader_bind(pixelShader->shader);
_activePixelShader = pixelShader;
}