-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvkutils_VulkanComputePipeline.inl
More file actions
60 lines (45 loc) · 2.04 KB
/
vkutils_VulkanComputePipeline.inl
File metadata and controls
60 lines (45 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <vulkan/vulkan.h>
class VulkanComputePipeline
{
public:
VulkanComputePipeline(){}
VulkanComputePipeline(VkPipelineLayout aLayout, VkPipeline aPipeline) : mPipeline(aPipeline), mLayout(aLayout) {}
VkPipeline handle() const {return(mPipeline);}
VkPipelineLayout getLayout() const {return(mLayout);}
bool isValid() const {return(_isValid());}
void destroy(VkDevice aLogicalDevice);
protected:
inline bool _isValid() const {return(mPipeline != VK_NULL_HANDLE && mLayout != VK_NULL_HANDLE);}
VkPipeline mPipeline = VK_NULL_HANDLE;
VkPipelineLayout mLayout = VK_NULL_HANDLE;
};
struct ComputePipelineConstructionSet
{
VkPipelineShaderStageCreateInfo mShaderStage = {};
VkPipelineLayoutCreateInfo mLayoutInfo = {};
VkComputePipelineCreateInfo mComputePipelineInfo = {};
};
class VulkanComputePipelineBuilder : public VulkanComputePipeline
{
public:
VulkanComputePipelineBuilder(){}
VulkanComputePipelineBuilder(VkPipelineLayout aLayout, VkPipeline aPipeline) : VulkanComputePipeline(aLayout, aPipeline) {}
VulkanComputePipelineBuilder(const ComputePipelineConstructionSet& aConstructionSet) : mCtorSet(aConstructionSet) {}
ComputePipelineConstructionSet& getConstructionSet() {return(mCtorSet);}
VkPipeline handle() const {return(mPipeline);}
VkPipelineLayout getLayout() const {return(mLayout);}
bool isValid() const {return(_isValid());}
static void prepareUnspecialized(ComputePipelineConstructionSet& aCtorSet, VkShaderModule aComputeModule);
static void prepareWithStage(ComputePipelineConstructionSet& aCtorSet, const VkPipelineShaderStageCreateInfo& aComputeStage);
VulkanComputePipeline build(VkDevice aLogicalDevice);
protected:
ComputePipelineConstructionSet mCtorSet;
};
/** Collection of components for a stage in a compute application
* Contains a VulkanPipeline object, command buffer, and shader module
*/
struct ComputeStage{
VulkanComputePipeline pipeline;
VkCommandBuffer cmdBuffer = VK_NULL_HANDLE;
VkShaderModule shaderModule = VK_NULL_HANDLE;
};