Files
samples/commonUtils.hpp

70 lines
2.7 KiB
C++
Raw Permalink Normal View History

2026-04-06 13:00:11 -04:00
/*
* Copyright (c) 2026 Mykhailo Mamedov. All rights reserved.
*
* RESEARCH PREVIEW / REFERENCE ONLY:
* This source code is provided solely for the purpose of reviewing
* the author's research methods and implementation.
*
* NO LICENSE GRANTED:
* This code is NOT for distribution, modification, or use in any
* project (commercial or otherwise). Unauthorized copying or
* use of this code is strictly prohibited.
*
* For inquiries regarding use or licensing, contact: ua.modin@gmail.com
*/
#include <stdio.h>
#ifndef TOOLS_HEADER
#define TOOLS_HEADER
namespace M_TOOLS {
struct Sync {
// Barrier quick helper.
std::vector<VkBufferMemoryBarrier2> buffers;
std::vector<VkImageMemoryBarrier2> images;
Sync& buffer(VkBuffer buffer, VkPipelineStageFlags2 srcMask, VkAccessFlags2 srcAccessMask,
VkPipelineStageFlags2 dstMask, VkAccessFlags2 dstAccessMask, VkDeviceSize offset=0) {
VkBufferMemoryBarrier2 barrierInstance{ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2 };
barrierInstance.srcStageMask = srcMask; barrierInstance.srcAccessMask = srcAccessMask;
barrierInstance.dstStageMask = dstMask; barrierInstance.dstAccessMask = dstAccessMask;
barrierInstance.buffer = buffer; barrierInstance.size = VK_WHOLE_SIZE;
barrierInstance.offset = offset;
buffers.push_back(barrierInstance);
return *this;
}
Sync& image(VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout,
VkPipelineStageFlags2 srcMask, VkAccessFlags2 srcAccessMask,
VkPipelineStageFlags2 dstMask, VkAccessFlags2 dstAccessMask) {
VkImageMemoryBarrier2 barrierInstance{ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 };
barrierInstance.srcStageMask = srcMask; barrierInstance.srcAccessMask = srcAccessMask;
barrierInstance.dstStageMask = dstMask; barrierInstance.dstAccessMask = dstAccessMask;
barrierInstance.oldLayout = oldLayout; barrierInstance.newLayout = newLayout;
barrierInstance.image = image;
barrierInstance.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
images.push_back(barrierInstance);
return *this;
}
void apply(VkCommandBuffer cmd) {
VkDependencyInfo depInfo{ VK_STRUCTURE_TYPE_DEPENDENCY_INFO };
depInfo.bufferMemoryBarrierCount = (uint32_t)buffers.size();
depInfo.pBufferMemoryBarriers = buffers.data();
depInfo.imageMemoryBarrierCount = (uint32_t)images.size();
depInfo.pImageMemoryBarriers = images.data();
vkCmdPipelineBarrier2(cmd, &depInfo);
}
};
} // namespace
#endif // TOOLS_HEADER
//
#ifdef TOOLS_COMPONENT
#endif