diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index e9f04eae0..4783fd257 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -2447,11 +2447,14 @@ void ReplayProxy::EnsureTexCached(ResourceId &texid, CompType &typeCast, const S } const ProxyTextureProperties &proxy = proxyit->second; + const bool allSamples = sub.sample == ~0U; - for(uint32_t sample = 0; sample < proxy.msSamp; sample++) + uint32_t numSamplesToFetch = allSamples ? proxy.msSamp : 1; + for(uint32_t sample = 0; sample < numSamplesToFetch; sample++) { Subresource s = sub; - s.sample = sample; + if(allSamples) + s.sample = sample; TextureCacheEntry sampleArrayEntry = {texid, s}; diff --git a/renderdoc/core/replay_proxy.h b/renderdoc/core/replay_proxy.h index 82a069d81..10d343f29 100644 --- a/renderdoc/core/replay_proxy.h +++ b/renderdoc/core/replay_proxy.h @@ -430,7 +430,12 @@ public: { if(m_Proxy) { - EnsureTexCached(display.resourceId, display.typeCast, display.subresource); + Subresource customShaderSubresource = display.subresource; + // fetch all subsamples in case the custom shader wants to fetch more than simply the active + // subsample + customShaderSubresource.sample = ~0U; + + EnsureTexCached(display.resourceId, display.typeCast, customShaderSubresource); if(display.resourceId == ResourceId()) return ResourceId(); diff --git a/renderdoc/replay/replay_output.cpp b/renderdoc/replay/replay_output.cpp index 7ce41d8ac..99aaf4007 100644 --- a/renderdoc/replay/replay_output.cpp +++ b/renderdoc/replay/replay_output.cpp @@ -691,7 +691,7 @@ void ReplayOutput::Display() disp.linearDisplayAsGamma = true; disp.flipY = false; disp.subresource = m_Thumbnails[i].sub; - disp.subresource.sample = ~0U; + disp.subresource.sample = 0; disp.customShaderId = ResourceId(); disp.resourceId = m_pDevice->GetLiveID(m_Thumbnails[i].texture); disp.typeCast = m_Thumbnails[i].typeCast;