diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index fd8fba01f..e39341686 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -165,6 +165,11 @@ void VkMarkerRegion::End(VkQueue q) ObjDisp(q)->QueueEndDebugUtilsLabelEXT(Unwrap(q)); } +template <> +VkObjectType objType() +{ + return VK_OBJECT_TYPE_BUFFER; +} template <> VkObjectType objType() { diff --git a/renderdoc/driver/vulkan/vk_shaderdebug.cpp b/renderdoc/driver/vulkan/vk_shaderdebug.cpp index cb26020f7..8b780c7d9 100644 --- a/renderdoc/driver/vulkan/vk_shaderdebug.cpp +++ b/renderdoc/driver/vulkan/vk_shaderdebug.cpp @@ -117,8 +117,8 @@ struct ShaderUniformParameters class VulkanAPIWrapper : public rdcspv::DebugAPIWrapper { public: - VulkanAPIWrapper(WrappedVulkan *vk, VulkanCreationInfo &creation, VkShaderStageFlagBits stage, - uint32_t eid, ResourceId shadId) + VulkanAPIWrapper(WrappedVulkan *vk, VulkanCreationInfo &creation, ShaderStage stage, uint32_t eid, + ResourceId shadId) : m_DebugData(vk->GetReplay()->GetShaderDebugData()), m_Creation(creation), m_EventID(eid), @@ -134,6 +134,9 @@ public: // cache the descriptor access. This should be a superset of all descriptors we need to read from m_Access = replay->GetDescriptorAccess(eid); + // filter to only accesses from the stage we care about, as access lookups will be stage-specific + m_Access.removeIf([stage](const DescriptorAccess &access) { return access.stage != stage; }); + // fetch all descriptor contents now too m_Descriptors.reserve(m_Access.size()); m_SamplerDescriptors.reserve(m_Access.size()); @@ -3965,8 +3968,8 @@ ShaderDebugTrace *VulkanReplay::DebugVertex(uint32_t eventId, uint32_t vertid, u shadRefl.PopulateDisassembly(shader.spirv); - VulkanAPIWrapper *apiWrapper = new VulkanAPIWrapper(m_pDriver, c, VK_SHADER_STAGE_VERTEX_BIT, - eventId, shadRefl.refl->resourceId); + VulkanAPIWrapper *apiWrapper = + new VulkanAPIWrapper(m_pDriver, c, ShaderStage::Vertex, eventId, shadRefl.refl->resourceId); // clamp the view index to the number of multiviews, just to be sure size_t numViews; @@ -4223,8 +4226,8 @@ ShaderDebugTrace *VulkanReplay::DebugPixel(uint32_t eventId, uint32_t x, uint32_ shadRefl.PopulateDisassembly(shader.spirv); - VulkanAPIWrapper *apiWrapper = new VulkanAPIWrapper(m_pDriver, c, VK_SHADER_STAGE_FRAGMENT_BIT, - eventId, shadRefl.refl->resourceId); + VulkanAPIWrapper *apiWrapper = + new VulkanAPIWrapper(m_pDriver, c, ShaderStage::Pixel, eventId, shadRefl.refl->resourceId); std::map &builtins = apiWrapper->builtin_inputs; builtins[ShaderBuiltin::DeviceIndex] = ShaderVariable(rdcstr(), 0U, 0U, 0U, 0U); @@ -4403,6 +4406,8 @@ ShaderDebugTrace *VulkanReplay::DebugPixel(uint32_t eventId, uint32_t x, uint32_ m_BindlessFeedback.FeedbackBuffer.Destroy(); m_BindlessFeedback.FeedbackBuffer.Create(m_pDriver, dev, feedbackStorageSize, 1, flags); + + NameVulkanObject(m_BindlessFeedback.FeedbackBuffer.buf, "m_BindlessFeedback.FeedbackBuffer"); } struct SpecData @@ -4966,8 +4971,8 @@ ShaderDebugTrace *VulkanReplay::DebugThread(uint32_t eventId, shadRefl.PopulateDisassembly(shader.spirv); - VulkanAPIWrapper *apiWrapper = new VulkanAPIWrapper(m_pDriver, c, VK_SHADER_STAGE_COMPUTE_BIT, - eventId, shadRefl.refl->resourceId); + VulkanAPIWrapper *apiWrapper = + new VulkanAPIWrapper(m_pDriver, c, ShaderStage::Compute, eventId, shadRefl.refl->resourceId); uint32_t threadDim[3]; threadDim[0] = shadRefl.refl->dispatchThreadsDimension[0];