15#include <vsg/state/PipelineLayout.h>
16#include <vsg/state/ShaderStage.h>
17#include <vsg/state/StateCommand.h>
18#include <vsg/vk/RenderPass.h>
28 class VSG_DECLSPEC GraphicsPipelineState :
public Inherit<Object, GraphicsPipelineState>
31 GraphicsPipelineState() {}
32 GraphicsPipelineState(
const GraphicsPipelineState& gp) :
38 virtual void apply(
Context& context, VkGraphicsPipelineCreateInfo& pipelineInfo)
const = 0;
42 void read(
Input& input)
override;
43 void write(
Output& output)
const override;
46 virtual ~GraphicsPipelineState() {}
50 using GraphicsPipelineStates = std::vector<ref_ptr<GraphicsPipelineState>>;
51 extern VSG_DECLSPEC
void mergeGraphicsPipelineStates(Mask mask, GraphicsPipelineStates& dest_PipelineStates, ref_ptr<GraphicsPipelineState> src_PipelineState);
52 extern VSG_DECLSPEC
void mergeGraphicsPipelineStates(Mask mask, GraphicsPipelineStates& dest_PipelineStates,
const GraphicsPipelineStates& src_PipelineStates);
55 class VSG_DECLSPEC GraphicsPipeline :
public Inherit<Object, GraphicsPipeline>
60 GraphicsPipeline(
PipelineLayout* pipelineLayout,
const ShaderStages& shaderStages,
const GraphicsPipelineStates& pipelineStates, uint32_t subpass = 0);
63 VkPipeline
vk(uint32_t viewID)
const {
return _implementation[viewID]->_pipeline; }
66 VkPipeline
validated_vk(uint32_t viewID)
const {
return (viewID < _implementation.size()) ? (_implementation[viewID] ? _implementation[viewID]->_pipeline : 0) : 0; }
70 GraphicsPipelineStates pipelineStates;
76 void read(
Input& input)
override;
77 void write(
Output& output)
const override;
83 void release(uint32_t viewID)
85 if (viewID <
static_cast<uint32_t
>(_implementation.size())) _implementation[viewID] = {};
87 void release() { _implementation.clear(); }
90 virtual ~GraphicsPipeline();
92 struct Implementation :
public Inherit<Object, Implementation>
94 Implementation(
Context& context,
Device* device,
const RenderPass* renderPass,
const PipelineLayout* pipelineLayout,
const ShaderStages& shaderStages,
const GraphicsPipelineStates& pipelineStates, uint32_t subpass);
96 virtual ~Implementation();
103 std::vector<ref_ptr<Implementation>> _implementation;
108 class VSG_DECLSPEC BindGraphicsPipeline :
public Inherit<StateCommand, BindGraphicsPipeline>
118 void read(
Input& input)
override;
119 void write(
Output& output)
const override;
124 void compile(
Context& context)
override;
126 virtual void release();
129 virtual ~BindGraphicsPipeline();
BindGraphicsPipeline state command encapsulates the vkCmdBindPipeline call for a GraphicsPipeline.
Definition GraphicsPipeline.h:109
int compare(const Object &rhs_object) const override
compare two objects, return -1 if this object is less than rhs, return 0 if it's equal,...
ref_ptr< GraphicsPipeline > pipeline
pipeline to pass in the vkCmdBindPipeline call;
Definition GraphicsPipeline.h:114
CommandBuffer encapsulates VkCommandBuffer.
Definition CommandBuffer.h:27
Device encapsulates VkDevice, a logical handle to the PhysicalDevice with capabilities specified duri...
Definition Device.h:39
GraphicsPipeline encapsulates graphics VkPipeline and the VkGraphicsPipelineCreateInfo settings used ...
Definition GraphicsPipeline.h:56
int compare(const Object &rhs_object) const override
compare two objects, return -1 if this object is less than rhs, return 0 if it's equal,...
VkPipeline validated_vk(uint32_t viewID) const
variant of vk(viewID) method that is slower but adds validation of the viewID parameter
Definition GraphicsPipeline.h:66
ShaderStages stages
VkGraphicsPipelineCreateInfo settings.
Definition GraphicsPipeline.h:69
VkPipeline vk(uint32_t viewID) const
return the Vulkan Pipeline for specified viewID.
Definition GraphicsPipeline.h:63
Definition GraphicsPipeline.h:29
Mask mask
apply GraphicsPipelineState when (mask & view.mask) is non zero
Definition GraphicsPipeline.h:36
int compare(const Object &rhs) const override
compare two objects, return -1 if this object is less than rhs, return 0 if it's equal,...
PipelineLayout encapsulates VkPipelineLayout and the VkPipelineLayoutCreateInfo settings used to set ...
Definition PipelineLayout.h:27
RenderPass encapsulation of VkRenderPass.
Definition RenderPass.h:86