Maxwell3D: Rework the dirty system to be more consistant and scaleable

This commit is contained in:
Fernando Sahmkow 2019-07-10 15:38:31 -04:00 committed by FernandoS27
parent 223a535f3f
commit f2e7b29c14
10 changed files with 211 additions and 80 deletions

View file

@ -116,10 +116,10 @@ public:
std::lock_guard lock{mutex};
auto& maxwell3d = system.GPU().Maxwell3D();
if (!maxwell3d.dirty_flags.zeta_buffer) {
if (!maxwell3d.dirty.depth_buffer) {
return depth_buffer.view;
}
maxwell3d.dirty_flags.zeta_buffer = false;
maxwell3d.dirty.depth_buffer = false;
const auto& regs{maxwell3d.regs};
const auto gpu_addr{regs.zeta.Address()};
@ -145,10 +145,10 @@ public:
std::lock_guard lock{mutex};
ASSERT(index < Tegra::Engines::Maxwell3D::Regs::NumRenderTargets);
auto& maxwell3d = system.GPU().Maxwell3D();
if (!maxwell3d.dirty_flags.color_buffer[index]) {
if (!maxwell3d.dirty.render_target[index]) {
return render_targets[index].view;
}
maxwell3d.dirty_flags.color_buffer.reset(index);
maxwell3d.dirty.render_target[index] = false;
const auto& regs{maxwell3d.regs};
if (index >= regs.rt_control.count || regs.rt[index].Address() == 0 ||
@ -272,12 +272,19 @@ protected:
void ManageRenderTargetUnregister(TSurface& surface) {
auto& maxwell3d = system.GPU().Maxwell3D();
<<<<<<< HEAD
const u32 index = surface->GetRenderTarget();
if (index == DEPTH_RT) {
maxwell3d.dirty_flags.zeta_buffer = true;
=======
u32 index = surface->GetRenderTarget();
if (index == 8) {
maxwell3d.dirty.depth_buffer = true;
>>>>>>> Maxwell3D: Rework the dirty system to be more consistant and scaleable
} else {
maxwell3d.dirty_flags.color_buffer.set(index, true);
maxwell3d.dirty.render_target[index] = true;
}
maxwell3d.dirty.render_settings = true;
}
void Register(TSurface surface) {