summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2017-04-16 21:50:56 -0700
committerGravatar Yuri Kunde Schlesner2017-04-17 10:34:45 -0700
commit52a4489d6508388de50c34b27cd5f646ccd6f24f (patch)
tree32f4900c9f5e14e690cd7683644f51c08275c3d5 /src
parentOpenGL: Move PicaShaderConfig to gl_shader_gen.h (diff)
downloadyuzu-52a4489d6508388de50c34b27cd5f646ccd6f24f.tar.gz
yuzu-52a4489d6508388de50c34b27cd5f646ccd6f24f.tar.xz
yuzu-52a4489d6508388de50c34b27cd5f646ccd6f24f.zip
OpenGL: Pass Pica regs via parameter
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_shader_gen.cpp4
-rw-r--r--src/video_core/renderer_opengl/gl_shader_gen.h6
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(
1004} 1004}
1005 1005
1006void RasterizerOpenGL::SetShader() { 1006void RasterizerOpenGL::SetShader() {
1007 GLShader::PicaShaderConfig config = GLShader::PicaShaderConfig::CurrentConfig(); 1007 auto config = GLShader::PicaShaderConfig::BuildFromRegs(Pica::g_state.regs);
1008 std::unique_ptr<PicaShader> shader = std::make_unique<PicaShader>(); 1008 std::unique_ptr<PicaShader> shader = std::make_unique<PicaShader>();
1009 1009
1010 // Find (or generate) the GLSL shader for the current TEV state 1010 // 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;
24 24
25namespace GLShader { 25namespace GLShader {
26 26
27PicaShaderConfig PicaShaderConfig::CurrentConfig() { 27PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) {
28 PicaShaderConfig res; 28 PicaShaderConfig res;
29 29
30 auto& state = res.state; 30 auto& state = res.state;
31 std::memset(&state, 0, sizeof(PicaShaderConfig::State)); 31 std::memset(&state, 0, sizeof(PicaShaderConfig::State));
32 32
33 const auto& regs = Pica::g_state.regs;
34
35 state.scissor_test_mode = regs.rasterizer.scissor_test.mode; 33 state.scissor_test_mode = regs.rasterizer.scissor_test.mode;
36 34
37 state.depthmap_enable = regs.rasterizer.depthmap_enable; 35 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 {
39 */ 39 */
40union PicaShaderConfig { 40union PicaShaderConfig {
41 41
42 /// Construct a PicaShaderConfig with the current Pica register configuration. 42 /// Construct a PicaShaderConfig with the given Pica register configuration.
43 static PicaShaderConfig CurrentConfig(); 43 static PicaShaderConfig BuildFromRegs(const Pica::Regs& regs);
44 44
45 bool TevStageUpdatesCombinerBufferColor(unsigned stage_index) const { 45 bool TevStageUpdatesCombinerBufferColor(unsigned stage_index) const {
46 return (stage_index < 4) && (state.combiner_buffer_input & (1 << stage_index)); 46 return (stage_index < 4) && (state.combiner_buffer_input & (1 << stage_index));
@@ -58,7 +58,7 @@ union PicaShaderConfig {
58 // This makes BitField not TC when used in a union or struct so we have to resort 58 // This makes BitField not TC when used in a union or struct so we have to resort
59 // to this ugly hack. 59 // to this ugly hack.
60 // Once that bug is fixed we can use Pica::Regs::TevStageConfig here. 60 // Once that bug is fixed we can use Pica::Regs::TevStageConfig here.
61 // Doesn't include const_color because we don't sync it, see comment in CurrentConfig() 61 // Doesn't include const_color because we don't sync it, see comment in BuildFromRegs()
62 struct TevStageConfigRaw { 62 struct TevStageConfigRaw {
63 u32 sources_raw; 63 u32 sources_raw;
64 u32 modifiers_raw; 64 u32 modifiers_raw;