1 #ifndef VKUTIL_PIPELINE_H_
2 #define VKUTIL_PIPELINE_H_
4 #include <vulkan/vulkan.h>
7 enum VkuVertexBindings {
14 VKU_DS_VIEWPORT = 1 << 0,
15 VKU_DS_SCISSOR = 1 << 1,
19 class VkuPipelineGenerator {
21 VkPipelineShaderStageCreateInfo sdri[2];
22 VkPipelineInputAssemblyStateCreateInfo asmi;
23 VkPipelineViewportStateCreateInfo viewpi;
24 VkPipelineRasterizationStateCreateInfo rasti;
25 VkPipelineMultisampleStateCreateInfo multi;
26 VkPipelineDepthStencilStateCreateInfo depthi;
27 VkPipelineColorBlendStateCreateInfo cblendi;
30 std::vector<VkVertexInputBindingDescription> bind_descriptions;
31 std::vector<VkVertexInputAttributeDescription> attr_descriptions;
34 std::vector<VkDescriptorSetLayout> res_layouts;
35 // std::vector<VkPushConstantRange> push_const_ranges;
37 VkPipelineLayout layout;
40 VkuPipelineGenerator();
41 ~VkuPipelineGenerator();
43 VkPipeline generate(VkuDynState dyn_flags);
45 void set_shader_modules(VkShaderModule vs, VkShaderModule fs);
46 void set_attribute(uint32_t binding, uint32_t stride, uint32_t location,
48 void set_resources_layout(VkDescriptorSetLayout layout);
51 #endif // VKUTIL_PIPELINE_H_