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