summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_state_tracker.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2019-12-29 22:14:40 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-02-28 21:56:42 +0100
commitb01dd7d1c86265dd19508ea15e4ff4db31681470 (patch)
tree90cf54950dce4a5fd280336c57bc98e627b09d3d /src/video_core/renderer_opengl/gl_state_tracker.cpp
parentgl_state_tracker: Implement dirty flags for clip distances and shaders (diff)
downloadyuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.tar
yuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.tar.gz
yuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.tar.bz2
yuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.tar.lz
yuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.tar.xz
yuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.tar.zst
yuzu-b01dd7d1c86265dd19508ea15e4ff4db31681470.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp
index bc5942a7f..2da1b65fc 100644
--- a/src/video_core/renderer_opengl/gl_state_tracker.cpp
+++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp
@@ -129,6 +129,21 @@ void SetupDirtyShaders(Tables& tables) {
Shaders);
}
+void SetupDirtyBlend(Tables& tables) {
+ FillBlock(tables[0], OFF(blend_color), NUM(blend_color), BlendColor);
+
+ tables[0][OFF(independent_blend_enable)] = BlendIndependentEnabled;
+
+ for (std::size_t i = 0; i < Regs::NumRenderTargets; ++i) {
+ const std::size_t offset = OFF(independent_blend) + i * NUM(independent_blend[0]);
+ FillBlock(tables[0], offset, NUM(independent_blend[0]), BlendState0 + i);
+
+ tables[0][OFF(blend.enable) + i] = static_cast<u8>(BlendState0 + i);
+ }
+ FillBlock(tables[1], OFF(independent_blend), NUM(independent_blend), BlendStates);
+ FillBlock(tables[1], OFF(blend), NUM(blend), BlendStates);
+}
+
void SetupDirtyMisc(Tables& tables) {
tables[0][OFF(clip_distance_enabled)] = ClipDistances;
}
@@ -147,6 +162,7 @@ void StateTracker::Initialize() {
SetupDirtyVertexArrays(tables);
SetupDirtyVertexFormat(tables);
SetupDirtyShaders(tables);
+ SetupDirtyBlend(tables);
SetupDirtyMisc(tables);
auto& store = dirty.on_write_stores;