Backed out changeset 45fc4a780b2b (bug 1654699) for causing failures regarding AudioStream position.
authorMihai Alexandru Michis <malexandru@mozilla.com>
Thu, 23 Jul 2020 23:13:52 +0300
changeset 541824 3d260235d84cf4fa2becad03ceec0bd6cd09784e
parent 541823 40f693a5defc4d39308d2b8b0bdea6f5de28d094
child 541825 2879ab33ffccb5e681f615877a09084febf3caf6
push id37633
push userccoroiu@mozilla.com
push dateFri, 24 Jul 2020 09:32:06 +0000
treeherdermozilla-central@141543043270 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1654699
milestone80.0a1
backs out45fc4a780b2b4a9e047eceba73b39b988f719c58
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 45fc4a780b2b (bug 1654699) for causing failures regarding AudioStream position. CLOSED TREE
.cargo/config.in
Cargo.lock
gfx/webrender_bindings/Cargo.toml
gfx/wgpu/Cargo.lock
gfx/wgpu/wgpu-core/Cargo.toml
gfx/wr/Cargo.lock
gfx/wr/webrender/Cargo.toml
gfx/wr/webrender_api/Cargo.toml
gfx/wr/wrench/Cargo.toml
security/manager/ssl/osclientcerts/Cargo.toml
third_party/rust/ash/.cargo-checksum.json
third_party/rust/ash/Cargo.toml
third_party/rust/ash/src/device.rs
third_party/rust/ash/src/entry.rs
third_party/rust/ash/src/entry_libloading.rs
third_party/rust/ash/src/extensions/ext/metal_surface.rs
third_party/rust/ash/src/extensions/ext/mod.rs
third_party/rust/ash/src/extensions/khr/draw_indirect_count.rs
third_party/rust/ash/src/extensions/khr/mod.rs
third_party/rust/ash/src/extensions/khr/ray_tracing.rs
third_party/rust/ash/src/extensions/khr/timeline_semaphore.rs
third_party/rust/ash/src/lib.rs
third_party/rust/ash/src/vk.rs
third_party/rust/ash/src/vk/aliases.rs
third_party/rust/ash/src/vk/bitflags.rs
third_party/rust/ash/src/vk/const_debugs.rs
third_party/rust/ash/src/vk/constants.rs
third_party/rust/ash/src/vk/definitions.rs
third_party/rust/ash/src/vk/enums.rs
third_party/rust/ash/src/vk/extensions.rs
third_party/rust/ash/src/vk/feature_extensions.rs
third_party/rust/ash/src/vk/features.rs
third_party/rust/ash/src/vk/macros.rs
third_party/rust/ash/src/vk/platform_types.rs
third_party/rust/authenticator/.cargo-checksum.json
third_party/rust/authenticator/Cargo.lock
third_party/rust/authenticator/Cargo.toml
third_party/rust/authenticator/README.md
third_party/rust/authenticator/src/lib.rs
third_party/rust/authenticator/src/netbsd/device.rs
third_party/rust/authenticator/src/netbsd/fd.rs
third_party/rust/authenticator/src/netbsd/mod.rs
third_party/rust/authenticator/src/netbsd/monitor.rs
third_party/rust/authenticator/src/netbsd/transaction.rs
third_party/rust/authenticator/src/netbsd/uhid.rs
third_party/rust/cocoa-foundation/.cargo-checksum.json
third_party/rust/cocoa-foundation/Cargo.toml
third_party/rust/cocoa-foundation/src/base.rs
third_party/rust/cocoa-foundation/src/foundation.rs
third_party/rust/cocoa-foundation/src/lib.rs
third_party/rust/cocoa-foundation/tests/foundation.rs
third_party/rust/cocoa/.cargo-checksum.json
third_party/rust/cocoa/COPYRIGHT
third_party/rust/cocoa/Cargo.lock
third_party/rust/cocoa/Cargo.toml
third_party/rust/cocoa/LICENSE-APACHE
third_party/rust/cocoa/LICENSE-MIT
third_party/rust/cocoa/README.md
third_party/rust/cocoa/examples/color.rs
third_party/rust/cocoa/examples/fullscreen.rs
third_party/rust/cocoa/examples/hello_world.rs
third_party/rust/cocoa/examples/tab_view.rs
third_party/rust/cocoa/src/appkit.rs
third_party/rust/cocoa/src/base.rs
third_party/rust/cocoa/src/foundation.rs
third_party/rust/cocoa/src/lib.rs
third_party/rust/cocoa/src/macros.rs
third_party/rust/cocoa/src/quartzcore.rs
third_party/rust/cocoa/tests/foundation.rs
third_party/rust/core-foundation-sys/.cargo-checksum.json
third_party/rust/core-foundation-sys/Cargo.toml
third_party/rust/core-foundation-sys/src/attributed_string.rs
third_party/rust/core-foundation-sys/src/base.rs
third_party/rust/core-foundation-sys/src/bundle.rs
third_party/rust/core-foundation-sys/src/set.rs
third_party/rust/core-foundation-sys/src/timezone.rs
third_party/rust/core-foundation/.cargo-checksum.json
third_party/rust/core-foundation/Cargo.toml
third_party/rust/core-foundation/src/attributed_string.rs
third_party/rust/core-foundation/src/base.rs
third_party/rust/core-foundation/src/bundle.rs
third_party/rust/core-foundation/src/lib.rs
third_party/rust/core-foundation/src/propertylist.rs
third_party/rust/core-foundation/src/set.rs
third_party/rust/core-foundation/src/string.rs
third_party/rust/core-foundation/src/timezone.rs
third_party/rust/core-foundation/src/url.rs
third_party/rust/core-graphics-types/.cargo-checksum.json
third_party/rust/core-graphics-types/Cargo.toml
third_party/rust/core-graphics-types/src/base.rs
third_party/rust/core-graphics-types/src/geometry.rs
third_party/rust/core-graphics-types/src/lib.rs
third_party/rust/core-graphics/.cargo-checksum.json
third_party/rust/core-graphics/Cargo.toml
third_party/rust/core-graphics/src/base.rs
third_party/rust/core-graphics/src/context.rs
third_party/rust/core-graphics/src/data_provider.rs
third_party/rust/core-graphics/src/event.rs
third_party/rust/core-graphics/src/font.rs
third_party/rust/core-graphics/src/geometry.rs
third_party/rust/core-graphics/src/gradient.rs
third_party/rust/core-graphics/src/image.rs
third_party/rust/core-graphics/src/lib.rs
third_party/rust/core-graphics/src/sys.rs
third_party/rust/core-text/.cargo-checksum.json
third_party/rust/core-text/Cargo.toml
third_party/rust/core-text/src/font.rs
third_party/rust/core-text/src/font_descriptor.rs
third_party/rust/core-text/src/frame.rs
third_party/rust/core-text/src/framesetter.rs
third_party/rust/core-text/src/line.rs
third_party/rust/core-text/src/run.rs
third_party/rust/coreaudio-sys-utils/.cargo-checksum.json
third_party/rust/coreaudio-sys-utils/Cargo.toml
third_party/rust/cubeb-coreaudio/.cargo-checksum.json
third_party/rust/cubeb-coreaudio/README.md
third_party/rust/cubeb-coreaudio/src/backend/mod.rs
third_party/rust/cubeb-coreaudio/todo.md
third_party/rust/freetype/.cargo-checksum.json
third_party/rust/freetype/Cargo.toml
third_party/rust/freetype/README.md
third_party/rust/freetype/src/lib.rs
third_party/rust/freetype/src/tt_os2.rs
third_party/rust/gfx-backend-metal/.cargo-checksum.json
third_party/rust/gfx-backend-metal/Cargo.toml
third_party/rust/gfx-backend-metal/src/command.rs
third_party/rust/gfx-backend-metal/src/device.rs
third_party/rust/gfx-backend-metal/src/internal.rs
third_party/rust/gfx-backend-metal/src/lib.rs
third_party/rust/gfx-backend-metal/src/native.rs
third_party/rust/gfx-backend-metal/src/window.rs
third_party/rust/gfx-backend-vulkan/.cargo-checksum.json
third_party/rust/gfx-backend-vulkan/Cargo.toml
third_party/rust/gfx-backend-vulkan/src/command.rs
third_party/rust/gfx-backend-vulkan/src/conv.rs
third_party/rust/gfx-backend-vulkan/src/device.rs
third_party/rust/gfx-backend-vulkan/src/lib.rs
third_party/rust/gfx-backend-vulkan/src/window.rs
third_party/rust/gfx-hal/.cargo-checksum.json
third_party/rust/gfx-hal/Cargo.toml
third_party/rust/gfx-hal/src/adapter.rs
third_party/rust/gfx-hal/src/buffer.rs
third_party/rust/gfx-hal/src/command/clear.rs
third_party/rust/gfx-hal/src/command/mod.rs
third_party/rust/gfx-hal/src/command/structs.rs
third_party/rust/gfx-hal/src/device.rs
third_party/rust/gfx-hal/src/format.rs
third_party/rust/gfx-hal/src/image.rs
third_party/rust/gfx-hal/src/lib.rs
third_party/rust/gfx-hal/src/memory.rs
third_party/rust/gfx-hal/src/pass.rs
third_party/rust/gfx-hal/src/pool.rs
third_party/rust/gfx-hal/src/pso/compute.rs
third_party/rust/gfx-hal/src/pso/descriptor.rs
third_party/rust/gfx-hal/src/pso/graphics.rs
third_party/rust/gfx-hal/src/pso/input_assembler.rs
third_party/rust/gfx-hal/src/pso/mod.rs
third_party/rust/gfx-hal/src/pso/output_merger.rs
third_party/rust/gfx-hal/src/pso/specialization.rs
third_party/rust/gfx-hal/src/query.rs
third_party/rust/gfx-hal/src/queue/family.rs
third_party/rust/gfx-hal/src/queue/mod.rs
third_party/rust/gfx-hal/src/window.rs
third_party/rust/libloading-0.5.2/.cargo-checksum.json
third_party/rust/libloading-0.5.2/Cargo.toml
third_party/rust/libloading-0.5.2/LICENSE
third_party/rust/libloading-0.5.2/README.mkd
third_party/rust/libloading-0.5.2/appveyor.yml
third_party/rust/libloading-0.5.2/build.rs
third_party/rust/libloading-0.5.2/src/changelog.rs
third_party/rust/libloading-0.5.2/src/lib.rs
third_party/rust/libloading-0.5.2/src/os/mod.rs
third_party/rust/libloading-0.5.2/src/os/unix/global_static.c
third_party/rust/libloading-0.5.2/src/os/unix/mod.rs
third_party/rust/libloading-0.5.2/src/os/windows/mod.rs
third_party/rust/libloading-0.5.2/src/test_helpers.rs
third_party/rust/libloading-0.5.2/src/util.rs
third_party/rust/libloading-0.5.2/tests/functions.rs
third_party/rust/libloading-0.5.2/tests/markers.rs
third_party/rust/libloading-0.5.2/tests/nagisa32.dll
third_party/rust/libloading-0.5.2/tests/nagisa64.dll
third_party/rust/libloading-0.5.2/tests/windows.rs
third_party/rust/libloading/.cargo-checksum.json
third_party/rust/libloading/Cargo.toml
third_party/rust/libloading/README.mkd
third_party/rust/libloading/appveyor.yml
third_party/rust/libloading/build.rs
third_party/rust/libloading/src/changelog.rs
third_party/rust/libloading/src/error.rs
third_party/rust/libloading/src/lib.rs
third_party/rust/libloading/src/os/unix/global_static.c
third_party/rust/libloading/src/os/unix/mod.rs
third_party/rust/libloading/src/os/windows/mod.rs
third_party/rust/libloading/src/util.rs
third_party/rust/libloading/tests/functions.rs
third_party/rust/metal/.cargo-checksum.json
third_party/rust/metal/Cargo.lock
third_party/rust/metal/Cargo.toml
third_party/rust/metal/Makefile
third_party/rust/metal/README.md
third_party/rust/metal/bors.toml
third_party/rust/metal/examples/circle/README.md
third_party/rust/metal/examples/circle/main.rs
third_party/rust/metal/examples/circle/screenshot.png
third_party/rust/metal/examples/circle/shaders.metal
third_party/rust/metal/examples/circle/shaders.metallib
third_party/rust/metal/examples/compute/main.rs
third_party/rust/metal/examples/headless-render/README.md
third_party/rust/metal/examples/headless-render/main.rs
third_party/rust/metal/examples/headless-render/screenshot.png
third_party/rust/metal/examples/window/README.md
third_party/rust/metal/examples/window/main.rs
third_party/rust/metal/examples/window/screenshot.png
third_party/rust/metal/examples/window/shaders.metal
third_party/rust/metal/examples/window/shaders.metallib
third_party/rust/metal/src/argument.rs
third_party/rust/metal/src/buffer.rs
third_party/rust/metal/src/capturedescriptor.rs
third_party/rust/metal/src/capturemanager.rs
third_party/rust/metal/src/device.rs
third_party/rust/metal/src/encoder.rs
third_party/rust/metal/src/heap.rs
third_party/rust/metal/src/indirect_encoder.rs
third_party/rust/metal/src/lib.rs
third_party/rust/metal/src/library.rs
third_party/rust/metal/src/pipeline/compute.rs
third_party/rust/metal/src/pipeline/mod.rs
third_party/rust/metal/src/pipeline/render.rs
third_party/rust/metal/src/renderpass.rs
third_party/rust/metal/src/resource.rs
third_party/rust/metal/src/sampler.rs
third_party/rust/metal/src/texture.rs
third_party/rust/metal/src/types.rs
third_party/rust/metal/src/vertexdescriptor.rs
toolkit/library/rust/shared/Cargo.toml
--- a/.cargo/config.in
+++ b/.cargo/config.in
@@ -80,17 +80,17 @@ rev = "d510da5999a744c563b0acd18056069d1
 [source."https://github.com/PLSysSec/lucet_sandbox_compiler"]
 git = "https://github.com/PLSysSec/lucet_sandbox_compiler"
 replace-with = "vendored-sources"
 rev = "5e870faf6f95d79d11efc813e56370ad124bbed5"
 
 [source."https://github.com/ChunMinChang/cubeb-coreaudio-rs"]
 git = "https://github.com/ChunMinChang/cubeb-coreaudio-rs"
 replace-with = "vendored-sources"
-rev = "f0c146d6dfafc99c5c38fffa5cdf92aa29a6b6a1"
+rev = "4cdbceadae88c77dfc77183b7edda183f32cd28c"
 
 [source.crates-io]
 replace-with = "vendored-sources"
 
 # Take advantage of the fact that cargo will treat lines starting with #
 # as comments to add preprocessing directives. This file can thus by copied
 # as-is to $topsrcdir/.cargo/config with no preprocessing to be used there
 # (for e.g. independent tasks building rust code), or be preprocessed by
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -59,21 +59,21 @@ checksum = "0d382e583f07208808f6b1249e60
 [[package]]
 name = "arrayvec"
 version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
 
 [[package]]
 name = "ash"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c69a8137596e84c22d57f3da1b5de1d4230b1742a710091c85f4d7ce50f00f38"
-dependencies = [
- "libloading 0.6.2",
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69daec0742947f33a85931fa3cb0ce5f07929159dcbd1f0cbb5b2912e2978509"
+dependencies = [
+ "libloading",
 ]
 
 [[package]]
 name = "atom"
 version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2"
 
@@ -175,19 +175,19 @@ dependencies = [
  "log",
  "once_cell",
  "slab",
  "tokio 0.1.11",
 ]
 
 [[package]]
 name = "authenticator"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27f4b43192679f52f6cfe741f982190e3f677f2176fd444d5af8d48d84390433"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cc4e983ae4499095b965b8c0c57596ae718fe551d2b04aa2c19c777a02e05a4"
 dependencies = [
  "bitflags",
  "boxfnonce",
  "core-foundation",
  "devd-rs",
  "libc",
  "libudev",
  "log",
@@ -569,17 +569,17 @@ dependencies = [
 [[package]]
 name = "clang-sys"
 version = "0.29.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f92986241798376849e1a007827041fed9bb36195822c2049d18e174420e0534"
 dependencies = [
  "glob",
  "libc",
- "libloading 0.5.2",
+ "libloading",
 ]
 
 [[package]]
 name = "clap"
 version = "2.31.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f0f16b89cbb9ee36d87483dc939fe9f1e13c05898d56d7b230a0d4dff033a536"
 dependencies = [
@@ -604,25 +604,25 @@ name = "cmake"
 version = "0.1.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "56d741ea7a69e577f6d06b36b7dff4738f680593dc27a701ffa8506b73ce28bb"
 dependencies = [
  "cc",
 ]
 
 [[package]]
-name = "cocoa-foundation"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+name = "cocoa"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a4736c86d51bd878b474400d9ec888156f4037015f5d09794fab9f26eab1ad4"
 dependencies = [
  "bitflags",
  "block",
  "core-foundation",
- "core-graphics-types",
+ "core-graphics",
  "foreign-types",
  "libc",
  "objc",
 ]
 
 [[package]]
 name = "comedy"
 version = "0.1.0"
@@ -652,60 +652,47 @@ dependencies = [
 [[package]]
 name = "copyless"
 version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6ff9c56c9fb2a49c05ef0e431485a22400af20d33226dc0764d891d09e724127"
 
 [[package]]
 name = "core-foundation"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b5ed8e7e76c45974e15e41bfa8d5b0483cd90191639e01d8f5f1e606299d3fb"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
 dependencies = [
  "core-foundation-sys",
  "libc",
 ]
 
 [[package]]
 name = "core-foundation-sys"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a21fa21941700a3cd8fcb4091f361a6a712fac632f85d9f487cc892045d55c6"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
 
 [[package]]
 name = "core-graphics"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6082396a349fa49674ba1bda4077332a18bf150e8fa75745ece07085e29a113"
-dependencies = [
- "bitflags",
- "core-foundation",
- "core-graphics-types",
- "foreign-types",
- "libc",
-]
-
-[[package]]
-name = "core-graphics-types"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e92f5d519093a4178296707dbaa3880eae85a5ef5386675f361a1cf25376e93c"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59e78b2e0aaf43f08e7ae0d6bc96895ef72ff0921c7d4ff4762201b2dba376dd"
 dependencies = [
  "bitflags",
  "core-foundation",
  "foreign-types",
  "libc",
 ]
 
 [[package]]
 name = "core-text"
-version = "19.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04dfae50af11e72657fe7174cddb1ecddc5398037f7f6f39533ad69207c9a4e2"
+version = "15.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "131b3fd1f8bd5db9f2b398fa4fdb6008c64afc04d447c306ac2c7e98fba2a61d"
 dependencies = [
  "core-foundation",
  "core-graphics",
  "foreign-types",
  "libc",
 ]
 
 [[package]]
@@ -715,17 +702,17 @@ source = "registry+https://github.com/ru
 checksum = "e81f1c165c33ffab90a03077ac3b03462b34d5947145dfa48102e063d581502c"
 dependencies = [
  "bindgen",
 ]
 
 [[package]]
 name = "coreaudio-sys-utils"
 version = "0.1.0"
-source = "git+https://github.com/ChunMinChang/cubeb-coreaudio-rs?rev=f0c146d6dfafc99c5c38fffa5cdf92aa29a6b6a1#f0c146d6dfafc99c5c38fffa5cdf92aa29a6b6a1"
+source = "git+https://github.com/ChunMinChang/cubeb-coreaudio-rs?rev=4cdbceadae88c77dfc77183b7edda183f32cd28c#4cdbceadae88c77dfc77183b7edda183f32cd28c"
 dependencies = [
  "core-foundation-sys",
  "coreaudio-sys",
 ]
 
 [[package]]
 name = "cose"
 version = "0.1.4"
@@ -953,17 +940,17 @@ checksum = "f7c55529b8f47926e4242e1fc01d
 dependencies = [
  "bitflags",
  "cubeb-sys",
 ]
 
 [[package]]
 name = "cubeb-coreaudio"
 version = "0.1.0"
-source = "git+https://github.com/ChunMinChang/cubeb-coreaudio-rs?rev=f0c146d6dfafc99c5c38fffa5cdf92aa29a6b6a1#f0c146d6dfafc99c5c38fffa5cdf92aa29a6b6a1"
+source = "git+https://github.com/ChunMinChang/cubeb-coreaudio-rs?rev=4cdbceadae88c77dfc77183b7edda183f32cd28c#4cdbceadae88c77dfc77183b7edda183f32cd28c"
 dependencies = [
  "atomic",
  "audio-mixer",
  "bitflags",
  "coreaudio-sys-utils",
  "cubeb-backend",
  "float-cmp",
  "lazy_static",
@@ -996,17 +983,17 @@ dependencies = [
 
 [[package]]
 name = "d3d12"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bc7ed48e89905e5e146bcc1951cc3facb9e44aea9adf5dc01078cda1bd24b662"
 dependencies = [
  "bitflags",
- "libloading 0.5.2",
+ "libloading",
  "winapi 0.3.7",
 ]
 
 [[package]]
 name = "darling"
 version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3fe629a532efad5526454efb0700f86d5ad7ff001acb37e431c8bf017a432a8e"
@@ -1495,19 +1482,19 @@ dependencies = [
 [[package]]
 name = "foreign-types"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5ebc04f19019fff1f2d627b5581574ead502f80c48c88900575a46e0840fe5d0"
 
 [[package]]
 name = "freetype"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b659e75b7a7338fe75afd7f909fc2b71937845cffb6ebe54ba2e50f13d8e903d"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "fuchsia-cprng"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1742,17 +1729,17 @@ dependencies = [
 name = "gfx-backend-dx11"
 version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "92de0ddc0fde1a89b2a0e92dcc6bbb554bd34af0135e53a28d5ef064611094a4"
 dependencies = [
  "bitflags",
  "gfx-auxil",
  "gfx-hal",
- "libloading 0.5.2",
+ "libloading",
  "log",
  "parking_lot",
  "range-alloc",
  "raw-window-handle",
  "smallvec",
  "spirv_cross",
  "winapi 0.3.7",
  "wio",
@@ -1783,25 +1770,26 @@ source = "registry+https://github.com/ru
 checksum = "b67bd2d7bc022b257ddbdabc5fa3b10c29c292372c3409f2b6a6e3f4e11cdb85"
 dependencies = [
  "gfx-hal",
  "raw-window-handle",
 ]
 
 [[package]]
 name = "gfx-backend-metal"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92804d20b194de6c84cb4bec14ec6a6dcae9c51f0a9186817fb412a590131ae6"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "205f3ca8e74ed814ea2c0206d47d8925077673cab2e21f9b12d48ff781cf87ee"
 dependencies = [
  "arrayvec",
  "bitflags",
  "block",
- "cocoa-foundation",
+ "cocoa",
  "copyless",
+ "core-graphics",
  "foreign-types",
  "gfx-auxil",
  "gfx-hal",
  "lazy_static",
  "log",
  "metal",
  "objc",
  "parking_lot",
@@ -1809,24 +1797,24 @@ dependencies = [
  "raw-window-handle",
  "smallvec",
  "spirv_cross",
  "storage-map",
 ]
 
 [[package]]
 name = "gfx-backend-vulkan"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aec9c919cfc236d2c36aaa38609c1906a92f2df99a3c7f53022b01936f98275a"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ff36feae801fa23d29acd74082603a0145a697a23595757dd4e78828ab33da"
 dependencies = [
  "arrayvec",
  "ash",
  "byteorder",
- "core-graphics-types",
+ "core-graphics",
  "gfx-hal",
  "lazy_static",
  "log",
  "objc",
  "raw-window-handle",
  "smallvec",
  "winapi 0.3.7",
  "x11",
@@ -1840,19 +1828,19 @@ checksum = "1bf35f5d66d1bc56e63e68d75284
 dependencies = [
  "fxhash",
  "gfx-hal",
  "log",
 ]
 
 [[package]]
 name = "gfx-hal"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a18534b23d4c262916231511309bc1f307c74cda8dcb68b93a10ca213a22814b"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc96180204064c9493e0fe4a9efeb721e0ac59fe8e1906d0c659142a93114fb1"
 dependencies = [
  "bitflags",
  "raw-window-handle",
 ]
 
 [[package]]
 name = "gfx-memory"
 version = "0.1.3"
@@ -2560,25 +2548,16 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
 dependencies = [
  "cc",
  "winapi 0.3.7",
 ]
 
 [[package]]
-name = "libloading"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cadb8e769f070c45df05c78c7520eb4cd17061d4ab262e43cfc68b4d00ac71c"
-dependencies = [
- "winapi 0.3.7",
-]
-
-[[package]]
 name = "libsqlite3-sys"
 version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1e704a02bcaecd4a08b93a23f6be59d0bd79cd161e0963e9499165a0a35df7bd"
 dependencies = [
  "cc",
  "pkg-config",
  "vcpkg",
@@ -2716,17 +2695,17 @@ dependencies = [
  "bincode",
  "bitflags",
  "byteorder",
  "cc",
  "failure",
  "getrandom",
  "lazy_static",
  "libc",
- "libloading 0.5.2",
+ "libloading",
  "lucet-module",
  "memoffset",
  "nix",
  "num-derive",
  "num-traits",
  "raw-cpuid",
  "xfailure",
 ]
@@ -2849,23 +2828,24 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f"
 dependencies = [
  "rustc_version",
 ]
 
 [[package]]
 name = "metal"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c4e8a431536529327e28c9ba6992f2cb0c15d4222f0602a16e6d7695ff3bccf"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e198a0ee42bdbe9ef2c09d0b9426f3b2b47d90d93a4a9b0395c4cea605e92dc0"
 dependencies = [
  "bitflags",
  "block",
- "cocoa-foundation",
+ "cocoa",
+ "core-graphics",
  "foreign-types",
  "log",
  "objc",
 ]
 
 [[package]]
 name = "mime"
 version = "0.3.16"
@@ -3434,17 +3414,17 @@ dependencies = [
 [[package]]
 name = "osclientcerts-static"
 version = "0.1.4"
 dependencies = [
  "byteorder",
  "core-foundation",
  "env_logger",
  "lazy_static",
- "libloading 0.5.2",
+ "libloading",
  "log",
  "pkcs11",
  "rental",
  "sha2",
  "winapi 0.3.7",
 ]
 
 [[package]]
@@ -3656,17 +3636,17 @@ source = "registry+https://github.com/ru
 checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
 
 [[package]]
 name = "pkcs11"
 version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c20593a99fe08068cbe2b59001527f36021d6ad53ac5f2d8793fcf2fe94015a0"
 dependencies = [
- "libloading 0.5.2",
+ "libloading",
  "num-bigint",
 ]
 
 [[package]]
 name = "pkg-config"
 version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"
--- a/gfx/webrender_bindings/Cargo.toml
+++ b/gfx/webrender_bindings/Cargo.toml
@@ -29,12 +29,12 @@ version = "0.61.0"
 default-features = false
 features = ["capture", "serialize_program"]
 
 [target.'cfg(target_os = "windows")'.dependencies]
 dwrote = "0.11"
 winapi = "0.3"
 
 [target.'cfg(target_os = "macos")'.dependencies]
-core-foundation = "0.9"
-core-graphics = "0.22"
+core-foundation = "0.7"
+core-graphics = "0.19"
 foreign-types = "0.3.0"
 
--- a/gfx/wgpu/Cargo.lock
+++ b/gfx/wgpu/Cargo.lock
@@ -41,21 +41,21 @@ dependencies = [
 [[package]]
 name = "arrayvec"
 version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
 
 [[package]]
 name = "ash"
-version = "0.31.0"
+version = "0.30.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c69a8137596e84c22d57f3da1b5de1d4230b1742a710091c85f4d7ce50f00f38"
+checksum = "69daec0742947f33a85931fa3cb0ce5f07929159dcbd1f0cbb5b2912e2978509"
 dependencies = [
- "libloading 0.6.1",
+ "libloading 0.5.2",
 ]
 
 [[package]]
 name = "atom"
 version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2"
 
@@ -162,32 +162,32 @@ dependencies = [
 name = "cocoa"
 version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f29f7768b2d1be17b96158e3285951d366b40211320fb30826a76cb7a0da6400"
 dependencies = [
  "bitflags",
  "block",
  "core-foundation 0.6.4",
- "core-graphics",
+ "core-graphics 0.17.3",
  "foreign-types",
  "libc",
  "objc",
 ]
 
 [[package]]
-name = "cocoa-foundation"
-version = "0.1.0"
+name = "cocoa"
+version = "0.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+checksum = "0a4736c86d51bd878b474400d9ec888156f4037015f5d09794fab9f26eab1ad4"
 dependencies = [
  "bitflags",
  "block",
- "core-foundation 0.9.0",
- "core-graphics-types",
+ "core-foundation 0.7.0",
+ "core-graphics 0.19.0",
  "foreign-types",
  "libc",
  "objc",
 ]
 
 [[package]]
 name = "copyless"
 version = "0.1.4"
@@ -201,69 +201,69 @@ source = "registry+https://github.com/ru
 checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
 dependencies = [
  "core-foundation-sys 0.6.2",
  "libc",
 ]
 
 [[package]]
 name = "core-foundation"
-version = "0.9.0"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b5ed8e7e76c45974e15e41bfa8d5b0483cd90191639e01d8f5f1e606299d3fb"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
 dependencies = [
- "core-foundation-sys 0.8.0",
+ "core-foundation-sys 0.7.0",
  "libc",
 ]
 
 [[package]]
 name = "core-foundation-sys"
 version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
 
 [[package]]
 name = "core-foundation-sys"
-version = "0.8.0"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a21fa21941700a3cd8fcb4091f361a6a712fac632f85d9f487cc892045d55c6"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
 
 [[package]]
 name = "core-graphics"
 version = "0.17.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9"
 dependencies = [
  "bitflags",
  "core-foundation 0.6.4",
  "foreign-types",
  "libc",
 ]
 
 [[package]]
-name = "core-graphics-types"
-version = "0.1.0"
+name = "core-graphics"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e92f5d519093a4178296707dbaa3880eae85a5ef5386675f361a1cf25376e93c"
+checksum = "59e78b2e0aaf43f08e7ae0d6bc96895ef72ff0921c7d4ff4762201b2dba376dd"
 dependencies = [
  "bitflags",
- "core-foundation 0.9.0",
+ "core-foundation 0.7.0",
  "foreign-types",
  "libc",
 ]
 
 [[package]]
 name = "core-video-sys"
 version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8dc065219542086f72d1e9f7aadbbab0989e980263695d129d502082d063a9d0"
 dependencies = [
  "cfg-if",
  "core-foundation-sys 0.6.2",
- "core-graphics",
+ "core-graphics 0.17.3",
  "libc",
  "objc",
 ]
 
 [[package]]
 name = "d3d12"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -373,114 +373,104 @@ dependencies = [
 [[package]]
 name = "gfx-auxil"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3b46e6f0031330a0be08d17820f2dcaaa91cb36710a97a9500cb4f1c36e785c8"
 dependencies = [
  "fxhash",
  "gfx-hal",
- "spirv_cross 0.18.0",
-]
-
-[[package]]
-name = "gfx-auxil"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67bdbf8e8d6883c70e5a0d7379ad8ab3ac95127a3761306b36122d8f1c177a8e"
-dependencies = [
- "fxhash",
- "gfx-hal",
- "spirv_cross 0.20.0",
+ "spirv_cross",
 ]
 
 [[package]]
 name = "gfx-backend-dx11"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b148219292624126f78245e50a9720d95ea149a415ce8ce73ab7014205301b88"
 dependencies = [
  "bitflags",
- "gfx-auxil 0.3.0",
+ "gfx-auxil",
  "gfx-hal",
  "libloading 0.5.2",
  "log",
  "parking_lot",
  "range-alloc",
  "raw-window-handle",
  "smallvec",
- "spirv_cross 0.18.0",
+ "spirv_cross",
  "winapi 0.3.8",
  "wio",
 ]
 
 [[package]]
 name = "gfx-backend-dx12"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a0e526746379e974501551b08958947e67a81b5ea8cdc717a000cdd72577da05"
 dependencies = [
  "bitflags",
  "d3d12",
- "gfx-auxil 0.3.0",
+ "gfx-auxil",
  "gfx-hal",
  "log",
  "range-alloc",
  "raw-window-handle",
  "smallvec",
- "spirv_cross 0.18.0",
+ "spirv_cross",
  "winapi 0.3.8",
 ]
 
 [[package]]
 name = "gfx-backend-empty"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b67bd2d7bc022b257ddbdabc5fa3b10c29c292372c3409f2b6a6e3f4e11cdb85"
 dependencies = [
  "gfx-hal",
  "raw-window-handle",
 ]
 
 [[package]]
 name = "gfx-backend-metal"
-version = "0.5.6"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92804d20b194de6c84cb4bec14ec6a6dcae9c51f0a9186817fb412a590131ae6"
+checksum = "cfe128c29675b5afc8acdda1dfe096d6abd5e3528059ab0b98bda8215d8beed9"
 dependencies = [
  "arrayvec",
  "bitflags",
  "block",
- "cocoa-foundation",
+ "cocoa 0.20.0",
  "copyless",
+ "core-graphics 0.19.0",
  "foreign-types",
- "gfx-auxil 0.4.0",
+ "gfx-auxil",
  "gfx-hal",
  "lazy_static",
  "log",
  "metal",
  "objc",
  "parking_lot",
  "range-alloc",
  "raw-window-handle",
  "smallvec",
- "spirv_cross 0.20.0",
+ "spirv_cross",
  "storage-map",
 ]
 
 [[package]]
 name = "gfx-backend-vulkan"
-version = "0.5.11"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aec9c919cfc236d2c36aaa38609c1906a92f2df99a3c7f53022b01936f98275a"
+checksum = "45ff36feae801fa23d29acd74082603a0145a697a23595757dd4e78828ab33da"
 dependencies = [
  "arrayvec",
  "ash",
  "byteorder",
- "core-graphics-types",
+ "core-graphics 0.19.0",
  "gfx-hal",
  "lazy_static",
  "log",
  "objc",
  "raw-window-handle",
  "smallvec",
  "winapi 0.3.8",
  "x11",
@@ -494,19 +484,19 @@ checksum = "1bf35f5d66d1bc56e63e68d75284
 dependencies = [
  "fxhash",
  "gfx-hal",
  "log",
 ]
 
 [[package]]
 name = "gfx-hal"
-version = "0.5.3"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a18534b23d4c262916231511309bc1f307c74cda8dcb68b93a10ca213a22814b"
+checksum = "bc96180204064c9493e0fe4a9efeb721e0ac59fe8e1906d0c659142a93114fb1"
 dependencies = [
  "bitflags",
  "raw-window-handle",
 ]
 
 [[package]]
 name = "gfx-memory"
 version = "0.1.3"
@@ -693,23 +683,24 @@ source = "registry+https://github.com/ru
 checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
 dependencies = [
  "libc",
  "winapi 0.3.8",
 ]
 
 [[package]]
 name = "metal"
-version = "0.20.0"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c4e8a431536529327e28c9ba6992f2cb0c15d4222f0602a16e6d7695ff3bccf"
+checksum = "e198a0ee42bdbe9ef2c09d0b9426f3b2b47d90d93a4a9b0395c4cea605e92dc0"
 dependencies = [
  "bitflags",
  "block",
- "cocoa-foundation",
+ "cocoa 0.20.0",
+ "core-graphics 0.19.0",
  "foreign-types",
  "log",
  "objc",
 ]
 
 [[package]]
 name = "mio"
 version = "0.6.21"
@@ -1150,27 +1141,16 @@ source = "registry+https://github.com/ru
 checksum = "946216f8793f7199e3ea5b995ee8dc20a0ace1fcf46293a0ef4c17e1d046dbde"
 dependencies = [
  "cc",
  "js-sys",
  "wasm-bindgen",
 ]
 
 [[package]]
-name = "spirv_cross"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33a9478e9c78782dd694d05dee074703a9c4c74b511de742b88a7e8149f1b37"
-dependencies = [
- "cc",
- "js-sys",
- "wasm-bindgen",
-]
-
-[[package]]
 name = "spirv_headers"
 version = "1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3f1418983d16481227ffa3ab3cf44ef92eebc9a76c092fbcd4c51a64ff032622"
 dependencies = [
  "bitflags",
  "num-traits",
 ]
@@ -1485,19 +1465,19 @@ checksum = "712e227841d057c1ee1cd2fb22fa
 [[package]]
 name = "winit"
 version = "0.22.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fc53342d3d1a3d57f3949e0692d93d5a8adb7814d8683cef4a09c2b550e94246"
 dependencies = [
  "android_glue",
  "bitflags",
- "cocoa",
+ "cocoa 0.19.1",
  "core-foundation 0.6.4",
- "core-graphics",
+ "core-graphics 0.17.3",
  "core-video-sys",
  "dispatch",
  "instant",
  "lazy_static",
  "libc",
  "log",
  "mio",
  "mio-extras",
--- a/gfx/wgpu/wgpu-core/Cargo.toml
+++ b/gfx/wgpu/wgpu-core/Cargo.toml
@@ -47,24 +47,24 @@ rev = "bce6358eb1026c13d2f1c6d365af37afe
 
 [dependencies.wgt]
 path = "../wgpu-types"
 package = "wgpu-types"
 version = "0.5"
 features = ["peek-poke"]
 
 [target.'cfg(any(target_os = "ios", target_os = "macos"))'.dependencies]
-gfx-backend-metal = { version = "0.5.6" }
-gfx-backend-vulkan = { version = "0.5.11", optional = true }
+gfx-backend-metal = { version = "0.5" }
+gfx-backend-vulkan = { version = "0.5", optional = true }
 
 [target.'cfg(all(unix, not(target_os = "ios"), not(target_os = "macos")))'.dependencies]
-gfx-backend-vulkan = { version = "0.5.11", features = ["x11"] }
+gfx-backend-vulkan = { version = "0.5", features = ["x11"] }
 
 [target.'cfg(windows)'.dependencies]
 gfx-backend-dx12 = { version = "0.5" }
 gfx-backend-dx11 = { version = "0.5" }
-gfx-backend-vulkan = { version = "0.5.11" }
+gfx-backend-vulkan = { version = "0.5" }
 
 [target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows", target_os = "dragonfly", target_os = "freebsd"))'.dependencies]
 battery = { version = "0.7", optional = true }
 
 [dev-dependencies]
 loom = "0.3"
--- a/gfx/wr/Cargo.lock
+++ b/gfx/wr/Cargo.lock
@@ -282,80 +282,54 @@ name = "core-foundation"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
-name = "core-foundation"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "core-foundation-sys 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
 name = "core-foundation-sys"
 version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "core-foundation-sys"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
-name = "core-foundation-sys"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
 name = "core-graphics"
 version = "0.17.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "core-graphics"
-version = "0.22.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-graphics-types 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "core-graphics-types"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "core-text"
-version = "19.0.0"
+version = "15.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-graphics 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "crc32fast"
 version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -531,23 +505,23 @@ dependencies = [
 
 [[package]]
 name = "fake-simd"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "font-loader"
-version = "0.11.0"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-text 19.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-text 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
- "servo-fontconfig 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-fontconfig 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "foreign-types"
 version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -556,31 +530,21 @@ dependencies = [
 
 [[package]]
 name = "foreign-types-shared"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "freetype"
-version = "0.7.0"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "freetype-sys 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "freetype-sys"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
- "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-freetype-sys 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "fuchsia-cprng"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1462,30 +1426,39 @@ source = "registry+https://github.com/ru
 dependencies = [
  "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "servo-fontconfig"
-version = "0.5.1"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
- "servo-fontconfig-sys 5.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-fontconfig-sys 4.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "servo-fontconfig-sys"
-version = "5.1.0"
+version = "4.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "expat-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "freetype-sys 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "servo-freetype-sys 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "servo-freetype-sys"
+version = "4.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
  "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "sha-1"
 version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -1786,23 +1759,23 @@ name = "webrender"
 version = "0.61.0"
 dependencies = [
  "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "build-parallel 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-graphics 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-text 19.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-text 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cstr 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.20.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "freetype 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "freetype 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "glslopt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.23.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "malloc_size_of_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1843,18 +1816,18 @@ dependencies = [
 
 [[package]]
 name = "webrender_api"
 version = "0.61.0"
 dependencies = [
  "app_units 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-graphics 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.20.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "malloc_size_of_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "peek-poke 0.2.0",
  "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_bytes 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1952,23 +1925,23 @@ name = "wrench"
 version = "0.3.0"
 dependencies = [
  "app_units 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)",
  "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-graphics 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.20.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "font-loader 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "font-loader 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "glutin 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.23.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "mozangle 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "osmesa-src 0.1.1 (git+https://github.com/servo/osmesa-src)",
  "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2072,24 +2045,21 @@ dependencies = [
 "checksum cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "55e7ec0b74fe5897894cbc207092c577e87c52f8a59e8ca8d97ef37551f60a49"
 "checksum chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)" = "9213f7cd7c27e95c2b57c49f0e69b1ea65b27138da84a170133fd21b07659c00"
 "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
 "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
 "checksum cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "81fb25b677f8bf1eb325017cb6bb8452f87969db0fedb4f757b297bee78a7c62"
 "checksum cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1706996401131526e36b3b49f0c4d912639ce110996f3ca144d78946727bce54"
 "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
 "checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
-"checksum core-foundation 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b5ed8e7e76c45974e15e41bfa8d5b0483cd90191639e01d8f5f1e606299d3fb"
 "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
 "checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
-"checksum core-foundation-sys 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9a21fa21941700a3cd8fcb4091f361a6a712fac632f85d9f487cc892045d55c6"
 "checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9"
-"checksum core-graphics 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f6082396a349fa49674ba1bda4077332a18bf150e8fa75745ece07085e29a113"
-"checksum core-graphics-types 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e92f5d519093a4178296707dbaa3880eae85a5ef5386675f361a1cf25376e93c"
-"checksum core-text 19.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "04dfae50af11e72657fe7174cddb1ecddc5398037f7f6f39533ad69207c9a4e2"
+"checksum core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59e78b2e0aaf43f08e7ae0d6bc96895ef72ff0921c7d4ff4762201b2dba376dd"
+"checksum core-text 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "131b3fd1f8bd5db9f2b398fa4fdb6008c64afc04d447c306ac2c7e98fba2a61d"
 "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
 "checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be"
 "checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285"
 "checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
 "checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db"
 "checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
 "checksum cstr 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "19f7a08ed4ecd7e077d4cee63937473e6f7cf57b702a9114ef41751b2cbc0f60"
 "checksum cstr-macros 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "cd670e5ff58768ef624207fb95709ce63b8d05573fb9a05165f0eef471ea6a3a"
@@ -2099,21 +2069,20 @@ dependencies = [
 "checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a"
 "checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6"
 "checksum dwrote 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
 "checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
 "checksum env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)" = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38"
 "checksum euclid 0.20.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0c6a5b0c779cd0b744c73a1d2083faf181080d696903cdad99a3b03d015d7030"
 "checksum expat-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
 "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
-"checksum font-loader 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c49d6b4c11dca1a1dd931a34a9f397e2da91abe3de4110505f3530a80e560b52"
+"checksum font-loader 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "933a61458662fbc8e3cd22cdb8331edbd78545fc044e1e2cd3d742f6ce06aa41"
 "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
 "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-"checksum freetype 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
-"checksum freetype-sys 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+"checksum freetype 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "11926b2b410b469d0e9399eca4cbbe237a9ef02176c485803b29216307e8e028"
 "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
 "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
 "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
 "checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
 "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
 "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
 "checksum gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a"
 "checksum gl_generator 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
@@ -2208,18 +2177,19 @@ dependencies = [
 "checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
 "checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 "checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
 "checksum serde_bytes 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "325a073952621257820e7a3469f55ba4726d8b28657e7e36653d1c36dc2c84ae"
 "checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
 "checksum serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)" = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9"
-"checksum servo-fontconfig 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
-"checksum servo-fontconfig-sys 5.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
+"checksum servo-fontconfig 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a088f8d775a5c5314aae09bd77340bc9c67d72b9a45258be34c83548b4814cd9"
+"checksum servo-fontconfig-sys 4.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "62b3e166450f523f4db06c14f02a2d39e76d49b5d8cbd224338d93e3595c156c"
+"checksum servo-freetype-sys 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2c4ccb6d0d32d277d3ef7dea86203d8210945eb7a45fba89dd445b3595dd0dfc"
 "checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
 "checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
 "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
 "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
 "checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a"
 "checksum smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2ccb8c57049b2a34d2cc2b203fa785020ba0129d31920ef0d317430adaf748fa"
 "checksum stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f77b6b07e862c66a9f3e62a07588fee67cd90a9135a2b942409f195507b4fb51"
 "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
--- a/gfx/wr/webrender/Cargo.toml
+++ b/gfx/wr/webrender/Cargo.toml
@@ -5,17 +5,17 @@ authors = ["Glenn Watson <gw@intuitionli
 license = "MPL-2.0"
 repository = "https://github.com/servo/webrender"
 description = "A GPU accelerated 2D renderer for web content"
 build = "build.rs"
 edition = "2018"
 
 [features]
 default = ["freetype-lib"]
-freetype-lib = ["freetype/freetype-sys"]
+freetype-lib = ["freetype/servo-freetype-sys"]
 profiler = ["tracy-rs/enable_profiler"]
 debugger = ["ws", "serde_json", "serde", "image_loader", "base64"]
 capture = ["api/serialize", "ron", "serde", "smallvec/serde"]
 replay = ["api/deserialize", "ron", "serde", "smallvec/serde"]
 display_list_stats = ["api/display_list_stats"]
 serialize_program = ["serde", "webrender_build/serialize_program"]
 no_static_freetype = []
 leak_checks = []
@@ -56,18 +56,18 @@ ws = { optional = true, version = "0.9" 
 svg_fmt = "0.4"
 tracy-rs = { version = "0.1" }
 
 [dev-dependencies]
 mozangle = "0.3.1"
 rand = "0.4"
 
 [target.'cfg(any(target_os = "android", all(unix, not(target_os = "macos"))))'.dependencies]
-freetype = { version = "0.7", default-features = false }
+freetype = { version = "0.4", default-features = false }
 libc = "0.2"
 
 [target.'cfg(target_os = "windows")'.dependencies]
 dwrote = "0.11"
 
 [target.'cfg(target_os = "macos")'.dependencies]
-core-foundation = "0.9"
-core-graphics = "0.22"
-core-text = { version = "19", default-features = false }
+core-foundation = "0.7"
+core-graphics = "0.19"
+core-text = { version = "15", default-features = false }
--- a/gfx/wr/webrender_api/Cargo.toml
+++ b/gfx/wr/webrender_api/Cargo.toml
@@ -23,10 +23,10 @@ malloc_size_of_derive = "0.1"
 serde = { version = "1.0", features = ["rc"] }
 serde_derive = "1.0"
 serde_bytes = "0.11"
 time = "0.1"
 malloc_size_of = { version = "0.0.1", path = "../wr_malloc_size_of", package = "wr_malloc_size_of" }
 peek-poke = { version = "0.2", path = "../peek-poke", features = ["extras"] }
 
 [target.'cfg(target_os = "macos")'.dependencies]
-core-foundation = "0.9"
-core-graphics = "0.22"
+core-foundation = "0.7"
+core-graphics = "0.19"
--- a/gfx/wr/wrench/Cargo.toml
+++ b/gfx/wr/wrench/Cargo.toml
@@ -33,30 +33,30 @@ semver = "0.9.0"
 swgl = { path = "../swgl", optional = true }
 
 [dependencies.image]
 version = "0.23"
 default-features = false
 features = ["png"]
 
 [target.'cfg(target_os = "macos")'.dependencies]
-core-graphics = "0.22"
-core-foundation = "0.9"
+core-graphics = "0.19"
+core-foundation = "0.7"
 
 [features]
 default = [ "env_logger" ]
 headless = [ "osmesa-sys", "osmesa-src" ]
 software = [ "swgl" ]
 
 [target.'cfg(target_os = "windows")'.dependencies]
 dwrote = "0.11"
 mozangle = {version = "0.3.1", features = ["egl"]}
 
 [target.'cfg(all(unix, not(target_os = "android")))'.dependencies]
-font-loader = "0.11"
+font-loader = "0.9"
 
 # Configuration information used when building wrench as an APK.
 [package.metadata.android]
 package_name = "org.mozilla.wrench"
 label = "Wrench"
 android_version = 29
 target_sdk_version = 18
 min_sdk_version = 18
--- a/security/manager/ssl/osclientcerts/Cargo.toml
+++ b/security/manager/ssl/osclientcerts/Cargo.toml
@@ -11,17 +11,17 @@ license = "MPL-2.0"
 byteorder = "1.3"
 env_logger = {version = "0.6", default-features = false } # disable `regex` to reduce code size
 lazy_static = "1"
 log = "0.4"
 pkcs11 = "0.4"
 sha2 = "0.8"
 
 [target."cfg(target_os = \"macos\")".dependencies.core-foundation]
-version = "0.9"
+version = "0.7"
 
 [target."cfg(target_os = \"macos\")".dependencies.libloading]
 version = "0.5"
 
 [target."cfg(target_os = \"macos\")".dependencies.rental]
 version = "0.5"
 
 [target."cfg(target_os = \"windows\")".dependencies.winapi]
--- a/third_party/rust/ash/.cargo-checksum.json
+++ b/third_party/rust/ash/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"fa5adee91a05592f85309615bc3b04d69f51488530681d6e2d2c7004b643e2dd","src/allocator.rs":"8defd2b41207b2049c2fdae62564148c969d92d5a724487bbc189e748b27fd5c","src/device.rs":"1bb514c41f444100d081ac622f1d799d9384d1a490d58afcdf5b790d2302d31c","src/entry.rs":"73b924545dafc0c0d21d76886397b16f0e28b8e3a65072d412a7c7424d3e7726","src/entry_libloading.rs":"f697879ae14630c9656f8f0d30614c27a2654238427ad9f94dcee2e5f7646d9e","src/extensions/experimental/amd.rs":"39bef9d347d3abda78599a2363944612b3b52ea4ed90dcc36afc57162f5bdc87","src/extensions/experimental/mod.rs":"41a5366e1c8bd0e1fa47e9cf6fddc8111ed0a6946813be4eefca81da969d1ee9","src/extensions/ext/debug_marker.rs":"ddb7629fa10180fbe9e8ef55ce82bec08210a102baf7c66208697a1d6c2240d3","src/extensions/ext/debug_report.rs":"8d97690f144940beee44e198a81eae60c9aba2b549ac0c4cfedd1f81a8927cad","src/extensions/ext/debug_utils.rs":"a1064627573a2d552deecd210a8b93672f6b71f22ba7ba2ff08865e58a9fa354","src/extensions/ext/metal_surface.rs":"6fab29a5a9b0ae0136d8f978e94d2ba3921dc6ec900cd7a8bbdb476722f3e107","src/extensions/ext/mod.rs":"2f632f47a82a612742fba21dbc7bce301e5c57997f2ce96c65dfa1e2cd14c0b7","src/extensions/khr/android_surface.rs":"24f741651204c91d2f02c2fcb70bc30982c811434b32451590ffeb012931ebfc","src/extensions/khr/display.rs":"0358c47b5d22f8abc04141c121d1c810bd5714445532c67634d396cfdff71d2c","src/extensions/khr/display_swapchain.rs":"e18ca144054d99980c256a665e6a55dfbb33caf7c6d2d3261a6dcf02a88b16c1","src/extensions/khr/draw_indirect_count.rs":"39a527389cd45186bd0d513f47ce0d91be77af230de60c445d5cf8b8dca4d066","src/extensions/khr/external_memory_fd.rs":"19d77c876693762c36a9bc3c5ba920515590fc7485c45f0acc10b9e6160b6536","src/extensions/khr/mod.rs":"51d2b8cfbdee72b51f6f50bce8c18d85065aabbde68cb535fe7e16632ba91f12","src/extensions/khr/push_descriptor.rs":"b4976428308eb1399e565954ba487c2715d9bf46388c95ddd2155c9e9cb37af5","src/extensions/khr/ray_tracing.rs":"0e6433ab647d71ed907b3c741fff3a57f208c19352fa778f993c72b9ad2627b3","src/extensions/khr/surface.rs":"09dd9b3489ad696ab931ed91d03e56d804e43444d99fe101a607aa3f7f330759","src/extensions/khr/swapchain.rs":"8dcd3561fd562013b8f3c3020497d149ff275bdb4725916380419ebb6d6c9903","src/extensions/khr/timeline_semaphore.rs":"ac5ef9e07bcbf2ff0f6cd59dae865bb2eaee02050eb32cda7fb76bc87db5a260","src/extensions/khr/wayland_surface.rs":"67d73dfaae92c824c82e8c52e409388e25d5e9eed9a0546e12b3fe4bb9c0a7a3","src/extensions/khr/win32_surface.rs":"15f7c58b536fb4a278022c8e8b723d1c520ac4cd416e205794a6ca091a08b33d","src/extensions/khr/xcb_surface.rs":"3967715468823765c239023b4e3cec895a3b039d13c8e4126655bbf2d4a441cd","src/extensions/khr/xlib_surface.rs":"f057d3314aeb4646d10075fd71e6d4244ff98baf2cd0f29787fdf0aab76c530a","src/extensions/mod.rs":"4a394c468a0fc824671b36c1390f6c34173d073ed0918a528a84f48667756d65","src/extensions/mvk/ios_surface.rs":"2734555f36a2faf43bdf955caadd186484a50370b2a359b59f46e212a6cae953","src/extensions/mvk/macos_surface.rs":"a0aaa9027ecc0a005c8db5a8ff282866b0578bbf47da5d1d2483e2aabf606d89","src/extensions/mvk/mod.rs":"d03ac1a0144d1aca9ed1d0ce0c14b099f1fedb03b8108028b780a34f64de604c","src/extensions/nv/mesh_shader.rs":"d2d675a60047e2312fe72287a69c07ae4761a8980f8b9987efcd96b2fc3913c5","src/extensions/nv/mod.rs":"175512de8528c3a90000cf9509c683761e9536dcb448877b7c7772b695aad258","src/extensions/nv/ray_tracing.rs":"40112de7c6e27d4e763ac36488f6b01a5c313bca5e4f8d63a00e5c6fcb0320f4","src/instance.rs":"8dfb706126608f91c788e8d9984ac94f1894fbf52eaa784242234bff42672265","src/lib.rs":"9dcea467290ad821a749e1a06f06b3d2818d7ab59cc82c96e014d2b8fde0fb22","src/prelude.rs":"68b66cab3ca52ef50943eca68c4482f919342f51e21fb52a66e9b0625d5ff79e","src/util.rs":"4f966bb489398813ae062d906ccb8348e8d6a77fdc48c0f8a0ad7871780f264e","src/version.rs":"2d46dc6a5cc2358f70e1561bf17fffeccf11649e67011b816b9e114d8ecebffb","src/vk.rs":"4a3a2b4871648819e5abe163e8bb2055f2fb470d99fe9bcc59bef7e72049f972","src/vk/aliases.rs":"9190866fb5771a60bfd8679348144ab10ccf180a62b1a02110b27e8fbe9ba5ff","src/vk/bitflags.rs":"3b4201e47ba2efccb22d95246e13240615a50fc394115e59f07a3ef5f008c8e3","src/vk/const_debugs.rs":"8a3d9999eb631753e274b61dcf8f870f69d1618b5034292d78d218b8302c1405","src/vk/constants.rs":"1f74a61b57275ee166d155ab839e22754fc4af88a74bd4d015737cb101693d4a","src/vk/definitions.rs":"38738115ed15bf549dc520da48b5cacd9bc1d22d8a0061341a4a1d0f948797ba","src/vk/enums.rs":"e748b3729c2e800c011ee8dfd1534e583228997a89819c61cb8fef57d2491dab","src/vk/extensions.rs":"02670d8b701c2b34a564e329c23e33ff498d936b999484ed68b8d657e7015a33","src/vk/feature_extensions.rs":"aa8423c7bdf5a969152a782a7541e6be66fea1f17ee135953aa485de0a2a33e5","src/vk/features.rs":"5d77b653d718f10580091eef73d82e77eb8238543670c1010c2de90c04667cc1","src/vk/macros.rs":"1f673f000b0536ba43fda3764535f59341b885a884f1e83a42172c41a79fb604","src/vk/platform_types.rs":"e16589ca1605ed52b1dddc8c56f811bbf7f12aa62faf4ba7da0fad132a6808ad","tests/constant_size_arrays.rs":"aff59222e42a0920ac1045f8eb34b1ff815fa0b19cd10c63194632e2ff0d362e","tests/display.rs":"d294396bb5b2210432724cccc0a56e105bab8743e180d4ad7cc675a200c09539"},"package":"c69a8137596e84c22d57f3da1b5de1d4230b1742a710091c85f4d7ce50f00f38"}
\ No newline at end of file
+{"files":{"Cargo.toml":"8672467a4061ab042e1680a880e7dc96bff020880af1309f40ec5b3a92d98758","src/allocator.rs":"8defd2b41207b2049c2fdae62564148c969d92d5a724487bbc189e748b27fd5c","src/device.rs":"012bb9dbd4c557ac0309b8f39d911c2d28800c5258931e6c4166a56366b8f769","src/entry.rs":"e6cb5bd68abd37442fea9faa6a307210398c8f9798c19691d99ea8355d21aa2d","src/extensions/experimental/amd.rs":"39bef9d347d3abda78599a2363944612b3b52ea4ed90dcc36afc57162f5bdc87","src/extensions/experimental/mod.rs":"41a5366e1c8bd0e1fa47e9cf6fddc8111ed0a6946813be4eefca81da969d1ee9","src/extensions/ext/debug_marker.rs":"ddb7629fa10180fbe9e8ef55ce82bec08210a102baf7c66208697a1d6c2240d3","src/extensions/ext/debug_report.rs":"8d97690f144940beee44e198a81eae60c9aba2b549ac0c4cfedd1f81a8927cad","src/extensions/ext/debug_utils.rs":"a1064627573a2d552deecd210a8b93672f6b71f22ba7ba2ff08865e58a9fa354","src/extensions/ext/mod.rs":"ccd7b9471c4bb356fc2fa309d58a847f9aff393b77fc08752123e19c801cbc65","src/extensions/khr/android_surface.rs":"24f741651204c91d2f02c2fcb70bc30982c811434b32451590ffeb012931ebfc","src/extensions/khr/display.rs":"0358c47b5d22f8abc04141c121d1c810bd5714445532c67634d396cfdff71d2c","src/extensions/khr/display_swapchain.rs":"e18ca144054d99980c256a665e6a55dfbb33caf7c6d2d3261a6dcf02a88b16c1","src/extensions/khr/external_memory_fd.rs":"19d77c876693762c36a9bc3c5ba920515590fc7485c45f0acc10b9e6160b6536","src/extensions/khr/mod.rs":"b9416eb2158938c2887b06a3e157350da74853e0737c965091833edba55e21f2","src/extensions/khr/push_descriptor.rs":"b4976428308eb1399e565954ba487c2715d9bf46388c95ddd2155c9e9cb37af5","src/extensions/khr/ray_tracing.rs":"6f4f7c59c3812b87b66b87c5a15168f2d930fd55740f65ea157846d59eba1afd","src/extensions/khr/surface.rs":"09dd9b3489ad696ab931ed91d03e56d804e43444d99fe101a607aa3f7f330759","src/extensions/khr/swapchain.rs":"8dcd3561fd562013b8f3c3020497d149ff275bdb4725916380419ebb6d6c9903","src/extensions/khr/timeline_semaphore.rs":"28b9b68902ac0867d875261cfe6548539cb4446e57c7d7a9093ad3b0b93fc18e","src/extensions/khr/wayland_surface.rs":"67d73dfaae92c824c82e8c52e409388e25d5e9eed9a0546e12b3fe4bb9c0a7a3","src/extensions/khr/win32_surface.rs":"15f7c58b536fb4a278022c8e8b723d1c520ac4cd416e205794a6ca091a08b33d","src/extensions/khr/xcb_surface.rs":"3967715468823765c239023b4e3cec895a3b039d13c8e4126655bbf2d4a441cd","src/extensions/khr/xlib_surface.rs":"f057d3314aeb4646d10075fd71e6d4244ff98baf2cd0f29787fdf0aab76c530a","src/extensions/mod.rs":"4a394c468a0fc824671b36c1390f6c34173d073ed0918a528a84f48667756d65","src/extensions/mvk/ios_surface.rs":"2734555f36a2faf43bdf955caadd186484a50370b2a359b59f46e212a6cae953","src/extensions/mvk/macos_surface.rs":"a0aaa9027ecc0a005c8db5a8ff282866b0578bbf47da5d1d2483e2aabf606d89","src/extensions/mvk/mod.rs":"d03ac1a0144d1aca9ed1d0ce0c14b099f1fedb03b8108028b780a34f64de604c","src/extensions/nv/mesh_shader.rs":"d2d675a60047e2312fe72287a69c07ae4761a8980f8b9987efcd96b2fc3913c5","src/extensions/nv/mod.rs":"175512de8528c3a90000cf9509c683761e9536dcb448877b7c7772b695aad258","src/extensions/nv/ray_tracing.rs":"40112de7c6e27d4e763ac36488f6b01a5c313bca5e4f8d63a00e5c6fcb0320f4","src/instance.rs":"8dfb706126608f91c788e8d9984ac94f1894fbf52eaa784242234bff42672265","src/lib.rs":"e53d93789398bd2ea17d6ab056bc18d66373d7b87dcb912441426bcd70f05beb","src/prelude.rs":"68b66cab3ca52ef50943eca68c4482f919342f51e21fb52a66e9b0625d5ff79e","src/util.rs":"4f966bb489398813ae062d906ccb8348e8d6a77fdc48c0f8a0ad7871780f264e","src/version.rs":"2d46dc6a5cc2358f70e1561bf17fffeccf11649e67011b816b9e114d8ecebffb","src/vk.rs":"12a419254a1879d4c0fef855de973eb1f1a3e97fcf1a61587704cb6af139c37c","tests/constant_size_arrays.rs":"aff59222e42a0920ac1045f8eb34b1ff815fa0b19cd10c63194632e2ff0d362e","tests/display.rs":"d294396bb5b2210432724cccc0a56e105bab8743e180d4ad7cc675a200c09539"},"package":"69daec0742947f33a85931fa3cb0ce5f07929159dcbd1f0cbb5b2912e2978509"}
\ No newline at end of file
--- a/third_party/rust/ash/Cargo.toml
+++ b/third_party/rust/ash/Cargo.toml
@@ -8,24 +8,23 @@
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 edition = "2018"
 name = "ash"
-version = "0.31.0"
+version = "0.30.0"
 authors = ["maik klein <maikklein@googlemail.com>"]
 description = "Vulkan bindings for Rust"
 documentation = "https://docs.rs/ash"
 readme = "../README.md"
 keywords = ["vulkan", "graphic"]
 license = "MIT"
 repository = "https://github.com/MaikKlein/ash"
 [package.metadata.release]
 no-dev-version = true
 [dependencies.libloading]
-version = "0.6.1"
-optional = true
+version = "0.5.2"
 
 [features]
-default = ["libloading"]
+default = []
--- a/third_party/rust/ash/src/device.rs
+++ b/third_party/rust/ash/src/device.rs
@@ -106,82 +106,95 @@ pub trait DeviceV1_2: DeviceV1_1 {
     ) {
         self.fp_v1_2()
             .cmd_end_render_pass2(command_buffer, subpass_end_info);
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetQueryPool.html>"]
     unsafe fn reset_query_pool(
         &self,
+        device: vk::Device,
         query_pool: vk::QueryPool,
         first_query: u32,
         query_count: u32,
     ) {
         self.fp_v1_2()
-            .reset_query_pool(self.handle(), query_pool, first_query, query_count);
+            .reset_query_pool(device, query_pool, first_query, query_count);
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetSemaphoreCounterValue.html>"]
-    unsafe fn get_semaphore_counter_value(&self, semaphore: vk::Semaphore) -> VkResult<u64> {
+    unsafe fn get_semaphore_counter_value(
+        &self,
+        device: vk::Device,
+        semaphore: vk::Semaphore,
+    ) -> VkResult<u64> {
         let mut value = 0;
-        let err_code =
-            self.fp_v1_2()
-                .get_semaphore_counter_value(self.handle(), semaphore, &mut value);
+        let err_code = self
+            .fp_v1_2()
+            .get_semaphore_counter_value(device, semaphore, &mut value);
         match err_code {
             vk::Result::SUCCESS => Ok(value),
             _ => Err(err_code),
         }
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkWaitSemaphores.html>"]
     unsafe fn wait_semaphores(
         &self,
+        device: vk::Device,
         wait_info: &vk::SemaphoreWaitInfo,
         timeout: u64,
     ) -> VkResult<()> {
-        let err_code = self
-            .fp_v1_2()
-            .wait_semaphores(self.handle(), wait_info, timeout);
+        let err_code = self.fp_v1_2().wait_semaphores(device, wait_info, timeout);
         match err_code {
             vk::Result::SUCCESS => Ok(()),
             _ => Err(err_code),
         }
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSignalSemaphore.html>"]
-    unsafe fn signal_semaphore(&self, signal_info: &vk::SemaphoreSignalInfo) -> VkResult<()> {
-        let err_code = self.fp_v1_2().signal_semaphore(self.handle(), signal_info);
+    unsafe fn signal_semaphore(
+        &self,
+        device: vk::Device,
+        signal_info: &vk::SemaphoreSignalInfo,
+    ) -> VkResult<()> {
+        let err_code = self.fp_v1_2().signal_semaphore(device, signal_info);
         match err_code {
             vk::Result::SUCCESS => Ok(()),
             _ => Err(err_code),
         }
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferDeviceAddress.html>"]
     unsafe fn get_buffer_device_address(
         &self,
+        device: vk::Device,
         info: &vk::BufferDeviceAddressInfo,
     ) -> vk::DeviceAddress {
-        self.fp_v1_2()
-            .get_buffer_device_address(self.handle(), info)
+        self.fp_v1_2().get_buffer_device_address(device, info)
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferOpaqueCaptureAddress.html>"]
-    unsafe fn get_buffer_opaque_capture_address(&self, info: &vk::BufferDeviceAddressInfo) -> u64 {
+    unsafe fn get_buffer_opaque_capture_address(
+        &self,
+        device: vk::Device,
+        info: &vk::BufferDeviceAddressInfo,
+    ) -> u64 {
         self.fp_v1_2()
-            .get_buffer_opaque_capture_address(self.handle(), info)
+            .get_buffer_opaque_capture_address(device, info)
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html>"]
     unsafe fn get_device_memory_opaque_capture_address(
         &self,
+        device: vk::Device,
         info: &vk::DeviceMemoryOpaqueCaptureAddressInfo,
     ) -> u64 {
         self.fp_v1_2()
-            .get_device_memory_opaque_capture_address(self.handle(), info)
+            .get_device_memory_opaque_capture_address(device, info)
     }
 }
 
 #[allow(non_camel_case_types)]
 pub trait DeviceV1_1: DeviceV1_0 {
     fn fp_v1_1(&self) -> &vk::DeviceFnV1_1;
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindBufferMemory2.html>"]
@@ -2129,17 +2142,16 @@ pub trait DeviceV1_0 {
 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDevice.html>"]
 #[derive(Clone)]
 pub struct Device {
     handle: vk::Device,
     device_fn_1_0: vk::DeviceFnV1_0,
     device_fn_1_1: vk::DeviceFnV1_1,
     device_fn_1_2: vk::DeviceFnV1_2,
 }
-
 impl Device {
     pub unsafe fn load(instance_fn: &vk::InstanceFnV1_0, device: vk::Device) -> Self {
         let device_fn_1_0 = vk::DeviceFnV1_0::load(|name| {
             mem::transmute(instance_fn.get_device_proc_addr(device, name.as_ptr()))
         });
         let device_fn_1_1 = vk::DeviceFnV1_1::load(|name| {
             mem::transmute(instance_fn.get_device_proc_addr(device, name.as_ptr()))
         });
--- a/third_party/rust/ash/src/entry.rs
+++ b/third_party/rust/ash/src/entry.rs
@@ -1,29 +1,65 @@
 use crate::instance::Instance;
 use crate::prelude::*;
 use crate::vk;
 use crate::RawPtr;
+use libloading::Library;
 use std::error::Error;
 use std::fmt;
+use std::io;
 use std::mem;
 use std::os::raw::c_char;
 use std::os::raw::c_void;
 use std::ptr;
+use std::sync::Arc;
+
+#[cfg(windows)]
+const LIB_PATH: &str = "vulkan-1.dll";
+
+#[cfg(all(
+    unix,
+    not(any(target_os = "macos", target_os = "ios", target_os = "android"))
+))]
+const LIB_PATH: &str = "libvulkan.so.1";
+
+#[cfg(target_os = "android")]
+const LIB_PATH: &str = "libvulkan.so";
+
+#[cfg(any(target_os = "macos", target_os = "ios"))]
+const LIB_PATH: &str = "libvulkan.dylib";
+
+/// Function loader
+pub type Entry = EntryCustom<Arc<Library>>;
 
 /// Function loader
 #[derive(Clone)]
 pub struct EntryCustom<L> {
     static_fn: vk::StaticFn,
     entry_fn_1_0: vk::EntryFnV1_0,
     entry_fn_1_1: vk::EntryFnV1_1,
     entry_fn_1_2: vk::EntryFnV1_2,
     lib: L,
 }
 
+#[derive(Debug)]
+pub enum LoadingError {
+    LibraryLoadError(io::Error),
+}
+
+impl fmt::Display for LoadingError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self {
+            LoadingError::LibraryLoadError(e) => write!(f, "{}", e),
+        }
+    }
+}
+
+impl Error for LoadingError {}
+
 #[derive(Clone, Debug)]
 pub enum InstanceError {
     LoadError(Vec<&'static str>),
     VkError(vk::Result),
 }
 
 impl fmt::Display for InstanceError {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
@@ -167,42 +203,77 @@ pub trait EntryV1_2: EntryV1_1 {
 }
 
 impl<L> EntryV1_2 for EntryCustom<L> {
     fn fp_v1_2(&self) -> &vk::EntryFnV1_2 {
         &self.entry_fn_1_2
     }
 }
 
+impl EntryCustom<Arc<Library>> {
+    /// ```rust,no_run
+    /// use ash::{vk, Entry, version::EntryV1_0};
+    /// # fn main() -> Result<(), Box<std::error::Error>> {
+    /// let entry = Entry::new()?;
+    /// let app_info = vk::ApplicationInfo {
+    ///     api_version: vk::make_version(1, 0, 0),
+    ///     ..Default::default()
+    /// };
+    /// let create_info = vk::InstanceCreateInfo {
+    ///     p_application_info: &app_info,
+    ///     ..Default::default()
+    /// };
+    /// let instance = unsafe { entry.create_instance(&create_info, None)? };
+    /// # Ok(()) }
+    /// ```
+    pub fn new() -> Result<Entry, LoadingError> {
+        Self::new_custom(
+            || {
+                Library::new(&LIB_PATH)
+                    .map_err(LoadingError::LibraryLoadError)
+                    .map(Arc::new)
+            },
+            |vk_lib, name| unsafe {
+                vk_lib
+                    .get(name.to_bytes_with_nul())
+                    .map(|symbol| *symbol)
+                    .unwrap_or(ptr::null_mut())
+            },
+        )
+    }
+}
+
 impl<L> EntryCustom<L> {
-    pub fn new_custom<Load>(mut lib: L, mut load: Load) -> Self
+    pub fn new_custom<Open, Load>(open: Open, mut load: Load) -> Result<Self, LoadingError>
     where
+        Open: FnOnce() -> Result<L, LoadingError>,
         Load: FnMut(&mut L, &::std::ffi::CStr) -> *const c_void,
     {
+        let mut lib = open()?;
         let static_fn = vk::StaticFn::load(|name| load(&mut lib, name));
 
         let entry_fn_1_0 = vk::EntryFnV1_0::load(|name| unsafe {
             mem::transmute(static_fn.get_instance_proc_addr(vk::Instance::null(), name.as_ptr()))
         });
 
         let entry_fn_1_1 = vk::EntryFnV1_1::load(|name| unsafe {
             mem::transmute(static_fn.get_instance_proc_addr(vk::Instance::null(), name.as_ptr()))
         });
 
         let entry_fn_1_2 = vk::EntryFnV1_2::load(|name| unsafe {
             mem::transmute(static_fn.get_instance_proc_addr(vk::Instance::null(), name.as_ptr()))
         });
 
-        EntryCustom {
+        Ok(EntryCustom {
             static_fn,
             entry_fn_1_0,
             entry_fn_1_1,
             entry_fn_1_2,
             lib,
-        }
+        })
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceVersion.html>"]
     /// ```rust,no_run
     /// # use ash::{Entry, vk};
     /// # fn main() -> Result<(), Box<std::error::Error>> {
     /// let entry = Entry::new()?;
     /// match entry.try_enumerate_instance_version()? {
deleted file mode 100644
--- a/third_party/rust/ash/src/entry_libloading.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-use crate::entry::EntryCustom;
-use libloading::Library;
-use std::error::Error;
-use std::fmt;
-use std::ptr;
-use std::sync::Arc;
-
-#[cfg(windows)]
-const LIB_PATH: &str = "vulkan-1.dll";
-
-#[cfg(all(
-    unix,
-    not(any(target_os = "macos", target_os = "ios", target_os = "android"))
-))]
-const LIB_PATH: &str = "libvulkan.so.1";
-
-#[cfg(target_os = "android")]
-const LIB_PATH: &str = "libvulkan.so";
-
-#[cfg(any(target_os = "macos", target_os = "ios"))]
-const LIB_PATH: &str = "libvulkan.dylib";
-
-/// Function loader
-pub type Entry = EntryCustom<Arc<Library>>;
-
-#[derive(Debug)]
-pub struct LoadingError(libloading::Error);
-
-impl fmt::Display for LoadingError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        fmt::Display::fmt(&self.0, f)
-    }
-}
-
-impl Error for LoadingError {
-    fn source(&self) -> Option<&(dyn Error + 'static)> {
-        Error::source(&self.0)
-    }
-}
-
-impl EntryCustom<Arc<Library>> {
-    /// ```rust,no_run
-    /// use ash::{vk, Entry, version::EntryV1_0};
-    /// # fn main() -> Result<(), Box<std::error::Error>> {
-    /// let entry = Entry::new()?;
-    /// let app_info = vk::ApplicationInfo {
-    ///     api_version: vk::make_version(1, 0, 0),
-    ///     ..Default::default()
-    /// };
-    /// let create_info = vk::InstanceCreateInfo {
-    ///     p_application_info: &app_info,
-    ///     ..Default::default()
-    /// };
-    /// let instance = unsafe { entry.create_instance(&create_info, None)? };
-    /// # Ok(()) }
-    /// ```
-    pub fn new() -> Result<Entry, LoadingError> {
-        let lib = Library::new(&LIB_PATH)
-            .map_err(LoadingError)
-            .map(Arc::new)?;
-
-        Ok(Self::new_custom(lib, |vk_lib, name| unsafe {
-            vk_lib
-                .get(name.to_bytes_with_nul())
-                .map(|symbol| *symbol)
-                .unwrap_or(ptr::null_mut())
-        }))
-    }
-}
deleted file mode 100644
--- a/third_party/rust/ash/src/extensions/ext/metal_surface.rs
+++ /dev/null
@@ -1,56 +0,0 @@
-#![allow(dead_code)]
-use crate::prelude::*;
-use crate::version::{EntryV1_0, InstanceV1_0};
-use crate::vk;
-use crate::RawPtr;
-use std::ffi::CStr;
-use std::mem;
-
-#[derive(Clone)]
-pub struct MetalSurface {
-    handle: vk::Instance,
-    metal_surface_fn: vk::ExtMetalSurfaceFn,
-}
-
-impl MetalSurface {
-    pub fn new<E: EntryV1_0, I: InstanceV1_0>(entry: &E, instance: &I) -> MetalSurface {
-        let surface_fn = vk::ExtMetalSurfaceFn::load(|name| unsafe {
-            mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
-        });
-        MetalSurface {
-            handle: instance.handle(),
-            metal_surface_fn: surface_fn,
-        }
-    }
-
-    pub fn name() -> &'static CStr {
-        vk::ExtMetalSurfaceFn::name()
-    }
-
-    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateMetalSurfaceEXT.html>"]
-    pub unsafe fn create_metal_surface(
-        &self,
-        create_info: &vk::MetalSurfaceCreateInfoEXT,
-        allocation_callbacks: Option<&vk::AllocationCallbacks>,
-    ) -> VkResult<vk::SurfaceKHR> {
-        let mut surface = mem::zeroed();
-        let err_code = self.metal_surface_fn.create_metal_surface_ext(
-            self.handle,
-            create_info,
-            allocation_callbacks.as_raw_ptr(),
-            &mut surface,
-        );
-        match err_code {
-            vk::Result::SUCCESS => Ok(surface),
-            _ => Err(err_code),
-        }
-    }
-
-    pub fn fp(&self) -> &vk::ExtMetalSurfaceFn {
-        &self.metal_surface_fn
-    }
-
-    pub fn instance(&self) -> vk::Instance {
-        self.handle
-    }
-}
--- a/third_party/rust/ash/src/extensions/ext/mod.rs
+++ b/third_party/rust/ash/src/extensions/ext/mod.rs
@@ -1,9 +1,7 @@
 pub use self::debug_marker::DebugMarker;
 pub use self::debug_report::DebugReport;
 pub use self::debug_utils::DebugUtils;
-pub use self::metal_surface::MetalSurface;
 
 mod debug_marker;
 mod debug_report;
 mod debug_utils;
-mod metal_surface;
deleted file mode 100644
--- a/third_party/rust/ash/src/extensions/khr/draw_indirect_count.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-#![allow(dead_code)]
-use crate::version::{DeviceV1_0, InstanceV1_0};
-use crate::vk;
-use std::ffi::CStr;
-use std::mem;
-
-#[derive(Clone)]
-pub struct DrawIndirectCount {
-    handle: vk::Device,
-    draw_indirect_count_fn: vk::KhrDrawIndirectCountFn,
-}
-
-impl DrawIndirectCount {
-    pub fn new<I: InstanceV1_0, D: DeviceV1_0>(instance: &I, device: &D) -> DrawIndirectCount {
-        let draw_indirect_count_fn = vk::KhrDrawIndirectCountFn::load(|name| unsafe {
-            mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
-        });
-
-        DrawIndirectCount {
-            handle: device.handle(),
-            draw_indirect_count_fn,
-        }
-    }
-
-    pub fn name() -> &'static CStr {
-        vk::KhrDrawIndirectCountFn::name()
-    }
-
-    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdDrawIndexedIndirectCountKHR.html>"]
-    pub unsafe fn cmd_draw_indexed_indirect_count(
-        &self,
-        command_buffer: vk::CommandBuffer,
-        buffer: vk::Buffer,
-        offset: vk::DeviceSize,
-        count_buffer: vk::Buffer,
-        count_buffer_offset: vk::DeviceSize,
-        max_draw_count: u32,
-        stride: u32,
-    ) {
-        self.draw_indirect_count_fn
-            .cmd_draw_indexed_indirect_count_khr(
-                command_buffer,
-                buffer,
-                offset,
-                count_buffer,
-                count_buffer_offset,
-                max_draw_count,
-                stride,
-            );
-    }
-
-    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdDrawIndirectCountKHR.html>"]
-    pub unsafe fn cmd_draw_indirect_count(
-        &self,
-        command_buffer: vk::CommandBuffer,
-        buffer: vk::Buffer,
-        offset: vk::DeviceSize,
-        count_buffer: vk::Buffer,
-        count_buffer_offset: vk::DeviceSize,
-        max_draw_count: u32,
-        stride: u32,
-    ) {
-        self.draw_indirect_count_fn
-            .cmd_draw_indexed_indirect_count_khr(
-                command_buffer,
-                buffer,
-                offset,
-                count_buffer,
-                count_buffer_offset,
-                max_draw_count,
-                stride,
-            );
-    }
-}
--- a/third_party/rust/ash/src/extensions/khr/mod.rs
+++ b/third_party/rust/ash/src/extensions/khr/mod.rs
@@ -1,27 +1,25 @@
 pub use self::android_surface::AndroidSurface;
 pub use self::display::Display;
 pub use self::display_swapchain::DisplaySwapchain;
-pub use self::draw_indirect_count::DrawIndirectCount;
 pub use self::external_memory_fd::ExternalMemoryFd;
 pub use self::push_descriptor::PushDescriptor;
 pub use self::ray_tracing::RayTracing;
 pub use self::surface::Surface;
 pub use self::swapchain::Swapchain;
 pub use self::timeline_semaphore::TimelineSemaphore;
 pub use self::wayland_surface::WaylandSurface;
 pub use self::win32_surface::Win32Surface;
 pub use self::xcb_surface::XcbSurface;
 pub use self::xlib_surface::XlibSurface;
 
 mod android_surface;
 mod display;
 mod display_swapchain;
-mod draw_indirect_count;
 mod external_memory_fd;
 mod push_descriptor;
 mod ray_tracing;
 mod surface;
 mod swapchain;
 mod timeline_semaphore;
 mod wayland_surface;
 mod win32_surface;
--- a/third_party/rust/ash/src/extensions/khr/ray_tracing.rs
+++ b/third_party/rust/ash/src/extensions/khr/ray_tracing.rs
@@ -67,17 +67,17 @@ impl RayTracing {
         );
     }
 
     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetAccelerationStructureMemoryRequirementsKHR.html>"]
     pub unsafe fn get_acceleration_structure_memory_requirements(
         &self,
         info: &vk::AccelerationStructureMemoryRequirementsInfoKHR,
     ) -> vk::MemoryRequirements2KHR {
-        let mut requirements = Default::default();
+        let mut requirements = mem::zeroed();
         self.ray_tracing_fn
             .get_acceleration_structure_memory_requirements_khr(
                 self.handle,
                 info,
                 &mut requirements,
             );
         requirements
     }
--- a/third_party/rust/ash/src/extensions/khr/timeline_semaphore.rs
+++ b/third_party/rust/ash/src/extensions/khr/timeline_semaphore.rs
@@ -22,51 +22,51 @@ impl TimelineSemaphore {
             timeline_semaphore_fn,
         }
     }
 
     pub fn name() -> &'static CStr {
         vk::KhrTimelineSemaphoreFn::name()
     }
 
-    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetSemaphoreCounterValue.html>"]
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetSemaphoreCounterValueKHR>"]
     pub unsafe fn get_semaphore_counter_value(
         &self,
         device: vk::Device,
         semaphore: vk::Semaphore,
     ) -> VkResult<u64> {
         let mut value = 0;
         let err_code = self
             .timeline_semaphore_fn
             .get_semaphore_counter_value_khr(device, semaphore, &mut value);
 
         match err_code {
             vk::Result::SUCCESS => Ok(value),
             _ => Err(err_code),
         }
     }
 
-    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkWaitSemaphores.html>"]
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkWaitSemaphoresKHR>"]
     pub unsafe fn wait_semaphores(
         &self,
         device: vk::Device,
         wait_info: &vk::SemaphoreWaitInfo,
         timeout: u64,
     ) -> VkResult<()> {
         let err_code = self
             .timeline_semaphore_fn
             .wait_semaphores_khr(device, wait_info, timeout);
 
         match err_code {
             vk::Result::SUCCESS => Ok(()),
             _ => Err(err_code),
         }
     }
 
-    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSignalSemaphore.html>"]
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkSignalSemaphoreKHR>"]
     pub unsafe fn signal_semaphore(
         &self,
         device: vk::Device,
         signal_info: &vk::SemaphoreSignalInfo,
     ) -> VkResult<()> {
         let err_code = self
             .timeline_semaphore_fn
             .signal_semaphore_khr(device, signal_info);
--- a/third_party/rust/ash/src/lib.rs
+++ b/third_party/rust/ash/src/lib.rs
@@ -18,25 +18,21 @@
 //!     ..Default::default()
 //! };
 //! let instance = unsafe { entry.create_instance(&create_info, None)? };
 //! # Ok(()) }
 //! ```
 //!
 
 pub use crate::device::Device;
-pub use crate::entry::{EntryCustom, InstanceError};
-#[cfg(feature = "libloading")]
-pub use crate::entry_libloading::{Entry, LoadingError};
+pub use crate::entry::{Entry, EntryCustom, InstanceError, LoadingError};
 pub use crate::instance::Instance;
 
 mod device;
 mod entry;
-#[cfg(feature = "libloading")]
-mod entry_libloading;
 mod instance;
 pub mod prelude;
 pub mod util;
 pub mod version;
 #[macro_use]
 pub mod vk;
 
 // macros of vk need to be defined beforehand
--- a/third_party/rust/ash/src/vk.rs
+++ b/third_party/rust/ash/src/vk.rs
@@ -1,32 +1,10 @@
-#![allow(clippy::too_many_arguments, clippy::cognitive_complexity, clippy::wrong_self_convention)]
-#[macro_use]
-mod macros;
-pub use macros::*;
-mod aliases;
-pub use aliases::*;
-mod bitflags;
-pub use bitflags::*;
-mod const_debugs;
-pub(crate) use const_debugs::*;
-mod constants;
-pub use constants::*;
-mod definitions;
-pub use definitions::*;
-mod enums;
-pub use enums::*;
-mod extensions;
-pub use extensions::*;
-mod feature_extensions;
-pub use feature_extensions::*;
-mod features;
-pub use features::*;
-mod platform_types;
-pub use platform_types::*;
+# ! [ allow ( clippy :: too_many_arguments , clippy :: cognitive_complexity , clippy :: wrong_self_convention ) ]use std::fmt;
+use std::os::raw::*;
 #[doc = r" Iterates through the pointer chain. Includes the item that is passed into the function."]
 #[doc = r" Stops at the last `BaseOutStructure` that has a null `p_next` field."]
 pub(crate) unsafe fn ptr_chain_iter<T>(ptr: &mut T) -> impl Iterator<Item = *mut BaseOutStructure> {
     let ptr: *mut BaseOutStructure = ptr as *mut T as _;
     (0..).scan(ptr, |p_ptr, _| {
         if p_ptr.is_null() {
             return None;
         }
@@ -36,8 +14,83160 @@ pub(crate) unsafe fn ptr_chain_iter<T>(p
         Some(old)
     })
 }
 pub trait Handle {
     const TYPE: ObjectType;
     fn as_raw(self) -> u64;
     fn from_raw(_: u64) -> Self;
 }
+#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_MAKE_VERSION.html>"]
+pub const fn make_version(major: u32, minor: u32, patch: u32) -> u32 {
+    (major << 22) | (minor << 12) | patch
+}
+#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_MAJOR.html>"]
+pub const fn version_major(version: u32) -> u32 {
+    version >> 22
+}
+#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_MINOR.html>"]
+pub const fn version_minor(version: u32) -> u32 {
+    (version >> 12) & 0x3ff
+}
+#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_PATCH.html>"]
+pub const fn version_patch(version: u32) -> u32 {
+    version & 0xfff
+}
+pub type RROutput = c_ulong;
+pub type VisualID = c_uint;
+pub type Display = *const c_void;
+pub type Window = c_ulong;
+#[allow(non_camel_case_types)]
+pub type xcb_connection_t = c_void;
+#[allow(non_camel_case_types)]
+pub type xcb_window_t = u32;
+#[allow(non_camel_case_types)]
+pub type xcb_visualid_t = u32;
+pub type MirConnection = *const c_void;
+pub type MirSurface = *const c_void;
+pub type HINSTANCE = *const c_void;
+pub type HWND = *const c_void;
+#[allow(non_camel_case_types)]
+pub type wl_display = c_void;
+#[allow(non_camel_case_types)]
+pub type wl_surface = c_void;
+pub type HANDLE = *mut c_void;
+pub type HMONITOR = HANDLE;
+pub type DWORD = c_ulong;
+pub type LPCWSTR = *const u16;
+#[allow(non_camel_case_types)]
+pub type zx_handle_t = u32;
+#[allow(non_camel_case_types)]
+pub type SECURITY_ATTRIBUTES = ();
+pub type ANativeWindow = c_void;
+pub type AHardwareBuffer = c_void;
+#[doc = r" This definition is experimental and won't adhere to semver rules."]
+pub type GgpStreamDescriptor = u32;
+#[doc = r" This definition is experimental and won't adhere to semver rules."]
+pub type GgpFrameToken = u32;
+pub type CAMetalLayer = c_void;
+#[macro_export]
+macro_rules! vk_bitflags_wrapped {
+    ( $ name : ident , $ all : expr , $ flag_type : ty ) => {
+        impl Default for $name {
+            fn default() -> $name {
+                $name(0)
+            }
+        }
+        impl $name {
+            #[inline]
+            pub const fn empty() -> $name {
+                $name(0)
+            }
+            #[inline]
+            pub const fn all() -> $name {
+                $name($all)
+            }
+            #[inline]
+            pub const fn from_raw(x: $flag_type) -> Self {
+                $name(x)
+            }
+            #[inline]
+            pub const fn as_raw(self) -> $flag_type {
+                self.0
+            }
+            #[inline]
+            pub fn is_empty(self) -> bool {
+                self == $name::empty()
+            }
+            #[inline]
+            pub fn is_all(self) -> bool {
+                self & $name::all() == $name::all()
+            }
+            #[inline]
+            pub fn intersects(self, other: $name) -> bool {
+                self & other != $name::empty()
+            }
+            #[doc = r" Returns whether `other` is a subset of `self`"]
+            #[inline]
+            pub fn contains(self, other: $name) -> bool {
+                self & other == other
+            }
+        }
+        impl ::std::ops::BitOr for $name {
+            type Output = $name;
+            #[inline]
+            fn bitor(self, rhs: $name) -> $name {
+                $name(self.0 | rhs.0)
+            }
+        }
+        impl ::std::ops::BitOrAssign for $name {
+            #[inline]
+            fn bitor_assign(&mut self, rhs: $name) {
+                *self = *self | rhs
+            }
+        }
+        impl ::std::ops::BitAnd for $name {
+            type Output = $name;
+            #[inline]
+            fn bitand(self, rhs: $name) -> $name {
+                $name(self.0 & rhs.0)
+            }
+        }
+        impl ::std::ops::BitAndAssign for $name {
+            #[inline]
+            fn bitand_assign(&mut self, rhs: $name) {
+                *self = *self & rhs
+            }
+        }
+        impl ::std::ops::BitXor for $name {
+            type Output = $name;
+            #[inline]
+            fn bitxor(self, rhs: $name) -> $name {
+                $name(self.0 ^ rhs.0)
+            }
+        }
+        impl ::std::ops::BitXorAssign for $name {
+            #[inline]
+            fn bitxor_assign(&mut self, rhs: $name) {
+                *self = *self ^ rhs
+            }
+        }
+        impl ::std::ops::Sub for $name {
+            type Output = $name;
+            #[inline]
+            fn sub(self, rhs: $name) -> $name {
+                self & !rhs
+            }
+        }
+        impl ::std::ops::SubAssign for $name {
+            #[inline]
+            fn sub_assign(&mut self, rhs: $name) {
+                *self = *self - rhs
+            }
+        }
+        impl ::std::ops::Not for $name {
+            type Output = $name;
+            #[inline]
+            fn not(self) -> $name {
+                self ^ $name::all()
+            }
+        }
+    };
+}
+#[macro_export]
+macro_rules! handle_nondispatchable {
+    ( $ name : ident , $ ty : ident ) => {
+        handle_nondispatchable!($name, $ty, doc = "");
+    };
+    ( $ name : ident , $ ty : ident , $ doc_link : meta ) => {
+        #[repr(transparent)]
+        #[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash, Default)]
+        #[$doc_link]
+        pub struct $name(u64);
+        impl Handle for $name {
+            const TYPE: ObjectType = ObjectType::$ty;
+            fn as_raw(self) -> u64 {
+                self.0 as u64
+            }
+            fn from_raw(x: u64) -> Self {
+                $name(x as _)
+            }
+        }
+        impl $name {
+            pub const fn null() -> $name {
+                $name(0)
+            }
+        }
+        impl fmt::Pointer for $name {
+            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+                write!(f, "0x{:x}", self.0)
+            }
+        }
+        impl fmt::Debug for $name {
+            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+                write!(f, "0x{:x}", self.0)
+            }
+        }
+    };
+}
+#[macro_export]
+macro_rules! define_handle {
+    ( $ name : ident , $ ty : ident ) => {
+        define_handle!($name, $ty, doc = "");
+    };
+    ( $ name : ident , $ ty : ident , $ doc_link : meta ) => {
+        #[repr(transparent)]
+        #[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash)]
+        #[$doc_link]
+        pub struct $name(*mut u8);
+        impl Default for $name {
+            fn default() -> $name {
+                $name::null()
+            }
+        }
+        impl Handle for $name {
+            const TYPE: ObjectType = ObjectType::$ty;
+            fn as_raw(self) -> u64 {
+                self.0 as u64
+            }
+            fn from_raw(x: u64) -> Self {
+                $name(x as _)
+            }
+        }
+        unsafe impl Send for $name {}
+        unsafe impl Sync for $name {}
+        impl $name {
+            pub const fn null() -> Self {
+                $name(::std::ptr::null_mut())
+            }
+        }
+        impl fmt::Pointer for $name {
+            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+                fmt::Pointer::fmt(&self.0, f)
+            }
+        }
+        impl fmt::Debug for $name {
+            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+                fmt::Debug::fmt(&self.0, f)
+            }
+        }
+    };
+}
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetInstanceProcAddr =
+    extern "system" fn(instance: Instance, p_name: *const c_char) -> PFN_vkVoidFunction;
+pub struct StaticFn {
+    pub get_instance_proc_addr:
+        extern "system" fn(instance: Instance, p_name: *const c_char) -> PFN_vkVoidFunction,
+}
+unsafe impl Send for StaticFn {}
+unsafe impl Sync for StaticFn {}
+impl ::std::clone::Clone for StaticFn {
+    fn clone(&self) -> Self {
+        StaticFn {
+            get_instance_proc_addr: self.get_instance_proc_addr,
+        }
+    }
+}
+impl StaticFn {
+    pub fn load<F>(mut _f: F) -> Self
+    where
+        F: FnMut(&::std::ffi::CStr) -> *const c_void,
+    {
+        StaticFn {
+            get_instance_proc_addr: unsafe {
+                extern "system" fn get_instance_proc_addr(
+                    _instance: Instance,
+                    _p_name: *const c_char,
+                ) -> PFN_vkVoidFunction {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_instance_proc_addr)
+                    ))
+                }
+                let raw_name = stringify!(vkGetInstanceProcAddr);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_instance_proc_addr
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+        }
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetInstanceProcAddr.html>"]
+    pub unsafe fn get_instance_proc_addr(
+        &self,
+        instance: Instance,
+        p_name: *const c_char,
+    ) -> PFN_vkVoidFunction {
+        (self.get_instance_proc_addr)(instance, p_name)
+    }
+}
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateInstance = extern "system" fn(
+    p_create_info: *const InstanceCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_instance: *mut Instance,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkEnumerateInstanceExtensionProperties = extern "system" fn(
+    p_layer_name: *const c_char,
+    p_property_count: *mut u32,
+    p_properties: *mut ExtensionProperties,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkEnumerateInstanceLayerProperties =
+    extern "system" fn(p_property_count: *mut u32, p_properties: *mut LayerProperties) -> Result;
+pub struct EntryFnV1_0 {
+    pub create_instance: extern "system" fn(
+        p_create_info: *const InstanceCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_instance: *mut Instance,
+    ) -> Result,
+    pub enumerate_instance_extension_properties: extern "system" fn(
+        p_layer_name: *const c_char,
+        p_property_count: *mut u32,
+        p_properties: *mut ExtensionProperties,
+    ) -> Result,
+    pub enumerate_instance_layer_properties: extern "system" fn(
+        p_property_count: *mut u32,
+        p_properties: *mut LayerProperties,
+    ) -> Result,
+}
+unsafe impl Send for EntryFnV1_0 {}
+unsafe impl Sync for EntryFnV1_0 {}
+impl ::std::clone::Clone for EntryFnV1_0 {
+    fn clone(&self) -> Self {
+        EntryFnV1_0 {
+            create_instance: self.create_instance,
+            enumerate_instance_extension_properties: self.enumerate_instance_extension_properties,
+            enumerate_instance_layer_properties: self.enumerate_instance_layer_properties,
+        }
+    }
+}
+impl EntryFnV1_0 {
+    pub fn load<F>(mut _f: F) -> Self
+    where
+        F: FnMut(&::std::ffi::CStr) -> *const c_void,
+    {
+        EntryFnV1_0 {
+            create_instance: unsafe {
+                extern "system" fn create_instance(
+                    _p_create_info: *const InstanceCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_instance: *mut Instance,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_instance)))
+                }
+                let raw_name = stringify!(vkCreateInstance);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_instance
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            enumerate_instance_extension_properties: unsafe {
+                extern "system" fn enumerate_instance_extension_properties(
+                    _p_layer_name: *const c_char,
+                    _p_property_count: *mut u32,
+                    _p_properties: *mut ExtensionProperties,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(enumerate_instance_extension_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkEnumerateInstanceExtensionProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    enumerate_instance_extension_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            enumerate_instance_layer_properties: unsafe {
+                extern "system" fn enumerate_instance_layer_properties(
+                    _p_property_count: *mut u32,
+                    _p_properties: *mut LayerProperties,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(enumerate_instance_layer_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkEnumerateInstanceLayerProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    enumerate_instance_layer_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+        }
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateInstance.html>"]
+    pub unsafe fn create_instance(
+        &self,
+        p_create_info: *const InstanceCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_instance: *mut Instance,
+    ) -> Result {
+        (self.create_instance)(p_create_info, p_allocator, p_instance)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceExtensionProperties.html>"]
+    pub unsafe fn enumerate_instance_extension_properties(
+        &self,
+        p_layer_name: *const c_char,
+        p_property_count: *mut u32,
+        p_properties: *mut ExtensionProperties,
+    ) -> Result {
+        (self.enumerate_instance_extension_properties)(p_layer_name, p_property_count, p_properties)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceLayerProperties.html>"]
+    pub unsafe fn enumerate_instance_layer_properties(
+        &self,
+        p_property_count: *mut u32,
+        p_properties: *mut LayerProperties,
+    ) -> Result {
+        (self.enumerate_instance_layer_properties)(p_property_count, p_properties)
+    }
+}
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyInstance =
+    extern "system" fn(instance: Instance, p_allocator: *const AllocationCallbacks) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkEnumeratePhysicalDevices = extern "system" fn(
+    instance: Instance,
+    p_physical_device_count: *mut u32,
+    p_physical_devices: *mut PhysicalDevice,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceFeatures = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_features: *mut PhysicalDeviceFeatures,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceFormatProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    format: Format,
+    p_format_properties: *mut FormatProperties,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceImageFormatProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    format: Format,
+    ty: ImageType,
+    tiling: ImageTiling,
+    usage: ImageUsageFlags,
+    flags: ImageCreateFlags,
+    p_image_format_properties: *mut ImageFormatProperties,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_properties: *mut PhysicalDeviceProperties,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceQueueFamilyProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_queue_family_property_count: *mut u32,
+    p_queue_family_properties: *mut QueueFamilyProperties,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceMemoryProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_memory_properties: *mut PhysicalDeviceMemoryProperties,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetDeviceProcAddr =
+    extern "system" fn(device: Device, p_name: *const c_char) -> PFN_vkVoidFunction;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateDevice = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_create_info: *const DeviceCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_device: *mut Device,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkEnumerateDeviceExtensionProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_layer_name: *const c_char,
+    p_property_count: *mut u32,
+    p_properties: *mut ExtensionProperties,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkEnumerateDeviceLayerProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    p_property_count: *mut u32,
+    p_properties: *mut LayerProperties,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPhysicalDeviceSparseImageFormatProperties = extern "system" fn(
+    physical_device: PhysicalDevice,
+    format: Format,
+    ty: ImageType,
+    samples: SampleCountFlags,
+    usage: ImageUsageFlags,
+    tiling: ImageTiling,
+    p_property_count: *mut u32,
+    p_properties: *mut SparseImageFormatProperties,
+) -> c_void;
+pub struct InstanceFnV1_0 {
+    pub destroy_instance:
+        extern "system" fn(instance: Instance, p_allocator: *const AllocationCallbacks) -> c_void,
+    pub enumerate_physical_devices: extern "system" fn(
+        instance: Instance,
+        p_physical_device_count: *mut u32,
+        p_physical_devices: *mut PhysicalDevice,
+    ) -> Result,
+    pub get_physical_device_features: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_features: *mut PhysicalDeviceFeatures,
+    ) -> c_void,
+    pub get_physical_device_format_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        format: Format,
+        p_format_properties: *mut FormatProperties,
+    ) -> c_void,
+    pub get_physical_device_image_format_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        format: Format,
+        ty: ImageType,
+        tiling: ImageTiling,
+        usage: ImageUsageFlags,
+        flags: ImageCreateFlags,
+        p_image_format_properties: *mut ImageFormatProperties,
+    ) -> Result,
+    pub get_physical_device_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_properties: *mut PhysicalDeviceProperties,
+    ) -> c_void,
+    pub get_physical_device_queue_family_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_queue_family_property_count: *mut u32,
+        p_queue_family_properties: *mut QueueFamilyProperties,
+    ) -> c_void,
+    pub get_physical_device_memory_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_memory_properties: *mut PhysicalDeviceMemoryProperties,
+    ) -> c_void,
+    pub get_device_proc_addr:
+        extern "system" fn(device: Device, p_name: *const c_char) -> PFN_vkVoidFunction,
+    pub create_device: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_create_info: *const DeviceCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_device: *mut Device,
+    ) -> Result,
+    pub enumerate_device_extension_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_layer_name: *const c_char,
+        p_property_count: *mut u32,
+        p_properties: *mut ExtensionProperties,
+    ) -> Result,
+    pub enumerate_device_layer_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        p_property_count: *mut u32,
+        p_properties: *mut LayerProperties,
+    ) -> Result,
+    pub get_physical_device_sparse_image_format_properties: extern "system" fn(
+        physical_device: PhysicalDevice,
+        format: Format,
+        ty: ImageType,
+        samples: SampleCountFlags,
+        usage: ImageUsageFlags,
+        tiling: ImageTiling,
+        p_property_count: *mut u32,
+        p_properties: *mut SparseImageFormatProperties,
+    ) -> c_void,
+}
+unsafe impl Send for InstanceFnV1_0 {}
+unsafe impl Sync for InstanceFnV1_0 {}
+impl ::std::clone::Clone for InstanceFnV1_0 {
+    fn clone(&self) -> Self {
+        InstanceFnV1_0 {
+            destroy_instance: self.destroy_instance,
+            enumerate_physical_devices: self.enumerate_physical_devices,
+            get_physical_device_features: self.get_physical_device_features,
+            get_physical_device_format_properties: self.get_physical_device_format_properties,
+            get_physical_device_image_format_properties: self
+                .get_physical_device_image_format_properties,
+            get_physical_device_properties: self.get_physical_device_properties,
+            get_physical_device_queue_family_properties: self
+                .get_physical_device_queue_family_properties,
+            get_physical_device_memory_properties: self.get_physical_device_memory_properties,
+            get_device_proc_addr: self.get_device_proc_addr,
+            create_device: self.create_device,
+            enumerate_device_extension_properties: self.enumerate_device_extension_properties,
+            enumerate_device_layer_properties: self.enumerate_device_layer_properties,
+            get_physical_device_sparse_image_format_properties: self
+                .get_physical_device_sparse_image_format_properties,
+        }
+    }
+}
+impl InstanceFnV1_0 {
+    pub fn load<F>(mut _f: F) -> Self
+    where
+        F: FnMut(&::std::ffi::CStr) -> *const c_void,
+    {
+        InstanceFnV1_0 {
+            destroy_instance: unsafe {
+                extern "system" fn destroy_instance(
+                    _instance: Instance,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_instance)))
+                }
+                let raw_name = stringify!(vkDestroyInstance);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_instance
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            enumerate_physical_devices: unsafe {
+                extern "system" fn enumerate_physical_devices(
+                    _instance: Instance,
+                    _p_physical_device_count: *mut u32,
+                    _p_physical_devices: *mut PhysicalDevice,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(enumerate_physical_devices)
+                    ))
+                }
+                let raw_name = stringify!(vkEnumeratePhysicalDevices);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    enumerate_physical_devices
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_features: unsafe {
+                extern "system" fn get_physical_device_features(
+                    _physical_device: PhysicalDevice,
+                    _p_features: *mut PhysicalDeviceFeatures,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_features)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceFeatures);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_features
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_format_properties: unsafe {
+                extern "system" fn get_physical_device_format_properties(
+                    _physical_device: PhysicalDevice,
+                    _format: Format,
+                    _p_format_properties: *mut FormatProperties,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_format_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceFormatProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_format_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_image_format_properties: unsafe {
+                extern "system" fn get_physical_device_image_format_properties(
+                    _physical_device: PhysicalDevice,
+                    _format: Format,
+                    _ty: ImageType,
+                    _tiling: ImageTiling,
+                    _usage: ImageUsageFlags,
+                    _flags: ImageCreateFlags,
+                    _p_image_format_properties: *mut ImageFormatProperties,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_image_format_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceImageFormatProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_image_format_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_properties: unsafe {
+                extern "system" fn get_physical_device_properties(
+                    _physical_device: PhysicalDevice,
+                    _p_properties: *mut PhysicalDeviceProperties,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_queue_family_properties: unsafe {
+                extern "system" fn get_physical_device_queue_family_properties(
+                    _physical_device: PhysicalDevice,
+                    _p_queue_family_property_count: *mut u32,
+                    _p_queue_family_properties: *mut QueueFamilyProperties,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_queue_family_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceQueueFamilyProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_queue_family_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_memory_properties: unsafe {
+                extern "system" fn get_physical_device_memory_properties(
+                    _physical_device: PhysicalDevice,
+                    _p_memory_properties: *mut PhysicalDeviceMemoryProperties,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_memory_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceMemoryProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_memory_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_device_proc_addr: unsafe {
+                extern "system" fn get_device_proc_addr(
+                    _device: Device,
+                    _p_name: *const c_char,
+                ) -> PFN_vkVoidFunction {
+                    panic!(concat!("Unable to load ", stringify!(get_device_proc_addr)))
+                }
+                let raw_name = stringify!(vkGetDeviceProcAddr);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_device_proc_addr
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_device: unsafe {
+                extern "system" fn create_device(
+                    _physical_device: PhysicalDevice,
+                    _p_create_info: *const DeviceCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_device: *mut Device,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_device)))
+                }
+                let raw_name = stringify!(vkCreateDevice);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_device
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            enumerate_device_extension_properties: unsafe {
+                extern "system" fn enumerate_device_extension_properties(
+                    _physical_device: PhysicalDevice,
+                    _p_layer_name: *const c_char,
+                    _p_property_count: *mut u32,
+                    _p_properties: *mut ExtensionProperties,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(enumerate_device_extension_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkEnumerateDeviceExtensionProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    enumerate_device_extension_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            enumerate_device_layer_properties: unsafe {
+                extern "system" fn enumerate_device_layer_properties(
+                    _physical_device: PhysicalDevice,
+                    _p_property_count: *mut u32,
+                    _p_properties: *mut LayerProperties,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(enumerate_device_layer_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkEnumerateDeviceLayerProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    enumerate_device_layer_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_physical_device_sparse_image_format_properties: unsafe {
+                extern "system" fn get_physical_device_sparse_image_format_properties(
+                    _physical_device: PhysicalDevice,
+                    _format: Format,
+                    _ty: ImageType,
+                    _samples: SampleCountFlags,
+                    _usage: ImageUsageFlags,
+                    _tiling: ImageTiling,
+                    _p_property_count: *mut u32,
+                    _p_properties: *mut SparseImageFormatProperties,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_physical_device_sparse_image_format_properties)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPhysicalDeviceSparseImageFormatProperties);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_physical_device_sparse_image_format_properties
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+        }
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyInstance.html>"]
+    pub unsafe fn destroy_instance(
+        &self,
+        instance: Instance,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_instance)(instance, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumeratePhysicalDevices.html>"]
+    pub unsafe fn enumerate_physical_devices(
+        &self,
+        instance: Instance,
+        p_physical_device_count: *mut u32,
+        p_physical_devices: *mut PhysicalDevice,
+    ) -> Result {
+        (self.enumerate_physical_devices)(instance, p_physical_device_count, p_physical_devices)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceFeatures.html>"]
+    pub unsafe fn get_physical_device_features(
+        &self,
+        physical_device: PhysicalDevice,
+        p_features: *mut PhysicalDeviceFeatures,
+    ) -> c_void {
+        (self.get_physical_device_features)(physical_device, p_features)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceFormatProperties.html>"]
+    pub unsafe fn get_physical_device_format_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        format: Format,
+        p_format_properties: *mut FormatProperties,
+    ) -> c_void {
+        (self.get_physical_device_format_properties)(physical_device, format, p_format_properties)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceImageFormatProperties.html>"]
+    pub unsafe fn get_physical_device_image_format_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        format: Format,
+        ty: ImageType,
+        tiling: ImageTiling,
+        usage: ImageUsageFlags,
+        flags: ImageCreateFlags,
+        p_image_format_properties: *mut ImageFormatProperties,
+    ) -> Result {
+        (self.get_physical_device_image_format_properties)(
+            physical_device,
+            format,
+            ty,
+            tiling,
+            usage,
+            flags,
+            p_image_format_properties,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceProperties.html>"]
+    pub unsafe fn get_physical_device_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        p_properties: *mut PhysicalDeviceProperties,
+    ) -> c_void {
+        (self.get_physical_device_properties)(physical_device, p_properties)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html>"]
+    pub unsafe fn get_physical_device_queue_family_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        p_queue_family_property_count: *mut u32,
+        p_queue_family_properties: *mut QueueFamilyProperties,
+    ) -> c_void {
+        (self.get_physical_device_queue_family_properties)(
+            physical_device,
+            p_queue_family_property_count,
+            p_queue_family_properties,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceMemoryProperties.html>"]
+    pub unsafe fn get_physical_device_memory_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        p_memory_properties: *mut PhysicalDeviceMemoryProperties,
+    ) -> c_void {
+        (self.get_physical_device_memory_properties)(physical_device, p_memory_properties)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceProcAddr.html>"]
+    pub unsafe fn get_device_proc_addr(
+        &self,
+        device: Device,
+        p_name: *const c_char,
+    ) -> PFN_vkVoidFunction {
+        (self.get_device_proc_addr)(device, p_name)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDevice.html>"]
+    pub unsafe fn create_device(
+        &self,
+        physical_device: PhysicalDevice,
+        p_create_info: *const DeviceCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_device: *mut Device,
+    ) -> Result {
+        (self.create_device)(physical_device, p_create_info, p_allocator, p_device)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateDeviceExtensionProperties.html>"]
+    pub unsafe fn enumerate_device_extension_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        p_layer_name: *const c_char,
+        p_property_count: *mut u32,
+        p_properties: *mut ExtensionProperties,
+    ) -> Result {
+        (self.enumerate_device_extension_properties)(
+            physical_device,
+            p_layer_name,
+            p_property_count,
+            p_properties,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateDeviceLayerProperties.html>"]
+    pub unsafe fn enumerate_device_layer_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        p_property_count: *mut u32,
+        p_properties: *mut LayerProperties,
+    ) -> Result {
+        (self.enumerate_device_layer_properties)(physical_device, p_property_count, p_properties)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html>"]
+    pub unsafe fn get_physical_device_sparse_image_format_properties(
+        &self,
+        physical_device: PhysicalDevice,
+        format: Format,
+        ty: ImageType,
+        samples: SampleCountFlags,
+        usage: ImageUsageFlags,
+        tiling: ImageTiling,
+        p_property_count: *mut u32,
+        p_properties: *mut SparseImageFormatProperties,
+    ) -> c_void {
+        (self.get_physical_device_sparse_image_format_properties)(
+            physical_device,
+            format,
+            ty,
+            samples,
+            usage,
+            tiling,
+            p_property_count,
+            p_properties,
+        )
+    }
+}
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyDevice =
+    extern "system" fn(device: Device, p_allocator: *const AllocationCallbacks) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetDeviceQueue = extern "system" fn(
+    device: Device,
+    queue_family_index: u32,
+    queue_index: u32,
+    p_queue: *mut Queue,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkQueueSubmit = extern "system" fn(
+    queue: Queue,
+    submit_count: u32,
+    p_submits: *const SubmitInfo,
+    fence: Fence,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkQueueWaitIdle = extern "system" fn(queue: Queue) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDeviceWaitIdle = extern "system" fn(device: Device) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkAllocateMemory = extern "system" fn(
+    device: Device,
+    p_allocate_info: *const MemoryAllocateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_memory: *mut DeviceMemory,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkFreeMemory = extern "system" fn(
+    device: Device,
+    memory: DeviceMemory,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkMapMemory = extern "system" fn(
+    device: Device,
+    memory: DeviceMemory,
+    offset: DeviceSize,
+    size: DeviceSize,
+    flags: MemoryMapFlags,
+    pp_data: *mut *mut c_void,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkUnmapMemory = extern "system" fn(device: Device, memory: DeviceMemory) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkFlushMappedMemoryRanges = extern "system" fn(
+    device: Device,
+    memory_range_count: u32,
+    p_memory_ranges: *const MappedMemoryRange,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkInvalidateMappedMemoryRanges = extern "system" fn(
+    device: Device,
+    memory_range_count: u32,
+    p_memory_ranges: *const MappedMemoryRange,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetDeviceMemoryCommitment = extern "system" fn(
+    device: Device,
+    memory: DeviceMemory,
+    p_committed_memory_in_bytes: *mut DeviceSize,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkBindBufferMemory = extern "system" fn(
+    device: Device,
+    buffer: Buffer,
+    memory: DeviceMemory,
+    memory_offset: DeviceSize,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkBindImageMemory = extern "system" fn(
+    device: Device,
+    image: Image,
+    memory: DeviceMemory,
+    memory_offset: DeviceSize,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetBufferMemoryRequirements = extern "system" fn(
+    device: Device,
+    buffer: Buffer,
+    p_memory_requirements: *mut MemoryRequirements,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetImageMemoryRequirements = extern "system" fn(
+    device: Device,
+    image: Image,
+    p_memory_requirements: *mut MemoryRequirements,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetImageSparseMemoryRequirements = extern "system" fn(
+    device: Device,
+    image: Image,
+    p_sparse_memory_requirement_count: *mut u32,
+    p_sparse_memory_requirements: *mut SparseImageMemoryRequirements,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkQueueBindSparse = extern "system" fn(
+    queue: Queue,
+    bind_info_count: u32,
+    p_bind_info: *const BindSparseInfo,
+    fence: Fence,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateFence = extern "system" fn(
+    device: Device,
+    p_create_info: *const FenceCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_fence: *mut Fence,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyFence = extern "system" fn(
+    device: Device,
+    fence: Fence,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkResetFences =
+    extern "system" fn(device: Device, fence_count: u32, p_fences: *const Fence) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetFenceStatus = extern "system" fn(device: Device, fence: Fence) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkWaitForFences = extern "system" fn(
+    device: Device,
+    fence_count: u32,
+    p_fences: *const Fence,
+    wait_all: Bool32,
+    timeout: u64,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateSemaphore = extern "system" fn(
+    device: Device,
+    p_create_info: *const SemaphoreCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_semaphore: *mut Semaphore,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroySemaphore = extern "system" fn(
+    device: Device,
+    semaphore: Semaphore,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateEvent = extern "system" fn(
+    device: Device,
+    p_create_info: *const EventCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_event: *mut Event,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyEvent = extern "system" fn(
+    device: Device,
+    event: Event,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetEventStatus = extern "system" fn(device: Device, event: Event) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkSetEvent = extern "system" fn(device: Device, event: Event) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkResetEvent = extern "system" fn(device: Device, event: Event) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateQueryPool = extern "system" fn(
+    device: Device,
+    p_create_info: *const QueryPoolCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_query_pool: *mut QueryPool,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyQueryPool = extern "system" fn(
+    device: Device,
+    query_pool: QueryPool,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetQueryPoolResults = extern "system" fn(
+    device: Device,
+    query_pool: QueryPool,
+    first_query: u32,
+    query_count: u32,
+    data_size: usize,
+    p_data: *mut c_void,
+    stride: DeviceSize,
+    flags: QueryResultFlags,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateBuffer = extern "system" fn(
+    device: Device,
+    p_create_info: *const BufferCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_buffer: *mut Buffer,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyBuffer = extern "system" fn(
+    device: Device,
+    buffer: Buffer,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateBufferView = extern "system" fn(
+    device: Device,
+    p_create_info: *const BufferViewCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_view: *mut BufferView,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyBufferView = extern "system" fn(
+    device: Device,
+    buffer_view: BufferView,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateImage = extern "system" fn(
+    device: Device,
+    p_create_info: *const ImageCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_image: *mut Image,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyImage = extern "system" fn(
+    device: Device,
+    image: Image,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetImageSubresourceLayout = extern "system" fn(
+    device: Device,
+    image: Image,
+    p_subresource: *const ImageSubresource,
+    p_layout: *mut SubresourceLayout,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateImageView = extern "system" fn(
+    device: Device,
+    p_create_info: *const ImageViewCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_view: *mut ImageView,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyImageView = extern "system" fn(
+    device: Device,
+    image_view: ImageView,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateShaderModule = extern "system" fn(
+    device: Device,
+    p_create_info: *const ShaderModuleCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_shader_module: *mut ShaderModule,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyShaderModule = extern "system" fn(
+    device: Device,
+    shader_module: ShaderModule,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreatePipelineCache = extern "system" fn(
+    device: Device,
+    p_create_info: *const PipelineCacheCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_pipeline_cache: *mut PipelineCache,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyPipelineCache = extern "system" fn(
+    device: Device,
+    pipeline_cache: PipelineCache,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetPipelineCacheData = extern "system" fn(
+    device: Device,
+    pipeline_cache: PipelineCache,
+    p_data_size: *mut usize,
+    p_data: *mut c_void,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkMergePipelineCaches = extern "system" fn(
+    device: Device,
+    dst_cache: PipelineCache,
+    src_cache_count: u32,
+    p_src_caches: *const PipelineCache,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateGraphicsPipelines = extern "system" fn(
+    device: Device,
+    pipeline_cache: PipelineCache,
+    create_info_count: u32,
+    p_create_infos: *const GraphicsPipelineCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_pipelines: *mut Pipeline,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateComputePipelines = extern "system" fn(
+    device: Device,
+    pipeline_cache: PipelineCache,
+    create_info_count: u32,
+    p_create_infos: *const ComputePipelineCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_pipelines: *mut Pipeline,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyPipeline = extern "system" fn(
+    device: Device,
+    pipeline: Pipeline,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreatePipelineLayout = extern "system" fn(
+    device: Device,
+    p_create_info: *const PipelineLayoutCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_pipeline_layout: *mut PipelineLayout,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyPipelineLayout = extern "system" fn(
+    device: Device,
+    pipeline_layout: PipelineLayout,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateSampler = extern "system" fn(
+    device: Device,
+    p_create_info: *const SamplerCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_sampler: *mut Sampler,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroySampler = extern "system" fn(
+    device: Device,
+    sampler: Sampler,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateDescriptorSetLayout = extern "system" fn(
+    device: Device,
+    p_create_info: *const DescriptorSetLayoutCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_set_layout: *mut DescriptorSetLayout,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyDescriptorSetLayout = extern "system" fn(
+    device: Device,
+    descriptor_set_layout: DescriptorSetLayout,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateDescriptorPool = extern "system" fn(
+    device: Device,
+    p_create_info: *const DescriptorPoolCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_descriptor_pool: *mut DescriptorPool,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyDescriptorPool = extern "system" fn(
+    device: Device,
+    descriptor_pool: DescriptorPool,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkResetDescriptorPool = extern "system" fn(
+    device: Device,
+    descriptor_pool: DescriptorPool,
+    flags: DescriptorPoolResetFlags,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkAllocateDescriptorSets = extern "system" fn(
+    device: Device,
+    p_allocate_info: *const DescriptorSetAllocateInfo,
+    p_descriptor_sets: *mut DescriptorSet,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkFreeDescriptorSets = extern "system" fn(
+    device: Device,
+    descriptor_pool: DescriptorPool,
+    descriptor_set_count: u32,
+    p_descriptor_sets: *const DescriptorSet,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkUpdateDescriptorSets = extern "system" fn(
+    device: Device,
+    descriptor_write_count: u32,
+    p_descriptor_writes: *const WriteDescriptorSet,
+    descriptor_copy_count: u32,
+    p_descriptor_copies: *const CopyDescriptorSet,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateFramebuffer = extern "system" fn(
+    device: Device,
+    p_create_info: *const FramebufferCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_framebuffer: *mut Framebuffer,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyFramebuffer = extern "system" fn(
+    device: Device,
+    framebuffer: Framebuffer,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateRenderPass = extern "system" fn(
+    device: Device,
+    p_create_info: *const RenderPassCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_render_pass: *mut RenderPass,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyRenderPass = extern "system" fn(
+    device: Device,
+    render_pass: RenderPass,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkGetRenderAreaGranularity = extern "system" fn(
+    device: Device,
+    render_pass: RenderPass,
+    p_granularity: *mut Extent2D,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCreateCommandPool = extern "system" fn(
+    device: Device,
+    p_create_info: *const CommandPoolCreateInfo,
+    p_allocator: *const AllocationCallbacks,
+    p_command_pool: *mut CommandPool,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkDestroyCommandPool = extern "system" fn(
+    device: Device,
+    command_pool: CommandPool,
+    p_allocator: *const AllocationCallbacks,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkResetCommandPool = extern "system" fn(
+    device: Device,
+    command_pool: CommandPool,
+    flags: CommandPoolResetFlags,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkAllocateCommandBuffers = extern "system" fn(
+    device: Device,
+    p_allocate_info: *const CommandBufferAllocateInfo,
+    p_command_buffers: *mut CommandBuffer,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkFreeCommandBuffers = extern "system" fn(
+    device: Device,
+    command_pool: CommandPool,
+    command_buffer_count: u32,
+    p_command_buffers: *const CommandBuffer,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkBeginCommandBuffer = extern "system" fn(
+    command_buffer: CommandBuffer,
+    p_begin_info: *const CommandBufferBeginInfo,
+) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkEndCommandBuffer = extern "system" fn(command_buffer: CommandBuffer) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkResetCommandBuffer =
+    extern "system" fn(command_buffer: CommandBuffer, flags: CommandBufferResetFlags) -> Result;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBindPipeline = extern "system" fn(
+    command_buffer: CommandBuffer,
+    pipeline_bind_point: PipelineBindPoint,
+    pipeline: Pipeline,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetViewport = extern "system" fn(
+    command_buffer: CommandBuffer,
+    first_viewport: u32,
+    viewport_count: u32,
+    p_viewports: *const Viewport,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetScissor = extern "system" fn(
+    command_buffer: CommandBuffer,
+    first_scissor: u32,
+    scissor_count: u32,
+    p_scissors: *const Rect2D,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetLineWidth =
+    extern "system" fn(command_buffer: CommandBuffer, line_width: f32) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetDepthBias = extern "system" fn(
+    command_buffer: CommandBuffer,
+    depth_bias_constant_factor: f32,
+    depth_bias_clamp: f32,
+    depth_bias_slope_factor: f32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetBlendConstants =
+    extern "system" fn(command_buffer: CommandBuffer, blend_constants: &[f32; 4]) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetDepthBounds = extern "system" fn(
+    command_buffer: CommandBuffer,
+    min_depth_bounds: f32,
+    max_depth_bounds: f32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetStencilCompareMask = extern "system" fn(
+    command_buffer: CommandBuffer,
+    face_mask: StencilFaceFlags,
+    compare_mask: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetStencilWriteMask = extern "system" fn(
+    command_buffer: CommandBuffer,
+    face_mask: StencilFaceFlags,
+    write_mask: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetStencilReference = extern "system" fn(
+    command_buffer: CommandBuffer,
+    face_mask: StencilFaceFlags,
+    reference: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBindDescriptorSets = extern "system" fn(
+    command_buffer: CommandBuffer,
+    pipeline_bind_point: PipelineBindPoint,
+    layout: PipelineLayout,
+    first_set: u32,
+    descriptor_set_count: u32,
+    p_descriptor_sets: *const DescriptorSet,
+    dynamic_offset_count: u32,
+    p_dynamic_offsets: *const u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBindIndexBuffer = extern "system" fn(
+    command_buffer: CommandBuffer,
+    buffer: Buffer,
+    offset: DeviceSize,
+    index_type: IndexType,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBindVertexBuffers = extern "system" fn(
+    command_buffer: CommandBuffer,
+    first_binding: u32,
+    binding_count: u32,
+    p_buffers: *const Buffer,
+    p_offsets: *const DeviceSize,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdDraw = extern "system" fn(
+    command_buffer: CommandBuffer,
+    vertex_count: u32,
+    instance_count: u32,
+    first_vertex: u32,
+    first_instance: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdDrawIndexed = extern "system" fn(
+    command_buffer: CommandBuffer,
+    index_count: u32,
+    instance_count: u32,
+    first_index: u32,
+    vertex_offset: i32,
+    first_instance: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdDrawIndirect = extern "system" fn(
+    command_buffer: CommandBuffer,
+    buffer: Buffer,
+    offset: DeviceSize,
+    draw_count: u32,
+    stride: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdDrawIndexedIndirect = extern "system" fn(
+    command_buffer: CommandBuffer,
+    buffer: Buffer,
+    offset: DeviceSize,
+    draw_count: u32,
+    stride: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdDispatch = extern "system" fn(
+    command_buffer: CommandBuffer,
+    group_count_x: u32,
+    group_count_y: u32,
+    group_count_z: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdDispatchIndirect =
+    extern "system" fn(command_buffer: CommandBuffer, buffer: Buffer, offset: DeviceSize) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdCopyBuffer = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_buffer: Buffer,
+    dst_buffer: Buffer,
+    region_count: u32,
+    p_regions: *const BufferCopy,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdCopyImage = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_image: Image,
+    src_image_layout: ImageLayout,
+    dst_image: Image,
+    dst_image_layout: ImageLayout,
+    region_count: u32,
+    p_regions: *const ImageCopy,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBlitImage = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_image: Image,
+    src_image_layout: ImageLayout,
+    dst_image: Image,
+    dst_image_layout: ImageLayout,
+    region_count: u32,
+    p_regions: *const ImageBlit,
+    filter: Filter,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdCopyBufferToImage = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_buffer: Buffer,
+    dst_image: Image,
+    dst_image_layout: ImageLayout,
+    region_count: u32,
+    p_regions: *const BufferImageCopy,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdCopyImageToBuffer = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_image: Image,
+    src_image_layout: ImageLayout,
+    dst_buffer: Buffer,
+    region_count: u32,
+    p_regions: *const BufferImageCopy,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdUpdateBuffer = extern "system" fn(
+    command_buffer: CommandBuffer,
+    dst_buffer: Buffer,
+    dst_offset: DeviceSize,
+    data_size: DeviceSize,
+    p_data: *const c_void,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdFillBuffer = extern "system" fn(
+    command_buffer: CommandBuffer,
+    dst_buffer: Buffer,
+    dst_offset: DeviceSize,
+    size: DeviceSize,
+    data: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdClearColorImage = extern "system" fn(
+    command_buffer: CommandBuffer,
+    image: Image,
+    image_layout: ImageLayout,
+    p_color: *const ClearColorValue,
+    range_count: u32,
+    p_ranges: *const ImageSubresourceRange,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdClearDepthStencilImage = extern "system" fn(
+    command_buffer: CommandBuffer,
+    image: Image,
+    image_layout: ImageLayout,
+    p_depth_stencil: *const ClearDepthStencilValue,
+    range_count: u32,
+    p_ranges: *const ImageSubresourceRange,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdClearAttachments = extern "system" fn(
+    command_buffer: CommandBuffer,
+    attachment_count: u32,
+    p_attachments: *const ClearAttachment,
+    rect_count: u32,
+    p_rects: *const ClearRect,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdResolveImage = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_image: Image,
+    src_image_layout: ImageLayout,
+    dst_image: Image,
+    dst_image_layout: ImageLayout,
+    region_count: u32,
+    p_regions: *const ImageResolve,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdSetEvent = extern "system" fn(
+    command_buffer: CommandBuffer,
+    event: Event,
+    stage_mask: PipelineStageFlags,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdResetEvent = extern "system" fn(
+    command_buffer: CommandBuffer,
+    event: Event,
+    stage_mask: PipelineStageFlags,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdWaitEvents = extern "system" fn(
+    command_buffer: CommandBuffer,
+    event_count: u32,
+    p_events: *const Event,
+    src_stage_mask: PipelineStageFlags,
+    dst_stage_mask: PipelineStageFlags,
+    memory_barrier_count: u32,
+    p_memory_barriers: *const MemoryBarrier,
+    buffer_memory_barrier_count: u32,
+    p_buffer_memory_barriers: *const BufferMemoryBarrier,
+    image_memory_barrier_count: u32,
+    p_image_memory_barriers: *const ImageMemoryBarrier,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdPipelineBarrier = extern "system" fn(
+    command_buffer: CommandBuffer,
+    src_stage_mask: PipelineStageFlags,
+    dst_stage_mask: PipelineStageFlags,
+    dependency_flags: DependencyFlags,
+    memory_barrier_count: u32,
+    p_memory_barriers: *const MemoryBarrier,
+    buffer_memory_barrier_count: u32,
+    p_buffer_memory_barriers: *const BufferMemoryBarrier,
+    image_memory_barrier_count: u32,
+    p_image_memory_barriers: *const ImageMemoryBarrier,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBeginQuery = extern "system" fn(
+    command_buffer: CommandBuffer,
+    query_pool: QueryPool,
+    query: u32,
+    flags: QueryControlFlags,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdEndQuery =
+    extern "system" fn(command_buffer: CommandBuffer, query_pool: QueryPool, query: u32) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdResetQueryPool = extern "system" fn(
+    command_buffer: CommandBuffer,
+    query_pool: QueryPool,
+    first_query: u32,
+    query_count: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdWriteTimestamp = extern "system" fn(
+    command_buffer: CommandBuffer,
+    pipeline_stage: PipelineStageFlags,
+    query_pool: QueryPool,
+    query: u32,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdCopyQueryPoolResults = extern "system" fn(
+    command_buffer: CommandBuffer,
+    query_pool: QueryPool,
+    first_query: u32,
+    query_count: u32,
+    dst_buffer: Buffer,
+    dst_offset: DeviceSize,
+    stride: DeviceSize,
+    flags: QueryResultFlags,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdPushConstants = extern "system" fn(
+    command_buffer: CommandBuffer,
+    layout: PipelineLayout,
+    stage_flags: ShaderStageFlags,
+    offset: u32,
+    size: u32,
+    p_values: *const c_void,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdBeginRenderPass = extern "system" fn(
+    command_buffer: CommandBuffer,
+    p_render_pass_begin: *const RenderPassBeginInfo,
+    contents: SubpassContents,
+) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdNextSubpass =
+    extern "system" fn(command_buffer: CommandBuffer, contents: SubpassContents) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdEndRenderPass = extern "system" fn(command_buffer: CommandBuffer) -> c_void;
+#[allow(non_camel_case_types)]
+pub type PFN_vkCmdExecuteCommands = extern "system" fn(
+    command_buffer: CommandBuffer,
+    command_buffer_count: u32,
+    p_command_buffers: *const CommandBuffer,
+) -> c_void;
+pub struct DeviceFnV1_0 {
+    pub destroy_device:
+        extern "system" fn(device: Device, p_allocator: *const AllocationCallbacks) -> c_void,
+    pub get_device_queue: extern "system" fn(
+        device: Device,
+        queue_family_index: u32,
+        queue_index: u32,
+        p_queue: *mut Queue,
+    ) -> c_void,
+    pub queue_submit: extern "system" fn(
+        queue: Queue,
+        submit_count: u32,
+        p_submits: *const SubmitInfo,
+        fence: Fence,
+    ) -> Result,
+    pub queue_wait_idle: extern "system" fn(queue: Queue) -> Result,
+    pub device_wait_idle: extern "system" fn(device: Device) -> Result,
+    pub allocate_memory: extern "system" fn(
+        device: Device,
+        p_allocate_info: *const MemoryAllocateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_memory: *mut DeviceMemory,
+    ) -> Result,
+    pub free_memory: extern "system" fn(
+        device: Device,
+        memory: DeviceMemory,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub map_memory: extern "system" fn(
+        device: Device,
+        memory: DeviceMemory,
+        offset: DeviceSize,
+        size: DeviceSize,
+        flags: MemoryMapFlags,
+        pp_data: *mut *mut c_void,
+    ) -> Result,
+    pub unmap_memory: extern "system" fn(device: Device, memory: DeviceMemory) -> c_void,
+    pub flush_mapped_memory_ranges: extern "system" fn(
+        device: Device,
+        memory_range_count: u32,
+        p_memory_ranges: *const MappedMemoryRange,
+    ) -> Result,
+    pub invalidate_mapped_memory_ranges: extern "system" fn(
+        device: Device,
+        memory_range_count: u32,
+        p_memory_ranges: *const MappedMemoryRange,
+    ) -> Result,
+    pub get_device_memory_commitment: extern "system" fn(
+        device: Device,
+        memory: DeviceMemory,
+        p_committed_memory_in_bytes: *mut DeviceSize,
+    ) -> c_void,
+    pub bind_buffer_memory: extern "system" fn(
+        device: Device,
+        buffer: Buffer,
+        memory: DeviceMemory,
+        memory_offset: DeviceSize,
+    ) -> Result,
+    pub bind_image_memory: extern "system" fn(
+        device: Device,
+        image: Image,
+        memory: DeviceMemory,
+        memory_offset: DeviceSize,
+    ) -> Result,
+    pub get_buffer_memory_requirements: extern "system" fn(
+        device: Device,
+        buffer: Buffer,
+        p_memory_requirements: *mut MemoryRequirements,
+    ) -> c_void,
+    pub get_image_memory_requirements: extern "system" fn(
+        device: Device,
+        image: Image,
+        p_memory_requirements: *mut MemoryRequirements,
+    ) -> c_void,
+    pub get_image_sparse_memory_requirements: extern "system" fn(
+        device: Device,
+        image: Image,
+        p_sparse_memory_requirement_count: *mut u32,
+        p_sparse_memory_requirements: *mut SparseImageMemoryRequirements,
+    ) -> c_void,
+    pub queue_bind_sparse: extern "system" fn(
+        queue: Queue,
+        bind_info_count: u32,
+        p_bind_info: *const BindSparseInfo,
+        fence: Fence,
+    ) -> Result,
+    pub create_fence: extern "system" fn(
+        device: Device,
+        p_create_info: *const FenceCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_fence: *mut Fence,
+    ) -> Result,
+    pub destroy_fence: extern "system" fn(
+        device: Device,
+        fence: Fence,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub reset_fences:
+        extern "system" fn(device: Device, fence_count: u32, p_fences: *const Fence) -> Result,
+    pub get_fence_status: extern "system" fn(device: Device, fence: Fence) -> Result,
+    pub wait_for_fences: extern "system" fn(
+        device: Device,
+        fence_count: u32,
+        p_fences: *const Fence,
+        wait_all: Bool32,
+        timeout: u64,
+    ) -> Result,
+    pub create_semaphore: extern "system" fn(
+        device: Device,
+        p_create_info: *const SemaphoreCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_semaphore: *mut Semaphore,
+    ) -> Result,
+    pub destroy_semaphore: extern "system" fn(
+        device: Device,
+        semaphore: Semaphore,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_event: extern "system" fn(
+        device: Device,
+        p_create_info: *const EventCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_event: *mut Event,
+    ) -> Result,
+    pub destroy_event: extern "system" fn(
+        device: Device,
+        event: Event,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub get_event_status: extern "system" fn(device: Device, event: Event) -> Result,
+    pub set_event: extern "system" fn(device: Device, event: Event) -> Result,
+    pub reset_event: extern "system" fn(device: Device, event: Event) -> Result,
+    pub create_query_pool: extern "system" fn(
+        device: Device,
+        p_create_info: *const QueryPoolCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_query_pool: *mut QueryPool,
+    ) -> Result,
+    pub destroy_query_pool: extern "system" fn(
+        device: Device,
+        query_pool: QueryPool,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub get_query_pool_results: extern "system" fn(
+        device: Device,
+        query_pool: QueryPool,
+        first_query: u32,
+        query_count: u32,
+        data_size: usize,
+        p_data: *mut c_void,
+        stride: DeviceSize,
+        flags: QueryResultFlags,
+    ) -> Result,
+    pub create_buffer: extern "system" fn(
+        device: Device,
+        p_create_info: *const BufferCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_buffer: *mut Buffer,
+    ) -> Result,
+    pub destroy_buffer: extern "system" fn(
+        device: Device,
+        buffer: Buffer,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_buffer_view: extern "system" fn(
+        device: Device,
+        p_create_info: *const BufferViewCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_view: *mut BufferView,
+    ) -> Result,
+    pub destroy_buffer_view: extern "system" fn(
+        device: Device,
+        buffer_view: BufferView,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_image: extern "system" fn(
+        device: Device,
+        p_create_info: *const ImageCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_image: *mut Image,
+    ) -> Result,
+    pub destroy_image: extern "system" fn(
+        device: Device,
+        image: Image,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub get_image_subresource_layout: extern "system" fn(
+        device: Device,
+        image: Image,
+        p_subresource: *const ImageSubresource,
+        p_layout: *mut SubresourceLayout,
+    ) -> c_void,
+    pub create_image_view: extern "system" fn(
+        device: Device,
+        p_create_info: *const ImageViewCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_view: *mut ImageView,
+    ) -> Result,
+    pub destroy_image_view: extern "system" fn(
+        device: Device,
+        image_view: ImageView,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_shader_module: extern "system" fn(
+        device: Device,
+        p_create_info: *const ShaderModuleCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_shader_module: *mut ShaderModule,
+    ) -> Result,
+    pub destroy_shader_module: extern "system" fn(
+        device: Device,
+        shader_module: ShaderModule,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_pipeline_cache: extern "system" fn(
+        device: Device,
+        p_create_info: *const PipelineCacheCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipeline_cache: *mut PipelineCache,
+    ) -> Result,
+    pub destroy_pipeline_cache: extern "system" fn(
+        device: Device,
+        pipeline_cache: PipelineCache,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub get_pipeline_cache_data: extern "system" fn(
+        device: Device,
+        pipeline_cache: PipelineCache,
+        p_data_size: *mut usize,
+        p_data: *mut c_void,
+    ) -> Result,
+    pub merge_pipeline_caches: extern "system" fn(
+        device: Device,
+        dst_cache: PipelineCache,
+        src_cache_count: u32,
+        p_src_caches: *const PipelineCache,
+    ) -> Result,
+    pub create_graphics_pipelines: extern "system" fn(
+        device: Device,
+        pipeline_cache: PipelineCache,
+        create_info_count: u32,
+        p_create_infos: *const GraphicsPipelineCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipelines: *mut Pipeline,
+    ) -> Result,
+    pub create_compute_pipelines: extern "system" fn(
+        device: Device,
+        pipeline_cache: PipelineCache,
+        create_info_count: u32,
+        p_create_infos: *const ComputePipelineCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipelines: *mut Pipeline,
+    ) -> Result,
+    pub destroy_pipeline: extern "system" fn(
+        device: Device,
+        pipeline: Pipeline,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_pipeline_layout: extern "system" fn(
+        device: Device,
+        p_create_info: *const PipelineLayoutCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipeline_layout: *mut PipelineLayout,
+    ) -> Result,
+    pub destroy_pipeline_layout: extern "system" fn(
+        device: Device,
+        pipeline_layout: PipelineLayout,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_sampler: extern "system" fn(
+        device: Device,
+        p_create_info: *const SamplerCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_sampler: *mut Sampler,
+    ) -> Result,
+    pub destroy_sampler: extern "system" fn(
+        device: Device,
+        sampler: Sampler,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_descriptor_set_layout: extern "system" fn(
+        device: Device,
+        p_create_info: *const DescriptorSetLayoutCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_set_layout: *mut DescriptorSetLayout,
+    ) -> Result,
+    pub destroy_descriptor_set_layout: extern "system" fn(
+        device: Device,
+        descriptor_set_layout: DescriptorSetLayout,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_descriptor_pool: extern "system" fn(
+        device: Device,
+        p_create_info: *const DescriptorPoolCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_descriptor_pool: *mut DescriptorPool,
+    ) -> Result,
+    pub destroy_descriptor_pool: extern "system" fn(
+        device: Device,
+        descriptor_pool: DescriptorPool,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub reset_descriptor_pool: extern "system" fn(
+        device: Device,
+        descriptor_pool: DescriptorPool,
+        flags: DescriptorPoolResetFlags,
+    ) -> Result,
+    pub allocate_descriptor_sets: extern "system" fn(
+        device: Device,
+        p_allocate_info: *const DescriptorSetAllocateInfo,
+        p_descriptor_sets: *mut DescriptorSet,
+    ) -> Result,
+    pub free_descriptor_sets: extern "system" fn(
+        device: Device,
+        descriptor_pool: DescriptorPool,
+        descriptor_set_count: u32,
+        p_descriptor_sets: *const DescriptorSet,
+    ) -> Result,
+    pub update_descriptor_sets: extern "system" fn(
+        device: Device,
+        descriptor_write_count: u32,
+        p_descriptor_writes: *const WriteDescriptorSet,
+        descriptor_copy_count: u32,
+        p_descriptor_copies: *const CopyDescriptorSet,
+    ) -> c_void,
+    pub create_framebuffer: extern "system" fn(
+        device: Device,
+        p_create_info: *const FramebufferCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_framebuffer: *mut Framebuffer,
+    ) -> Result,
+    pub destroy_framebuffer: extern "system" fn(
+        device: Device,
+        framebuffer: Framebuffer,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub create_render_pass: extern "system" fn(
+        device: Device,
+        p_create_info: *const RenderPassCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_render_pass: *mut RenderPass,
+    ) -> Result,
+    pub destroy_render_pass: extern "system" fn(
+        device: Device,
+        render_pass: RenderPass,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub get_render_area_granularity: extern "system" fn(
+        device: Device,
+        render_pass: RenderPass,
+        p_granularity: *mut Extent2D,
+    ) -> c_void,
+    pub create_command_pool: extern "system" fn(
+        device: Device,
+        p_create_info: *const CommandPoolCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_command_pool: *mut CommandPool,
+    ) -> Result,
+    pub destroy_command_pool: extern "system" fn(
+        device: Device,
+        command_pool: CommandPool,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void,
+    pub reset_command_pool: extern "system" fn(
+        device: Device,
+        command_pool: CommandPool,
+        flags: CommandPoolResetFlags,
+    ) -> Result,
+    pub allocate_command_buffers: extern "system" fn(
+        device: Device,
+        p_allocate_info: *const CommandBufferAllocateInfo,
+        p_command_buffers: *mut CommandBuffer,
+    ) -> Result,
+    pub free_command_buffers: extern "system" fn(
+        device: Device,
+        command_pool: CommandPool,
+        command_buffer_count: u32,
+        p_command_buffers: *const CommandBuffer,
+    ) -> c_void,
+    pub begin_command_buffer: extern "system" fn(
+        command_buffer: CommandBuffer,
+        p_begin_info: *const CommandBufferBeginInfo,
+    ) -> Result,
+    pub end_command_buffer: extern "system" fn(command_buffer: CommandBuffer) -> Result,
+    pub reset_command_buffer:
+        extern "system" fn(command_buffer: CommandBuffer, flags: CommandBufferResetFlags) -> Result,
+    pub cmd_bind_pipeline: extern "system" fn(
+        command_buffer: CommandBuffer,
+        pipeline_bind_point: PipelineBindPoint,
+        pipeline: Pipeline,
+    ) -> c_void,
+    pub cmd_set_viewport: extern "system" fn(
+        command_buffer: CommandBuffer,
+        first_viewport: u32,
+        viewport_count: u32,
+        p_viewports: *const Viewport,
+    ) -> c_void,
+    pub cmd_set_scissor: extern "system" fn(
+        command_buffer: CommandBuffer,
+        first_scissor: u32,
+        scissor_count: u32,
+        p_scissors: *const Rect2D,
+    ) -> c_void,
+    pub cmd_set_line_width:
+        extern "system" fn(command_buffer: CommandBuffer, line_width: f32) -> c_void,
+    pub cmd_set_depth_bias: extern "system" fn(
+        command_buffer: CommandBuffer,
+        depth_bias_constant_factor: f32,
+        depth_bias_clamp: f32,
+        depth_bias_slope_factor: f32,
+    ) -> c_void,
+    pub cmd_set_blend_constants:
+        extern "system" fn(command_buffer: CommandBuffer, blend_constants: &[f32; 4]) -> c_void,
+    pub cmd_set_depth_bounds: extern "system" fn(
+        command_buffer: CommandBuffer,
+        min_depth_bounds: f32,
+        max_depth_bounds: f32,
+    ) -> c_void,
+    pub cmd_set_stencil_compare_mask: extern "system" fn(
+        command_buffer: CommandBuffer,
+        face_mask: StencilFaceFlags,
+        compare_mask: u32,
+    ) -> c_void,
+    pub cmd_set_stencil_write_mask: extern "system" fn(
+        command_buffer: CommandBuffer,
+        face_mask: StencilFaceFlags,
+        write_mask: u32,
+    ) -> c_void,
+    pub cmd_set_stencil_reference: extern "system" fn(
+        command_buffer: CommandBuffer,
+        face_mask: StencilFaceFlags,
+        reference: u32,
+    ) -> c_void,
+    pub cmd_bind_descriptor_sets: extern "system" fn(
+        command_buffer: CommandBuffer,
+        pipeline_bind_point: PipelineBindPoint,
+        layout: PipelineLayout,
+        first_set: u32,
+        descriptor_set_count: u32,
+        p_descriptor_sets: *const DescriptorSet,
+        dynamic_offset_count: u32,
+        p_dynamic_offsets: *const u32,
+    ) -> c_void,
+    pub cmd_bind_index_buffer: extern "system" fn(
+        command_buffer: CommandBuffer,
+        buffer: Buffer,
+        offset: DeviceSize,
+        index_type: IndexType,
+    ) -> c_void,
+    pub cmd_bind_vertex_buffers: extern "system" fn(
+        command_buffer: CommandBuffer,
+        first_binding: u32,
+        binding_count: u32,
+        p_buffers: *const Buffer,
+        p_offsets: *const DeviceSize,
+    ) -> c_void,
+    pub cmd_draw: extern "system" fn(
+        command_buffer: CommandBuffer,
+        vertex_count: u32,
+        instance_count: u32,
+        first_vertex: u32,
+        first_instance: u32,
+    ) -> c_void,
+    pub cmd_draw_indexed: extern "system" fn(
+        command_buffer: CommandBuffer,
+        index_count: u32,
+        instance_count: u32,
+        first_index: u32,
+        vertex_offset: i32,
+        first_instance: u32,
+    ) -> c_void,
+    pub cmd_draw_indirect: extern "system" fn(
+        command_buffer: CommandBuffer,
+        buffer: Buffer,
+        offset: DeviceSize,
+        draw_count: u32,
+        stride: u32,
+    ) -> c_void,
+    pub cmd_draw_indexed_indirect: extern "system" fn(
+        command_buffer: CommandBuffer,
+        buffer: Buffer,
+        offset: DeviceSize,
+        draw_count: u32,
+        stride: u32,
+    ) -> c_void,
+    pub cmd_dispatch: extern "system" fn(
+        command_buffer: CommandBuffer,
+        group_count_x: u32,
+        group_count_y: u32,
+        group_count_z: u32,
+    ) -> c_void,
+    pub cmd_dispatch_indirect: extern "system" fn(
+        command_buffer: CommandBuffer,
+        buffer: Buffer,
+        offset: DeviceSize,
+    ) -> c_void,
+    pub cmd_copy_buffer: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_buffer: Buffer,
+        dst_buffer: Buffer,
+        region_count: u32,
+        p_regions: *const BufferCopy,
+    ) -> c_void,
+    pub cmd_copy_image: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_image: Image,
+        src_image_layout: ImageLayout,
+        dst_image: Image,
+        dst_image_layout: ImageLayout,
+        region_count: u32,
+        p_regions: *const ImageCopy,
+    ) -> c_void,
+    pub cmd_blit_image: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_image: Image,
+        src_image_layout: ImageLayout,
+        dst_image: Image,
+        dst_image_layout: ImageLayout,
+        region_count: u32,
+        p_regions: *const ImageBlit,
+        filter: Filter,
+    ) -> c_void,
+    pub cmd_copy_buffer_to_image: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_buffer: Buffer,
+        dst_image: Image,
+        dst_image_layout: ImageLayout,
+        region_count: u32,
+        p_regions: *const BufferImageCopy,
+    ) -> c_void,
+    pub cmd_copy_image_to_buffer: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_image: Image,
+        src_image_layout: ImageLayout,
+        dst_buffer: Buffer,
+        region_count: u32,
+        p_regions: *const BufferImageCopy,
+    ) -> c_void,
+    pub cmd_update_buffer: extern "system" fn(
+        command_buffer: CommandBuffer,
+        dst_buffer: Buffer,
+        dst_offset: DeviceSize,
+        data_size: DeviceSize,
+        p_data: *const c_void,
+    ) -> c_void,
+    pub cmd_fill_buffer: extern "system" fn(
+        command_buffer: CommandBuffer,
+        dst_buffer: Buffer,
+        dst_offset: DeviceSize,
+        size: DeviceSize,
+        data: u32,
+    ) -> c_void,
+    pub cmd_clear_color_image: extern "system" fn(
+        command_buffer: CommandBuffer,
+        image: Image,
+        image_layout: ImageLayout,
+        p_color: *const ClearColorValue,
+        range_count: u32,
+        p_ranges: *const ImageSubresourceRange,
+    ) -> c_void,
+    pub cmd_clear_depth_stencil_image: extern "system" fn(
+        command_buffer: CommandBuffer,
+        image: Image,
+        image_layout: ImageLayout,
+        p_depth_stencil: *const ClearDepthStencilValue,
+        range_count: u32,
+        p_ranges: *const ImageSubresourceRange,
+    ) -> c_void,
+    pub cmd_clear_attachments: extern "system" fn(
+        command_buffer: CommandBuffer,
+        attachment_count: u32,
+        p_attachments: *const ClearAttachment,
+        rect_count: u32,
+        p_rects: *const ClearRect,
+    ) -> c_void,
+    pub cmd_resolve_image: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_image: Image,
+        src_image_layout: ImageLayout,
+        dst_image: Image,
+        dst_image_layout: ImageLayout,
+        region_count: u32,
+        p_regions: *const ImageResolve,
+    ) -> c_void,
+    pub cmd_set_event: extern "system" fn(
+        command_buffer: CommandBuffer,
+        event: Event,
+        stage_mask: PipelineStageFlags,
+    ) -> c_void,
+    pub cmd_reset_event: extern "system" fn(
+        command_buffer: CommandBuffer,
+        event: Event,
+        stage_mask: PipelineStageFlags,
+    ) -> c_void,
+    pub cmd_wait_events: extern "system" fn(
+        command_buffer: CommandBuffer,
+        event_count: u32,
+        p_events: *const Event,
+        src_stage_mask: PipelineStageFlags,
+        dst_stage_mask: PipelineStageFlags,
+        memory_barrier_count: u32,
+        p_memory_barriers: *const MemoryBarrier,
+        buffer_memory_barrier_count: u32,
+        p_buffer_memory_barriers: *const BufferMemoryBarrier,
+        image_memory_barrier_count: u32,
+        p_image_memory_barriers: *const ImageMemoryBarrier,
+    ) -> c_void,
+    pub cmd_pipeline_barrier: extern "system" fn(
+        command_buffer: CommandBuffer,
+        src_stage_mask: PipelineStageFlags,
+        dst_stage_mask: PipelineStageFlags,
+        dependency_flags: DependencyFlags,
+        memory_barrier_count: u32,
+        p_memory_barriers: *const MemoryBarrier,
+        buffer_memory_barrier_count: u32,
+        p_buffer_memory_barriers: *const BufferMemoryBarrier,
+        image_memory_barrier_count: u32,
+        p_image_memory_barriers: *const ImageMemoryBarrier,
+    ) -> c_void,
+    pub cmd_begin_query: extern "system" fn(
+        command_buffer: CommandBuffer,
+        query_pool: QueryPool,
+        query: u32,
+        flags: QueryControlFlags,
+    ) -> c_void,
+    pub cmd_end_query: extern "system" fn(
+        command_buffer: CommandBuffer,
+        query_pool: QueryPool,
+        query: u32,
+    ) -> c_void,
+    pub cmd_reset_query_pool: extern "system" fn(
+        command_buffer: CommandBuffer,
+        query_pool: QueryPool,
+        first_query: u32,
+        query_count: u32,
+    ) -> c_void,
+    pub cmd_write_timestamp: extern "system" fn(
+        command_buffer: CommandBuffer,
+        pipeline_stage: PipelineStageFlags,
+        query_pool: QueryPool,
+        query: u32,
+    ) -> c_void,
+    pub cmd_copy_query_pool_results: extern "system" fn(
+        command_buffer: CommandBuffer,
+        query_pool: QueryPool,
+        first_query: u32,
+        query_count: u32,
+        dst_buffer: Buffer,
+        dst_offset: DeviceSize,
+        stride: DeviceSize,
+        flags: QueryResultFlags,
+    ) -> c_void,
+    pub cmd_push_constants: extern "system" fn(
+        command_buffer: CommandBuffer,
+        layout: PipelineLayout,
+        stage_flags: ShaderStageFlags,
+        offset: u32,
+        size: u32,
+        p_values: *const c_void,
+    ) -> c_void,
+    pub cmd_begin_render_pass: extern "system" fn(
+        command_buffer: CommandBuffer,
+        p_render_pass_begin: *const RenderPassBeginInfo,
+        contents: SubpassContents,
+    ) -> c_void,
+    pub cmd_next_subpass:
+        extern "system" fn(command_buffer: CommandBuffer, contents: SubpassContents) -> c_void,
+    pub cmd_end_render_pass: extern "system" fn(command_buffer: CommandBuffer) -> c_void,
+    pub cmd_execute_commands: extern "system" fn(
+        command_buffer: CommandBuffer,
+        command_buffer_count: u32,
+        p_command_buffers: *const CommandBuffer,
+    ) -> c_void,
+}
+unsafe impl Send for DeviceFnV1_0 {}
+unsafe impl Sync for DeviceFnV1_0 {}
+impl ::std::clone::Clone for DeviceFnV1_0 {
+    fn clone(&self) -> Self {
+        DeviceFnV1_0 {
+            destroy_device: self.destroy_device,
+            get_device_queue: self.get_device_queue,
+            queue_submit: self.queue_submit,
+            queue_wait_idle: self.queue_wait_idle,
+            device_wait_idle: self.device_wait_idle,
+            allocate_memory: self.allocate_memory,
+            free_memory: self.free_memory,
+            map_memory: self.map_memory,
+            unmap_memory: self.unmap_memory,
+            flush_mapped_memory_ranges: self.flush_mapped_memory_ranges,
+            invalidate_mapped_memory_ranges: self.invalidate_mapped_memory_ranges,
+            get_device_memory_commitment: self.get_device_memory_commitment,
+            bind_buffer_memory: self.bind_buffer_memory,
+            bind_image_memory: self.bind_image_memory,
+            get_buffer_memory_requirements: self.get_buffer_memory_requirements,
+            get_image_memory_requirements: self.get_image_memory_requirements,
+            get_image_sparse_memory_requirements: self.get_image_sparse_memory_requirements,
+            queue_bind_sparse: self.queue_bind_sparse,
+            create_fence: self.create_fence,
+            destroy_fence: self.destroy_fence,
+            reset_fences: self.reset_fences,
+            get_fence_status: self.get_fence_status,
+            wait_for_fences: self.wait_for_fences,
+            create_semaphore: self.create_semaphore,
+            destroy_semaphore: self.destroy_semaphore,
+            create_event: self.create_event,
+            destroy_event: self.destroy_event,
+            get_event_status: self.get_event_status,
+            set_event: self.set_event,
+            reset_event: self.reset_event,
+            create_query_pool: self.create_query_pool,
+            destroy_query_pool: self.destroy_query_pool,
+            get_query_pool_results: self.get_query_pool_results,
+            create_buffer: self.create_buffer,
+            destroy_buffer: self.destroy_buffer,
+            create_buffer_view: self.create_buffer_view,
+            destroy_buffer_view: self.destroy_buffer_view,
+            create_image: self.create_image,
+            destroy_image: self.destroy_image,
+            get_image_subresource_layout: self.get_image_subresource_layout,
+            create_image_view: self.create_image_view,
+            destroy_image_view: self.destroy_image_view,
+            create_shader_module: self.create_shader_module,
+            destroy_shader_module: self.destroy_shader_module,
+            create_pipeline_cache: self.create_pipeline_cache,
+            destroy_pipeline_cache: self.destroy_pipeline_cache,
+            get_pipeline_cache_data: self.get_pipeline_cache_data,
+            merge_pipeline_caches: self.merge_pipeline_caches,
+            create_graphics_pipelines: self.create_graphics_pipelines,
+            create_compute_pipelines: self.create_compute_pipelines,
+            destroy_pipeline: self.destroy_pipeline,
+            create_pipeline_layout: self.create_pipeline_layout,
+            destroy_pipeline_layout: self.destroy_pipeline_layout,
+            create_sampler: self.create_sampler,
+            destroy_sampler: self.destroy_sampler,
+            create_descriptor_set_layout: self.create_descriptor_set_layout,
+            destroy_descriptor_set_layout: self.destroy_descriptor_set_layout,
+            create_descriptor_pool: self.create_descriptor_pool,
+            destroy_descriptor_pool: self.destroy_descriptor_pool,
+            reset_descriptor_pool: self.reset_descriptor_pool,
+            allocate_descriptor_sets: self.allocate_descriptor_sets,
+            free_descriptor_sets: self.free_descriptor_sets,
+            update_descriptor_sets: self.update_descriptor_sets,
+            create_framebuffer: self.create_framebuffer,
+            destroy_framebuffer: self.destroy_framebuffer,
+            create_render_pass: self.create_render_pass,
+            destroy_render_pass: self.destroy_render_pass,
+            get_render_area_granularity: self.get_render_area_granularity,
+            create_command_pool: self.create_command_pool,
+            destroy_command_pool: self.destroy_command_pool,
+            reset_command_pool: self.reset_command_pool,
+            allocate_command_buffers: self.allocate_command_buffers,
+            free_command_buffers: self.free_command_buffers,
+            begin_command_buffer: self.begin_command_buffer,
+            end_command_buffer: self.end_command_buffer,
+            reset_command_buffer: self.reset_command_buffer,
+            cmd_bind_pipeline: self.cmd_bind_pipeline,
+            cmd_set_viewport: self.cmd_set_viewport,
+            cmd_set_scissor: self.cmd_set_scissor,
+            cmd_set_line_width: self.cmd_set_line_width,
+            cmd_set_depth_bias: self.cmd_set_depth_bias,
+            cmd_set_blend_constants: self.cmd_set_blend_constants,
+            cmd_set_depth_bounds: self.cmd_set_depth_bounds,
+            cmd_set_stencil_compare_mask: self.cmd_set_stencil_compare_mask,
+            cmd_set_stencil_write_mask: self.cmd_set_stencil_write_mask,
+            cmd_set_stencil_reference: self.cmd_set_stencil_reference,
+            cmd_bind_descriptor_sets: self.cmd_bind_descriptor_sets,
+            cmd_bind_index_buffer: self.cmd_bind_index_buffer,
+            cmd_bind_vertex_buffers: self.cmd_bind_vertex_buffers,
+            cmd_draw: self.cmd_draw,
+            cmd_draw_indexed: self.cmd_draw_indexed,
+            cmd_draw_indirect: self.cmd_draw_indirect,
+            cmd_draw_indexed_indirect: self.cmd_draw_indexed_indirect,
+            cmd_dispatch: self.cmd_dispatch,
+            cmd_dispatch_indirect: self.cmd_dispatch_indirect,
+            cmd_copy_buffer: self.cmd_copy_buffer,
+            cmd_copy_image: self.cmd_copy_image,
+            cmd_blit_image: self.cmd_blit_image,
+            cmd_copy_buffer_to_image: self.cmd_copy_buffer_to_image,
+            cmd_copy_image_to_buffer: self.cmd_copy_image_to_buffer,
+            cmd_update_buffer: self.cmd_update_buffer,
+            cmd_fill_buffer: self.cmd_fill_buffer,
+            cmd_clear_color_image: self.cmd_clear_color_image,
+            cmd_clear_depth_stencil_image: self.cmd_clear_depth_stencil_image,
+            cmd_clear_attachments: self.cmd_clear_attachments,
+            cmd_resolve_image: self.cmd_resolve_image,
+            cmd_set_event: self.cmd_set_event,
+            cmd_reset_event: self.cmd_reset_event,
+            cmd_wait_events: self.cmd_wait_events,
+            cmd_pipeline_barrier: self.cmd_pipeline_barrier,
+            cmd_begin_query: self.cmd_begin_query,
+            cmd_end_query: self.cmd_end_query,
+            cmd_reset_query_pool: self.cmd_reset_query_pool,
+            cmd_write_timestamp: self.cmd_write_timestamp,
+            cmd_copy_query_pool_results: self.cmd_copy_query_pool_results,
+            cmd_push_constants: self.cmd_push_constants,
+            cmd_begin_render_pass: self.cmd_begin_render_pass,
+            cmd_next_subpass: self.cmd_next_subpass,
+            cmd_end_render_pass: self.cmd_end_render_pass,
+            cmd_execute_commands: self.cmd_execute_commands,
+        }
+    }
+}
+impl DeviceFnV1_0 {
+    pub fn load<F>(mut _f: F) -> Self
+    where
+        F: FnMut(&::std::ffi::CStr) -> *const c_void,
+    {
+        DeviceFnV1_0 {
+            destroy_device: unsafe {
+                extern "system" fn destroy_device(
+                    _device: Device,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_device)))
+                }
+                let raw_name = stringify!(vkDestroyDevice);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_device
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_device_queue: unsafe {
+                extern "system" fn get_device_queue(
+                    _device: Device,
+                    _queue_family_index: u32,
+                    _queue_index: u32,
+                    _p_queue: *mut Queue,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(get_device_queue)))
+                }
+                let raw_name = stringify!(vkGetDeviceQueue);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_device_queue
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            queue_submit: unsafe {
+                extern "system" fn queue_submit(
+                    _queue: Queue,
+                    _submit_count: u32,
+                    _p_submits: *const SubmitInfo,
+                    _fence: Fence,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(queue_submit)))
+                }
+                let raw_name = stringify!(vkQueueSubmit);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    queue_submit
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            queue_wait_idle: unsafe {
+                extern "system" fn queue_wait_idle(_queue: Queue) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(queue_wait_idle)))
+                }
+                let raw_name = stringify!(vkQueueWaitIdle);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    queue_wait_idle
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            device_wait_idle: unsafe {
+                extern "system" fn device_wait_idle(_device: Device) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(device_wait_idle)))
+                }
+                let raw_name = stringify!(vkDeviceWaitIdle);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    device_wait_idle
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            allocate_memory: unsafe {
+                extern "system" fn allocate_memory(
+                    _device: Device,
+                    _p_allocate_info: *const MemoryAllocateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_memory: *mut DeviceMemory,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(allocate_memory)))
+                }
+                let raw_name = stringify!(vkAllocateMemory);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    allocate_memory
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            free_memory: unsafe {
+                extern "system" fn free_memory(
+                    _device: Device,
+                    _memory: DeviceMemory,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(free_memory)))
+                }
+                let raw_name = stringify!(vkFreeMemory);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    free_memory
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            map_memory: unsafe {
+                extern "system" fn map_memory(
+                    _device: Device,
+                    _memory: DeviceMemory,
+                    _offset: DeviceSize,
+                    _size: DeviceSize,
+                    _flags: MemoryMapFlags,
+                    _pp_data: *mut *mut c_void,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(map_memory)))
+                }
+                let raw_name = stringify!(vkMapMemory);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    map_memory
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            unmap_memory: unsafe {
+                extern "system" fn unmap_memory(_device: Device, _memory: DeviceMemory) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(unmap_memory)))
+                }
+                let raw_name = stringify!(vkUnmapMemory);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    unmap_memory
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            flush_mapped_memory_ranges: unsafe {
+                extern "system" fn flush_mapped_memory_ranges(
+                    _device: Device,
+                    _memory_range_count: u32,
+                    _p_memory_ranges: *const MappedMemoryRange,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(flush_mapped_memory_ranges)
+                    ))
+                }
+                let raw_name = stringify!(vkFlushMappedMemoryRanges);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    flush_mapped_memory_ranges
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            invalidate_mapped_memory_ranges: unsafe {
+                extern "system" fn invalidate_mapped_memory_ranges(
+                    _device: Device,
+                    _memory_range_count: u32,
+                    _p_memory_ranges: *const MappedMemoryRange,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(invalidate_mapped_memory_ranges)
+                    ))
+                }
+                let raw_name = stringify!(vkInvalidateMappedMemoryRanges);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    invalidate_mapped_memory_ranges
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_device_memory_commitment: unsafe {
+                extern "system" fn get_device_memory_commitment(
+                    _device: Device,
+                    _memory: DeviceMemory,
+                    _p_committed_memory_in_bytes: *mut DeviceSize,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_device_memory_commitment)
+                    ))
+                }
+                let raw_name = stringify!(vkGetDeviceMemoryCommitment);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_device_memory_commitment
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            bind_buffer_memory: unsafe {
+                extern "system" fn bind_buffer_memory(
+                    _device: Device,
+                    _buffer: Buffer,
+                    _memory: DeviceMemory,
+                    _memory_offset: DeviceSize,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(bind_buffer_memory)))
+                }
+                let raw_name = stringify!(vkBindBufferMemory);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    bind_buffer_memory
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            bind_image_memory: unsafe {
+                extern "system" fn bind_image_memory(
+                    _device: Device,
+                    _image: Image,
+                    _memory: DeviceMemory,
+                    _memory_offset: DeviceSize,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(bind_image_memory)))
+                }
+                let raw_name = stringify!(vkBindImageMemory);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    bind_image_memory
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_buffer_memory_requirements: unsafe {
+                extern "system" fn get_buffer_memory_requirements(
+                    _device: Device,
+                    _buffer: Buffer,
+                    _p_memory_requirements: *mut MemoryRequirements,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_buffer_memory_requirements)
+                    ))
+                }
+                let raw_name = stringify!(vkGetBufferMemoryRequirements);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_buffer_memory_requirements
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_image_memory_requirements: unsafe {
+                extern "system" fn get_image_memory_requirements(
+                    _device: Device,
+                    _image: Image,
+                    _p_memory_requirements: *mut MemoryRequirements,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_image_memory_requirements)
+                    ))
+                }
+                let raw_name = stringify!(vkGetImageMemoryRequirements);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_image_memory_requirements
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_image_sparse_memory_requirements: unsafe {
+                extern "system" fn get_image_sparse_memory_requirements(
+                    _device: Device,
+                    _image: Image,
+                    _p_sparse_memory_requirement_count: *mut u32,
+                    _p_sparse_memory_requirements: *mut SparseImageMemoryRequirements,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_image_sparse_memory_requirements)
+                    ))
+                }
+                let raw_name = stringify!(vkGetImageSparseMemoryRequirements);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_image_sparse_memory_requirements
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            queue_bind_sparse: unsafe {
+                extern "system" fn queue_bind_sparse(
+                    _queue: Queue,
+                    _bind_info_count: u32,
+                    _p_bind_info: *const BindSparseInfo,
+                    _fence: Fence,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(queue_bind_sparse)))
+                }
+                let raw_name = stringify!(vkQueueBindSparse);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    queue_bind_sparse
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_fence: unsafe {
+                extern "system" fn create_fence(
+                    _device: Device,
+                    _p_create_info: *const FenceCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_fence: *mut Fence,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_fence)))
+                }
+                let raw_name = stringify!(vkCreateFence);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_fence
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_fence: unsafe {
+                extern "system" fn destroy_fence(
+                    _device: Device,
+                    _fence: Fence,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_fence)))
+                }
+                let raw_name = stringify!(vkDestroyFence);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_fence
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            reset_fences: unsafe {
+                extern "system" fn reset_fences(
+                    _device: Device,
+                    _fence_count: u32,
+                    _p_fences: *const Fence,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(reset_fences)))
+                }
+                let raw_name = stringify!(vkResetFences);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    reset_fences
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_fence_status: unsafe {
+                extern "system" fn get_fence_status(_device: Device, _fence: Fence) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(get_fence_status)))
+                }
+                let raw_name = stringify!(vkGetFenceStatus);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_fence_status
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            wait_for_fences: unsafe {
+                extern "system" fn wait_for_fences(
+                    _device: Device,
+                    _fence_count: u32,
+                    _p_fences: *const Fence,
+                    _wait_all: Bool32,
+                    _timeout: u64,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(wait_for_fences)))
+                }
+                let raw_name = stringify!(vkWaitForFences);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    wait_for_fences
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_semaphore: unsafe {
+                extern "system" fn create_semaphore(
+                    _device: Device,
+                    _p_create_info: *const SemaphoreCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_semaphore: *mut Semaphore,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_semaphore)))
+                }
+                let raw_name = stringify!(vkCreateSemaphore);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_semaphore
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_semaphore: unsafe {
+                extern "system" fn destroy_semaphore(
+                    _device: Device,
+                    _semaphore: Semaphore,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_semaphore)))
+                }
+                let raw_name = stringify!(vkDestroySemaphore);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_semaphore
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_event: unsafe {
+                extern "system" fn create_event(
+                    _device: Device,
+                    _p_create_info: *const EventCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_event: *mut Event,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_event)))
+                }
+                let raw_name = stringify!(vkCreateEvent);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_event
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_event: unsafe {
+                extern "system" fn destroy_event(
+                    _device: Device,
+                    _event: Event,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_event)))
+                }
+                let raw_name = stringify!(vkDestroyEvent);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_event
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_event_status: unsafe {
+                extern "system" fn get_event_status(_device: Device, _event: Event) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(get_event_status)))
+                }
+                let raw_name = stringify!(vkGetEventStatus);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_event_status
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            set_event: unsafe {
+                extern "system" fn set_event(_device: Device, _event: Event) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(set_event)))
+                }
+                let raw_name = stringify!(vkSetEvent);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    set_event
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            reset_event: unsafe {
+                extern "system" fn reset_event(_device: Device, _event: Event) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(reset_event)))
+                }
+                let raw_name = stringify!(vkResetEvent);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    reset_event
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_query_pool: unsafe {
+                extern "system" fn create_query_pool(
+                    _device: Device,
+                    _p_create_info: *const QueryPoolCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_query_pool: *mut QueryPool,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_query_pool)))
+                }
+                let raw_name = stringify!(vkCreateQueryPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_query_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_query_pool: unsafe {
+                extern "system" fn destroy_query_pool(
+                    _device: Device,
+                    _query_pool: QueryPool,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_query_pool)))
+                }
+                let raw_name = stringify!(vkDestroyQueryPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_query_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_query_pool_results: unsafe {
+                extern "system" fn get_query_pool_results(
+                    _device: Device,
+                    _query_pool: QueryPool,
+                    _first_query: u32,
+                    _query_count: u32,
+                    _data_size: usize,
+                    _p_data: *mut c_void,
+                    _stride: DeviceSize,
+                    _flags: QueryResultFlags,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_query_pool_results)
+                    ))
+                }
+                let raw_name = stringify!(vkGetQueryPoolResults);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_query_pool_results
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_buffer: unsafe {
+                extern "system" fn create_buffer(
+                    _device: Device,
+                    _p_create_info: *const BufferCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_buffer: *mut Buffer,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_buffer)))
+                }
+                let raw_name = stringify!(vkCreateBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_buffer: unsafe {
+                extern "system" fn destroy_buffer(
+                    _device: Device,
+                    _buffer: Buffer,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_buffer)))
+                }
+                let raw_name = stringify!(vkDestroyBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_buffer_view: unsafe {
+                extern "system" fn create_buffer_view(
+                    _device: Device,
+                    _p_create_info: *const BufferViewCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_view: *mut BufferView,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_buffer_view)))
+                }
+                let raw_name = stringify!(vkCreateBufferView);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_buffer_view
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_buffer_view: unsafe {
+                extern "system" fn destroy_buffer_view(
+                    _device: Device,
+                    _buffer_view: BufferView,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_buffer_view)))
+                }
+                let raw_name = stringify!(vkDestroyBufferView);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_buffer_view
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_image: unsafe {
+                extern "system" fn create_image(
+                    _device: Device,
+                    _p_create_info: *const ImageCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_image: *mut Image,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_image)))
+                }
+                let raw_name = stringify!(vkCreateImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_image: unsafe {
+                extern "system" fn destroy_image(
+                    _device: Device,
+                    _image: Image,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_image)))
+                }
+                let raw_name = stringify!(vkDestroyImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_image_subresource_layout: unsafe {
+                extern "system" fn get_image_subresource_layout(
+                    _device: Device,
+                    _image: Image,
+                    _p_subresource: *const ImageSubresource,
+                    _p_layout: *mut SubresourceLayout,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_image_subresource_layout)
+                    ))
+                }
+                let raw_name = stringify!(vkGetImageSubresourceLayout);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_image_subresource_layout
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_image_view: unsafe {
+                extern "system" fn create_image_view(
+                    _device: Device,
+                    _p_create_info: *const ImageViewCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_view: *mut ImageView,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_image_view)))
+                }
+                let raw_name = stringify!(vkCreateImageView);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_image_view
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_image_view: unsafe {
+                extern "system" fn destroy_image_view(
+                    _device: Device,
+                    _image_view: ImageView,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_image_view)))
+                }
+                let raw_name = stringify!(vkDestroyImageView);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_image_view
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_shader_module: unsafe {
+                extern "system" fn create_shader_module(
+                    _device: Device,
+                    _p_create_info: *const ShaderModuleCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_shader_module: *mut ShaderModule,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_shader_module)))
+                }
+                let raw_name = stringify!(vkCreateShaderModule);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_shader_module
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_shader_module: unsafe {
+                extern "system" fn destroy_shader_module(
+                    _device: Device,
+                    _shader_module: ShaderModule,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(destroy_shader_module)
+                    ))
+                }
+                let raw_name = stringify!(vkDestroyShaderModule);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_shader_module
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_pipeline_cache: unsafe {
+                extern "system" fn create_pipeline_cache(
+                    _device: Device,
+                    _p_create_info: *const PipelineCacheCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_pipeline_cache: *mut PipelineCache,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(create_pipeline_cache)
+                    ))
+                }
+                let raw_name = stringify!(vkCreatePipelineCache);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_pipeline_cache
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_pipeline_cache: unsafe {
+                extern "system" fn destroy_pipeline_cache(
+                    _device: Device,
+                    _pipeline_cache: PipelineCache,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(destroy_pipeline_cache)
+                    ))
+                }
+                let raw_name = stringify!(vkDestroyPipelineCache);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_pipeline_cache
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_pipeline_cache_data: unsafe {
+                extern "system" fn get_pipeline_cache_data(
+                    _device: Device,
+                    _pipeline_cache: PipelineCache,
+                    _p_data_size: *mut usize,
+                    _p_data: *mut c_void,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_pipeline_cache_data)
+                    ))
+                }
+                let raw_name = stringify!(vkGetPipelineCacheData);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_pipeline_cache_data
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            merge_pipeline_caches: unsafe {
+                extern "system" fn merge_pipeline_caches(
+                    _device: Device,
+                    _dst_cache: PipelineCache,
+                    _src_cache_count: u32,
+                    _p_src_caches: *const PipelineCache,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(merge_pipeline_caches)
+                    ))
+                }
+                let raw_name = stringify!(vkMergePipelineCaches);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    merge_pipeline_caches
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_graphics_pipelines: unsafe {
+                extern "system" fn create_graphics_pipelines(
+                    _device: Device,
+                    _pipeline_cache: PipelineCache,
+                    _create_info_count: u32,
+                    _p_create_infos: *const GraphicsPipelineCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_pipelines: *mut Pipeline,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(create_graphics_pipelines)
+                    ))
+                }
+                let raw_name = stringify!(vkCreateGraphicsPipelines);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_graphics_pipelines
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_compute_pipelines: unsafe {
+                extern "system" fn create_compute_pipelines(
+                    _device: Device,
+                    _pipeline_cache: PipelineCache,
+                    _create_info_count: u32,
+                    _p_create_infos: *const ComputePipelineCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_pipelines: *mut Pipeline,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(create_compute_pipelines)
+                    ))
+                }
+                let raw_name = stringify!(vkCreateComputePipelines);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_compute_pipelines
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_pipeline: unsafe {
+                extern "system" fn destroy_pipeline(
+                    _device: Device,
+                    _pipeline: Pipeline,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_pipeline)))
+                }
+                let raw_name = stringify!(vkDestroyPipeline);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_pipeline
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_pipeline_layout: unsafe {
+                extern "system" fn create_pipeline_layout(
+                    _device: Device,
+                    _p_create_info: *const PipelineLayoutCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_pipeline_layout: *mut PipelineLayout,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(create_pipeline_layout)
+                    ))
+                }
+                let raw_name = stringify!(vkCreatePipelineLayout);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_pipeline_layout
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_pipeline_layout: unsafe {
+                extern "system" fn destroy_pipeline_layout(
+                    _device: Device,
+                    _pipeline_layout: PipelineLayout,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(destroy_pipeline_layout)
+                    ))
+                }
+                let raw_name = stringify!(vkDestroyPipelineLayout);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_pipeline_layout
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_sampler: unsafe {
+                extern "system" fn create_sampler(
+                    _device: Device,
+                    _p_create_info: *const SamplerCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_sampler: *mut Sampler,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_sampler)))
+                }
+                let raw_name = stringify!(vkCreateSampler);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_sampler
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_sampler: unsafe {
+                extern "system" fn destroy_sampler(
+                    _device: Device,
+                    _sampler: Sampler,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_sampler)))
+                }
+                let raw_name = stringify!(vkDestroySampler);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_sampler
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_descriptor_set_layout: unsafe {
+                extern "system" fn create_descriptor_set_layout(
+                    _device: Device,
+                    _p_create_info: *const DescriptorSetLayoutCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_set_layout: *mut DescriptorSetLayout,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(create_descriptor_set_layout)
+                    ))
+                }
+                let raw_name = stringify!(vkCreateDescriptorSetLayout);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_descriptor_set_layout
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_descriptor_set_layout: unsafe {
+                extern "system" fn destroy_descriptor_set_layout(
+                    _device: Device,
+                    _descriptor_set_layout: DescriptorSetLayout,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(destroy_descriptor_set_layout)
+                    ))
+                }
+                let raw_name = stringify!(vkDestroyDescriptorSetLayout);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_descriptor_set_layout
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_descriptor_pool: unsafe {
+                extern "system" fn create_descriptor_pool(
+                    _device: Device,
+                    _p_create_info: *const DescriptorPoolCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_descriptor_pool: *mut DescriptorPool,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(create_descriptor_pool)
+                    ))
+                }
+                let raw_name = stringify!(vkCreateDescriptorPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_descriptor_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_descriptor_pool: unsafe {
+                extern "system" fn destroy_descriptor_pool(
+                    _device: Device,
+                    _descriptor_pool: DescriptorPool,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(destroy_descriptor_pool)
+                    ))
+                }
+                let raw_name = stringify!(vkDestroyDescriptorPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_descriptor_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            reset_descriptor_pool: unsafe {
+                extern "system" fn reset_descriptor_pool(
+                    _device: Device,
+                    _descriptor_pool: DescriptorPool,
+                    _flags: DescriptorPoolResetFlags,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(reset_descriptor_pool)
+                    ))
+                }
+                let raw_name = stringify!(vkResetDescriptorPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    reset_descriptor_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            allocate_descriptor_sets: unsafe {
+                extern "system" fn allocate_descriptor_sets(
+                    _device: Device,
+                    _p_allocate_info: *const DescriptorSetAllocateInfo,
+                    _p_descriptor_sets: *mut DescriptorSet,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(allocate_descriptor_sets)
+                    ))
+                }
+                let raw_name = stringify!(vkAllocateDescriptorSets);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    allocate_descriptor_sets
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            free_descriptor_sets: unsafe {
+                extern "system" fn free_descriptor_sets(
+                    _device: Device,
+                    _descriptor_pool: DescriptorPool,
+                    _descriptor_set_count: u32,
+                    _p_descriptor_sets: *const DescriptorSet,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(free_descriptor_sets)))
+                }
+                let raw_name = stringify!(vkFreeDescriptorSets);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    free_descriptor_sets
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            update_descriptor_sets: unsafe {
+                extern "system" fn update_descriptor_sets(
+                    _device: Device,
+                    _descriptor_write_count: u32,
+                    _p_descriptor_writes: *const WriteDescriptorSet,
+                    _descriptor_copy_count: u32,
+                    _p_descriptor_copies: *const CopyDescriptorSet,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(update_descriptor_sets)
+                    ))
+                }
+                let raw_name = stringify!(vkUpdateDescriptorSets);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    update_descriptor_sets
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_framebuffer: unsafe {
+                extern "system" fn create_framebuffer(
+                    _device: Device,
+                    _p_create_info: *const FramebufferCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_framebuffer: *mut Framebuffer,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_framebuffer)))
+                }
+                let raw_name = stringify!(vkCreateFramebuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_framebuffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_framebuffer: unsafe {
+                extern "system" fn destroy_framebuffer(
+                    _device: Device,
+                    _framebuffer: Framebuffer,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_framebuffer)))
+                }
+                let raw_name = stringify!(vkDestroyFramebuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_framebuffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_render_pass: unsafe {
+                extern "system" fn create_render_pass(
+                    _device: Device,
+                    _p_create_info: *const RenderPassCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_render_pass: *mut RenderPass,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_render_pass)))
+                }
+                let raw_name = stringify!(vkCreateRenderPass);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_render_pass
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_render_pass: unsafe {
+                extern "system" fn destroy_render_pass(
+                    _device: Device,
+                    _render_pass: RenderPass,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_render_pass)))
+                }
+                let raw_name = stringify!(vkDestroyRenderPass);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_render_pass
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            get_render_area_granularity: unsafe {
+                extern "system" fn get_render_area_granularity(
+                    _device: Device,
+                    _render_pass: RenderPass,
+                    _p_granularity: *mut Extent2D,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(get_render_area_granularity)
+                    ))
+                }
+                let raw_name = stringify!(vkGetRenderAreaGranularity);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    get_render_area_granularity
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            create_command_pool: unsafe {
+                extern "system" fn create_command_pool(
+                    _device: Device,
+                    _p_create_info: *const CommandPoolCreateInfo,
+                    _p_allocator: *const AllocationCallbacks,
+                    _p_command_pool: *mut CommandPool,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(create_command_pool)))
+                }
+                let raw_name = stringify!(vkCreateCommandPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    create_command_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            destroy_command_pool: unsafe {
+                extern "system" fn destroy_command_pool(
+                    _device: Device,
+                    _command_pool: CommandPool,
+                    _p_allocator: *const AllocationCallbacks,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(destroy_command_pool)))
+                }
+                let raw_name = stringify!(vkDestroyCommandPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    destroy_command_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            reset_command_pool: unsafe {
+                extern "system" fn reset_command_pool(
+                    _device: Device,
+                    _command_pool: CommandPool,
+                    _flags: CommandPoolResetFlags,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(reset_command_pool)))
+                }
+                let raw_name = stringify!(vkResetCommandPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    reset_command_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            allocate_command_buffers: unsafe {
+                extern "system" fn allocate_command_buffers(
+                    _device: Device,
+                    _p_allocate_info: *const CommandBufferAllocateInfo,
+                    _p_command_buffers: *mut CommandBuffer,
+                ) -> Result {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(allocate_command_buffers)
+                    ))
+                }
+                let raw_name = stringify!(vkAllocateCommandBuffers);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    allocate_command_buffers
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            free_command_buffers: unsafe {
+                extern "system" fn free_command_buffers(
+                    _device: Device,
+                    _command_pool: CommandPool,
+                    _command_buffer_count: u32,
+                    _p_command_buffers: *const CommandBuffer,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(free_command_buffers)))
+                }
+                let raw_name = stringify!(vkFreeCommandBuffers);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    free_command_buffers
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            begin_command_buffer: unsafe {
+                extern "system" fn begin_command_buffer(
+                    _command_buffer: CommandBuffer,
+                    _p_begin_info: *const CommandBufferBeginInfo,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(begin_command_buffer)))
+                }
+                let raw_name = stringify!(vkBeginCommandBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    begin_command_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            end_command_buffer: unsafe {
+                extern "system" fn end_command_buffer(_command_buffer: CommandBuffer) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(end_command_buffer)))
+                }
+                let raw_name = stringify!(vkEndCommandBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    end_command_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            reset_command_buffer: unsafe {
+                extern "system" fn reset_command_buffer(
+                    _command_buffer: CommandBuffer,
+                    _flags: CommandBufferResetFlags,
+                ) -> Result {
+                    panic!(concat!("Unable to load ", stringify!(reset_command_buffer)))
+                }
+                let raw_name = stringify!(vkResetCommandBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    reset_command_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_bind_pipeline: unsafe {
+                extern "system" fn cmd_bind_pipeline(
+                    _command_buffer: CommandBuffer,
+                    _pipeline_bind_point: PipelineBindPoint,
+                    _pipeline: Pipeline,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_bind_pipeline)))
+                }
+                let raw_name = stringify!(vkCmdBindPipeline);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_bind_pipeline
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_viewport: unsafe {
+                extern "system" fn cmd_set_viewport(
+                    _command_buffer: CommandBuffer,
+                    _first_viewport: u32,
+                    _viewport_count: u32,
+                    _p_viewports: *const Viewport,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_set_viewport)))
+                }
+                let raw_name = stringify!(vkCmdSetViewport);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_viewport
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_scissor: unsafe {
+                extern "system" fn cmd_set_scissor(
+                    _command_buffer: CommandBuffer,
+                    _first_scissor: u32,
+                    _scissor_count: u32,
+                    _p_scissors: *const Rect2D,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_set_scissor)))
+                }
+                let raw_name = stringify!(vkCmdSetScissor);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_scissor
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_line_width: unsafe {
+                extern "system" fn cmd_set_line_width(
+                    _command_buffer: CommandBuffer,
+                    _line_width: f32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_set_line_width)))
+                }
+                let raw_name = stringify!(vkCmdSetLineWidth);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_line_width
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_depth_bias: unsafe {
+                extern "system" fn cmd_set_depth_bias(
+                    _command_buffer: CommandBuffer,
+                    _depth_bias_constant_factor: f32,
+                    _depth_bias_clamp: f32,
+                    _depth_bias_slope_factor: f32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_set_depth_bias)))
+                }
+                let raw_name = stringify!(vkCmdSetDepthBias);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_depth_bias
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_blend_constants: unsafe {
+                extern "system" fn cmd_set_blend_constants(
+                    _command_buffer: CommandBuffer,
+                    _blend_constants: &[f32; 4],
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_set_blend_constants)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdSetBlendConstants);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_blend_constants
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_depth_bounds: unsafe {
+                extern "system" fn cmd_set_depth_bounds(
+                    _command_buffer: CommandBuffer,
+                    _min_depth_bounds: f32,
+                    _max_depth_bounds: f32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_set_depth_bounds)))
+                }
+                let raw_name = stringify!(vkCmdSetDepthBounds);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_depth_bounds
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_stencil_compare_mask: unsafe {
+                extern "system" fn cmd_set_stencil_compare_mask(
+                    _command_buffer: CommandBuffer,
+                    _face_mask: StencilFaceFlags,
+                    _compare_mask: u32,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_set_stencil_compare_mask)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdSetStencilCompareMask);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_stencil_compare_mask
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_stencil_write_mask: unsafe {
+                extern "system" fn cmd_set_stencil_write_mask(
+                    _command_buffer: CommandBuffer,
+                    _face_mask: StencilFaceFlags,
+                    _write_mask: u32,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_set_stencil_write_mask)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdSetStencilWriteMask);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_stencil_write_mask
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_stencil_reference: unsafe {
+                extern "system" fn cmd_set_stencil_reference(
+                    _command_buffer: CommandBuffer,
+                    _face_mask: StencilFaceFlags,
+                    _reference: u32,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_set_stencil_reference)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdSetStencilReference);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_stencil_reference
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_bind_descriptor_sets: unsafe {
+                extern "system" fn cmd_bind_descriptor_sets(
+                    _command_buffer: CommandBuffer,
+                    _pipeline_bind_point: PipelineBindPoint,
+                    _layout: PipelineLayout,
+                    _first_set: u32,
+                    _descriptor_set_count: u32,
+                    _p_descriptor_sets: *const DescriptorSet,
+                    _dynamic_offset_count: u32,
+                    _p_dynamic_offsets: *const u32,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_bind_descriptor_sets)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdBindDescriptorSets);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_bind_descriptor_sets
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_bind_index_buffer: unsafe {
+                extern "system" fn cmd_bind_index_buffer(
+                    _command_buffer: CommandBuffer,
+                    _buffer: Buffer,
+                    _offset: DeviceSize,
+                    _index_type: IndexType,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_bind_index_buffer)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdBindIndexBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_bind_index_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_bind_vertex_buffers: unsafe {
+                extern "system" fn cmd_bind_vertex_buffers(
+                    _command_buffer: CommandBuffer,
+                    _first_binding: u32,
+                    _binding_count: u32,
+                    _p_buffers: *const Buffer,
+                    _p_offsets: *const DeviceSize,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_bind_vertex_buffers)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdBindVertexBuffers);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_bind_vertex_buffers
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_draw: unsafe {
+                extern "system" fn cmd_draw(
+                    _command_buffer: CommandBuffer,
+                    _vertex_count: u32,
+                    _instance_count: u32,
+                    _first_vertex: u32,
+                    _first_instance: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_draw)))
+                }
+                let raw_name = stringify!(vkCmdDraw);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_draw
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_draw_indexed: unsafe {
+                extern "system" fn cmd_draw_indexed(
+                    _command_buffer: CommandBuffer,
+                    _index_count: u32,
+                    _instance_count: u32,
+                    _first_index: u32,
+                    _vertex_offset: i32,
+                    _first_instance: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_draw_indexed)))
+                }
+                let raw_name = stringify!(vkCmdDrawIndexed);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_draw_indexed
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_draw_indirect: unsafe {
+                extern "system" fn cmd_draw_indirect(
+                    _command_buffer: CommandBuffer,
+                    _buffer: Buffer,
+                    _offset: DeviceSize,
+                    _draw_count: u32,
+                    _stride: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_draw_indirect)))
+                }
+                let raw_name = stringify!(vkCmdDrawIndirect);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_draw_indirect
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_draw_indexed_indirect: unsafe {
+                extern "system" fn cmd_draw_indexed_indirect(
+                    _command_buffer: CommandBuffer,
+                    _buffer: Buffer,
+                    _offset: DeviceSize,
+                    _draw_count: u32,
+                    _stride: u32,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_draw_indexed_indirect)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdDrawIndexedIndirect);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_draw_indexed_indirect
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_dispatch: unsafe {
+                extern "system" fn cmd_dispatch(
+                    _command_buffer: CommandBuffer,
+                    _group_count_x: u32,
+                    _group_count_y: u32,
+                    _group_count_z: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_dispatch)))
+                }
+                let raw_name = stringify!(vkCmdDispatch);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_dispatch
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_dispatch_indirect: unsafe {
+                extern "system" fn cmd_dispatch_indirect(
+                    _command_buffer: CommandBuffer,
+                    _buffer: Buffer,
+                    _offset: DeviceSize,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_dispatch_indirect)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdDispatchIndirect);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_dispatch_indirect
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_copy_buffer: unsafe {
+                extern "system" fn cmd_copy_buffer(
+                    _command_buffer: CommandBuffer,
+                    _src_buffer: Buffer,
+                    _dst_buffer: Buffer,
+                    _region_count: u32,
+                    _p_regions: *const BufferCopy,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_copy_buffer)))
+                }
+                let raw_name = stringify!(vkCmdCopyBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_copy_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_copy_image: unsafe {
+                extern "system" fn cmd_copy_image(
+                    _command_buffer: CommandBuffer,
+                    _src_image: Image,
+                    _src_image_layout: ImageLayout,
+                    _dst_image: Image,
+                    _dst_image_layout: ImageLayout,
+                    _region_count: u32,
+                    _p_regions: *const ImageCopy,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_copy_image)))
+                }
+                let raw_name = stringify!(vkCmdCopyImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_copy_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_blit_image: unsafe {
+                extern "system" fn cmd_blit_image(
+                    _command_buffer: CommandBuffer,
+                    _src_image: Image,
+                    _src_image_layout: ImageLayout,
+                    _dst_image: Image,
+                    _dst_image_layout: ImageLayout,
+                    _region_count: u32,
+                    _p_regions: *const ImageBlit,
+                    _filter: Filter,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_blit_image)))
+                }
+                let raw_name = stringify!(vkCmdBlitImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_blit_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_copy_buffer_to_image: unsafe {
+                extern "system" fn cmd_copy_buffer_to_image(
+                    _command_buffer: CommandBuffer,
+                    _src_buffer: Buffer,
+                    _dst_image: Image,
+                    _dst_image_layout: ImageLayout,
+                    _region_count: u32,
+                    _p_regions: *const BufferImageCopy,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_copy_buffer_to_image)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdCopyBufferToImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_copy_buffer_to_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_copy_image_to_buffer: unsafe {
+                extern "system" fn cmd_copy_image_to_buffer(
+                    _command_buffer: CommandBuffer,
+                    _src_image: Image,
+                    _src_image_layout: ImageLayout,
+                    _dst_buffer: Buffer,
+                    _region_count: u32,
+                    _p_regions: *const BufferImageCopy,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_copy_image_to_buffer)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdCopyImageToBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_copy_image_to_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_update_buffer: unsafe {
+                extern "system" fn cmd_update_buffer(
+                    _command_buffer: CommandBuffer,
+                    _dst_buffer: Buffer,
+                    _dst_offset: DeviceSize,
+                    _data_size: DeviceSize,
+                    _p_data: *const c_void,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_update_buffer)))
+                }
+                let raw_name = stringify!(vkCmdUpdateBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_update_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_fill_buffer: unsafe {
+                extern "system" fn cmd_fill_buffer(
+                    _command_buffer: CommandBuffer,
+                    _dst_buffer: Buffer,
+                    _dst_offset: DeviceSize,
+                    _size: DeviceSize,
+                    _data: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_fill_buffer)))
+                }
+                let raw_name = stringify!(vkCmdFillBuffer);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_fill_buffer
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_clear_color_image: unsafe {
+                extern "system" fn cmd_clear_color_image(
+                    _command_buffer: CommandBuffer,
+                    _image: Image,
+                    _image_layout: ImageLayout,
+                    _p_color: *const ClearColorValue,
+                    _range_count: u32,
+                    _p_ranges: *const ImageSubresourceRange,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_clear_color_image)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdClearColorImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_clear_color_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_clear_depth_stencil_image: unsafe {
+                extern "system" fn cmd_clear_depth_stencil_image(
+                    _command_buffer: CommandBuffer,
+                    _image: Image,
+                    _image_layout: ImageLayout,
+                    _p_depth_stencil: *const ClearDepthStencilValue,
+                    _range_count: u32,
+                    _p_ranges: *const ImageSubresourceRange,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_clear_depth_stencil_image)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdClearDepthStencilImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_clear_depth_stencil_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_clear_attachments: unsafe {
+                extern "system" fn cmd_clear_attachments(
+                    _command_buffer: CommandBuffer,
+                    _attachment_count: u32,
+                    _p_attachments: *const ClearAttachment,
+                    _rect_count: u32,
+                    _p_rects: *const ClearRect,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_clear_attachments)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdClearAttachments);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_clear_attachments
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_resolve_image: unsafe {
+                extern "system" fn cmd_resolve_image(
+                    _command_buffer: CommandBuffer,
+                    _src_image: Image,
+                    _src_image_layout: ImageLayout,
+                    _dst_image: Image,
+                    _dst_image_layout: ImageLayout,
+                    _region_count: u32,
+                    _p_regions: *const ImageResolve,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_resolve_image)))
+                }
+                let raw_name = stringify!(vkCmdResolveImage);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_resolve_image
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_set_event: unsafe {
+                extern "system" fn cmd_set_event(
+                    _command_buffer: CommandBuffer,
+                    _event: Event,
+                    _stage_mask: PipelineStageFlags,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_set_event)))
+                }
+                let raw_name = stringify!(vkCmdSetEvent);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_set_event
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_reset_event: unsafe {
+                extern "system" fn cmd_reset_event(
+                    _command_buffer: CommandBuffer,
+                    _event: Event,
+                    _stage_mask: PipelineStageFlags,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_reset_event)))
+                }
+                let raw_name = stringify!(vkCmdResetEvent);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_reset_event
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_wait_events: unsafe {
+                extern "system" fn cmd_wait_events(
+                    _command_buffer: CommandBuffer,
+                    _event_count: u32,
+                    _p_events: *const Event,
+                    _src_stage_mask: PipelineStageFlags,
+                    _dst_stage_mask: PipelineStageFlags,
+                    _memory_barrier_count: u32,
+                    _p_memory_barriers: *const MemoryBarrier,
+                    _buffer_memory_barrier_count: u32,
+                    _p_buffer_memory_barriers: *const BufferMemoryBarrier,
+                    _image_memory_barrier_count: u32,
+                    _p_image_memory_barriers: *const ImageMemoryBarrier,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_wait_events)))
+                }
+                let raw_name = stringify!(vkCmdWaitEvents);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_wait_events
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_pipeline_barrier: unsafe {
+                extern "system" fn cmd_pipeline_barrier(
+                    _command_buffer: CommandBuffer,
+                    _src_stage_mask: PipelineStageFlags,
+                    _dst_stage_mask: PipelineStageFlags,
+                    _dependency_flags: DependencyFlags,
+                    _memory_barrier_count: u32,
+                    _p_memory_barriers: *const MemoryBarrier,
+                    _buffer_memory_barrier_count: u32,
+                    _p_buffer_memory_barriers: *const BufferMemoryBarrier,
+                    _image_memory_barrier_count: u32,
+                    _p_image_memory_barriers: *const ImageMemoryBarrier,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_pipeline_barrier)))
+                }
+                let raw_name = stringify!(vkCmdPipelineBarrier);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_pipeline_barrier
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_begin_query: unsafe {
+                extern "system" fn cmd_begin_query(
+                    _command_buffer: CommandBuffer,
+                    _query_pool: QueryPool,
+                    _query: u32,
+                    _flags: QueryControlFlags,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_begin_query)))
+                }
+                let raw_name = stringify!(vkCmdBeginQuery);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_begin_query
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_end_query: unsafe {
+                extern "system" fn cmd_end_query(
+                    _command_buffer: CommandBuffer,
+                    _query_pool: QueryPool,
+                    _query: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_end_query)))
+                }
+                let raw_name = stringify!(vkCmdEndQuery);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_end_query
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_reset_query_pool: unsafe {
+                extern "system" fn cmd_reset_query_pool(
+                    _command_buffer: CommandBuffer,
+                    _query_pool: QueryPool,
+                    _first_query: u32,
+                    _query_count: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_reset_query_pool)))
+                }
+                let raw_name = stringify!(vkCmdResetQueryPool);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_reset_query_pool
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_write_timestamp: unsafe {
+                extern "system" fn cmd_write_timestamp(
+                    _command_buffer: CommandBuffer,
+                    _pipeline_stage: PipelineStageFlags,
+                    _query_pool: QueryPool,
+                    _query: u32,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_write_timestamp)))
+                }
+                let raw_name = stringify!(vkCmdWriteTimestamp);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_write_timestamp
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_copy_query_pool_results: unsafe {
+                extern "system" fn cmd_copy_query_pool_results(
+                    _command_buffer: CommandBuffer,
+                    _query_pool: QueryPool,
+                    _first_query: u32,
+                    _query_count: u32,
+                    _dst_buffer: Buffer,
+                    _dst_offset: DeviceSize,
+                    _stride: DeviceSize,
+                    _flags: QueryResultFlags,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_copy_query_pool_results)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdCopyQueryPoolResults);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_copy_query_pool_results
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_push_constants: unsafe {
+                extern "system" fn cmd_push_constants(
+                    _command_buffer: CommandBuffer,
+                    _layout: PipelineLayout,
+                    _stage_flags: ShaderStageFlags,
+                    _offset: u32,
+                    _size: u32,
+                    _p_values: *const c_void,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_push_constants)))
+                }
+                let raw_name = stringify!(vkCmdPushConstants);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_push_constants
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_begin_render_pass: unsafe {
+                extern "system" fn cmd_begin_render_pass(
+                    _command_buffer: CommandBuffer,
+                    _p_render_pass_begin: *const RenderPassBeginInfo,
+                    _contents: SubpassContents,
+                ) -> c_void {
+                    panic!(concat!(
+                        "Unable to load ",
+                        stringify!(cmd_begin_render_pass)
+                    ))
+                }
+                let raw_name = stringify!(vkCmdBeginRenderPass);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_begin_render_pass
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_next_subpass: unsafe {
+                extern "system" fn cmd_next_subpass(
+                    _command_buffer: CommandBuffer,
+                    _contents: SubpassContents,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_next_subpass)))
+                }
+                let raw_name = stringify!(vkCmdNextSubpass);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_next_subpass
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_end_render_pass: unsafe {
+                extern "system" fn cmd_end_render_pass(_command_buffer: CommandBuffer) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_end_render_pass)))
+                }
+                let raw_name = stringify!(vkCmdEndRenderPass);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_end_render_pass
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+            cmd_execute_commands: unsafe {
+                extern "system" fn cmd_execute_commands(
+                    _command_buffer: CommandBuffer,
+                    _command_buffer_count: u32,
+                    _p_command_buffers: *const CommandBuffer,
+                ) -> c_void {
+                    panic!(concat!("Unable to load ", stringify!(cmd_execute_commands)))
+                }
+                let raw_name = stringify!(vkCmdExecuteCommands);
+                let cname = ::std::ffi::CString::new(raw_name).unwrap();
+                let val = _f(&cname);
+                if val.is_null() {
+                    cmd_execute_commands
+                } else {
+                    ::std::mem::transmute(val)
+                }
+            },
+        }
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDevice.html>"]
+    pub unsafe fn destroy_device(
+        &self,
+        device: Device,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_device)(device, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceQueue.html>"]
+    pub unsafe fn get_device_queue(
+        &self,
+        device: Device,
+        queue_family_index: u32,
+        queue_index: u32,
+        p_queue: *mut Queue,
+    ) -> c_void {
+        (self.get_device_queue)(device, queue_family_index, queue_index, p_queue)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueSubmit.html>"]
+    pub unsafe fn queue_submit(
+        &self,
+        queue: Queue,
+        submit_count: u32,
+        p_submits: *const SubmitInfo,
+        fence: Fence,
+    ) -> Result {
+        (self.queue_submit)(queue, submit_count, p_submits, fence)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueWaitIdle.html>"]
+    pub unsafe fn queue_wait_idle(&self, queue: Queue) -> Result {
+        (self.queue_wait_idle)(queue)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDeviceWaitIdle.html>"]
+    pub unsafe fn device_wait_idle(&self, device: Device) -> Result {
+        (self.device_wait_idle)(device)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateMemory.html>"]
+    pub unsafe fn allocate_memory(
+        &self,
+        device: Device,
+        p_allocate_info: *const MemoryAllocateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_memory: *mut DeviceMemory,
+    ) -> Result {
+        (self.allocate_memory)(device, p_allocate_info, p_allocator, p_memory)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeMemory.html>"]
+    pub unsafe fn free_memory(
+        &self,
+        device: Device,
+        memory: DeviceMemory,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.free_memory)(device, memory, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkMapMemory.html>"]
+    pub unsafe fn map_memory(
+        &self,
+        device: Device,
+        memory: DeviceMemory,
+        offset: DeviceSize,
+        size: DeviceSize,
+        flags: MemoryMapFlags,
+        pp_data: *mut *mut c_void,
+    ) -> Result {
+        (self.map_memory)(device, memory, offset, size, flags, pp_data)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkUnmapMemory.html>"]
+    pub unsafe fn unmap_memory(&self, device: Device, memory: DeviceMemory) -> c_void {
+        (self.unmap_memory)(device, memory)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFlushMappedMemoryRanges.html>"]
+    pub unsafe fn flush_mapped_memory_ranges(
+        &self,
+        device: Device,
+        memory_range_count: u32,
+        p_memory_ranges: *const MappedMemoryRange,
+    ) -> Result {
+        (self.flush_mapped_memory_ranges)(device, memory_range_count, p_memory_ranges)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkInvalidateMappedMemoryRanges.html>"]
+    pub unsafe fn invalidate_mapped_memory_ranges(
+        &self,
+        device: Device,
+        memory_range_count: u32,
+        p_memory_ranges: *const MappedMemoryRange,
+    ) -> Result {
+        (self.invalidate_mapped_memory_ranges)(device, memory_range_count, p_memory_ranges)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceMemoryCommitment.html>"]
+    pub unsafe fn get_device_memory_commitment(
+        &self,
+        device: Device,
+        memory: DeviceMemory,
+        p_committed_memory_in_bytes: *mut DeviceSize,
+    ) -> c_void {
+        (self.get_device_memory_commitment)(device, memory, p_committed_memory_in_bytes)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindBufferMemory.html>"]
+    pub unsafe fn bind_buffer_memory(
+        &self,
+        device: Device,
+        buffer: Buffer,
+        memory: DeviceMemory,
+        memory_offset: DeviceSize,
+    ) -> Result {
+        (self.bind_buffer_memory)(device, buffer, memory, memory_offset)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindImageMemory.html>"]
+    pub unsafe fn bind_image_memory(
+        &self,
+        device: Device,
+        image: Image,
+        memory: DeviceMemory,
+        memory_offset: DeviceSize,
+    ) -> Result {
+        (self.bind_image_memory)(device, image, memory, memory_offset)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferMemoryRequirements.html>"]
+    pub unsafe fn get_buffer_memory_requirements(
+        &self,
+        device: Device,
+        buffer: Buffer,
+        p_memory_requirements: *mut MemoryRequirements,
+    ) -> c_void {
+        (self.get_buffer_memory_requirements)(device, buffer, p_memory_requirements)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageMemoryRequirements.html>"]
+    pub unsafe fn get_image_memory_requirements(
+        &self,
+        device: Device,
+        image: Image,
+        p_memory_requirements: *mut MemoryRequirements,
+    ) -> c_void {
+        (self.get_image_memory_requirements)(device, image, p_memory_requirements)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSparseMemoryRequirements.html>"]
+    pub unsafe fn get_image_sparse_memory_requirements(
+        &self,
+        device: Device,
+        image: Image,
+        p_sparse_memory_requirement_count: *mut u32,
+        p_sparse_memory_requirements: *mut SparseImageMemoryRequirements,
+    ) -> c_void {
+        (self.get_image_sparse_memory_requirements)(
+            device,
+            image,
+            p_sparse_memory_requirement_count,
+            p_sparse_memory_requirements,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueBindSparse.html>"]
+    pub unsafe fn queue_bind_sparse(
+        &self,
+        queue: Queue,
+        bind_info_count: u32,
+        p_bind_info: *const BindSparseInfo,
+        fence: Fence,
+    ) -> Result {
+        (self.queue_bind_sparse)(queue, bind_info_count, p_bind_info, fence)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateFence.html>"]
+    pub unsafe fn create_fence(
+        &self,
+        device: Device,
+        p_create_info: *const FenceCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_fence: *mut Fence,
+    ) -> Result {
+        (self.create_fence)(device, p_create_info, p_allocator, p_fence)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyFence.html>"]
+    pub unsafe fn destroy_fence(
+        &self,
+        device: Device,
+        fence: Fence,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_fence)(device, fence, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetFences.html>"]
+    pub unsafe fn reset_fences(
+        &self,
+        device: Device,
+        fence_count: u32,
+        p_fences: *const Fence,
+    ) -> Result {
+        (self.reset_fences)(device, fence_count, p_fences)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetFenceStatus.html>"]
+    pub unsafe fn get_fence_status(&self, device: Device, fence: Fence) -> Result {
+        (self.get_fence_status)(device, fence)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkWaitForFences.html>"]
+    pub unsafe fn wait_for_fences(
+        &self,
+        device: Device,
+        fence_count: u32,
+        p_fences: *const Fence,
+        wait_all: Bool32,
+        timeout: u64,
+    ) -> Result {
+        (self.wait_for_fences)(device, fence_count, p_fences, wait_all, timeout)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateSemaphore.html>"]
+    pub unsafe fn create_semaphore(
+        &self,
+        device: Device,
+        p_create_info: *const SemaphoreCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_semaphore: *mut Semaphore,
+    ) -> Result {
+        (self.create_semaphore)(device, p_create_info, p_allocator, p_semaphore)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroySemaphore.html>"]
+    pub unsafe fn destroy_semaphore(
+        &self,
+        device: Device,
+        semaphore: Semaphore,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_semaphore)(device, semaphore, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateEvent.html>"]
+    pub unsafe fn create_event(
+        &self,
+        device: Device,
+        p_create_info: *const EventCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_event: *mut Event,
+    ) -> Result {
+        (self.create_event)(device, p_create_info, p_allocator, p_event)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyEvent.html>"]
+    pub unsafe fn destroy_event(
+        &self,
+        device: Device,
+        event: Event,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_event)(device, event, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetEventStatus.html>"]
+    pub unsafe fn get_event_status(&self, device: Device, event: Event) -> Result {
+        (self.get_event_status)(device, event)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSetEvent.html>"]
+    pub unsafe fn set_event(&self, device: Device, event: Event) -> Result {
+        (self.set_event)(device, event)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetEvent.html>"]
+    pub unsafe fn reset_event(&self, device: Device, event: Event) -> Result {
+        (self.reset_event)(device, event)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateQueryPool.html>"]
+    pub unsafe fn create_query_pool(
+        &self,
+        device: Device,
+        p_create_info: *const QueryPoolCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_query_pool: *mut QueryPool,
+    ) -> Result {
+        (self.create_query_pool)(device, p_create_info, p_allocator, p_query_pool)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyQueryPool.html>"]
+    pub unsafe fn destroy_query_pool(
+        &self,
+        device: Device,
+        query_pool: QueryPool,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_query_pool)(device, query_pool, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetQueryPoolResults.html>"]
+    pub unsafe fn get_query_pool_results(
+        &self,
+        device: Device,
+        query_pool: QueryPool,
+        first_query: u32,
+        query_count: u32,
+        data_size: usize,
+        p_data: *mut c_void,
+        stride: DeviceSize,
+        flags: QueryResultFlags,
+    ) -> Result {
+        (self.get_query_pool_results)(
+            device,
+            query_pool,
+            first_query,
+            query_count,
+            data_size,
+            p_data,
+            stride,
+            flags,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateBuffer.html>"]
+    pub unsafe fn create_buffer(
+        &self,
+        device: Device,
+        p_create_info: *const BufferCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_buffer: *mut Buffer,
+    ) -> Result {
+        (self.create_buffer)(device, p_create_info, p_allocator, p_buffer)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyBuffer.html>"]
+    pub unsafe fn destroy_buffer(
+        &self,
+        device: Device,
+        buffer: Buffer,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_buffer)(device, buffer, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateBufferView.html>"]
+    pub unsafe fn create_buffer_view(
+        &self,
+        device: Device,
+        p_create_info: *const BufferViewCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_view: *mut BufferView,
+    ) -> Result {
+        (self.create_buffer_view)(device, p_create_info, p_allocator, p_view)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyBufferView.html>"]
+    pub unsafe fn destroy_buffer_view(
+        &self,
+        device: Device,
+        buffer_view: BufferView,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_buffer_view)(device, buffer_view, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateImage.html>"]
+    pub unsafe fn create_image(
+        &self,
+        device: Device,
+        p_create_info: *const ImageCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_image: *mut Image,
+    ) -> Result {
+        (self.create_image)(device, p_create_info, p_allocator, p_image)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyImage.html>"]
+    pub unsafe fn destroy_image(
+        &self,
+        device: Device,
+        image: Image,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_image)(device, image, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSubresourceLayout.html>"]
+    pub unsafe fn get_image_subresource_layout(
+        &self,
+        device: Device,
+        image: Image,
+        p_subresource: *const ImageSubresource,
+        p_layout: *mut SubresourceLayout,
+    ) -> c_void {
+        (self.get_image_subresource_layout)(device, image, p_subresource, p_layout)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateImageView.html>"]
+    pub unsafe fn create_image_view(
+        &self,
+        device: Device,
+        p_create_info: *const ImageViewCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_view: *mut ImageView,
+    ) -> Result {
+        (self.create_image_view)(device, p_create_info, p_allocator, p_view)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyImageView.html>"]
+    pub unsafe fn destroy_image_view(
+        &self,
+        device: Device,
+        image_view: ImageView,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_image_view)(device, image_view, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateShaderModule.html>"]
+    pub unsafe fn create_shader_module(
+        &self,
+        device: Device,
+        p_create_info: *const ShaderModuleCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_shader_module: *mut ShaderModule,
+    ) -> Result {
+        (self.create_shader_module)(device, p_create_info, p_allocator, p_shader_module)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyShaderModule.html>"]
+    pub unsafe fn destroy_shader_module(
+        &self,
+        device: Device,
+        shader_module: ShaderModule,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_shader_module)(device, shader_module, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreatePipelineCache.html>"]
+    pub unsafe fn create_pipeline_cache(
+        &self,
+        device: Device,
+        p_create_info: *const PipelineCacheCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipeline_cache: *mut PipelineCache,
+    ) -> Result {
+        (self.create_pipeline_cache)(device, p_create_info, p_allocator, p_pipeline_cache)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipelineCache.html>"]
+    pub unsafe fn destroy_pipeline_cache(
+        &self,
+        device: Device,
+        pipeline_cache: PipelineCache,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_pipeline_cache)(device, pipeline_cache, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPipelineCacheData.html>"]
+    pub unsafe fn get_pipeline_cache_data(
+        &self,
+        device: Device,
+        pipeline_cache: PipelineCache,
+        p_data_size: *mut usize,
+        p_data: *mut c_void,
+    ) -> Result {
+        (self.get_pipeline_cache_data)(device, pipeline_cache, p_data_size, p_data)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkMergePipelineCaches.html>"]
+    pub unsafe fn merge_pipeline_caches(
+        &self,
+        device: Device,
+        dst_cache: PipelineCache,
+        src_cache_count: u32,
+        p_src_caches: *const PipelineCache,
+    ) -> Result {
+        (self.merge_pipeline_caches)(device, dst_cache, src_cache_count, p_src_caches)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateGraphicsPipelines.html>"]
+    pub unsafe fn create_graphics_pipelines(
+        &self,
+        device: Device,
+        pipeline_cache: PipelineCache,
+        create_info_count: u32,
+        p_create_infos: *const GraphicsPipelineCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipelines: *mut Pipeline,
+    ) -> Result {
+        (self.create_graphics_pipelines)(
+            device,
+            pipeline_cache,
+            create_info_count,
+            p_create_infos,
+            p_allocator,
+            p_pipelines,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateComputePipelines.html>"]
+    pub unsafe fn create_compute_pipelines(
+        &self,
+        device: Device,
+        pipeline_cache: PipelineCache,
+        create_info_count: u32,
+        p_create_infos: *const ComputePipelineCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipelines: *mut Pipeline,
+    ) -> Result {
+        (self.create_compute_pipelines)(
+            device,
+            pipeline_cache,
+            create_info_count,
+            p_create_infos,
+            p_allocator,
+            p_pipelines,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipeline.html>"]
+    pub unsafe fn destroy_pipeline(
+        &self,
+        device: Device,
+        pipeline: Pipeline,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_pipeline)(device, pipeline, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreatePipelineLayout.html>"]
+    pub unsafe fn create_pipeline_layout(
+        &self,
+        device: Device,
+        p_create_info: *const PipelineLayoutCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_pipeline_layout: *mut PipelineLayout,
+    ) -> Result {
+        (self.create_pipeline_layout)(device, p_create_info, p_allocator, p_pipeline_layout)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipelineLayout.html>"]
+    pub unsafe fn destroy_pipeline_layout(
+        &self,
+        device: Device,
+        pipeline_layout: PipelineLayout,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_pipeline_layout)(device, pipeline_layout, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateSampler.html>"]
+    pub unsafe fn create_sampler(
+        &self,
+        device: Device,
+        p_create_info: *const SamplerCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_sampler: *mut Sampler,
+    ) -> Result {
+        (self.create_sampler)(device, p_create_info, p_allocator, p_sampler)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroySampler.html>"]
+    pub unsafe fn destroy_sampler(
+        &self,
+        device: Device,
+        sampler: Sampler,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_sampler)(device, sampler, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDescriptorSetLayout.html>"]
+    pub unsafe fn create_descriptor_set_layout(
+        &self,
+        device: Device,
+        p_create_info: *const DescriptorSetLayoutCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_set_layout: *mut DescriptorSetLayout,
+    ) -> Result {
+        (self.create_descriptor_set_layout)(device, p_create_info, p_allocator, p_set_layout)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDescriptorSetLayout.html>"]
+    pub unsafe fn destroy_descriptor_set_layout(
+        &self,
+        device: Device,
+        descriptor_set_layout: DescriptorSetLayout,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_descriptor_set_layout)(device, descriptor_set_layout, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDescriptorPool.html>"]
+    pub unsafe fn create_descriptor_pool(
+        &self,
+        device: Device,
+        p_create_info: *const DescriptorPoolCreateInfo,
+        p_allocator: *const AllocationCallbacks,
+        p_descriptor_pool: *mut DescriptorPool,
+    ) -> Result {
+        (self.create_descriptor_pool)(device, p_create_info, p_allocator, p_descriptor_pool)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDescriptorPool.html>"]
+    pub unsafe fn destroy_descriptor_pool(
+        &self,
+        device: Device,
+        descriptor_pool: DescriptorPool,
+        p_allocator: *const AllocationCallbacks,
+    ) -> c_void {
+        (self.destroy_descriptor_pool)(device, descriptor_pool, p_allocator)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetDescriptorPool.html>"]
+    pub unsafe fn reset_descriptor_pool(
+        &self,
+        device: Device,
+        descriptor_pool: DescriptorPool,
+        flags: DescriptorPoolResetFlags,
+    ) -> Result {
+        (self.reset_descriptor_pool)(device, descriptor_pool, flags)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateDescriptorSets.html>"]
+    pub unsafe fn allocate_descriptor_sets(
+        &self,
+        device: Device,
+        p_allocate_info: *const DescriptorSetAllocateInfo,
+        p_descriptor_sets: *mut DescriptorSet,
+    ) -> Result {
+        (self.allocate_descriptor_sets)(device, p_allocate_info, p_descriptor_sets)
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeDescriptorSets.html>"]
+    pub unsafe fn free_descriptor_sets(
+        &self,
+        device: Device,
+        descriptor_pool: DescriptorPool,
+        descriptor_set_count: u32,
+        p_descriptor_sets: *const DescriptorSet,
+    ) -> Result {
+        (self.free_descriptor_sets)(
+            device,
+            descriptor_pool,
+            descriptor_set_count,
+            p_descriptor_sets,
+        )
+    }
+    #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkUpdateDescriptorSets.html>"]
+    pub unsafe fn update_descriptor_sets(
+        &self,
+        device: Device,
+        descriptor_write_count: u32,