diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index 6785a17b9..9b566cc69 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -2479,7 +2479,7 @@ void ReplayProxy::EnsureTexCached(ResourceId &texid, CompType &typeCast, const S } if(proxyit->second.params.remap != RemapTexture::NoRemap) - typeCast = BaseRemapType(typeCast); + typeCast = BaseRemapType(proxyit->second.params.remap, typeCast); // change texid to the proxy texture's ID for passing to our proxy renderer texid = proxyit->second.id; diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 25b415190..11461de8e 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -2101,19 +2101,17 @@ void D3D11Replay::GetTextureData(ResourceId tex, const Subresource &sub, { if(params.remap == RemapTexture::RGBA8) { - desc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params)); if(IsSRGBFormat(desc.Format) && params.typeCast == CompType::Typeless) desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; } else if(params.remap == RemapTexture::RGBA16) { - desc.Format = - GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params)); } else if(params.remap == RemapTexture::RGBA32) { - desc.Format = - GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params)); } desc.ArraySize = 1; @@ -2263,20 +2261,18 @@ void D3D11Replay::GetTextureData(ResourceId tex, const Subresource &sub, { if(params.remap == RemapTexture::RGBA8) { - desc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params)); if((IsSRGBFormat(desc.Format) || wrapTex->m_RealDescriptor) && params.typeCast == CompType::Typeless) desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; } else if(params.remap == RemapTexture::RGBA16) { - desc.Format = - GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params)); } else if(params.remap == RemapTexture::RGBA32) { - desc.Format = - GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params)); } desc.ArraySize = 1; @@ -2440,19 +2436,17 @@ void D3D11Replay::GetTextureData(ResourceId tex, const Subresource &sub, { if(params.remap == RemapTexture::RGBA8) { - desc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params)); if(IsSRGBFormat(desc.Format) && params.typeCast == CompType::Typeless) desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; } else if(params.remap == RemapTexture::RGBA16) { - desc.Format = - GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params)); } else if(params.remap == RemapTexture::RGBA32) { - desc.Format = - GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params.typeCast)); + desc.Format = GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params)); } } diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index be0962ab1..34cc7b2de 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -3567,19 +3567,17 @@ void D3D12Replay::GetTextureData(ResourceId tex, const Subresource &sub, { if(params.remap == RemapTexture::RGBA8) { - copyDesc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params.typeCast)); + copyDesc.Format = GetTypedFormat(DXGI_FORMAT_R8G8B8A8_TYPELESS, BaseRemapType(params)); if(IsSRGBFormat(copyDesc.Format) && params.typeCast == CompType::Typeless) copyDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; } else if(params.remap == RemapTexture::RGBA16) { - copyDesc.Format = - GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params.typeCast)); + copyDesc.Format = GetTypedFormat(DXGI_FORMAT_R16G16B16A16_TYPELESS, BaseRemapType(params)); } else if(params.remap == RemapTexture::RGBA32) { - copyDesc.Format = - GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params.typeCast)); + copyDesc.Format = GetTypedFormat(DXGI_FORMAT_R32G32B32A32_TYPELESS, BaseRemapType(params)); } // force to 1 mip diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 622e364fb..3b316a881 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -2477,7 +2477,7 @@ void GLReplay::GetTextureData(ResourceId tex, const Subresource &sub, else if(params.remap == RemapTexture::RGBA32) remapFormat = eGL_RGBA32F; - CompType typeCast = BaseRemapType(params.typeCast); + CompType typeCast = BaseRemapType(params); if(typeCast == CompType::Typeless && IsSRGBFormat(intFormat)) typeCast = CompType::UNormSRGB; diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 9bf681974..38b153407 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -3394,7 +3394,7 @@ void VulkanReplay::GetTextureData(ResourceId tex, const Subresource &sub, RDCERR("Unsupported remap format: %u", params.remap); } - imCreateInfo.format = GetViewCastedFormat(imCreateInfo.format, BaseRemapType(params.typeCast)); + imCreateInfo.format = GetViewCastedFormat(imCreateInfo.format, BaseRemapType(params)); if(IsUIntFormat(imCreateInfo.format)) renderFlags |= eTexDisplay_RemapUInt; diff --git a/renderdoc/replay/replay_driver.cpp b/renderdoc/replay/replay_driver.cpp index 3c733c507..a31d06ff3 100644 --- a/renderdoc/replay/replay_driver.cpp +++ b/renderdoc/replay/replay_driver.cpp @@ -62,14 +62,15 @@ static bool PreviousNextExcludedMarker(ActionDescription *action) ActionFlags::SetMarker | ActionFlags::MultiAction)); } -CompType BaseRemapType(CompType typeCast) +CompType BaseRemapType(RemapTexture remap, CompType typeCast) { switch(typeCast) { case CompType::Float: - case CompType::UNorm: case CompType::SNorm: - case CompType::UNormSRGB: return CompType::Float; + case CompType::UNorm: return CompType::Float; + case CompType::UNormSRGB: + return remap == RemapTexture::RGBA8 ? CompType::UNormSRGB : CompType::Float; case CompType::UInt: return CompType::UInt; case CompType::SInt: return CompType::SInt; default: return typeCast; diff --git a/renderdoc/replay/replay_driver.h b/renderdoc/replay/replay_driver.h index 306ac0084..777174ad8 100644 --- a/renderdoc/replay/replay_driver.h +++ b/renderdoc/replay/replay_driver.h @@ -101,7 +101,11 @@ struct GetTextureDataParams DECLARE_REFLECTION_STRUCT(GetTextureDataParams); -CompType BaseRemapType(CompType typeCast); +CompType BaseRemapType(RemapTexture remap, CompType typeCast); +inline CompType BaseRemapType(const GetTextureDataParams ¶ms) +{ + return BaseRemapType(params.remap, params.typeCast); +} class RDCFile;