pipeline generator additions
[demo] / src / vulkan / vkutil-pipeline.h
1 #ifndef VKUTIL_PIPELINE_H_
2 #define VKUTIL_PIPELINE_H_
3
4 #include <vulkan/vulkan.h>
5
6 #define VERTEX_ATTRIB_BIT (1 << VKU_BIND_VERTEX)
7 #define NORMAL_ATTRIB_BIT (1 << VKU_BIND_NORMAL)
8 #define TEX_COORD_ATTRIB_BIT (1 << VKU_BIND_TEX_COORD)
9
10 enum VkuVertexBindings {
11         VKU_BIND_VERTEX,
12         VKU_BIND_NORMAL,
13         VKU_BIND_TEX_COORD
14 };
15
16 enum VkuDynState {
17         VKU_DS_VIEWPORT = 1 << 0,
18         VKU_DS_SCISSOR  = 1 << 1,
19         VKU_DS_BLEND    = 1 << 2
20 };
21
22 class VkuPipelineGenerator {
23 private:
24         VkPipelineShaderStageCreateInfo sdri[2];
25         VkPipelineInputAssemblyStateCreateInfo asmi;
26         VkPipelineViewportStateCreateInfo viewpi;
27         VkPipelineRasterizationStateCreateInfo rasti;
28         VkPipelineMultisampleStateCreateInfo multi;
29         VkPipelineDepthStencilStateCreateInfo depthi;
30         VkPipelineColorBlendStateCreateInfo cblendi;
31
32         /* attributes */
33         std::vector<VkVertexInputBindingDescription> bind_descriptions;
34         std::vector<VkVertexInputAttributeDescription> attr_descriptions;
35
36         /* uniforms */
37         std::vector<VkDescriptorSetLayout> dset_layouts;
38         std::vector<VkPushConstantRange> push_const_ranges;
39
40 public:
41         VkuPipelineGenerator();
42         ~VkuPipelineGenerator();
43
44         VkPipeline generate(VkuDynState dyn_flags) const;
45
46         void set_shader_modules(VkShaderModule vs, VkShaderModule fs);
47         void set_attribute(uint32_t binding, uint32_t stride, uint32_t location,
48                         VkFormat format);
49         void set_descriptor_set_layout(const vku_descriptor &desc);
50
51         void set_push_constant(); //TODO
52 };
53
54 #endif // VKUTIL_PIPELINE_H_