Remove NotifyFrameBuffer as we are doing a texception pass every drawcall.
This commit is contained in:
parent
3558c88442
commit
e64fa4d2ea
@ -970,26 +970,17 @@ Surface RasterizerCacheOpenGL::GetColorBufferSurface(std::size_t index, bool pre
|
|||||||
gpu.dirty_flags.color_buffer.reset(index);
|
gpu.dirty_flags.color_buffer.reset(index);
|
||||||
|
|
||||||
ASSERT(index < Tegra::Engines::Maxwell3D::Regs::NumRenderTargets);
|
ASSERT(index < Tegra::Engines::Maxwell3D::Regs::NumRenderTargets);
|
||||||
auto Notify = [&]() {
|
|
||||||
if (last_color_buffers[index] != current_color_buffers[index]) {
|
|
||||||
NotifyFrameBufferChange(current_color_buffers[index]);
|
|
||||||
}
|
|
||||||
last_color_buffers[index] = current_color_buffers[index];
|
|
||||||
};
|
|
||||||
|
|
||||||
if (index >= regs.rt_control.count) {
|
if (index >= regs.rt_control.count) {
|
||||||
Notify();
|
|
||||||
return current_color_buffers[index] = {};
|
return current_color_buffers[index] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (regs.rt[index].Address() == 0 || regs.rt[index].format == Tegra::RenderTargetFormat::NONE) {
|
if (regs.rt[index].Address() == 0 || regs.rt[index].format == Tegra::RenderTargetFormat::NONE) {
|
||||||
Notify();
|
|
||||||
return current_color_buffers[index] = {};
|
return current_color_buffers[index] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const SurfaceParams color_params{SurfaceParams::CreateForFramebuffer(index)};
|
const SurfaceParams color_params{SurfaceParams::CreateForFramebuffer(index)};
|
||||||
|
|
||||||
Notify();
|
|
||||||
return current_color_buffers[index] = GetSurface(color_params, preserve_contents);
|
return current_color_buffers[index] = GetSurface(color_params, preserve_contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1391,18 +1382,6 @@ bool RasterizerCacheOpenGL::PartialReinterpretSurface(Surface triggering_surface
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCacheOpenGL::NotifyFrameBufferChange(Surface triggering_surface) {
|
|
||||||
if (triggering_surface == nullptr)
|
|
||||||
return;
|
|
||||||
if (texception) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Surface intersect = CollideOnReinterpretedSurface(triggering_surface->GetAddr());
|
|
||||||
if (intersect != nullptr) {
|
|
||||||
PartialReinterpretSurface(triggering_surface, intersect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RasterizerCacheOpenGL::SignalPreDrawCall() {
|
void RasterizerCacheOpenGL::SignalPreDrawCall() {
|
||||||
if (texception) {
|
if (texception) {
|
||||||
glTextureBarrier();
|
glTextureBarrier();
|
||||||
|
@ -488,9 +488,6 @@ private:
|
|||||||
/// Tries to get a reserved surface for the specified parameters
|
/// Tries to get a reserved surface for the specified parameters
|
||||||
Surface TryGetReservedSurface(const SurfaceParams& params);
|
Surface TryGetReservedSurface(const SurfaceParams& params);
|
||||||
|
|
||||||
/// When a render target is changed, this method is called with the previous render target
|
|
||||||
void NotifyFrameBufferChange(Surface triggering_surface);
|
|
||||||
|
|
||||||
// Partialy reinterpret a surface based on a triggering_surface that collides with it.
|
// Partialy reinterpret a surface based on a triggering_surface that collides with it.
|
||||||
bool PartialReinterpretSurface(Surface triggering_surface, Surface intersect);
|
bool PartialReinterpretSurface(Surface triggering_surface, Surface intersect);
|
||||||
|
|
||||||
@ -535,7 +532,6 @@ private:
|
|||||||
auto interval = GetReinterpretInterval(r_surface);
|
auto interval = GetReinterpretInterval(r_surface);
|
||||||
reinterpreted_surfaces.insert({interval, r_surface});
|
reinterpreted_surfaces.insert({interval, r_surface});
|
||||||
r_surface->MarkReinterpreted();
|
r_surface->MarkReinterpreted();
|
||||||
run_texception_pass = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Surface CollideOnReinterpretedSurface(VAddr addr) const {
|
Surface CollideOnReinterpretedSurface(VAddr addr) const {
|
||||||
|
Loading…
Reference in New Issue
Block a user