7 #include <ThirdParty/Vulkan/Include/vulkan/vulkan.h> 8 #include <ThirdParty/EASTL-master/include/EASTL/string.h> 9 #include <ThirdParty/EASTL-master/include/EASTL/vector.h> 12 class VulkanLogicalDevice;
15 class VulkanComputePipeline
18 typedef size_t descriptorSetHandle;
20 VulkanComputePipeline(VulkanLogicalDevice* logicalDevice);
21 ~VulkanComputePipeline();
23 void SetComputeShader(eastl::string name);
25 void AddSpecializationMapEntry(uint32_t constantID, eastl::vector<uint32_t> data);
27 void AddDescriptorSetBinding(descriptorSetHandle
set, uint32_t binding, VkDescriptorType type, uint32_t descriptorCount, VkShaderStageFlags shaderStage,
const VkSampler* immutableSamplers);
29 descriptorSetHandle CreateDescriptorSet();
30 descriptorSetHandle AddDescriptorSetLayout(VkDescriptorSetLayout layout);
32 VkDescriptorSetLayout GetDescriptorSetLayout(descriptorSetHandle handle);
34 void AddPushConstantRange(VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size);
36 VkPipelineLayout GetPipelineLayout()
const;
40 VkPipeline GetPipeline()
const;
43 struct DescriptorSet {
44 eastl::vector<VkDescriptorSetLayoutBinding> descriptionSetLayoutBindings;
45 VkDescriptorSetLayout descriptorSet;
49 eastl::vector<char> computeShaderData_;
51 VkShaderModule computeShader_;
55 VkSpecializationInfo computeShaderSpecializationInfo_;
57 eastl::vector<VkSpecializationMapEntry> specializationMapEntries_;
58 eastl::vector<uint32_t> specializationData_;
60 eastl::vector<DescriptorSet> descriptorSets_;
62 eastl::vector<VkPushConstantRange> pushConstantRanges_;
64 VkPipelineLayout pipelineLayout_;
66 VkPipelineLayoutCreateInfo pipelineLayoutInfo_;
68 VulkanLogicalDevice * device_;
73 #endif // USING_VULKAN