Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
PipelineSet.hpp
1#pragma once
2
3#include <stdint.h>
4#include <Common/Graphics/Formats.hpp>
5
6namespace Grindstone::Formats::Pipelines::V1 {
7 constexpr auto FileMagicCode = "GPSF";
8
9 enum class ReflectedBlockVariableType {
10 Color,
11 Bool,
12 Bool2,
13 Bool3,
14 Bool4,
15 Int,
16 Int2,
17 Int3,
18 Int4,
19 Float,
20 Float2,
21 Float3,
22 Float4,
23 Matrix2x2,
24 Matrix2x3,
25 Matrix2x4,
26 Matrix3x2,
27 Matrix3x3,
28 Matrix3x4,
29 Matrix4x2,
30 Matrix4x3,
31 Matrix4x4,
32 Array,
33 RuntimeArray,
34 Struct
35 };
36
37 enum class PipelineType : uint8_t {
38 Graphics,
39 Compute
40 };
41
43 uint32_t pipelineNameOffsetFromBlobStart;
44 uint32_t renderQueueNameOffsetFromBlobStart;
45 float depthBiasClamp;
46 float depthBiasConstantFactor;
47 float depthBiasSlopeFactor;
48 Grindstone::GraphicsAPI::CullMode cullMode;
49 Grindstone::GraphicsAPI::CompareOperation depthCompareOp;
50 Grindstone::GraphicsAPI::PolygonFillMode polygonFillMode;
51 Grindstone::GraphicsAPI::GeometryType geometryType;
52 uint8_t flags;
53 uint16_t attachmentStartIndex;
54 uint8_t attachmentCount;
55 uint16_t shaderStageStartIndex;
56 uint8_t shaderStageCount;
57 uint16_t descriptorSetStartIndex;
58 uint8_t descriptorSetCount;
59 uint16_t descriptorBindingStartIndex;
60 uint8_t descriptorBindingCount;
61 };
62
64 uint32_t shaderCodeOffsetFromBlobStart;
65 uint32_t shaderCodeSize;
66 Grindstone::GraphicsAPI::ShaderStage stageType;
67 };
68
70 Grindstone::GraphicsAPI::ColorMask colorMask;
71 Grindstone::GraphicsAPI::BlendFactor blendAlphaFactorDst;
72 Grindstone::GraphicsAPI::BlendFactor blendAlphaFactorSrc;
73 Grindstone::GraphicsAPI::BlendOperation blendAlphaOperation;
74 Grindstone::GraphicsAPI::BlendFactor blendColorFactorDst;
75 Grindstone::GraphicsAPI::BlendFactor blendColorFactorSrc;
76 Grindstone::GraphicsAPI::BlendOperation blendColorOperation;
77 };
78
80 uint32_t configurationStartIndex = 0;
81 uint32_t configurationCount = 0;
82 uint32_t materialBufferSize = 1;
83 };
84
86 // TODO: When really supporting multiple configurations:
87 // uint32_t tagCount = 0;
88 uint16_t passStartIndex = 0;
89 uint16_t passCount = 0;
90 };
91
93 uint32_t bindingIndex;
94 uint32_t bindingArrayCount;
95 Grindstone::GraphicsAPI::BindingType type;
96 Grindstone::GraphicsAPI::ShaderStageBit stages;
97 };
98
100 uint32_t set = 0;
101 uint32_t bindingsStartIndex = 0;
102 uint32_t bindingCount = 0;
103 };
104
106 uint16_t shaderStageIndex;
107 uint16_t descriptorSetStartIndex;
108 uint8_t descriptorSetCount;
109 uint16_t descriptorBindingStartIndex;
110 uint8_t descriptorBindingCount;
111 };
112
114 uint32_t configurationStartIndex = 0;
115 uint32_t configurationCount = 0;
116 };
117
119 uint8_t versionMajor = 1;
120 uint8_t versionMinor = 0;
121 uint8_t versionPatch = 0;
122 uint8_t headerSize = sizeof(PipelineSetFileHeader);
123 uint8_t graphicsPipelineSize = sizeof(GraphicsPipelineSetHeader);
124 uint8_t computePipelineSize = sizeof(ComputePipelineSetHeader);
125 uint8_t computeConfigurationSize = sizeof(ComputePipelineConfigurationHeader);
126 uint8_t graphicsConfigurationSize = sizeof(GraphicsPipelineConfigurationHeader);
127 uint8_t passSize = sizeof(PassPipelineHeader);
128 uint8_t attachmentSize = sizeof(PassPipelineAttachmentHeader);
129 uint8_t stageSize = sizeof(PassPipelineShaderStageHeader);
130 uint32_t graphicsPipelinesOffset = 0;
131 uint32_t graphicsPipelineCount = 0;
132 uint32_t computePipelinesOffset = 0;
133 uint32_t computePipelineCount = 0;
134 uint32_t materialParametersOffset = 0;
135 uint32_t materialParameterCount = 0;
136 uint32_t materialResourcesOffset = 0;
137 uint32_t materialResourceCount = 0;
138 uint32_t graphicsConfigurationsOffset = 0;
139 uint32_t graphicsConfigurationCount = 0;
140 uint32_t computeConfigurationsOffset = 0;
141 uint32_t computeConfigurationCount = 0;
142 uint32_t graphicsPassesOffset = 0;
143 uint32_t graphicsPassCount = 0;
144 uint32_t shaderStagesOffset = 0;
145 uint32_t shaderStageCount = 0;
146 uint32_t attachmentHeadersOffset = 0;
147 uint32_t attachmentHeaderCount = 0;
148 uint32_t descriptorSetsOffset = 0;
149 uint32_t descriptorSetCount = 0;
150 uint32_t descriptorBindingsOffset = 0;
151 uint32_t descriptorBindingCount = 0;
152 uint32_t blobSectionOffset = 0;
153 uint32_t blobSectionSize = 0;
154 uint32_t bufferReflectionsOffset = 0;
155 uint32_t bufferReflectionsCount = 0;
156 uint32_t bufferMemberReflectionOffset = 0;
157 uint32_t bufferMemberReflectionCount = 0;
158 };
159
162
164 uint32_t bindingIndex;
165 uint32_t count;
166 Grindstone::GraphicsAPI::BindingType type;
167 Grindstone::GraphicsAPI::ShaderStageBit stages;
168 uint32_t descriptorNameOffsetFromBlobStart;
169 };
170
172 uint32_t setIndex;
173 uint32_t bindingStartIndex;
174 uint32_t bindingCount;
175 };
176
177 // TODO: This should only really be a way to give the default value, since we have BufferReflectionMember giving the rest of the data.
179 uint32_t nameOffsetFromBlobStart;
180 uint32_t byteOffsetFromBufferStart;
181 ReflectedBlockVariableType parameterType;
182 };
183
185 Grindstone::GraphicsAPI::BindingType type;
186 uint32_t nameOffsetFromBlobStart;
187 uint32_t setIndex;
188 uint32_t bindingIndex;
189 };
190
192 uint32_t nameOffsetFromBlobStart;
193 uint32_t descriptorSet;
194 uint32_t descriptorBinding;
195 uint32_t memberStartIndex;
196 uint32_t memberCount;
197 uint32_t totalSize;
198 };
199
201 uint32_t nameOffsetFromBlobStart;
202 uint32_t byteOffsetFromBufferStart;
203 uint32_t arrayCount;
204 uint32_t size;
205 ReflectedBlockVariableType parameterType;
206 };
207}