summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/engines/maxwell_3d.h6
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.cpp22
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.h4
3 files changed, 16 insertions, 16 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index 8edfa6a34..beaf3ffb6 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -1273,9 +1273,7 @@ public:
1273 1273
1274 /// Notify a memory write has happened. 1274 /// Notify a memory write has happened.
1275 void OnMemoryWrite() { 1275 void OnMemoryWrite() {
1276 for (const u8 store : dirty.on_write_stores) { 1276 dirty.flags |= dirty.on_write_stores;
1277 dirty.flags[store] = true;
1278 }
1279 } 1277 }
1280 1278
1281 enum class MMEDrawMode : u32 { 1279 enum class MMEDrawMode : u32 {
@@ -1295,8 +1293,8 @@ public:
1295 1293
1296 struct { 1294 struct {
1297 std::bitset<std::numeric_limits<u8>::max()> flags; 1295 std::bitset<std::numeric_limits<u8>::max()> flags;
1296 std::bitset<std::numeric_limits<u8>::max()> on_write_stores;
1298 std::array<std::array<u8, Regs::NUM_REGS>, 3> tables{}; 1297 std::array<std::array<u8, Regs::NUM_REGS>, 3> tables{};
1299 std::array<u8, 32> on_write_stores{};
1300 } dirty; 1298 } dirty;
1301 1299
1302private: 1300private:
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp
index 572a43856..319fd825b 100644
--- a/src/video_core/renderer_opengl/gl_state_tracker.cpp
+++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp
@@ -110,23 +110,23 @@ StateTracker::StateTracker(Core::System& system) : system{system} {}
110 110
111void StateTracker::Initialize() { 111void StateTracker::Initialize() {
112 auto& dirty = system.GPU().Maxwell3D().dirty; 112 auto& dirty = system.GPU().Maxwell3D().dirty;
113 std::size_t entry_index = 0;
114 const auto AddEntry = [&dirty, &entry_index](std::size_t dirty_register) {
115 dirty.on_write_stores[entry_index++] = static_cast<u8>(dirty_register);
116 };
117
118 AddEntry(RenderTargets);
119 for (std::size_t i = 0; i < Regs::NumRenderTargets; ++i) {
120 AddEntry(ColorBuffer0 + i);
121 }
122 AddEntry(ZetaBuffer);
123
124 auto& tables = dirty.tables; 113 auto& tables = dirty.tables;
125 SetupDirtyRenderTargets(tables); 114 SetupDirtyRenderTargets(tables);
126 SetupDirtyColorMasks(tables); 115 SetupDirtyColorMasks(tables);
127 SetupDirtyViewports(tables); 116 SetupDirtyViewports(tables);
128 SetupDirtyScissors(tables); 117 SetupDirtyScissors(tables);
129 SetupDirtyVertexFormat(tables); 118 SetupDirtyVertexFormat(tables);
119
120 auto& store = dirty.on_write_stores;
121 store[RenderTargets] = true;
122 store[ZetaBuffer] = true;
123 for (std::size_t i = 0; i < Regs::NumRenderTargets; ++i) {
124 store[ColorBuffer0 + i] = true;
125 }
126 store[VertexBuffers] = true;
127 for (std::size_t i = 0; i < Regs::NumVertexArrays; ++i) {
128 store[VertexBuffer0 + i] = true;
129 }
130} 130}
131 131
132} // namespace OpenGL 132} // namespace OpenGL
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.h b/src/video_core/renderer_opengl/gl_state_tracker.h
index 7add22d88..a368aefd7 100644
--- a/src/video_core/renderer_opengl/gl_state_tracker.h
+++ b/src/video_core/renderer_opengl/gl_state_tracker.h
@@ -4,6 +4,8 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <limits>
8
7#include "common/common_types.h" 9#include "common/common_types.h"
8#include "video_core/dirty_flags.h" 10#include "video_core/dirty_flags.h"
9#include "video_core/engines/maxwell_3d.h" 11#include "video_core/engines/maxwell_3d.h"
@@ -58,7 +60,7 @@ enum : u8 {
58 60
59 Last 61 Last
60}; 62};
61static_assert(Last <= 0xff); 63static_assert(Last <= std::numeric_limits<u8>::max());
62 64
63} // namespace Dirty 65} // namespace Dirty
64 66