2019-02-26 10:27:29 +00:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "vulkan/system/vk_objects.h"
|
2019-02-28 23:42:51 +00:00
|
|
|
#include "r_data/renderstyle.h"
|
|
|
|
#include <map>
|
2019-02-26 10:27:29 +00:00
|
|
|
|
|
|
|
class VKDataBuffer;
|
|
|
|
|
2019-02-28 23:42:51 +00:00
|
|
|
class VkRenderPassKey
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
FRenderStyle RenderStyle;
|
|
|
|
|
|
|
|
bool operator<(const VkRenderPassKey &other) const
|
|
|
|
{
|
|
|
|
return RenderStyle.AsDWORD < other.RenderStyle.AsDWORD;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2019-02-26 10:27:29 +00:00
|
|
|
class VkRenderPassSetup
|
|
|
|
{
|
|
|
|
public:
|
2019-02-28 23:42:51 +00:00
|
|
|
VkRenderPassSetup(const VkRenderPassKey &key);
|
2019-02-26 10:27:29 +00:00
|
|
|
|
|
|
|
std::unique_ptr<VulkanRenderPass> RenderPass;
|
|
|
|
std::unique_ptr<VulkanPipeline> Pipeline;
|
|
|
|
std::unique_ptr<VulkanFramebuffer> Framebuffer;
|
|
|
|
|
|
|
|
private:
|
2019-02-28 23:42:51 +00:00
|
|
|
void CreatePipeline(const VkRenderPassKey &key);
|
2019-02-26 10:27:29 +00:00
|
|
|
void CreateRenderPass();
|
|
|
|
void CreateFramebuffer();
|
|
|
|
};
|
|
|
|
|
|
|
|
class VkRenderPassManager
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
VkRenderPassManager();
|
|
|
|
|
|
|
|
void BeginFrame();
|
2019-02-28 23:42:51 +00:00
|
|
|
VkRenderPassSetup *GetRenderPass(const VkRenderPassKey &key);
|
2019-02-26 10:27:29 +00:00
|
|
|
|
|
|
|
std::unique_ptr<VulkanDescriptorSetLayout> DynamicSetLayout;
|
|
|
|
std::unique_ptr<VulkanDescriptorSetLayout> TextureSetLayout;
|
|
|
|
std::unique_ptr<VulkanPipelineLayout> PipelineLayout;
|
|
|
|
std::unique_ptr<VulkanDescriptorPool> DescriptorPool;
|
2019-02-28 23:42:51 +00:00
|
|
|
std::map<VkRenderPassKey, std::unique_ptr<VkRenderPassSetup>> RenderPassSetup;
|
2019-02-26 10:27:29 +00:00
|
|
|
|
|
|
|
std::unique_ptr<VulkanImage> SceneColor;
|
|
|
|
std::unique_ptr<VulkanImage> SceneDepthStencil;
|
|
|
|
std::unique_ptr<VulkanImageView> SceneColorView;
|
|
|
|
std::unique_ptr<VulkanImageView> SceneDepthStencilView;
|
|
|
|
std::unique_ptr<VulkanImageView> SceneDepthView;
|
|
|
|
|
|
|
|
std::unique_ptr<VulkanDescriptorSet> DynamicSet;
|
|
|
|
|
|
|
|
private:
|
|
|
|
void CreateDynamicSetLayout();
|
|
|
|
void CreateTextureSetLayout();
|
|
|
|
void CreatePipelineLayout();
|
|
|
|
void CreateDescriptorPool();
|
|
|
|
void CreateDynamicSet();
|
|
|
|
};
|