vk_initializers.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma once
  2. #include "vk_types.h"
  3. namespace vkinit
  4. {
  5. // Commands
  6. VkCommandPoolCreateInfo command_pool_ci(uint32_t queueFamilyIndex, VkCommandPoolCreateFlags flags = 0);
  7. VkCommandBufferAllocateInfo command_buffer_ai(VkCommandPool pool, uint32_t count = 1, VkCommandBufferLevel level = VK_COMMAND_BUFFER_LEVEL_PRIMARY);
  8. VkCommandBufferBeginInfo command_buffer_bi(VkCommandBufferResetFlags flags = 0);
  9. VkSubmitInfo submit_info(VkCommandBuffer* cmd);
  10. // Sync structures
  11. VkFenceCreateInfo fence_ci(VkFenceCreateFlags flags = 0);
  12. VkSemaphoreCreateInfo semaphore_ci(VkSemaphoreCreateFlags flags = 0);
  13. // Pipeline initializers
  14. VkPipelineShaderStageCreateInfo pipeline_shader_stage_ci(VkShaderStageFlagBits stage, VkShaderModule shaderModule);
  15. VkPipelineVertexInputStateCreateInfo vertex_input_state_ci();
  16. VkPipelineInputAssemblyStateCreateInfo input_assembly_ci(VkPrimitiveTopology topology);
  17. VkPipelineRasterizationStateCreateInfo rasterization_state_ci(VkPolygonMode polygonMode);
  18. VkPipelineMultisampleStateCreateInfo multisample_state_ci();
  19. VkPipelineColorBlendAttachmentState color_blend_attachment_state();
  20. VkPipelineLayoutCreateInfo pipeline_layout_ci();
  21. inline VkSpecializationMapEntry specialization_map_entry(uint32_t constant_id, uint32_t offset, size_t size)
  22. {
  23. VkSpecializationMapEntry specialization_map_entry{};
  24. specialization_map_entry.constantID = constant_id;
  25. specialization_map_entry.offset = offset;
  26. specialization_map_entry.size = size;
  27. return specialization_map_entry;
  28. }
  29. inline VkSpecializationInfo specialization_info(const std::vector<VkSpecializationMapEntry>& map_entries, size_t data_size, const void* data)
  30. {
  31. VkSpecializationInfo specialization_info{};
  32. specialization_info.mapEntryCount = static_cast<uint32_t>(map_entries.size());
  33. specialization_info.pMapEntries = map_entries.data();
  34. specialization_info.dataSize = data_size;
  35. specialization_info.pData = data;
  36. return specialization_info;
  37. }
  38. // Image initializers
  39. VkImageCreateInfo image_ci(VkFormat format, VkImageUsageFlags usageFlags, VkExtent3D extent);
  40. VkImageViewCreateInfo image_view_ci(VkFormat format, VkImage image, VkImageAspectFlags aspectFlags);
  41. VkPipelineDepthStencilStateCreateInfo depth_stencil_ci(bool bDepthTest, bool bDepthWrite, VkCompareOp compareOp);
  42. VkSamplerCreateInfo sampler_ci(VkFilter filters, float max_anisotropy = 1.f, VkSamplerAddressMode samplerAddressMode = VK_SAMPLER_ADDRESS_MODE_REPEAT);
  43. // Descriptor set initializers
  44. VkDescriptorSetLayoutBinding descriptor_set_layout_binding(VkDescriptorType type, VkShaderStageFlags stageFlags, uint32_t binding);
  45. VkWriteDescriptorSet write_descriptor_buffer(VkDescriptorType type, VkDescriptorSet dstSet, VkDescriptorBufferInfo* bufferInfo, uint32_t binding);
  46. VkWriteDescriptorSet write_descriptor_image(VkDescriptorType type, VkDescriptorSet dstSet, VkDescriptorImageInfo* imageInfo, uint32_t binding);
  47. }