From 4439d50aeb24204f86cca40c4f21572976093fda Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 6 Mar 2023 14:42:00 +0000 Subject: [PATCH] Fix handling of dynamic rendering shading rate attachments. Closes #2877 --- renderdoc/driver/vulkan/vk_state.cpp | 4 ++-- .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_state.cpp b/renderdoc/driver/vulkan/vk_state.cpp index faa6943d2..9fd8cb7a3 100644 --- a/renderdoc/driver/vulkan/vk_state.cpp +++ b/renderdoc/driver/vulkan/vk_state.cpp @@ -96,7 +96,7 @@ void setupRenderingInfo(const VulkanRenderState::DynamicRendering &dynamicRender structs->fragmentDensity = { VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT, NULL, - dynamicRendering.fragmentDensityView, dynamicRendering.fragmentDensityLayout, + Unwrap(dynamicRendering.fragmentDensityView), dynamicRendering.fragmentDensityLayout, }; if(dynamicRendering.fragmentDensityView != VK_NULL_HANDLE) @@ -108,7 +108,7 @@ void setupRenderingInfo(const VulkanRenderState::DynamicRendering &dynamicRender structs->shadingRate = { VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, NULL, - dynamicRendering.shadingRateView, + Unwrap(dynamicRendering.shadingRateView), dynamicRendering.shadingRateLayout, dynamicRendering.shadingRateTexelSize, }; diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 463fd2b0b..3aec55930 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -7155,6 +7155,26 @@ void WrappedVulkan::vkCmdBeginRendering(VkCommandBuffer commandBuffer, record->AddChunk(scope.Get(&record->cmdInfo->alloc)); + VkRenderingFragmentDensityMapAttachmentInfoEXT *densityMap = + (VkRenderingFragmentDensityMapAttachmentInfoEXT *)FindNextStruct( + pRenderingInfo, VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT); + + if(densityMap) + { + VkResourceRecord *viewRecord = GetRecord(densityMap->imageView); + record->MarkImageViewFrameReferenced(viewRecord, ImageRange(), eFrameRef_Read); + } + + VkRenderingFragmentShadingRateAttachmentInfoKHR *shadingRate = + (VkRenderingFragmentShadingRateAttachmentInfoKHR *)FindNextStruct( + pRenderingInfo, VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR); + + if(shadingRate) + { + VkResourceRecord *viewRecord = GetRecord(shadingRate->imageView); + record->MarkImageViewFrameReferenced(viewRecord, ImageRange(), eFrameRef_Read); + } + for(uint32_t i = 0; i < pRenderingInfo->colorAttachmentCount + 2; i++) { const VkRenderingAttachmentInfo *att = pRenderingInfo->pColorAttachments + i;