diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-12-29 05:28:53 +0100 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-02-28 21:56:42 +0100 |
commit | 758ad3f75d49be811237c297265038f80c16ee8c (patch) | |
tree | 71f3fd600b58f241f8caa9e09caf6ed9a630c693 /src/video_core/renderer_opengl/gl_state_tracker.cpp | |
parent | maxwell_3d: Change write dirty flags to a bitset (diff) | |
download | yuzu-758ad3f75d49be811237c297265038f80c16ee8c.tar yuzu-758ad3f75d49be811237c297265038f80c16ee8c.tar.gz yuzu-758ad3f75d49be811237c297265038f80c16ee8c.tar.bz2 yuzu-758ad3f75d49be811237c297265038f80c16ee8c.tar.lz yuzu-758ad3f75d49be811237c297265038f80c16ee8c.tar.xz yuzu-758ad3f75d49be811237c297265038f80c16ee8c.tar.zst yuzu-758ad3f75d49be811237c297265038f80c16ee8c.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_state_tracker.cpp | 21 |
1 files changed, 21 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 319fd825b..7150b9247 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.cpp +++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp @@ -71,6 +71,26 @@ void SetupDirtyColorMasks(Tables& tables) { FillBlock(tables[1], OFF(color_mask), NUM(color_mask), ColorMasks); } +void SetupDirtyVertexArrays(Tables& tables) { + static constexpr std::size_t num_array = 3; + static constexpr std::size_t instance_base_offset = 3; + for (std::size_t i = 0; i < Regs::NumVertexArrays; ++i) { + const std::size_t array_offset = OFF(vertex_array) + i * NUM(vertex_array[0]); + const std::size_t limit_offset = OFF(vertex_array_limit) + i * NUM(vertex_array_limit[0]); + + FillBlock(tables, array_offset, num_array, VertexBuffer0 + i, VertexBuffers); + FillBlock(tables, limit_offset, NUM(vertex_array_limit), VertexBuffer0 + i, VertexBuffers); + + const std::size_t instance_array_offset = array_offset + instance_base_offset; + tables[0][instance_array_offset] = static_cast<u8>(VertexInstance0 + i); + tables[1][instance_array_offset] = VertexInstances; + + const std::size_t instance_offset = OFF(instanced_arrays) + i; + tables[0][instance_offset] = static_cast<u8>(VertexInstance0 + i); + tables[1][instance_offset] = VertexInstances; + } +} + void SetupDirtyVertexFormat(Tables& tables) { for (std::size_t i = 0; i < Regs::NumVertexAttributes; ++i) { const std::size_t offset = OFF(vertex_attrib_format) + i * NUM(vertex_attrib_format[0]); @@ -115,6 +135,7 @@ void StateTracker::Initialize() { SetupDirtyColorMasks(tables); SetupDirtyViewports(tables); SetupDirtyScissors(tables); + SetupDirtyVertexArrays(tables); SetupDirtyVertexFormat(tables); auto& store = dirty.on_write_stores; |