MNN/source/backend/vulkan/component/VulkanTarget.hpp

50 lines
1.4 KiB
C++
Raw Normal View History

2023-12-04 11:12:20 +08:00
#ifndef VulkanTarget_hpp
#define VulkanTarget_hpp
#include "VulkanImage.hpp"
#include "VulkanMemoryPool.hpp"
#include "VulkanRenderPass.hpp"
#include "VulkanFence.hpp"
#include "VulkanCommandPool.hpp"
#include "VulkanSemaphore.hpp"
#include "VulkanFramebuffer.hpp"
namespace MNN {
class VulkanTarget : public RefCount {
public:
virtual ~ VulkanTarget();
void onEnter(VkCommandBuffer buffer);
void onExit(VkCommandBuffer buffer);
// For Default Target
static VulkanTarget* create(std::vector<SharedPtr<VulkanImage>> colors, SharedPtr<VulkanImage> depth);
void writePipelineInfo(VkGraphicsPipelineCreateInfo& info) const;
struct Content {
std::vector<SharedPtr<VulkanImage>> colors;
SharedPtr<VulkanImage> depth;
SharedPtr<VulkanRenderPass> pass;
SharedPtr<VulkanFramebuffer> framebuffer;
};
VkRenderPass pass() const;
VkExtent2D displaySize() const;
const Content& content() const {
return mContent;
}
private:
VulkanTarget();
std::vector<VkImageView> mAttachments;
std::vector<VkClearValue> mClearValue;
VkRenderPassBeginInfo mBeginInfo;
Content mContent;
VkPipelineViewportStateCreateInfo mViewPortState;
VkViewport mViewPort;
VkRect2D mScissor;
// TODO: Support multi sample
VkSampleMask mSampleMask = ~0u;
VkPipelineMultisampleStateCreateInfo mMultisampleInfo;
VkFramebufferCreateInfo mFbCreateInfo;
};
};
#endif