From bc6401f23aca02be200a6e74dcae011f7154280d Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 10 Jan 2020 12:53:21 +0000 Subject: [PATCH] Don't refresh overlay unnecessarily when it's not enabled --- qrenderdoc/Windows/TextureViewer.cpp | 31 ++++++++++++++++------------ renderdoc/replay/replay_output.cpp | 9 ++++---- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index a9bf6904d..0a71bdaa3 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -739,23 +739,28 @@ void TextureViewer::RT_FetchCurrentPixel(IReplayController *r, uint32_t x, uint3 x = qMax(0U, x >> m_TexDisplay.subresource.mip); y = qMax(0U, y >> m_TexDisplay.subresource.mip); - ResourceId overlayResId = m_Output->GetDebugOverlayTexID(); + ResourceId id = m_TexDisplay.resourceId; + Subresource sub = m_TexDisplay.subresource; + CompType typeCast = m_TexDisplay.typeCast; - if((m_TexDisplay.overlay == DebugOverlay::QuadOverdrawDraw || - m_TexDisplay.overlay == DebugOverlay::QuadOverdrawPass || - m_TexDisplay.overlay == DebugOverlay::TriangleSizeDraw || - m_TexDisplay.overlay == DebugOverlay::TriangleSizePass) && - overlayResId != ResourceId()) + if(m_TexDisplay.overlay == DebugOverlay::QuadOverdrawDraw || + m_TexDisplay.overlay == DebugOverlay::QuadOverdrawPass || + m_TexDisplay.overlay == DebugOverlay::TriangleSizeDraw || + m_TexDisplay.overlay == DebugOverlay::TriangleSizePass) { - realValue = - r->PickPixel(overlayResId, x, y, {m_TexDisplay.subresource.mip, 0, 0}, CompType::Typeless); - } - else - { - realValue = - r->PickPixel(m_TexDisplay.resourceId, x, y, m_TexDisplay.subresource, m_TexDisplay.typeCast); + ResourceId overlayResId = m_Output->GetDebugOverlayTexID(); + + if(overlayResId != ResourceId()) + { + id = overlayResId; + sub.sample = 0; + sub.slice = 0; + typeCast = CompType::Typeless; + } } + realValue = r->PickPixel(id, x, y, sub, CompType::Typeless); + if(m_TexDisplay.customShaderId != ResourceId()) { pickValue = r->PickPixel(m_Output->GetCustomShaderTexID(), x, y, diff --git a/renderdoc/replay/replay_output.cpp b/renderdoc/replay/replay_output.cpp index 0f7750da9..777659981 100644 --- a/renderdoc/replay/replay_output.cpp +++ b/renderdoc/replay/replay_output.cpp @@ -92,7 +92,7 @@ ReplayOutput::ReplayOutput(ReplayController *parent, WindowingData window, Repla m_MainOutput.dirty = true; - m_OverlayDirty = true; + m_OverlayDirty = false; m_ForceOverlayRefresh = false; m_pDevice = parent->GetDevice(); @@ -177,8 +177,9 @@ void ReplayOutput::SetTextureDisplay(const TextureDisplay &o) bool wasClearBeforeDraw = (m_RenderData.texDisplay.overlay == DebugOverlay::ClearBeforeDraw || m_RenderData.texDisplay.overlay == DebugOverlay::ClearBeforePass); - if(o.overlay != m_RenderData.texDisplay.overlay || o.typeCast != m_RenderData.texDisplay.typeCast || - o.resourceId != m_RenderData.texDisplay.resourceId) + if(o.overlay != m_RenderData.texDisplay.overlay || + (o.overlay != DebugOverlay::NoOverlay && (o.typeCast != m_RenderData.texDisplay.typeCast || + o.resourceId != m_RenderData.texDisplay.resourceId))) { if(wasClearBeforeDraw) { @@ -211,7 +212,7 @@ void ReplayOutput::SetFrameEvent(int eventId) m_EventID = eventId; - m_OverlayDirty = true; + m_OverlayDirty = (m_RenderData.texDisplay.overlay != DebugOverlay::NoOverlay); m_MainOutput.dirty = true; for(size_t i = 0; i < m_Thumbnails.size(); i++)