diff options
| author | 2020-02-21 01:56:00 -0300 | |
|---|---|---|
| committer | 2020-02-28 17:56:43 -0300 | |
| commit | ac204754d4fe2aaae214025d8f1f40bcb938d74f (patch) | |
| tree | 2d22f37fa52eda5fd66d7420e2c4c674c7b863c1 /src/video_core/renderer_opengl | |
| parent | vk_rasterizer: Pass Maxwell registers to dynamic updates (diff) | |
| download | yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.gz yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.xz yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.zip | |
dirty_flags: Deduplicate code between OpenGL and Vulkan
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state_tracker.cpp | 39 |
1 files changed, 1 insertions, 38 deletions
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp index d5088cfa5..1e43c9ec0 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.cpp +++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp | |||
| @@ -26,39 +26,6 @@ using Regs = Maxwell3D::Regs; | |||
| 26 | using Tables = Maxwell3D::DirtyState::Tables; | 26 | using Tables = Maxwell3D::DirtyState::Tables; |
| 27 | using Table = Maxwell3D::DirtyState::Table; | 27 | using Table = Maxwell3D::DirtyState::Table; |
| 28 | 28 | ||
| 29 | template <typename Integer> | ||
| 30 | void FillBlock(Table& table, std::size_t begin, std::size_t num, Integer dirty_index) { | ||
| 31 | const auto it = std::begin(table) + begin; | ||
| 32 | std::fill(it, it + num, static_cast<u8>(dirty_index)); | ||
| 33 | } | ||
| 34 | |||
| 35 | template <typename Integer1, typename Integer2> | ||
| 36 | void FillBlock(Tables& tables, std::size_t begin, std::size_t num, Integer1 index_a, | ||
| 37 | Integer2 index_b) { | ||
| 38 | FillBlock(tables[0], begin, num, index_a); | ||
| 39 | FillBlock(tables[1], begin, num, index_b); | ||
| 40 | } | ||
| 41 | |||
| 42 | void SetupDirtyRenderTargets(Tables& tables) { | ||
| 43 | static constexpr std::size_t num_per_rt = NUM(rt[0]); | ||
| 44 | static constexpr std::size_t begin = OFF(rt); | ||
| 45 | static constexpr std::size_t num = num_per_rt * Regs::NumRenderTargets; | ||
| 46 | for (std::size_t rt = 0; rt < Regs::NumRenderTargets; ++rt) { | ||
| 47 | FillBlock(tables[0], begin + rt * num_per_rt, num_per_rt, ColorBuffer0 + rt); | ||
| 48 | } | ||
| 49 | FillBlock(tables[1], begin, num, RenderTargets); | ||
| 50 | |||
| 51 | static constexpr std::array zeta_flags{ZetaBuffer, RenderTargets}; | ||
| 52 | for (std::size_t i = 0; i < std::size(zeta_flags); ++i) { | ||
| 53 | const u8 flag = zeta_flags[i]; | ||
| 54 | auto& table = tables[i]; | ||
| 55 | table[OFF(zeta_enable)] = flag; | ||
| 56 | table[OFF(zeta_width)] = flag; | ||
| 57 | table[OFF(zeta_height)] = flag; | ||
| 58 | FillBlock(table, OFF(zeta), NUM(zeta), flag); | ||
| 59 | } | ||
| 60 | } | ||
| 61 | |||
| 62 | void SetupDirtyColorMasks(Tables& tables) { | 29 | void SetupDirtyColorMasks(Tables& tables) { |
| 63 | tables[0][OFF(color_mask_common)] = ColorMaskCommon; | 30 | tables[0][OFF(color_mask_common)] = ColorMaskCommon; |
| 64 | for (std::size_t rt = 0; rt < Regs::NumRenderTargets; ++rt) { | 31 | for (std::size_t rt = 0; rt < Regs::NumRenderTargets; ++rt) { |
| @@ -261,11 +228,7 @@ void StateTracker::Initialize() { | |||
| 261 | SetupDirtyMisc(tables); | 228 | SetupDirtyMisc(tables); |
| 262 | 229 | ||
| 263 | auto& store = dirty.on_write_stores; | 230 | auto& store = dirty.on_write_stores; |
| 264 | store[RenderTargets] = true; | 231 | SetupCommonOnWriteStores(store); |
| 265 | store[ZetaBuffer] = true; | ||
| 266 | for (std::size_t i = 0; i < Regs::NumRenderTargets; ++i) { | ||
| 267 | store[ColorBuffer0 + i] = true; | ||
| 268 | } | ||
| 269 | store[VertexBuffers] = true; | 232 | store[VertexBuffers] = true; |
| 270 | for (std::size_t i = 0; i < Regs::NumVertexArrays; ++i) { | 233 | for (std::size_t i = 0; i < Regs::NumVertexArrays; ++i) { |
| 271 | store[VertexBuffer0 + i] = true; | 234 | store[VertexBuffer0 + i] = true; |