diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 8edfa6a342..beaf3ffb62 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -1273,9 +1273,7 @@ public: /// Notify a memory write has happened. void OnMemoryWrite() { - for (const u8 store : dirty.on_write_stores) { - dirty.flags[store] = true; - } + dirty.flags |= dirty.on_write_stores; } enum class MMEDrawMode : u32 { @@ -1295,8 +1293,8 @@ public: struct { std::bitset::max()> flags; + std::bitset::max()> on_write_stores; std::array, 3> tables{}; - std::array on_write_stores{}; } dirty; private: diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp index 572a438566..319fd825bb 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} {} void StateTracker::Initialize() { auto& dirty = system.GPU().Maxwell3D().dirty; - std::size_t entry_index = 0; - const auto AddEntry = [&dirty, &entry_index](std::size_t dirty_register) { - dirty.on_write_stores[entry_index++] = static_cast(dirty_register); - }; - - AddEntry(RenderTargets); - for (std::size_t i = 0; i < Regs::NumRenderTargets; ++i) { - AddEntry(ColorBuffer0 + i); - } - AddEntry(ZetaBuffer); - auto& tables = dirty.tables; SetupDirtyRenderTargets(tables); SetupDirtyColorMasks(tables); SetupDirtyViewports(tables); SetupDirtyScissors(tables); SetupDirtyVertexFormat(tables); + + auto& store = dirty.on_write_stores; + store[RenderTargets] = true; + store[ZetaBuffer] = true; + for (std::size_t i = 0; i < Regs::NumRenderTargets; ++i) { + store[ColorBuffer0 + i] = true; + } + store[VertexBuffers] = true; + for (std::size_t i = 0; i < Regs::NumVertexArrays; ++i) { + store[VertexBuffer0 + i] = true; + } } } // 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 7add22d888..a368aefd75 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 @@ #pragma once +#include + #include "common/common_types.h" #include "video_core/dirty_flags.h" #include "video_core/engines/maxwell_3d.h" @@ -58,7 +60,7 @@ enum : u8 { Last }; -static_assert(Last <= 0xff); +static_assert(Last <= std::numeric_limits::max()); } // namespace Dirty