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