├── .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 | --------------------------------------------------------------------------------