| 147 | } |
| 148 | |
| 149 | void BestPractices::QueueValidateImage(QueueCallbacks& funcs, const Location& loc, vvl::Image& image_state, |
| 150 | IMAGE_SUBRESOURCE_USAGE_BP usage, const VkImageSubresourceRange& subresource_range) { |
| 151 | // If we're viewing a 3D slice, ignore base array layer. |
| 152 | // The entire 3D subresource is accessed as one atomic unit. |
| 153 | const uint32_t base_array_layer = image_state.GetImageType() == VK_IMAGE_TYPE_3D ? 0 : subresource_range.baseArrayLayer; |
| 154 | |
| 155 | const uint32_t max_layers = image_state.GetArrayLayers() - base_array_layer; |
| 156 | const uint32_t array_layers = std::min(subresource_range.layerCount, max_layers); |
| 157 | const uint32_t max_levels = image_state.GetMipLevels() - subresource_range.baseMipLevel; |
| 158 | const uint32_t mip_levels = std::min(image_state.GetMipLevels(), max_levels); |
| 159 | |
| 160 | for (uint32_t layer = 0; layer < array_layers; layer++) { |
| 161 | for (uint32_t level = 0; level < mip_levels; level++) { |
| 162 | QueueValidateImage(funcs, loc, image_state, usage, layer + base_array_layer, level + subresource_range.baseMipLevel); |
| 163 | } |
| 164 | } |
| 165 | } |
| 166 | |
| 167 | void BestPractices::QueueValidateImage(QueueCallbacks& funcs, const Location& loc, vvl::Image& image_state, |
| 168 | IMAGE_SUBRESOURCE_USAGE_BP usage, const VkImageSubresourceLayers& subresource_layers) { |
no test coverage detected