| 289 | } |
| 290 | |
| 291 | void BarrierSet::MakeImageMemoryBarriers(const SyncValidator& sync_state, const SyncExecScope& src, const SyncExecScope& dst, |
| 292 | uint32_t barrier_count, const VkImageMemoryBarrier* barriers, |
| 293 | const DeviceExtensions& extensions) { |
| 294 | image_barriers.reserve(barrier_count); |
| 295 | for (const auto [index, barrier] : vvl::enumerate(barriers, barrier_count)) { |
| 296 | if (auto image = sync_state.Get<vvl::Image>(barrier.image)) { |
| 297 | auto subresource_range = image->NormalizeSubresourceRange(barrier.subresourceRange); |
| 298 | |
| 299 | // VK_REMAINING_ARRAY_LAYERS for sliced 3d image in the context of layout transition means image's depth extent. |
| 300 | if (barrier.subresourceRange.layerCount == VK_REMAINING_ARRAY_LAYERS && |
| 301 | CanTransitionDepthSlices(extensions, image->GetImageType(), image->create_flags)) { |
| 302 | subresource_range.layerCount = image->GetExtent().depth - subresource_range.baseArrayLayer; |
| 303 | } |
| 304 | |
| 305 | const SyncBarrier sync_barrier(src, barrier.srcAccessMask, dst, barrier.dstAccessMask); |
| 306 | const bool layout_transition = barrier.oldLayout != barrier.newLayout; |
| 307 | image_barriers.emplace_back(image, sync_barrier, subresource_range, layout_transition, index); |
| 308 | } |
| 309 | } |
| 310 | } |
| 311 | |
| 312 | void BarrierSet::MakeImageMemoryBarriers(const SyncValidator& sync_state, VkQueueFlags queue_flags, uint32_t barrier_count, |
| 313 | const VkImageMemoryBarrier2* barriers, const DeviceExtensions& extensions) { |
no test coverage detected