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<StateCommand, GraphicsPipelineState>
31 GraphicsPipelineState() {}
32 GraphicsPipelineState(
const GraphicsPipelineState& gp) :
38 virtual void apply(
Context& context, VkGraphicsPipelineCreateInfo& pipelineInfo)
const = 0;
43 void read(
Input& input)
override;
44 void write(
Output& output)
const override;
47 virtual ~GraphicsPipelineState() {}
51 using GraphicsPipelineStates = std::vector<ref_ptr<GraphicsPipelineState>>;
52 extern VSG_DECLSPEC
void mergeGraphicsPipelineStates(Mask mask, GraphicsPipelineStates& dest_PipelineStates, ref_ptr<GraphicsPipelineState> src_PipelineState);
53 extern VSG_DECLSPEC
void mergeGraphicsPipelineStates(Mask mask, GraphicsPipelineStates& dest_PipelineStates,
const GraphicsPipelineStates& src_PipelineStates);
56 class VSG_DECLSPEC GraphicsPipeline :
public Inherit<Object, GraphicsPipeline>
61 GraphicsPipeline(
PipelineLayout* pipelineLayout,
const ShaderStages& shaderStages,
const GraphicsPipelineStates& pipelineStates, uint32_t subpass = 0);
64 VkPipeline
vk(uint32_t viewID)
const {
return _implementation[viewID]->_pipeline; }
67 VkPipeline
validated_vk(uint32_t viewID)
const {
return (viewID < _implementation.size()) ? (_implementation[viewID] ? _implementation[viewID]->_pipeline : 0) : 0; }
71 GraphicsPipelineStates pipelineStates;
77 void read(
Input& input)
override;
78 void write(
Output& output)
const override;
84 void release(uint32_t viewID)
86 if (viewID <
static_cast<uint32_t
>(_implementation.size())) _implementation[viewID] = {};
88 void release() { _implementation.clear(); }
91 virtual ~GraphicsPipeline();
93 struct Implementation :
public Inherit<Object, Implementation>
95 Implementation(
Context& context,
Device* device,
const RenderPass* renderPass,
const PipelineLayout* pipelineLayout,
const ShaderStages& shaderStages,
const GraphicsPipelineStates& pipelineStates, uint32_t subpass);
97 virtual ~Implementation();
99 GraphicsPipelineStates _pipelineStates;
100 VkPipeline _pipeline;
105 std::vector<ref_ptr<Implementation>> _implementation;
110 class VSG_DECLSPEC BindGraphicsPipeline :
public Inherit<StateCommand, BindGraphicsPipeline>
120 void read(
Input& input)
override;
121 void write(
Output& output)
const override;
126 void compile(
Context& context)
override;
128 virtual void release();
131 virtual ~BindGraphicsPipeline();
BindGraphicsPipeline state command encapsulates the vkCmdBindPipeline call for a GraphicsPipeline.
Definition GraphicsPipeline.h:111
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:116
CommandBuffer encapsulates VkCommandBuffer.
Definition CommandBuffer.h:30
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:57
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:67
ShaderStages stages
VkGraphicsPipelineCreateInfo settings.
Definition GraphicsPipeline.h:70
VkPipeline vk(uint32_t viewID) const
return the Vulkan Pipeline for specified viewID.
Definition GraphicsPipeline.h:64
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