CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Common/GPU/Vulkan/VulkanBarrier.h
Views: 1401
#pragma once12#include <string>3#include <vector>45#include "Common/GPU/Vulkan/VulkanLoader.h"6#include "Common/Data/Collections/FastVec.h"7#include "Common/Data/Collections/TinySet.h"89class VulkanContext;10struct VKRImage;1112class VulkanBarrierBatch {13public:14VulkanBarrierBatch() : imageBarriers_(4) {}15~VulkanBarrierBatch();1617bool empty() const { return imageBarriers_.empty(); }1819// TODO: Replace this with TransitionImage.20VkImageMemoryBarrier *Add(VkImage image, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags) {21srcStageMask_ |= srcStageMask;22dstStageMask_ |= dstStageMask;23dependencyFlags_ |= dependencyFlags;24VkImageMemoryBarrier &barrier = imageBarriers_.push_uninitialized();25// Initialize good defaults for the usual things.26barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;27barrier.pNext = nullptr;28barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;29barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;30barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;31barrier.subresourceRange.baseArrayLayer = 0;32barrier.subresourceRange.baseMipLevel = 0;33barrier.subresourceRange.layerCount = 1;34barrier.subresourceRange.levelCount = 1;35barrier.image = image;36return &barrier;37}3839void TransitionImage(40VkImage image, int baseMip, int numMipLevels, int numLayers, VkImageAspectFlags aspectMask,41VkImageLayout oldImageLayout, VkImageLayout newImageLayout,42VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask,43VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask44);4546// Automatically determines access and stage masks from layouts.47// Not universally usable, but works for PPSSPP's use.48void TransitionColorImageAuto(VkImage image, VkImageLayout *imageLayout, VkImageLayout newImageLayout, int baseMip, int numMipLevels, int numLayers);49void TransitionDepthStencilImageAuto(VkImage image, VkImageLayout *imageLayout, VkImageLayout newImageLayout, int baseMip, int numMipLevels, int numLayers);5051void TransitionColorImageAuto(VKRImage *image, VkImageLayout newImageLayout);52void TransitionDepthStencilImageAuto(VKRImage *image, VkImageLayout newImageLayout);5354void Flush(VkCommandBuffer cmd);5556private:57FastVec<VkImageMemoryBarrier> imageBarriers_;58VkPipelineStageFlags srcStageMask_ = 0;59VkPipelineStageFlags dstStageMask_ = 0;60VkDependencyFlags dependencyFlags_ = 0;61};626364