From 49788f34a14582a6af6dcba592b913abe1cb7698 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 16 Jul 2020 16:18:58 +0100 Subject: [PATCH] Add const overload of subresource state lookup by aspect * We also rename these functions to be distinct, since it's too easy for an aspect bit to be automatically cast to an aspect index. --- renderdoc/driver/vulkan/vk_image_states.cpp | 6 ++-- renderdoc/driver/vulkan/vk_manager.cpp | 2 +- renderdoc/driver/vulkan/vk_resources.h | 31 ++++++++++++++------- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_image_states.cpp b/renderdoc/driver/vulkan/vk_image_states.cpp index 045c8731c..93397a1ad 100644 --- a/renderdoc/driver/vulkan/vk_image_states.cpp +++ b/renderdoc/driver/vulkan/vk_image_states.cpp @@ -710,7 +710,7 @@ template Pair *ImageSubresourceMap::SubresourceRangeIterTemplate::operator->() { FixSubRange(); - m_value.m_state = &m_map->SubresourceValue(m_aspectIndex, m_level, m_layer, m_slice); + m_value.m_state = &m_map->SubresourceIndexValue(m_aspectIndex, m_level, m_layer, m_slice); return &m_value; } template ImageSubresourceMap::SubresourcePairRef *ImageSubresourceMap::SubresourceRangeIterTemplate< @@ -722,7 +722,7 @@ template Pair &ImageSubresourceMap::SubresourceRangeIterTemplate::operator*() { FixSubRange(); - m_value.m_state = &m_map->SubresourceValue(m_aspectIndex, m_level, m_layer, m_slice); + m_value.m_state = &m_map->SubresourceIndexValue(m_aspectIndex, m_level, m_layer, m_slice); return m_value; } template ImageSubresourceMap::SubresourcePairRef &ImageSubresourceMap::SubresourceRangeIterTemplate< @@ -1467,7 +1467,7 @@ InitReqType ImageState::MaxInitReq(const ImageSubresourceRange &range, InitPolic VkImageLayout ImageState::GetImageLayout(VkImageAspectFlagBits aspect, uint32_t mipLevel, uint32_t arrayLayer) const { - return subresourceStates.SubresourceValue(aspect, mipLevel, arrayLayer, 0).newLayout; + return subresourceStates.SubresourceAspectValue(aspect, mipLevel, arrayLayer, 0).newLayout; } void ImageState::BeginCapture() diff --git a/renderdoc/driver/vulkan/vk_manager.cpp b/renderdoc/driver/vulkan/vk_manager.cpp index 3780896aa..96e37c872 100644 --- a/renderdoc/driver/vulkan/vk_manager.cpp +++ b/renderdoc/driver/vulkan/vk_manager.cpp @@ -381,7 +381,7 @@ void VulkanResourceManager::SerialiseImageStates(SerialiserType &ser, ++it, ++aspectIndex) { } - auto currentSub = current->subresourceStates.SubresourceValue( + auto currentSub = current->subresourceStates.SubresourceIndexValue( aspectIndex, subit->range().baseMipLevel, subit->range().baseArrayLayer, subit->range().baseDepthSlice); RDCASSERT(currentSub.refType == subit->state().refType || diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index 604853348..e5a469140 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -1449,27 +1449,38 @@ public: void FromImgRefs(const ImgRefs &imgRefs); - inline ImageSubresourceState &SubresourceValue(uint32_t aspectIndex, uint32_t level, - uint32_t layer, uint32_t slice) + inline ImageSubresourceState &SubresourceIndexValue(uint32_t aspectIndex, uint32_t level, + uint32_t layer, uint32_t slice) { return m_values[SubresourceIndex(aspectIndex, level, layer, slice)]; } - inline ImageSubresourceState &SubresourceValue(VkImageAspectFlagBits aspect, uint32_t level, - uint32_t layer, uint32_t slice) + inline const ImageSubresourceState &SubresourceIndexValue(uint32_t aspectIndex, uint32_t level, + uint32_t layer, uint32_t slice) const + { + return m_values[SubresourceIndex(aspectIndex, level, layer, slice)]; + } + inline ImageSubresourceState &SubresourceAspectValue(VkImageAspectFlagBits aspect, uint32_t level, + uint32_t layer, uint32_t slice) { uint32_t aspectIndex = 0; for(auto it = ImageAspectFlagIter::begin(GetImageInfo().Aspects()); it != ImageAspectFlagIter::end() && *it != aspect; ++it, ++aspectIndex) { } - return SubresourceValue(aspectIndex, level, layer, slice); + return SubresourceIndexValue(aspectIndex, level, layer, slice); + } + inline const ImageSubresourceState &SubresourceAspectValue(VkImageAspectFlagBits aspect, + uint32_t level, uint32_t layer, + uint32_t slice) const + { + uint32_t aspectIndex = 0; + for(auto it = ImageAspectFlagIter::begin(GetImageInfo().Aspects()); + it != ImageAspectFlagIter::end() && *it != aspect; ++it, ++aspectIndex) + { + } + return SubresourceIndexValue(aspectIndex, level, layer, slice); } - inline const ImageSubresourceState &SubresourceValue(uint32_t aspectIndex, uint32_t level, - uint32_t layer, uint32_t slice) const - { - return m_values[SubresourceIndex(aspectIndex, level, layer, slice)]; - } inline void Split(const ImageSubresourceRange &range) { Split(range.aspectMask != GetImageInfo().Aspects(),