Skip to content

Commit

Permalink
Use FastVec in VulkanBarrier
Browse files Browse the repository at this point in the history
  • Loading branch information
hrydgard committed Dec 7, 2023
1 parent 8dbcbe4 commit dde13b4
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
3 changes: 2 additions & 1 deletion Common/Data/Collections/FastVec.h
Expand Up @@ -69,7 +69,8 @@ class FastVec {
void clear() { size_ = 0; }
bool empty() const { return size_ == 0; }

const T *data() { return data_; }
const T *data() const { return data_; }

T *begin() { return data_; }
T *end() { return data_ + size_; }
const T *begin() const { return data_; }
Expand Down
11 changes: 6 additions & 5 deletions Common/GPU/Vulkan/VulkanBarrier.h
Expand Up @@ -5,6 +5,7 @@

#include "Common/Log.h"
#include "Common/GPU/Vulkan/VulkanLoader.h"
#include "Common/Data/Collections/FastVec.h"

class VulkanContext;

Expand All @@ -13,6 +14,8 @@ class VulkanContext;
// However, not thread safe in any way!
class VulkanBarrier {
public:
VulkanBarrier() : imageBarriers_(4) {}

void TransitionImage(
VkImage image, int baseMip, int numMipLevels, int numLayers, VkImageAspectFlags aspectMask,
VkImageLayout oldImageLayout, VkImageLayout newImageLayout,
Expand All @@ -25,7 +28,7 @@ class VulkanBarrier {
dstStageMask_ |= dstStageMask;
dependencyFlags_ |= VK_DEPENDENCY_BY_REGION_BIT;

VkImageMemoryBarrier imageBarrier;
VkImageMemoryBarrier &imageBarrier = imageBarriers_.push_uninitialized();
imageBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
imageBarrier.pNext = nullptr;
imageBarrier.srcAccessMask = srcAccessMask;
Expand All @@ -40,7 +43,6 @@ class VulkanBarrier {
imageBarrier.subresourceRange.baseArrayLayer = 0;
imageBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
imageBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
imageBarriers_.push_back(imageBarrier);
}

// Automatically determines access and stage masks from layouts.
Expand Down Expand Up @@ -93,7 +95,7 @@ class VulkanBarrier {
break;
}

VkImageMemoryBarrier imageBarrier;
VkImageMemoryBarrier &imageBarrier = imageBarriers_.push_uninitialized();
imageBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
imageBarrier.pNext = nullptr;
imageBarrier.srcAccessMask = srcAccessMask;
Expand All @@ -108,14 +110,13 @@ class VulkanBarrier {
imageBarrier.subresourceRange.baseArrayLayer = 0;
imageBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
imageBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
imageBarriers_.push_back(imageBarrier);
}

void Flush(VkCommandBuffer cmd);

private:
VkPipelineStageFlags srcStageMask_ = 0;
VkPipelineStageFlags dstStageMask_ = 0;
std::vector<VkImageMemoryBarrier> imageBarriers_;
FastVec<VkImageMemoryBarrier> imageBarriers_;
VkDependencyFlags dependencyFlags_ = 0;
};

0 comments on commit dde13b4

Please sign in to comment.