diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state_tracker.cpp | 22 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state_tracker.h | 4 |
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 | ||
| 1302 | private: | 1300 | private: |
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 | ||
| 111 | void StateTracker::Initialize() { | 111 | void 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 | }; |
| 61 | static_assert(Last <= 0xff); | 63 | static_assert(Last <= std::numeric_limits<u8>::max()); |
| 62 | 64 | ||
| 63 | } // namespace Dirty | 65 | } // namespace Dirty |
| 64 | 66 | ||