├── .gitignore
├── LICENSE
├── README.md
├── cube.frag
├── cube.vert
├── vkdemo.c
├── vkdemo.h
├── vkdemo.sln
├── vkdemo.vcxproj
├── vkdemo.vcxproj.filters
├── vkfuncs.h
├── vkwin32.c
└── vulkan.h
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.suo
8 | *.user
9 | *.userosscache
10 | *.sln.docstates
11 |
12 | # User-specific files (MonoDevelop/Xamarin Studio)
13 | *.userprefs
14 |
15 | # Build results
16 | [Dd]ebug/
17 | [Dd]ebugPublic/
18 | [Rr]elease/
19 | [Rr]eleases/
20 | x64/
21 | x86/
22 | bld/
23 | [Bb]in/
24 | [Oo]bj/
25 | [Ll]og/
26 |
27 | # Visual Studio 2015/2017 cache/options directory
28 | .vs/
29 | # Uncomment if you have tasks that create the project's static files in wwwroot
30 | #wwwroot/
31 |
32 | # Visual Studio 2017 auto generated files
33 | Generated\ Files/
34 |
35 | # MSTest test Results
36 | [Tt]est[Rr]esult*/
37 | [Bb]uild[Ll]og.*
38 |
39 | # NUNIT
40 | *.VisualState.xml
41 | TestResult.xml
42 |
43 | # Build Results of an ATL Project
44 | [Dd]ebugPS/
45 | [Rr]eleasePS/
46 | dlldata.c
47 |
48 | # Benchmark Results
49 | BenchmarkDotNet.Artifacts/
50 |
51 | # .NET Core
52 | project.lock.json
53 | project.fragment.lock.json
54 | artifacts/
55 |
56 | # StyleCop
57 | StyleCopReport.xml
58 |
59 | # Files built by Visual Studio
60 | *_i.c
61 | *_p.c
62 | *_i.h
63 | *.ilk
64 | *.meta
65 | *.obj
66 | *.iobj
67 | *.pch
68 | *.pdb
69 | *.ipdb
70 | *.pgc
71 | *.pgd
72 | *.rsp
73 | *.sbr
74 | *.tlb
75 | *.tli
76 | *.tlh
77 | *.tmp
78 | *.tmp_proj
79 | *.log
80 | *.vspscc
81 | *.vssscc
82 | .builds
83 | *.pidb
84 | *.svclog
85 | *.scc
86 |
87 | # Chutzpah Test files
88 | _Chutzpah*
89 |
90 | # Visual C++ cache files
91 | ipch/
92 | *.aps
93 | *.ncb
94 | *.opendb
95 | *.opensdf
96 | *.sdf
97 | *.cachefile
98 | *.VC.db
99 | *.VC.VC.opendb
100 |
101 | # Visual Studio profiler
102 | *.psess
103 | *.vsp
104 | *.vspx
105 | *.sap
106 |
107 | # Visual Studio Trace Files
108 | *.e2e
109 |
110 | # TFS 2012 Local Workspace
111 | $tf/
112 |
113 | # Guidance Automation Toolkit
114 | *.gpState
115 |
116 | # ReSharper is a .NET coding add-in
117 | _ReSharper*/
118 | *.[Rr]e[Ss]harper
119 | *.DotSettings.user
120 |
121 | # JustCode is a .NET coding add-in
122 | .JustCode
123 |
124 | # TeamCity is a build add-in
125 | _TeamCity*
126 |
127 | # DotCover is a Code Coverage Tool
128 | *.dotCover
129 |
130 | # AxoCover is a Code Coverage Tool
131 | .axoCover/*
132 | !.axoCover/settings.json
133 |
134 | # Visual Studio code coverage results
135 | *.coverage
136 | *.coveragexml
137 |
138 | # NCrunch
139 | _NCrunch_*
140 | .*crunch*.local.xml
141 | nCrunchTemp_*
142 |
143 | # MightyMoose
144 | *.mm.*
145 | AutoTest.Net/
146 |
147 | # Web workbench (sass)
148 | .sass-cache/
149 |
150 | # Installshield output folder
151 | [Ee]xpress/
152 |
153 | # DocProject is a documentation generator add-in
154 | DocProject/buildhelp/
155 | DocProject/Help/*.HxT
156 | DocProject/Help/*.HxC
157 | DocProject/Help/*.hhc
158 | DocProject/Help/*.hhk
159 | DocProject/Help/*.hhp
160 | DocProject/Help/Html2
161 | DocProject/Help/html
162 |
163 | # Click-Once directory
164 | publish/
165 |
166 | # Publish Web Output
167 | *.[Pp]ublish.xml
168 | *.azurePubxml
169 | # Note: Comment the next line if you want to checkin your web deploy settings,
170 | # but database connection strings (with potential passwords) will be unencrypted
171 | *.pubxml
172 | *.publishproj
173 |
174 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
175 | # checkin your Azure Web App publish settings, but sensitive information contained
176 | # in these scripts will be unencrypted
177 | PublishScripts/
178 |
179 | # NuGet Packages
180 | *.nupkg
181 | # The packages folder can be ignored because of Package Restore
182 | **/[Pp]ackages/*
183 | # except build/, which is used as an MSBuild target.
184 | !**/[Pp]ackages/build/
185 | # Uncomment if necessary however generally it will be regenerated when needed
186 | #!**/[Pp]ackages/repositories.config
187 | # NuGet v3's project.json files produces more ignorable files
188 | *.nuget.props
189 | *.nuget.targets
190 |
191 | # Microsoft Azure Build Output
192 | csx/
193 | *.build.csdef
194 |
195 | # Microsoft Azure Emulator
196 | ecf/
197 | rcf/
198 |
199 | # Windows Store app package directories and files
200 | AppPackages/
201 | BundleArtifacts/
202 | Package.StoreAssociation.xml
203 | _pkginfo.txt
204 | *.appx
205 |
206 | # Visual Studio cache files
207 | # files ending in .cache can be ignored
208 | *.[Cc]ache
209 | # but keep track of directories ending in .cache
210 | !*.[Cc]ache/
211 |
212 | # Others
213 | ClientBin/
214 | ~$*
215 | *~
216 | *.dbmdl
217 | *.dbproj.schemaview
218 | *.jfm
219 | *.pfx
220 | *.publishsettings
221 | orleans.codegen.cs
222 |
223 | # Including strong name files can present a security risk
224 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
225 | #*.snk
226 |
227 | # Since there are multiple workflows, uncomment next line to ignore bower_components
228 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
229 | #bower_components/
230 |
231 | # RIA/Silverlight projects
232 | Generated_Code/
233 |
234 | # Backup & report files from converting an old project file
235 | # to a newer Visual Studio version. Backup files are not needed,
236 | # because we have git ;-)
237 | _UpgradeReport_Files/
238 | Backup*/
239 | UpgradeLog*.XML
240 | UpgradeLog*.htm
241 | ServiceFabricBackup/
242 | *.rptproj.bak
243 |
244 | # SQL Server files
245 | *.mdf
246 | *.ldf
247 | *.ndf
248 |
249 | # Business Intelligence projects
250 | *.rdl.data
251 | *.bim.layout
252 | *.bim_*.settings
253 | *.rptproj.rsuser
254 |
255 | # Microsoft Fakes
256 | FakesAssemblies/
257 |
258 | # GhostDoc plugin setting file
259 | *.GhostDoc.xml
260 |
261 | # Node.js Tools for Visual Studio
262 | .ntvs_analysis.dat
263 | node_modules/
264 |
265 | # Visual Studio 6 build log
266 | *.plg
267 |
268 | # Visual Studio 6 workspace options file
269 | *.opt
270 |
271 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
272 | *.vbw
273 |
274 | # Visual Studio LightSwitch build output
275 | **/*.HTMLClient/GeneratedArtifacts
276 | **/*.DesktopClient/GeneratedArtifacts
277 | **/*.DesktopClient/ModelManifest.xml
278 | **/*.Server/GeneratedArtifacts
279 | **/*.Server/ModelManifest.xml
280 | _Pvt_Extensions
281 |
282 | # Paket dependency manager
283 | .paket/paket.exe
284 | paket-files/
285 |
286 | # FAKE - F# Make
287 | .fake/
288 |
289 | # JetBrains Rider
290 | .idea/
291 | *.sln.iml
292 |
293 | # CodeRush
294 | .cr/
295 |
296 | # Python Tools for Visual Studio (PTVS)
297 | __pycache__/
298 | *.pyc
299 |
300 | # Cake - Uncomment if you are using it
301 | # tools/**
302 | # !tools/packages.config
303 |
304 | # Tabs Studio
305 | *.tss
306 |
307 | # Telerik's JustMock configuration file
308 | *.jmconfig
309 |
310 | # BizTalk build output
311 | *.btp.cs
312 | *.btm.cs
313 | *.odx.cs
314 | *.xsd.cs
315 |
316 | # OpenCover UI analysis results
317 | OpenCover/
318 |
319 | # Azure Stream Analytics local run output
320 | ASALocalRun/
321 |
322 | # MSBuild Binary and Structured Log
323 | *.binlog
324 |
325 | # NVidia Nsight GPU debugger configuration file
326 | *.nvuser
327 |
328 | # MFractors (Xamarin productivity tool) working folder
329 | .mfractor/
330 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | This is free and unencumbered software released into the public domain.
2 |
3 | Anyone is free to copy, modify, publish, use, compile, sell, or
4 | distribute this software, either in source code form or as a compiled
5 | binary, for any purpose, commercial or non-commercial, and by any
6 | means.
7 |
8 | In jurisdictions that recognize copyright laws, the author or authors
9 | of this software dedicate any and all copyright interest in the
10 | software to the public domain. We make this dedication for the benefit
11 | of the public at large and to the detriment of our heirs and
12 | successors. We intend this dedication to be an overt act of
13 | relinquishment in perpetuity of all present and future rights to this
14 | software under copyright law.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | For more information, please refer to
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | vkdemo
2 | ======
3 | A simple, spinny-cube Vulkan demo program for Win32.
4 |
5 | Nothing particularly special about it, just keeping it here for future reference.
6 |
--------------------------------------------------------------------------------
/cube.frag:
--------------------------------------------------------------------------------
1 | /*
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 | */
25 |
26 | #version 400
27 | #extension GL_ARB_separate_shader_objects : enable
28 | #extension GL_ARB_shading_language_420pack : enable
29 |
30 | layout(location = 0) in vec4 vColor;
31 | layout(location = 0) out vec4 oColor;
32 |
33 | void main()
34 | {
35 | oColor = vColor;
36 | }
37 |
--------------------------------------------------------------------------------
/cube.vert:
--------------------------------------------------------------------------------
1 | /*
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 | */
25 |
26 | #version 400
27 | #extension GL_ARB_separate_shader_objects : enable
28 | #extension GL_ARB_shading_language_420pack : enable
29 |
30 | const vec4 boxVerts[8] = {
31 | { -1.0, -1.0, -1.0, 1.0 },
32 | { 1.0, -1.0, -1.0, 1.0 },
33 | { -1.0, 1.0, -1.0, 1.0 },
34 | { 1.0, 1.0, -1.0, 1.0 },
35 | { -1.0, -1.0, 1.0, 1.0 },
36 | { 1.0, -1.0, 1.0, 1.0 },
37 | { -1.0, 1.0, 1.0, 1.0 },
38 | { 1.0, 1.0, 1.0, 1.0 },
39 | };
40 |
41 | const vec4 boxColors[8] = {
42 | { 0.0, 0.0, 0.0, 1.0 },
43 | { 1.0, 0.0, 0.0, 1.0 },
44 | { 0.0, 1.0, 0.0, 1.0 },
45 | { 1.0, 1.0, 0.0, 1.0 },
46 | { 0.0, 0.0, 1.0, 1.0 },
47 | { 1.0, 0.0, 1.0, 1.0 },
48 | { 0.0, 1.0, 1.0, 1.0 },
49 | { 1.0, 1.0, 1.0, 1.0 },
50 | };
51 |
52 | const int boxIndices[36] = {
53 | 1, 0, 2,
54 | 1, 2, 3,
55 | 5, 1, 3,
56 | 5, 3, 7,
57 | 4, 5, 7,
58 | 4, 7, 6,
59 | 0, 4, 6,
60 | 0, 6, 2,
61 | 6, 7, 3,
62 | 6, 3, 2,
63 | 1, 4, 0,
64 | 1, 5, 4,
65 | };
66 |
67 | layout(push_constant) uniform Matrices
68 | {
69 | mat4 clipFromLocal;
70 | } matrices;
71 |
72 | layout(location = 0) out vec4 vColor;
73 |
74 | void main()
75 | {
76 | int index = boxIndices[gl_VertexIndex];
77 | vec4 localPos = boxVerts[index];
78 | vColor = boxColors[index];
79 | gl_Position = matrices.clipFromLocal * localPos;
80 | }
81 |
--------------------------------------------------------------------------------
/vkdemo.c:
--------------------------------------------------------------------------------
1 | /*
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 | */
25 |
26 | #include
27 | #include
28 | #include
29 |
30 | #include "vkdemo.h"
31 |
32 | #define PI 3.14159265f
33 | #define CUBE_SPIN_SPEED 0.5f // turns per second
34 |
35 | typedef struct VulkanFramebuffer {
36 | VkImageView view;
37 | VkFramebuffer framebuffer;
38 | } VulkanFramebuffer;
39 |
40 | typedef struct DemoResources {
41 | VulkanFramebuffer *framebuffers;
42 | VkRenderPass renderPass;
43 | VkShaderModule vertexShader;
44 | VkShaderModule fragmentShader;
45 | VkPipelineLayout pipelineLayout;
46 | VkPipeline pipeline;
47 | } DemoResources;
48 |
49 | typedef struct Vec3 {
50 | float x, y, z;
51 | } Vec3;
52 |
53 | typedef struct Vec4 {
54 | float x, y, z, w;
55 | } Vec4;
56 |
57 | typedef struct Mat4 {
58 | Vec4 m[4];
59 | } Mat4;
60 |
61 | typedef struct ShaderMatrices {
62 | Mat4 clipFromLocal;
63 | } ShaderMatrices;
64 |
65 | static DemoResources s_resources;
66 | static uint32_t s_frameNum;
67 | static float s_cubeRot; // in turns
68 |
69 | static inline Vec3 vec3Add(Vec3 a, Vec3 b)
70 | {
71 | Vec3 r;
72 |
73 | r.x = a.x + b.x;
74 | r.y = a.y + b.y;
75 | r.z = a.z + b.z;
76 |
77 | return r;
78 | }
79 |
80 | static inline Vec3 vec3Sub(Vec3 a, Vec3 b)
81 | {
82 | Vec3 r;
83 |
84 | r.x = a.x - b.x;
85 | r.y = a.y - b.y;
86 | r.z = a.z - b.z;
87 |
88 | return r;
89 | }
90 |
91 | static inline Vec3 vec3Scale(Vec3 a, float b)
92 | {
93 | Vec3 r;
94 |
95 | r.x = a.x * b;
96 | r.y = a.y * b;
97 | r.z = a.z * b;
98 |
99 | return r;
100 | }
101 |
102 | static inline float vec3Dot(Vec3 a, Vec3 b)
103 | {
104 | return a.x * b.x + a.y * b.y + a.z * b.z;
105 | }
106 |
107 | static inline Vec3 vec3Normalize(Vec3 v)
108 | {
109 | float lensq = vec3Dot(v, v);
110 | return vec3Scale(v, 1.0f / sqrtf(lensq));
111 | }
112 |
113 | static inline Vec3 vec3Cross(Vec3 a, Vec3 b)
114 | {
115 | Vec3 r;
116 |
117 | r.x = a.y * b.z - a.z * b.y;
118 | r.y = a.z * b.x - a.x * b.z;
119 | r.z = a.x * b.y - a.y * b.x;
120 |
121 | return r;
122 | }
123 |
124 | static void mat4RotY(Mat4 *m, float angle)
125 | {
126 | float c = cosf(angle);
127 | float s = sinf(angle);
128 |
129 | m->m[0].x = c;
130 | m->m[0].y = 0.0f;
131 | m->m[0].z = s;
132 | m->m[0].w = 0.0f;
133 |
134 | m->m[1].x = 0.0f;
135 | m->m[1].y = 1.0f;
136 | m->m[1].z = 0.0f;
137 | m->m[1].w = 0.0f;
138 |
139 | m->m[2].x = -s;
140 | m->m[2].y = 0.0f;
141 | m->m[2].z = c;
142 | m->m[2].w = 0.0f;
143 |
144 | m->m[3].x = 0.0f;
145 | m->m[3].y = 0.0f;
146 | m->m[3].z = 0.0f;
147 | m->m[3].w = 1.0f;
148 | }
149 |
150 | static void mat4Mul(Mat4 *r, const Mat4 *a, const Mat4 *b)
151 | {
152 | Mat4 tmp;
153 |
154 | tmp.m[0].x = a->m[0].x * b->m[0].x + a->m[1].x * b->m[0].y + a->m[2].x * b->m[0].z + a->m[3].x * b->m[0].w;
155 | tmp.m[0].y = a->m[0].y * b->m[0].x + a->m[1].y * b->m[0].y + a->m[2].y * b->m[0].z + a->m[3].y * b->m[0].w;
156 | tmp.m[0].z = a->m[0].z * b->m[0].x + a->m[1].z * b->m[0].y + a->m[2].z * b->m[0].z + a->m[3].z * b->m[0].w;
157 | tmp.m[0].w = a->m[0].w * b->m[0].x + a->m[1].w * b->m[0].y + a->m[2].w * b->m[0].z + a->m[3].w * b->m[0].w;
158 |
159 | tmp.m[1].x = a->m[0].x * b->m[1].x + a->m[1].x * b->m[1].y + a->m[2].x * b->m[1].z + a->m[3].x * b->m[1].w;
160 | tmp.m[1].y = a->m[0].y * b->m[1].x + a->m[1].y * b->m[1].y + a->m[2].y * b->m[1].z + a->m[3].y * b->m[1].w;
161 | tmp.m[1].z = a->m[0].z * b->m[1].x + a->m[1].z * b->m[1].y + a->m[2].z * b->m[1].z + a->m[3].z * b->m[1].w;
162 | tmp.m[1].w = a->m[0].w * b->m[1].x + a->m[1].w * b->m[1].y + a->m[2].w * b->m[1].z + a->m[3].w * b->m[1].w;
163 |
164 | tmp.m[2].x = a->m[0].x * b->m[2].x + a->m[1].x * b->m[2].y + a->m[2].x * b->m[2].z + a->m[3].x * b->m[2].w;
165 | tmp.m[2].y = a->m[0].y * b->m[2].x + a->m[1].y * b->m[2].y + a->m[2].y * b->m[2].z + a->m[3].y * b->m[2].w;
166 | tmp.m[2].z = a->m[0].z * b->m[2].x + a->m[1].z * b->m[2].y + a->m[2].z * b->m[2].z + a->m[3].z * b->m[2].w;
167 | tmp.m[2].w = a->m[0].w * b->m[2].x + a->m[1].w * b->m[2].y + a->m[2].w * b->m[2].z + a->m[3].w * b->m[2].w;
168 |
169 | tmp.m[3].x = a->m[0].x * b->m[3].x + a->m[1].x * b->m[3].y + a->m[2].x * b->m[3].z + a->m[3].x * b->m[3].w;
170 | tmp.m[3].y = a->m[0].y * b->m[3].x + a->m[1].y * b->m[3].y + a->m[2].y * b->m[3].z + a->m[3].y * b->m[3].w;
171 | tmp.m[3].z = a->m[0].z * b->m[3].x + a->m[1].z * b->m[3].y + a->m[2].z * b->m[3].z + a->m[3].z * b->m[3].w;
172 | tmp.m[3].w = a->m[0].w * b->m[3].x + a->m[1].w * b->m[3].y + a->m[2].w * b->m[3].z + a->m[3].w * b->m[3].w;
173 |
174 | memcpy(r, &tmp, sizeof(tmp));
175 | }
176 |
177 | static inline void mat4PerspectiveFov(Mat4 *r, float fovY, float aspect, float nearDist, float farDist)
178 | {
179 | float y = tanf(fovY * 0.5f);
180 | float x = aspect * y;
181 |
182 | float hw = x * nearDist;
183 | float hh = y * nearDist;
184 | float c, d;
185 |
186 | if (nearDist < farDist) {
187 | c = nearDist / (nearDist - farDist);
188 | d = -farDist * nearDist / (nearDist - farDist);
189 | } else {
190 | c = 0.0f;
191 | d = nearDist;
192 | }
193 |
194 | r->m[0].x = 1.0f / x;
195 | r->m[0].y = 0.0f;
196 | r->m[0].z = 0.0f;
197 | r->m[0].w = 0.0f;
198 |
199 | r->m[1].x = 0.0f;
200 | r->m[1].y = 1.0f / y;
201 | r->m[1].z = 0.0f;
202 | r->m[1].w = 0.0f;
203 |
204 | r->m[2].x = 0.0f;
205 | r->m[2].y = 0.0f;
206 | r->m[2].z = c;
207 | r->m[2].w = 1.0f;
208 |
209 | r->m[3].x = 0.0f;
210 | r->m[3].y = 0.0f;
211 | r->m[3].z = d;
212 | r->m[3].w = 0.0f;
213 | }
214 |
215 | static inline void mat4LookAt(Mat4 *r, Vec3 eye, Vec3 target, Vec3 up)
216 | {
217 | Vec3 mf = vec3Normalize(vec3Sub(target, eye));
218 | Vec3 mr = vec3Normalize(vec3Cross(up, mf));
219 | Vec3 mu = vec3Cross(mr, mf);
220 |
221 | r->m[0].x = mr.x;
222 | r->m[0].y = mr.y;
223 | r->m[0].z = mr.z;
224 | r->m[0].w = 0.0f;
225 |
226 | r->m[1].x = mu.x;
227 | r->m[1].y = mu.y;
228 | r->m[1].z = mu.z;
229 | r->m[1].w = 0.0f;
230 |
231 | r->m[2].x = mf.x;
232 | r->m[2].y = mf.y;
233 | r->m[2].z = mf.z;
234 | r->m[2].w = 0.0f;
235 |
236 | r->m[3].x = -eye.x * mr.x - eye.y * mu.x - eye.z * mf.x;
237 | r->m[3].y = -eye.x * mr.y - eye.y * mu.y - eye.z * mf.y;
238 | r->m[3].z = -eye.x * mr.z - eye.y * mu.z - eye.z * mf.z;
239 | r->m[3].w = 1.0f;
240 | }
241 |
242 | int InitResources(const VulkanDevice *device)
243 | {
244 | // create render pass
245 | {
246 | VkAttachmentDescription attachmentDesc = {
247 | .flags = 0,
248 | .format = device->surfaceFormat,
249 | .samples = VK_SAMPLE_COUNT_1_BIT,
250 | .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
251 | .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
252 | .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
253 | .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
254 | .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
255 | .finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
256 | };
257 |
258 | VkAttachmentReference attachmentRef = {
259 | .attachment = 0,
260 | .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
261 | };
262 |
263 | VkSubpassDescription subpass = {
264 | .flags = 0,
265 | .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
266 | .inputAttachmentCount = 0,
267 | .pInputAttachments = NULL,
268 | .colorAttachmentCount = 1,
269 | .pColorAttachments = &attachmentRef,
270 | .pResolveAttachments = NULL,
271 | .pResolveAttachments = NULL,
272 | .pDepthStencilAttachment = NULL,
273 | .preserveAttachmentCount = 0,
274 | .pPreserveAttachments = NULL,
275 | };
276 |
277 | VkRenderPassCreateInfo passCreateInfo = {
278 | .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
279 | .pNext = NULL,
280 | .flags = 0,
281 | .attachmentCount = 1,
282 | .pAttachments = &attachmentDesc,
283 | .subpassCount = 1,
284 | .pSubpasses = &subpass,
285 | .dependencyCount = 0,
286 | .pDependencies = NULL,
287 | };
288 | VK_VERIFY(device->vkCreateRenderPass(device->device, &passCreateInfo, NULL, &s_resources.renderPass));
289 | }
290 |
291 | // create frame buffers
292 | s_resources.framebuffers = malloc(sizeof(*s_resources.framebuffers) * device->swapchainImageCount);
293 | for (uint32_t i = 0; i < device->swapchainImageCount; ++i) {
294 | VkImageViewCreateInfo imageViewCreateInfo = {
295 | .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
296 | .pNext = NULL,
297 | .flags = 0,
298 | .image = device->swapchainImages[i],
299 | .viewType = VK_IMAGE_VIEW_TYPE_2D,
300 | .format = device->surfaceFormat,
301 | .components = {
302 | .r = VK_COMPONENT_SWIZZLE_R,
303 | .g = VK_COMPONENT_SWIZZLE_G,
304 | .b = VK_COMPONENT_SWIZZLE_B,
305 | .a = VK_COMPONENT_SWIZZLE_A
306 | },
307 | .subresourceRange = {
308 | .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
309 | .baseMipLevel = 0,
310 | .levelCount = 1,
311 | .baseArrayLayer = 0,
312 | .layerCount = 1
313 | },
314 | };
315 | VK_VERIFY(device->vkCreateImageView(device->device, &imageViewCreateInfo, NULL, &s_resources.framebuffers[i].view));
316 |
317 | VkFramebufferCreateInfo framebufferCreateInfo = {
318 | .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
319 | .pNext = NULL,
320 | .flags = 0,
321 | .renderPass = s_resources.renderPass,
322 | .attachmentCount = 1,
323 | .pAttachments = &s_resources.framebuffers[i].view,
324 | .width = device->surfaceWidth,
325 | .height = device->surfaceHeight,
326 | .layers = 1,
327 | };
328 | VK_VERIFY(device->vkCreateFramebuffer(device->device, &framebufferCreateInfo, NULL, &s_resources.framebuffers[i].framebuffer));
329 | }
330 |
331 | // create pipeline
332 | {
333 | static const uint8_t g_vertexShaderCode[] = {
334 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00,
335 | 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
336 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
337 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
338 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
339 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
340 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
341 | 0x16, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
342 | 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00,
343 | 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73,
344 | 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64,
345 | 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00,
346 | 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73,
347 | 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75,
348 | 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00,
349 | 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e,
350 | 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
351 | 0x69, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
352 | 0x16, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x56, 0x65, 0x72, 0x74, 0x65,
353 | 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
354 | 0x19, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x62, 0x6c,
355 | 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
356 | 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00,
357 | 0x05, 0x00, 0x05, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x64, 0x65,
358 | 0x78, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
359 | 0x33, 0x00, 0x00, 0x00, 0x76, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00,
360 | 0x05, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x64, 0x65,
361 | 0x78, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
362 | 0x43, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65,
363 | 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00,
364 | 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50,
365 | 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x07, 0x00,
366 | 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50,
367 | 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x00, 0x00,
368 | 0x06, 0x00, 0x07, 0x00, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
369 | 0x67, 0x6c, 0x5f, 0x43, 0x6c, 0x69, 0x70, 0x44, 0x69, 0x73, 0x74, 0x61,
370 | 0x6e, 0x63, 0x65, 0x00, 0x05, 0x00, 0x03, 0x00, 0x45, 0x00, 0x00, 0x00,
371 | 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x47, 0x00, 0x00, 0x00,
372 | 0x4d, 0x61, 0x74, 0x72, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x00,
373 | 0x06, 0x00, 0x07, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374 | 0x63, 0x6c, 0x69, 0x70, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x6f, 0x63, 0x61,
375 | 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x49, 0x00, 0x00, 0x00,
376 | 0x6d, 0x61, 0x74, 0x72, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x00,
377 | 0x47, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
378 | 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00,
379 | 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
380 | 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
381 | 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x43, 0x00, 0x00, 0x00,
382 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
383 | 0x48, 0x00, 0x05, 0x00, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
384 | 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
385 | 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
386 | 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
387 | 0x48, 0x00, 0x05, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
388 | 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
389 | 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
390 | 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x47, 0x00, 0x00, 0x00,
391 | 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
392 | 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
393 | 0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
394 | 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
395 | 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
396 | 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
397 | 0x2b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
398 | 0x24, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
399 | 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
400 | 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
401 | 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
402 | 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
403 | 0x0e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
404 | 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
405 | 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
406 | 0x05, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
407 | 0x11, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
408 | 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
409 | 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
410 | 0x06, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x27, 0x00, 0x0b, 0x00, 0x00, 0x00,
411 | 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
412 | 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
413 | 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
414 | 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
415 | 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
416 | 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
417 | 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
418 | 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
419 | 0x0e, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
420 | 0x0f, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
421 | 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
422 | 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
423 | 0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
424 | 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
425 | 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
426 | 0x20, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
427 | 0x0b, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00, 0x00,
428 | 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
429 | 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
430 | 0x1e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
431 | 0x2b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
432 | 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00,
433 | 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
434 | 0x1c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf,
435 | 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
436 | 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00,
437 | 0x24, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
438 | 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
439 | 0x1d, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
440 | 0x22, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
441 | 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
442 | 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
443 | 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00,
444 | 0x27, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
445 | 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
446 | 0x1d, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
447 | 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
448 | 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
449 | 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
450 | 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00,
451 | 0x2a, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
452 | 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
453 | 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
454 | 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
455 | 0x2c, 0x00, 0x0b, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
456 | 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
457 | 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
458 | 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
459 | 0x2e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
460 | 0x20, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
461 | 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
462 | 0x33, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
463 | 0x1c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
464 | 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
465 | 0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
466 | 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00,
467 | 0x36, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
468 | 0x34, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
469 | 0x1d, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
470 | 0x23, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
471 | 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
472 | 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
473 | 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00,
474 | 0x39, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
475 | 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
476 | 0x1d, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
477 | 0x34, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
478 | 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
479 | 0x34, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
480 | 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x0b, 0x00, 0x21, 0x00, 0x00, 0x00,
481 | 0x3c, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
482 | 0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
483 | 0x3a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
484 | 0x2b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
485 | 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00,
486 | 0x1c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00,
487 | 0x43, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
488 | 0x42, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x44, 0x00, 0x00, 0x00,
489 | 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
490 | 0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
491 | 0x18, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
492 | 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x47, 0x00, 0x00, 0x00,
493 | 0x46, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, 0x00,
494 | 0x09, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
495 | 0x48, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
496 | 0x20, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
497 | 0x46, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00,
498 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
499 | 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
500 | 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
501 | 0x3b, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
502 | 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00,
503 | 0x1f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
504 | 0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
505 | 0x3b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
506 | 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
507 | 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
508 | 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
509 | 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
510 | 0x17, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
511 | 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
512 | 0x08, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
513 | 0x06, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
514 | 0x3e, 0x00, 0x03, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
515 | 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
516 | 0x2f, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
517 | 0x1d, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
518 | 0x3e, 0x00, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
519 | 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
520 | 0x08, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3e, 0x00, 0x00, 0x00,
521 | 0x3c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00,
522 | 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
523 | 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
524 | 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x33, 0x00, 0x00, 0x00,
525 | 0x40, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x4a, 0x00, 0x00, 0x00,
526 | 0x4b, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
527 | 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
528 | 0x4b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
529 | 0x4d, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
530 | 0x1d, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
531 | 0x4d, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x32, 0x00, 0x00, 0x00,
532 | 0x4f, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
533 | 0x3e, 0x00, 0x03, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
534 | 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
535 | };
536 |
537 | static const uint8_t g_fragmentShaderCode[] = {
538 | 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00,
539 | 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
540 | 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
541 | 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
542 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
543 | 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
544 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
545 | 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
546 | 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
547 | 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00,
548 | 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72,
549 | 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f,
550 | 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00,
551 | 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69,
552 | 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f,
553 | 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00, 0x05, 0x00, 0x04, 0x00,
554 | 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
555 | 0x05, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6f, 0x43, 0x6f, 0x6c,
556 | 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
557 | 0x76, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
558 | 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
559 | 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
560 | 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
561 | 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
562 | 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
563 | 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
564 | 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
565 | 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
566 | 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
567 | 0x20, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
568 | 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
569 | 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
570 | 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
571 | 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
572 | 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
573 | 0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
574 | 0x0c, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
575 | };
576 |
577 | VkShaderModuleCreateInfo vertexShaderCreateInfo = {
578 | .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
579 | .pNext = NULL,
580 | .flags = 0,
581 | .codeSize = sizeof(g_vertexShaderCode),
582 | .pCode = (const uint32_t *)g_vertexShaderCode,
583 | };
584 |
585 | VK_VERIFY(device->vkCreateShaderModule(device->device, &vertexShaderCreateInfo, NULL, &s_resources.vertexShader));
586 |
587 | VkShaderModuleCreateInfo fragmentShaderCreateInfo = {
588 | .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
589 | .pNext = NULL,
590 | .flags = 0,
591 | .codeSize = sizeof(g_fragmentShaderCode),
592 | .pCode = (const uint32_t *)g_fragmentShaderCode,
593 | };
594 |
595 | VK_VERIFY(device->vkCreateShaderModule(device->device, &fragmentShaderCreateInfo, NULL, &s_resources.fragmentShader));
596 |
597 | VkPipelineShaderStageCreateInfo shaderStageCreateInfos[2] = {
598 | {
599 | .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
600 | .pNext = NULL,
601 | .flags = 0,
602 | .stage = VK_SHADER_STAGE_VERTEX_BIT,
603 | .module = s_resources.vertexShader,
604 | .pName = "main",
605 | .pSpecializationInfo = NULL,
606 | },
607 | {
608 | .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
609 | .pNext = NULL,
610 | .flags = 0,
611 | .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
612 | .module = s_resources.fragmentShader,
613 | .pName = "main",
614 | .pSpecializationInfo = NULL,
615 | },
616 | };
617 |
618 | VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo = {
619 | .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
620 | .pNext = NULL,
621 | .flags = 0,
622 | .vertexBindingDescriptionCount = 0,
623 | .pVertexBindingDescriptions = NULL,
624 | .vertexAttributeDescriptionCount = 0,
625 | .pVertexAttributeDescriptions = NULL,
626 | };
627 |
628 | VkPipelineInputAssemblyStateCreateInfo inputAssemblyCreateInfo = {
629 | .sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
630 | .pNext = NULL,
631 | .flags = 0,
632 | .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
633 | .primitiveRestartEnable = VK_FALSE,
634 | };
635 |
636 | VkViewport viewport = {
637 | .x = 0.0f,
638 | .y = 0.0f,
639 | .width = (float) device->surfaceWidth,
640 | .height = (float) device->surfaceHeight,
641 | .minDepth = 0.0f,
642 | .maxDepth = 1.0f,
643 | };
644 |
645 | VkRect2D backBufferRect = {
646 | .offset = {
647 | .x = 0,
648 | .y = 0,
649 | },
650 | .extent = {
651 | .width = device->surfaceWidth,
652 | .height = device->surfaceHeight,
653 | },
654 | };
655 |
656 | VkPipelineViewportStateCreateInfo viewportStateCreateInfo = {
657 | .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
658 | .pNext = NULL,
659 | .flags = 0,
660 | .viewportCount = 1,
661 | .pViewports = &viewport,
662 | .scissorCount = 1,
663 | .pScissors = &backBufferRect,
664 | };
665 |
666 | VkPipelineRasterizationStateCreateInfo rasterStateCreateInfo = {
667 | .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
668 | .pNext = NULL,
669 | .flags = 0,
670 | .depthClampEnable = VK_FALSE,
671 | .rasterizerDiscardEnable = VK_FALSE,
672 | .polygonMode = VK_POLYGON_MODE_FILL,
673 | .cullMode = VK_CULL_MODE_BACK_BIT,
674 | .frontFace = VK_FRONT_FACE_CLOCKWISE,
675 | .depthBiasEnable = VK_FALSE,
676 | .depthBiasConstantFactor = 0.0f,
677 | .depthBiasClamp = 0.0f,
678 | .depthBiasSlopeFactor = 0.0f,
679 | .lineWidth = 1.0f,
680 | };
681 |
682 | VkPipelineMultisampleStateCreateInfo multisampleStateCreateInfo = {
683 | .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
684 | .pNext = NULL,
685 | .flags = 0,
686 | .rasterizationSamples = VK_SAMPLE_COUNT_1_BIT,
687 | .sampleShadingEnable = VK_FALSE,
688 | .minSampleShading = 0.0f,
689 | .pSampleMask = NULL,
690 | .alphaToCoverageEnable = VK_FALSE,
691 | .alphaToOneEnable = VK_FALSE,
692 | };
693 |
694 | VkPipelineDepthStencilStateCreateInfo dsStateCreateInfo = {
695 | .sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
696 | .pNext = NULL,
697 | .flags = 0,
698 | .depthTestEnable = VK_FALSE,
699 | .depthWriteEnable = VK_FALSE,
700 | .depthCompareOp = VK_COMPARE_OP_ALWAYS,
701 | .depthBoundsTestEnable = VK_FALSE,
702 | .stencilTestEnable = VK_FALSE,
703 | .front = {
704 | .failOp = VK_STENCIL_OP_KEEP,
705 | .passOp = VK_STENCIL_OP_KEEP,
706 | .depthFailOp = VK_STENCIL_OP_KEEP,
707 | .compareOp = VK_COMPARE_OP_ALWAYS,
708 | .compareMask = 0,
709 | .writeMask = 0,
710 | .reference = 0,
711 | },
712 | .back = {
713 | .failOp = VK_STENCIL_OP_KEEP,
714 | .passOp = VK_STENCIL_OP_KEEP,
715 | .depthFailOp = VK_STENCIL_OP_KEEP,
716 | .compareOp = VK_COMPARE_OP_ALWAYS,
717 | .compareMask = 0,
718 | .writeMask = 0,
719 | .reference = 0,
720 | },
721 | .minDepthBounds = 0.0f,
722 | .maxDepthBounds = 1.0f,
723 | };
724 |
725 | VkPipelineColorBlendAttachmentState blendAttachState = {
726 | .blendEnable = VK_FALSE,
727 | .srcColorBlendFactor = VK_BLEND_FACTOR_ONE,
728 | .dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
729 | .colorBlendOp = VK_BLEND_OP_ADD,
730 | .srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE,
731 | .dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
732 | .alphaBlendOp = VK_BLEND_OP_ADD,
733 | .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT,
734 | };
735 |
736 | VkPipelineColorBlendStateCreateInfo blendStateCreateInfo = {
737 | .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
738 | .pNext = NULL,
739 | .flags = 0,
740 | .logicOpEnable = VK_FALSE,
741 | .logicOp = VK_LOGIC_OP_CLEAR,
742 | .attachmentCount = 1,
743 | .pAttachments = &blendAttachState,
744 | .blendConstants = { 0.0f, 0.0f, 0.0f, 0.0f },
745 | };
746 |
747 | VkPushConstantRange pushConstants = {
748 | .stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
749 | .offset = 0,
750 | .size = sizeof(ShaderMatrices),
751 | };
752 |
753 | VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = {
754 | .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
755 | .pNext = NULL,
756 | .flags = 0,
757 | .setLayoutCount = 0,
758 | .pSetLayouts = NULL,
759 | .pushConstantRangeCount = 1,
760 | .pPushConstantRanges = &pushConstants,
761 | };
762 |
763 | VK_VERIFY(device->vkCreatePipelineLayout(device->device, &pipelineLayoutCreateInfo, NULL, &s_resources.pipelineLayout));
764 |
765 | VkGraphicsPipelineCreateInfo pipelineCreateInfo = {
766 | .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
767 | .pNext = NULL,
768 | .flags = 0,
769 | .stageCount = ARRAY_COUNT(shaderStageCreateInfos),
770 | .pStages = shaderStageCreateInfos,
771 | .pVertexInputState = &vertexInputStateCreateInfo,
772 | .pInputAssemblyState = &inputAssemblyCreateInfo,
773 | .pTessellationState = NULL,
774 | .pViewportState = &viewportStateCreateInfo,
775 | .pRasterizationState = &rasterStateCreateInfo,
776 | .pMultisampleState = &multisampleStateCreateInfo,
777 | .pDepthStencilState = &dsStateCreateInfo,
778 | .pColorBlendState = &blendStateCreateInfo,
779 | .pDynamicState = NULL,
780 | .layout = s_resources.pipelineLayout,
781 | .renderPass = s_resources.renderPass,
782 | .subpass = 0,
783 | .basePipelineHandle = VK_NULL_HANDLE,
784 | .basePipelineIndex = -1,
785 | };
786 |
787 | VK_VERIFY(device->vkCreateGraphicsPipelines(device->device, VK_NULL_HANDLE, 1, &pipelineCreateInfo, NULL, &s_resources.pipeline));
788 | }
789 |
790 | return 1;
791 | }
792 |
793 | void UninitResources(const VulkanDevice *device)
794 | {
795 | VK_VERIFY(device->vkDeviceWaitIdle(device->device));
796 |
797 | device->vkDestroyPipeline(device->device, s_resources.pipeline, NULL);
798 | s_resources.pipeline = VK_NULL_HANDLE;
799 | device->vkDestroyPipelineLayout(device->device, s_resources.pipelineLayout, NULL);
800 | s_resources.pipelineLayout = VK_NULL_HANDLE;
801 | device->vkDestroyShaderModule(device->device, s_resources.fragmentShader, NULL);
802 | s_resources.fragmentShader = VK_NULL_HANDLE;
803 | device->vkDestroyShaderModule(device->device, s_resources.vertexShader, NULL);
804 | s_resources.vertexShader = VK_NULL_HANDLE;
805 |
806 | for (uint32_t i = 0; i < device->swapchainImageCount; ++i) {
807 | device->vkDestroyImageView(device->device, s_resources.framebuffers[i].view, NULL);
808 | device->vkDestroyFramebuffer(device->device, s_resources.framebuffers[i].framebuffer, NULL);
809 | }
810 | free(s_resources.framebuffers);
811 | s_resources.framebuffers = NULL;
812 |
813 | device->vkDestroyRenderPass(device->device, s_resources.renderPass, NULL);
814 | s_resources.renderPass = VK_NULL_HANDLE;
815 | }
816 |
817 | int DrawFrame(const VulkanDevice *device, float dt)
818 | {
819 | VkRect2D backBufferRect = {
820 | .offset = {
821 | .x = 0,
822 | .y = 0,
823 | },
824 | .extent = {
825 | .width = device->surfaceWidth,
826 | .height = device->surfaceHeight,
827 | },
828 | };
829 |
830 | uint32_t curFrame = s_frameNum++ % ARRAY_COUNT(device->frames);
831 | VK_VERIFY(device->vkWaitForFences(device->device, 1, &device->frames[curFrame].frameComplete, VK_TRUE, UINT64_MAX));
832 | VK_VERIFY(device->vkResetFences(device->device, 1, &device->frames[curFrame].frameComplete));
833 |
834 | VkFence nullFence = VK_NULL_HANDLE;
835 | uint32_t imageIdx;
836 | VkResult result = device->vkAcquireNextImageKHR(device->device, device->swapchain, UINT64_MAX,
837 | device->frames[curFrame].imageAcquired, nullFence, &imageIdx);
838 | if (result == VK_ERROR_OUT_OF_DATE_KHR) {
839 | return 0;
840 | }
841 | ASSERT(result == VK_SUCCESS);
842 |
843 | VkCommandBuffer commandBuffer = device->frames[curFrame].commandBuffer;
844 |
845 | VkCommandBufferBeginInfo beginInfo = {
846 | .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
847 | .pNext = NULL,
848 | .flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
849 | .pInheritanceInfo = NULL,
850 | };
851 |
852 | VK_VERIFY(device->vkBeginCommandBuffer(commandBuffer, &beginInfo));
853 |
854 | VkClearValue clearValue = {
855 | .color.float32 = { 0.086f, 0.086f, 0.1137f, 1.0f, },
856 | };
857 | VkRenderPassBeginInfo passInfo = {
858 | .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
859 | .pNext = NULL,
860 | .renderPass = s_resources.renderPass,
861 | .framebuffer = s_resources.framebuffers[imageIdx].framebuffer,
862 | .renderArea = backBufferRect,
863 | .clearValueCount = 1,
864 | .pClearValues = &clearValue,
865 | };
866 | device->vkCmdBeginRenderPass(commandBuffer, &passInfo, VK_SUBPASS_CONTENTS_INLINE);
867 |
868 | device->vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, s_resources.pipeline);
869 |
870 | s_cubeRot += dt * CUBE_SPIN_SPEED;
871 | s_cubeRot -= floorf(s_cubeRot);
872 |
873 | ShaderMatrices matrices;
874 | Mat4 worldFromLocal, viewFromWorld, viewFromLocal, clipFromView;
875 | mat4RotY(&worldFromLocal, s_cubeRot * (2.0f * PI));
876 |
877 | Vec3 eye = { 0.0f, 1.5f, -3.0f };
878 | Vec3 target = { 0.0f, 0.0f, 0.0f };
879 | Vec3 up = { 0.0f, 1.0f, 0.0f };
880 | mat4LookAt(&viewFromWorld, eye, target, up);
881 | mat4Mul(&viewFromLocal, &viewFromWorld, &worldFromLocal);
882 |
883 | mat4PerspectiveFov(&clipFromView, PI / 2.0f, device->surfaceWidth / (float)device->surfaceHeight, 1.0f, 100.0f);
884 | mat4Mul(&matrices.clipFromLocal, &clipFromView, &viewFromLocal);
885 |
886 | device->vkCmdPushConstants(commandBuffer, s_resources.pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(matrices), &matrices);
887 |
888 | device->vkCmdDraw(commandBuffer, 36, 1, 0, 0);
889 |
890 | device->vkCmdEndRenderPass(commandBuffer);
891 | VK_VERIFY(device->vkEndCommandBuffer(commandBuffer));
892 |
893 | VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
894 | VkSubmitInfo submitInfo = {
895 | .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
896 | .pNext = NULL,
897 | .waitSemaphoreCount = 1,
898 | .pWaitSemaphores = &device->frames[curFrame].imageAcquired,
899 | .pWaitDstStageMask = &stageFlags,
900 | .commandBufferCount = 1,
901 | .pCommandBuffers = &commandBuffer,
902 | .signalSemaphoreCount = 1,
903 | .pSignalSemaphores = &device->frames[curFrame].drawComplete,
904 | };
905 |
906 | VK_VERIFY(device->vkQueueSubmit(device->queue, 1, &submitInfo, device->frames[curFrame].frameComplete));
907 |
908 | VkResult presentResult;
909 | VkPresentInfoKHR presentInfo = {
910 | .sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
911 | .pNext = NULL,
912 | .waitSemaphoreCount = 1,
913 | .pWaitSemaphores = &device->frames[curFrame].drawComplete,
914 | .swapchainCount = 1,
915 | .pSwapchains = &device->swapchain,
916 | .pImageIndices = &imageIdx,
917 | .pResults = &presentResult,
918 | };
919 |
920 | VK_VERIFY(device->vkQueuePresentKHR(device->queue, &presentInfo));
921 | VK_VERIFY(presentResult);
922 |
923 | return 1;
924 | }
925 |
--------------------------------------------------------------------------------
/vkdemo.h:
--------------------------------------------------------------------------------
1 | /*
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 | */
25 |
26 | #pragma once
27 |
28 | #include "vulkan.h"
29 |
30 | #ifdef NDEBUG
31 | # define ASSERT(x) __assume(x)
32 | #else
33 | # include
34 | # define ASSERT(x) assert(x)
35 | #endif
36 |
37 | #define VK_VERIFY(x) do { VkResult res = (x); ASSERT(res == VK_SUCCESS); } while(0)
38 | #define ARRAY_COUNT(a) (uint32_t)(sizeof(a)/sizeof((a)[0]))
39 |
40 | typedef struct Vulkan {
41 | VkInstance instance;
42 |
43 | #define VK_BOOT_FUNC(ret, name, args) ret (VKAPI_PTR *name) args
44 | #define VK_INSTANCE_FUNC VK_BOOT_FUNC
45 | #include "vkfuncs.h"
46 | #undef VK_INSTANCE_FUNC
47 | #undef VK_BOOT_FUNC
48 |
49 | #ifndef NDEBUG
50 | VkDebugUtilsMessengerEXT debugCallback;
51 | #endif
52 |
53 | uint32_t physicalDeviceCount;
54 | VkPhysicalDevice *physicalDevices;
55 | VkPhysicalDeviceProperties *physicalDeviceProperties;
56 | } Vulkan;
57 |
58 | typedef struct VulkanFrame {
59 | VkSemaphore imageAcquired;
60 | VkSemaphore drawComplete;
61 | VkFence frameComplete;
62 | VkCommandBuffer commandBuffer;
63 | } VulkanFrame;
64 |
65 | typedef struct VulkanDevice {
66 | const Vulkan *vk;
67 |
68 | #define VK_DEVICE_FUNC(ret, name, args) ret (VKAPI_PTR *name) args
69 | #include "vkfuncs.h"
70 | #undef VK_DEVICE_FUNC
71 |
72 | uint32_t physicalDeviceIdx; // index into vk->physicalDevices/physicalDeviceProperties
73 |
74 | uint32_t queueFamilyPropertyCount;
75 | uint32_t queueFamilyIndex;
76 | VkQueueFamilyProperties *queueFamilyProperties;
77 |
78 | VkDevice device;
79 | VkQueue queue;
80 | VulkanFrame frames[2];
81 |
82 | VkSurfaceKHR surface;
83 | VkFormat surfaceFormat;
84 | uint32_t surfaceWidth;
85 | uint32_t surfaceHeight;
86 |
87 | uint32_t swapchainImageCount;
88 | VkImage *swapchainImages;
89 | VkSwapchainKHR swapchain;
90 |
91 | VkCommandPool commandPool;
92 | } VulkanDevice;
93 |
--------------------------------------------------------------------------------
/vkdemo.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.27428.2037
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vkdemo", "vkdemo.vcxproj", "{368959D3-B05C-43E4-A3B4-62BCAF2ACC21}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Release|x64 = Release|x64
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {368959D3-B05C-43E4-A3B4-62BCAF2ACC21}.Debug|x64.ActiveCfg = Debug|x64
15 | {368959D3-B05C-43E4-A3B4-62BCAF2ACC21}.Debug|x64.Build.0 = Debug|x64
16 | {368959D3-B05C-43E4-A3B4-62BCAF2ACC21}.Release|x64.ActiveCfg = Release|x64
17 | {368959D3-B05C-43E4-A3B4-62BCAF2ACC21}.Release|x64.Build.0 = Release|x64
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {E85C18D4-C858-4A50-85A5-4AA4306469B3}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/vkdemo.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x64
7 |
8 |
9 | Release
10 | x64
11 |
12 |
13 |
14 | 15.0
15 | {368959D3-B05C-43E4-A3B4-62BCAF2ACC21}
16 | vkdemo
17 | 10.0.16299.0
18 |
19 |
20 |
21 | Application
22 | true
23 | v141
24 | Unicode
25 |
26 |
27 | Application
28 | false
29 | v141
30 | true
31 | Unicode
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Level3
49 | Disabled
50 | true
51 | true
52 |
53 |
54 |
55 |
56 | Level3
57 | MaxSpeed
58 | true
59 | true
60 | true
61 | true
62 | NDEBUG;_UNICODE;UNICODE;%(PreprocessorDefinitions)
63 |
64 |
65 | true
66 | true
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/vkdemo.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/vkfuncs.h:
--------------------------------------------------------------------------------
1 |
2 | // boot functions are acquired with GetProcAddress/dlsym, rather than vkGet*ProcAddr
3 | #ifdef VK_BOOT_FUNC
4 | VK_BOOT_FUNC(VkResult, vkEnumerateInstanceVersion, (
5 | uint32_t* pApiVersion));
6 | VK_BOOT_FUNC(VkResult, vkCreateInstance, (
7 | const VkInstanceCreateInfo* pCreateInfo,
8 | const VkAllocationCallbacks* pAllocator,
9 | VkInstance* pInstance));
10 | VK_BOOT_FUNC(void, vkDestroyInstance, (
11 | VkInstance instance,
12 | const VkAllocationCallbacks* pAllocator));
13 | VK_BOOT_FUNC(PFN_vkVoidFunction, vkGetInstanceProcAddr, (
14 | VkInstance instance,
15 | const char* pName));
16 | VK_BOOT_FUNC(PFN_vkVoidFunction, vkGetDeviceProcAddr, (
17 | VkDevice device,
18 | const char* pName));
19 | #endif //VK_BOOT_FUNC
20 |
21 | // instance functions are acquired with vkGetInstanceProcAddr
22 | #ifdef VK_INSTANCE_FUNC
23 | VK_INSTANCE_FUNC(VkResult, vkEnumeratePhysicalDevices, (
24 | VkInstance instance,
25 | uint32_t* pPhysicalDeviceCount,
26 | VkPhysicalDevice* pPhysicalDevices));
27 | VK_INSTANCE_FUNC(void, vkGetPhysicalDeviceProperties, (
28 | VkPhysicalDevice physicalDevice,
29 | VkPhysicalDeviceProperties* pProperties));
30 | VK_INSTANCE_FUNC(void, vkGetPhysicalDeviceQueueFamilyProperties, (
31 | VkPhysicalDevice physicalDevice,
32 | uint32_t* pQueueFamilyPropertyCount,
33 | VkQueueFamilyProperties* pQueueFamilyProperties));
34 | VK_INSTANCE_FUNC(VkResult, vkCreateDevice, (
35 | VkPhysicalDevice physicalDevice,
36 | const VkDeviceCreateInfo* pCreateInfo,
37 | const VkAllocationCallbacks* pAllocator,
38 | VkDevice* pDevice));
39 | VK_INSTANCE_FUNC(void, vkDestroyDevice, (
40 | VkDevice device,
41 | const VkAllocationCallbacks* pAllocator));
42 | VK_INSTANCE_FUNC(VkResult, vkGetPhysicalDeviceSurfaceSupportKHR, (
43 | VkPhysicalDevice physicalDevice,
44 | uint32_t queueFamilyIndex,
45 | VkSurfaceKHR surface,
46 | VkBool32* pSupported));
47 | VK_INSTANCE_FUNC(VkResult, vkGetPhysicalDeviceSurfaceCapabilitiesKHR, (
48 | VkPhysicalDevice physicalDevice,
49 | VkSurfaceKHR surface,
50 | VkSurfaceCapabilitiesKHR* pSurfaceCapabilities));
51 | VK_INSTANCE_FUNC(VkResult, vkGetPhysicalDeviceSurfaceFormatsKHR, (
52 | VkPhysicalDevice physicalDevice,
53 | VkSurfaceKHR surface,
54 | uint32_t* pSurfaceFormatCount,
55 | VkSurfaceFormatKHR* pSurfaceFormats));
56 |
57 | #ifdef _WIN32
58 | VK_INSTANCE_FUNC(VkResult, vkCreateWin32SurfaceKHR, (
59 | VkInstance instance,
60 | const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
61 | const VkAllocationCallbacks* pAllocator,
62 | VkSurfaceKHR* pSurface));
63 | #endif //_WIN32
64 | VK_INSTANCE_FUNC(void, vkDestroySurfaceKHR, (
65 | VkInstance instance,
66 | VkSurfaceKHR surface,
67 | const VkAllocationCallbacks* pAllocator));
68 |
69 | #ifndef NDEBUG
70 | VK_INSTANCE_FUNC(VkResult, vkCreateDebugUtilsMessengerEXT, (
71 | VkInstance instance,
72 | const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
73 | const VkAllocationCallbacks* pAllocator,
74 | VkDebugUtilsMessengerEXT* pMessenger));
75 | VK_INSTANCE_FUNC(void, vkDestroyDebugUtilsMessengerEXT, (
76 | VkInstance instance,
77 | VkDebugUtilsMessengerEXT messenger,
78 | const VkAllocationCallbacks* pAllocator));
79 | #endif //NDEBUG
80 |
81 | #endif //VK_INSTANCE_FUNC
82 |
83 | // device functions are acquired with vkGetDeviceProcAddr
84 | #ifdef VK_DEVICE_FUNC
85 | VK_DEVICE_FUNC(VkResult, vkDeviceWaitIdle, (
86 | VkDevice device));
87 | VK_DEVICE_FUNC(void, vkGetDeviceQueue, (
88 | VkDevice device,
89 | uint32_t queueFamilyIndex,
90 | uint32_t queueIndex,
91 | VkQueue* pQueue));
92 | VK_DEVICE_FUNC(VkResult, vkCreateCommandPool, (
93 | VkDevice device,
94 | const VkCommandPoolCreateInfo* pCreateInfo,
95 | const VkAllocationCallbacks* pAllocator,
96 | VkCommandPool* pCommandPool));
97 | VK_DEVICE_FUNC(void, vkDestroyCommandPool, (
98 | VkDevice device,
99 | VkCommandPool commandPool,
100 | const VkAllocationCallbacks* pAllocator));
101 |
102 | VK_DEVICE_FUNC(VkResult, vkAllocateCommandBuffers, (
103 | VkDevice device,
104 | const VkCommandBufferAllocateInfo* pAllocateInfo,
105 | VkCommandBuffer* pCommandBuffers));
106 | VK_DEVICE_FUNC(void, vkFreeCommandBuffers, (
107 | VkDevice device,
108 | VkCommandPool commandPool,
109 | uint32_t commandBufferCount,
110 | const VkCommandBuffer* pCommandBuffers));
111 | VK_DEVICE_FUNC(VkResult, vkBeginCommandBuffer, (
112 | VkCommandBuffer commandBuffer,
113 | const VkCommandBufferBeginInfo* pBeginInfo));
114 | VK_DEVICE_FUNC(VkResult, vkEndCommandBuffer, (
115 | VkCommandBuffer commandBuffer));
116 | VK_DEVICE_FUNC(VkResult, vkQueueSubmit, (
117 | VkQueue queue,
118 | uint32_t submitCount,
119 | const VkSubmitInfo* pSubmits,
120 | VkFence fence));
121 |
122 | VK_DEVICE_FUNC(VkResult, vkCreateFence, (
123 | VkDevice device,
124 | const VkFenceCreateInfo* pCreateInfo,
125 | const VkAllocationCallbacks* pAllocator,
126 | VkFence* pFence));
127 | VK_DEVICE_FUNC(void, vkDestroyFence, (
128 | VkDevice device,
129 | VkFence fence,
130 | const VkAllocationCallbacks* pAllocator));
131 | VK_DEVICE_FUNC(VkResult, vkWaitForFences, (
132 | VkDevice device,
133 | uint32_t fenceCount,
134 | const VkFence* pFences,
135 | VkBool32 waitAll,
136 | uint64_t timeout));
137 | VK_DEVICE_FUNC(VkResult, vkResetFences, (
138 | VkDevice device,
139 | uint32_t fenceCount,
140 | const VkFence* pFences));
141 | VK_DEVICE_FUNC(VkResult, vkCreateSemaphore, (
142 | VkDevice device,
143 | const VkSemaphoreCreateInfo* pCreateInfo,
144 | const VkAllocationCallbacks* pAllocator,
145 | VkSemaphore* pSemaphore));
146 | VK_DEVICE_FUNC(void, vkDestroySemaphore, (
147 | VkDevice device,
148 | VkSemaphore semaphore,
149 | const VkAllocationCallbacks* pAllocator));
150 |
151 | VK_DEVICE_FUNC(VkResult, vkCreateGraphicsPipelines, (
152 | VkDevice device,
153 | VkPipelineCache pipelineCache,
154 | uint32_t createInfoCount,
155 | const VkGraphicsPipelineCreateInfo* pCreateInfos,
156 | const VkAllocationCallbacks* pAllocator,
157 | VkPipeline* pPipelines));
158 | VK_DEVICE_FUNC(void, vkDestroyPipeline, (
159 | VkDevice device,
160 | VkPipeline pipeline,
161 | const VkAllocationCallbacks* pAllocator));
162 |
163 | VK_DEVICE_FUNC(VkResult, vkCreateImageView, (
164 | VkDevice device,
165 | const VkImageViewCreateInfo* pCreateInfo,
166 | const VkAllocationCallbacks* pAllocator,
167 | VkImageView* pView));
168 | VK_DEVICE_FUNC(void, vkDestroyImageView, (
169 | VkDevice device,
170 | VkImageView imageView,
171 | const VkAllocationCallbacks* pAllocator));
172 |
173 | VK_DEVICE_FUNC(VkResult, vkCreatePipelineLayout, (
174 | VkDevice device,
175 | const VkPipelineLayoutCreateInfo* pCreateInfo,
176 | const VkAllocationCallbacks* pAllocator,
177 | VkPipelineLayout* pPipelineLayout));
178 | VK_DEVICE_FUNC(void, vkDestroyPipelineLayout, (
179 | VkDevice device,
180 | VkPipelineLayout pipelineLayout,
181 | const VkAllocationCallbacks* pAllocator));
182 | VK_DEVICE_FUNC(VkResult, vkCreateShaderModule, (
183 | VkDevice device,
184 | const VkShaderModuleCreateInfo* pCreateInfo,
185 | const VkAllocationCallbacks* pAllocator,
186 | VkShaderModule* pShaderModule));
187 | VK_DEVICE_FUNC(void, vkDestroyShaderModule, (
188 | VkDevice device,
189 | VkShaderModule shaderModule,
190 | const VkAllocationCallbacks* pAllocator));
191 | VK_DEVICE_FUNC(VkResult, vkCreateRenderPass, (
192 | VkDevice device,
193 | const VkRenderPassCreateInfo* pCreateInfo,
194 | const VkAllocationCallbacks* pAllocator,
195 | VkRenderPass* pRenderPass));
196 | VK_DEVICE_FUNC(void, vkDestroyRenderPass, (
197 | VkDevice device,
198 | VkRenderPass renderPass,
199 | const VkAllocationCallbacks* pAllocator));
200 | VK_DEVICE_FUNC(VkResult, vkCreateFramebuffer, (
201 | VkDevice device,
202 | const VkFramebufferCreateInfo* pCreateInfo,
203 | const VkAllocationCallbacks* pAllocator,
204 | VkFramebuffer* pFramebuffer));
205 | VK_DEVICE_FUNC(void, vkDestroyFramebuffer, (
206 | VkDevice device,
207 | VkFramebuffer framebuffer,
208 | const VkAllocationCallbacks* pAllocator));
209 | VK_DEVICE_FUNC(void, vkCmdBeginRenderPass, (
210 | VkCommandBuffer commandBuffer,
211 | const VkRenderPassBeginInfo* pRenderPassBegin,
212 | VkSubpassContents contents));
213 | VK_DEVICE_FUNC(void, vkCmdEndRenderPass, (
214 | VkCommandBuffer commandBuffer));
215 | VK_DEVICE_FUNC(void, vkCmdBindPipeline, (
216 | VkCommandBuffer commandBuffer,
217 | VkPipelineBindPoint pipelineBindPoint,
218 | VkPipeline pipeline));
219 | VK_DEVICE_FUNC(void, vkCmdPushConstants, (
220 | VkCommandBuffer commandBuffer,
221 | VkPipelineLayout layout,
222 | VkShaderStageFlags stageFlags,
223 | uint32_t offset,
224 | uint32_t size,
225 | const void* pValues));
226 | VK_DEVICE_FUNC(void, vkCmdDraw, (
227 | VkCommandBuffer commandBuffer,
228 | uint32_t vertexCount,
229 | uint32_t instanceCount,
230 | uint32_t firstVertex,
231 | uint32_t firstInstance));
232 |
233 | VK_DEVICE_FUNC(VkResult, vkQueuePresentKHR, (
234 | VkQueue queue,
235 | const VkPresentInfoKHR* pPresentInfo));
236 | VK_DEVICE_FUNC(VkResult, vkCreateSwapchainKHR, (
237 | VkDevice device,
238 | const VkSwapchainCreateInfoKHR* pCreateInfo,
239 | const VkAllocationCallbacks* pAllocator,
240 | VkSwapchainKHR* pSwapchain));
241 | VK_DEVICE_FUNC(void, vkDestroySwapchainKHR, (
242 | VkDevice device,
243 | VkSwapchainKHR swapchain,
244 | const VkAllocationCallbacks* pAllocator));
245 | VK_DEVICE_FUNC(VkResult, vkGetSwapchainImagesKHR, (
246 | VkDevice device,
247 | VkSwapchainKHR swapchain,
248 | uint32_t* pSwapchainImageCount,
249 | VkImage* pSwapchainImages));
250 | VK_DEVICE_FUNC(VkResult, vkAcquireNextImageKHR, (
251 | VkDevice device,
252 | VkSwapchainKHR swapchain,
253 | uint64_t timeout,
254 | VkSemaphore semaphore,
255 | VkFence fence,
256 | uint32_t* pImageIndex));
257 |
258 | #endif //VK_DEVICE_FUNC
--------------------------------------------------------------------------------
/vkwin32.c:
--------------------------------------------------------------------------------
1 | /*
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 | */
25 |
26 | #include
27 |
28 | #define WIN32_LEAN_AND_MEAN
29 | #include
30 | #include
31 |
32 | #include "vkdemo.h"
33 |
34 | int DrawFrame(const VulkanDevice *device, float dt);
35 | int InitResources(const VulkanDevice *device);
36 | void UninitResources(const VulkanDevice *device);
37 |
38 | static Vulkan s_vulkan;
39 | static VulkanDevice s_device;
40 |
41 | static HMODULE s_vulkanLib;
42 |
43 | #ifndef NDEBUG
44 | static VkBool32 VKAPI_CALL vkDebugCallback(
45 | VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
46 | VkDebugUtilsMessageTypeFlagsEXT messageType,
47 | const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
48 | void* pUserData)
49 | {
50 | OutputDebugStringA(pCallbackData->pMessage);
51 | OutputDebugStringA("\r\n");
52 | return VK_FALSE;
53 | }
54 | #endif
55 |
56 | static int initSwapchain(VulkanDevice *device, HWND hwnd)
57 | {
58 | ASSERT(device && device->vk);
59 | const Vulkan *vk = device->vk;
60 |
61 | RECT rect;
62 | GetClientRect(hwnd, &rect);
63 | device->surfaceWidth = rect.right - rect.left;
64 | device->surfaceHeight = rect.bottom - rect.top;
65 |
66 | VkPhysicalDevice physicalDevice = vk->physicalDevices[device->physicalDeviceIdx];
67 | uint32_t frameCount = ARRAY_COUNT(device->frames);
68 |
69 | VkWin32SurfaceCreateInfoKHR surfaceCreateInfo = {
70 | .sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
71 | .pNext = NULL,
72 | .flags = 0,
73 | .hinstance = GetWindowInstance(hwnd),
74 | .hwnd = hwnd
75 | };
76 |
77 | VK_VERIFY(vk->vkCreateWin32SurfaceKHR(vk->instance, &surfaceCreateInfo, NULL, &device->surface));
78 |
79 | VkBool32 supported = VK_FALSE;
80 | VK_VERIFY(vk->vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, device->queueFamilyIndex,
81 | device->surface, &supported));
82 | ASSERT(supported == VK_TRUE);
83 |
84 | VkSurfaceCapabilitiesKHR surfaceCapabilities;
85 | VK_VERIFY(vk->vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, device->surface, &surfaceCapabilities));
86 | ASSERT(surfaceCapabilities.minImageCount <= frameCount && frameCount <= surfaceCapabilities.maxImageCount);
87 |
88 | uint32_t surfaceFormatCount = 0;
89 | VkSurfaceFormatKHR *surfaceFormats;
90 |
91 | VK_VERIFY(vk->vkGetPhysicalDeviceSurfaceFormatsKHR(vk->physicalDevices[device->physicalDeviceIdx],
92 | device->surface, &surfaceFormatCount, NULL));
93 | surfaceFormats = malloc(sizeof(*surfaceFormats) * surfaceFormatCount);
94 | VK_VERIFY(vk->vkGetPhysicalDeviceSurfaceFormatsKHR(vk->physicalDevices[device->physicalDeviceIdx],
95 | device->surface, &surfaceFormatCount, surfaceFormats));
96 |
97 | static const VkFormat desiredFormats[] = {
98 | VK_FORMAT_B8G8R8A8_SRGB,
99 | VK_FORMAT_R8G8B8A8_SRGB,
100 | };
101 |
102 | VkSurfaceFormatKHR *surfaceFormat = NULL;
103 | for (uint32_t i = 0; i < ARRAY_COUNT(desiredFormats); ++i) {
104 | for (uint32_t j = 0; j < surfaceFormatCount; ++j) {
105 | if (surfaceFormats[j].format == desiredFormats[i]) {
106 | surfaceFormat = &surfaceFormats[j];
107 | goto foundFormat;
108 | }
109 | }
110 | }
111 | ASSERT(surfaceFormat);
112 |
113 | foundFormat:
114 | device->surfaceFormat = surfaceFormat->format;
115 |
116 | VkSwapchainCreateInfoKHR swapchainCreateInfo = {
117 | .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
118 | .pNext = NULL,
119 | .flags = 0,
120 | .surface = device->surface,
121 | .minImageCount = frameCount,
122 | .imageFormat = surfaceFormat->format,
123 | .imageColorSpace = surfaceFormat->colorSpace,
124 | .imageExtent = {
125 | .width = device->surfaceWidth,
126 | .height = device->surfaceHeight,
127 | },
128 | .imageArrayLayers = 1,
129 | .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
130 | .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE,
131 | .queueFamilyIndexCount = 1,
132 | .pQueueFamilyIndices = &device->queueFamilyIndex,
133 | .preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
134 | .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
135 | .presentMode = VK_PRESENT_MODE_FIFO_KHR,
136 | .clipped = VK_TRUE,
137 | .oldSwapchain = VK_NULL_HANDLE,
138 | };
139 |
140 | free(surfaceFormats);
141 |
142 | VK_VERIFY(device->vkCreateSwapchainKHR(device->device, &swapchainCreateInfo, NULL, &device->swapchain));
143 |
144 | VK_VERIFY(device->vkGetSwapchainImagesKHR(device->device, device->swapchain, &device->swapchainImageCount, NULL));
145 | device->swapchainImages = malloc(sizeof(*device->swapchainImages) * device->swapchainImageCount);
146 | VK_VERIFY(device->vkGetSwapchainImagesKHR(device->device, device->swapchain, &device->swapchainImageCount, device->swapchainImages));
147 |
148 | return InitResources(device);
149 | }
150 |
151 | static void uninitSwapchain(VulkanDevice *device)
152 | {
153 | ASSERT(device && device->vk);
154 | const Vulkan *vk = device->vk;
155 |
156 | VK_VERIFY(device->vkDeviceWaitIdle(device->device));
157 |
158 | UninitResources(device);
159 |
160 | free(device->swapchainImages);
161 | device->swapchainImages = NULL;
162 | device->swapchainImageCount = 0;
163 |
164 | device->vkDestroySwapchainKHR(device->device, device->swapchain, NULL);
165 | device->swapchain = VK_NULL_HANDLE;
166 |
167 | vk->vkDestroySurfaceKHR(vk->instance, device->surface, NULL);
168 | device->surface = VK_NULL_HANDLE;
169 | }
170 |
171 | static int createDevice(const Vulkan *vk, uint32_t physicalDeviceIdx, VulkanDevice *device)
172 | {
173 | ASSERT(vk && device);
174 | ASSERT(physicalDeviceIdx < vk->physicalDeviceCount);
175 |
176 | memset(device, 0, sizeof(*device));
177 | device->vk = vk;
178 |
179 | uint32_t queueFamilyPropertyCount = 0;
180 | vk->vkGetPhysicalDeviceQueueFamilyProperties(vk->physicalDevices[physicalDeviceIdx], &queueFamilyPropertyCount, NULL);
181 | device->queueFamilyProperties = malloc(sizeof(*device->queueFamilyProperties) * queueFamilyPropertyCount);
182 | vk->vkGetPhysicalDeviceQueueFamilyProperties(vk->physicalDevices[physicalDeviceIdx], &queueFamilyPropertyCount, device->queueFamilyProperties);
183 |
184 | uint32_t desiredQueueIndex = queueFamilyPropertyCount;
185 | for (uint32_t i = 0; i < queueFamilyPropertyCount; ++i) {
186 | if (device->queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
187 | desiredQueueIndex = i;
188 | break;
189 | }
190 | }
191 | if (desiredQueueIndex >= queueFamilyPropertyCount) {
192 | return 0;
193 | }
194 | device->queueFamilyPropertyCount = queueFamilyPropertyCount;
195 | device->queueFamilyIndex = desiredQueueIndex;
196 |
197 | float queuePriorities[] = { 1.0f };
198 | VkDeviceQueueCreateInfo queueInfo = {
199 | .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
200 | .pNext = NULL,
201 | .flags = 0,
202 | .queueFamilyIndex = desiredQueueIndex,
203 | .queueCount = ARRAY_COUNT(queuePriorities),
204 | .pQueuePriorities = queuePriorities,
205 | };
206 |
207 | const char *enabledExtensionNames[] = {
208 | "VK_KHR_swapchain",
209 | };
210 |
211 | VkDeviceCreateInfo createInfo = {
212 | .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
213 | .pNext = NULL,
214 | .flags = 0,
215 | .queueCreateInfoCount = 1,
216 | .pQueueCreateInfos = &queueInfo,
217 | .enabledLayerCount = 0,
218 | .ppEnabledLayerNames = NULL,
219 | .enabledExtensionCount = ARRAY_COUNT(enabledExtensionNames),
220 | .ppEnabledExtensionNames = enabledExtensionNames,
221 | .pEnabledFeatures = NULL,
222 | };
223 |
224 | VK_VERIFY(vk->vkCreateDevice(vk->physicalDevices[physicalDeviceIdx], &createInfo, NULL, &device->device));
225 |
226 | #define VK_DEVICE_FUNC(ret, name, args) device->name = (ret (VKAPI_PTR *)args) vk->vkGetDeviceProcAddr(device->device, #name); ASSERT(device->name)
227 | #include "vkfuncs.h"
228 | #undef VK_DEVICE_FUNC
229 |
230 | device->vkGetDeviceQueue(device->device, device->queueFamilyIndex, 0, &device->queue);
231 |
232 | VkCommandPoolCreateInfo cpCreateInfo = {
233 | .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
234 | .pNext = NULL,
235 | .flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,
236 | .queueFamilyIndex = desiredQueueIndex,
237 | };
238 |
239 | VK_VERIFY(device->vkCreateCommandPool(device->device, &cpCreateInfo, NULL, &device->commandPool));
240 |
241 | // per-frame data
242 | {
243 | VkSemaphoreCreateInfo semaphoreCreateInfo = {
244 | .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
245 | .pNext = NULL,
246 | .flags = 0,
247 | };
248 | VkFenceCreateInfo fenceCreateInfo = {
249 | .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
250 | .pNext = NULL,
251 | .flags = VK_FENCE_CREATE_SIGNALED_BIT
252 | };
253 | VkCommandBufferAllocateInfo cbAllocInfo = {
254 | .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
255 | .pNext = NULL,
256 | .commandPool = device->commandPool,
257 | .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
258 | .commandBufferCount = 1,
259 | };
260 |
261 | for (uint32_t i = 0; i < ARRAY_COUNT(device->frames); ++i) {
262 | VK_VERIFY(device->vkCreateSemaphore(device->device, &semaphoreCreateInfo, NULL, &device->frames[i].imageAcquired));
263 | VK_VERIFY(device->vkCreateSemaphore(device->device, &semaphoreCreateInfo, NULL, &device->frames[i].drawComplete));
264 | VK_VERIFY(device->vkCreateFence(device->device, &fenceCreateInfo, NULL, &device->frames[i].frameComplete));
265 | VK_VERIFY(device->vkAllocateCommandBuffers(device->device, &cbAllocInfo, &device->frames[i].commandBuffer));
266 | }
267 | }
268 |
269 | device->physicalDeviceIdx = physicalDeviceIdx;
270 | return 1;
271 | }
272 |
273 | static void destroyDevice(VulkanDevice *device)
274 | {
275 | if (device && device->vk) {
276 | const Vulkan *vk = device->vk;
277 |
278 | uninitSwapchain(device);
279 |
280 | for (uint32_t i = 0; i < ARRAY_COUNT(device->frames); ++i) {
281 | device->vkDestroySemaphore(device->device, device->frames[i].imageAcquired, NULL);
282 | device->frames[i].imageAcquired = VK_NULL_HANDLE;
283 | device->vkDestroySemaphore(device->device, device->frames[i].drawComplete, NULL);
284 | device->frames[i].drawComplete = VK_NULL_HANDLE;
285 | device->vkDestroyFence(device->device, device->frames[i].frameComplete, NULL);
286 | device->frames[i].frameComplete = VK_NULL_HANDLE;
287 | device->vkFreeCommandBuffers(device->device, device->commandPool, 1, &device->frames[i].commandBuffer);
288 | device->frames[i].commandBuffer = VK_NULL_HANDLE;
289 | }
290 |
291 | device->vkDestroyCommandPool(device->device, device->commandPool, NULL);
292 | device->commandPool = VK_NULL_HANDLE;
293 |
294 | free(device->queueFamilyProperties);
295 | device->queueFamilyProperties = NULL;
296 | device->queueFamilyPropertyCount = 0;
297 |
298 | vk->vkDestroyDevice(device->device, NULL);
299 | device->device = VK_NULL_HANDLE;
300 | device->vk = NULL;
301 | }
302 | }
303 |
304 | static int initVulkan(Vulkan *vk)
305 | {
306 | ASSERT(vk);
307 |
308 | // bootstrap the API
309 | s_vulkanLib = LoadLibrary(L"vulkan-1");
310 | if (!s_vulkanLib) {
311 | return 0;
312 | }
313 |
314 | #define VK_BOOT_FUNC(ret, name, args) vk->name = (ret (VKAPI_PTR *)args) GetProcAddress(s_vulkanLib, #name); ASSERT(vk->name)
315 | #include "vkfuncs.h"
316 | #undef VK_BOOT_FUNC
317 |
318 | uint32_t instanceVersion;
319 | if (vk->vkEnumerateInstanceVersion(&instanceVersion) != VK_SUCCESS || instanceVersion < VK_API_VERSION_1_1) {
320 | FreeLibrary(s_vulkanLib);
321 | return 0;
322 | }
323 |
324 | // create instance
325 | #ifndef NDEBUG
326 | const char *enabledLayerNames[] = {
327 | "VK_LAYER_LUNARG_standard_validation"
328 | };
329 | #endif
330 | const char *enabledExtensionNames[] = {
331 | "VK_KHR_surface",
332 | "VK_KHR_win32_surface",
333 | #ifndef NDEBUG
334 | "VK_EXT_debug_report",
335 | "VK_EXT_debug_utils",
336 | #endif
337 | };
338 |
339 | VkApplicationInfo appInfo = {
340 | .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
341 | .pNext = NULL,
342 | .pApplicationName = "vkdemo",
343 | .applicationVersion = 1,
344 | .pEngineName = "vkdemo engine",
345 | .engineVersion = 1,
346 | .apiVersion = VK_API_VERSION_1_0,
347 | };
348 |
349 | VkInstanceCreateInfo instanceCreateInfo = {
350 | .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
351 | .pNext = NULL,
352 | .flags = 0,
353 | .pApplicationInfo = &appInfo,
354 | #ifndef NDEBUG
355 | .enabledLayerCount = 1,
356 | .ppEnabledLayerNames = enabledLayerNames,
357 | #else
358 | .enabledLayerCount = 0,
359 | .ppEnabledLayerNames = NULL,
360 | #endif
361 | .enabledExtensionCount = ARRAY_COUNT(enabledExtensionNames),
362 | .ppEnabledExtensionNames = enabledExtensionNames,
363 | };
364 |
365 | #ifndef NDEBUG
366 | VkDebugUtilsMessengerCreateInfoEXT debugMessengerCreateInfo = {
367 | .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
368 | .pNext = NULL,
369 | .flags = 0,
370 | .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,
371 | .messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
372 | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT,
373 | .pfnUserCallback = vkDebugCallback,
374 | .pUserData = NULL,
375 | };
376 | instanceCreateInfo.pNext = &debugMessengerCreateInfo;
377 | #endif
378 |
379 | if (vk->vkCreateInstance(&instanceCreateInfo, NULL, &vk->instance) != VK_SUCCESS) {
380 | FreeLibrary(s_vulkanLib);
381 | return 0;
382 | }
383 |
384 | // load the rest of the API
385 | #define VK_INSTANCE_FUNC(ret, name, args) vk->name = (ret (VKAPI_PTR *)args) vk->vkGetInstanceProcAddr(vk->instance, #name); ASSERT(vk->name)
386 | #include "vkfuncs.h"
387 | #undef VK_INSTANCE_FUNC
388 |
389 | #ifndef NDEBUG
390 | VK_VERIFY(vk->vkCreateDebugUtilsMessengerEXT(vk->instance, &debugMessengerCreateInfo, NULL, &vk->debugCallback));
391 | #endif
392 |
393 | uint32_t physicalDeviceCount = 0;
394 | VK_VERIFY(vk->vkEnumeratePhysicalDevices(vk->instance, &physicalDeviceCount, NULL));
395 | if (!physicalDeviceCount) {
396 | vk->vkDestroyInstance(vk->instance, NULL);
397 | FreeLibrary(s_vulkanLib);
398 | return 0;
399 | }
400 |
401 | vk->physicalDevices = malloc(sizeof(*vk->physicalDevices) * physicalDeviceCount);
402 | vk->physicalDeviceProperties = malloc(sizeof(*vk->physicalDeviceProperties) * physicalDeviceCount);
403 | VK_VERIFY(vk->vkEnumeratePhysicalDevices(vk->instance, &physicalDeviceCount, vk->physicalDevices));
404 |
405 | for (uint32_t i = 0; i < physicalDeviceCount; ++i) {
406 | vk->vkGetPhysicalDeviceProperties(vk->physicalDevices[i], &vk->physicalDeviceProperties[i]);
407 | }
408 | vk->physicalDeviceCount = physicalDeviceCount;
409 |
410 | return 1;
411 | }
412 |
413 | static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
414 | {
415 | static LARGE_INTEGER s_lastTime, s_freq;
416 |
417 | switch (msg) {
418 | case WM_CREATE:
419 | QueryPerformanceFrequency(&s_freq);
420 | QueryPerformanceCounter(&s_lastTime);
421 | return 0;
422 | case WM_CLOSE:
423 | PostQuitMessage(0);
424 | return 0;
425 | case WM_PAINT:
426 | {
427 | PAINTSTRUCT ps;
428 | LARGE_INTEGER curTime;
429 |
430 | QueryPerformanceCounter(&curTime);
431 | double dt = (curTime.QuadPart - s_lastTime.QuadPart) / (double)s_freq.QuadPart;
432 | s_lastTime = curTime;
433 |
434 | BeginPaint(hwnd, &ps);
435 | if (!DrawFrame(&s_device, (float)dt)) {
436 | // handle device lost
437 | uninitSwapchain(&s_device);
438 | initSwapchain(&s_device, hwnd);
439 | }
440 | EndPaint(hwnd, &ps);
441 | return 0;
442 | }
443 | case WM_SIZE:
444 | if (wParam != SIZE_MINIMIZED) {
445 | uninitSwapchain(&s_device);
446 | initSwapchain(&s_device, hwnd);
447 | }
448 | return 0;
449 | default:
450 | return DefWindowProc(hwnd, msg, wParam, lParam);
451 | }
452 | }
453 |
454 | static void uninitVulkan(Vulkan *vk)
455 | {
456 | if (vk) {
457 | free(vk->physicalDeviceProperties);
458 | vk->physicalDeviceProperties = NULL;
459 | free(vk->physicalDevices);
460 | vk->physicalDevices = NULL;
461 | vk->physicalDeviceCount = 0;
462 |
463 | #ifndef NDEBUG
464 | vk->vkDestroyDebugUtilsMessengerEXT(vk->instance, vk->debugCallback, NULL);
465 | #endif
466 | vk->vkDestroyInstance(vk->instance, NULL);
467 | vk->instance = NULL;
468 | FreeLibrary(s_vulkanLib);
469 | s_vulkanLib = NULL;
470 | }
471 | }
472 |
473 | int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
474 | {
475 | if (!initVulkan(&s_vulkan)) {
476 | //FIXME: better error message.
477 | MessageBox(NULL, L"Could not initialize Vulkan library.", L"Error", MB_ICONERROR | MB_OK);
478 | return -1;
479 | }
480 |
481 | uint32_t physicalDeviceIdx = 0; // just use first device found
482 | if (!createDevice(&s_vulkan, physicalDeviceIdx, &s_device)) {
483 | MessageBox(NULL, L"Could not find suitable Vulkan device.", L"Error", MB_ICONERROR | MB_OK);
484 | uninitVulkan(&s_vulkan);
485 | return -1;
486 | }
487 |
488 | WNDCLASSEX wcex = {
489 | .cbSize = sizeof(wcex),
490 | .style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
491 | .lpfnWndProc = wndProc,
492 | .cbClsExtra = 0,
493 | .cbWndExtra = 0,
494 | .hInstance = hInstance,
495 | .hIcon = NULL,
496 | .hCursor = LoadCursor(NULL, IDC_ARROW),
497 | .hbrBackground = NULL,
498 | .lpszMenuName = NULL,
499 | .lpszClassName = L"vkdemo.mainWnd",
500 | .hIconSm = NULL,
501 | };
502 |
503 | ATOM atom = RegisterClassEx(&wcex);
504 | if (!atom) {
505 | destroyDevice(&s_device);
506 | uninitVulkan(&s_vulkan);
507 | return -1;
508 | }
509 |
510 | HWND hwnd = CreateWindowEx(0, MAKEINTATOM(atom), L"Vulkan", WS_OVERLAPPEDWINDOW,
511 | CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
512 | if (!hwnd) {
513 | return -1;
514 | }
515 |
516 | ShowWindow(hwnd, nShowCmd);
517 |
518 | MSG msg = { 0 };
519 | while (msg.message != WM_QUIT) {
520 | while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
521 | TranslateMessage(&msg);
522 | DispatchMessage(&msg);
523 | }
524 | RedrawWindow(hwnd, NULL, NULL, RDW_INTERNALPAINT);
525 | }
526 |
527 | destroyDevice(&s_device);
528 | uninitVulkan(&s_vulkan);
529 | return (int)msg.wParam;
530 | }
--------------------------------------------------------------------------------
/vulkan.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | #ifdef __cplusplus
7 | extern "C"
8 | {
9 | #endif // __cplusplus
10 |
11 | #if defined(_WIN32)
12 | # define VKAPI_CALL __stdcall
13 | # define VKAPI_PTR VKAPI_CALL
14 | #else
15 | # define VKAPI_CALL
16 | # define VKAPI_PTR
17 | #endif
18 |
19 | #define VK_MAKE_VERSION(major, minor, patch) \
20 | (((major) << 22) | ((minor) << 12) | (patch))
21 | #define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)
22 | #define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)
23 |
24 | #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
25 | #if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
26 | #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
27 | #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
28 | #else
29 | #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
30 | #endif
31 | #endif
32 |
33 | #define VK_FALSE 0
34 | #define VK_TRUE 1
35 | #define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
36 | #define VK_UUID_SIZE 16
37 | #define VK_NULL_HANDLE 0
38 |
39 | typedef uint32_t VkFlags;
40 | typedef uint32_t VkBool32;
41 | typedef uint64_t VkDeviceSize;
42 | typedef uint32_t VkSampleMask;
43 | typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
44 |
45 | VK_DEFINE_HANDLE(VkInstance);
46 | VK_DEFINE_HANDLE(VkPhysicalDevice);
47 | VK_DEFINE_HANDLE(VkDevice);
48 | VK_DEFINE_HANDLE(VkQueue);
49 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore);
50 | VK_DEFINE_HANDLE(VkCommandBuffer);
51 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence);
52 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory);
53 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer);
54 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage);
55 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent);
56 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool);
57 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView);
58 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView);
59 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule);
60 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache);
61 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout);
62 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass);
63 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline);
64 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout);
65 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler);
66 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool);
67 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet);
68 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer);
69 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool);
70 |
71 | #define VK_KHR_surface 1
72 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
73 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
74 |
75 | typedef enum VkResult {
76 | VK_SUCCESS = 0,
77 | VK_NOT_READY = 1,
78 | VK_TIMEOUT = 2,
79 | VK_EVENT_SET = 3,
80 | VK_EVENT_RESET = 4,
81 | VK_INCOMPLETE = 5,
82 | VK_ERROR_OUT_OF_HOST_MEMORY = -1,
83 | VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
84 | VK_ERROR_INITIALIZATION_FAILED = -3,
85 | VK_ERROR_DEVICE_LOST = -4,
86 | VK_ERROR_MEMORY_MAP_FAILED = -5,
87 | VK_ERROR_LAYER_NOT_PRESENT = -6,
88 | VK_ERROR_EXTENSION_NOT_PRESENT = -7,
89 | VK_ERROR_FEATURE_NOT_PRESENT = -8,
90 | VK_ERROR_INCOMPATIBLE_DRIVER = -9,
91 | VK_ERROR_TOO_MANY_OBJECTS = -10,
92 | VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
93 | VK_ERROR_FRAGMENTED_POOL = -12,
94 | VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000,
95 | VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
96 | VK_ERROR_SURFACE_LOST_KHR = -1000000000,
97 | VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
98 | VK_SUBOPTIMAL_KHR = 1000001003,
99 | VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
100 | VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
101 | VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
102 | VK_ERROR_INVALID_SHADER_NV = -1000012000,
103 | VK_ERROR_FRAGMENTATION_EXT = -1000161000,
104 | VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
105 | VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
106 | VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
107 | VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
108 | VK_RESULT_END_RANGE = VK_INCOMPLETE,
109 | VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
110 | VK_RESULT_MAX_ENUM = 0x7FFFFFFF
111 | } VkResult;
112 |
113 | typedef enum VkStructureType {
114 | VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
115 | VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
116 | VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
117 | VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
118 | VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
119 | VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
120 | VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
121 | VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
122 | VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
123 | VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
124 | VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
125 | VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
126 | VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
127 | VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
128 | VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
129 | VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
130 | VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
131 | VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
132 | VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
133 | VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
134 | VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
135 | VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
136 | VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
137 | VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
138 | VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
139 | VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
140 | VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
141 | VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
142 | VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
143 | VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
144 | VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
145 | VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
146 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
147 | VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
148 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
149 | VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
150 | VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
151 | VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
152 | VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
153 | VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
154 | VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
155 | VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
156 | VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
157 | VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
158 | VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
159 | VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
160 | VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
161 | VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
162 | VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
163 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000,
164 | VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000,
165 | VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001,
166 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000,
167 | VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000,
168 | VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001,
169 | VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000,
170 | VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003,
171 | VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004,
172 | VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005,
173 | VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006,
174 | VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013,
175 | VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014,
176 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000,
177 | VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001,
178 | VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000,
179 | VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001,
180 | VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002,
181 | VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003,
182 | VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004,
183 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000,
184 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001,
185 | VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002,
186 | VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003,
187 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004,
188 | VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005,
189 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006,
190 | VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007,
191 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008,
192 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000,
193 | VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001,
194 | VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002,
195 | VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003,
196 | VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000,
197 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001,
198 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002,
199 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = 1000120000,
200 | VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000,
201 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001,
202 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002,
203 | VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003,
204 | VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000,
205 | VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001,
206 | VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002,
207 | VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003,
208 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004,
209 | VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005,
210 | VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000,
211 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000,
212 | VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001,
213 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002,
214 | VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003,
215 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004,
216 | VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000,
217 | VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001,
218 | VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002,
219 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000,
220 | VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001,
221 | VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000,
222 | VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000,
223 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000,
224 | VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001,
225 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000,
226 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001,
227 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = 1000063000,
228 | VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
229 | VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
230 | VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007,
231 | VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008,
232 | VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009,
233 | VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010,
234 | VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011,
235 | VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012,
236 | VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
237 | VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
238 | VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
239 | VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
240 | VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
241 | VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
242 | VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = 1000007000,
243 | VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
244 | VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
245 | VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
246 | VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
247 | VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
248 | VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
249 | VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
250 | VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
251 | VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
252 | VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
253 | VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
254 | VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
255 | VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
256 | VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
257 | VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
258 | VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
259 | VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
260 | VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
261 | VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000,
262 | VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001,
263 | VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002,
264 | VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003,
265 | VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
266 | VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
267 | VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
268 | VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000,
269 | VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000,
270 | VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001,
271 | VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002,
272 | VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003,
273 | VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
274 | VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
275 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
276 | VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
277 | VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
278 | VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
279 | VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = 1000086002,
280 | VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = 1000086003,
281 | VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004,
282 | VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005,
283 | VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000,
284 | VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000,
285 | VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
286 | VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
287 | VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
288 | VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
289 | VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000,
290 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000,
291 | VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000,
292 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
293 | VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
294 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
295 | VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
296 | VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
297 | VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
298 | VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000,
299 | VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001,
300 | VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002,
301 | VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
302 | VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
303 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
304 | VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
305 | VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
306 | VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
307 | VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
308 | VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000,
309 | VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001,
310 | VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002,
311 | VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003,
312 | VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004,
313 | VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000,
314 | VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001,
315 | VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002,
316 | VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003,
317 | VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004,
318 | VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005,
319 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = 1000130000,
320 | VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = 1000130001,
321 | VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
322 | VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
323 | VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
324 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003,
325 | VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004,
326 | VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = 1000147000,
327 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
328 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
329 | VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
330 | VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000,
331 | VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
332 | VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
333 | VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
334 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = 1000161000,
335 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = 1000161001,
336 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = 1000161002,
337 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = 1000161003,
338 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = 1000161004,
339 | VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
340 | VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
341 | VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
342 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
343 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
344 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
345 | VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
346 | VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
347 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
348 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
349 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
350 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
351 | VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
352 | VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,
353 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
354 | VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2,
355 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2,
356 | VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2,
357 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2,
358 | VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,
359 | VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO,
360 | VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO,
361 | VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO,
362 | VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO,
363 | VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO,
364 | VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
365 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
366 | VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
367 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
368 | VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES,
369 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO,
370 | VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES,
371 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
372 | VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
373 | VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
374 | VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
375 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO,
376 | VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES,
377 | VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,
378 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
379 | VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
380 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
381 | VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
382 | VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
383 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
384 | VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO,
385 | VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
386 | VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO,
387 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES,
388 | VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,
389 | VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
390 | VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
391 | VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
392 | VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
393 | VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
394 | VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
395 | VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
396 | VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
397 | VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
398 | VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
399 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
400 | VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,
401 | VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
402 | VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
403 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
404 | VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
405 | VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
406 | VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
407 | VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
408 | VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
409 | } VkStructureType;
410 |
411 | typedef enum VkFormat {
412 | VK_FORMAT_UNDEFINED = 0,
413 | VK_FORMAT_R4G4_UNORM_PACK8 = 1,
414 | VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
415 | VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
416 | VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
417 | VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
418 | VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
419 | VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
420 | VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
421 | VK_FORMAT_R8_UNORM = 9,
422 | VK_FORMAT_R8_SNORM = 10,
423 | VK_FORMAT_R8_USCALED = 11,
424 | VK_FORMAT_R8_SSCALED = 12,
425 | VK_FORMAT_R8_UINT = 13,
426 | VK_FORMAT_R8_SINT = 14,
427 | VK_FORMAT_R8_SRGB = 15,
428 | VK_FORMAT_R8G8_UNORM = 16,
429 | VK_FORMAT_R8G8_SNORM = 17,
430 | VK_FORMAT_R8G8_USCALED = 18,
431 | VK_FORMAT_R8G8_SSCALED = 19,
432 | VK_FORMAT_R8G8_UINT = 20,
433 | VK_FORMAT_R8G8_SINT = 21,
434 | VK_FORMAT_R8G8_SRGB = 22,
435 | VK_FORMAT_R8G8B8_UNORM = 23,
436 | VK_FORMAT_R8G8B8_SNORM = 24,
437 | VK_FORMAT_R8G8B8_USCALED = 25,
438 | VK_FORMAT_R8G8B8_SSCALED = 26,
439 | VK_FORMAT_R8G8B8_UINT = 27,
440 | VK_FORMAT_R8G8B8_SINT = 28,
441 | VK_FORMAT_R8G8B8_SRGB = 29,
442 | VK_FORMAT_B8G8R8_UNORM = 30,
443 | VK_FORMAT_B8G8R8_SNORM = 31,
444 | VK_FORMAT_B8G8R8_USCALED = 32,
445 | VK_FORMAT_B8G8R8_SSCALED = 33,
446 | VK_FORMAT_B8G8R8_UINT = 34,
447 | VK_FORMAT_B8G8R8_SINT = 35,
448 | VK_FORMAT_B8G8R8_SRGB = 36,
449 | VK_FORMAT_R8G8B8A8_UNORM = 37,
450 | VK_FORMAT_R8G8B8A8_SNORM = 38,
451 | VK_FORMAT_R8G8B8A8_USCALED = 39,
452 | VK_FORMAT_R8G8B8A8_SSCALED = 40,
453 | VK_FORMAT_R8G8B8A8_UINT = 41,
454 | VK_FORMAT_R8G8B8A8_SINT = 42,
455 | VK_FORMAT_R8G8B8A8_SRGB = 43,
456 | VK_FORMAT_B8G8R8A8_UNORM = 44,
457 | VK_FORMAT_B8G8R8A8_SNORM = 45,
458 | VK_FORMAT_B8G8R8A8_USCALED = 46,
459 | VK_FORMAT_B8G8R8A8_SSCALED = 47,
460 | VK_FORMAT_B8G8R8A8_UINT = 48,
461 | VK_FORMAT_B8G8R8A8_SINT = 49,
462 | VK_FORMAT_B8G8R8A8_SRGB = 50,
463 | VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
464 | VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
465 | VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
466 | VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
467 | VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
468 | VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
469 | VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
470 | VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
471 | VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
472 | VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
473 | VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
474 | VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
475 | VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
476 | VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
477 | VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
478 | VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
479 | VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
480 | VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
481 | VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
482 | VK_FORMAT_R16_UNORM = 70,
483 | VK_FORMAT_R16_SNORM = 71,
484 | VK_FORMAT_R16_USCALED = 72,
485 | VK_FORMAT_R16_SSCALED = 73,
486 | VK_FORMAT_R16_UINT = 74,
487 | VK_FORMAT_R16_SINT = 75,
488 | VK_FORMAT_R16_SFLOAT = 76,
489 | VK_FORMAT_R16G16_UNORM = 77,
490 | VK_FORMAT_R16G16_SNORM = 78,
491 | VK_FORMAT_R16G16_USCALED = 79,
492 | VK_FORMAT_R16G16_SSCALED = 80,
493 | VK_FORMAT_R16G16_UINT = 81,
494 | VK_FORMAT_R16G16_SINT = 82,
495 | VK_FORMAT_R16G16_SFLOAT = 83,
496 | VK_FORMAT_R16G16B16_UNORM = 84,
497 | VK_FORMAT_R16G16B16_SNORM = 85,
498 | VK_FORMAT_R16G16B16_USCALED = 86,
499 | VK_FORMAT_R16G16B16_SSCALED = 87,
500 | VK_FORMAT_R16G16B16_UINT = 88,
501 | VK_FORMAT_R16G16B16_SINT = 89,
502 | VK_FORMAT_R16G16B16_SFLOAT = 90,
503 | VK_FORMAT_R16G16B16A16_UNORM = 91,
504 | VK_FORMAT_R16G16B16A16_SNORM = 92,
505 | VK_FORMAT_R16G16B16A16_USCALED = 93,
506 | VK_FORMAT_R16G16B16A16_SSCALED = 94,
507 | VK_FORMAT_R16G16B16A16_UINT = 95,
508 | VK_FORMAT_R16G16B16A16_SINT = 96,
509 | VK_FORMAT_R16G16B16A16_SFLOAT = 97,
510 | VK_FORMAT_R32_UINT = 98,
511 | VK_FORMAT_R32_SINT = 99,
512 | VK_FORMAT_R32_SFLOAT = 100,
513 | VK_FORMAT_R32G32_UINT = 101,
514 | VK_FORMAT_R32G32_SINT = 102,
515 | VK_FORMAT_R32G32_SFLOAT = 103,
516 | VK_FORMAT_R32G32B32_UINT = 104,
517 | VK_FORMAT_R32G32B32_SINT = 105,
518 | VK_FORMAT_R32G32B32_SFLOAT = 106,
519 | VK_FORMAT_R32G32B32A32_UINT = 107,
520 | VK_FORMAT_R32G32B32A32_SINT = 108,
521 | VK_FORMAT_R32G32B32A32_SFLOAT = 109,
522 | VK_FORMAT_R64_UINT = 110,
523 | VK_FORMAT_R64_SINT = 111,
524 | VK_FORMAT_R64_SFLOAT = 112,
525 | VK_FORMAT_R64G64_UINT = 113,
526 | VK_FORMAT_R64G64_SINT = 114,
527 | VK_FORMAT_R64G64_SFLOAT = 115,
528 | VK_FORMAT_R64G64B64_UINT = 116,
529 | VK_FORMAT_R64G64B64_SINT = 117,
530 | VK_FORMAT_R64G64B64_SFLOAT = 118,
531 | VK_FORMAT_R64G64B64A64_UINT = 119,
532 | VK_FORMAT_R64G64B64A64_SINT = 120,
533 | VK_FORMAT_R64G64B64A64_SFLOAT = 121,
534 | VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
535 | VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
536 | VK_FORMAT_D16_UNORM = 124,
537 | VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
538 | VK_FORMAT_D32_SFLOAT = 126,
539 | VK_FORMAT_S8_UINT = 127,
540 | VK_FORMAT_D16_UNORM_S8_UINT = 128,
541 | VK_FORMAT_D24_UNORM_S8_UINT = 129,
542 | VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
543 | VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
544 | VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
545 | VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
546 | VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
547 | VK_FORMAT_BC2_UNORM_BLOCK = 135,
548 | VK_FORMAT_BC2_SRGB_BLOCK = 136,
549 | VK_FORMAT_BC3_UNORM_BLOCK = 137,
550 | VK_FORMAT_BC3_SRGB_BLOCK = 138,
551 | VK_FORMAT_BC4_UNORM_BLOCK = 139,
552 | VK_FORMAT_BC4_SNORM_BLOCK = 140,
553 | VK_FORMAT_BC5_UNORM_BLOCK = 141,
554 | VK_FORMAT_BC5_SNORM_BLOCK = 142,
555 | VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
556 | VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
557 | VK_FORMAT_BC7_UNORM_BLOCK = 145,
558 | VK_FORMAT_BC7_SRGB_BLOCK = 146,
559 | VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
560 | VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
561 | VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
562 | VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
563 | VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
564 | VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
565 | VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
566 | VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
567 | VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
568 | VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
569 | VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
570 | VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
571 | VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
572 | VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
573 | VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
574 | VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
575 | VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
576 | VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
577 | VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
578 | VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
579 | VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
580 | VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
581 | VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
582 | VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
583 | VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
584 | VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
585 | VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
586 | VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
587 | VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
588 | VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
589 | VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
590 | VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
591 | VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
592 | VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
593 | VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
594 | VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
595 | VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
596 | VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
597 | VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
598 | VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
599 | VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
600 | VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
601 | VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
602 | VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
603 | VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
604 | VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
605 | VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
606 | VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
607 | VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
608 | VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
609 | VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
610 | VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
611 | VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
612 | VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
613 | VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
614 | VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
615 | VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
616 | VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
617 | VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
618 | VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
619 | VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
620 | VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
621 | VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
622 | VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
623 | VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
624 | VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
625 | VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
626 | VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
627 | VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
628 | VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
629 | VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
630 | VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
631 | VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
632 | VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
633 | VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
634 | VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
635 | VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
636 | VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
637 | VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
638 | VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
639 | VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
640 | VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM,
641 | VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
642 | VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
643 | VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
644 | VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
645 | VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
646 | VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16,
647 | VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
648 | VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
649 | VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
650 | VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
651 | VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
652 | VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
653 | VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
654 | VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
655 | VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
656 | VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16,
657 | VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
658 | VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
659 | VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
660 | VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
661 | VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
662 | VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
663 | VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
664 | VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
665 | VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
666 | VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM,
667 | VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM,
668 | VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
669 | VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
670 | VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
671 | VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
672 | VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
673 | } VkFormat;
674 |
675 | typedef enum VkSystemAllocationScope {
676 | VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
677 | VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
678 | VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
679 | VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
680 | VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
681 | VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
682 | VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
683 | VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
684 | VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
685 | } VkSystemAllocationScope;
686 |
687 | typedef enum VkInternalAllocationType {
688 | VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
689 | VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
690 | VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
691 | VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
692 | VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
693 | } VkInternalAllocationType;
694 |
695 | typedef enum VkPhysicalDeviceType {
696 | VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
697 | VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
698 | VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
699 | VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
700 | VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
701 | VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
702 | VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
703 | VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
704 | VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
705 | } VkPhysicalDeviceType;
706 |
707 | typedef VkFlags VkInstanceCreateFlags;
708 |
709 | typedef enum VkSampleCountFlagBits {
710 | VK_SAMPLE_COUNT_1_BIT = 0x00000001,
711 | VK_SAMPLE_COUNT_2_BIT = 0x00000002,
712 | VK_SAMPLE_COUNT_4_BIT = 0x00000004,
713 | VK_SAMPLE_COUNT_8_BIT = 0x00000008,
714 | VK_SAMPLE_COUNT_16_BIT = 0x00000010,
715 | VK_SAMPLE_COUNT_32_BIT = 0x00000020,
716 | VK_SAMPLE_COUNT_64_BIT = 0x00000040,
717 | VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
718 | } VkSampleCountFlagBits;
719 | typedef VkFlags VkSampleCountFlags;
720 |
721 | typedef enum VkQueueFlagBits {
722 | VK_QUEUE_GRAPHICS_BIT = 0x00000001,
723 | VK_QUEUE_COMPUTE_BIT = 0x00000002,
724 | VK_QUEUE_TRANSFER_BIT = 0x00000004,
725 | VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
726 | VK_QUEUE_PROTECTED_BIT = 0x00000010,
727 | VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
728 | } VkQueueFlagBits;
729 | typedef VkFlags VkQueueFlags;
730 |
731 | typedef enum VkMemoryHeapFlagBits {
732 | VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
733 | VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002,
734 | VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT,
735 | VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
736 | } VkMemoryHeapFlagBits;
737 | typedef VkFlags VkMemoryHeapFlags;
738 | typedef VkFlags VkDeviceCreateFlags;
739 |
740 | typedef enum VkDeviceQueueCreateFlagBits {
741 | VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001,
742 | VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
743 | } VkDeviceQueueCreateFlagBits;
744 | typedef VkFlags VkDeviceQueueCreateFlags;
745 |
746 | typedef enum VkCommandPoolCreateFlagBits {
747 | VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
748 | VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
749 | VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004,
750 | } VkCommandPoolCreateFlagBits;
751 | typedef VkFlags VkCommandPoolCreateFlags;
752 |
753 | typedef enum VkCommandPoolResetFlagBits {
754 | VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
755 | } VkCommandPoolResetFlagBits;
756 | typedef VkFlags VkCommandPoolResetFlags;
757 |
758 | typedef enum VkCommandBufferLevel {
759 | VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
760 | VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
761 | } VkCommandBufferLevel;
762 |
763 | typedef enum VkCommandBufferResetFlagBits {
764 | VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
765 | } VkCommandBufferResetFlagBits;
766 | typedef VkFlags VkCommandBufferResetFlags;
767 |
768 | typedef enum VkCommandBufferUsageFlagBits {
769 | VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
770 | VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
771 | VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
772 | } VkCommandBufferUsageFlagBits;
773 | typedef VkFlags VkCommandBufferUsageFlags;
774 |
775 | typedef enum VkFenceCreateFlagBits {
776 | VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
777 | } VkFenceCreateFlagBits;
778 | typedef VkFlags VkFenceCreateFlags;
779 |
780 | typedef VkFlags VkSemaphoreCreateFlags;
781 |
782 | typedef enum VkQueryControlFlagBits {
783 | VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
784 | } VkQueryControlFlagBits;
785 | typedef VkFlags VkQueryControlFlags;
786 |
787 | typedef enum VkQueryPipelineStatisticFlagBits {
788 | VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
789 | VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
790 | VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
791 | VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
792 | VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
793 | VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
794 | VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
795 | VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
796 | VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
797 | VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
798 | VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
799 | } VkQueryPipelineStatisticFlagBits;
800 | typedef VkFlags VkQueryPipelineStatisticFlags;
801 |
802 | typedef enum VkPipelineStageFlagBits {
803 | VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
804 | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
805 | VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
806 | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
807 | VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
808 | VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
809 | VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
810 | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
811 | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
812 | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
813 | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
814 | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
815 | VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
816 | VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
817 | VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
818 | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
819 | VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
820 | VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = 0x00020000,
821 | } VkPipelineStageFlagBits;
822 | typedef VkFlags VkPipelineStageFlags;
823 |
824 | typedef enum VkImageAspectFlagBits {
825 | VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
826 | VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
827 | VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
828 | VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
829 | VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010,
830 | VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020,
831 | VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040,
832 | VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT,
833 | VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT,
834 | VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT,
835 | } VkImageAspectFlagBits;
836 | typedef VkFlags VkImageAspectFlags;
837 |
838 | typedef VkFlags VkPipelineShaderStageCreateFlags;
839 | typedef enum VkShaderStageFlagBits {
840 | VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
841 | VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
842 | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
843 | VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
844 | VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
845 | VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
846 | VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
847 | VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
848 | } VkShaderStageFlagBits;
849 | typedef VkFlags VkShaderStageFlags;
850 |
851 | typedef VkFlags VkPipelineVertexInputStateCreateFlags;
852 |
853 | typedef enum VkVertexInputRate {
854 | VK_VERTEX_INPUT_RATE_VERTEX = 0,
855 | VK_VERTEX_INPUT_RATE_INSTANCE = 1,
856 | } VkVertexInputRate;
857 |
858 | typedef enum VkImageLayout {
859 | VK_IMAGE_LAYOUT_UNDEFINED = 0,
860 | VK_IMAGE_LAYOUT_GENERAL = 1,
861 | VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
862 | VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
863 | VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
864 | VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
865 | VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
866 | VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
867 | VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
868 | VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
869 | VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
870 | VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
871 | VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
872 | VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
873 | VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
874 | } VkImageLayout;
875 |
876 | typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
877 |
878 | typedef enum VkPrimitiveTopology {
879 | VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
880 | VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
881 | VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
882 | VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
883 | VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
884 | VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
885 | VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
886 | VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
887 | VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
888 | VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
889 | VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
890 | } VkPrimitiveTopology;
891 |
892 | typedef VkFlags VkPipelineTessellationStateCreateFlags;
893 | typedef VkFlags VkPipelineViewportStateCreateFlags;
894 | typedef VkFlags VkPipelineRasterizationStateCreateFlags;
895 |
896 | typedef enum VkPolygonMode {
897 | VK_POLYGON_MODE_FILL = 0,
898 | VK_POLYGON_MODE_LINE = 1,
899 | VK_POLYGON_MODE_POINT = 2,
900 | VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000,
901 | } VkPolygonMode;
902 |
903 | typedef enum VkCullModeFlagBits {
904 | VK_CULL_MODE_NONE = 0,
905 | VK_CULL_MODE_FRONT_BIT = 0x00000001,
906 | VK_CULL_MODE_BACK_BIT = 0x00000002,
907 | VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
908 | } VkCullModeFlagBits;
909 | typedef VkFlags VkCullModeFlags;
910 |
911 | typedef enum VkFrontFace {
912 | VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
913 | VK_FRONT_FACE_CLOCKWISE = 1,
914 | } VkFrontFace;
915 |
916 | typedef VkFlags VkPipelineMultisampleStateCreateFlags;
917 | typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
918 |
919 | typedef enum VkCompareOp {
920 | VK_COMPARE_OP_NEVER = 0,
921 | VK_COMPARE_OP_LESS = 1,
922 | VK_COMPARE_OP_EQUAL = 2,
923 | VK_COMPARE_OP_LESS_OR_EQUAL = 3,
924 | VK_COMPARE_OP_GREATER = 4,
925 | VK_COMPARE_OP_NOT_EQUAL = 5,
926 | VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
927 | VK_COMPARE_OP_ALWAYS = 7,
928 | } VkCompareOp;
929 |
930 | typedef enum VkStencilOp {
931 | VK_STENCIL_OP_KEEP = 0,
932 | VK_STENCIL_OP_ZERO = 1,
933 | VK_STENCIL_OP_REPLACE = 2,
934 | VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
935 | VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
936 | VK_STENCIL_OP_INVERT = 5,
937 | VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
938 | VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
939 | } VkStencilOp;
940 |
941 | typedef VkFlags VkPipelineColorBlendStateCreateFlags;
942 | typedef enum VkLogicOp {
943 | VK_LOGIC_OP_CLEAR = 0,
944 | VK_LOGIC_OP_AND = 1,
945 | VK_LOGIC_OP_AND_REVERSE = 2,
946 | VK_LOGIC_OP_COPY = 3,
947 | VK_LOGIC_OP_AND_INVERTED = 4,
948 | VK_LOGIC_OP_NO_OP = 5,
949 | VK_LOGIC_OP_XOR = 6,
950 | VK_LOGIC_OP_OR = 7,
951 | VK_LOGIC_OP_NOR = 8,
952 | VK_LOGIC_OP_EQUIVALENT = 9,
953 | VK_LOGIC_OP_INVERT = 10,
954 | VK_LOGIC_OP_OR_REVERSE = 11,
955 | VK_LOGIC_OP_COPY_INVERTED = 12,
956 | VK_LOGIC_OP_OR_INVERTED = 13,
957 | VK_LOGIC_OP_NAND = 14,
958 | VK_LOGIC_OP_SET = 15,
959 | } VkLogicOp;
960 |
961 | typedef enum VkBlendFactor {
962 | VK_BLEND_FACTOR_ZERO = 0,
963 | VK_BLEND_FACTOR_ONE = 1,
964 | VK_BLEND_FACTOR_SRC_COLOR = 2,
965 | VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
966 | VK_BLEND_FACTOR_DST_COLOR = 4,
967 | VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
968 | VK_BLEND_FACTOR_SRC_ALPHA = 6,
969 | VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
970 | VK_BLEND_FACTOR_DST_ALPHA = 8,
971 | VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
972 | VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
973 | VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
974 | VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
975 | VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
976 | VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
977 | VK_BLEND_FACTOR_SRC1_COLOR = 15,
978 | VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
979 | VK_BLEND_FACTOR_SRC1_ALPHA = 17,
980 | VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
981 | } VkBlendFactor;
982 |
983 | typedef enum VkBlendOp {
984 | VK_BLEND_OP_ADD = 0,
985 | VK_BLEND_OP_SUBTRACT = 1,
986 | VK_BLEND_OP_REVERSE_SUBTRACT = 2,
987 | VK_BLEND_OP_MIN = 3,
988 | VK_BLEND_OP_MAX = 4,
989 | VK_BLEND_OP_ZERO_EXT = 1000148000,
990 | VK_BLEND_OP_SRC_EXT = 1000148001,
991 | VK_BLEND_OP_DST_EXT = 1000148002,
992 | VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
993 | VK_BLEND_OP_DST_OVER_EXT = 1000148004,
994 | VK_BLEND_OP_SRC_IN_EXT = 1000148005,
995 | VK_BLEND_OP_DST_IN_EXT = 1000148006,
996 | VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
997 | VK_BLEND_OP_DST_OUT_EXT = 1000148008,
998 | VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
999 | VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
1000 | VK_BLEND_OP_XOR_EXT = 1000148011,
1001 | VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
1002 | VK_BLEND_OP_SCREEN_EXT = 1000148013,
1003 | VK_BLEND_OP_OVERLAY_EXT = 1000148014,
1004 | VK_BLEND_OP_DARKEN_EXT = 1000148015,
1005 | VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
1006 | VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
1007 | VK_BLEND_OP_COLORBURN_EXT = 1000148018,
1008 | VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
1009 | VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
1010 | VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
1011 | VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
1012 | VK_BLEND_OP_INVERT_EXT = 1000148023,
1013 | VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
1014 | VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
1015 | VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
1016 | VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
1017 | VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
1018 | VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
1019 | VK_BLEND_OP_HARDMIX_EXT = 1000148030,
1020 | VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
1021 | VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
1022 | VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
1023 | VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
1024 | VK_BLEND_OP_PLUS_EXT = 1000148035,
1025 | VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
1026 | VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
1027 | VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
1028 | VK_BLEND_OP_MINUS_EXT = 1000148039,
1029 | VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
1030 | VK_BLEND_OP_CONTRAST_EXT = 1000148041,
1031 | VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
1032 | VK_BLEND_OP_RED_EXT = 1000148043,
1033 | VK_BLEND_OP_GREEN_EXT = 1000148044,
1034 | VK_BLEND_OP_BLUE_EXT = 1000148045,
1035 | } VkBlendOp;
1036 |
1037 | typedef enum VkColorComponentFlagBits {
1038 | VK_COLOR_COMPONENT_R_BIT = 0x00000001,
1039 | VK_COLOR_COMPONENT_G_BIT = 0x00000002,
1040 | VK_COLOR_COMPONENT_B_BIT = 0x00000004,
1041 | VK_COLOR_COMPONENT_A_BIT = 0x00000008,
1042 | } VkColorComponentFlagBits;
1043 | typedef VkFlags VkColorComponentFlags;
1044 |
1045 | typedef VkFlags VkPipelineDynamicStateCreateFlags;
1046 | typedef enum VkDynamicState {
1047 | VK_DYNAMIC_STATE_VIEWPORT = 0,
1048 | VK_DYNAMIC_STATE_SCISSOR = 1,
1049 | VK_DYNAMIC_STATE_LINE_WIDTH = 2,
1050 | VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
1051 | VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
1052 | VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
1053 | VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
1054 | VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
1055 | VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
1056 | VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
1057 | VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
1058 | VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
1059 | } VkDynamicState;
1060 |
1061 | typedef enum VkPipelineCreateFlagBits {
1062 | VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
1063 | VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
1064 | VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
1065 | VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
1066 | VK_PIPELINE_CREATE_DISPATCH_BASE = 0x00000010,
1067 | VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
1068 | VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE,
1069 | } VkPipelineCreateFlagBits;
1070 | typedef VkFlags VkPipelineCreateFlags;
1071 |
1072 | typedef enum VkSharingMode {
1073 | VK_SHARING_MODE_EXCLUSIVE = 0,
1074 | VK_SHARING_MODE_CONCURRENT = 1,
1075 | } VkSharingMode;
1076 |
1077 | typedef enum VkImageUsageFlagBits {
1078 | VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
1079 | VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
1080 | VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
1081 | VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
1082 | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
1083 | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
1084 | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
1085 | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
1086 | } VkImageUsageFlagBits;
1087 | typedef VkFlags VkImageUsageFlags;
1088 |
1089 | typedef enum VkImageType {
1090 | VK_IMAGE_TYPE_1D = 0,
1091 | VK_IMAGE_TYPE_2D = 1,
1092 | VK_IMAGE_TYPE_3D = 2,
1093 | } VkImageType;
1094 |
1095 | typedef VkFlags VkImageViewCreateFlags;
1096 |
1097 | typedef enum VkImageViewType {
1098 | VK_IMAGE_VIEW_TYPE_1D = 0,
1099 | VK_IMAGE_VIEW_TYPE_2D = 1,
1100 | VK_IMAGE_VIEW_TYPE_3D = 2,
1101 | VK_IMAGE_VIEW_TYPE_CUBE = 3,
1102 | VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
1103 | VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
1104 | VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
1105 | } VkImageViewType;
1106 |
1107 | typedef enum VkComponentSwizzle {
1108 | VK_COMPONENT_SWIZZLE_IDENTITY = 0,
1109 | VK_COMPONENT_SWIZZLE_ZERO = 1,
1110 | VK_COMPONENT_SWIZZLE_ONE = 2,
1111 | VK_COMPONENT_SWIZZLE_R = 3,
1112 | VK_COMPONENT_SWIZZLE_G = 4,
1113 | VK_COMPONENT_SWIZZLE_B = 5,
1114 | VK_COMPONENT_SWIZZLE_A = 6,
1115 | } VkComponentSwizzle;
1116 |
1117 | typedef VkFlags VkShaderModuleCreateFlags;
1118 | typedef VkFlags VkPipelineLayoutCreateFlags;
1119 |
1120 | typedef enum VkPipelineBindPoint {
1121 | VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
1122 | VK_PIPELINE_BIND_POINT_COMPUTE = 1,
1123 | } VkPipelineBindPoint;
1124 |
1125 | typedef enum VkAccessFlagBits {
1126 | VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
1127 | VK_ACCESS_INDEX_READ_BIT = 0x00000002,
1128 | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
1129 | VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
1130 | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
1131 | VK_ACCESS_SHADER_READ_BIT = 0x00000020,
1132 | VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
1133 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
1134 | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
1135 | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
1136 | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
1137 | VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
1138 | VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
1139 | VK_ACCESS_HOST_READ_BIT = 0x00002000,
1140 | VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
1141 | VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
1142 | VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
1143 | VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = 0x00020000,
1144 | VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = 0x00040000,
1145 | VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
1146 | } VkAccessFlagBits;
1147 | typedef VkFlags VkAccessFlags;
1148 |
1149 | typedef enum VkDependencyFlagBits {
1150 | VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
1151 | VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004,
1152 | VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002,
1153 | VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT,
1154 | VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT,
1155 | } VkDependencyFlagBits;
1156 | typedef VkFlags VkDependencyFlags;
1157 |
1158 | typedef enum VkAttachmentDescriptionFlagBits {
1159 | VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
1160 | } VkAttachmentDescriptionFlagBits;
1161 | typedef VkFlags VkAttachmentDescriptionFlags;
1162 |
1163 | typedef enum VkAttachmentLoadOp {
1164 | VK_ATTACHMENT_LOAD_OP_LOAD = 0,
1165 | VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
1166 | VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
1167 | } VkAttachmentLoadOp;
1168 |
1169 | typedef enum VkAttachmentStoreOp {
1170 | VK_ATTACHMENT_STORE_OP_STORE = 0,
1171 | VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
1172 | } VkAttachmentStoreOp;
1173 |
1174 | typedef VkFlags VkRenderPassCreateFlags;
1175 |
1176 | typedef enum VkSubpassDescriptionFlagBits {
1177 | VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001,
1178 | VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
1179 | } VkSubpassDescriptionFlagBits;
1180 | typedef VkFlags VkSubpassDescriptionFlags;
1181 |
1182 | typedef enum VkSubpassContents {
1183 | VK_SUBPASS_CONTENTS_INLINE = 0,
1184 | VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
1185 | } VkSubpassContents;
1186 |
1187 | typedef VkFlags VkFramebufferCreateFlags;
1188 |
1189 | typedef enum VkDeviceGroupPresentModeFlagBitsKHR {
1190 | VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001,
1191 | VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002,
1192 | VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004,
1193 | VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
1194 | } VkDeviceGroupPresentModeFlagBitsKHR;
1195 | typedef VkFlags VkDeviceGroupPresentModeFlagsKHR;
1196 |
1197 | typedef enum VkSwapchainCreateFlagBitsKHR {
1198 | VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
1199 | VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002,
1200 | } VkSwapchainCreateFlagBitsKHR;
1201 | typedef VkFlags VkSwapchainCreateFlagsKHR;
1202 |
1203 | typedef enum VkColorSpaceKHR {
1204 | VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
1205 | VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
1206 | VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
1207 | VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003,
1208 | VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
1209 | VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
1210 | VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
1211 | VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
1212 | VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
1213 | VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
1214 | VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
1215 | VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
1216 | VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
1217 | VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
1218 | VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
1219 | } VkColorSpaceKHR;
1220 |
1221 | typedef enum VkSurfaceTransformFlagBitsKHR {
1222 | VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
1223 | VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
1224 | VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
1225 | VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
1226 | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
1227 | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
1228 | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
1229 | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
1230 | VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
1231 | } VkSurfaceTransformFlagBitsKHR;
1232 | typedef VkFlags VkSurfaceTransformFlagsKHR;
1233 |
1234 | typedef enum VkCompositeAlphaFlagBitsKHR {
1235 | VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
1236 | VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
1237 | VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
1238 | VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
1239 | } VkCompositeAlphaFlagBitsKHR;
1240 | typedef VkFlags VkCompositeAlphaFlagsKHR;
1241 |
1242 | typedef enum VkPresentModeKHR {
1243 | VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
1244 | VK_PRESENT_MODE_MAILBOX_KHR = 1,
1245 | VK_PRESENT_MODE_FIFO_KHR = 2,
1246 | VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
1247 | VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
1248 | VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
1249 | } VkPresentModeKHR;
1250 |
1251 | typedef struct VkOffset2D {
1252 | int32_t x;
1253 | int32_t y;
1254 | } VkOffset2D;
1255 |
1256 | typedef struct VkOffset3D {
1257 | int32_t x;
1258 | int32_t y;
1259 | int32_t z;
1260 | } VkOffset3D;
1261 |
1262 | typedef struct VkExtent2D {
1263 | uint32_t width;
1264 | uint32_t height;
1265 | } VkExtent2D;
1266 |
1267 | typedef struct VkExtent3D {
1268 | uint32_t width;
1269 | uint32_t height;
1270 | uint32_t depth;
1271 | } VkExtent3D;
1272 |
1273 | typedef struct VkRect2D {
1274 | VkOffset2D offset;
1275 | VkExtent2D extent;
1276 | } VkRect2D;
1277 |
1278 | typedef struct VkApplicationInfo {
1279 | VkStructureType sType;
1280 | const void* pNext;
1281 | const char* pApplicationName;
1282 | uint32_t applicationVersion;
1283 | const char* pEngineName;
1284 | uint32_t engineVersion;
1285 | uint32_t apiVersion;
1286 | } VkApplicationInfo;
1287 |
1288 | typedef struct VkInstanceCreateInfo {
1289 | VkStructureType sType;
1290 | const void* pNext;
1291 | VkInstanceCreateFlags flags;
1292 | const VkApplicationInfo* pApplicationInfo;
1293 | uint32_t enabledLayerCount;
1294 | const char* const* ppEnabledLayerNames;
1295 | uint32_t enabledExtensionCount;
1296 | const char* const* ppEnabledExtensionNames;
1297 | } VkInstanceCreateInfo;
1298 |
1299 | typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
1300 | void* pUserData,
1301 | size_t size,
1302 | size_t alignment,
1303 | VkSystemAllocationScope allocationScope);
1304 |
1305 | typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
1306 | void* pUserData,
1307 | void* pOriginal,
1308 | size_t size,
1309 | size_t alignment,
1310 | VkSystemAllocationScope allocationScope);
1311 |
1312 | typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
1313 | void* pUserData,
1314 | void* pMemory);
1315 |
1316 | typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
1317 | void* pUserData,
1318 | size_t size,
1319 | VkInternalAllocationType allocationType,
1320 | VkSystemAllocationScope allocationScope);
1321 |
1322 | typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
1323 | void* pUserData,
1324 | size_t size,
1325 | VkInternalAllocationType allocationType,
1326 | VkSystemAllocationScope allocationScope);
1327 |
1328 | typedef struct VkAllocationCallbacks {
1329 | void* pUserData;
1330 | PFN_vkAllocationFunction pfnAllocation;
1331 | PFN_vkReallocationFunction pfnReallocation;
1332 | PFN_vkFreeFunction pfnFree;
1333 | PFN_vkInternalAllocationNotification pfnInternalAllocation;
1334 | PFN_vkInternalFreeNotification pfnInternalFree;
1335 | } VkAllocationCallbacks;
1336 |
1337 | typedef struct VkPhysicalDeviceLimits {
1338 | uint32_t maxImageDimension1D;
1339 | uint32_t maxImageDimension2D;
1340 | uint32_t maxImageDimension3D;
1341 | uint32_t maxImageDimensionCube;
1342 | uint32_t maxImageArrayLayers;
1343 | uint32_t maxTexelBufferElements;
1344 | uint32_t maxUniformBufferRange;
1345 | uint32_t maxStorageBufferRange;
1346 | uint32_t maxPushConstantsSize;
1347 | uint32_t maxMemoryAllocationCount;
1348 | uint32_t maxSamplerAllocationCount;
1349 | VkDeviceSize bufferImageGranularity;
1350 | VkDeviceSize sparseAddressSpaceSize;
1351 | uint32_t maxBoundDescriptorSets;
1352 | uint32_t maxPerStageDescriptorSamplers;
1353 | uint32_t maxPerStageDescriptorUniformBuffers;
1354 | uint32_t maxPerStageDescriptorStorageBuffers;
1355 | uint32_t maxPerStageDescriptorSampledImages;
1356 | uint32_t maxPerStageDescriptorStorageImages;
1357 | uint32_t maxPerStageDescriptorInputAttachments;
1358 | uint32_t maxPerStageResources;
1359 | uint32_t maxDescriptorSetSamplers;
1360 | uint32_t maxDescriptorSetUniformBuffers;
1361 | uint32_t maxDescriptorSetUniformBuffersDynamic;
1362 | uint32_t maxDescriptorSetStorageBuffers;
1363 | uint32_t maxDescriptorSetStorageBuffersDynamic;
1364 | uint32_t maxDescriptorSetSampledImages;
1365 | uint32_t maxDescriptorSetStorageImages;
1366 | uint32_t maxDescriptorSetInputAttachments;
1367 | uint32_t maxVertexInputAttributes;
1368 | uint32_t maxVertexInputBindings;
1369 | uint32_t maxVertexInputAttributeOffset;
1370 | uint32_t maxVertexInputBindingStride;
1371 | uint32_t maxVertexOutputComponents;
1372 | uint32_t maxTessellationGenerationLevel;
1373 | uint32_t maxTessellationPatchSize;
1374 | uint32_t maxTessellationControlPerVertexInputComponents;
1375 | uint32_t maxTessellationControlPerVertexOutputComponents;
1376 | uint32_t maxTessellationControlPerPatchOutputComponents;
1377 | uint32_t maxTessellationControlTotalOutputComponents;
1378 | uint32_t maxTessellationEvaluationInputComponents;
1379 | uint32_t maxTessellationEvaluationOutputComponents;
1380 | uint32_t maxGeometryShaderInvocations;
1381 | uint32_t maxGeometryInputComponents;
1382 | uint32_t maxGeometryOutputComponents;
1383 | uint32_t maxGeometryOutputVertices;
1384 | uint32_t maxGeometryTotalOutputComponents;
1385 | uint32_t maxFragmentInputComponents;
1386 | uint32_t maxFragmentOutputAttachments;
1387 | uint32_t maxFragmentDualSrcAttachments;
1388 | uint32_t maxFragmentCombinedOutputResources;
1389 | uint32_t maxComputeSharedMemorySize;
1390 | uint32_t maxComputeWorkGroupCount[3];
1391 | uint32_t maxComputeWorkGroupInvocations;
1392 | uint32_t maxComputeWorkGroupSize[3];
1393 | uint32_t subPixelPrecisionBits;
1394 | uint32_t subTexelPrecisionBits;
1395 | uint32_t mipmapPrecisionBits;
1396 | uint32_t maxDrawIndexedIndexValue;
1397 | uint32_t maxDrawIndirectCount;
1398 | float maxSamplerLodBias;
1399 | float maxSamplerAnisotropy;
1400 | uint32_t maxViewports;
1401 | uint32_t maxViewportDimensions[2];
1402 | float viewportBoundsRange[2];
1403 | uint32_t viewportSubPixelBits;
1404 | size_t minMemoryMapAlignment;
1405 | VkDeviceSize minTexelBufferOffsetAlignment;
1406 | VkDeviceSize minUniformBufferOffsetAlignment;
1407 | VkDeviceSize minStorageBufferOffsetAlignment;
1408 | int32_t minTexelOffset;
1409 | uint32_t maxTexelOffset;
1410 | int32_t minTexelGatherOffset;
1411 | uint32_t maxTexelGatherOffset;
1412 | float minInterpolationOffset;
1413 | float maxInterpolationOffset;
1414 | uint32_t subPixelInterpolationOffsetBits;
1415 | uint32_t maxFramebufferWidth;
1416 | uint32_t maxFramebufferHeight;
1417 | uint32_t maxFramebufferLayers;
1418 | VkSampleCountFlags framebufferColorSampleCounts;
1419 | VkSampleCountFlags framebufferDepthSampleCounts;
1420 | VkSampleCountFlags framebufferStencilSampleCounts;
1421 | VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
1422 | uint32_t maxColorAttachments;
1423 | VkSampleCountFlags sampledImageColorSampleCounts;
1424 | VkSampleCountFlags sampledImageIntegerSampleCounts;
1425 | VkSampleCountFlags sampledImageDepthSampleCounts;
1426 | VkSampleCountFlags sampledImageStencilSampleCounts;
1427 | VkSampleCountFlags storageImageSampleCounts;
1428 | uint32_t maxSampleMaskWords;
1429 | VkBool32 timestampComputeAndGraphics;
1430 | float timestampPeriod;
1431 | uint32_t maxClipDistances;
1432 | uint32_t maxCullDistances;
1433 | uint32_t maxCombinedClipAndCullDistances;
1434 | uint32_t discreteQueuePriorities;
1435 | float pointSizeRange[2];
1436 | float lineWidthRange[2];
1437 | float pointSizeGranularity;
1438 | float lineWidthGranularity;
1439 | VkBool32 strictLines;
1440 | VkBool32 standardSampleLocations;
1441 | VkDeviceSize optimalBufferCopyOffsetAlignment;
1442 | VkDeviceSize optimalBufferCopyRowPitchAlignment;
1443 | VkDeviceSize nonCoherentAtomSize;
1444 | } VkPhysicalDeviceLimits;
1445 |
1446 | typedef struct VkPhysicalDeviceSparseProperties {
1447 | VkBool32 residencyStandard2DBlockShape;
1448 | VkBool32 residencyStandard2DMultisampleBlockShape;
1449 | VkBool32 residencyStandard3DBlockShape;
1450 | VkBool32 residencyAlignedMipSize;
1451 | VkBool32 residencyNonResidentStrict;
1452 | } VkPhysicalDeviceSparseProperties;
1453 |
1454 | typedef struct VkPhysicalDeviceProperties {
1455 | uint32_t apiVersion;
1456 | uint32_t driverVersion;
1457 | uint32_t vendorID;
1458 | uint32_t deviceID;
1459 | VkPhysicalDeviceType deviceType;
1460 | char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
1461 | uint8_t pipelineCacheUUID[VK_UUID_SIZE];
1462 | VkPhysicalDeviceLimits limits;
1463 | VkPhysicalDeviceSparseProperties sparseProperties;
1464 | } VkPhysicalDeviceProperties;
1465 |
1466 | typedef struct VkPhysicalDeviceFeatures {
1467 | VkBool32 robustBufferAccess;
1468 | VkBool32 fullDrawIndexUint32;
1469 | VkBool32 imageCubeArray;
1470 | VkBool32 independentBlend;
1471 | VkBool32 geometryShader;
1472 | VkBool32 tessellationShader;
1473 | VkBool32 sampleRateShading;
1474 | VkBool32 dualSrcBlend;
1475 | VkBool32 logicOp;
1476 | VkBool32 multiDrawIndirect;
1477 | VkBool32 drawIndirectFirstInstance;
1478 | VkBool32 depthClamp;
1479 | VkBool32 depthBiasClamp;
1480 | VkBool32 fillModeNonSolid;
1481 | VkBool32 depthBounds;
1482 | VkBool32 wideLines;
1483 | VkBool32 largePoints;
1484 | VkBool32 alphaToOne;
1485 | VkBool32 multiViewport;
1486 | VkBool32 samplerAnisotropy;
1487 | VkBool32 textureCompressionETC2;
1488 | VkBool32 textureCompressionASTC_LDR;
1489 | VkBool32 textureCompressionBC;
1490 | VkBool32 occlusionQueryPrecise;
1491 | VkBool32 pipelineStatisticsQuery;
1492 | VkBool32 vertexPipelineStoresAndAtomics;
1493 | VkBool32 fragmentStoresAndAtomics;
1494 | VkBool32 shaderTessellationAndGeometryPointSize;
1495 | VkBool32 shaderImageGatherExtended;
1496 | VkBool32 shaderStorageImageExtendedFormats;
1497 | VkBool32 shaderStorageImageMultisample;
1498 | VkBool32 shaderStorageImageReadWithoutFormat;
1499 | VkBool32 shaderStorageImageWriteWithoutFormat;
1500 | VkBool32 shaderUniformBufferArrayDynamicIndexing;
1501 | VkBool32 shaderSampledImageArrayDynamicIndexing;
1502 | VkBool32 shaderStorageBufferArrayDynamicIndexing;
1503 | VkBool32 shaderStorageImageArrayDynamicIndexing;
1504 | VkBool32 shaderClipDistance;
1505 | VkBool32 shaderCullDistance;
1506 | VkBool32 shaderFloat64;
1507 | VkBool32 shaderInt64;
1508 | VkBool32 shaderInt16;
1509 | VkBool32 shaderResourceResidency;
1510 | VkBool32 shaderResourceMinLod;
1511 | VkBool32 sparseBinding;
1512 | VkBool32 sparseResidencyBuffer;
1513 | VkBool32 sparseResidencyImage2D;
1514 | VkBool32 sparseResidencyImage3D;
1515 | VkBool32 sparseResidency2Samples;
1516 | VkBool32 sparseResidency4Samples;
1517 | VkBool32 sparseResidency8Samples;
1518 | VkBool32 sparseResidency16Samples;
1519 | VkBool32 sparseResidencyAliased;
1520 | VkBool32 variableMultisampleRate;
1521 | VkBool32 inheritedQueries;
1522 | } VkPhysicalDeviceFeatures;
1523 |
1524 | typedef struct VkQueueFamilyProperties {
1525 | VkQueueFlags queueFlags;
1526 | uint32_t queueCount;
1527 | uint32_t timestampValidBits;
1528 | VkExtent3D minImageTransferGranularity;
1529 | } VkQueueFamilyProperties;
1530 |
1531 | typedef struct VkDeviceQueueCreateInfo {
1532 | VkStructureType sType;
1533 | const void* pNext;
1534 | VkDeviceQueueCreateFlags flags;
1535 | uint32_t queueFamilyIndex;
1536 | uint32_t queueCount;
1537 | const float* pQueuePriorities;
1538 | } VkDeviceQueueCreateInfo;
1539 |
1540 | typedef struct VkDeviceCreateInfo {
1541 | VkStructureType sType;
1542 | const void* pNext;
1543 | VkDeviceCreateFlags flags;
1544 | uint32_t queueCreateInfoCount;
1545 | const VkDeviceQueueCreateInfo* pQueueCreateInfos;
1546 | uint32_t enabledLayerCount;
1547 | const char* const* ppEnabledLayerNames;
1548 | uint32_t enabledExtensionCount;
1549 | const char* const* ppEnabledExtensionNames;
1550 | const VkPhysicalDeviceFeatures* pEnabledFeatures;
1551 | } VkDeviceCreateInfo;
1552 |
1553 | typedef struct VkCommandPoolCreateInfo {
1554 | VkStructureType sType;
1555 | const void* pNext;
1556 | VkCommandPoolCreateFlags flags;
1557 | uint32_t queueFamilyIndex;
1558 | } VkCommandPoolCreateInfo;
1559 |
1560 | typedef struct VkCommandBufferAllocateInfo {
1561 | VkStructureType sType;
1562 | const void* pNext;
1563 | VkCommandPool commandPool;
1564 | VkCommandBufferLevel level;
1565 | uint32_t commandBufferCount;
1566 | } VkCommandBufferAllocateInfo;
1567 |
1568 | typedef struct VkCommandBufferInheritanceInfo {
1569 | VkStructureType sType;
1570 | const void* pNext;
1571 | VkRenderPass renderPass;
1572 | uint32_t subpass;
1573 | VkFramebuffer framebuffer;
1574 | VkBool32 occlusionQueryEnable;
1575 | VkQueryControlFlags queryFlags;
1576 | VkQueryPipelineStatisticFlags pipelineStatistics;
1577 | } VkCommandBufferInheritanceInfo;
1578 |
1579 | typedef struct VkCommandBufferBeginInfo {
1580 | VkStructureType sType;
1581 | const void* pNext;
1582 | VkCommandBufferUsageFlags flags;
1583 | const VkCommandBufferInheritanceInfo* pInheritanceInfo;
1584 | } VkCommandBufferBeginInfo;
1585 |
1586 | typedef struct VkFenceCreateInfo {
1587 | VkStructureType sType;
1588 | const void* pNext;
1589 | VkFenceCreateFlags flags;
1590 | } VkFenceCreateInfo;
1591 |
1592 | typedef struct VkSemaphoreCreateInfo {
1593 | VkStructureType sType;
1594 | const void* pNext;
1595 | VkSemaphoreCreateFlags flags;
1596 | } VkSemaphoreCreateInfo;
1597 |
1598 | typedef struct VkSubmitInfo {
1599 | VkStructureType sType;
1600 | const void* pNext;
1601 | uint32_t waitSemaphoreCount;
1602 | const VkSemaphore* pWaitSemaphores;
1603 | const VkPipelineStageFlags* pWaitDstStageMask;
1604 | uint32_t commandBufferCount;
1605 | const VkCommandBuffer* pCommandBuffers;
1606 | uint32_t signalSemaphoreCount;
1607 | const VkSemaphore* pSignalSemaphores;
1608 | } VkSubmitInfo;
1609 |
1610 | typedef struct VkSpecializationMapEntry {
1611 | uint32_t constantID;
1612 | uint32_t offset;
1613 | size_t size;
1614 | } VkSpecializationMapEntry;
1615 |
1616 | typedef struct VkSpecializationInfo {
1617 | uint32_t mapEntryCount;
1618 | const VkSpecializationMapEntry* pMapEntries;
1619 | size_t dataSize;
1620 | const void* pData;
1621 | } VkSpecializationInfo;
1622 |
1623 | typedef struct VkPipelineShaderStageCreateInfo {
1624 | VkStructureType sType;
1625 | const void* pNext;
1626 | VkPipelineShaderStageCreateFlags flags;
1627 | VkShaderStageFlagBits stage;
1628 | VkShaderModule module;
1629 | const char* pName;
1630 | const VkSpecializationInfo* pSpecializationInfo;
1631 | } VkPipelineShaderStageCreateInfo;
1632 |
1633 | typedef struct VkVertexInputBindingDescription {
1634 | uint32_t binding;
1635 | uint32_t stride;
1636 | VkVertexInputRate inputRate;
1637 | } VkVertexInputBindingDescription;
1638 |
1639 | typedef struct VkVertexInputAttributeDescription {
1640 | uint32_t location;
1641 | uint32_t binding;
1642 | VkFormat format;
1643 | uint32_t offset;
1644 | } VkVertexInputAttributeDescription;
1645 |
1646 | typedef struct VkPipelineVertexInputStateCreateInfo {
1647 | VkStructureType sType;
1648 | const void* pNext;
1649 | VkPipelineVertexInputStateCreateFlags flags;
1650 | uint32_t vertexBindingDescriptionCount;
1651 | const VkVertexInputBindingDescription* pVertexBindingDescriptions;
1652 | uint32_t vertexAttributeDescriptionCount;
1653 | const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
1654 | } VkPipelineVertexInputStateCreateInfo;
1655 |
1656 | typedef struct VkPipelineInputAssemblyStateCreateInfo {
1657 | VkStructureType sType;
1658 | const void* pNext;
1659 | VkPipelineInputAssemblyStateCreateFlags flags;
1660 | VkPrimitiveTopology topology;
1661 | VkBool32 primitiveRestartEnable;
1662 | } VkPipelineInputAssemblyStateCreateInfo;
1663 |
1664 | typedef struct VkPipelineTessellationStateCreateInfo {
1665 | VkStructureType sType;
1666 | const void* pNext;
1667 | VkPipelineTessellationStateCreateFlags flags;
1668 | uint32_t patchControlPoints;
1669 | } VkPipelineTessellationStateCreateInfo;
1670 |
1671 | typedef struct VkViewport {
1672 | float x;
1673 | float y;
1674 | float width;
1675 | float height;
1676 | float minDepth;
1677 | float maxDepth;
1678 | } VkViewport;
1679 |
1680 | typedef struct VkPipelineViewportStateCreateInfo {
1681 | VkStructureType sType;
1682 | const void* pNext;
1683 | VkPipelineViewportStateCreateFlags flags;
1684 | uint32_t viewportCount;
1685 | const VkViewport* pViewports;
1686 | uint32_t scissorCount;
1687 | const VkRect2D* pScissors;
1688 | } VkPipelineViewportStateCreateInfo;
1689 |
1690 | typedef struct VkPipelineRasterizationStateCreateInfo {
1691 | VkStructureType sType;
1692 | const void* pNext;
1693 | VkPipelineRasterizationStateCreateFlags flags;
1694 | VkBool32 depthClampEnable;
1695 | VkBool32 rasterizerDiscardEnable;
1696 | VkPolygonMode polygonMode;
1697 | VkCullModeFlags cullMode;
1698 | VkFrontFace frontFace;
1699 | VkBool32 depthBiasEnable;
1700 | float depthBiasConstantFactor;
1701 | float depthBiasClamp;
1702 | float depthBiasSlopeFactor;
1703 | float lineWidth;
1704 | } VkPipelineRasterizationStateCreateInfo;
1705 |
1706 | typedef struct VkPipelineMultisampleStateCreateInfo {
1707 | VkStructureType sType;
1708 | const void* pNext;
1709 | VkPipelineMultisampleStateCreateFlags flags;
1710 | VkSampleCountFlagBits rasterizationSamples;
1711 | VkBool32 sampleShadingEnable;
1712 | float minSampleShading;
1713 | const VkSampleMask* pSampleMask;
1714 | VkBool32 alphaToCoverageEnable;
1715 | VkBool32 alphaToOneEnable;
1716 | } VkPipelineMultisampleStateCreateInfo;
1717 |
1718 | typedef struct VkStencilOpState {
1719 | VkStencilOp failOp;
1720 | VkStencilOp passOp;
1721 | VkStencilOp depthFailOp;
1722 | VkCompareOp compareOp;
1723 | uint32_t compareMask;
1724 | uint32_t writeMask;
1725 | uint32_t reference;
1726 | } VkStencilOpState;
1727 |
1728 | typedef struct VkPipelineDepthStencilStateCreateInfo {
1729 | VkStructureType sType;
1730 | const void* pNext;
1731 | VkPipelineDepthStencilStateCreateFlags flags;
1732 | VkBool32 depthTestEnable;
1733 | VkBool32 depthWriteEnable;
1734 | VkCompareOp depthCompareOp;
1735 | VkBool32 depthBoundsTestEnable;
1736 | VkBool32 stencilTestEnable;
1737 | VkStencilOpState front;
1738 | VkStencilOpState back;
1739 | float minDepthBounds;
1740 | float maxDepthBounds;
1741 | } VkPipelineDepthStencilStateCreateInfo;
1742 |
1743 | typedef struct VkPipelineColorBlendAttachmentState {
1744 | VkBool32 blendEnable;
1745 | VkBlendFactor srcColorBlendFactor;
1746 | VkBlendFactor dstColorBlendFactor;
1747 | VkBlendOp colorBlendOp;
1748 | VkBlendFactor srcAlphaBlendFactor;
1749 | VkBlendFactor dstAlphaBlendFactor;
1750 | VkBlendOp alphaBlendOp;
1751 | VkColorComponentFlags colorWriteMask;
1752 | } VkPipelineColorBlendAttachmentState;
1753 |
1754 | typedef struct VkPipelineColorBlendStateCreateInfo {
1755 | VkStructureType sType;
1756 | const void* pNext;
1757 | VkPipelineColorBlendStateCreateFlags flags;
1758 | VkBool32 logicOpEnable;
1759 | VkLogicOp logicOp;
1760 | uint32_t attachmentCount;
1761 | const VkPipelineColorBlendAttachmentState* pAttachments;
1762 | float blendConstants[4];
1763 | } VkPipelineColorBlendStateCreateInfo;
1764 |
1765 | typedef struct VkPipelineDynamicStateCreateInfo {
1766 | VkStructureType sType;
1767 | const void* pNext;
1768 | VkPipelineDynamicStateCreateFlags flags;
1769 | uint32_t dynamicStateCount;
1770 | const VkDynamicState* pDynamicStates;
1771 | } VkPipelineDynamicStateCreateInfo;
1772 |
1773 | typedef struct VkGraphicsPipelineCreateInfo {
1774 | VkStructureType sType;
1775 | const void* pNext;
1776 | VkPipelineCreateFlags flags;
1777 | uint32_t stageCount;
1778 | const VkPipelineShaderStageCreateInfo* pStages;
1779 | const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
1780 | const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
1781 | const VkPipelineTessellationStateCreateInfo* pTessellationState;
1782 | const VkPipelineViewportStateCreateInfo* pViewportState;
1783 | const VkPipelineRasterizationStateCreateInfo* pRasterizationState;
1784 | const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
1785 | const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
1786 | const VkPipelineColorBlendStateCreateInfo* pColorBlendState;
1787 | const VkPipelineDynamicStateCreateInfo* pDynamicState;
1788 | VkPipelineLayout layout;
1789 | VkRenderPass renderPass;
1790 | uint32_t subpass;
1791 | VkPipeline basePipelineHandle;
1792 | int32_t basePipelineIndex;
1793 | } VkGraphicsPipelineCreateInfo;
1794 |
1795 | typedef struct VkImageSubresourceRange {
1796 | VkImageAspectFlags aspectMask;
1797 | uint32_t baseMipLevel;
1798 | uint32_t levelCount;
1799 | uint32_t baseArrayLayer;
1800 | uint32_t layerCount;
1801 | } VkImageSubresourceRange;
1802 |
1803 | typedef struct VkComponentMapping {
1804 | VkComponentSwizzle r;
1805 | VkComponentSwizzle g;
1806 | VkComponentSwizzle b;
1807 | VkComponentSwizzle a;
1808 | } VkComponentMapping;
1809 |
1810 | typedef struct VkImageViewCreateInfo {
1811 | VkStructureType sType;
1812 | const void* pNext;
1813 | VkImageViewCreateFlags flags;
1814 | VkImage image;
1815 | VkImageViewType viewType;
1816 | VkFormat format;
1817 | VkComponentMapping components;
1818 | VkImageSubresourceRange subresourceRange;
1819 | } VkImageViewCreateInfo;
1820 |
1821 | typedef struct VkShaderModuleCreateInfo {
1822 | VkStructureType sType;
1823 | const void* pNext;
1824 | VkShaderModuleCreateFlags flags;
1825 | size_t codeSize;
1826 | const uint32_t* pCode;
1827 | } VkShaderModuleCreateInfo;
1828 |
1829 | typedef struct VkPushConstantRange {
1830 | VkShaderStageFlags stageFlags;
1831 | uint32_t offset;
1832 | uint32_t size;
1833 | } VkPushConstantRange;
1834 |
1835 | typedef struct VkPipelineLayoutCreateInfo {
1836 | VkStructureType sType;
1837 | const void* pNext;
1838 | VkPipelineLayoutCreateFlags flags;
1839 | uint32_t setLayoutCount;
1840 | const VkDescriptorSetLayout* pSetLayouts;
1841 | uint32_t pushConstantRangeCount;
1842 | const VkPushConstantRange* pPushConstantRanges;
1843 | } VkPipelineLayoutCreateInfo;
1844 |
1845 | typedef struct VkAttachmentReference {
1846 | uint32_t attachment;
1847 | VkImageLayout layout;
1848 | } VkAttachmentReference;
1849 |
1850 | typedef union VkClearColorValue {
1851 | float float32[4];
1852 | int32_t int32[4];
1853 | uint32_t uint32[4];
1854 | } VkClearColorValue;
1855 |
1856 | typedef struct VkClearDepthStencilValue {
1857 | float depth;
1858 | uint32_t stencil;
1859 | } VkClearDepthStencilValue;
1860 |
1861 | typedef union VkClearValue {
1862 | VkClearColorValue color;
1863 | VkClearDepthStencilValue depthStencil;
1864 | } VkClearValue;
1865 |
1866 | typedef struct VkSubpassDescription {
1867 | VkSubpassDescriptionFlags flags;
1868 | VkPipelineBindPoint pipelineBindPoint;
1869 | uint32_t inputAttachmentCount;
1870 | const VkAttachmentReference* pInputAttachments;
1871 | uint32_t colorAttachmentCount;
1872 | const VkAttachmentReference* pColorAttachments;
1873 | const VkAttachmentReference* pResolveAttachments;
1874 | const VkAttachmentReference* pDepthStencilAttachment;
1875 | uint32_t preserveAttachmentCount;
1876 | const uint32_t* pPreserveAttachments;
1877 | } VkSubpassDescription;
1878 |
1879 | typedef struct VkAttachmentDescription {
1880 | VkAttachmentDescriptionFlags flags;
1881 | VkFormat format;
1882 | VkSampleCountFlagBits samples;
1883 | VkAttachmentLoadOp loadOp;
1884 | VkAttachmentStoreOp storeOp;
1885 | VkAttachmentLoadOp stencilLoadOp;
1886 | VkAttachmentStoreOp stencilStoreOp;
1887 | VkImageLayout initialLayout;
1888 | VkImageLayout finalLayout;
1889 | } VkAttachmentDescription;
1890 |
1891 | typedef struct VkSubpassDependency {
1892 | uint32_t srcSubpass;
1893 | uint32_t dstSubpass;
1894 | VkPipelineStageFlags srcStageMask;
1895 | VkPipelineStageFlags dstStageMask;
1896 | VkAccessFlags srcAccessMask;
1897 | VkAccessFlags dstAccessMask;
1898 | VkDependencyFlags dependencyFlags;
1899 | } VkSubpassDependency;
1900 |
1901 | typedef struct VkRenderPassCreateInfo {
1902 | VkStructureType sType;
1903 | const void* pNext;
1904 | VkRenderPassCreateFlags flags;
1905 | uint32_t attachmentCount;
1906 | const VkAttachmentDescription* pAttachments;
1907 | uint32_t subpassCount;
1908 | const VkSubpassDescription* pSubpasses;
1909 | uint32_t dependencyCount;
1910 | const VkSubpassDependency* pDependencies;
1911 | } VkRenderPassCreateInfo;
1912 |
1913 | typedef struct VkRenderPassBeginInfo {
1914 | VkStructureType sType;
1915 | const void* pNext;
1916 | VkRenderPass renderPass;
1917 | VkFramebuffer framebuffer;
1918 | VkRect2D renderArea;
1919 | uint32_t clearValueCount;
1920 | const VkClearValue* pClearValues;
1921 | } VkRenderPassBeginInfo;
1922 |
1923 | typedef struct VkFramebufferCreateInfo {
1924 | VkStructureType sType;
1925 | const void* pNext;
1926 | VkFramebufferCreateFlags flags;
1927 | VkRenderPass renderPass;
1928 | uint32_t attachmentCount;
1929 | const VkImageView* pAttachments;
1930 | uint32_t width;
1931 | uint32_t height;
1932 | uint32_t layers;
1933 | } VkFramebufferCreateInfo;
1934 |
1935 | typedef struct VkClearRect {
1936 | VkRect2D rect;
1937 | uint32_t baseArrayLayer;
1938 | uint32_t layerCount;
1939 | } VkClearRect;
1940 |
1941 | typedef struct VkClearAttachment {
1942 | VkImageAspectFlags aspectMask;
1943 | uint32_t colorAttachment;
1944 | VkClearValue clearValue;
1945 | } VkClearAttachment;
1946 |
1947 | typedef struct VkDrawIndirectCommand {
1948 | uint32_t vertexCount;
1949 | uint32_t instanceCount;
1950 | uint32_t firstVertex;
1951 | uint32_t firstInstance;
1952 | } VkDrawIndirectCommand;
1953 |
1954 | typedef struct VkDrawIndexedIndirectCommand {
1955 | uint32_t indexCount;
1956 | uint32_t instanceCount;
1957 | uint32_t firstIndex;
1958 | int32_t vertexOffset;
1959 | uint32_t firstInstance;
1960 | } VkDrawIndexedIndirectCommand;
1961 |
1962 | typedef struct VkSurfaceFormatKHR {
1963 | VkFormat format;
1964 | VkColorSpaceKHR colorSpace;
1965 | } VkSurfaceFormatKHR;
1966 |
1967 | typedef struct VkSurfaceCapabilitiesKHR {
1968 | uint32_t minImageCount;
1969 | uint32_t maxImageCount;
1970 | VkExtent2D currentExtent;
1971 | VkExtent2D minImageExtent;
1972 | VkExtent2D maxImageExtent;
1973 | uint32_t maxImageArrayLayers;
1974 | VkSurfaceTransformFlagsKHR supportedTransforms;
1975 | VkSurfaceTransformFlagBitsKHR currentTransform;
1976 | VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
1977 | VkImageUsageFlags supportedUsageFlags;
1978 | } VkSurfaceCapabilitiesKHR;
1979 |
1980 | typedef struct VkPresentInfoKHR {
1981 | VkStructureType sType;
1982 | const void* pNext;
1983 | uint32_t waitSemaphoreCount;
1984 | const VkSemaphore* pWaitSemaphores;
1985 | uint32_t swapchainCount;
1986 | const VkSwapchainKHR* pSwapchains;
1987 | const uint32_t* pImageIndices;
1988 | VkResult* pResults;
1989 | } VkPresentInfoKHR;
1990 |
1991 | typedef struct VkDeviceGroupSwapchainCreateInfoKHR {
1992 | VkStructureType sType;
1993 | const void* pNext;
1994 | VkDeviceGroupPresentModeFlagsKHR modes;
1995 | } VkDeviceGroupSwapchainCreateInfoKHR;
1996 |
1997 | typedef struct VkSwapchainCreateInfoKHR {
1998 | VkStructureType sType;
1999 | const void* pNext;
2000 | VkSwapchainCreateFlagsKHR flags;
2001 | VkSurfaceKHR surface;
2002 | uint32_t minImageCount;
2003 | VkFormat imageFormat;
2004 | VkColorSpaceKHR imageColorSpace;
2005 | VkExtent2D imageExtent;
2006 | uint32_t imageArrayLayers;
2007 | VkImageUsageFlags imageUsage;
2008 | VkSharingMode imageSharingMode;
2009 | uint32_t queueFamilyIndexCount;
2010 | const uint32_t* pQueueFamilyIndices;
2011 | VkSurfaceTransformFlagBitsKHR preTransform;
2012 | VkCompositeAlphaFlagBitsKHR compositeAlpha;
2013 | VkPresentModeKHR presentMode;
2014 | VkBool32 clipped;
2015 | VkSwapchainKHR oldSwapchain;
2016 | } VkSwapchainCreateInfoKHR;
2017 |
2018 | #ifdef _WIN32
2019 | typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
2020 |
2021 | typedef struct VkWin32SurfaceCreateInfoKHR {
2022 | VkStructureType sType;
2023 | const void* pNext;
2024 | VkWin32SurfaceCreateFlagsKHR flags;
2025 | struct HINSTANCE__* hinstance;
2026 | struct HWND__* hwnd;
2027 | } VkWin32SurfaceCreateInfoKHR;
2028 | #endif //_WIN32
2029 |
2030 | #ifndef NDEBUG
2031 | VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT)
2032 |
2033 | typedef enum VkObjectType {
2034 | VK_OBJECT_TYPE_UNKNOWN = 0,
2035 | VK_OBJECT_TYPE_INSTANCE = 1,
2036 | VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
2037 | VK_OBJECT_TYPE_DEVICE = 3,
2038 | VK_OBJECT_TYPE_QUEUE = 4,
2039 | VK_OBJECT_TYPE_SEMAPHORE = 5,
2040 | VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
2041 | VK_OBJECT_TYPE_FENCE = 7,
2042 | VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
2043 | VK_OBJECT_TYPE_BUFFER = 9,
2044 | VK_OBJECT_TYPE_IMAGE = 10,
2045 | VK_OBJECT_TYPE_EVENT = 11,
2046 | VK_OBJECT_TYPE_QUERY_POOL = 12,
2047 | VK_OBJECT_TYPE_BUFFER_VIEW = 13,
2048 | VK_OBJECT_TYPE_IMAGE_VIEW = 14,
2049 | VK_OBJECT_TYPE_SHADER_MODULE = 15,
2050 | VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
2051 | VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
2052 | VK_OBJECT_TYPE_RENDER_PASS = 18,
2053 | VK_OBJECT_TYPE_PIPELINE = 19,
2054 | VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
2055 | VK_OBJECT_TYPE_SAMPLER = 21,
2056 | VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
2057 | VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
2058 | VK_OBJECT_TYPE_FRAMEBUFFER = 24,
2059 | VK_OBJECT_TYPE_COMMAND_POOL = 25,
2060 | VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
2061 | VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000,
2062 | VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
2063 | VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
2064 | VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
2065 | VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
2066 | VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
2067 | VK_OBJECT_TYPE_OBJECT_TABLE_NVX = 1000086000,
2068 | VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = 1000086001,
2069 | VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000,
2070 | VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000,
2071 | VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
2072 | VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION,
2073 | } VkObjectType;
2074 |
2075 | typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT;
2076 | typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT;
2077 |
2078 | typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT {
2079 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001,
2080 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010,
2081 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100,
2082 | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000,
2083 | } VkDebugUtilsMessageSeverityFlagBitsEXT;
2084 | typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT;
2085 |
2086 | typedef enum VkDebugUtilsMessageTypeFlagBitsEXT {
2087 | VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001,
2088 | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002,
2089 | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004,
2090 | } VkDebugUtilsMessageTypeFlagBitsEXT;
2091 | typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT;
2092 |
2093 | typedef struct VkDebugUtilsLabelEXT {
2094 | VkStructureType sType;
2095 | const void* pNext;
2096 | const char* pLabelName;
2097 | float color[4];
2098 | } VkDebugUtilsLabelEXT;
2099 |
2100 | typedef struct VkDebugUtilsObjectNameInfoEXT {
2101 | VkStructureType sType;
2102 | const void* pNext;
2103 | VkObjectType objectType;
2104 | uint64_t objectHandle;
2105 | const char* pObjectName;
2106 | } VkDebugUtilsObjectNameInfoEXT;
2107 |
2108 | typedef struct VkDebugUtilsObjectTagInfoEXT {
2109 | VkStructureType sType;
2110 | const void* pNext;
2111 | VkObjectType objectType;
2112 | uint64_t objectHandle;
2113 | uint64_t tagName;
2114 | size_t tagSize;
2115 | const void* pTag;
2116 | } VkDebugUtilsObjectTagInfoEXT;
2117 |
2118 | typedef struct VkDebugUtilsMessengerCallbackDataEXT {
2119 | VkStructureType sType;
2120 | const void* pNext;
2121 | VkDebugUtilsMessengerCallbackDataFlagsEXT flags;
2122 | const char* pMessageIdName;
2123 | int32_t messageIdNumber;
2124 | const char* pMessage;
2125 | uint32_t queueLabelCount;
2126 | VkDebugUtilsLabelEXT* pQueueLabels;
2127 | uint32_t cmdBufLabelCount;
2128 | VkDebugUtilsLabelEXT* pCmdBufLabels;
2129 | uint32_t objectCount;
2130 | VkDebugUtilsObjectNameInfoEXT* pObjects;
2131 | } VkDebugUtilsMessengerCallbackDataEXT;
2132 |
2133 | typedef VkBool32(VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)(
2134 | VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
2135 | VkDebugUtilsMessageTypeFlagsEXT messageType,
2136 | const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
2137 | void* pUserData);
2138 |
2139 | typedef struct VkDebugUtilsMessengerCreateInfoEXT {
2140 | VkStructureType sType;
2141 | const void* pNext;
2142 | VkDebugUtilsMessengerCreateFlagsEXT flags;
2143 | VkDebugUtilsMessageSeverityFlagsEXT messageSeverity;
2144 | VkDebugUtilsMessageTypeFlagsEXT messageType;
2145 | PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback;
2146 | void* pUserData;
2147 | } VkDebugUtilsMessengerCreateInfoEXT;
2148 | #endif //NDEBUG
2149 |
2150 | #ifdef __cplusplus
2151 | } // extern "C"
2152 | #endif // __cplusplus
2153 |
--------------------------------------------------------------------------------