Don't refresh overlay unnecessarily when it's not enabled

This commit is contained in:
baldurk
2020-01-10 12:55:26 +00:00
parent 0b9a4b0100
commit bc6401f23a
2 changed files with 23 additions and 17 deletions
+18 -13
View File
@@ -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,
+5 -4
View File
@@ -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++)