Sample 2
This commit is contained in:
70
commonUtils.hpp
Normal file
70
commonUtils.hpp
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* 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
|
||||
Reference in New Issue
Block a user