From 1914a8a02908343bb736185fa3ee6506fe9f0c8e Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 26 May 2016 23:51:09 +0200 Subject: [PATCH] For APIs with proper separate sampler objects use debug names. Refs #273 --- renderdoc/api/replay/d3d11_pipestate.h | 3 +++ renderdoc/api/replay/vk_pipestate.h | 19 +++++++++++++++++++ renderdoc/core/replay_proxy.cpp | 9 +++++++-- renderdoc/driver/d3d11/d3d11_replay.cpp | 9 +++++++++ renderdoc/driver/vulkan/vk_replay.cpp | 10 ++++++++++ renderdocui/Interop/D3D11PipelineState.cs | 5 +++++ renderdocui/Interop/VulkanPipelineState.cs | 4 ++++ .../PipelineState/D3D11PipelineStateViewer.cs | 3 +++ .../VulkanPipelineStateViewer.cs | 2 +- 9 files changed, 61 insertions(+), 3 deletions(-) diff --git a/renderdoc/api/replay/d3d11_pipestate.h b/renderdoc/api/replay/d3d11_pipestate.h index 607b298aa..c8c8eeda6 100644 --- a/renderdoc/api/replay/d3d11_pipestate.h +++ b/renderdoc/api/replay/d3d11_pipestate.h @@ -137,6 +137,7 @@ struct D3D11PipelineState { Sampler() : Samp(), + customSamplerName(false), UseBorder(false), UseComparison(false), MaxAniso(0), @@ -147,6 +148,8 @@ struct D3D11PipelineState BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 0.0f; } ResourceId Samp; + rdctype::str SamplerName; + bool32 customSamplerName; rdctype::str AddressU, AddressV, AddressW; float BorderColor[4]; rdctype::str Comparison; diff --git a/renderdoc/api/replay/vk_pipestate.h b/renderdoc/api/replay/vk_pipestate.h index 7cde64646..92275ebe2 100644 --- a/renderdoc/api/replay/vk_pipestate.h +++ b/renderdoc/api/replay/vk_pipestate.h @@ -45,10 +45,29 @@ struct VulkanPipelineState struct BindingElement { + BindingElement() + : customSamplerName(false), + baseMip(0), + baseLayer(0), + offset(0), + size(0), + mipBias(0.0f), + maxAniso(0.0f), + compareEnable(false), + minlod(0.0f), + maxlod(0.0f), + borderEnable(false), + unnormalized(false) + { + } + ResourceId view; // bufferview, imageview, attachmentview ResourceId res; // buffer, image, attachment ResourceId sampler; + rdctype::str SamplerName; + bool32 customSamplerName; + // image views uint32_t baseMip; uint32_t baseLayer; diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index fb30ec751..d2f3316f7 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -351,6 +351,8 @@ template <> void Serialiser::Serialise(const char *name, D3D11PipelineState::ShaderStage::Sampler &el) { Serialise("", el.Samp); + Serialise("", el.SamplerName); + Serialise("", el.customSamplerName); Serialise("", el.AddressU); Serialise("", el.AddressV); Serialise("", el.AddressW); @@ -364,7 +366,7 @@ void Serialiser::Serialise(const char *name, D3D11PipelineState::ShaderStage::Sa Serialise("", el.MinLOD); Serialise("", el.MipLODBias); - SIZE_CHECK(D3D11PipelineState::ShaderStage::Sampler, 128); + SIZE_CHECK(D3D11PipelineState::ShaderStage::Sampler, 152); } template <> @@ -731,6 +733,9 @@ void Serialiser::Serialise( Serialise("", el.res); Serialise("", el.sampler); + Serialise("", el.SamplerName); + Serialise("", el.customSamplerName); + Serialise("", el.baseMip); Serialise("", el.baseLayer); @@ -753,7 +758,7 @@ void Serialiser::Serialise( Serialise("", el.border); Serialise("", el.unnormalized); - SIZE_CHECK(VulkanPipelineState::Pipeline::DescriptorSet::DescriptorBinding::BindingElement, 216); + SIZE_CHECK(VulkanPipelineState::Pipeline::DescriptorSet::DescriptorBinding::BindingElement, 240); }; template <> diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 2b78e9492..31455c210 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -609,6 +609,15 @@ D3D11PipelineState D3D11Replay::MakePipelineState() if(samp.Samp != ResourceId()) { + samp.SamplerName = GetDebugName(src.Samplers[s]); + samp.customSamplerName = true; + + if(samp.SamplerName.count == 0) + { + samp.customSamplerName = false; + samp.SamplerName = StringFormat::Fmt("Sampler %llu", samp.Samp); + } + D3D11_SAMPLER_DESC desc; src.Samplers[s]->GetDesc(&desc); diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 0a2c53160..f54d603ed 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -3426,8 +3426,18 @@ void VulkanReplay::SavePipelineState() dst.bindings[b].binds[a]; const VulkanCreationInfo::Sampler &sampl = c.m_Sampler[el.sampler]; + ResourceId liveId = el.sampler; + el.sampler = rm->GetOriginalID(el.sampler); + el.customSamplerName = true; + el.SamplerName = m_pDriver->m_CreationInfo.m_Names[liveId]; + if(el.SamplerName.count == 0) + { + el.customSamplerName = false; + el.SamplerName = StringFormat::Fmt("Sampler %llu", el.sampler); + } + // sampler info el.mag = ToStr::Get(sampl.magFilter); el.min = ToStr::Get(sampl.minFilter); diff --git a/renderdocui/Interop/D3D11PipelineState.cs b/renderdocui/Interop/D3D11PipelineState.cs index 599f5686e..5363d5efd 100644 --- a/renderdocui/Interop/D3D11PipelineState.cs +++ b/renderdocui/Interop/D3D11PipelineState.cs @@ -156,6 +156,11 @@ namespace renderdoc public class Sampler { public ResourceId Samp; + + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] + public string SamplerName; + public bool customSamplerName; + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] public string AddressU, AddressV, AddressW; [CustomMarshalAs(CustomUnmanagedType.FixedArray, FixedLength = 4)] diff --git a/renderdocui/Interop/VulkanPipelineState.cs b/renderdocui/Interop/VulkanPipelineState.cs index e166c7123..501d82358 100644 --- a/renderdocui/Interop/VulkanPipelineState.cs +++ b/renderdocui/Interop/VulkanPipelineState.cs @@ -56,6 +56,10 @@ namespace renderdoc public ResourceId res; public ResourceId sampler; + [CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)] + public string SamplerName; + public bool customSamplerName; + public UInt32 baseMip; public UInt32 baseLayer; diff --git a/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs b/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs index c3b205f89..37398fc13 100644 --- a/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs @@ -409,6 +409,9 @@ namespace renderdocui.Windows.PipelineState if (shaderInput != null && shaderInput.name.Length > 0) slotname += ": " + shaderInput.name; + if (s.customSamplerName) + slotname += "(" + s.SamplerName + ")"; + string borderColor = s.BorderColor[0].ToString() + ", " + s.BorderColor[1].ToString() + ", " + s.BorderColor[2].ToString() + ", " + diff --git a/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs b/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs index 3932b4148..eec4b418f 100644 --- a/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs @@ -308,7 +308,7 @@ namespace renderdocui.Windows.PipelineState lod += String.Format(" Bias {0}", descriptor.mipBias); return new object[] { - "", bindset, slotname, "Sampler", "Sampler " + descriptor.sampler.ToString(), + "", bindset, slotname, "Sampler", descriptor.SamplerName, addressing, filter, lod