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.
This commit is contained in:
baldurk
2020-07-16 20:45:20 +01:00
parent 5a9fe05bb7
commit 49788f34a1
3 changed files with 25 additions and 14 deletions
+3 -3
View File
@@ -710,7 +710,7 @@ template <typename Map, typename Pair>
Pair *ImageSubresourceMap::SubresourceRangeIterTemplate<Map, Pair>::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 <typename Map, typename Pair>
Pair &ImageSubresourceMap::SubresourceRangeIterTemplate<Map, Pair>::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()
+1 -1
View File
@@ -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 ||
+21 -10
View File
@@ -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(),