HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
pipeline_vulkan.hpp
1// Copyright Take Vos 2019-2020.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "pipeline.hpp"
8#include "draw_context.hpp"
9#include <vulkan/vulkan.hpp>
10#include <string>
11#include <vector>
12
13namespace hi::inline v1 {
14class gfx_device_vulkan;
15
16class pipeline_vulkan : public pipeline {
17public:
18 vk::Pipeline intrinsic;
19
20 pipeline_vulkan(gfx_surface const &surface);
22
23 pipeline_vulkan(const pipeline_vulkan &) = delete;
24 pipeline_vulkan &operator=(const pipeline_vulkan &) = delete;
26 pipeline_vulkan &operator=(pipeline_vulkan &&) = delete;
27
28 gfx_device_vulkan &vulkan_device() const noexcept;
29
30 virtual void drawInCommandBuffer(vk::CommandBuffer commandBuffer, draw_context const &context);
31
32 void buildForNewDevice();
33 void teardownForDeviceLost();
34 void buildForNewSurface();
35 void teardownForSurfaceLost();
36 void buildForNewSwapchain(vk::RenderPass renderPass, uint32_t renderSubpass, vk::Extent2D extent);
37 void teardownForSwapchainLost();
38 void teardownForWindowLost();
39
40protected:
41 bool buffersInitialized = false;
42 vk::DescriptorSet descriptorSet;
43 ssize_t descriptorSetVersion = 0;
44 vk::Extent2D extent;
45 vk::DescriptorSetLayout descriptorSetLayout;
46 vk::PipelineLayout pipelineLayout;
47 vk::DescriptorPool descriptorPool;
48
49 virtual std::vector<vk::PipelineShaderStageCreateInfo> createShaderStages() const = 0;
50 virtual std::vector<vk::DescriptorSetLayoutBinding> createDescriptorSetLayoutBindings() const = 0;
51 virtual std::vector<vk::WriteDescriptorSet> createWriteDescriptorSet() const = 0;
52 virtual ssize_t getDescriptorSetVersion() const = 0;
53 virtual std::vector<vk::PushConstantRange> createPushConstantRanges() const
54 {
55 return {};
56 }
57 virtual vk::VertexInputBindingDescription createVertexInputBindingDescription() const
58 {
59 return {};
60 }
61 virtual std::vector<vk::VertexInputAttributeDescription> createVertexInputAttributeDescriptions() const
62 {
63 return {};
64 }
65
66 virtual vk::PipelineDepthStencilStateCreateInfo getPipelineDepthStencilStateCreateInfo() const;
67 virtual std::vector<vk::PipelineColorBlendAttachmentState> getPipelineColorBlendAttachmentStates() const;
68
69 virtual void buildvertexBuffers(){};
70 virtual void teardownvertexBuffers(){};
71 virtual void buildDescriptorSets();
72 virtual void teardownDescriptorSets();
73 virtual void buildPipeline(vk::RenderPass renderPass, uint32_t renderSubpass, vk::Extent2D extent);
74 virtual void teardownPipeline();
75};
76
77} // namespace hi::inline v1
Draw context for drawing using the HikoGUI shaders.
Definition draw_context.hpp:51
Definition gfx_device_vulkan.hpp:20
Definition gfx_surface.hpp:15
Definition pipeline.hpp:13
Definition pipeline_vulkan.hpp:16