1 #ifndef VKUTIL_PIPELINE_H_
2 #define VKUTIL_PIPELINE_H_
4 #include <vulkan/vulkan.h>
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)
10 enum VkuVertexBindings {
17 VKU_DS_VIEWPORT = 1 << 0,
18 VKU_DS_SCISSOR = 1 << 1,
22 class VkuPipelineGenerator {
24 VkPipelineShaderStageCreateInfo sdri[2];
25 VkPipelineInputAssemblyStateCreateInfo asmi;
26 VkPipelineViewportStateCreateInfo viewpi;
27 VkPipelineRasterizationStateCreateInfo rasti;
28 VkPipelineMultisampleStateCreateInfo multi;
29 VkPipelineDepthStencilStateCreateInfo depthi;
30 VkPipelineColorBlendStateCreateInfo cblendi;
33 std::vector<VkVertexInputBindingDescription> bind_descriptions;
34 std::vector<VkVertexInputAttributeDescription> attr_descriptions;
37 std::vector<VkDescriptorSetLayout> dset_layouts;
38 std::vector<VkPushConstantRange> push_const_ranges;
41 VkuPipelineGenerator();
42 ~VkuPipelineGenerator();
44 VkPipeline generate(VkuDynState dyn_flags) const;
46 void set_shader_modules(VkShaderModule vs, VkShaderModule fs);
47 void set_attribute(uint32_t binding, uint32_t stride, uint32_t location,
49 void set_descriptor_set_layout(const vku_descriptor &desc);
51 void set_push_constant(); //TODO
54 #endif // VKUTIL_PIPELINE_H_