MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / MakeImageMemoryBarriers

Method MakeImageMemoryBarriers

layers/sync/sync_op.cpp:291–310  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

289}
290
291void 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
312void BarrierSet::MakeImageMemoryBarriers(const SyncValidator& sync_state, VkQueueFlags queue_flags, uint32_t barrier_count,
313 const VkImageMemoryBarrier2* barriers, const DeviceExtensions& extensions) {

Callers 2

SyncOpPipelineBarrierMethod · 0.80
SyncOpWaitEventsMethod · 0.80

Calls 7

enumerateFunction · 0.85
CanTransitionDepthSlicesFunction · 0.85
emplace_backMethod · 0.80
reserveMethod · 0.45
GetImageTypeMethod · 0.45
GetExtentMethod · 0.45

Tested by

no test coverage detected