From 52a4489d6508388de50c34b27cd5f646ccd6f24f Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Sun, 16 Apr 2017 21:50:56 -0700 Subject: [PATCH] OpenGL: Pass Pica regs via parameter --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 2 +- src/video_core/renderer_opengl/gl_shader_gen.cpp | 4 +--- src/video_core/renderer_opengl/gl_shader_gen.h | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 150bb5e3c..a47307099 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -1004,7 +1004,7 @@ void RasterizerOpenGL::SamplerInfo::SyncWithConfig( } void RasterizerOpenGL::SetShader() { - GLShader::PicaShaderConfig config = GLShader::PicaShaderConfig::CurrentConfig(); + auto config = GLShader::PicaShaderConfig::BuildFromRegs(Pica::g_state.regs); std::unique_ptr shader = std::make_unique(); // Find (or generate) the GLSL shader for the current TEV state diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 3b2a50f02..54a8dde15 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -24,14 +24,12 @@ using TevStageConfig = TexturingRegs::TevStageConfig; namespace GLShader { -PicaShaderConfig PicaShaderConfig::CurrentConfig() { +PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) { PicaShaderConfig res; auto& state = res.state; std::memset(&state, 0, sizeof(PicaShaderConfig::State)); - const auto& regs = Pica::g_state.regs; - state.scissor_test_mode = regs.rasterizer.scissor_test.mode; state.depthmap_enable = regs.rasterizer.depthmap_enable; diff --git a/src/video_core/renderer_opengl/gl_shader_gen.h b/src/video_core/renderer_opengl/gl_shader_gen.h index e01bd34f9..921d976a1 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.h +++ b/src/video_core/renderer_opengl/gl_shader_gen.h @@ -39,8 +39,8 @@ enum Attributes { */ union PicaShaderConfig { - /// Construct a PicaShaderConfig with the current Pica register configuration. - static PicaShaderConfig CurrentConfig(); + /// Construct a PicaShaderConfig with the given Pica register configuration. + static PicaShaderConfig BuildFromRegs(const Pica::Regs& regs); bool TevStageUpdatesCombinerBufferColor(unsigned stage_index) const { return (stage_index < 4) && (state.combiner_buffer_input & (1 << stage_index)); @@ -58,7 +58,7 @@ union PicaShaderConfig { // This makes BitField not TC when used in a union or struct so we have to resort // to this ugly hack. // Once that bug is fixed we can use Pica::Regs::TevStageConfig here. - // Doesn't include const_color because we don't sync it, see comment in CurrentConfig() + // Doesn't include const_color because we don't sync it, see comment in BuildFromRegs() struct TevStageConfigRaw { u32 sources_raw; u32 modifiers_raw;