Hymn to Beauty
C++ 3D Engine
VulkanShaderProgram.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "../Interface/ShaderProgram.hpp"
4
5#include <initializer_list>
6#include <vector>
7#include <vulkan/vulkan.h>
8
9namespace Video {
10
11class Shader;
12class VulkanShader;
13class VulkanRenderer;
14
17 public:
21 VkPipelineStageFlags pipelineStages;
22
25 };
26
28
32 VulkanShaderProgram(VulkanRenderer* vulkanRenderer, std::initializer_list<const Shader*> shaders);
33
36
38
41 const std::vector<const VulkanShader*>& GetShaders() const;
42
44
47 const VkDescriptorSetLayout* GetDescriptorSetLayouts() const;
48
50
53 const VkPushConstantRange* GetPushConstantRange() const;
54
56
61 const StorageBufferInfo& GetStorageBufferInfo(uint32_t binding) const;
62
63 private:
64 VulkanShaderProgram(const VulkanShaderProgram& other) = delete;
65
66 void AddUniformBuffer(BindingType bindingType);
67 void AddMaterial(unsigned int textures);
68 void AddPushConstants(unsigned int pushConstantCount, ShaderSource::ReflectionInfo::PushConstant* pushConstants, bool isComputeShader);
69
70 VulkanRenderer* vulkanRenderer;
71
72 std::vector<const VulkanShader*> shaders;
73 VkDescriptorSetLayout descriptorSetLayouts[ShaderProgram::BindingType::BINDING_TYPES];
74
75 bool usesPushConstants = false;
76 VkPushConstantRange pushConstantRange;
77
78 std::vector<StorageBufferInfo> storageBufferInfo;
79};
80
81} // namespace Video
A shader program.
Definition: ShaderProgram.hpp:11
BindingType
A type of bound resource.
Definition: ShaderProgram.hpp:14
@ BINDING_TYPES
Total number of binding types.
Definition: ShaderProgram.hpp:19
Low-level renderer implementing Vulkan.
Definition: VulkanRenderer.hpp:24
Vulkan implementation of Shader.
Definition: VulkanShader.hpp:11
Vulkan implementation of ShaderProgram.
Definition: VulkanShaderProgram.hpp:16
~VulkanShaderProgram() final
Destructor.
Definition: VulkanShaderProgram.cpp:71
const VkPushConstantRange * GetPushConstantRange() const
Get the push constant range.
Definition: VulkanShaderProgram.cpp:83
const StorageBufferInfo & GetStorageBufferInfo(uint32_t binding) const
Get reflection info about a storage buffer used in the shader.
Definition: VulkanShaderProgram.cpp:87
const VkDescriptorSetLayout * GetDescriptorSetLayouts() const
Get the descriptor set layouts.
Definition: VulkanShaderProgram.cpp:79
const std::vector< const VulkanShader * > & GetShaders() const
Get the shaders in the shader program.
Definition: VulkanShaderProgram.cpp:75
VulkanShaderProgram(VulkanRenderer *vulkanRenderer, std::initializer_list< const Shader * > shaders)
Create new Vulkan shader program.
Definition: VulkanShaderProgram.cpp:10
Definition: Editor.hpp:18
Informationa bout a storage buffer used in the shader program.
Definition: VulkanShaderProgram.hpp:19
bool readWrite
Whether the buffer is written to.
Definition: VulkanShaderProgram.hpp:24
VkPipelineStageFlags pipelineStages
Which pipeline stages the buffer is used in.
Definition: VulkanShaderProgram.hpp:21