summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_rasterizer.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2015-10-06 02:52:04 +0200
committerbunnei <bunneidev@gmail.com>2015-10-22 03:53:05 +0200
commit3c057bd3d80b049720b11d0b44391c18870c28e8 (patch)
treea5c141dc0b3ff15d30e3bbd962d08826bbd26b42 /src/video_core/renderer_opengl/gl_rasterizer.h
parentgl_shader_util: Use vec3 constants for AppendColorCombiner. (diff)
downloadyuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.tar
yuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.tar.gz
yuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.tar.bz2
yuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.tar.lz
yuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.tar.xz
yuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.tar.zst
yuzu-3c057bd3d80b049720b11d0b44391c18870c28e8.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.h')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index 19e8db69a..5bc4a319f 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -9,6 +9,7 @@
#include "common/common_types.h"
+#include "video_core/pica.h"
#include "video_core/hwrasterizer_base.h"
#include "video_core/renderer_opengl/gl_rasterizer_cache.h"
#include "video_core/renderer_opengl/gl_state.h"
@@ -37,7 +38,7 @@ struct ShaderCacheKey {
};
Regs::CompareFunc alpha_test_func;
- std::array<Regs::TevStageConfig, 6> tev_stages;
+ std::array<Regs::TevStageConfig, 6> tev_stages = {};
u8 combiner_buffer_input;
bool TevStageUpdatesCombinerBufferColor(unsigned stage_index) const {
@@ -47,6 +48,48 @@ struct ShaderCacheKey {
bool TevStageUpdatesCombinerBufferAlpha(unsigned stage_index) const {
return (stage_index < 4) && ((combiner_buffer_input >> 4) & (1 << stage_index));
}
+
+ static ShaderCacheKey CurrentShaderConfig() {
+ const auto& regs = Pica::g_state.regs;
+ ShaderCacheKey config;
+
+ config.alpha_test_func = regs.output_merger.alpha_test.enable ?
+ regs.output_merger.alpha_test.func.Value() : Pica::Regs::CompareFunc::Always;
+
+ config.tev_stages[0].source_raw = regs.tev_stage0.source_raw;
+ config.tev_stages[1].source_raw = regs.tev_stage1.source_raw;
+ config.tev_stages[2].source_raw = regs.tev_stage2.source_raw;
+ config.tev_stages[3].source_raw = regs.tev_stage3.source_raw;
+ config.tev_stages[4].source_raw = regs.tev_stage4.source_raw;
+ config.tev_stages[5].source_raw = regs.tev_stage5.source_raw;
+
+ config.tev_stages[0].modifier_raw = regs.tev_stage0.modifier_raw;
+ config.tev_stages[1].modifier_raw = regs.tev_stage1.modifier_raw;
+ config.tev_stages[2].modifier_raw = regs.tev_stage2.modifier_raw;
+ config.tev_stages[3].modifier_raw = regs.tev_stage3.modifier_raw;
+ config.tev_stages[4].modifier_raw = regs.tev_stage4.modifier_raw;
+ config.tev_stages[5].modifier_raw = regs.tev_stage5.modifier_raw;
+
+ config.tev_stages[0].op_raw = regs.tev_stage0.op_raw;
+ config.tev_stages[1].op_raw = regs.tev_stage1.op_raw;
+ config.tev_stages[2].op_raw = regs.tev_stage2.op_raw;
+ config.tev_stages[3].op_raw = regs.tev_stage3.op_raw;
+ config.tev_stages[4].op_raw = regs.tev_stage4.op_raw;
+ config.tev_stages[5].op_raw = regs.tev_stage5.op_raw;
+
+ config.tev_stages[0].scale_raw = regs.tev_stage0.scale_raw;
+ config.tev_stages[1].scale_raw = regs.tev_stage1.scale_raw;
+ config.tev_stages[2].scale_raw = regs.tev_stage2.scale_raw;
+ config.tev_stages[3].scale_raw = regs.tev_stage3.scale_raw;
+ config.tev_stages[4].scale_raw = regs.tev_stage4.scale_raw;
+ config.tev_stages[5].scale_raw = regs.tev_stage5.scale_raw;
+
+ config.combiner_buffer_input =
+ regs.tev_combiner_buffer_input.update_mask_rgb.Value() |
+ regs.tev_combiner_buffer_input.update_mask_a.Value() << 4;
+
+ return config;
+ }
};
namespace std {