HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
pipeline_vulkan.hpp
1// Copyright Take Vos 2019-2022.
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 draw_in_command_buffer(vk::CommandBuffer commandBuffer, draw_context const &context);
31
32 void build_for_new_device();
33 void teardown_for_device_lost();
34 void build_for_new_swapchain(vk::RenderPass renderPass, uint32_t renderSubpass, vk::Extent2D extent);
35 void teardown_for_swapchain_lost();
36
37protected:
38 vk::DescriptorSet descriptorSet;
39 ssize_t descriptorSetVersion = 0;
40 vk::Extent2D extent;
41 vk::DescriptorSetLayout descriptorSetLayout;
42 vk::PipelineLayout pipelineLayout;
43 vk::DescriptorPool descriptorPool;
44
45 virtual std::vector<vk::PipelineShaderStageCreateInfo> createShaderStages() const = 0;
46 virtual std::vector<vk::DescriptorSetLayoutBinding> createDescriptorSetLayoutBindings() const = 0;
47 virtual std::vector<vk::WriteDescriptorSet> createWriteDescriptorSet() const = 0;
48 virtual ssize_t getDescriptorSetVersion() const = 0;
49 virtual std::vector<vk::PushConstantRange> createPushConstantRanges() const
50 {
51 return {};
52 }
53 virtual vk::VertexInputBindingDescription createVertexInputBindingDescription() const
54 {
55 return {};
56 }
57 virtual std::vector<vk::VertexInputAttributeDescription> createVertexInputAttributeDescriptions() const
58 {
59 return {};
60 }
61
62 virtual vk::PipelineDepthStencilStateCreateInfo getPipelineDepthStencilStateCreateInfo() const;
63 virtual std::vector<vk::PipelineColorBlendAttachmentState> getPipelineColorBlendAttachmentStates() const;
64
65 virtual void build_vertex_buffers(){};
66 virtual void teardown_vertex_buffers(){};
67 virtual void build_descriptor_sets();
68 virtual void teardown_descriptor_sets();
69 virtual void build_pipeline(vk::RenderPass renderPass, uint32_t renderSubpass, vk::Extent2D extent);
70 virtual void teardown_pipeline();
71};
72
73} // namespace hi::inline v1
DOXYGEN BUG.
Definition algorithm.hpp:15
Draw context for drawing using the HikoGUI shaders.
Definition draw_context.hpp:52
Definition gfx_device_vulkan.hpp:21
Definition gfx_surface.hpp:16
Definition pipeline.hpp:13
Definition pipeline_vulkan.hpp:16