diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-02-21 05:56:00 +0100 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-02-28 21:56:43 +0100 |
commit | ac204754d4fe2aaae214025d8f1f40bcb938d74f (patch) | |
tree | 2d22f37fa52eda5fd66d7420e2c4c674c7b863c1 /src/video_core/dirty_flags.cpp | |
parent | vk_rasterizer: Pass Maxwell registers to dynamic updates (diff) | |
download | yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.gz yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.bz2 yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.lz yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.xz yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.tar.zst yuzu-ac204754d4fe2aaae214025d8f1f40bcb938d74f.zip |
Diffstat (limited to 'src/video_core/dirty_flags.cpp')
-rw-r--r-- | src/video_core/dirty_flags.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/video_core/dirty_flags.cpp b/src/video_core/dirty_flags.cpp new file mode 100644 index 000000000..4429f3405 --- /dev/null +++ b/src/video_core/dirty_flags.cpp @@ -0,0 +1,46 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <array> +#include <cstddef> + +#include "common/common_types.h" +#include "video_core/dirty_flags.h" + +#define OFF(field_name) MAXWELL3D_REG_INDEX(field_name) +#define NUM(field_name) (sizeof(::Tegra::Engines::Maxwell3D::Regs::field_name) / sizeof(u32)) + +namespace VideoCommon::Dirty { + +using Tegra::Engines::Maxwell3D; + +void SetupCommonOnWriteStores(Tegra::Engines::Maxwell3D::DirtyState::Flags& store) { + store[RenderTargets] = true; + store[ZetaBuffer] = true; + for (std::size_t i = 0; i < Maxwell3D::Regs::NumRenderTargets; ++i) { + store[ColorBuffer0 + i] = true; + } +} + +void SetupDirtyRenderTargets(Tegra::Engines::Maxwell3D::DirtyState::Tables& tables) { + static constexpr std::size_t num_per_rt = NUM(rt[0]); + static constexpr std::size_t begin = OFF(rt); + static constexpr std::size_t num = num_per_rt * Maxwell3D::Regs::NumRenderTargets; + for (std::size_t rt = 0; rt < Maxwell3D::Regs::NumRenderTargets; ++rt) { + FillBlock(tables[0], begin + rt * num_per_rt, num_per_rt, ColorBuffer0 + rt); + } + FillBlock(tables[1], begin, num, RenderTargets); + + static constexpr std::array zeta_flags{ZetaBuffer, RenderTargets}; + for (std::size_t i = 0; i < std::size(zeta_flags); ++i) { + const u8 flag = zeta_flags[i]; + auto& table = tables[i]; + table[OFF(zeta_enable)] = flag; + table[OFF(zeta_width)] = flag; + table[OFF(zeta_height)] = flag; + FillBlock(table, OFF(zeta), NUM(zeta), flag); + } +} + +} // namespace VideoCommon::Dirty |