From a03499d909a2c3c4af7b962e154fd6efd80cad61 Mon Sep 17 00:00:00 2001 From: Benson Joeris Date: Thu, 23 Jan 2020 17:50:55 -0500 Subject: [PATCH] Add SEPARATE_DEPTH_STENCIL_LAYOUTS support in new image state Change-Id: I54458143cd075c0239f55ccb7e50916d725188ec --- renderdoc/driver/vulkan/imagestate_tests.cpp | 2 +- renderdoc/driver/vulkan/vk_core.h | 2 +- renderdoc/driver/vulkan/vk_image_states.cpp | 6 ++++-- renderdoc/driver/vulkan/vk_resources.h | 8 ++++++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/vulkan/imagestate_tests.cpp b/renderdoc/driver/vulkan/imagestate_tests.cpp index 032c6e40e..f8c3e36bf 100644 --- a/renderdoc/driver/vulkan/imagestate_tests.cpp +++ b/renderdoc/driver/vulkan/imagestate_tests.cpp @@ -133,7 +133,7 @@ void CheckSubresourceState(const ImageSubresourceState &substate, TEST_CASE("Test ImageState type", "[imagestate]") { - ImageTransitionInfo transitionInfo(CaptureState::ActiveCapturing, 0); + ImageTransitionInfo transitionInfo(CaptureState::ActiveCapturing, 0, true); VkImage image = (VkImage)123; VkFormat format = VK_FORMAT_D16_UNORM_S8_UINT; VkExtent3D extent = {100, 100, 13}; diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 27784631f..f93dabb13 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -1056,7 +1056,7 @@ public: inline ImageTransitionInfo GetImageTransitionInfo() const { - return ImageTransitionInfo(m_State, m_QueueFamilyIdx); + return ImageTransitionInfo(m_State, m_QueueFamilyIdx, SeparateDepthStencil()); } // Device initialization diff --git a/renderdoc/driver/vulkan/vk_image_states.cpp b/renderdoc/driver/vulkan/vk_image_states.cpp index 9384a46ab..195e24290 100644 --- a/renderdoc/driver/vulkan/vk_image_states.cpp +++ b/renderdoc/driver/vulkan/vk_image_states.cpp @@ -1211,7 +1211,8 @@ void ImageState::ResetToOldState(ImageBarrierSequence &barriers, ImageTransition } if((GetImageInfo().Aspects() & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) == - (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) + (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT) && + !info.separateDepthStencil) { // This is a subresource of a depth and stencil image, and // VK_KHR_separate_depth_stencil_layouts is not enabled, so the barrier needs to include both @@ -1348,7 +1349,8 @@ void ImageState::Transition(const ImageState &dstState, VkAccessFlags srcAccessM VkImageAspectFlags aspectMask = srcRng.aspectMask & dstRng.aspectMask; if((GetImageInfo().Aspects() & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) == - (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) + (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT) && + !info.separateDepthStencil) { // This is a subresource of a depth and stencil image, and // VK_KHR_separate_depth_stencil_layouts is not enabled, so the barrier needs to include diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index e954a6ed6..d7d94cec8 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -1540,8 +1540,12 @@ struct ImageTransitionInfo { CaptureState capState; uint32_t defaultQueueFamilyIndex; - inline ImageTransitionInfo(CaptureState capState, uint32_t defaultQueueFamilyIndex) - : capState(capState), defaultQueueFamilyIndex(defaultQueueFamilyIndex) + bool separateDepthStencil; + inline ImageTransitionInfo(CaptureState capState, uint32_t defaultQueueFamilyIndex, + bool separateDepthStencil) + : capState(capState), + defaultQueueFamilyIndex(defaultQueueFamilyIndex), + separateDepthStencil(separateDepthStencil) { } inline FrameRefCompFunc GetFrameRefCompFunc()