diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da155ea41..fe3c064a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -186,7 +186,7 @@ jobs: uses: actions/cache@v4 with: path: app/src/main/assets/linuxfs - key: preloads-${{ env.PRELOAD_CACHE_VERSION }}-${{ hashFiles('app/src/main/cpp/fakeinput_steam.cpp', 'app/src/main/cpp/adrenotools/src/hook/kgsl.h', 'tools/quest/*', 'tools/linuxfs/preload/*.c', 'tools/linuxfs/build-x86-preloads.sh', 'tools/linuxfs/fex/*', 'tools/linuxfs/clipboard/*.c', 'tools/linuxfs/ssbs/*.c', 'tools/linuxfs/xclipse-layer/*', 'tools/proot/fastpath/*.c', 'tools/linuxfs/overlay/usr/local/bin/*', 'tools/linuxfs/overlay/usr/bin/**', 'tools/linuxfs/desktop/*', 'tools/gamescope/release.env', 'tools/wlroots/release.env', 'tools/linuxfs/uruntime.env', 'tools/linuxfs/licenses/*', 'tools/mangoapp/*', 'tools/msitools/**', 'tools/comet/**', 'tools/linuxfs/debian-image.env') }} + key: preloads-${{ env.PRELOAD_CACHE_VERSION }}-${{ hashFiles('app/src/main/cpp/fakeinput_steam.cpp', 'app/src/main/cpp/adrenotools/src/hook/kgsl.h', 'tools/quest/*', 'tools/linuxfs/preload/*.c', 'tools/linuxfs/build-x86-preloads.sh', 'tools/linuxfs/fex/*', 'tools/linuxfs/clipboard/*.c', 'tools/linuxfs/ssbs/*.c', 'tools/linuxfs/xclipse-layer/*', 'tools/proot/fastpath/*.c', 'tools/linuxfs/overlay/usr/local/bin/*', 'tools/linuxfs/overlay/usr/bin/**', 'tools/linuxfs/desktop/*', 'tools/gamescope/release.env', 'tools/wlroots/release.env', 'tools/linuxfs/uruntime.env', 'tools/linuxfs/licenses/*', 'tools/mangoapp/*', 'tools/msitools/**', 'tools/comet/**', 'tools/vkbridge/client/**', 'tools/vkbridge/common/**', 'tools/vkbridge/tests/**', 'tools/vkbridge/build-client-linux.sh', 'tools/linuxfs/debian-image.env') }} - name: Build libfakeinput.so and libblsession.so (glibc aarch64) if: steps.preloads.outputs.cache-hit != 'true' @@ -222,6 +222,8 @@ jobs: aarch64-linux-gnu-strip --strip-unneeded "$D/usr/local/lib/droiddeck-xclipse/libVkLayer_droiddeck_xclipse.so" install -m644 tools/linuxfs/xclipse-layer/VkLayer_droiddeck_xclipse.json "$D/usr/local/lib/droiddeck-xclipse/" mkdir -p "$D/usr/local/bin" + # The Mali bridge's Linux side: ICD, manifest and self-test (tools/vkbridge). + tools/vkbridge/build-client-linux.sh "$D" aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc -O2 -Wall -Wextra -o "$D/usr/local/bin/droiddeck-clipboard" tools/linuxfs/clipboard/clipboard.c -ldl aarch64-linux-gnu-strip --strip-unneeded "$D/usr/local/bin/droiddeck-clipboard" for script in tools/linuxfs/overlay/usr/local/bin/droiddeck-* tools/linuxfs/overlay/usr/local/bin/steam-compatibility; do @@ -412,6 +414,14 @@ jobs: run: | set -euo pipefail bash tools/linuxfs/check-preloads.sh app/src/main/assets/linuxfs + D=app/src/main/assets/linuxfs + syms() { readelf -Ws "$1" | awk '$4 == "FUNC" && $5 == "GLOBAL" {sub(/@.*/, "", $8); print $8}'; } + # The bridge ICD: libc only, and nothing exported but the loader's three entry points. + VKB="$D/usr/local/lib/vkbridge/libvulkan_droidbridge.so" + test -f "$VKB" && test -f "$D/usr/local/share/vkbridge/droidbridge_icd.json" && test -f "$D/usr/local/bin/droiddeck-vkbridge-smoke" + VKB_NEED=$(readelf -d "$VKB" | sed -n 's/.*NEEDED.*\[\(.*\)\]/\1/p' | grep -vx 'libc.so.6' | grep -vx 'ld-linux-aarch64.so.1' || true) + [ -z "$VKB_NEED" ] || { echo "::error::the bridge ICD needs $VKB_NEED"; exit 1; } + [ "$(syms "$VKB" | grep -c '^vk_icd')" = 3 ] || { echo "::error::the bridge ICD does not export the loader interface"; exit 1; } # The store download engines (app/src/main/rust/stores) are Rust, built by Gradle's # buildRustStores task through cargo-ndk. rustup and cargo are on the runner image; the Android diff --git a/app/build.gradle b/app/build.gradle index f55175d3b..cc462334d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,6 +149,9 @@ android { release { minifyEnabled false signingConfig signingConfigs.testkey + // Mali bridge development fork: debuggable so `adb shell run-as` reaches the session + // logs and VkBridgeNative's development override (-Pdroiddeck.notDebuggable to drop). + debuggable !project.hasProperty('droiddeck.notDebuggable') } } @@ -276,6 +279,24 @@ def buildRustStores = tasks.register('buildRustStores', Exec) { if (!skipRust) android.sourceSets.main.jniLibs.srcDir(rustJniLibsDir) tasks.named('preBuild').configure { dependsOn(buildRustStores) } +// The Mali bridge's server (tools/vkbridge, app/src/main/cpp/vkbridge) is a program, not a library: +// it runs beside the session as the app's child, so a driver crash ends that process and not the +// app. AGP's CMake integration packages only shared libraries, so the NDK's clang builds it here +// into one more jniLibs source, named libvkbridge_server.so so Android extracts it (the native +// library directory is the one place the app may exec from). +def vkbridgeJniLibsDir = layout.buildDirectory.dir('vkbridgeJniLibs') +def buildVkBridgeServer = tasks.register('buildVkBridgeServer', Exec) { + description = 'Builds the Vulkan bridge server (libvkbridge_server.so) with the NDK.' + inputs.dir(rootProject.file('tools/vkbridge/common')) + inputs.dir(layout.projectDirectory.dir('src/main/cpp/vkbridge')) + inputs.file(rootProject.file('tools/vkbridge/build-server-android.sh')) + outputs.dir(vkbridgeJniLibsDir) + commandLine 'bash', rootProject.file('tools/vkbridge/build-server-android.sh').absolutePath, + android.ndkDirectory.absolutePath, vkbridgeJniLibsDir.get().asFile.absolutePath +} +android.sourceSets.main.jniLibs.srcDir(vkbridgeJniLibsDir) +tasks.named('preBuild').configure { dependsOn(buildVkBridgeServer) } + dependencies { // The runtime tarball is a zstd-compressed tar. implementation 'com.github.luben:zstd-jni:1.5.2-3@aar' diff --git a/app/src/main/cpp/vkbridge/bc_spv.h b/app/src/main/cpp/vkbridge/bc_spv.h new file mode 100644 index 000000000..aa0fda66d --- /dev/null +++ b/app/src/main/cpp/vkbridge/bc_spv.h @@ -0,0 +1,4619 @@ +/* Generated by tools/vkbridge/shaders/build.sh from bc_decode.comp - do not edit. */ +#pragma once +#include + // 1115.1.0 +static const uint32_t spv_bc1[] = { + 0x07230203,0x00010300,0x0008000b,0x0000029e,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000027,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000f,0x28747570, + 0x753b3175,0x66763b31,0x00003b34,0x00030005,0x0000000c,0x00007874,0x00030005,0x0000000d, + 0x00007974,0x00030005,0x0000000e,0x00000076,0x00050005,0x00000014,0x35626772,0x75283536, + 0x00003b31,0x00030005,0x00000013,0x00000063,0x000a0005,0x00000020,0x6f6c6f63,0x6c625f72, + 0x286b636f,0x753b3175,0x31623b31,0x3475763b,0x5d36315b,0x0000003b,0x00030005,0x0000001c, + 0x00006f6c,0x00030005,0x0000001d,0x00786469,0x00040005,0x0000001e,0x7161706f,0x00006575, + 0x00040005,0x0000001f,0x65786574,0x0000736c,0x00030005,0x00000024,0x006b6c62,0x00080005, + 0x00000027,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00030005, + 0x0000002a,0x00000070,0x00030005,0x00000038,0x00004350,0x00060006,0x00000038,0x00000000, + 0x5f637273,0x64726f77,0x00000000,0x00060006,0x00000038,0x00000001,0x5f776f72,0x636f6c62, + 0x0000736b,0x00070006,0x00000038,0x00000002,0x6579616c,0x6c625f72,0x736b636f,0x00000000, + 0x00050006,0x00000038,0x00000003,0x67616c66,0x00000073,0x00050006,0x00000038,0x00000004, + 0x5f747364,0x0066666f,0x00050006,0x00000038,0x00000005,0x65747865,0x0000746e,0x00030005, + 0x0000003a,0x00006370,0x00030005,0x0000004d,0x00747364,0x00030005,0x00000066,0x00000072, + 0x00030005,0x0000006c,0x00000067,0x00030005,0x00000071,0x00000062,0x00030005,0x00000089, + 0x00003063,0x00030005,0x0000008d,0x00003163,0x00030005,0x00000091,0x00003072,0x00030005, + 0x00000095,0x00003067,0x00030005,0x00000099,0x00003062,0x00030005,0x0000009c,0x00003172, + 0x00030005,0x000000a0,0x00003167,0x00030005,0x000000a4,0x00003162,0x00030005,0x000000a9, + 0x00666572,0x00040005,0x000000ab,0x61726170,0x0000006d,0x00040005,0x000000b1,0x61726170, + 0x0000006d,0x00030005,0x0000010b,0x00000074,0x00030005,0x0000011f,0x006b6c62,0x00040005, + 0x00000122,0x6b6c626e,0x00000000,0x00040005,0x0000013b,0x64726f77,0x00000073,0x00040005, + 0x0000013c,0x65736162,0x00000000,0x00030005,0x00000150,0x00000062,0x00030005,0x00000152, + 0x00637253,0x00040006,0x00000152,0x00000000,0x00000077,0x00030005,0x00000154,0x00637273, + 0x00030005,0x00000174,0x006e6773,0x00030005,0x0000017a,0x00786574,0x00040005,0x0000017b, + 0x61726170,0x0000006d,0x00040005,0x0000017e,0x61726170,0x0000006d,0x00040005,0x00000181, + 0x61726170,0x0000006d,0x00040005,0x00000182,0x61726170,0x0000006d,0x00030005,0x00000186, + 0x00000074,0x00030005,0x0000018e,0x00000063,0x00040005,0x000001a2,0x61726170,0x0000006d, + 0x00040005,0x000001a3,0x61726170,0x0000006d,0x00040005,0x000001a4,0x61726170,0x0000006d, + 0x00040047,0x00000027,0x0000000b,0x0000001c,0x00030047,0x00000038,0x00000002,0x00050048, + 0x00000038,0x00000000,0x00000023,0x00000000,0x00050048,0x00000038,0x00000001,0x00000023, + 0x00000004,0x00050048,0x00000038,0x00000002,0x00000023,0x00000008,0x00050048,0x00000038, + 0x00000003,0x00000023,0x0000000c,0x00050048,0x00000038,0x00000004,0x00000023,0x00000010, + 0x00050048,0x00000038,0x00000005,0x00000023,0x00000018,0x00030047,0x0000004d,0x00000019, + 0x00040047,0x0000004d,0x00000021,0x00000001,0x00040047,0x0000004d,0x00000022,0x00000000, + 0x00040047,0x00000151,0x00000006,0x00000004,0x00030047,0x00000152,0x00000002,0x00040048, + 0x00000152,0x00000000,0x00000018,0x00050048,0x00000152,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000154,0x00000018,0x00040047,0x00000154,0x00000021,0x00000000,0x00040047, + 0x00000154,0x00000022,0x00000000,0x00040047,0x000001a9,0x0000000b,0x00000019,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000, + 0x00040020,0x00000007,0x00000007,0x00000006,0x00030016,0x00000008,0x00000020,0x00040017, + 0x00000009,0x00000008,0x00000004,0x00040020,0x0000000a,0x00000007,0x00000009,0x00060021, + 0x0000000b,0x00000002,0x00000007,0x00000007,0x0000000a,0x00040017,0x00000011,0x00000006, + 0x00000004,0x00040021,0x00000012,0x00000011,0x00000007,0x00020014,0x00000016,0x00040020, + 0x00000017,0x00000007,0x00000016,0x0004002b,0x00000006,0x00000018,0x00000010,0x0004001c, + 0x00000019,0x00000011,0x00000018,0x00040020,0x0000001a,0x00000007,0x00000019,0x00070021, + 0x0000001b,0x00000002,0x00000007,0x00000007,0x00000017,0x0000001a,0x00040017,0x00000022, + 0x00000006,0x00000002,0x00040020,0x00000023,0x00000007,0x00000022,0x00040017,0x00000025, + 0x00000006,0x00000003,0x00040020,0x00000026,0x00000001,0x00000025,0x0004003b,0x00000026, + 0x00000027,0x00000001,0x0004002b,0x00000006,0x0000002c,0x00000004,0x0004002b,0x00000006, + 0x00000033,0x00000000,0x00040015,0x00000036,0x00000020,0x00000001,0x00040017,0x00000037, + 0x00000036,0x00000002,0x0008001e,0x00000038,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000037,0x00000022,0x00040020,0x00000039,0x00000009,0x00000038,0x0004003b,0x00000039, + 0x0000003a,0x00000009,0x0004002b,0x00000036,0x0000003b,0x00000005,0x00040020,0x0000003c, + 0x00000009,0x00000006,0x0004002b,0x00000006,0x00000042,0x00000001,0x00090019,0x0000004b, + 0x00000008,0x00000001,0x00000000,0x00000001,0x00000000,0x00000002,0x00000004,0x00040020, + 0x0000004c,0x00000000,0x0000004b,0x0004003b,0x0000004c,0x0000004d,0x00000000,0x0004002b, + 0x00000036,0x0000004f,0x00000004,0x00040020,0x00000050,0x00000009,0x00000037,0x0004002b, + 0x00000006,0x00000056,0x00000002,0x00040020,0x00000057,0x00000001,0x00000006,0x0004002b, + 0x00000036,0x0000005a,0x00000003,0x0004002b,0x00000036,0x0000005d,0x00000008,0x00040017, + 0x00000061,0x00000036,0x00000003,0x0004002b,0x00000036,0x00000068,0x0000000b,0x0004002b, + 0x00000006,0x0000006a,0x0000001f,0x0004002b,0x00000006,0x0000006f,0x0000003f,0x0004002b, + 0x00000006,0x00000075,0x0000020f,0x0004002b,0x00000006,0x00000077,0x00000017,0x0004002b, + 0x00000036,0x00000079,0x00000006,0x0004002b,0x00000006,0x0000007c,0x00000103,0x0004002b, + 0x00000006,0x0000007e,0x00000021,0x0004002b,0x00000006,0x00000085,0x000000ff,0x0004002b, + 0x00000006,0x0000008b,0x0000ffff,0x0004002b,0x00000036,0x0000008f,0x00000010,0x0004001c, + 0x000000a7,0x00000011,0x0000002c,0x00040020,0x000000a8,0x00000007,0x000000a7,0x0004002b, + 0x00000036,0x000000aa,0x00000000,0x00040020,0x000000ae,0x00000007,0x00000011,0x0004002b, + 0x00000036,0x000000b0,0x00000001,0x0004002b,0x00000036,0x000000bc,0x00000002,0x0004002b, + 0x00000006,0x000000c1,0x0000015f,0x0004002b,0x00000006,0x000000c3,0x0000003d,0x0004002b, + 0x00000036,0x000000c5,0x00000007,0x0004002b,0x00000006,0x000000cb,0x00000acb,0x0004002b, + 0x00000006,0x000000cd,0x0000040f,0x0004002b,0x00000006,0x000000f4,0x0000041d,0x0004002b, + 0x00000006,0x000000f6,0x0000007d,0x0004002b,0x00000006,0x000000fc,0x00001031,0x0004002b, + 0x00000006,0x000000fe,0x000003fb,0x0007002c,0x00000011,0x00000109,0x00000033,0x00000033, + 0x00000033,0x00000033,0x0004002b,0x00000006,0x00000118,0x00000003,0x00040020,0x00000123, + 0x00000009,0x00000022,0x0003001d,0x00000151,0x00000006,0x0003001e,0x00000152,0x00000151, + 0x00040020,0x00000153,0x0000000c,0x00000152,0x0004003b,0x00000153,0x00000154,0x0000000c, + 0x00040020,0x00000156,0x0000000c,0x00000006,0x0003002a,0x00000016,0x00000179,0x0004002b, + 0x00000008,0x0000019f,0x437f0000,0x0004002b,0x00000006,0x000001a8,0x00000008,0x0006002c, + 0x00000025,0x000001a9,0x000001a8,0x000001a8,0x00000042,0x0004002b,0x00000006,0x000001aa, + 0x00000020,0x0004001c,0x000001ab,0x00000036,0x000001aa,0x0004002b,0x00000036,0x000001ac, + 0x0000000a,0x0004002b,0x00000036,0x000001ad,0xffffffff,0x0004002b,0x00000036,0x000001ae, + 0x0000000c,0x0004002b,0x00000036,0x000001af,0x0000000d,0x0004002b,0x00000036,0x000001b0, + 0x00000009,0x0023002c,0x000001ab,0x000001b1,0x000000aa,0x000000b0,0x000000bc,0x000001ac, + 0x000001ad,0x000001ad,0x0000005a,0x00000068,0x000001ad,0x000001ad,0x0000004f,0x000001ae, + 0x000001ad,0x000001ad,0x0000003b,0x000001af,0x000001ad,0x000001ad,0x00000079,0x000001ad, + 0x000001ad,0x000001ad,0x000000c5,0x000001ad,0x000001ad,0x000001ad,0x0000005d,0x000001ad, + 0x000001ad,0x000001ad,0x000001b0,0x000001ad,0x0004002b,0x00000006,0x000001b2,0x0000000f, + 0x0004001c,0x000001b3,0x00000006,0x000001b2,0x0004002b,0x00000006,0x000001b4,0x00000014, + 0x0004002b,0x00000006,0x000001b5,0x0000002c,0x0004002b,0x00000006,0x000001b6,0x00000054, + 0x0004002b,0x00000006,0x000001b7,0x00000069,0x0004002b,0x00000006,0x000001b8,0x00000091, + 0x0004002b,0x00000006,0x000001b9,0x000000a7,0x0004002b,0x00000006,0x000001ba,0x000000bd, + 0x0004002b,0x00000006,0x000001bb,0x000000d5,0x0004002b,0x00000006,0x000001bc,0x000000db, + 0x0004002b,0x00000006,0x000001bd,0x000000e4,0x0004002b,0x00000006,0x000001be,0x000000ed, + 0x0004002b,0x00000006,0x000001bf,0x000000f6,0x0012002c,0x000001b3,0x000001c0,0x00000033, + 0x000001b4,0x000001b5,0x0000006f,0x000001b6,0x000001b7,0x000000f6,0x000001b8,0x000001b9, + 0x000001ba,0x000001bb,0x000001bc,0x000001bd,0x000001be,0x000001bf,0x0004001c,0x000001c1, + 0x00000006,0x000001bf,0x0004002b,0x00000006,0x000001c2,0x00000816,0x0004002b,0x00000006, + 0x000001c3,0x0000081a,0x0004002b,0x00000006,0x000001c4,0x0000081b,0x0004002b,0x00000006, + 0x000001c5,0x000000a0,0x0004002b,0x00000006,0x000001c6,0x000000a4,0x0004002b,0x00000006, + 0x000001c7,0x000000a8,0x0004002b,0x00000006,0x000001c8,0x00000051,0x0004002b,0x00000006, + 0x000001c9,0x00000817,0x0004002b,0x00000006,0x000001ca,0x00000046,0x0004002b,0x00000006, + 0x000001cb,0x00000055,0x0004002b,0x00000006,0x000001cc,0x0000001b,0x0004002b,0x00000006, + 0x000001cd,0x00000047,0x0004002b,0x00000006,0x000001ce,0x00000059,0x0004002b,0x00000006, + 0x000001cf,0x0000021b,0x0004002b,0x00000006,0x000001d0,0x0000004a,0x0004002b,0x00000006, + 0x000001d1,0x00000052,0x0004002b,0x00000006,0x000001d2,0x0000041b,0x0004002b,0x00000006, + 0x000001d3,0x00000053,0x0004002b,0x00000006,0x000001d4,0x0000061b,0x0004002b,0x00000006, + 0x000001d5,0x0000005c,0x0004002b,0x00000006,0x000001d6,0x00000a16,0x0004002b,0x00000006, + 0x000001d7,0x00000a17,0x0004002b,0x00000006,0x000001d8,0x00000070,0x0004002b,0x00000006, + 0x000001d9,0x00000074,0x0004002b,0x00000006,0x000001da,0x00000a1a,0x0004002b,0x00000006, + 0x000001db,0x00000078,0x0004002b,0x00000006,0x000001dc,0x00000a1b,0x0004002b,0x00000006, + 0x000001dd,0x00000061,0x0004002b,0x00000006,0x000001de,0x00000065,0x0004002b,0x00000006, + 0x000001df,0x00000062,0x0004002b,0x00000006,0x000001e0,0x00000063,0x0004002b,0x00000006, + 0x000001e1,0x00001410,0x0004002b,0x00000006,0x000001e2,0x00000045,0x0004002b,0x00000006, + 0x000001e3,0x00001414,0x0004002b,0x00000006,0x000001e4,0x00000049,0x0004002b,0x00000006, + 0x000001e5,0x00001418,0x0004002b,0x00000006,0x000001e6,0x00000041,0x0004002b,0x00000006, + 0x000001e7,0x00000042,0x0004002b,0x00000006,0x000001e8,0x00000043,0x0004002b,0x00000006, + 0x000001e9,0x00000090,0x0004002b,0x00000006,0x000001ea,0x00000094,0x0004002b,0x00000006, + 0x000001eb,0x00000098,0x0004002b,0x00000006,0x000001ec,0x00000080,0x0004002b,0x00000006, + 0x000001ed,0x00000084,0x0004002b,0x00000006,0x000001ee,0x00000088,0x0004002b,0x00000006, + 0x000001ef,0x00000060,0x0004002b,0x00000006,0x000001f0,0x00000064,0x0004002b,0x00000006, + 0x000001f1,0x00000068,0x0004002b,0x00000006,0x000001f2,0x000000a1,0x0004002b,0x00000006, + 0x000001f3,0x000000a5,0x0004002b,0x00000006,0x000001f4,0x000000a9,0x0004002b,0x00000006, + 0x000001f5,0x00000095,0x0004002b,0x00000006,0x000001f6,0x00000099,0x0004002b,0x00000006, + 0x000001f7,0x00000081,0x0004002b,0x00000006,0x000001f8,0x00005420,0x0004002b,0x00000006, + 0x000001f9,0x00000085,0x0004002b,0x00000006,0x000001fa,0x00005424,0x0004002b,0x00000006, + 0x000001fb,0x00000089,0x0004002b,0x00000006,0x000001fc,0x00005428,0x0004002b,0x00000006, + 0x000001fd,0x00005460,0x0004002b,0x00000006,0x000001fe,0x00005464,0x0004002b,0x00000006, + 0x000001ff,0x00005468,0x00f9002c,0x000001c1,0x00000200,0x000001c2,0x000001c3,0x000001c4, + 0x000001c5,0x000001c6,0x000001c7,0x000001c8,0x000001c9,0x000001ca,0x000001cb,0x000001cc, + 0x000001cd,0x000001ce,0x000001cf,0x000001d0,0x000001d1,0x000001d2,0x000001d3,0x000001d4, + 0x000001d5,0x000001d6,0x000001c9,0x000001d7,0x000001d8,0x000001cc,0x000001cf,0x000001c3, + 0x000001d9,0x000001da,0x000001d2,0x000001c2,0x000001db,0x000001d4,0x000001dc,0x000001c4, + 0x000001dd,0x000001ca,0x000001de,0x000001cd,0x000001b7,0x000001d0,0x000001df,0x000001e0, + 0x000001d5,0x000001c5,0x000001c6,0x000001c7,0x000001c8,0x000001e1,0x000001ca,0x000001e2, + 0x000001e3,0x000001cc,0x000001cd,0x000001e4,0x000001e5,0x000001cf,0x000001d0,0x000001d1, + 0x000001d2,0x000001d3,0x000001d4,0x000001d5,0x000001c5,0x000001c6,0x000001c7,0x000001e6, + 0x000001e1,0x000001c9,0x000001ca,0x000001cb,0x000001e3,0x000001cd,0x000001e4,0x000001e5, + 0x000001cf,0x000001d0,0x000001e7,0x000001cc,0x000001d2,0x000001e8,0x000001c2,0x000001d4, + 0x000001d5,0x000001c5,0x000001c6,0x000001c7,0x000001e6,0x000001e1,0x000001c3,0x000001ca, + 0x000001e2,0x000001e3,0x000001cc,0x000001cd,0x000001ce,0x000001e5,0x000001d0,0x000001e7, + 0x000001cf,0x000001d2,0x000001e8,0x000001c4,0x000001d4,0x000001d5,0x000001e9,0x000001c3, + 0x000001ea,0x000001c2,0x000001eb,0x000001c4,0x000001c8,0x000001c9,0x000001ca,0x000001cb, + 0x000001cc,0x000001cd,0x000001ce,0x000001cf,0x000001d0,0x000001d1,0x000001d2,0x000001d3, + 0x000001d4,0x000001d5,0x000001ec,0x000001c9,0x000001c3,0x000001ed,0x000001d2,0x000001c2, + 0x000001ee,0x000001d4,0x000001c4,0x000001dd,0x000001ca,0x000001cb,0x000001cc,0x000001cd, + 0x000001ce,0x000001cf,0x000001d0,0x000001df,0x000001e0,0x000001d5,0x000001ec,0x000001cc, + 0x000001c3,0x000001ed,0x000001d6,0x000001c2,0x000001ee,0x000001d7,0x000001c4,0x000001c8, + 0x000001c9,0x000001ca,0x000001de,0x000001cd,0x000001ce,0x000001cf,0x000001d0,0x000001d1, + 0x000001d2,0x000001d3,0x000001d4,0x000001d5,0x000001ec,0x000001cf,0x000001c3,0x000001ed, + 0x000001da,0x000001c2,0x000001ee,0x000001dc,0x000001c4,0x000001c8,0x000001c9,0x000001ca, + 0x000001cb,0x000001cc,0x000001cd,0x000001b7,0x000001d0,0x000001d1,0x000001d2,0x000001d3, + 0x000001d4,0x000001d5,0x000001ef,0x000001c9,0x000001cc,0x000001cf,0x000001c3,0x000001f0, + 0x000001d6,0x000001da,0x000001d2,0x000001c2,0x000001f1,0x000001d7,0x000001d4,0x000001dc, + 0x000001c4,0x000001dd,0x000001ca,0x000001de,0x000001cd,0x000001b7,0x000001d0,0x000001df, + 0x000001e0,0x000001d5,0x000001c5,0x000001c6,0x000001c7,0x000001f2,0x000001f3,0x000001f4, + 0x000001c5,0x000001c6,0x000001c7,0x000001b8,0x000001e1,0x000001f5,0x000001e3,0x000001f6, + 0x000001e5,0x000001c5,0x000001c6,0x000001c7,0x000001f7,0x000001f8,0x000001f9,0x000001fa, + 0x000001fb,0x000001fc,0x000001c5,0x000001c6,0x000001c7,0x000001e6,0x000001fd,0x000001e2, + 0x000001fe,0x000001e4,0x000001ff,0x0004002b,0x00000006,0x00000201,0x0000000e,0x0004001c, + 0x00000202,0x00000036,0x00000201,0x0011002c,0x00000202,0x00000203,0x000001ac,0x000000c5, + 0x00000068,0x00000068,0x00000068,0x000001b0,0x0000005d,0x0000005d,0x0000005d,0x00000079, + 0x000001ac,0x00000068,0x000001ae,0x0000008f,0x0011002c,0x00000202,0x00000204,0x0000003b, + 0x00000079,0x0000003b,0x0000004f,0x0000004f,0x0000003b,0x00000079,0x0000003b,0x0000003b, + 0x00000079,0x000001ac,0x000001b0,0x0000005d,0x0000004f,0x0011002c,0x00000202,0x00000205, + 0x0000003b,0x00000079,0x0000004f,0x0000003b,0x0000004f,0x0000003b,0x0000003b,0x00000079, + 0x0000003b,0x00000079,0x000001ac,0x000001b0,0x0000005d,0x0000004f,0x0011002c,0x00000202, + 0x00000206,0x0000003b,0x00000079,0x0000004f,0x0000004f,0x0000003b,0x0000003b,0x0000003b, + 0x0000003b,0x00000079,0x00000079,0x000001ac,0x000001b0,0x0000005d,0x0000004f,0x0004002b, + 0x00000006,0x00000207,0x00000040,0x0004001c,0x00000208,0x00000006,0x00000207,0x0004002b, + 0x00000006,0x00000209,0x50505050,0x0004002b,0x00000006,0x0000020a,0x40404040,0x0004002b, + 0x00000006,0x0000020b,0x54545454,0x0004002b,0x00000006,0x0000020c,0x54505040,0x0004002b, + 0x00000006,0x0000020d,0x50404000,0x0004002b,0x00000006,0x0000020e,0x55545450,0x0004002b, + 0x00000006,0x0000020f,0x55545040,0x0004002b,0x00000006,0x00000210,0x54504000,0x0004002b, + 0x00000006,0x00000211,0x50400000,0x0004002b,0x00000006,0x00000212,0x55555450,0x0004002b, + 0x00000006,0x00000213,0x55544000,0x0004002b,0x00000006,0x00000214,0x54400000,0x0004002b, + 0x00000006,0x00000215,0x55555440,0x0004002b,0x00000006,0x00000216,0x55550000,0x0004002b, + 0x00000006,0x00000217,0x55555500,0x0004002b,0x00000006,0x00000218,0x55000000,0x0004002b, + 0x00000006,0x00000219,0x55150100,0x0004002b,0x00000006,0x0000021a,0x00004054,0x0004002b, + 0x00000006,0x0000021b,0x15010000,0x0004002b,0x00000006,0x0000021c,0x00405054,0x0004002b, + 0x00000006,0x0000021d,0x00004050,0x0004002b,0x00000006,0x0000021e,0x15050100,0x0004002b, + 0x00000006,0x0000021f,0x05010000,0x0004002b,0x00000006,0x00000220,0x40505054,0x0004002b, + 0x00000006,0x00000221,0x00404050,0x0004002b,0x00000006,0x00000222,0x05010100,0x0004002b, + 0x00000006,0x00000223,0x14141414,0x0004002b,0x00000006,0x00000224,0x05141450,0x0004002b, + 0x00000006,0x00000225,0x01155440,0x0004002b,0x00000006,0x00000226,0x00555500,0x0004002b, + 0x00000006,0x00000227,0x15014054,0x0004002b,0x00000006,0x00000228,0x05414150,0x0004002b, + 0x00000006,0x00000229,0x44444444,0x0004002b,0x00000006,0x0000022a,0x55005500,0x0004002b, + 0x00000006,0x0000022b,0x11441144,0x0004002b,0x00000006,0x0000022c,0x05055050,0x0004002b, + 0x00000006,0x0000022d,0x05500550,0x0004002b,0x00000006,0x0000022e,0x11114444,0x0004002b, + 0x00000006,0x0000022f,0x41144114,0x0004002b,0x00000006,0x00000230,0x44111144,0x0004002b, + 0x00000006,0x00000231,0x15055054,0x0004002b,0x00000006,0x00000232,0x01055040,0x0004002b, + 0x00000006,0x00000233,0x05041050,0x0004002b,0x00000006,0x00000234,0x05455150,0x0004002b, + 0x00000006,0x00000235,0x14414114,0x0004002b,0x00000006,0x00000236,0x50050550,0x0004002b, + 0x00000006,0x00000237,0x41411414,0x0004002b,0x00000006,0x00000238,0x00141400,0x0004002b, + 0x00000006,0x00000239,0x00041504,0x0004002b,0x00000006,0x0000023a,0x00105410,0x0004002b, + 0x00000006,0x0000023b,0x10541000,0x0004002b,0x00000006,0x0000023c,0x04150400,0x0004002b, + 0x00000006,0x0000023d,0x50410514,0x0004002b,0x00000006,0x0000023e,0x41051450,0x0004002b, + 0x00000006,0x0000023f,0x05415014,0x0004002b,0x00000006,0x00000240,0x14054150,0x0004002b, + 0x00000006,0x00000241,0x41050514,0x0004002b,0x00000006,0x00000242,0x41505014,0x0004002b, + 0x00000006,0x00000243,0x40011554,0x0004002b,0x00000006,0x00000244,0x54150140,0x0004002b, + 0x00000006,0x00000245,0x50505500,0x0004002b,0x00000006,0x00000246,0x00555050,0x0004002b, + 0x00000006,0x00000247,0x15151010,0x0004002b,0x00000006,0x00000248,0x54540404,0x0043002c, + 0x00000208,0x00000249,0x00000209,0x0000020a,0x0000020b,0x0000020c,0x0000020d,0x0000020e, + 0x0000020f,0x00000210,0x00000211,0x00000212,0x00000213,0x00000214,0x00000215,0x00000216, + 0x00000217,0x00000218,0x00000219,0x0000021a,0x0000021b,0x0000021c,0x0000021d,0x0000021e, + 0x0000021f,0x00000220,0x00000221,0x00000222,0x00000223,0x00000224,0x00000225,0x00000226, + 0x00000227,0x00000228,0x00000229,0x0000022a,0x0000022b,0x0000022c,0x0000022d,0x0000022e, + 0x0000022f,0x00000230,0x00000231,0x00000232,0x00000233,0x00000234,0x00000235,0x00000236, + 0x00000237,0x00000238,0x00000239,0x0000023a,0x0000023b,0x0000023c,0x0000023d,0x0000023e, + 0x0000023f,0x00000240,0x00000241,0x00000242,0x00000243,0x00000244,0x00000245,0x00000246, + 0x00000247,0x00000248,0x0004002b,0x00000006,0x0000024a,0x00000006,0x0043002c,0x00000208, + 0x0000024b,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2, + 0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2, + 0x000001b2,0x000001b2,0x00000056,0x000001a8,0x00000056,0x00000056,0x000001a8,0x000001a8, + 0x000001b2,0x00000056,0x000001a8,0x00000056,0x00000056,0x000001a8,0x000001a8,0x00000056, + 0x00000056,0x000001b2,0x000001b2,0x0000024a,0x000001a8,0x00000056,0x000001a8,0x000001b2, + 0x000001b2,0x00000056,0x000001a8,0x00000056,0x00000056,0x00000056,0x000001b2,0x000001b2, + 0x0000024a,0x0000024a,0x00000056,0x0000024a,0x000001a8,0x000001b2,0x000001b2,0x00000056, + 0x00000056,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x000001b2,0x00000056,0x00000056, + 0x000001b2,0x0004002b,0x00000006,0x0000024c,0xaa685050,0x0004002b,0x00000006,0x0000024d, + 0x6a5a5040,0x0004002b,0x00000006,0x0000024e,0x5a5a4200,0x0004002b,0x00000006,0x0000024f, + 0x5450a0a8,0x0004002b,0x00000006,0x00000250,0xa5a50000,0x0004002b,0x00000006,0x00000251, + 0xa0a05050,0x0004002b,0x00000006,0x00000252,0x5555a0a0,0x0004002b,0x00000006,0x00000253, + 0x5a5a5050,0x0004002b,0x00000006,0x00000254,0xaa550000,0x0004002b,0x00000006,0x00000255, + 0xaa555500,0x0004002b,0x00000006,0x00000256,0xaaaa5500,0x0004002b,0x00000006,0x00000257, + 0x90909090,0x0004002b,0x00000006,0x00000258,0x94949494,0x0004002b,0x00000006,0x00000259, + 0xa4a4a4a4,0x0004002b,0x00000006,0x0000025a,0xa9a59450,0x0004002b,0x00000006,0x0000025b, + 0x2a0a4250,0x0004002b,0x00000006,0x0000025c,0xa5945040,0x0004002b,0x00000006,0x0000025d, + 0x0a425054,0x0004002b,0x00000006,0x0000025e,0xa5a5a500,0x0004002b,0x00000006,0x0000025f, + 0x55a0a0a0,0x0004002b,0x00000006,0x00000260,0xa8a85454,0x0004002b,0x00000006,0x00000261, + 0x6a6a4040,0x0004002b,0x00000006,0x00000262,0xa4a45000,0x0004002b,0x00000006,0x00000263, + 0x1a1a0500,0x0004002b,0x00000006,0x00000264,0x0050a4a4,0x0004002b,0x00000006,0x00000265, + 0xaaa59090,0x0004002b,0x00000006,0x00000266,0x14696914,0x0004002b,0x00000006,0x00000267, + 0x69691400,0x0004002b,0x00000006,0x00000268,0xa08585a0,0x0004002b,0x00000006,0x00000269, + 0xaa821414,0x0004002b,0x00000006,0x0000026a,0x50a4a450,0x0004002b,0x00000006,0x0000026b, + 0x6a5a0200,0x0004002b,0x00000006,0x0000026c,0xa9a58000,0x0004002b,0x00000006,0x0000026d, + 0x5090a0a8,0x0004002b,0x00000006,0x0000026e,0xa8a09050,0x0004002b,0x00000006,0x0000026f, + 0x24242424,0x0004002b,0x00000006,0x00000270,0x00aa5500,0x0004002b,0x00000006,0x00000271, + 0x24924924,0x0004002b,0x00000006,0x00000272,0x24499224,0x0004002b,0x00000006,0x00000273, + 0x50a50a50,0x0004002b,0x00000006,0x00000274,0x500aa550,0x0004002b,0x00000006,0x00000275, + 0xaaaa4444,0x0004002b,0x00000006,0x00000276,0x66660000,0x0004002b,0x00000006,0x00000277, + 0xa5a0a5a0,0x0004002b,0x00000006,0x00000278,0x50a050a0,0x0004002b,0x00000006,0x00000279, + 0x69286928,0x0004002b,0x00000006,0x0000027a,0x44aaaa44,0x0004002b,0x00000006,0x0000027b, + 0x66666600,0x0004002b,0x00000006,0x0000027c,0xaa444444,0x0004002b,0x00000006,0x0000027d, + 0x54a854a8,0x0004002b,0x00000006,0x0000027e,0x95809580,0x0004002b,0x00000006,0x0000027f, + 0x96969600,0x0004002b,0x00000006,0x00000280,0xa85454a8,0x0004002b,0x00000006,0x00000281, + 0x80959580,0x0004002b,0x00000006,0x00000282,0xaa141414,0x0004002b,0x00000006,0x00000283, + 0x96960000,0x0004002b,0x00000006,0x00000284,0xaaaa1414,0x0004002b,0x00000006,0x00000285, + 0xa05050a0,0x0004002b,0x00000006,0x00000286,0xa0a5a5a0,0x0004002b,0x00000006,0x00000287, + 0x96000000,0x0004002b,0x00000006,0x00000288,0x40804080,0x0004002b,0x00000006,0x00000289, + 0xa9a8a9a8,0x0004002b,0x00000006,0x0000028a,0xaaaaaa44,0x0004002b,0x00000006,0x0000028b, + 0x2a4a5254,0x0043002c,0x00000208,0x0000028c,0x0000024c,0x0000024d,0x0000024e,0x0000024f, + 0x00000250,0x00000251,0x00000252,0x00000253,0x00000254,0x00000255,0x00000256,0x00000257, + 0x00000258,0x00000259,0x0000025a,0x0000025b,0x0000025c,0x0000025d,0x0000025e,0x0000025f, + 0x00000260,0x00000261,0x00000262,0x00000263,0x00000264,0x00000265,0x00000266,0x00000267, + 0x00000268,0x00000269,0x0000026a,0x0000026b,0x0000026c,0x0000026d,0x0000026e,0x0000026f, + 0x00000270,0x00000271,0x00000272,0x00000273,0x00000274,0x00000275,0x00000276,0x00000277, + 0x00000278,0x00000279,0x0000027a,0x0000027b,0x0000027c,0x0000027d,0x0000027e,0x0000027f, + 0x00000280,0x00000281,0x00000282,0x00000283,0x00000284,0x00000285,0x00000286,0x00000287, + 0x00000288,0x00000289,0x0000028a,0x0000028b,0x0004002b,0x00000006,0x0000028d,0x000000f3, + 0x0004002b,0x00000006,0x0000028e,0x00000083,0x0004002b,0x00000006,0x0000028f,0x0000008f, + 0x0004002b,0x00000006,0x00000290,0x000000f8,0x0004002b,0x00000006,0x00000291,0x000000f5, + 0x0004002b,0x00000006,0x00000292,0x0000008a,0x0004002b,0x00000006,0x00000293,0x00000035, + 0x0004002b,0x00000006,0x00000294,0x000000a6,0x0004002b,0x00000006,0x00000295,0x000000af, + 0x0004002b,0x00000006,0x00000296,0x0000006f,0x0004002b,0x00000006,0x00000297,0x000000fa, + 0x0004002b,0x00000006,0x00000298,0x000000fd,0x0004002b,0x00000006,0x00000299,0x000000fc, + 0x0043002c,0x00000208,0x0000029a,0x0000028d,0x0000028e,0x0000028f,0x0000006f,0x00000290, + 0x0000028d,0x0000006f,0x0000028f,0x00000290,0x00000290,0x000001bf,0x000001bf,0x000001bf, + 0x00000291,0x0000028d,0x0000028e,0x0000028d,0x0000028e,0x00000290,0x0000006f,0x0000028d, + 0x0000028e,0x000001bf,0x00000292,0x00000293,0x00000290,0x000001f1,0x00000294,0x00000290, + 0x00000291,0x00000295,0x0000028f,0x00000290,0x0000006f,0x0000028d,0x000001f3,0x00000294, + 0x00000292,0x000001eb,0x00000295,0x00000296,0x0000028d,0x0000028f,0x00000291,0x0000006f, + 0x00000296,0x00000296,0x0000028f,0x0000028d,0x0000006f,0x00000291,0x00000291,0x00000291, + 0x00000290,0x00000291,0x00000297,0x00000291,0x00000297,0x00000290,0x00000298,0x0000006f, + 0x00000299,0x0000028d,0x0000028e,0x0004001c,0x0000029b,0x00000036,0x000001a8,0x000b002c, + 0x0000029b,0x0000029c,0x0000004f,0x00000079,0x0000003b,0x000000c5,0x0000003b,0x000000c5, + 0x000000c5,0x0000003b,0x000b002c,0x0000029b,0x0000029d,0x000000aa,0x000000aa,0x000000aa, + 0x000000aa,0x00000079,0x0000005d,0x000000c5,0x0000003b,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000023,0x0000011f,0x00000007, + 0x0004003b,0x00000023,0x00000122,0x00000007,0x0004003b,0x00000007,0x0000013b,0x00000007, + 0x0004003b,0x00000007,0x0000013c,0x00000007,0x0004003b,0x000000ae,0x00000150,0x00000007, + 0x0004003b,0x00000007,0x0000015f,0x00000007,0x0004003b,0x00000007,0x0000016a,0x00000007, + 0x0004003b,0x00000017,0x00000174,0x00000007,0x0004003b,0x0000001a,0x0000017a,0x00000007, + 0x0004003b,0x00000007,0x0000017b,0x00000007,0x0004003b,0x00000007,0x0000017e,0x00000007, + 0x0004003b,0x00000017,0x00000181,0x00000007,0x0004003b,0x0000001a,0x00000182,0x00000007, + 0x0004003b,0x00000007,0x00000186,0x00000007,0x0004003b,0x000000ae,0x0000018e,0x00000007, + 0x0004003b,0x00000007,0x000001a2,0x00000007,0x0004003b,0x00000007,0x000001a3,0x00000007, + 0x0004003b,0x0000000a,0x000001a4,0x00000007,0x0004003d,0x00000025,0x00000120,0x00000027, + 0x0007004f,0x00000022,0x00000121,0x00000120,0x00000120,0x00000000,0x00000001,0x0003003e, + 0x0000011f,0x00000121,0x00050041,0x00000123,0x00000124,0x0000003a,0x0000003b,0x0004003d, + 0x00000022,0x00000125,0x00000124,0x00050050,0x00000022,0x00000126,0x00000118,0x00000118, + 0x00050080,0x00000022,0x00000127,0x00000125,0x00000126,0x00050050,0x00000022,0x00000128, + 0x0000002c,0x0000002c,0x00050086,0x00000022,0x00000129,0x00000127,0x00000128,0x0003003e, + 0x00000122,0x00000129,0x00050041,0x00000007,0x0000012a,0x0000011f,0x00000033,0x0004003d, + 0x00000006,0x0000012b,0x0000012a,0x00050041,0x00000007,0x0000012c,0x00000122,0x00000033, + 0x0004003d,0x00000006,0x0000012d,0x0000012c,0x000500ae,0x00000016,0x0000012e,0x0000012b, + 0x0000012d,0x000400a8,0x00000016,0x0000012f,0x0000012e,0x000300f7,0x00000131,0x00000000, + 0x000400fa,0x0000012f,0x00000130,0x00000131,0x000200f8,0x00000130,0x00050041,0x00000007, + 0x00000132,0x0000011f,0x00000042,0x0004003d,0x00000006,0x00000133,0x00000132,0x00050041, + 0x00000007,0x00000134,0x00000122,0x00000042,0x0004003d,0x00000006,0x00000135,0x00000134, + 0x000500ae,0x00000016,0x00000136,0x00000133,0x00000135,0x000200f9,0x00000131,0x000200f8, + 0x00000131,0x000700f5,0x00000016,0x00000137,0x0000012e,0x00000005,0x00000136,0x00000130, + 0x000300f7,0x00000139,0x00000000,0x000400fa,0x00000137,0x00000138,0x00000139,0x000200f8, + 0x00000138,0x000100fd,0x000200f8,0x00000139,0x0003003e,0x0000013b,0x00000056,0x00050041, + 0x0000003c,0x0000013d,0x0000003a,0x000000aa,0x0004003d,0x00000006,0x0000013e,0x0000013d, + 0x00050041,0x00000057,0x0000013f,0x00000027,0x00000056,0x0004003d,0x00000006,0x00000140, + 0x0000013f,0x00050041,0x0000003c,0x00000141,0x0000003a,0x000000bc,0x0004003d,0x00000006, + 0x00000142,0x00000141,0x00050084,0x00000006,0x00000143,0x00000140,0x00000142,0x00050041, + 0x00000007,0x00000144,0x0000011f,0x00000042,0x0004003d,0x00000006,0x00000145,0x00000144, + 0x00050041,0x0000003c,0x00000146,0x0000003a,0x000000b0,0x0004003d,0x00000006,0x00000147, + 0x00000146,0x00050084,0x00000006,0x00000148,0x00000145,0x00000147,0x00050080,0x00000006, + 0x00000149,0x00000143,0x00000148,0x00050041,0x00000007,0x0000014a,0x0000011f,0x00000033, + 0x0004003d,0x00000006,0x0000014b,0x0000014a,0x00050080,0x00000006,0x0000014c,0x00000149, + 0x0000014b,0x0004003d,0x00000006,0x0000014d,0x0000013b,0x00050084,0x00000006,0x0000014e, + 0x0000014c,0x0000014d,0x00050080,0x00000006,0x0000014f,0x0000013e,0x0000014e,0x0003003e, + 0x0000013c,0x0000014f,0x0004003d,0x00000006,0x00000155,0x0000013c,0x00060041,0x00000156, + 0x00000157,0x00000154,0x000000aa,0x00000155,0x0004003d,0x00000006,0x00000158,0x00000157, + 0x0004003d,0x00000006,0x00000159,0x0000013c,0x00050080,0x00000006,0x0000015a,0x00000159, + 0x00000042,0x00060041,0x00000156,0x0000015b,0x00000154,0x000000aa,0x0000015a,0x0004003d, + 0x00000006,0x0000015c,0x0000015b,0x0004003d,0x00000006,0x0000015d,0x0000013b,0x000500ac, + 0x00000016,0x0000015e,0x0000015d,0x00000056,0x000300f7,0x00000161,0x00000000,0x000400fa, + 0x0000015e,0x00000160,0x00000166,0x000200f8,0x00000160,0x0004003d,0x00000006,0x00000162, + 0x0000013c,0x00050080,0x00000006,0x00000163,0x00000162,0x00000056,0x00060041,0x00000156, + 0x00000164,0x00000154,0x000000aa,0x00000163,0x0004003d,0x00000006,0x00000165,0x00000164, + 0x0003003e,0x0000015f,0x00000165,0x000200f9,0x00000161,0x000200f8,0x00000166,0x0003003e, + 0x0000015f,0x00000033,0x000200f9,0x00000161,0x000200f8,0x00000161,0x0004003d,0x00000006, + 0x00000167,0x0000015f,0x0004003d,0x00000006,0x00000168,0x0000013b,0x000500ac,0x00000016, + 0x00000169,0x00000168,0x00000056,0x000300f7,0x0000016c,0x00000000,0x000400fa,0x00000169, + 0x0000016b,0x00000171,0x000200f8,0x0000016b,0x0004003d,0x00000006,0x0000016d,0x0000013c, + 0x00050080,0x00000006,0x0000016e,0x0000016d,0x00000118,0x00060041,0x00000156,0x0000016f, + 0x00000154,0x000000aa,0x0000016e,0x0004003d,0x00000006,0x00000170,0x0000016f,0x0003003e, + 0x0000016a,0x00000170,0x000200f9,0x0000016c,0x000200f8,0x00000171,0x0003003e,0x0000016a, + 0x00000033,0x000200f9,0x0000016c,0x000200f8,0x0000016c,0x0004003d,0x00000006,0x00000172, + 0x0000016a,0x00070050,0x00000011,0x00000173,0x00000158,0x0000015c,0x00000167,0x00000172, + 0x0003003e,0x00000150,0x00000173,0x00050041,0x0000003c,0x00000175,0x0000003a,0x0000005a, + 0x0004003d,0x00000006,0x00000176,0x00000175,0x000500c7,0x00000006,0x00000177,0x00000176, + 0x00000056,0x000500ab,0x00000016,0x00000178,0x00000177,0x00000033,0x0003003e,0x00000174, + 0x00000178,0x00050041,0x00000007,0x0000017c,0x00000150,0x00000033,0x0004003d,0x00000006, + 0x0000017d,0x0000017c,0x0003003e,0x0000017b,0x0000017d,0x00050041,0x00000007,0x0000017f, + 0x00000150,0x00000042,0x0004003d,0x00000006,0x00000180,0x0000017f,0x0003003e,0x0000017e, + 0x00000180,0x0003003e,0x00000181,0x00000179,0x0004003d,0x00000019,0x00000183,0x0000017a, + 0x0003003e,0x00000182,0x00000183,0x00080039,0x00000002,0x00000184,0x00000020,0x0000017b, + 0x0000017e,0x00000181,0x00000182,0x0004003d,0x00000019,0x00000185,0x00000182,0x0003003e, + 0x0000017a,0x00000185,0x0003003e,0x00000186,0x00000033,0x000200f9,0x00000187,0x000200f8, + 0x00000187,0x000400f6,0x00000189,0x0000018a,0x00000000,0x000200f9,0x0000018b,0x000200f8, + 0x0000018b,0x0004003d,0x00000006,0x0000018c,0x00000186,0x000500b0,0x00000016,0x0000018d, + 0x0000018c,0x00000018,0x000400fa,0x0000018d,0x00000188,0x00000189,0x000200f8,0x00000188, + 0x0004003d,0x00000006,0x0000018f,0x00000186,0x00050041,0x000000ae,0x00000190,0x0000017a, + 0x0000018f,0x0004003d,0x00000011,0x00000191,0x00000190,0x0003003e,0x0000018e,0x00000191, + 0x00050041,0x0000003c,0x00000192,0x0000003a,0x0000005a,0x0004003d,0x00000006,0x00000193, + 0x00000192,0x000500c7,0x00000006,0x00000194,0x00000193,0x00000042,0x000500ab,0x00000016, + 0x00000195,0x00000194,0x00000033,0x000300f7,0x00000197,0x00000000,0x000400fa,0x00000195, + 0x00000196,0x00000197,0x000200f8,0x00000196,0x00050041,0x00000007,0x00000198,0x0000018e, + 0x00000118,0x0003003e,0x00000198,0x00000085,0x000200f9,0x00000197,0x000200f8,0x00000197, + 0x0004003d,0x00000006,0x00000199,0x00000186,0x000500c7,0x00000006,0x0000019a,0x00000199, + 0x00000118,0x0004003d,0x00000006,0x0000019b,0x00000186,0x000500c2,0x00000006,0x0000019c, + 0x0000019b,0x000000bc,0x0004003d,0x00000011,0x0000019d,0x0000018e,0x00040070,0x00000009, + 0x0000019e,0x0000019d,0x00070050,0x00000009,0x000001a0,0x0000019f,0x0000019f,0x0000019f, + 0x0000019f,0x00050088,0x00000009,0x000001a1,0x0000019e,0x000001a0,0x0003003e,0x000001a2, + 0x0000019a,0x0003003e,0x000001a3,0x0000019c,0x0003003e,0x000001a4,0x000001a1,0x00070039, + 0x00000002,0x000001a5,0x0000000f,0x000001a2,0x000001a3,0x000001a4,0x000200f9,0x0000018a, + 0x000200f8,0x0000018a,0x0004003d,0x00000006,0x000001a6,0x00000186,0x00050080,0x00000006, + 0x000001a7,0x000001a6,0x000000b0,0x0003003e,0x00000186,0x000001a7,0x000200f9,0x00000187, + 0x000200f8,0x00000189,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000000f,0x00000000, + 0x0000000b,0x00030037,0x00000007,0x0000000c,0x00030037,0x00000007,0x0000000d,0x00030037, + 0x0000000a,0x0000000e,0x000200f8,0x00000010,0x0004003b,0x00000023,0x00000024,0x00000007, + 0x0004003b,0x00000023,0x0000002a,0x00000007,0x0004003d,0x00000025,0x00000028,0x00000027, + 0x0007004f,0x00000022,0x00000029,0x00000028,0x00000028,0x00000000,0x00000001,0x0003003e, + 0x00000024,0x00000029,0x0004003d,0x00000022,0x0000002b,0x00000024,0x00050050,0x00000022, + 0x0000002d,0x0000002c,0x0000002c,0x00050084,0x00000022,0x0000002e,0x0000002b,0x0000002d, + 0x0004003d,0x00000006,0x0000002f,0x0000000c,0x0004003d,0x00000006,0x00000030,0x0000000d, + 0x00050050,0x00000022,0x00000031,0x0000002f,0x00000030,0x00050080,0x00000022,0x00000032, + 0x0000002e,0x00000031,0x0003003e,0x0000002a,0x00000032,0x00050041,0x00000007,0x00000034, + 0x0000002a,0x00000033,0x0004003d,0x00000006,0x00000035,0x00000034,0x00060041,0x0000003c, + 0x0000003d,0x0000003a,0x0000003b,0x00000033,0x0004003d,0x00000006,0x0000003e,0x0000003d, + 0x000500b0,0x00000016,0x0000003f,0x00000035,0x0000003e,0x000300f7,0x00000041,0x00000000, + 0x000400fa,0x0000003f,0x00000040,0x00000041,0x000200f8,0x00000040,0x00050041,0x00000007, + 0x00000043,0x0000002a,0x00000042,0x0004003d,0x00000006,0x00000044,0x00000043,0x00060041, + 0x0000003c,0x00000045,0x0000003a,0x0000003b,0x00000042,0x0004003d,0x00000006,0x00000046, + 0x00000045,0x000500b0,0x00000016,0x00000047,0x00000044,0x00000046,0x000200f9,0x00000041, + 0x000200f8,0x00000041,0x000700f5,0x00000016,0x00000048,0x0000003f,0x00000010,0x00000047, + 0x00000040,0x000300f7,0x0000004a,0x00000000,0x000400fa,0x00000048,0x00000049,0x0000004a, + 0x000200f8,0x00000049,0x0004003d,0x0000004b,0x0000004e,0x0000004d,0x00050041,0x00000050, + 0x00000051,0x0000003a,0x0000004f,0x0004003d,0x00000037,0x00000052,0x00000051,0x0004003d, + 0x00000022,0x00000053,0x0000002a,0x0004007c,0x00000037,0x00000054,0x00000053,0x00050080, + 0x00000037,0x00000055,0x00000052,0x00000054,0x00050041,0x00000057,0x00000058,0x00000027, + 0x00000056,0x0004003d,0x00000006,0x00000059,0x00000058,0x00050041,0x0000003c,0x0000005b, + 0x0000003a,0x0000005a,0x0004003d,0x00000006,0x0000005c,0x0000005b,0x000500c2,0x00000006, + 0x0000005e,0x0000005c,0x0000005d,0x00050080,0x00000006,0x0000005f,0x00000059,0x0000005e, + 0x0004007c,0x00000036,0x00000060,0x0000005f,0x00050051,0x00000036,0x00000062,0x00000055, + 0x00000000,0x00050051,0x00000036,0x00000063,0x00000055,0x00000001,0x00060050,0x00000061, + 0x00000064,0x00000062,0x00000063,0x00000060,0x0004003d,0x00000009,0x00000065,0x0000000e, + 0x00040063,0x0000004e,0x00000064,0x00000065,0x000200f9,0x0000004a,0x000200f8,0x0000004a, + 0x000100fd,0x00010038,0x00050036,0x00000011,0x00000014,0x00000000,0x00000012,0x00030037, + 0x00000007,0x00000013,0x000200f8,0x00000015,0x0004003b,0x00000007,0x00000066,0x00000007, + 0x0004003b,0x00000007,0x0000006c,0x00000007,0x0004003b,0x00000007,0x00000071,0x00000007, + 0x0004003d,0x00000006,0x00000067,0x00000013,0x000500c2,0x00000006,0x00000069,0x00000067, + 0x00000068,0x000500c7,0x00000006,0x0000006b,0x00000069,0x0000006a,0x0003003e,0x00000066, + 0x0000006b,0x0004003d,0x00000006,0x0000006d,0x00000013,0x000500c2,0x00000006,0x0000006e, + 0x0000006d,0x0000003b,0x000500c7,0x00000006,0x00000070,0x0000006e,0x0000006f,0x0003003e, + 0x0000006c,0x00000070,0x0004003d,0x00000006,0x00000072,0x00000013,0x000500c7,0x00000006, + 0x00000073,0x00000072,0x0000006a,0x0003003e,0x00000071,0x00000073,0x0004003d,0x00000006, + 0x00000074,0x00000066,0x00050084,0x00000006,0x00000076,0x00000074,0x00000075,0x00050080, + 0x00000006,0x00000078,0x00000076,0x00000077,0x000500c2,0x00000006,0x0000007a,0x00000078, + 0x00000079,0x0004003d,0x00000006,0x0000007b,0x0000006c,0x00050084,0x00000006,0x0000007d, + 0x0000007b,0x0000007c,0x00050080,0x00000006,0x0000007f,0x0000007d,0x0000007e,0x000500c2, + 0x00000006,0x00000080,0x0000007f,0x00000079,0x0004003d,0x00000006,0x00000081,0x00000071, + 0x00050084,0x00000006,0x00000082,0x00000081,0x00000075,0x00050080,0x00000006,0x00000083, + 0x00000082,0x00000077,0x000500c2,0x00000006,0x00000084,0x00000083,0x00000079,0x00070050, + 0x00000011,0x00000086,0x0000007a,0x00000080,0x00000084,0x00000085,0x000200fe,0x00000086, + 0x00010038,0x00050036,0x00000002,0x00000020,0x00000000,0x0000001b,0x00030037,0x00000007, + 0x0000001c,0x00030037,0x00000007,0x0000001d,0x00030037,0x00000017,0x0000001e,0x00030037, + 0x0000001a,0x0000001f,0x000200f8,0x00000021,0x0004003b,0x00000007,0x00000089,0x00000007, + 0x0004003b,0x00000007,0x0000008d,0x00000007,0x0004003b,0x00000007,0x00000091,0x00000007, + 0x0004003b,0x00000007,0x00000095,0x00000007,0x0004003b,0x00000007,0x00000099,0x00000007, + 0x0004003b,0x00000007,0x0000009c,0x00000007,0x0004003b,0x00000007,0x000000a0,0x00000007, + 0x0004003b,0x00000007,0x000000a4,0x00000007,0x0004003b,0x000000a8,0x000000a9,0x00000007, + 0x0004003b,0x00000007,0x000000ab,0x00000007,0x0004003b,0x00000007,0x000000b1,0x00000007, + 0x0004003b,0x00000007,0x0000010b,0x00000007,0x0004003d,0x00000006,0x0000008a,0x0000001c, + 0x000500c7,0x00000006,0x0000008c,0x0000008a,0x0000008b,0x0003003e,0x00000089,0x0000008c, + 0x0004003d,0x00000006,0x0000008e,0x0000001c,0x000500c2,0x00000006,0x00000090,0x0000008e, + 0x0000008f,0x0003003e,0x0000008d,0x00000090,0x0004003d,0x00000006,0x00000092,0x00000089, + 0x000500c2,0x00000006,0x00000093,0x00000092,0x00000068,0x000500c7,0x00000006,0x00000094, + 0x00000093,0x0000006a,0x0003003e,0x00000091,0x00000094,0x0004003d,0x00000006,0x00000096, + 0x00000089,0x000500c2,0x00000006,0x00000097,0x00000096,0x0000003b,0x000500c7,0x00000006, + 0x00000098,0x00000097,0x0000006f,0x0003003e,0x00000095,0x00000098,0x0004003d,0x00000006, + 0x0000009a,0x00000089,0x000500c7,0x00000006,0x0000009b,0x0000009a,0x0000006a,0x0003003e, + 0x00000099,0x0000009b,0x0004003d,0x00000006,0x0000009d,0x0000008d,0x000500c2,0x00000006, + 0x0000009e,0x0000009d,0x00000068,0x000500c7,0x00000006,0x0000009f,0x0000009e,0x0000006a, + 0x0003003e,0x0000009c,0x0000009f,0x0004003d,0x00000006,0x000000a1,0x0000008d,0x000500c2, + 0x00000006,0x000000a2,0x000000a1,0x0000003b,0x000500c7,0x00000006,0x000000a3,0x000000a2, + 0x0000006f,0x0003003e,0x000000a0,0x000000a3,0x0004003d,0x00000006,0x000000a5,0x0000008d, + 0x000500c7,0x00000006,0x000000a6,0x000000a5,0x0000006a,0x0003003e,0x000000a4,0x000000a6, + 0x0004003d,0x00000006,0x000000ac,0x00000089,0x0003003e,0x000000ab,0x000000ac,0x00050039, + 0x00000011,0x000000ad,0x00000014,0x000000ab,0x00050041,0x000000ae,0x000000af,0x000000a9, + 0x000000aa,0x0003003e,0x000000af,0x000000ad,0x0004003d,0x00000006,0x000000b2,0x0000008d, + 0x0003003e,0x000000b1,0x000000b2,0x00050039,0x00000011,0x000000b3,0x00000014,0x000000b1, + 0x00050041,0x000000ae,0x000000b4,0x000000a9,0x000000b0,0x0003003e,0x000000b4,0x000000b3, + 0x0004003d,0x00000006,0x000000b5,0x00000089,0x0004003d,0x00000006,0x000000b6,0x0000008d, + 0x000500ac,0x00000016,0x000000b7,0x000000b5,0x000000b6,0x0004003d,0x00000016,0x000000b8, + 0x0000001e,0x000500a6,0x00000016,0x000000b9,0x000000b7,0x000000b8,0x000300f7,0x000000bb, + 0x00000000,0x000400fa,0x000000b9,0x000000ba,0x000000f0,0x000200f8,0x000000ba,0x0004003d, + 0x00000006,0x000000bd,0x00000091,0x00050084,0x00000006,0x000000be,0x00000056,0x000000bd, + 0x0004003d,0x00000006,0x000000bf,0x0000009c,0x00050080,0x00000006,0x000000c0,0x000000be, + 0x000000bf,0x00050084,0x00000006,0x000000c2,0x000000c0,0x000000c1,0x00050080,0x00000006, + 0x000000c4,0x000000c2,0x000000c3,0x000500c2,0x00000006,0x000000c6,0x000000c4,0x000000c5, + 0x0004003d,0x00000006,0x000000c7,0x00000095,0x00050084,0x00000006,0x000000c8,0x00000056, + 0x000000c7,0x0004003d,0x00000006,0x000000c9,0x000000a0,0x00050080,0x00000006,0x000000ca, + 0x000000c8,0x000000c9,0x00050084,0x00000006,0x000000cc,0x000000ca,0x000000cb,0x00050080, + 0x00000006,0x000000ce,0x000000cc,0x000000cd,0x000500c2,0x00000006,0x000000cf,0x000000ce, + 0x00000068,0x0004003d,0x00000006,0x000000d0,0x00000099,0x00050084,0x00000006,0x000000d1, + 0x00000056,0x000000d0,0x0004003d,0x00000006,0x000000d2,0x000000a4,0x00050080,0x00000006, + 0x000000d3,0x000000d1,0x000000d2,0x00050084,0x00000006,0x000000d4,0x000000d3,0x000000c1, + 0x00050080,0x00000006,0x000000d5,0x000000d4,0x000000c3,0x000500c2,0x00000006,0x000000d6, + 0x000000d5,0x000000c5,0x00070050,0x00000011,0x000000d7,0x000000c6,0x000000cf,0x000000d6, + 0x00000085,0x00050041,0x000000ae,0x000000d8,0x000000a9,0x000000bc,0x0003003e,0x000000d8, + 0x000000d7,0x0004003d,0x00000006,0x000000d9,0x00000091,0x0004003d,0x00000006,0x000000da, + 0x0000009c,0x00050084,0x00000006,0x000000db,0x000000da,0x00000056,0x00050080,0x00000006, + 0x000000dc,0x000000d9,0x000000db,0x00050084,0x00000006,0x000000dd,0x000000dc,0x000000c1, + 0x00050080,0x00000006,0x000000de,0x000000dd,0x000000c3,0x000500c2,0x00000006,0x000000df, + 0x000000de,0x000000c5,0x0004003d,0x00000006,0x000000e0,0x00000095,0x0004003d,0x00000006, + 0x000000e1,0x000000a0,0x00050084,0x00000006,0x000000e2,0x000000e1,0x00000056,0x00050080, + 0x00000006,0x000000e3,0x000000e0,0x000000e2,0x00050084,0x00000006,0x000000e4,0x000000e3, + 0x000000cb,0x00050080,0x00000006,0x000000e5,0x000000e4,0x000000cd,0x000500c2,0x00000006, + 0x000000e6,0x000000e5,0x00000068,0x0004003d,0x00000006,0x000000e7,0x00000099,0x0004003d, + 0x00000006,0x000000e8,0x000000a4,0x00050084,0x00000006,0x000000e9,0x000000e8,0x00000056, + 0x00050080,0x00000006,0x000000ea,0x000000e7,0x000000e9,0x00050084,0x00000006,0x000000eb, + 0x000000ea,0x000000c1,0x00050080,0x00000006,0x000000ec,0x000000eb,0x000000c3,0x000500c2, + 0x00000006,0x000000ed,0x000000ec,0x000000c5,0x00070050,0x00000011,0x000000ee,0x000000df, + 0x000000e6,0x000000ed,0x00000085,0x00050041,0x000000ae,0x000000ef,0x000000a9,0x0000005a, + 0x0003003e,0x000000ef,0x000000ee,0x000200f9,0x000000bb,0x000200f8,0x000000f0,0x0004003d, + 0x00000006,0x000000f1,0x00000091,0x0004003d,0x00000006,0x000000f2,0x0000009c,0x00050080, + 0x00000006,0x000000f3,0x000000f1,0x000000f2,0x00050084,0x00000006,0x000000f5,0x000000f3, + 0x000000f4,0x00050080,0x00000006,0x000000f7,0x000000f5,0x000000f6,0x000500c2,0x00000006, + 0x000000f8,0x000000f7,0x0000005d,0x0004003d,0x00000006,0x000000f9,0x00000095,0x0004003d, + 0x00000006,0x000000fa,0x000000a0,0x00050080,0x00000006,0x000000fb,0x000000f9,0x000000fa, + 0x00050084,0x00000006,0x000000fd,0x000000fb,0x000000fc,0x00050080,0x00000006,0x000000ff, + 0x000000fd,0x000000fe,0x000500c2,0x00000006,0x00000100,0x000000ff,0x00000068,0x0004003d, + 0x00000006,0x00000101,0x00000099,0x0004003d,0x00000006,0x00000102,0x000000a4,0x00050080, + 0x00000006,0x00000103,0x00000101,0x00000102,0x00050084,0x00000006,0x00000104,0x00000103, + 0x000000f4,0x00050080,0x00000006,0x00000105,0x00000104,0x000000f6,0x000500c2,0x00000006, + 0x00000106,0x00000105,0x0000005d,0x00070050,0x00000011,0x00000107,0x000000f8,0x00000100, + 0x00000106,0x00000085,0x00050041,0x000000ae,0x00000108,0x000000a9,0x000000bc,0x0003003e, + 0x00000108,0x00000107,0x00050041,0x000000ae,0x0000010a,0x000000a9,0x0000005a,0x0003003e, + 0x0000010a,0x00000109,0x000200f9,0x000000bb,0x000200f8,0x000000bb,0x0003003e,0x0000010b, + 0x00000033,0x000200f9,0x0000010c,0x000200f8,0x0000010c,0x000400f6,0x0000010e,0x0000010f, + 0x00000000,0x000200f9,0x00000110,0x000200f8,0x00000110,0x0004003d,0x00000006,0x00000111, + 0x0000010b,0x000500b0,0x00000016,0x00000112,0x00000111,0x00000018,0x000400fa,0x00000112, + 0x0000010d,0x0000010e,0x000200f8,0x0000010d,0x0004003d,0x00000006,0x00000113,0x0000010b, + 0x0004003d,0x00000006,0x00000114,0x0000001d,0x0004003d,0x00000006,0x00000115,0x0000010b, + 0x00050084,0x00000006,0x00000116,0x00000056,0x00000115,0x000500c2,0x00000006,0x00000117, + 0x00000114,0x00000116,0x000500c7,0x00000006,0x00000119,0x00000117,0x00000118,0x00050041, + 0x000000ae,0x0000011a,0x000000a9,0x00000119,0x0004003d,0x00000011,0x0000011b,0x0000011a, + 0x00050041,0x000000ae,0x0000011c,0x0000001f,0x00000113,0x0003003e,0x0000011c,0x0000011b, + 0x000200f9,0x0000010f,0x000200f8,0x0000010f,0x0004003d,0x00000006,0x0000011d,0x0000010b, + 0x00050080,0x00000006,0x0000011e,0x0000011d,0x000000b0,0x0003003e,0x0000010b,0x0000011e, + 0x000200f9,0x0000010c,0x000200f8,0x0000010e,0x000100fd,0x00010038 +}; + // 1115.1.0 +static const uint32_t spv_bc2[] = { + 0x07230203,0x00010300,0x0008000b,0x000002ef,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000067,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000e,0x73746962, + 0x34757628,0x3b31753b,0x003b3175,0x00030005,0x0000000b,0x00000062,0x00030005,0x0000000c, + 0x00736f70,0x00030005,0x0000000d,0x0000006e,0x00060005,0x00000017,0x28747570,0x753b3175, + 0x66763b31,0x00003b34,0x00030005,0x00000014,0x00007874,0x00030005,0x00000015,0x00007974, + 0x00030005,0x00000016,0x00000076,0x00050005,0x0000001b,0x35626772,0x75283536,0x00003b31, + 0x00030005,0x0000001a,0x00000063,0x000a0005,0x00000027,0x6f6c6f63,0x6c625f72,0x286b636f, + 0x753b3175,0x31623b31,0x3475763b,0x5d36315b,0x0000003b,0x00030005,0x00000023,0x00006f6c, + 0x00030005,0x00000024,0x00786469,0x00040005,0x00000025,0x7161706f,0x00006575,0x00040005, + 0x00000026,0x65786574,0x0000736c,0x00030005,0x0000002f,0x00006977,0x00030005,0x00000034, + 0x0000006f,0x00030005,0x00000038,0x00000076,0x00030005,0x00000064,0x006b6c62,0x00080005, + 0x00000067,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00030005, + 0x0000006a,0x00000070,0x00030005,0x00000076,0x00004350,0x00060006,0x00000076,0x00000000, + 0x5f637273,0x64726f77,0x00000000,0x00060006,0x00000076,0x00000001,0x5f776f72,0x636f6c62, + 0x0000736b,0x00070006,0x00000076,0x00000002,0x6579616c,0x6c625f72,0x736b636f,0x00000000, + 0x00050006,0x00000076,0x00000003,0x67616c66,0x00000073,0x00050006,0x00000076,0x00000004, + 0x5f747364,0x0066666f,0x00050006,0x00000076,0x00000005,0x65747865,0x0000746e,0x00030005, + 0x00000078,0x00006370,0x00030005,0x00000089,0x00747364,0x00030005,0x000000a2,0x00000072, + 0x00030005,0x000000a7,0x00000067,0x00030005,0x000000ac,0x00000062,0x00030005,0x000000c4, + 0x00003063,0x00030005,0x000000c8,0x00003163,0x00030005,0x000000cc,0x00003072,0x00030005, + 0x000000d0,0x00003067,0x00030005,0x000000d4,0x00003062,0x00030005,0x000000d7,0x00003172, + 0x00030005,0x000000db,0x00003167,0x00030005,0x000000df,0x00003162,0x00030005,0x000000e4, + 0x00666572,0x00040005,0x000000e6,0x61726170,0x0000006d,0x00040005,0x000000eb,0x61726170, + 0x0000006d,0x00030005,0x00000145,0x00000074,0x00030005,0x00000158,0x006b6c62,0x00040005, + 0x0000015b,0x6b6c626e,0x00000000,0x00040005,0x00000174,0x64726f77,0x00000073,0x00040005, + 0x00000175,0x65736162,0x00000000,0x00030005,0x00000189,0x00000062,0x00030005,0x0000018b, + 0x00637253,0x00040006,0x0000018b,0x00000000,0x00000077,0x00030005,0x0000018d,0x00637273, + 0x00030005,0x000001ad,0x006e6773,0x00030005,0x000001b3,0x00786574,0x00040005,0x000001b4, + 0x61726170,0x0000006d,0x00040005,0x000001b7,0x61726170,0x0000006d,0x00040005,0x000001ba, + 0x61726170,0x0000006d,0x00040005,0x000001bb,0x61726170,0x0000006d,0x00030005,0x000001bf, + 0x00000074,0x00030005,0x000001c9,0x00000061,0x00040005,0x000001cd,0x61726170,0x0000006d, + 0x00040005,0x000001cf,0x61726170,0x0000006d,0x00040005,0x000001d0,0x61726170,0x0000006d, + 0x00030005,0x000001d7,0x00000074,0x00040005,0x000001f4,0x61726170,0x0000006d,0x00040005, + 0x000001f5,0x61726170,0x0000006d,0x00040005,0x000001f6,0x61726170,0x0000006d,0x00040047, + 0x00000067,0x0000000b,0x0000001c,0x00030047,0x00000076,0x00000002,0x00050048,0x00000076, + 0x00000000,0x00000023,0x00000000,0x00050048,0x00000076,0x00000001,0x00000023,0x00000004, + 0x00050048,0x00000076,0x00000002,0x00000023,0x00000008,0x00050048,0x00000076,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x00000076,0x00000004,0x00000023,0x00000010,0x00050048, + 0x00000076,0x00000005,0x00000023,0x00000018,0x00030047,0x00000089,0x00000019,0x00040047, + 0x00000089,0x00000021,0x00000001,0x00040047,0x00000089,0x00000022,0x00000000,0x00040047, + 0x0000018a,0x00000006,0x00000004,0x00030047,0x0000018b,0x00000002,0x00040048,0x0000018b, + 0x00000000,0x00000018,0x00050048,0x0000018b,0x00000000,0x00000023,0x00000000,0x00030047, + 0x0000018d,0x00000018,0x00040047,0x0000018d,0x00000021,0x00000000,0x00040047,0x0000018d, + 0x00000022,0x00000000,0x00040047,0x000001fb,0x0000000b,0x00000019,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040017, + 0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000007,0x00000007,0x00040020, + 0x00000009,0x00000007,0x00000006,0x00060021,0x0000000a,0x00000006,0x00000008,0x00000009, + 0x00000009,0x00030016,0x00000010,0x00000020,0x00040017,0x00000011,0x00000010,0x00000004, + 0x00040020,0x00000012,0x00000007,0x00000011,0x00060021,0x00000013,0x00000002,0x00000009, + 0x00000009,0x00000012,0x00040021,0x00000019,0x00000007,0x00000009,0x00020014,0x0000001d, + 0x00040020,0x0000001e,0x00000007,0x0000001d,0x0004002b,0x00000006,0x0000001f,0x00000010, + 0x0004001c,0x00000020,0x00000007,0x0000001f,0x00040020,0x00000021,0x00000007,0x00000020, + 0x00070021,0x00000022,0x00000002,0x00000009,0x00000009,0x0000001e,0x00000021,0x0004002b, + 0x00000006,0x0000002a,0x00000000,0x00040015,0x00000031,0x00000020,0x00000001,0x0004002b, + 0x00000031,0x00000032,0x00000005,0x0004002b,0x00000006,0x00000036,0x0000001f,0x0004002b, + 0x00000006,0x00000041,0x00000020,0x0004002b,0x00000006,0x00000044,0x00000003,0x0004002b, + 0x00000006,0x0000004a,0x00000001,0x00040017,0x00000062,0x00000006,0x00000002,0x00040020, + 0x00000063,0x00000007,0x00000062,0x00040017,0x00000065,0x00000006,0x00000003,0x00040020, + 0x00000066,0x00000001,0x00000065,0x0004003b,0x00000066,0x00000067,0x00000001,0x0004002b, + 0x00000006,0x0000006c,0x00000004,0x00040017,0x00000075,0x00000031,0x00000002,0x0008001e, + 0x00000076,0x00000006,0x00000006,0x00000006,0x00000006,0x00000075,0x00000062,0x00040020, + 0x00000077,0x00000009,0x00000076,0x0004003b,0x00000077,0x00000078,0x00000009,0x00040020, + 0x00000079,0x00000009,0x00000006,0x00090019,0x00000087,0x00000010,0x00000001,0x00000000, + 0x00000001,0x00000000,0x00000002,0x00000004,0x00040020,0x00000088,0x00000000,0x00000087, + 0x0004003b,0x00000088,0x00000089,0x00000000,0x0004002b,0x00000031,0x0000008b,0x00000004, + 0x00040020,0x0000008c,0x00000009,0x00000075,0x0004002b,0x00000006,0x00000092,0x00000002, + 0x00040020,0x00000093,0x00000001,0x00000006,0x0004002b,0x00000031,0x00000096,0x00000003, + 0x0004002b,0x00000031,0x00000099,0x00000008,0x00040017,0x0000009d,0x00000031,0x00000003, + 0x0004002b,0x00000031,0x000000a4,0x0000000b,0x0004002b,0x00000006,0x000000aa,0x0000003f, + 0x0004002b,0x00000006,0x000000b0,0x0000020f,0x0004002b,0x00000006,0x000000b2,0x00000017, + 0x0004002b,0x00000031,0x000000b4,0x00000006,0x0004002b,0x00000006,0x000000b7,0x00000103, + 0x0004002b,0x00000006,0x000000b9,0x00000021,0x0004002b,0x00000006,0x000000c0,0x000000ff, + 0x0004002b,0x00000006,0x000000c6,0x0000ffff,0x0004002b,0x00000031,0x000000ca,0x00000010, + 0x0004001c,0x000000e2,0x00000007,0x0000006c,0x00040020,0x000000e3,0x00000007,0x000000e2, + 0x0004002b,0x00000031,0x000000e5,0x00000000,0x0004002b,0x00000031,0x000000ea,0x00000001, + 0x0004002b,0x00000031,0x000000f6,0x00000002,0x0004002b,0x00000006,0x000000fb,0x0000015f, + 0x0004002b,0x00000006,0x000000fd,0x0000003d,0x0004002b,0x00000031,0x000000ff,0x00000007, + 0x0004002b,0x00000006,0x00000105,0x00000acb,0x0004002b,0x00000006,0x00000107,0x0000040f, + 0x0004002b,0x00000006,0x0000012e,0x0000041d,0x0004002b,0x00000006,0x00000130,0x0000007d, + 0x0004002b,0x00000006,0x00000136,0x00001031,0x0004002b,0x00000006,0x00000138,0x000003fb, + 0x0007002c,0x00000007,0x00000143,0x0000002a,0x0000002a,0x0000002a,0x0000002a,0x00040020, + 0x0000015c,0x00000009,0x00000062,0x0003001d,0x0000018a,0x00000006,0x0003001e,0x0000018b, + 0x0000018a,0x00040020,0x0000018c,0x0000000c,0x0000018b,0x0004003b,0x0000018c,0x0000018d, + 0x0000000c,0x00040020,0x0000018f,0x0000000c,0x00000006,0x00030029,0x0000001d,0x000001b2, + 0x0004001c,0x000001c7,0x00000006,0x0000001f,0x00040020,0x000001c8,0x00000007,0x000001c7, + 0x0004002b,0x00000006,0x000001d2,0x00000011,0x00040017,0x000001e7,0x00000010,0x00000003, + 0x0004002b,0x00000010,0x000001f1,0x437f0000,0x0004002b,0x00000006,0x000001fa,0x00000008, + 0x0006002c,0x00000065,0x000001fb,0x000001fa,0x000001fa,0x0000004a,0x0004001c,0x000001fc, + 0x00000031,0x00000041,0x0004002b,0x00000031,0x000001fd,0x0000000a,0x0004002b,0x00000031, + 0x000001fe,0xffffffff,0x0004002b,0x00000031,0x000001ff,0x0000000c,0x0004002b,0x00000031, + 0x00000200,0x0000000d,0x0004002b,0x00000031,0x00000201,0x00000009,0x0023002c,0x000001fc, + 0x00000202,0x000000e5,0x000000ea,0x000000f6,0x000001fd,0x000001fe,0x000001fe,0x00000096, + 0x000000a4,0x000001fe,0x000001fe,0x0000008b,0x000001ff,0x000001fe,0x000001fe,0x00000032, + 0x00000200,0x000001fe,0x000001fe,0x000000b4,0x000001fe,0x000001fe,0x000001fe,0x000000ff, + 0x000001fe,0x000001fe,0x000001fe,0x00000099,0x000001fe,0x000001fe,0x000001fe,0x00000201, + 0x000001fe,0x0004002b,0x00000006,0x00000203,0x0000000f,0x0004001c,0x00000204,0x00000006, + 0x00000203,0x0004002b,0x00000006,0x00000205,0x00000014,0x0004002b,0x00000006,0x00000206, + 0x0000002c,0x0004002b,0x00000006,0x00000207,0x00000054,0x0004002b,0x00000006,0x00000208, + 0x00000069,0x0004002b,0x00000006,0x00000209,0x00000091,0x0004002b,0x00000006,0x0000020a, + 0x000000a7,0x0004002b,0x00000006,0x0000020b,0x000000bd,0x0004002b,0x00000006,0x0000020c, + 0x000000d5,0x0004002b,0x00000006,0x0000020d,0x000000db,0x0004002b,0x00000006,0x0000020e, + 0x000000e4,0x0004002b,0x00000006,0x0000020f,0x000000ed,0x0004002b,0x00000006,0x00000210, + 0x000000f6,0x0012002c,0x00000204,0x00000211,0x0000002a,0x00000205,0x00000206,0x000000aa, + 0x00000207,0x00000208,0x00000130,0x00000209,0x0000020a,0x0000020b,0x0000020c,0x0000020d, + 0x0000020e,0x0000020f,0x00000210,0x0004001c,0x00000212,0x00000006,0x00000210,0x0004002b, + 0x00000006,0x00000213,0x00000816,0x0004002b,0x00000006,0x00000214,0x0000081a,0x0004002b, + 0x00000006,0x00000215,0x0000081b,0x0004002b,0x00000006,0x00000216,0x000000a0,0x0004002b, + 0x00000006,0x00000217,0x000000a4,0x0004002b,0x00000006,0x00000218,0x000000a8,0x0004002b, + 0x00000006,0x00000219,0x00000051,0x0004002b,0x00000006,0x0000021a,0x00000817,0x0004002b, + 0x00000006,0x0000021b,0x00000046,0x0004002b,0x00000006,0x0000021c,0x00000055,0x0004002b, + 0x00000006,0x0000021d,0x0000001b,0x0004002b,0x00000006,0x0000021e,0x00000047,0x0004002b, + 0x00000006,0x0000021f,0x00000059,0x0004002b,0x00000006,0x00000220,0x0000021b,0x0004002b, + 0x00000006,0x00000221,0x0000004a,0x0004002b,0x00000006,0x00000222,0x00000052,0x0004002b, + 0x00000006,0x00000223,0x0000041b,0x0004002b,0x00000006,0x00000224,0x00000053,0x0004002b, + 0x00000006,0x00000225,0x0000061b,0x0004002b,0x00000006,0x00000226,0x0000005c,0x0004002b, + 0x00000006,0x00000227,0x00000a16,0x0004002b,0x00000006,0x00000228,0x00000a17,0x0004002b, + 0x00000006,0x00000229,0x00000070,0x0004002b,0x00000006,0x0000022a,0x00000074,0x0004002b, + 0x00000006,0x0000022b,0x00000a1a,0x0004002b,0x00000006,0x0000022c,0x00000078,0x0004002b, + 0x00000006,0x0000022d,0x00000a1b,0x0004002b,0x00000006,0x0000022e,0x00000061,0x0004002b, + 0x00000006,0x0000022f,0x00000065,0x0004002b,0x00000006,0x00000230,0x00000062,0x0004002b, + 0x00000006,0x00000231,0x00000063,0x0004002b,0x00000006,0x00000232,0x00001410,0x0004002b, + 0x00000006,0x00000233,0x00000045,0x0004002b,0x00000006,0x00000234,0x00001414,0x0004002b, + 0x00000006,0x00000235,0x00000049,0x0004002b,0x00000006,0x00000236,0x00001418,0x0004002b, + 0x00000006,0x00000237,0x00000041,0x0004002b,0x00000006,0x00000238,0x00000042,0x0004002b, + 0x00000006,0x00000239,0x00000043,0x0004002b,0x00000006,0x0000023a,0x00000090,0x0004002b, + 0x00000006,0x0000023b,0x00000094,0x0004002b,0x00000006,0x0000023c,0x00000098,0x0004002b, + 0x00000006,0x0000023d,0x00000080,0x0004002b,0x00000006,0x0000023e,0x00000084,0x0004002b, + 0x00000006,0x0000023f,0x00000088,0x0004002b,0x00000006,0x00000240,0x00000060,0x0004002b, + 0x00000006,0x00000241,0x00000064,0x0004002b,0x00000006,0x00000242,0x00000068,0x0004002b, + 0x00000006,0x00000243,0x000000a1,0x0004002b,0x00000006,0x00000244,0x000000a5,0x0004002b, + 0x00000006,0x00000245,0x000000a9,0x0004002b,0x00000006,0x00000246,0x00000095,0x0004002b, + 0x00000006,0x00000247,0x00000099,0x0004002b,0x00000006,0x00000248,0x00000081,0x0004002b, + 0x00000006,0x00000249,0x00005420,0x0004002b,0x00000006,0x0000024a,0x00000085,0x0004002b, + 0x00000006,0x0000024b,0x00005424,0x0004002b,0x00000006,0x0000024c,0x00000089,0x0004002b, + 0x00000006,0x0000024d,0x00005428,0x0004002b,0x00000006,0x0000024e,0x00005460,0x0004002b, + 0x00000006,0x0000024f,0x00005464,0x0004002b,0x00000006,0x00000250,0x00005468,0x00f9002c, + 0x00000212,0x00000251,0x00000213,0x00000214,0x00000215,0x00000216,0x00000217,0x00000218, + 0x00000219,0x0000021a,0x0000021b,0x0000021c,0x0000021d,0x0000021e,0x0000021f,0x00000220, + 0x00000221,0x00000222,0x00000223,0x00000224,0x00000225,0x00000226,0x00000227,0x0000021a, + 0x00000228,0x00000229,0x0000021d,0x00000220,0x00000214,0x0000022a,0x0000022b,0x00000223, + 0x00000213,0x0000022c,0x00000225,0x0000022d,0x00000215,0x0000022e,0x0000021b,0x0000022f, + 0x0000021e,0x00000208,0x00000221,0x00000230,0x00000231,0x00000226,0x00000216,0x00000217, + 0x00000218,0x00000219,0x00000232,0x0000021b,0x00000233,0x00000234,0x0000021d,0x0000021e, + 0x00000235,0x00000236,0x00000220,0x00000221,0x00000222,0x00000223,0x00000224,0x00000225, + 0x00000226,0x00000216,0x00000217,0x00000218,0x00000237,0x00000232,0x0000021a,0x0000021b, + 0x0000021c,0x00000234,0x0000021e,0x00000235,0x00000236,0x00000220,0x00000221,0x00000238, + 0x0000021d,0x00000223,0x00000239,0x00000213,0x00000225,0x00000226,0x00000216,0x00000217, + 0x00000218,0x00000237,0x00000232,0x00000214,0x0000021b,0x00000233,0x00000234,0x0000021d, + 0x0000021e,0x0000021f,0x00000236,0x00000221,0x00000238,0x00000220,0x00000223,0x00000239, + 0x00000215,0x00000225,0x00000226,0x0000023a,0x00000214,0x0000023b,0x00000213,0x0000023c, + 0x00000215,0x00000219,0x0000021a,0x0000021b,0x0000021c,0x0000021d,0x0000021e,0x0000021f, + 0x00000220,0x00000221,0x00000222,0x00000223,0x00000224,0x00000225,0x00000226,0x0000023d, + 0x0000021a,0x00000214,0x0000023e,0x00000223,0x00000213,0x0000023f,0x00000225,0x00000215, + 0x0000022e,0x0000021b,0x0000021c,0x0000021d,0x0000021e,0x0000021f,0x00000220,0x00000221, + 0x00000230,0x00000231,0x00000226,0x0000023d,0x0000021d,0x00000214,0x0000023e,0x00000227, + 0x00000213,0x0000023f,0x00000228,0x00000215,0x00000219,0x0000021a,0x0000021b,0x0000022f, + 0x0000021e,0x0000021f,0x00000220,0x00000221,0x00000222,0x00000223,0x00000224,0x00000225, + 0x00000226,0x0000023d,0x00000220,0x00000214,0x0000023e,0x0000022b,0x00000213,0x0000023f, + 0x0000022d,0x00000215,0x00000219,0x0000021a,0x0000021b,0x0000021c,0x0000021d,0x0000021e, + 0x00000208,0x00000221,0x00000222,0x00000223,0x00000224,0x00000225,0x00000226,0x00000240, + 0x0000021a,0x0000021d,0x00000220,0x00000214,0x00000241,0x00000227,0x0000022b,0x00000223, + 0x00000213,0x00000242,0x00000228,0x00000225,0x0000022d,0x00000215,0x0000022e,0x0000021b, + 0x0000022f,0x0000021e,0x00000208,0x00000221,0x00000230,0x00000231,0x00000226,0x00000216, + 0x00000217,0x00000218,0x00000243,0x00000244,0x00000245,0x00000216,0x00000217,0x00000218, + 0x00000209,0x00000232,0x00000246,0x00000234,0x00000247,0x00000236,0x00000216,0x00000217, + 0x00000218,0x00000248,0x00000249,0x0000024a,0x0000024b,0x0000024c,0x0000024d,0x00000216, + 0x00000217,0x00000218,0x00000237,0x0000024e,0x00000233,0x0000024f,0x00000235,0x00000250, + 0x0004002b,0x00000006,0x00000252,0x0000000e,0x0004001c,0x00000253,0x00000031,0x00000252, + 0x0011002c,0x00000253,0x00000254,0x000001fd,0x000000ff,0x000000a4,0x000000a4,0x000000a4, + 0x00000201,0x00000099,0x00000099,0x00000099,0x000000b4,0x000001fd,0x000000a4,0x000001ff, + 0x000000ca,0x0011002c,0x00000253,0x00000255,0x00000032,0x000000b4,0x00000032,0x0000008b, + 0x0000008b,0x00000032,0x000000b4,0x00000032,0x00000032,0x000000b4,0x000001fd,0x00000201, + 0x00000099,0x0000008b,0x0011002c,0x00000253,0x00000256,0x00000032,0x000000b4,0x0000008b, + 0x00000032,0x0000008b,0x00000032,0x00000032,0x000000b4,0x00000032,0x000000b4,0x000001fd, + 0x00000201,0x00000099,0x0000008b,0x0011002c,0x00000253,0x00000257,0x00000032,0x000000b4, + 0x0000008b,0x0000008b,0x00000032,0x00000032,0x00000032,0x00000032,0x000000b4,0x000000b4, + 0x000001fd,0x00000201,0x00000099,0x0000008b,0x0004002b,0x00000006,0x00000258,0x00000040, + 0x0004001c,0x00000259,0x00000006,0x00000258,0x0004002b,0x00000006,0x0000025a,0x50505050, + 0x0004002b,0x00000006,0x0000025b,0x40404040,0x0004002b,0x00000006,0x0000025c,0x54545454, + 0x0004002b,0x00000006,0x0000025d,0x54505040,0x0004002b,0x00000006,0x0000025e,0x50404000, + 0x0004002b,0x00000006,0x0000025f,0x55545450,0x0004002b,0x00000006,0x00000260,0x55545040, + 0x0004002b,0x00000006,0x00000261,0x54504000,0x0004002b,0x00000006,0x00000262,0x50400000, + 0x0004002b,0x00000006,0x00000263,0x55555450,0x0004002b,0x00000006,0x00000264,0x55544000, + 0x0004002b,0x00000006,0x00000265,0x54400000,0x0004002b,0x00000006,0x00000266,0x55555440, + 0x0004002b,0x00000006,0x00000267,0x55550000,0x0004002b,0x00000006,0x00000268,0x55555500, + 0x0004002b,0x00000006,0x00000269,0x55000000,0x0004002b,0x00000006,0x0000026a,0x55150100, + 0x0004002b,0x00000006,0x0000026b,0x00004054,0x0004002b,0x00000006,0x0000026c,0x15010000, + 0x0004002b,0x00000006,0x0000026d,0x00405054,0x0004002b,0x00000006,0x0000026e,0x00004050, + 0x0004002b,0x00000006,0x0000026f,0x15050100,0x0004002b,0x00000006,0x00000270,0x05010000, + 0x0004002b,0x00000006,0x00000271,0x40505054,0x0004002b,0x00000006,0x00000272,0x00404050, + 0x0004002b,0x00000006,0x00000273,0x05010100,0x0004002b,0x00000006,0x00000274,0x14141414, + 0x0004002b,0x00000006,0x00000275,0x05141450,0x0004002b,0x00000006,0x00000276,0x01155440, + 0x0004002b,0x00000006,0x00000277,0x00555500,0x0004002b,0x00000006,0x00000278,0x15014054, + 0x0004002b,0x00000006,0x00000279,0x05414150,0x0004002b,0x00000006,0x0000027a,0x44444444, + 0x0004002b,0x00000006,0x0000027b,0x55005500,0x0004002b,0x00000006,0x0000027c,0x11441144, + 0x0004002b,0x00000006,0x0000027d,0x05055050,0x0004002b,0x00000006,0x0000027e,0x05500550, + 0x0004002b,0x00000006,0x0000027f,0x11114444,0x0004002b,0x00000006,0x00000280,0x41144114, + 0x0004002b,0x00000006,0x00000281,0x44111144,0x0004002b,0x00000006,0x00000282,0x15055054, + 0x0004002b,0x00000006,0x00000283,0x01055040,0x0004002b,0x00000006,0x00000284,0x05041050, + 0x0004002b,0x00000006,0x00000285,0x05455150,0x0004002b,0x00000006,0x00000286,0x14414114, + 0x0004002b,0x00000006,0x00000287,0x50050550,0x0004002b,0x00000006,0x00000288,0x41411414, + 0x0004002b,0x00000006,0x00000289,0x00141400,0x0004002b,0x00000006,0x0000028a,0x00041504, + 0x0004002b,0x00000006,0x0000028b,0x00105410,0x0004002b,0x00000006,0x0000028c,0x10541000, + 0x0004002b,0x00000006,0x0000028d,0x04150400,0x0004002b,0x00000006,0x0000028e,0x50410514, + 0x0004002b,0x00000006,0x0000028f,0x41051450,0x0004002b,0x00000006,0x00000290,0x05415014, + 0x0004002b,0x00000006,0x00000291,0x14054150,0x0004002b,0x00000006,0x00000292,0x41050514, + 0x0004002b,0x00000006,0x00000293,0x41505014,0x0004002b,0x00000006,0x00000294,0x40011554, + 0x0004002b,0x00000006,0x00000295,0x54150140,0x0004002b,0x00000006,0x00000296,0x50505500, + 0x0004002b,0x00000006,0x00000297,0x00555050,0x0004002b,0x00000006,0x00000298,0x15151010, + 0x0004002b,0x00000006,0x00000299,0x54540404,0x0043002c,0x00000259,0x0000029a,0x0000025a, + 0x0000025b,0x0000025c,0x0000025d,0x0000025e,0x0000025f,0x00000260,0x00000261,0x00000262, + 0x00000263,0x00000264,0x00000265,0x00000266,0x00000267,0x00000268,0x00000269,0x0000026a, + 0x0000026b,0x0000026c,0x0000026d,0x0000026e,0x0000026f,0x00000270,0x00000271,0x00000272, + 0x00000273,0x00000274,0x00000275,0x00000276,0x00000277,0x00000278,0x00000279,0x0000027a, + 0x0000027b,0x0000027c,0x0000027d,0x0000027e,0x0000027f,0x00000280,0x00000281,0x00000282, + 0x00000283,0x00000284,0x00000285,0x00000286,0x00000287,0x00000288,0x00000289,0x0000028a, + 0x0000028b,0x0000028c,0x0000028d,0x0000028e,0x0000028f,0x00000290,0x00000291,0x00000292, + 0x00000293,0x00000294,0x00000295,0x00000296,0x00000297,0x00000298,0x00000299,0x0004002b, + 0x00000006,0x0000029b,0x00000006,0x0043002c,0x00000259,0x0000029c,0x00000203,0x00000203, + 0x00000203,0x00000203,0x00000203,0x00000203,0x00000203,0x00000203,0x00000203,0x00000203, + 0x00000203,0x00000203,0x00000203,0x00000203,0x00000203,0x00000203,0x00000203,0x00000092, + 0x000001fa,0x00000092,0x00000092,0x000001fa,0x000001fa,0x00000203,0x00000092,0x000001fa, + 0x00000092,0x00000092,0x000001fa,0x000001fa,0x00000092,0x00000092,0x00000203,0x00000203, + 0x0000029b,0x000001fa,0x00000092,0x000001fa,0x00000203,0x00000203,0x00000092,0x000001fa, + 0x00000092,0x00000092,0x00000092,0x00000203,0x00000203,0x0000029b,0x0000029b,0x00000092, + 0x0000029b,0x000001fa,0x00000203,0x00000203,0x00000092,0x00000092,0x00000203,0x00000203, + 0x00000203,0x00000203,0x00000203,0x00000092,0x00000092,0x00000203,0x0004002b,0x00000006, + 0x0000029d,0xaa685050,0x0004002b,0x00000006,0x0000029e,0x6a5a5040,0x0004002b,0x00000006, + 0x0000029f,0x5a5a4200,0x0004002b,0x00000006,0x000002a0,0x5450a0a8,0x0004002b,0x00000006, + 0x000002a1,0xa5a50000,0x0004002b,0x00000006,0x000002a2,0xa0a05050,0x0004002b,0x00000006, + 0x000002a3,0x5555a0a0,0x0004002b,0x00000006,0x000002a4,0x5a5a5050,0x0004002b,0x00000006, + 0x000002a5,0xaa550000,0x0004002b,0x00000006,0x000002a6,0xaa555500,0x0004002b,0x00000006, + 0x000002a7,0xaaaa5500,0x0004002b,0x00000006,0x000002a8,0x90909090,0x0004002b,0x00000006, + 0x000002a9,0x94949494,0x0004002b,0x00000006,0x000002aa,0xa4a4a4a4,0x0004002b,0x00000006, + 0x000002ab,0xa9a59450,0x0004002b,0x00000006,0x000002ac,0x2a0a4250,0x0004002b,0x00000006, + 0x000002ad,0xa5945040,0x0004002b,0x00000006,0x000002ae,0x0a425054,0x0004002b,0x00000006, + 0x000002af,0xa5a5a500,0x0004002b,0x00000006,0x000002b0,0x55a0a0a0,0x0004002b,0x00000006, + 0x000002b1,0xa8a85454,0x0004002b,0x00000006,0x000002b2,0x6a6a4040,0x0004002b,0x00000006, + 0x000002b3,0xa4a45000,0x0004002b,0x00000006,0x000002b4,0x1a1a0500,0x0004002b,0x00000006, + 0x000002b5,0x0050a4a4,0x0004002b,0x00000006,0x000002b6,0xaaa59090,0x0004002b,0x00000006, + 0x000002b7,0x14696914,0x0004002b,0x00000006,0x000002b8,0x69691400,0x0004002b,0x00000006, + 0x000002b9,0xa08585a0,0x0004002b,0x00000006,0x000002ba,0xaa821414,0x0004002b,0x00000006, + 0x000002bb,0x50a4a450,0x0004002b,0x00000006,0x000002bc,0x6a5a0200,0x0004002b,0x00000006, + 0x000002bd,0xa9a58000,0x0004002b,0x00000006,0x000002be,0x5090a0a8,0x0004002b,0x00000006, + 0x000002bf,0xa8a09050,0x0004002b,0x00000006,0x000002c0,0x24242424,0x0004002b,0x00000006, + 0x000002c1,0x00aa5500,0x0004002b,0x00000006,0x000002c2,0x24924924,0x0004002b,0x00000006, + 0x000002c3,0x24499224,0x0004002b,0x00000006,0x000002c4,0x50a50a50,0x0004002b,0x00000006, + 0x000002c5,0x500aa550,0x0004002b,0x00000006,0x000002c6,0xaaaa4444,0x0004002b,0x00000006, + 0x000002c7,0x66660000,0x0004002b,0x00000006,0x000002c8,0xa5a0a5a0,0x0004002b,0x00000006, + 0x000002c9,0x50a050a0,0x0004002b,0x00000006,0x000002ca,0x69286928,0x0004002b,0x00000006, + 0x000002cb,0x44aaaa44,0x0004002b,0x00000006,0x000002cc,0x66666600,0x0004002b,0x00000006, + 0x000002cd,0xaa444444,0x0004002b,0x00000006,0x000002ce,0x54a854a8,0x0004002b,0x00000006, + 0x000002cf,0x95809580,0x0004002b,0x00000006,0x000002d0,0x96969600,0x0004002b,0x00000006, + 0x000002d1,0xa85454a8,0x0004002b,0x00000006,0x000002d2,0x80959580,0x0004002b,0x00000006, + 0x000002d3,0xaa141414,0x0004002b,0x00000006,0x000002d4,0x96960000,0x0004002b,0x00000006, + 0x000002d5,0xaaaa1414,0x0004002b,0x00000006,0x000002d6,0xa05050a0,0x0004002b,0x00000006, + 0x000002d7,0xa0a5a5a0,0x0004002b,0x00000006,0x000002d8,0x96000000,0x0004002b,0x00000006, + 0x000002d9,0x40804080,0x0004002b,0x00000006,0x000002da,0xa9a8a9a8,0x0004002b,0x00000006, + 0x000002db,0xaaaaaa44,0x0004002b,0x00000006,0x000002dc,0x2a4a5254,0x0043002c,0x00000259, + 0x000002dd,0x0000029d,0x0000029e,0x0000029f,0x000002a0,0x000002a1,0x000002a2,0x000002a3, + 0x000002a4,0x000002a5,0x000002a6,0x000002a7,0x000002a8,0x000002a9,0x000002aa,0x000002ab, + 0x000002ac,0x000002ad,0x000002ae,0x000002af,0x000002b0,0x000002b1,0x000002b2,0x000002b3, + 0x000002b4,0x000002b5,0x000002b6,0x000002b7,0x000002b8,0x000002b9,0x000002ba,0x000002bb, + 0x000002bc,0x000002bd,0x000002be,0x000002bf,0x000002c0,0x000002c1,0x000002c2,0x000002c3, + 0x000002c4,0x000002c5,0x000002c6,0x000002c7,0x000002c8,0x000002c9,0x000002ca,0x000002cb, + 0x000002cc,0x000002cd,0x000002ce,0x000002cf,0x000002d0,0x000002d1,0x000002d2,0x000002d3, + 0x000002d4,0x000002d5,0x000002d6,0x000002d7,0x000002d8,0x000002d9,0x000002da,0x000002db, + 0x000002dc,0x0004002b,0x00000006,0x000002de,0x000000f3,0x0004002b,0x00000006,0x000002df, + 0x00000083,0x0004002b,0x00000006,0x000002e0,0x0000008f,0x0004002b,0x00000006,0x000002e1, + 0x000000f8,0x0004002b,0x00000006,0x000002e2,0x000000f5,0x0004002b,0x00000006,0x000002e3, + 0x0000008a,0x0004002b,0x00000006,0x000002e4,0x00000035,0x0004002b,0x00000006,0x000002e5, + 0x000000a6,0x0004002b,0x00000006,0x000002e6,0x000000af,0x0004002b,0x00000006,0x000002e7, + 0x0000006f,0x0004002b,0x00000006,0x000002e8,0x000000fa,0x0004002b,0x00000006,0x000002e9, + 0x000000fd,0x0004002b,0x00000006,0x000002ea,0x000000fc,0x0043002c,0x00000259,0x000002eb, + 0x000002de,0x000002df,0x000002e0,0x000000aa,0x000002e1,0x000002de,0x000000aa,0x000002e0, + 0x000002e1,0x000002e1,0x00000210,0x00000210,0x00000210,0x000002e2,0x000002de,0x000002df, + 0x000002de,0x000002df,0x000002e1,0x000000aa,0x000002de,0x000002df,0x00000210,0x000002e3, + 0x000002e4,0x000002e1,0x00000242,0x000002e5,0x000002e1,0x000002e2,0x000002e6,0x000002e0, + 0x000002e1,0x000000aa,0x000002de,0x00000244,0x000002e5,0x000002e3,0x0000023c,0x000002e6, + 0x000002e7,0x000002de,0x000002e0,0x000002e2,0x000000aa,0x000002e7,0x000002e7,0x000002e0, + 0x000002de,0x000000aa,0x000002e2,0x000002e2,0x000002e2,0x000002e1,0x000002e2,0x000002e8, + 0x000002e2,0x000002e8,0x000002e1,0x000002e9,0x000000aa,0x000002ea,0x000002de,0x000002df, + 0x0004001c,0x000002ec,0x00000031,0x000001fa,0x000b002c,0x000002ec,0x000002ed,0x0000008b, + 0x000000b4,0x00000032,0x000000ff,0x00000032,0x000000ff,0x000000ff,0x00000032,0x000b002c, + 0x000002ec,0x000002ee,0x000000e5,0x000000e5,0x000000e5,0x000000e5,0x000000b4,0x00000099, + 0x000000ff,0x00000032,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x00000063,0x00000158,0x00000007,0x0004003b,0x00000063,0x0000015b, + 0x00000007,0x0004003b,0x00000009,0x00000174,0x00000007,0x0004003b,0x00000009,0x00000175, + 0x00000007,0x0004003b,0x00000008,0x00000189,0x00000007,0x0004003b,0x00000009,0x00000198, + 0x00000007,0x0004003b,0x00000009,0x000001a3,0x00000007,0x0004003b,0x0000001e,0x000001ad, + 0x00000007,0x0004003b,0x00000021,0x000001b3,0x00000007,0x0004003b,0x00000009,0x000001b4, + 0x00000007,0x0004003b,0x00000009,0x000001b7,0x00000007,0x0004003b,0x0000001e,0x000001ba, + 0x00000007,0x0004003b,0x00000021,0x000001bb,0x00000007,0x0004003b,0x00000009,0x000001bf, + 0x00000007,0x0004003b,0x000001c8,0x000001c9,0x00000007,0x0004003b,0x00000008,0x000001cd, + 0x00000007,0x0004003b,0x00000009,0x000001cf,0x00000007,0x0004003b,0x00000009,0x000001d0, + 0x00000007,0x0004003b,0x00000009,0x000001d7,0x00000007,0x0004003b,0x00000009,0x000001f4, + 0x00000007,0x0004003b,0x00000009,0x000001f5,0x00000007,0x0004003b,0x00000012,0x000001f6, + 0x00000007,0x0004003d,0x00000065,0x00000159,0x00000067,0x0007004f,0x00000062,0x0000015a, + 0x00000159,0x00000159,0x00000000,0x00000001,0x0003003e,0x00000158,0x0000015a,0x00050041, + 0x0000015c,0x0000015d,0x00000078,0x00000032,0x0004003d,0x00000062,0x0000015e,0x0000015d, + 0x00050050,0x00000062,0x0000015f,0x00000044,0x00000044,0x00050080,0x00000062,0x00000160, + 0x0000015e,0x0000015f,0x00050050,0x00000062,0x00000161,0x0000006c,0x0000006c,0x00050086, + 0x00000062,0x00000162,0x00000160,0x00000161,0x0003003e,0x0000015b,0x00000162,0x00050041, + 0x00000009,0x00000163,0x00000158,0x0000002a,0x0004003d,0x00000006,0x00000164,0x00000163, + 0x00050041,0x00000009,0x00000165,0x0000015b,0x0000002a,0x0004003d,0x00000006,0x00000166, + 0x00000165,0x000500ae,0x0000001d,0x00000167,0x00000164,0x00000166,0x000400a8,0x0000001d, + 0x00000168,0x00000167,0x000300f7,0x0000016a,0x00000000,0x000400fa,0x00000168,0x00000169, + 0x0000016a,0x000200f8,0x00000169,0x00050041,0x00000009,0x0000016b,0x00000158,0x0000004a, + 0x0004003d,0x00000006,0x0000016c,0x0000016b,0x00050041,0x00000009,0x0000016d,0x0000015b, + 0x0000004a,0x0004003d,0x00000006,0x0000016e,0x0000016d,0x000500ae,0x0000001d,0x0000016f, + 0x0000016c,0x0000016e,0x000200f9,0x0000016a,0x000200f8,0x0000016a,0x000700f5,0x0000001d, + 0x00000170,0x00000167,0x00000005,0x0000016f,0x00000169,0x000300f7,0x00000172,0x00000000, + 0x000400fa,0x00000170,0x00000171,0x00000172,0x000200f8,0x00000171,0x000100fd,0x000200f8, + 0x00000172,0x0003003e,0x00000174,0x0000006c,0x00050041,0x00000079,0x00000176,0x00000078, + 0x000000e5,0x0004003d,0x00000006,0x00000177,0x00000176,0x00050041,0x00000093,0x00000178, + 0x00000067,0x00000092,0x0004003d,0x00000006,0x00000179,0x00000178,0x00050041,0x00000079, + 0x0000017a,0x00000078,0x000000f6,0x0004003d,0x00000006,0x0000017b,0x0000017a,0x00050084, + 0x00000006,0x0000017c,0x00000179,0x0000017b,0x00050041,0x00000009,0x0000017d,0x00000158, + 0x0000004a,0x0004003d,0x00000006,0x0000017e,0x0000017d,0x00050041,0x00000079,0x0000017f, + 0x00000078,0x000000ea,0x0004003d,0x00000006,0x00000180,0x0000017f,0x00050084,0x00000006, + 0x00000181,0x0000017e,0x00000180,0x00050080,0x00000006,0x00000182,0x0000017c,0x00000181, + 0x00050041,0x00000009,0x00000183,0x00000158,0x0000002a,0x0004003d,0x00000006,0x00000184, + 0x00000183,0x00050080,0x00000006,0x00000185,0x00000182,0x00000184,0x0004003d,0x00000006, + 0x00000186,0x00000174,0x00050084,0x00000006,0x00000187,0x00000185,0x00000186,0x00050080, + 0x00000006,0x00000188,0x00000177,0x00000187,0x0003003e,0x00000175,0x00000188,0x0004003d, + 0x00000006,0x0000018e,0x00000175,0x00060041,0x0000018f,0x00000190,0x0000018d,0x000000e5, + 0x0000018e,0x0004003d,0x00000006,0x00000191,0x00000190,0x0004003d,0x00000006,0x00000192, + 0x00000175,0x00050080,0x00000006,0x00000193,0x00000192,0x0000004a,0x00060041,0x0000018f, + 0x00000194,0x0000018d,0x000000e5,0x00000193,0x0004003d,0x00000006,0x00000195,0x00000194, + 0x0004003d,0x00000006,0x00000196,0x00000174,0x000500ac,0x0000001d,0x00000197,0x00000196, + 0x00000092,0x000300f7,0x0000019a,0x00000000,0x000400fa,0x00000197,0x00000199,0x0000019f, + 0x000200f8,0x00000199,0x0004003d,0x00000006,0x0000019b,0x00000175,0x00050080,0x00000006, + 0x0000019c,0x0000019b,0x00000092,0x00060041,0x0000018f,0x0000019d,0x0000018d,0x000000e5, + 0x0000019c,0x0004003d,0x00000006,0x0000019e,0x0000019d,0x0003003e,0x00000198,0x0000019e, + 0x000200f9,0x0000019a,0x000200f8,0x0000019f,0x0003003e,0x00000198,0x0000002a,0x000200f9, + 0x0000019a,0x000200f8,0x0000019a,0x0004003d,0x00000006,0x000001a0,0x00000198,0x0004003d, + 0x00000006,0x000001a1,0x00000174,0x000500ac,0x0000001d,0x000001a2,0x000001a1,0x00000092, + 0x000300f7,0x000001a5,0x00000000,0x000400fa,0x000001a2,0x000001a4,0x000001aa,0x000200f8, + 0x000001a4,0x0004003d,0x00000006,0x000001a6,0x00000175,0x00050080,0x00000006,0x000001a7, + 0x000001a6,0x00000044,0x00060041,0x0000018f,0x000001a8,0x0000018d,0x000000e5,0x000001a7, + 0x0004003d,0x00000006,0x000001a9,0x000001a8,0x0003003e,0x000001a3,0x000001a9,0x000200f9, + 0x000001a5,0x000200f8,0x000001aa,0x0003003e,0x000001a3,0x0000002a,0x000200f9,0x000001a5, + 0x000200f8,0x000001a5,0x0004003d,0x00000006,0x000001ab,0x000001a3,0x00070050,0x00000007, + 0x000001ac,0x00000191,0x00000195,0x000001a0,0x000001ab,0x0003003e,0x00000189,0x000001ac, + 0x00050041,0x00000079,0x000001ae,0x00000078,0x00000096,0x0004003d,0x00000006,0x000001af, + 0x000001ae,0x000500c7,0x00000006,0x000001b0,0x000001af,0x00000092,0x000500ab,0x0000001d, + 0x000001b1,0x000001b0,0x0000002a,0x0003003e,0x000001ad,0x000001b1,0x00050041,0x00000009, + 0x000001b5,0x00000189,0x00000092,0x0004003d,0x00000006,0x000001b6,0x000001b5,0x0003003e, + 0x000001b4,0x000001b6,0x00050041,0x00000009,0x000001b8,0x00000189,0x00000044,0x0004003d, + 0x00000006,0x000001b9,0x000001b8,0x0003003e,0x000001b7,0x000001b9,0x0003003e,0x000001ba, + 0x000001b2,0x0004003d,0x00000020,0x000001bc,0x000001b3,0x0003003e,0x000001bb,0x000001bc, + 0x00080039,0x00000002,0x000001bd,0x00000027,0x000001b4,0x000001b7,0x000001ba,0x000001bb, + 0x0004003d,0x00000020,0x000001be,0x000001bb,0x0003003e,0x000001b3,0x000001be,0x0003003e, + 0x000001bf,0x0000002a,0x000200f9,0x000001c0,0x000200f8,0x000001c0,0x000400f6,0x000001c2, + 0x000001c3,0x00000000,0x000200f9,0x000001c4,0x000200f8,0x000001c4,0x0004003d,0x00000006, + 0x000001c5,0x000001bf,0x000500b0,0x0000001d,0x000001c6,0x000001c5,0x0000001f,0x000400fa, + 0x000001c6,0x000001c1,0x000001c2,0x000200f8,0x000001c1,0x0004003d,0x00000006,0x000001ca, + 0x000001bf,0x0004003d,0x00000006,0x000001cb,0x000001bf,0x00050084,0x00000006,0x000001cc, + 0x0000006c,0x000001cb,0x0004003d,0x00000007,0x000001ce,0x00000189,0x0003003e,0x000001cd, + 0x000001ce,0x0003003e,0x000001cf,0x000001cc,0x0003003e,0x000001d0,0x0000006c,0x00070039, + 0x00000006,0x000001d1,0x0000000e,0x000001cd,0x000001cf,0x000001d0,0x00050084,0x00000006, + 0x000001d3,0x000001d1,0x000001d2,0x00050041,0x00000009,0x000001d4,0x000001c9,0x000001ca, + 0x0003003e,0x000001d4,0x000001d3,0x000200f9,0x000001c3,0x000200f8,0x000001c3,0x0004003d, + 0x00000006,0x000001d5,0x000001bf,0x00050080,0x00000006,0x000001d6,0x000001d5,0x000000ea, + 0x0003003e,0x000001bf,0x000001d6,0x000200f9,0x000001c0,0x000200f8,0x000001c2,0x0003003e, + 0x000001d7,0x0000002a,0x000200f9,0x000001d8,0x000200f8,0x000001d8,0x000400f6,0x000001da, + 0x000001db,0x00000000,0x000200f9,0x000001dc,0x000200f8,0x000001dc,0x0004003d,0x00000006, + 0x000001dd,0x000001d7,0x000500b0,0x0000001d,0x000001de,0x000001dd,0x0000001f,0x000400fa, + 0x000001de,0x000001d9,0x000001da,0x000200f8,0x000001d9,0x0004003d,0x00000006,0x000001df, + 0x000001d7,0x000500c7,0x00000006,0x000001e0,0x000001df,0x00000044,0x0004003d,0x00000006, + 0x000001e1,0x000001d7,0x000500c2,0x00000006,0x000001e2,0x000001e1,0x000000f6,0x0004003d, + 0x00000006,0x000001e3,0x000001d7,0x00050041,0x00000008,0x000001e4,0x000001b3,0x000001e3, + 0x0004003d,0x00000007,0x000001e5,0x000001e4,0x0008004f,0x00000065,0x000001e6,0x000001e5, + 0x000001e5,0x00000000,0x00000001,0x00000002,0x00040070,0x000001e7,0x000001e8,0x000001e6, + 0x0004003d,0x00000006,0x000001e9,0x000001d7,0x00050041,0x00000009,0x000001ea,0x000001c9, + 0x000001e9,0x0004003d,0x00000006,0x000001eb,0x000001ea,0x00040070,0x00000010,0x000001ec, + 0x000001eb,0x00050051,0x00000010,0x000001ed,0x000001e8,0x00000000,0x00050051,0x00000010, + 0x000001ee,0x000001e8,0x00000001,0x00050051,0x00000010,0x000001ef,0x000001e8,0x00000002, + 0x00070050,0x00000011,0x000001f0,0x000001ed,0x000001ee,0x000001ef,0x000001ec,0x00070050, + 0x00000011,0x000001f2,0x000001f1,0x000001f1,0x000001f1,0x000001f1,0x00050088,0x00000011, + 0x000001f3,0x000001f0,0x000001f2,0x0003003e,0x000001f4,0x000001e0,0x0003003e,0x000001f5, + 0x000001e2,0x0003003e,0x000001f6,0x000001f3,0x00070039,0x00000002,0x000001f7,0x00000017, + 0x000001f4,0x000001f5,0x000001f6,0x000200f9,0x000001db,0x000200f8,0x000001db,0x0004003d, + 0x00000006,0x000001f8,0x000001d7,0x00050080,0x00000006,0x000001f9,0x000001f8,0x000000ea, + 0x0003003e,0x000001d7,0x000001f9,0x000200f9,0x000001d8,0x000200f8,0x000001da,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000e,0x00000000,0x0000000a,0x00030037,0x00000008, + 0x0000000b,0x00030037,0x00000009,0x0000000c,0x00030037,0x00000009,0x0000000d,0x000200f8, + 0x0000000f,0x0004003b,0x00000009,0x0000002f,0x00000007,0x0004003b,0x00000009,0x00000034, + 0x00000007,0x0004003b,0x00000009,0x00000038,0x00000007,0x0004003b,0x00000009,0x00000055, + 0x00000007,0x0004003d,0x00000006,0x00000029,0x0000000d,0x000500aa,0x0000001d,0x0000002b, + 0x00000029,0x0000002a,0x000300f7,0x0000002d,0x00000000,0x000400fa,0x0000002b,0x0000002c, + 0x0000002d,0x000200f8,0x0000002c,0x000200fe,0x0000002a,0x000200f8,0x0000002d,0x0004003d, + 0x00000006,0x00000030,0x0000000c,0x000500c2,0x00000006,0x00000033,0x00000030,0x00000032, + 0x0003003e,0x0000002f,0x00000033,0x0004003d,0x00000006,0x00000035,0x0000000c,0x000500c7, + 0x00000006,0x00000037,0x00000035,0x00000036,0x0003003e,0x00000034,0x00000037,0x0004003d, + 0x00000006,0x00000039,0x0000002f,0x00050041,0x00000009,0x0000003a,0x0000000b,0x00000039, + 0x0004003d,0x00000006,0x0000003b,0x0000003a,0x0004003d,0x00000006,0x0000003c,0x00000034, + 0x000500c2,0x00000006,0x0000003d,0x0000003b,0x0000003c,0x0003003e,0x00000038,0x0000003d, + 0x0004003d,0x00000006,0x0000003e,0x00000034,0x0004003d,0x00000006,0x0000003f,0x0000000d, + 0x00050080,0x00000006,0x00000040,0x0000003e,0x0000003f,0x000500ac,0x0000001d,0x00000042, + 0x00000040,0x00000041,0x0004003d,0x00000006,0x00000043,0x0000002f,0x000500b0,0x0000001d, + 0x00000045,0x00000043,0x00000044,0x000500a7,0x0000001d,0x00000046,0x00000042,0x00000045, + 0x000300f7,0x00000048,0x00000000,0x000400fa,0x00000046,0x00000047,0x00000048,0x000200f8, + 0x00000047,0x0004003d,0x00000006,0x00000049,0x0000002f,0x00050080,0x00000006,0x0000004b, + 0x00000049,0x0000004a,0x00050041,0x00000009,0x0000004c,0x0000000b,0x0000004b,0x0004003d, + 0x00000006,0x0000004d,0x0000004c,0x0004003d,0x00000006,0x0000004e,0x00000034,0x00050082, + 0x00000006,0x0000004f,0x00000041,0x0000004e,0x000500c4,0x00000006,0x00000050,0x0000004d, + 0x0000004f,0x0004003d,0x00000006,0x00000051,0x00000038,0x000500c5,0x00000006,0x00000052, + 0x00000051,0x00000050,0x0003003e,0x00000038,0x00000052,0x000200f9,0x00000048,0x000200f8, + 0x00000048,0x0004003d,0x00000006,0x00000053,0x0000000d,0x000500aa,0x0000001d,0x00000054, + 0x00000053,0x00000041,0x000300f7,0x00000057,0x00000000,0x000400fa,0x00000054,0x00000056, + 0x00000059,0x000200f8,0x00000056,0x0004003d,0x00000006,0x00000058,0x00000038,0x0003003e, + 0x00000055,0x00000058,0x000200f9,0x00000057,0x000200f8,0x00000059,0x0004003d,0x00000006, + 0x0000005a,0x00000038,0x0004003d,0x00000006,0x0000005b,0x0000000d,0x000500c4,0x00000006, + 0x0000005c,0x0000004a,0x0000005b,0x00050082,0x00000006,0x0000005d,0x0000005c,0x0000004a, + 0x000500c7,0x00000006,0x0000005e,0x0000005a,0x0000005d,0x0003003e,0x00000055,0x0000005e, + 0x000200f9,0x00000057,0x000200f8,0x00000057,0x0004003d,0x00000006,0x0000005f,0x00000055, + 0x000200fe,0x0000005f,0x00010038,0x00050036,0x00000002,0x00000017,0x00000000,0x00000013, + 0x00030037,0x00000009,0x00000014,0x00030037,0x00000009,0x00000015,0x00030037,0x00000012, + 0x00000016,0x000200f8,0x00000018,0x0004003b,0x00000063,0x00000064,0x00000007,0x0004003b, + 0x00000063,0x0000006a,0x00000007,0x0004003d,0x00000065,0x00000068,0x00000067,0x0007004f, + 0x00000062,0x00000069,0x00000068,0x00000068,0x00000000,0x00000001,0x0003003e,0x00000064, + 0x00000069,0x0004003d,0x00000062,0x0000006b,0x00000064,0x00050050,0x00000062,0x0000006d, + 0x0000006c,0x0000006c,0x00050084,0x00000062,0x0000006e,0x0000006b,0x0000006d,0x0004003d, + 0x00000006,0x0000006f,0x00000014,0x0004003d,0x00000006,0x00000070,0x00000015,0x00050050, + 0x00000062,0x00000071,0x0000006f,0x00000070,0x00050080,0x00000062,0x00000072,0x0000006e, + 0x00000071,0x0003003e,0x0000006a,0x00000072,0x00050041,0x00000009,0x00000073,0x0000006a, + 0x0000002a,0x0004003d,0x00000006,0x00000074,0x00000073,0x00060041,0x00000079,0x0000007a, + 0x00000078,0x00000032,0x0000002a,0x0004003d,0x00000006,0x0000007b,0x0000007a,0x000500b0, + 0x0000001d,0x0000007c,0x00000074,0x0000007b,0x000300f7,0x0000007e,0x00000000,0x000400fa, + 0x0000007c,0x0000007d,0x0000007e,0x000200f8,0x0000007d,0x00050041,0x00000009,0x0000007f, + 0x0000006a,0x0000004a,0x0004003d,0x00000006,0x00000080,0x0000007f,0x00060041,0x00000079, + 0x00000081,0x00000078,0x00000032,0x0000004a,0x0004003d,0x00000006,0x00000082,0x00000081, + 0x000500b0,0x0000001d,0x00000083,0x00000080,0x00000082,0x000200f9,0x0000007e,0x000200f8, + 0x0000007e,0x000700f5,0x0000001d,0x00000084,0x0000007c,0x00000018,0x00000083,0x0000007d, + 0x000300f7,0x00000086,0x00000000,0x000400fa,0x00000084,0x00000085,0x00000086,0x000200f8, + 0x00000085,0x0004003d,0x00000087,0x0000008a,0x00000089,0x00050041,0x0000008c,0x0000008d, + 0x00000078,0x0000008b,0x0004003d,0x00000075,0x0000008e,0x0000008d,0x0004003d,0x00000062, + 0x0000008f,0x0000006a,0x0004007c,0x00000075,0x00000090,0x0000008f,0x00050080,0x00000075, + 0x00000091,0x0000008e,0x00000090,0x00050041,0x00000093,0x00000094,0x00000067,0x00000092, + 0x0004003d,0x00000006,0x00000095,0x00000094,0x00050041,0x00000079,0x00000097,0x00000078, + 0x00000096,0x0004003d,0x00000006,0x00000098,0x00000097,0x000500c2,0x00000006,0x0000009a, + 0x00000098,0x00000099,0x00050080,0x00000006,0x0000009b,0x00000095,0x0000009a,0x0004007c, + 0x00000031,0x0000009c,0x0000009b,0x00050051,0x00000031,0x0000009e,0x00000091,0x00000000, + 0x00050051,0x00000031,0x0000009f,0x00000091,0x00000001,0x00060050,0x0000009d,0x000000a0, + 0x0000009e,0x0000009f,0x0000009c,0x0004003d,0x00000011,0x000000a1,0x00000016,0x00040063, + 0x0000008a,0x000000a0,0x000000a1,0x000200f9,0x00000086,0x000200f8,0x00000086,0x000100fd, + 0x00010038,0x00050036,0x00000007,0x0000001b,0x00000000,0x00000019,0x00030037,0x00000009, + 0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000009,0x000000a2,0x00000007,0x0004003b, + 0x00000009,0x000000a7,0x00000007,0x0004003b,0x00000009,0x000000ac,0x00000007,0x0004003d, + 0x00000006,0x000000a3,0x0000001a,0x000500c2,0x00000006,0x000000a5,0x000000a3,0x000000a4, + 0x000500c7,0x00000006,0x000000a6,0x000000a5,0x00000036,0x0003003e,0x000000a2,0x000000a6, + 0x0004003d,0x00000006,0x000000a8,0x0000001a,0x000500c2,0x00000006,0x000000a9,0x000000a8, + 0x00000032,0x000500c7,0x00000006,0x000000ab,0x000000a9,0x000000aa,0x0003003e,0x000000a7, + 0x000000ab,0x0004003d,0x00000006,0x000000ad,0x0000001a,0x000500c7,0x00000006,0x000000ae, + 0x000000ad,0x00000036,0x0003003e,0x000000ac,0x000000ae,0x0004003d,0x00000006,0x000000af, + 0x000000a2,0x00050084,0x00000006,0x000000b1,0x000000af,0x000000b0,0x00050080,0x00000006, + 0x000000b3,0x000000b1,0x000000b2,0x000500c2,0x00000006,0x000000b5,0x000000b3,0x000000b4, + 0x0004003d,0x00000006,0x000000b6,0x000000a7,0x00050084,0x00000006,0x000000b8,0x000000b6, + 0x000000b7,0x00050080,0x00000006,0x000000ba,0x000000b8,0x000000b9,0x000500c2,0x00000006, + 0x000000bb,0x000000ba,0x000000b4,0x0004003d,0x00000006,0x000000bc,0x000000ac,0x00050084, + 0x00000006,0x000000bd,0x000000bc,0x000000b0,0x00050080,0x00000006,0x000000be,0x000000bd, + 0x000000b2,0x000500c2,0x00000006,0x000000bf,0x000000be,0x000000b4,0x00070050,0x00000007, + 0x000000c1,0x000000b5,0x000000bb,0x000000bf,0x000000c0,0x000200fe,0x000000c1,0x00010038, + 0x00050036,0x00000002,0x00000027,0x00000000,0x00000022,0x00030037,0x00000009,0x00000023, + 0x00030037,0x00000009,0x00000024,0x00030037,0x0000001e,0x00000025,0x00030037,0x00000021, + 0x00000026,0x000200f8,0x00000028,0x0004003b,0x00000009,0x000000c4,0x00000007,0x0004003b, + 0x00000009,0x000000c8,0x00000007,0x0004003b,0x00000009,0x000000cc,0x00000007,0x0004003b, + 0x00000009,0x000000d0,0x00000007,0x0004003b,0x00000009,0x000000d4,0x00000007,0x0004003b, + 0x00000009,0x000000d7,0x00000007,0x0004003b,0x00000009,0x000000db,0x00000007,0x0004003b, + 0x00000009,0x000000df,0x00000007,0x0004003b,0x000000e3,0x000000e4,0x00000007,0x0004003b, + 0x00000009,0x000000e6,0x00000007,0x0004003b,0x00000009,0x000000eb,0x00000007,0x0004003b, + 0x00000009,0x00000145,0x00000007,0x0004003d,0x00000006,0x000000c5,0x00000023,0x000500c7, + 0x00000006,0x000000c7,0x000000c5,0x000000c6,0x0003003e,0x000000c4,0x000000c7,0x0004003d, + 0x00000006,0x000000c9,0x00000023,0x000500c2,0x00000006,0x000000cb,0x000000c9,0x000000ca, + 0x0003003e,0x000000c8,0x000000cb,0x0004003d,0x00000006,0x000000cd,0x000000c4,0x000500c2, + 0x00000006,0x000000ce,0x000000cd,0x000000a4,0x000500c7,0x00000006,0x000000cf,0x000000ce, + 0x00000036,0x0003003e,0x000000cc,0x000000cf,0x0004003d,0x00000006,0x000000d1,0x000000c4, + 0x000500c2,0x00000006,0x000000d2,0x000000d1,0x00000032,0x000500c7,0x00000006,0x000000d3, + 0x000000d2,0x000000aa,0x0003003e,0x000000d0,0x000000d3,0x0004003d,0x00000006,0x000000d5, + 0x000000c4,0x000500c7,0x00000006,0x000000d6,0x000000d5,0x00000036,0x0003003e,0x000000d4, + 0x000000d6,0x0004003d,0x00000006,0x000000d8,0x000000c8,0x000500c2,0x00000006,0x000000d9, + 0x000000d8,0x000000a4,0x000500c7,0x00000006,0x000000da,0x000000d9,0x00000036,0x0003003e, + 0x000000d7,0x000000da,0x0004003d,0x00000006,0x000000dc,0x000000c8,0x000500c2,0x00000006, + 0x000000dd,0x000000dc,0x00000032,0x000500c7,0x00000006,0x000000de,0x000000dd,0x000000aa, + 0x0003003e,0x000000db,0x000000de,0x0004003d,0x00000006,0x000000e0,0x000000c8,0x000500c7, + 0x00000006,0x000000e1,0x000000e0,0x00000036,0x0003003e,0x000000df,0x000000e1,0x0004003d, + 0x00000006,0x000000e7,0x000000c4,0x0003003e,0x000000e6,0x000000e7,0x00050039,0x00000007, + 0x000000e8,0x0000001b,0x000000e6,0x00050041,0x00000008,0x000000e9,0x000000e4,0x000000e5, + 0x0003003e,0x000000e9,0x000000e8,0x0004003d,0x00000006,0x000000ec,0x000000c8,0x0003003e, + 0x000000eb,0x000000ec,0x00050039,0x00000007,0x000000ed,0x0000001b,0x000000eb,0x00050041, + 0x00000008,0x000000ee,0x000000e4,0x000000ea,0x0003003e,0x000000ee,0x000000ed,0x0004003d, + 0x00000006,0x000000ef,0x000000c4,0x0004003d,0x00000006,0x000000f0,0x000000c8,0x000500ac, + 0x0000001d,0x000000f1,0x000000ef,0x000000f0,0x0004003d,0x0000001d,0x000000f2,0x00000025, + 0x000500a6,0x0000001d,0x000000f3,0x000000f1,0x000000f2,0x000300f7,0x000000f5,0x00000000, + 0x000400fa,0x000000f3,0x000000f4,0x0000012a,0x000200f8,0x000000f4,0x0004003d,0x00000006, + 0x000000f7,0x000000cc,0x00050084,0x00000006,0x000000f8,0x00000092,0x000000f7,0x0004003d, + 0x00000006,0x000000f9,0x000000d7,0x00050080,0x00000006,0x000000fa,0x000000f8,0x000000f9, + 0x00050084,0x00000006,0x000000fc,0x000000fa,0x000000fb,0x00050080,0x00000006,0x000000fe, + 0x000000fc,0x000000fd,0x000500c2,0x00000006,0x00000100,0x000000fe,0x000000ff,0x0004003d, + 0x00000006,0x00000101,0x000000d0,0x00050084,0x00000006,0x00000102,0x00000092,0x00000101, + 0x0004003d,0x00000006,0x00000103,0x000000db,0x00050080,0x00000006,0x00000104,0x00000102, + 0x00000103,0x00050084,0x00000006,0x00000106,0x00000104,0x00000105,0x00050080,0x00000006, + 0x00000108,0x00000106,0x00000107,0x000500c2,0x00000006,0x00000109,0x00000108,0x000000a4, + 0x0004003d,0x00000006,0x0000010a,0x000000d4,0x00050084,0x00000006,0x0000010b,0x00000092, + 0x0000010a,0x0004003d,0x00000006,0x0000010c,0x000000df,0x00050080,0x00000006,0x0000010d, + 0x0000010b,0x0000010c,0x00050084,0x00000006,0x0000010e,0x0000010d,0x000000fb,0x00050080, + 0x00000006,0x0000010f,0x0000010e,0x000000fd,0x000500c2,0x00000006,0x00000110,0x0000010f, + 0x000000ff,0x00070050,0x00000007,0x00000111,0x00000100,0x00000109,0x00000110,0x000000c0, + 0x00050041,0x00000008,0x00000112,0x000000e4,0x000000f6,0x0003003e,0x00000112,0x00000111, + 0x0004003d,0x00000006,0x00000113,0x000000cc,0x0004003d,0x00000006,0x00000114,0x000000d7, + 0x00050084,0x00000006,0x00000115,0x00000114,0x00000092,0x00050080,0x00000006,0x00000116, + 0x00000113,0x00000115,0x00050084,0x00000006,0x00000117,0x00000116,0x000000fb,0x00050080, + 0x00000006,0x00000118,0x00000117,0x000000fd,0x000500c2,0x00000006,0x00000119,0x00000118, + 0x000000ff,0x0004003d,0x00000006,0x0000011a,0x000000d0,0x0004003d,0x00000006,0x0000011b, + 0x000000db,0x00050084,0x00000006,0x0000011c,0x0000011b,0x00000092,0x00050080,0x00000006, + 0x0000011d,0x0000011a,0x0000011c,0x00050084,0x00000006,0x0000011e,0x0000011d,0x00000105, + 0x00050080,0x00000006,0x0000011f,0x0000011e,0x00000107,0x000500c2,0x00000006,0x00000120, + 0x0000011f,0x000000a4,0x0004003d,0x00000006,0x00000121,0x000000d4,0x0004003d,0x00000006, + 0x00000122,0x000000df,0x00050084,0x00000006,0x00000123,0x00000122,0x00000092,0x00050080, + 0x00000006,0x00000124,0x00000121,0x00000123,0x00050084,0x00000006,0x00000125,0x00000124, + 0x000000fb,0x00050080,0x00000006,0x00000126,0x00000125,0x000000fd,0x000500c2,0x00000006, + 0x00000127,0x00000126,0x000000ff,0x00070050,0x00000007,0x00000128,0x00000119,0x00000120, + 0x00000127,0x000000c0,0x00050041,0x00000008,0x00000129,0x000000e4,0x00000096,0x0003003e, + 0x00000129,0x00000128,0x000200f9,0x000000f5,0x000200f8,0x0000012a,0x0004003d,0x00000006, + 0x0000012b,0x000000cc,0x0004003d,0x00000006,0x0000012c,0x000000d7,0x00050080,0x00000006, + 0x0000012d,0x0000012b,0x0000012c,0x00050084,0x00000006,0x0000012f,0x0000012d,0x0000012e, + 0x00050080,0x00000006,0x00000131,0x0000012f,0x00000130,0x000500c2,0x00000006,0x00000132, + 0x00000131,0x00000099,0x0004003d,0x00000006,0x00000133,0x000000d0,0x0004003d,0x00000006, + 0x00000134,0x000000db,0x00050080,0x00000006,0x00000135,0x00000133,0x00000134,0x00050084, + 0x00000006,0x00000137,0x00000135,0x00000136,0x00050080,0x00000006,0x00000139,0x00000137, + 0x00000138,0x000500c2,0x00000006,0x0000013a,0x00000139,0x000000a4,0x0004003d,0x00000006, + 0x0000013b,0x000000d4,0x0004003d,0x00000006,0x0000013c,0x000000df,0x00050080,0x00000006, + 0x0000013d,0x0000013b,0x0000013c,0x00050084,0x00000006,0x0000013e,0x0000013d,0x0000012e, + 0x00050080,0x00000006,0x0000013f,0x0000013e,0x00000130,0x000500c2,0x00000006,0x00000140, + 0x0000013f,0x00000099,0x00070050,0x00000007,0x00000141,0x00000132,0x0000013a,0x00000140, + 0x000000c0,0x00050041,0x00000008,0x00000142,0x000000e4,0x000000f6,0x0003003e,0x00000142, + 0x00000141,0x00050041,0x00000008,0x00000144,0x000000e4,0x00000096,0x0003003e,0x00000144, + 0x00000143,0x000200f9,0x000000f5,0x000200f8,0x000000f5,0x0003003e,0x00000145,0x0000002a, + 0x000200f9,0x00000146,0x000200f8,0x00000146,0x000400f6,0x00000148,0x00000149,0x00000000, + 0x000200f9,0x0000014a,0x000200f8,0x0000014a,0x0004003d,0x00000006,0x0000014b,0x00000145, + 0x000500b0,0x0000001d,0x0000014c,0x0000014b,0x0000001f,0x000400fa,0x0000014c,0x00000147, + 0x00000148,0x000200f8,0x00000147,0x0004003d,0x00000006,0x0000014d,0x00000145,0x0004003d, + 0x00000006,0x0000014e,0x00000024,0x0004003d,0x00000006,0x0000014f,0x00000145,0x00050084, + 0x00000006,0x00000150,0x00000092,0x0000014f,0x000500c2,0x00000006,0x00000151,0x0000014e, + 0x00000150,0x000500c7,0x00000006,0x00000152,0x00000151,0x00000044,0x00050041,0x00000008, + 0x00000153,0x000000e4,0x00000152,0x0004003d,0x00000007,0x00000154,0x00000153,0x00050041, + 0x00000008,0x00000155,0x00000026,0x0000014d,0x0003003e,0x00000155,0x00000154,0x000200f9, + 0x00000149,0x000200f8,0x00000149,0x0004003d,0x00000006,0x00000156,0x00000145,0x00050080, + 0x00000006,0x00000157,0x00000156,0x000000ea,0x0003003e,0x00000145,0x00000157,0x000200f9, + 0x00000146,0x000200f8,0x00000148,0x000100fd,0x00010038 +}; + // 1115.1.0 +static const uint32_t spv_bc3[] = { + 0x07230203,0x00010300,0x0008000b,0x0000035d,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000006f,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000e,0x73746962, + 0x34757628,0x3b31753b,0x003b3175,0x00030005,0x0000000b,0x00000062,0x00030005,0x0000000c, + 0x00736f70,0x00030005,0x0000000d,0x0000006e,0x00060005,0x00000017,0x28747570,0x753b3175, + 0x66763b31,0x00003b34,0x00030005,0x00000014,0x00007874,0x00030005,0x00000015,0x00007974, + 0x00030005,0x00000016,0x00000076,0x00050005,0x0000001b,0x35626772,0x75283536,0x00003b31, + 0x00030005,0x0000001a,0x00000063,0x000a0005,0x00000027,0x6f6c6f63,0x6c625f72,0x286b636f, + 0x753b3175,0x31623b31,0x3475763b,0x5d36315b,0x0000003b,0x00030005,0x00000023,0x00006f6c, + 0x00030005,0x00000024,0x00786469,0x00040005,0x00000025,0x7161706f,0x00006575,0x00040005, + 0x00000026,0x65786574,0x0000736c,0x00090005,0x0000002f,0x6f6f6d73,0x615f6874,0x6168706c, + 0x3b317528,0x753b3175,0x36315b31,0x00003b5d,0x00030005,0x0000002c,0x00006f6c,0x00030005, + 0x0000002d,0x00006968,0x00030005,0x0000002e,0x00000061,0x00030005,0x00000037,0x00006977, + 0x00030005,0x0000003c,0x0000006f,0x00030005,0x00000040,0x00000076,0x00030005,0x0000006c, + 0x006b6c62,0x00080005,0x0000006f,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x00000044,0x00030005,0x00000072,0x00000070,0x00030005,0x0000007e,0x00004350,0x00060006, + 0x0000007e,0x00000000,0x5f637273,0x64726f77,0x00000000,0x00060006,0x0000007e,0x00000001, + 0x5f776f72,0x636f6c62,0x0000736b,0x00070006,0x0000007e,0x00000002,0x6579616c,0x6c625f72, + 0x736b636f,0x00000000,0x00050006,0x0000007e,0x00000003,0x67616c66,0x00000073,0x00050006, + 0x0000007e,0x00000004,0x5f747364,0x0066666f,0x00050006,0x0000007e,0x00000005,0x65747865, + 0x0000746e,0x00030005,0x00000080,0x00006370,0x00030005,0x00000091,0x00747364,0x00030005, + 0x000000aa,0x00000072,0x00030005,0x000000af,0x00000067,0x00030005,0x000000b4,0x00000062, + 0x00030005,0x000000cc,0x00003063,0x00030005,0x000000d0,0x00003163,0x00030005,0x000000d4, + 0x00003072,0x00030005,0x000000d8,0x00003067,0x00030005,0x000000dc,0x00003062,0x00030005, + 0x000000df,0x00003172,0x00030005,0x000000e3,0x00003167,0x00030005,0x000000e7,0x00003162, + 0x00030005,0x000000ec,0x00666572,0x00040005,0x000000ee,0x61726170,0x0000006d,0x00040005, + 0x000000f3,0x61726170,0x0000006d,0x00030005,0x0000014d,0x00000074,0x00030005,0x00000160, + 0x00003061,0x00030005,0x00000163,0x00003161,0x00030005,0x0000016a,0x006c6170,0x00030005, + 0x000001bc,0x00000062,0x00030005,0x000001c0,0x00000074,0x00040005,0x000001cc,0x61726170, + 0x0000006d,0x00040005,0x000001ce,0x61726170,0x0000006d,0x00040005,0x000001cf,0x61726170, + 0x0000006d,0x00030005,0x000001d6,0x006b6c62,0x00040005,0x000001d9,0x6b6c626e,0x00000000, + 0x00040005,0x000001f2,0x64726f77,0x00000073,0x00040005,0x000001f3,0x65736162,0x00000000, + 0x00030005,0x00000207,0x00000062,0x00030005,0x00000209,0x00637253,0x00040006,0x00000209, + 0x00000000,0x00000077,0x00030005,0x0000020b,0x00637273,0x00030005,0x0000022b,0x006e6773, + 0x00030005,0x00000231,0x00786574,0x00040005,0x00000232,0x61726170,0x0000006d,0x00040005, + 0x00000235,0x61726170,0x0000006d,0x00040005,0x00000238,0x61726170,0x0000006d,0x00040005, + 0x00000239,0x61726170,0x0000006d,0x00030005,0x0000023d,0x00000061,0x00040005,0x0000023e, + 0x61726170,0x0000006d,0x00040005,0x00000241,0x61726170,0x0000006d,0x00040005,0x00000244, + 0x61726170,0x0000006d,0x00030005,0x00000247,0x00000074,0x00040005,0x00000264,0x61726170, + 0x0000006d,0x00040005,0x00000265,0x61726170,0x0000006d,0x00040005,0x00000266,0x61726170, + 0x0000006d,0x00040047,0x0000006f,0x0000000b,0x0000001c,0x00030047,0x0000007e,0x00000002, + 0x00050048,0x0000007e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000007e,0x00000001, + 0x00000023,0x00000004,0x00050048,0x0000007e,0x00000002,0x00000023,0x00000008,0x00050048, + 0x0000007e,0x00000003,0x00000023,0x0000000c,0x00050048,0x0000007e,0x00000004,0x00000023, + 0x00000010,0x00050048,0x0000007e,0x00000005,0x00000023,0x00000018,0x00030047,0x00000091, + 0x00000019,0x00040047,0x00000091,0x00000021,0x00000001,0x00040047,0x00000091,0x00000022, + 0x00000000,0x00040047,0x00000208,0x00000006,0x00000004,0x00030047,0x00000209,0x00000002, + 0x00040048,0x00000209,0x00000000,0x00000018,0x00050048,0x00000209,0x00000000,0x00000023, + 0x00000000,0x00030047,0x0000020b,0x00000018,0x00040047,0x0000020b,0x00000021,0x00000000, + 0x00040047,0x0000020b,0x00000022,0x00000000,0x00040047,0x0000026a,0x0000000b,0x00000019, + 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020, + 0x00000000,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000007, + 0x00000007,0x00040020,0x00000009,0x00000007,0x00000006,0x00060021,0x0000000a,0x00000006, + 0x00000008,0x00000009,0x00000009,0x00030016,0x00000010,0x00000020,0x00040017,0x00000011, + 0x00000010,0x00000004,0x00040020,0x00000012,0x00000007,0x00000011,0x00060021,0x00000013, + 0x00000002,0x00000009,0x00000009,0x00000012,0x00040021,0x00000019,0x00000007,0x00000009, + 0x00020014,0x0000001d,0x00040020,0x0000001e,0x00000007,0x0000001d,0x0004002b,0x00000006, + 0x0000001f,0x00000010,0x0004001c,0x00000020,0x00000007,0x0000001f,0x00040020,0x00000021, + 0x00000007,0x00000020,0x00070021,0x00000022,0x00000002,0x00000009,0x00000009,0x0000001e, + 0x00000021,0x0004001c,0x00000029,0x00000006,0x0000001f,0x00040020,0x0000002a,0x00000007, + 0x00000029,0x00060021,0x0000002b,0x00000002,0x00000009,0x00000009,0x0000002a,0x0004002b, + 0x00000006,0x00000032,0x00000000,0x00040015,0x00000039,0x00000020,0x00000001,0x0004002b, + 0x00000039,0x0000003a,0x00000005,0x0004002b,0x00000006,0x0000003e,0x0000001f,0x0004002b, + 0x00000006,0x00000049,0x00000020,0x0004002b,0x00000006,0x0000004c,0x00000003,0x0004002b, + 0x00000006,0x00000052,0x00000001,0x00040017,0x0000006a,0x00000006,0x00000002,0x00040020, + 0x0000006b,0x00000007,0x0000006a,0x00040017,0x0000006d,0x00000006,0x00000003,0x00040020, + 0x0000006e,0x00000001,0x0000006d,0x0004003b,0x0000006e,0x0000006f,0x00000001,0x0004002b, + 0x00000006,0x00000074,0x00000004,0x00040017,0x0000007d,0x00000039,0x00000002,0x0008001e, + 0x0000007e,0x00000006,0x00000006,0x00000006,0x00000006,0x0000007d,0x0000006a,0x00040020, + 0x0000007f,0x00000009,0x0000007e,0x0004003b,0x0000007f,0x00000080,0x00000009,0x00040020, + 0x00000081,0x00000009,0x00000006,0x00090019,0x0000008f,0x00000010,0x00000001,0x00000000, + 0x00000001,0x00000000,0x00000002,0x00000004,0x00040020,0x00000090,0x00000000,0x0000008f, + 0x0004003b,0x00000090,0x00000091,0x00000000,0x0004002b,0x00000039,0x00000093,0x00000004, + 0x00040020,0x00000094,0x00000009,0x0000007d,0x0004002b,0x00000006,0x0000009a,0x00000002, + 0x00040020,0x0000009b,0x00000001,0x00000006,0x0004002b,0x00000039,0x0000009e,0x00000003, + 0x0004002b,0x00000039,0x000000a1,0x00000008,0x00040017,0x000000a5,0x00000039,0x00000003, + 0x0004002b,0x00000039,0x000000ac,0x0000000b,0x0004002b,0x00000006,0x000000b2,0x0000003f, + 0x0004002b,0x00000006,0x000000b8,0x0000020f,0x0004002b,0x00000006,0x000000ba,0x00000017, + 0x0004002b,0x00000039,0x000000bc,0x00000006,0x0004002b,0x00000006,0x000000bf,0x00000103, + 0x0004002b,0x00000006,0x000000c1,0x00000021,0x0004002b,0x00000006,0x000000c8,0x000000ff, + 0x0004002b,0x00000006,0x000000ce,0x0000ffff,0x0004002b,0x00000039,0x000000d2,0x00000010, + 0x0004001c,0x000000ea,0x00000007,0x00000074,0x00040020,0x000000eb,0x00000007,0x000000ea, + 0x0004002b,0x00000039,0x000000ed,0x00000000,0x0004002b,0x00000039,0x000000f2,0x00000001, + 0x0004002b,0x00000039,0x000000fe,0x00000002,0x0004002b,0x00000006,0x00000103,0x0000015f, + 0x0004002b,0x00000006,0x00000105,0x0000003d,0x0004002b,0x00000039,0x00000107,0x00000007, + 0x0004002b,0x00000006,0x0000010d,0x00000acb,0x0004002b,0x00000006,0x0000010f,0x0000040f, + 0x0004002b,0x00000006,0x00000136,0x0000041d,0x0004002b,0x00000006,0x00000138,0x0000007d, + 0x0004002b,0x00000006,0x0000013e,0x00001031,0x0004002b,0x00000006,0x00000140,0x000003fb, + 0x0007002c,0x00000007,0x0000014b,0x00000032,0x00000032,0x00000032,0x00000032,0x0004002b, + 0x00000006,0x00000167,0x00000008,0x0004001c,0x00000168,0x00000006,0x00000167,0x00040020, + 0x00000169,0x00000007,0x00000168,0x0004002b,0x00000006,0x00000174,0x00000006,0x0004002b, + 0x00000006,0x00000179,0x00000007,0x0004002b,0x00000006,0x0000017c,0x00000005,0x00040020, + 0x000001da,0x00000009,0x0000006a,0x0003001d,0x00000208,0x00000006,0x0003001e,0x00000209, + 0x00000208,0x00040020,0x0000020a,0x0000000c,0x00000209,0x0004003b,0x0000020a,0x0000020b, + 0x0000000c,0x00040020,0x0000020d,0x0000000c,0x00000006,0x00030029,0x0000001d,0x00000230, + 0x00040017,0x00000257,0x00000010,0x00000003,0x0004002b,0x00000010,0x00000261,0x437f0000, + 0x0006002c,0x0000006d,0x0000026a,0x00000167,0x00000167,0x00000052,0x0004001c,0x0000026b, + 0x00000039,0x00000049,0x0004002b,0x00000039,0x0000026c,0x0000000a,0x0004002b,0x00000039, + 0x0000026d,0xffffffff,0x0004002b,0x00000039,0x0000026e,0x0000000c,0x0004002b,0x00000039, + 0x0000026f,0x0000000d,0x0004002b,0x00000039,0x00000270,0x00000009,0x0023002c,0x0000026b, + 0x00000271,0x000000ed,0x000000f2,0x000000fe,0x0000026c,0x0000026d,0x0000026d,0x0000009e, + 0x000000ac,0x0000026d,0x0000026d,0x00000093,0x0000026e,0x0000026d,0x0000026d,0x0000003a, + 0x0000026f,0x0000026d,0x0000026d,0x000000bc,0x0000026d,0x0000026d,0x0000026d,0x00000107, + 0x0000026d,0x0000026d,0x0000026d,0x000000a1,0x0000026d,0x0000026d,0x0000026d,0x00000270, + 0x0000026d,0x0004002b,0x00000006,0x00000272,0x0000000f,0x0004001c,0x00000273,0x00000006, + 0x00000272,0x0004002b,0x00000006,0x00000274,0x00000014,0x0004002b,0x00000006,0x00000275, + 0x0000002c,0x0004002b,0x00000006,0x00000276,0x00000054,0x0004002b,0x00000006,0x00000277, + 0x00000069,0x0004002b,0x00000006,0x00000278,0x00000091,0x0004002b,0x00000006,0x00000279, + 0x000000a7,0x0004002b,0x00000006,0x0000027a,0x000000bd,0x0004002b,0x00000006,0x0000027b, + 0x000000d5,0x0004002b,0x00000006,0x0000027c,0x000000db,0x0004002b,0x00000006,0x0000027d, + 0x000000e4,0x0004002b,0x00000006,0x0000027e,0x000000ed,0x0004002b,0x00000006,0x0000027f, + 0x000000f6,0x0012002c,0x00000273,0x00000280,0x00000032,0x00000274,0x00000275,0x000000b2, + 0x00000276,0x00000277,0x00000138,0x00000278,0x00000279,0x0000027a,0x0000027b,0x0000027c, + 0x0000027d,0x0000027e,0x0000027f,0x0004001c,0x00000281,0x00000006,0x0000027f,0x0004002b, + 0x00000006,0x00000282,0x00000816,0x0004002b,0x00000006,0x00000283,0x0000081a,0x0004002b, + 0x00000006,0x00000284,0x0000081b,0x0004002b,0x00000006,0x00000285,0x000000a0,0x0004002b, + 0x00000006,0x00000286,0x000000a4,0x0004002b,0x00000006,0x00000287,0x000000a8,0x0004002b, + 0x00000006,0x00000288,0x00000051,0x0004002b,0x00000006,0x00000289,0x00000817,0x0004002b, + 0x00000006,0x0000028a,0x00000046,0x0004002b,0x00000006,0x0000028b,0x00000055,0x0004002b, + 0x00000006,0x0000028c,0x0000001b,0x0004002b,0x00000006,0x0000028d,0x00000047,0x0004002b, + 0x00000006,0x0000028e,0x00000059,0x0004002b,0x00000006,0x0000028f,0x0000021b,0x0004002b, + 0x00000006,0x00000290,0x0000004a,0x0004002b,0x00000006,0x00000291,0x00000052,0x0004002b, + 0x00000006,0x00000292,0x0000041b,0x0004002b,0x00000006,0x00000293,0x00000053,0x0004002b, + 0x00000006,0x00000294,0x0000061b,0x0004002b,0x00000006,0x00000295,0x0000005c,0x0004002b, + 0x00000006,0x00000296,0x00000a16,0x0004002b,0x00000006,0x00000297,0x00000a17,0x0004002b, + 0x00000006,0x00000298,0x00000070,0x0004002b,0x00000006,0x00000299,0x00000074,0x0004002b, + 0x00000006,0x0000029a,0x00000a1a,0x0004002b,0x00000006,0x0000029b,0x00000078,0x0004002b, + 0x00000006,0x0000029c,0x00000a1b,0x0004002b,0x00000006,0x0000029d,0x00000061,0x0004002b, + 0x00000006,0x0000029e,0x00000065,0x0004002b,0x00000006,0x0000029f,0x00000062,0x0004002b, + 0x00000006,0x000002a0,0x00000063,0x0004002b,0x00000006,0x000002a1,0x00001410,0x0004002b, + 0x00000006,0x000002a2,0x00000045,0x0004002b,0x00000006,0x000002a3,0x00001414,0x0004002b, + 0x00000006,0x000002a4,0x00000049,0x0004002b,0x00000006,0x000002a5,0x00001418,0x0004002b, + 0x00000006,0x000002a6,0x00000041,0x0004002b,0x00000006,0x000002a7,0x00000042,0x0004002b, + 0x00000006,0x000002a8,0x00000043,0x0004002b,0x00000006,0x000002a9,0x00000090,0x0004002b, + 0x00000006,0x000002aa,0x00000094,0x0004002b,0x00000006,0x000002ab,0x00000098,0x0004002b, + 0x00000006,0x000002ac,0x00000080,0x0004002b,0x00000006,0x000002ad,0x00000084,0x0004002b, + 0x00000006,0x000002ae,0x00000088,0x0004002b,0x00000006,0x000002af,0x00000060,0x0004002b, + 0x00000006,0x000002b0,0x00000064,0x0004002b,0x00000006,0x000002b1,0x00000068,0x0004002b, + 0x00000006,0x000002b2,0x000000a1,0x0004002b,0x00000006,0x000002b3,0x000000a5,0x0004002b, + 0x00000006,0x000002b4,0x000000a9,0x0004002b,0x00000006,0x000002b5,0x00000095,0x0004002b, + 0x00000006,0x000002b6,0x00000099,0x0004002b,0x00000006,0x000002b7,0x00000081,0x0004002b, + 0x00000006,0x000002b8,0x00005420,0x0004002b,0x00000006,0x000002b9,0x00000085,0x0004002b, + 0x00000006,0x000002ba,0x00005424,0x0004002b,0x00000006,0x000002bb,0x00000089,0x0004002b, + 0x00000006,0x000002bc,0x00005428,0x0004002b,0x00000006,0x000002bd,0x00005460,0x0004002b, + 0x00000006,0x000002be,0x00005464,0x0004002b,0x00000006,0x000002bf,0x00005468,0x00f9002c, + 0x00000281,0x000002c0,0x00000282,0x00000283,0x00000284,0x00000285,0x00000286,0x00000287, + 0x00000288,0x00000289,0x0000028a,0x0000028b,0x0000028c,0x0000028d,0x0000028e,0x0000028f, + 0x00000290,0x00000291,0x00000292,0x00000293,0x00000294,0x00000295,0x00000296,0x00000289, + 0x00000297,0x00000298,0x0000028c,0x0000028f,0x00000283,0x00000299,0x0000029a,0x00000292, + 0x00000282,0x0000029b,0x00000294,0x0000029c,0x00000284,0x0000029d,0x0000028a,0x0000029e, + 0x0000028d,0x00000277,0x00000290,0x0000029f,0x000002a0,0x00000295,0x00000285,0x00000286, + 0x00000287,0x00000288,0x000002a1,0x0000028a,0x000002a2,0x000002a3,0x0000028c,0x0000028d, + 0x000002a4,0x000002a5,0x0000028f,0x00000290,0x00000291,0x00000292,0x00000293,0x00000294, + 0x00000295,0x00000285,0x00000286,0x00000287,0x000002a6,0x000002a1,0x00000289,0x0000028a, + 0x0000028b,0x000002a3,0x0000028d,0x000002a4,0x000002a5,0x0000028f,0x00000290,0x000002a7, + 0x0000028c,0x00000292,0x000002a8,0x00000282,0x00000294,0x00000295,0x00000285,0x00000286, + 0x00000287,0x000002a6,0x000002a1,0x00000283,0x0000028a,0x000002a2,0x000002a3,0x0000028c, + 0x0000028d,0x0000028e,0x000002a5,0x00000290,0x000002a7,0x0000028f,0x00000292,0x000002a8, + 0x00000284,0x00000294,0x00000295,0x000002a9,0x00000283,0x000002aa,0x00000282,0x000002ab, + 0x00000284,0x00000288,0x00000289,0x0000028a,0x0000028b,0x0000028c,0x0000028d,0x0000028e, + 0x0000028f,0x00000290,0x00000291,0x00000292,0x00000293,0x00000294,0x00000295,0x000002ac, + 0x00000289,0x00000283,0x000002ad,0x00000292,0x00000282,0x000002ae,0x00000294,0x00000284, + 0x0000029d,0x0000028a,0x0000028b,0x0000028c,0x0000028d,0x0000028e,0x0000028f,0x00000290, + 0x0000029f,0x000002a0,0x00000295,0x000002ac,0x0000028c,0x00000283,0x000002ad,0x00000296, + 0x00000282,0x000002ae,0x00000297,0x00000284,0x00000288,0x00000289,0x0000028a,0x0000029e, + 0x0000028d,0x0000028e,0x0000028f,0x00000290,0x00000291,0x00000292,0x00000293,0x00000294, + 0x00000295,0x000002ac,0x0000028f,0x00000283,0x000002ad,0x0000029a,0x00000282,0x000002ae, + 0x0000029c,0x00000284,0x00000288,0x00000289,0x0000028a,0x0000028b,0x0000028c,0x0000028d, + 0x00000277,0x00000290,0x00000291,0x00000292,0x00000293,0x00000294,0x00000295,0x000002af, + 0x00000289,0x0000028c,0x0000028f,0x00000283,0x000002b0,0x00000296,0x0000029a,0x00000292, + 0x00000282,0x000002b1,0x00000297,0x00000294,0x0000029c,0x00000284,0x0000029d,0x0000028a, + 0x0000029e,0x0000028d,0x00000277,0x00000290,0x0000029f,0x000002a0,0x00000295,0x00000285, + 0x00000286,0x00000287,0x000002b2,0x000002b3,0x000002b4,0x00000285,0x00000286,0x00000287, + 0x00000278,0x000002a1,0x000002b5,0x000002a3,0x000002b6,0x000002a5,0x00000285,0x00000286, + 0x00000287,0x000002b7,0x000002b8,0x000002b9,0x000002ba,0x000002bb,0x000002bc,0x00000285, + 0x00000286,0x00000287,0x000002a6,0x000002bd,0x000002a2,0x000002be,0x000002a4,0x000002bf, + 0x0004002b,0x00000006,0x000002c1,0x0000000e,0x0004001c,0x000002c2,0x00000039,0x000002c1, + 0x0011002c,0x000002c2,0x000002c3,0x0000026c,0x00000107,0x000000ac,0x000000ac,0x000000ac, + 0x00000270,0x000000a1,0x000000a1,0x000000a1,0x000000bc,0x0000026c,0x000000ac,0x0000026e, + 0x000000d2,0x0011002c,0x000002c2,0x000002c4,0x0000003a,0x000000bc,0x0000003a,0x00000093, + 0x00000093,0x0000003a,0x000000bc,0x0000003a,0x0000003a,0x000000bc,0x0000026c,0x00000270, + 0x000000a1,0x00000093,0x0011002c,0x000002c2,0x000002c5,0x0000003a,0x000000bc,0x00000093, + 0x0000003a,0x00000093,0x0000003a,0x0000003a,0x000000bc,0x0000003a,0x000000bc,0x0000026c, + 0x00000270,0x000000a1,0x00000093,0x0011002c,0x000002c2,0x000002c6,0x0000003a,0x000000bc, + 0x00000093,0x00000093,0x0000003a,0x0000003a,0x0000003a,0x0000003a,0x000000bc,0x000000bc, + 0x0000026c,0x00000270,0x000000a1,0x00000093,0x0004002b,0x00000006,0x000002c7,0x00000040, + 0x0004001c,0x000002c8,0x00000006,0x000002c7,0x0004002b,0x00000006,0x000002c9,0x50505050, + 0x0004002b,0x00000006,0x000002ca,0x40404040,0x0004002b,0x00000006,0x000002cb,0x54545454, + 0x0004002b,0x00000006,0x000002cc,0x54505040,0x0004002b,0x00000006,0x000002cd,0x50404000, + 0x0004002b,0x00000006,0x000002ce,0x55545450,0x0004002b,0x00000006,0x000002cf,0x55545040, + 0x0004002b,0x00000006,0x000002d0,0x54504000,0x0004002b,0x00000006,0x000002d1,0x50400000, + 0x0004002b,0x00000006,0x000002d2,0x55555450,0x0004002b,0x00000006,0x000002d3,0x55544000, + 0x0004002b,0x00000006,0x000002d4,0x54400000,0x0004002b,0x00000006,0x000002d5,0x55555440, + 0x0004002b,0x00000006,0x000002d6,0x55550000,0x0004002b,0x00000006,0x000002d7,0x55555500, + 0x0004002b,0x00000006,0x000002d8,0x55000000,0x0004002b,0x00000006,0x000002d9,0x55150100, + 0x0004002b,0x00000006,0x000002da,0x00004054,0x0004002b,0x00000006,0x000002db,0x15010000, + 0x0004002b,0x00000006,0x000002dc,0x00405054,0x0004002b,0x00000006,0x000002dd,0x00004050, + 0x0004002b,0x00000006,0x000002de,0x15050100,0x0004002b,0x00000006,0x000002df,0x05010000, + 0x0004002b,0x00000006,0x000002e0,0x40505054,0x0004002b,0x00000006,0x000002e1,0x00404050, + 0x0004002b,0x00000006,0x000002e2,0x05010100,0x0004002b,0x00000006,0x000002e3,0x14141414, + 0x0004002b,0x00000006,0x000002e4,0x05141450,0x0004002b,0x00000006,0x000002e5,0x01155440, + 0x0004002b,0x00000006,0x000002e6,0x00555500,0x0004002b,0x00000006,0x000002e7,0x15014054, + 0x0004002b,0x00000006,0x000002e8,0x05414150,0x0004002b,0x00000006,0x000002e9,0x44444444, + 0x0004002b,0x00000006,0x000002ea,0x55005500,0x0004002b,0x00000006,0x000002eb,0x11441144, + 0x0004002b,0x00000006,0x000002ec,0x05055050,0x0004002b,0x00000006,0x000002ed,0x05500550, + 0x0004002b,0x00000006,0x000002ee,0x11114444,0x0004002b,0x00000006,0x000002ef,0x41144114, + 0x0004002b,0x00000006,0x000002f0,0x44111144,0x0004002b,0x00000006,0x000002f1,0x15055054, + 0x0004002b,0x00000006,0x000002f2,0x01055040,0x0004002b,0x00000006,0x000002f3,0x05041050, + 0x0004002b,0x00000006,0x000002f4,0x05455150,0x0004002b,0x00000006,0x000002f5,0x14414114, + 0x0004002b,0x00000006,0x000002f6,0x50050550,0x0004002b,0x00000006,0x000002f7,0x41411414, + 0x0004002b,0x00000006,0x000002f8,0x00141400,0x0004002b,0x00000006,0x000002f9,0x00041504, + 0x0004002b,0x00000006,0x000002fa,0x00105410,0x0004002b,0x00000006,0x000002fb,0x10541000, + 0x0004002b,0x00000006,0x000002fc,0x04150400,0x0004002b,0x00000006,0x000002fd,0x50410514, + 0x0004002b,0x00000006,0x000002fe,0x41051450,0x0004002b,0x00000006,0x000002ff,0x05415014, + 0x0004002b,0x00000006,0x00000300,0x14054150,0x0004002b,0x00000006,0x00000301,0x41050514, + 0x0004002b,0x00000006,0x00000302,0x41505014,0x0004002b,0x00000006,0x00000303,0x40011554, + 0x0004002b,0x00000006,0x00000304,0x54150140,0x0004002b,0x00000006,0x00000305,0x50505500, + 0x0004002b,0x00000006,0x00000306,0x00555050,0x0004002b,0x00000006,0x00000307,0x15151010, + 0x0004002b,0x00000006,0x00000308,0x54540404,0x0043002c,0x000002c8,0x00000309,0x000002c9, + 0x000002ca,0x000002cb,0x000002cc,0x000002cd,0x000002ce,0x000002cf,0x000002d0,0x000002d1, + 0x000002d2,0x000002d3,0x000002d4,0x000002d5,0x000002d6,0x000002d7,0x000002d8,0x000002d9, + 0x000002da,0x000002db,0x000002dc,0x000002dd,0x000002de,0x000002df,0x000002e0,0x000002e1, + 0x000002e2,0x000002e3,0x000002e4,0x000002e5,0x000002e6,0x000002e7,0x000002e8,0x000002e9, + 0x000002ea,0x000002eb,0x000002ec,0x000002ed,0x000002ee,0x000002ef,0x000002f0,0x000002f1, + 0x000002f2,0x000002f3,0x000002f4,0x000002f5,0x000002f6,0x000002f7,0x000002f8,0x000002f9, + 0x000002fa,0x000002fb,0x000002fc,0x000002fd,0x000002fe,0x000002ff,0x00000300,0x00000301, + 0x00000302,0x00000303,0x00000304,0x00000305,0x00000306,0x00000307,0x00000308,0x0043002c, + 0x000002c8,0x0000030a,0x00000272,0x00000272,0x00000272,0x00000272,0x00000272,0x00000272, + 0x00000272,0x00000272,0x00000272,0x00000272,0x00000272,0x00000272,0x00000272,0x00000272, + 0x00000272,0x00000272,0x00000272,0x0000009a,0x00000167,0x0000009a,0x0000009a,0x00000167, + 0x00000167,0x00000272,0x0000009a,0x00000167,0x0000009a,0x0000009a,0x00000167,0x00000167, + 0x0000009a,0x0000009a,0x00000272,0x00000272,0x00000174,0x00000167,0x0000009a,0x00000167, + 0x00000272,0x00000272,0x0000009a,0x00000167,0x0000009a,0x0000009a,0x0000009a,0x00000272, + 0x00000272,0x00000174,0x00000174,0x0000009a,0x00000174,0x00000167,0x00000272,0x00000272, + 0x0000009a,0x0000009a,0x00000272,0x00000272,0x00000272,0x00000272,0x00000272,0x0000009a, + 0x0000009a,0x00000272,0x0004002b,0x00000006,0x0000030b,0xaa685050,0x0004002b,0x00000006, + 0x0000030c,0x6a5a5040,0x0004002b,0x00000006,0x0000030d,0x5a5a4200,0x0004002b,0x00000006, + 0x0000030e,0x5450a0a8,0x0004002b,0x00000006,0x0000030f,0xa5a50000,0x0004002b,0x00000006, + 0x00000310,0xa0a05050,0x0004002b,0x00000006,0x00000311,0x5555a0a0,0x0004002b,0x00000006, + 0x00000312,0x5a5a5050,0x0004002b,0x00000006,0x00000313,0xaa550000,0x0004002b,0x00000006, + 0x00000314,0xaa555500,0x0004002b,0x00000006,0x00000315,0xaaaa5500,0x0004002b,0x00000006, + 0x00000316,0x90909090,0x0004002b,0x00000006,0x00000317,0x94949494,0x0004002b,0x00000006, + 0x00000318,0xa4a4a4a4,0x0004002b,0x00000006,0x00000319,0xa9a59450,0x0004002b,0x00000006, + 0x0000031a,0x2a0a4250,0x0004002b,0x00000006,0x0000031b,0xa5945040,0x0004002b,0x00000006, + 0x0000031c,0x0a425054,0x0004002b,0x00000006,0x0000031d,0xa5a5a500,0x0004002b,0x00000006, + 0x0000031e,0x55a0a0a0,0x0004002b,0x00000006,0x0000031f,0xa8a85454,0x0004002b,0x00000006, + 0x00000320,0x6a6a4040,0x0004002b,0x00000006,0x00000321,0xa4a45000,0x0004002b,0x00000006, + 0x00000322,0x1a1a0500,0x0004002b,0x00000006,0x00000323,0x0050a4a4,0x0004002b,0x00000006, + 0x00000324,0xaaa59090,0x0004002b,0x00000006,0x00000325,0x14696914,0x0004002b,0x00000006, + 0x00000326,0x69691400,0x0004002b,0x00000006,0x00000327,0xa08585a0,0x0004002b,0x00000006, + 0x00000328,0xaa821414,0x0004002b,0x00000006,0x00000329,0x50a4a450,0x0004002b,0x00000006, + 0x0000032a,0x6a5a0200,0x0004002b,0x00000006,0x0000032b,0xa9a58000,0x0004002b,0x00000006, + 0x0000032c,0x5090a0a8,0x0004002b,0x00000006,0x0000032d,0xa8a09050,0x0004002b,0x00000006, + 0x0000032e,0x24242424,0x0004002b,0x00000006,0x0000032f,0x00aa5500,0x0004002b,0x00000006, + 0x00000330,0x24924924,0x0004002b,0x00000006,0x00000331,0x24499224,0x0004002b,0x00000006, + 0x00000332,0x50a50a50,0x0004002b,0x00000006,0x00000333,0x500aa550,0x0004002b,0x00000006, + 0x00000334,0xaaaa4444,0x0004002b,0x00000006,0x00000335,0x66660000,0x0004002b,0x00000006, + 0x00000336,0xa5a0a5a0,0x0004002b,0x00000006,0x00000337,0x50a050a0,0x0004002b,0x00000006, + 0x00000338,0x69286928,0x0004002b,0x00000006,0x00000339,0x44aaaa44,0x0004002b,0x00000006, + 0x0000033a,0x66666600,0x0004002b,0x00000006,0x0000033b,0xaa444444,0x0004002b,0x00000006, + 0x0000033c,0x54a854a8,0x0004002b,0x00000006,0x0000033d,0x95809580,0x0004002b,0x00000006, + 0x0000033e,0x96969600,0x0004002b,0x00000006,0x0000033f,0xa85454a8,0x0004002b,0x00000006, + 0x00000340,0x80959580,0x0004002b,0x00000006,0x00000341,0xaa141414,0x0004002b,0x00000006, + 0x00000342,0x96960000,0x0004002b,0x00000006,0x00000343,0xaaaa1414,0x0004002b,0x00000006, + 0x00000344,0xa05050a0,0x0004002b,0x00000006,0x00000345,0xa0a5a5a0,0x0004002b,0x00000006, + 0x00000346,0x96000000,0x0004002b,0x00000006,0x00000347,0x40804080,0x0004002b,0x00000006, + 0x00000348,0xa9a8a9a8,0x0004002b,0x00000006,0x00000349,0xaaaaaa44,0x0004002b,0x00000006, + 0x0000034a,0x2a4a5254,0x0043002c,0x000002c8,0x0000034b,0x0000030b,0x0000030c,0x0000030d, + 0x0000030e,0x0000030f,0x00000310,0x00000311,0x00000312,0x00000313,0x00000314,0x00000315, + 0x00000316,0x00000317,0x00000318,0x00000319,0x0000031a,0x0000031b,0x0000031c,0x0000031d, + 0x0000031e,0x0000031f,0x00000320,0x00000321,0x00000322,0x00000323,0x00000324,0x00000325, + 0x00000326,0x00000327,0x00000328,0x00000329,0x0000032a,0x0000032b,0x0000032c,0x0000032d, + 0x0000032e,0x0000032f,0x00000330,0x00000331,0x00000332,0x00000333,0x00000334,0x00000335, + 0x00000336,0x00000337,0x00000338,0x00000339,0x0000033a,0x0000033b,0x0000033c,0x0000033d, + 0x0000033e,0x0000033f,0x00000340,0x00000341,0x00000342,0x00000343,0x00000344,0x00000345, + 0x00000346,0x00000347,0x00000348,0x00000349,0x0000034a,0x0004002b,0x00000006,0x0000034c, + 0x000000f3,0x0004002b,0x00000006,0x0000034d,0x00000083,0x0004002b,0x00000006,0x0000034e, + 0x0000008f,0x0004002b,0x00000006,0x0000034f,0x000000f8,0x0004002b,0x00000006,0x00000350, + 0x000000f5,0x0004002b,0x00000006,0x00000351,0x0000008a,0x0004002b,0x00000006,0x00000352, + 0x00000035,0x0004002b,0x00000006,0x00000353,0x000000a6,0x0004002b,0x00000006,0x00000354, + 0x000000af,0x0004002b,0x00000006,0x00000355,0x0000006f,0x0004002b,0x00000006,0x00000356, + 0x000000fa,0x0004002b,0x00000006,0x00000357,0x000000fd,0x0004002b,0x00000006,0x00000358, + 0x000000fc,0x0043002c,0x000002c8,0x00000359,0x0000034c,0x0000034d,0x0000034e,0x000000b2, + 0x0000034f,0x0000034c,0x000000b2,0x0000034e,0x0000034f,0x0000034f,0x0000027f,0x0000027f, + 0x0000027f,0x00000350,0x0000034c,0x0000034d,0x0000034c,0x0000034d,0x0000034f,0x000000b2, + 0x0000034c,0x0000034d,0x0000027f,0x00000351,0x00000352,0x0000034f,0x000002b1,0x00000353, + 0x0000034f,0x00000350,0x00000354,0x0000034e,0x0000034f,0x000000b2,0x0000034c,0x000002b3, + 0x00000353,0x00000351,0x000002ab,0x00000354,0x00000355,0x0000034c,0x0000034e,0x00000350, + 0x000000b2,0x00000355,0x00000355,0x0000034e,0x0000034c,0x000000b2,0x00000350,0x00000350, + 0x00000350,0x0000034f,0x00000350,0x00000356,0x00000350,0x00000356,0x0000034f,0x00000357, + 0x000000b2,0x00000358,0x0000034c,0x0000034d,0x0004001c,0x0000035a,0x00000039,0x00000167, + 0x000b002c,0x0000035a,0x0000035b,0x00000093,0x000000bc,0x0000003a,0x00000107,0x0000003a, + 0x00000107,0x00000107,0x0000003a,0x000b002c,0x0000035a,0x0000035c,0x000000ed,0x000000ed, + 0x000000ed,0x000000ed,0x000000bc,0x000000a1,0x00000107,0x0000003a,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000006b,0x000001d6, + 0x00000007,0x0004003b,0x0000006b,0x000001d9,0x00000007,0x0004003b,0x00000009,0x000001f2, + 0x00000007,0x0004003b,0x00000009,0x000001f3,0x00000007,0x0004003b,0x00000008,0x00000207, + 0x00000007,0x0004003b,0x00000009,0x00000216,0x00000007,0x0004003b,0x00000009,0x00000221, + 0x00000007,0x0004003b,0x0000001e,0x0000022b,0x00000007,0x0004003b,0x00000021,0x00000231, + 0x00000007,0x0004003b,0x00000009,0x00000232,0x00000007,0x0004003b,0x00000009,0x00000235, + 0x00000007,0x0004003b,0x0000001e,0x00000238,0x00000007,0x0004003b,0x00000021,0x00000239, + 0x00000007,0x0004003b,0x0000002a,0x0000023d,0x00000007,0x0004003b,0x00000009,0x0000023e, + 0x00000007,0x0004003b,0x00000009,0x00000241,0x00000007,0x0004003b,0x0000002a,0x00000244, + 0x00000007,0x0004003b,0x00000009,0x00000247,0x00000007,0x0004003b,0x00000009,0x00000264, + 0x00000007,0x0004003b,0x00000009,0x00000265,0x00000007,0x0004003b,0x00000012,0x00000266, + 0x00000007,0x0004003d,0x0000006d,0x000001d7,0x0000006f,0x0007004f,0x0000006a,0x000001d8, + 0x000001d7,0x000001d7,0x00000000,0x00000001,0x0003003e,0x000001d6,0x000001d8,0x00050041, + 0x000001da,0x000001db,0x00000080,0x0000003a,0x0004003d,0x0000006a,0x000001dc,0x000001db, + 0x00050050,0x0000006a,0x000001dd,0x0000004c,0x0000004c,0x00050080,0x0000006a,0x000001de, + 0x000001dc,0x000001dd,0x00050050,0x0000006a,0x000001df,0x00000074,0x00000074,0x00050086, + 0x0000006a,0x000001e0,0x000001de,0x000001df,0x0003003e,0x000001d9,0x000001e0,0x00050041, + 0x00000009,0x000001e1,0x000001d6,0x00000032,0x0004003d,0x00000006,0x000001e2,0x000001e1, + 0x00050041,0x00000009,0x000001e3,0x000001d9,0x00000032,0x0004003d,0x00000006,0x000001e4, + 0x000001e3,0x000500ae,0x0000001d,0x000001e5,0x000001e2,0x000001e4,0x000400a8,0x0000001d, + 0x000001e6,0x000001e5,0x000300f7,0x000001e8,0x00000000,0x000400fa,0x000001e6,0x000001e7, + 0x000001e8,0x000200f8,0x000001e7,0x00050041,0x00000009,0x000001e9,0x000001d6,0x00000052, + 0x0004003d,0x00000006,0x000001ea,0x000001e9,0x00050041,0x00000009,0x000001eb,0x000001d9, + 0x00000052,0x0004003d,0x00000006,0x000001ec,0x000001eb,0x000500ae,0x0000001d,0x000001ed, + 0x000001ea,0x000001ec,0x000200f9,0x000001e8,0x000200f8,0x000001e8,0x000700f5,0x0000001d, + 0x000001ee,0x000001e5,0x00000005,0x000001ed,0x000001e7,0x000300f7,0x000001f0,0x00000000, + 0x000400fa,0x000001ee,0x000001ef,0x000001f0,0x000200f8,0x000001ef,0x000100fd,0x000200f8, + 0x000001f0,0x0003003e,0x000001f2,0x00000074,0x00050041,0x00000081,0x000001f4,0x00000080, + 0x000000ed,0x0004003d,0x00000006,0x000001f5,0x000001f4,0x00050041,0x0000009b,0x000001f6, + 0x0000006f,0x0000009a,0x0004003d,0x00000006,0x000001f7,0x000001f6,0x00050041,0x00000081, + 0x000001f8,0x00000080,0x000000fe,0x0004003d,0x00000006,0x000001f9,0x000001f8,0x00050084, + 0x00000006,0x000001fa,0x000001f7,0x000001f9,0x00050041,0x00000009,0x000001fb,0x000001d6, + 0x00000052,0x0004003d,0x00000006,0x000001fc,0x000001fb,0x00050041,0x00000081,0x000001fd, + 0x00000080,0x000000f2,0x0004003d,0x00000006,0x000001fe,0x000001fd,0x00050084,0x00000006, + 0x000001ff,0x000001fc,0x000001fe,0x00050080,0x00000006,0x00000200,0x000001fa,0x000001ff, + 0x00050041,0x00000009,0x00000201,0x000001d6,0x00000032,0x0004003d,0x00000006,0x00000202, + 0x00000201,0x00050080,0x00000006,0x00000203,0x00000200,0x00000202,0x0004003d,0x00000006, + 0x00000204,0x000001f2,0x00050084,0x00000006,0x00000205,0x00000203,0x00000204,0x00050080, + 0x00000006,0x00000206,0x000001f5,0x00000205,0x0003003e,0x000001f3,0x00000206,0x0004003d, + 0x00000006,0x0000020c,0x000001f3,0x00060041,0x0000020d,0x0000020e,0x0000020b,0x000000ed, + 0x0000020c,0x0004003d,0x00000006,0x0000020f,0x0000020e,0x0004003d,0x00000006,0x00000210, + 0x000001f3,0x00050080,0x00000006,0x00000211,0x00000210,0x00000052,0x00060041,0x0000020d, + 0x00000212,0x0000020b,0x000000ed,0x00000211,0x0004003d,0x00000006,0x00000213,0x00000212, + 0x0004003d,0x00000006,0x00000214,0x000001f2,0x000500ac,0x0000001d,0x00000215,0x00000214, + 0x0000009a,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000215,0x00000217,0x0000021d, + 0x000200f8,0x00000217,0x0004003d,0x00000006,0x00000219,0x000001f3,0x00050080,0x00000006, + 0x0000021a,0x00000219,0x0000009a,0x00060041,0x0000020d,0x0000021b,0x0000020b,0x000000ed, + 0x0000021a,0x0004003d,0x00000006,0x0000021c,0x0000021b,0x0003003e,0x00000216,0x0000021c, + 0x000200f9,0x00000218,0x000200f8,0x0000021d,0x0003003e,0x00000216,0x00000032,0x000200f9, + 0x00000218,0x000200f8,0x00000218,0x0004003d,0x00000006,0x0000021e,0x00000216,0x0004003d, + 0x00000006,0x0000021f,0x000001f2,0x000500ac,0x0000001d,0x00000220,0x0000021f,0x0000009a, + 0x000300f7,0x00000223,0x00000000,0x000400fa,0x00000220,0x00000222,0x00000228,0x000200f8, + 0x00000222,0x0004003d,0x00000006,0x00000224,0x000001f3,0x00050080,0x00000006,0x00000225, + 0x00000224,0x0000004c,0x00060041,0x0000020d,0x00000226,0x0000020b,0x000000ed,0x00000225, + 0x0004003d,0x00000006,0x00000227,0x00000226,0x0003003e,0x00000221,0x00000227,0x000200f9, + 0x00000223,0x000200f8,0x00000228,0x0003003e,0x00000221,0x00000032,0x000200f9,0x00000223, + 0x000200f8,0x00000223,0x0004003d,0x00000006,0x00000229,0x00000221,0x00070050,0x00000007, + 0x0000022a,0x0000020f,0x00000213,0x0000021e,0x00000229,0x0003003e,0x00000207,0x0000022a, + 0x00050041,0x00000081,0x0000022c,0x00000080,0x0000009e,0x0004003d,0x00000006,0x0000022d, + 0x0000022c,0x000500c7,0x00000006,0x0000022e,0x0000022d,0x0000009a,0x000500ab,0x0000001d, + 0x0000022f,0x0000022e,0x00000032,0x0003003e,0x0000022b,0x0000022f,0x00050041,0x00000009, + 0x00000233,0x00000207,0x0000009a,0x0004003d,0x00000006,0x00000234,0x00000233,0x0003003e, + 0x00000232,0x00000234,0x00050041,0x00000009,0x00000236,0x00000207,0x0000004c,0x0004003d, + 0x00000006,0x00000237,0x00000236,0x0003003e,0x00000235,0x00000237,0x0003003e,0x00000238, + 0x00000230,0x0004003d,0x00000020,0x0000023a,0x00000231,0x0003003e,0x00000239,0x0000023a, + 0x00080039,0x00000002,0x0000023b,0x00000027,0x00000232,0x00000235,0x00000238,0x00000239, + 0x0004003d,0x00000020,0x0000023c,0x00000239,0x0003003e,0x00000231,0x0000023c,0x00050041, + 0x00000009,0x0000023f,0x00000207,0x00000032,0x0004003d,0x00000006,0x00000240,0x0000023f, + 0x0003003e,0x0000023e,0x00000240,0x00050041,0x00000009,0x00000242,0x00000207,0x00000052, + 0x0004003d,0x00000006,0x00000243,0x00000242,0x0003003e,0x00000241,0x00000243,0x00070039, + 0x00000002,0x00000245,0x0000002f,0x0000023e,0x00000241,0x00000244,0x0004003d,0x00000029, + 0x00000246,0x00000244,0x0003003e,0x0000023d,0x00000246,0x0003003e,0x00000247,0x00000032, + 0x000200f9,0x00000248,0x000200f8,0x00000248,0x000400f6,0x0000024a,0x0000024b,0x00000000, + 0x000200f9,0x0000024c,0x000200f8,0x0000024c,0x0004003d,0x00000006,0x0000024d,0x00000247, + 0x000500b0,0x0000001d,0x0000024e,0x0000024d,0x0000001f,0x000400fa,0x0000024e,0x00000249, + 0x0000024a,0x000200f8,0x00000249,0x0004003d,0x00000006,0x0000024f,0x00000247,0x000500c7, + 0x00000006,0x00000250,0x0000024f,0x0000004c,0x0004003d,0x00000006,0x00000251,0x00000247, + 0x000500c2,0x00000006,0x00000252,0x00000251,0x000000fe,0x0004003d,0x00000006,0x00000253, + 0x00000247,0x00050041,0x00000008,0x00000254,0x00000231,0x00000253,0x0004003d,0x00000007, + 0x00000255,0x00000254,0x0008004f,0x0000006d,0x00000256,0x00000255,0x00000255,0x00000000, + 0x00000001,0x00000002,0x00040070,0x00000257,0x00000258,0x00000256,0x0004003d,0x00000006, + 0x00000259,0x00000247,0x00050041,0x00000009,0x0000025a,0x0000023d,0x00000259,0x0004003d, + 0x00000006,0x0000025b,0x0000025a,0x00040070,0x00000010,0x0000025c,0x0000025b,0x00050051, + 0x00000010,0x0000025d,0x00000258,0x00000000,0x00050051,0x00000010,0x0000025e,0x00000258, + 0x00000001,0x00050051,0x00000010,0x0000025f,0x00000258,0x00000002,0x00070050,0x00000011, + 0x00000260,0x0000025d,0x0000025e,0x0000025f,0x0000025c,0x00070050,0x00000011,0x00000262, + 0x00000261,0x00000261,0x00000261,0x00000261,0x00050088,0x00000011,0x00000263,0x00000260, + 0x00000262,0x0003003e,0x00000264,0x00000250,0x0003003e,0x00000265,0x00000252,0x0003003e, + 0x00000266,0x00000263,0x00070039,0x00000002,0x00000267,0x00000017,0x00000264,0x00000265, + 0x00000266,0x000200f9,0x0000024b,0x000200f8,0x0000024b,0x0004003d,0x00000006,0x00000268, + 0x00000247,0x00050080,0x00000006,0x00000269,0x00000268,0x000000f2,0x0003003e,0x00000247, + 0x00000269,0x000200f9,0x00000248,0x000200f8,0x0000024a,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x0000000e,0x00000000,0x0000000a,0x00030037,0x00000008,0x0000000b,0x00030037, + 0x00000009,0x0000000c,0x00030037,0x00000009,0x0000000d,0x000200f8,0x0000000f,0x0004003b, + 0x00000009,0x00000037,0x00000007,0x0004003b,0x00000009,0x0000003c,0x00000007,0x0004003b, + 0x00000009,0x00000040,0x00000007,0x0004003b,0x00000009,0x0000005d,0x00000007,0x0004003d, + 0x00000006,0x00000031,0x0000000d,0x000500aa,0x0000001d,0x00000033,0x00000031,0x00000032, + 0x000300f7,0x00000035,0x00000000,0x000400fa,0x00000033,0x00000034,0x00000035,0x000200f8, + 0x00000034,0x000200fe,0x00000032,0x000200f8,0x00000035,0x0004003d,0x00000006,0x00000038, + 0x0000000c,0x000500c2,0x00000006,0x0000003b,0x00000038,0x0000003a,0x0003003e,0x00000037, + 0x0000003b,0x0004003d,0x00000006,0x0000003d,0x0000000c,0x000500c7,0x00000006,0x0000003f, + 0x0000003d,0x0000003e,0x0003003e,0x0000003c,0x0000003f,0x0004003d,0x00000006,0x00000041, + 0x00000037,0x00050041,0x00000009,0x00000042,0x0000000b,0x00000041,0x0004003d,0x00000006, + 0x00000043,0x00000042,0x0004003d,0x00000006,0x00000044,0x0000003c,0x000500c2,0x00000006, + 0x00000045,0x00000043,0x00000044,0x0003003e,0x00000040,0x00000045,0x0004003d,0x00000006, + 0x00000046,0x0000003c,0x0004003d,0x00000006,0x00000047,0x0000000d,0x00050080,0x00000006, + 0x00000048,0x00000046,0x00000047,0x000500ac,0x0000001d,0x0000004a,0x00000048,0x00000049, + 0x0004003d,0x00000006,0x0000004b,0x00000037,0x000500b0,0x0000001d,0x0000004d,0x0000004b, + 0x0000004c,0x000500a7,0x0000001d,0x0000004e,0x0000004a,0x0000004d,0x000300f7,0x00000050, + 0x00000000,0x000400fa,0x0000004e,0x0000004f,0x00000050,0x000200f8,0x0000004f,0x0004003d, + 0x00000006,0x00000051,0x00000037,0x00050080,0x00000006,0x00000053,0x00000051,0x00000052, + 0x00050041,0x00000009,0x00000054,0x0000000b,0x00000053,0x0004003d,0x00000006,0x00000055, + 0x00000054,0x0004003d,0x00000006,0x00000056,0x0000003c,0x00050082,0x00000006,0x00000057, + 0x00000049,0x00000056,0x000500c4,0x00000006,0x00000058,0x00000055,0x00000057,0x0004003d, + 0x00000006,0x00000059,0x00000040,0x000500c5,0x00000006,0x0000005a,0x00000059,0x00000058, + 0x0003003e,0x00000040,0x0000005a,0x000200f9,0x00000050,0x000200f8,0x00000050,0x0004003d, + 0x00000006,0x0000005b,0x0000000d,0x000500aa,0x0000001d,0x0000005c,0x0000005b,0x00000049, + 0x000300f7,0x0000005f,0x00000000,0x000400fa,0x0000005c,0x0000005e,0x00000061,0x000200f8, + 0x0000005e,0x0004003d,0x00000006,0x00000060,0x00000040,0x0003003e,0x0000005d,0x00000060, + 0x000200f9,0x0000005f,0x000200f8,0x00000061,0x0004003d,0x00000006,0x00000062,0x00000040, + 0x0004003d,0x00000006,0x00000063,0x0000000d,0x000500c4,0x00000006,0x00000064,0x00000052, + 0x00000063,0x00050082,0x00000006,0x00000065,0x00000064,0x00000052,0x000500c7,0x00000006, + 0x00000066,0x00000062,0x00000065,0x0003003e,0x0000005d,0x00000066,0x000200f9,0x0000005f, + 0x000200f8,0x0000005f,0x0004003d,0x00000006,0x00000067,0x0000005d,0x000200fe,0x00000067, + 0x00010038,0x00050036,0x00000002,0x00000017,0x00000000,0x00000013,0x00030037,0x00000009, + 0x00000014,0x00030037,0x00000009,0x00000015,0x00030037,0x00000012,0x00000016,0x000200f8, + 0x00000018,0x0004003b,0x0000006b,0x0000006c,0x00000007,0x0004003b,0x0000006b,0x00000072, + 0x00000007,0x0004003d,0x0000006d,0x00000070,0x0000006f,0x0007004f,0x0000006a,0x00000071, + 0x00000070,0x00000070,0x00000000,0x00000001,0x0003003e,0x0000006c,0x00000071,0x0004003d, + 0x0000006a,0x00000073,0x0000006c,0x00050050,0x0000006a,0x00000075,0x00000074,0x00000074, + 0x00050084,0x0000006a,0x00000076,0x00000073,0x00000075,0x0004003d,0x00000006,0x00000077, + 0x00000014,0x0004003d,0x00000006,0x00000078,0x00000015,0x00050050,0x0000006a,0x00000079, + 0x00000077,0x00000078,0x00050080,0x0000006a,0x0000007a,0x00000076,0x00000079,0x0003003e, + 0x00000072,0x0000007a,0x00050041,0x00000009,0x0000007b,0x00000072,0x00000032,0x0004003d, + 0x00000006,0x0000007c,0x0000007b,0x00060041,0x00000081,0x00000082,0x00000080,0x0000003a, + 0x00000032,0x0004003d,0x00000006,0x00000083,0x00000082,0x000500b0,0x0000001d,0x00000084, + 0x0000007c,0x00000083,0x000300f7,0x00000086,0x00000000,0x000400fa,0x00000084,0x00000085, + 0x00000086,0x000200f8,0x00000085,0x00050041,0x00000009,0x00000087,0x00000072,0x00000052, + 0x0004003d,0x00000006,0x00000088,0x00000087,0x00060041,0x00000081,0x00000089,0x00000080, + 0x0000003a,0x00000052,0x0004003d,0x00000006,0x0000008a,0x00000089,0x000500b0,0x0000001d, + 0x0000008b,0x00000088,0x0000008a,0x000200f9,0x00000086,0x000200f8,0x00000086,0x000700f5, + 0x0000001d,0x0000008c,0x00000084,0x00000018,0x0000008b,0x00000085,0x000300f7,0x0000008e, + 0x00000000,0x000400fa,0x0000008c,0x0000008d,0x0000008e,0x000200f8,0x0000008d,0x0004003d, + 0x0000008f,0x00000092,0x00000091,0x00050041,0x00000094,0x00000095,0x00000080,0x00000093, + 0x0004003d,0x0000007d,0x00000096,0x00000095,0x0004003d,0x0000006a,0x00000097,0x00000072, + 0x0004007c,0x0000007d,0x00000098,0x00000097,0x00050080,0x0000007d,0x00000099,0x00000096, + 0x00000098,0x00050041,0x0000009b,0x0000009c,0x0000006f,0x0000009a,0x0004003d,0x00000006, + 0x0000009d,0x0000009c,0x00050041,0x00000081,0x0000009f,0x00000080,0x0000009e,0x0004003d, + 0x00000006,0x000000a0,0x0000009f,0x000500c2,0x00000006,0x000000a2,0x000000a0,0x000000a1, + 0x00050080,0x00000006,0x000000a3,0x0000009d,0x000000a2,0x0004007c,0x00000039,0x000000a4, + 0x000000a3,0x00050051,0x00000039,0x000000a6,0x00000099,0x00000000,0x00050051,0x00000039, + 0x000000a7,0x00000099,0x00000001,0x00060050,0x000000a5,0x000000a8,0x000000a6,0x000000a7, + 0x000000a4,0x0004003d,0x00000011,0x000000a9,0x00000016,0x00040063,0x00000092,0x000000a8, + 0x000000a9,0x000200f9,0x0000008e,0x000200f8,0x0000008e,0x000100fd,0x00010038,0x00050036, + 0x00000007,0x0000001b,0x00000000,0x00000019,0x00030037,0x00000009,0x0000001a,0x000200f8, + 0x0000001c,0x0004003b,0x00000009,0x000000aa,0x00000007,0x0004003b,0x00000009,0x000000af, + 0x00000007,0x0004003b,0x00000009,0x000000b4,0x00000007,0x0004003d,0x00000006,0x000000ab, + 0x0000001a,0x000500c2,0x00000006,0x000000ad,0x000000ab,0x000000ac,0x000500c7,0x00000006, + 0x000000ae,0x000000ad,0x0000003e,0x0003003e,0x000000aa,0x000000ae,0x0004003d,0x00000006, + 0x000000b0,0x0000001a,0x000500c2,0x00000006,0x000000b1,0x000000b0,0x0000003a,0x000500c7, + 0x00000006,0x000000b3,0x000000b1,0x000000b2,0x0003003e,0x000000af,0x000000b3,0x0004003d, + 0x00000006,0x000000b5,0x0000001a,0x000500c7,0x00000006,0x000000b6,0x000000b5,0x0000003e, + 0x0003003e,0x000000b4,0x000000b6,0x0004003d,0x00000006,0x000000b7,0x000000aa,0x00050084, + 0x00000006,0x000000b9,0x000000b7,0x000000b8,0x00050080,0x00000006,0x000000bb,0x000000b9, + 0x000000ba,0x000500c2,0x00000006,0x000000bd,0x000000bb,0x000000bc,0x0004003d,0x00000006, + 0x000000be,0x000000af,0x00050084,0x00000006,0x000000c0,0x000000be,0x000000bf,0x00050080, + 0x00000006,0x000000c2,0x000000c0,0x000000c1,0x000500c2,0x00000006,0x000000c3,0x000000c2, + 0x000000bc,0x0004003d,0x00000006,0x000000c4,0x000000b4,0x00050084,0x00000006,0x000000c5, + 0x000000c4,0x000000b8,0x00050080,0x00000006,0x000000c6,0x000000c5,0x000000ba,0x000500c2, + 0x00000006,0x000000c7,0x000000c6,0x000000bc,0x00070050,0x00000007,0x000000c9,0x000000bd, + 0x000000c3,0x000000c7,0x000000c8,0x000200fe,0x000000c9,0x00010038,0x00050036,0x00000002, + 0x00000027,0x00000000,0x00000022,0x00030037,0x00000009,0x00000023,0x00030037,0x00000009, + 0x00000024,0x00030037,0x0000001e,0x00000025,0x00030037,0x00000021,0x00000026,0x000200f8, + 0x00000028,0x0004003b,0x00000009,0x000000cc,0x00000007,0x0004003b,0x00000009,0x000000d0, + 0x00000007,0x0004003b,0x00000009,0x000000d4,0x00000007,0x0004003b,0x00000009,0x000000d8, + 0x00000007,0x0004003b,0x00000009,0x000000dc,0x00000007,0x0004003b,0x00000009,0x000000df, + 0x00000007,0x0004003b,0x00000009,0x000000e3,0x00000007,0x0004003b,0x00000009,0x000000e7, + 0x00000007,0x0004003b,0x000000eb,0x000000ec,0x00000007,0x0004003b,0x00000009,0x000000ee, + 0x00000007,0x0004003b,0x00000009,0x000000f3,0x00000007,0x0004003b,0x00000009,0x0000014d, + 0x00000007,0x0004003d,0x00000006,0x000000cd,0x00000023,0x000500c7,0x00000006,0x000000cf, + 0x000000cd,0x000000ce,0x0003003e,0x000000cc,0x000000cf,0x0004003d,0x00000006,0x000000d1, + 0x00000023,0x000500c2,0x00000006,0x000000d3,0x000000d1,0x000000d2,0x0003003e,0x000000d0, + 0x000000d3,0x0004003d,0x00000006,0x000000d5,0x000000cc,0x000500c2,0x00000006,0x000000d6, + 0x000000d5,0x000000ac,0x000500c7,0x00000006,0x000000d7,0x000000d6,0x0000003e,0x0003003e, + 0x000000d4,0x000000d7,0x0004003d,0x00000006,0x000000d9,0x000000cc,0x000500c2,0x00000006, + 0x000000da,0x000000d9,0x0000003a,0x000500c7,0x00000006,0x000000db,0x000000da,0x000000b2, + 0x0003003e,0x000000d8,0x000000db,0x0004003d,0x00000006,0x000000dd,0x000000cc,0x000500c7, + 0x00000006,0x000000de,0x000000dd,0x0000003e,0x0003003e,0x000000dc,0x000000de,0x0004003d, + 0x00000006,0x000000e0,0x000000d0,0x000500c2,0x00000006,0x000000e1,0x000000e0,0x000000ac, + 0x000500c7,0x00000006,0x000000e2,0x000000e1,0x0000003e,0x0003003e,0x000000df,0x000000e2, + 0x0004003d,0x00000006,0x000000e4,0x000000d0,0x000500c2,0x00000006,0x000000e5,0x000000e4, + 0x0000003a,0x000500c7,0x00000006,0x000000e6,0x000000e5,0x000000b2,0x0003003e,0x000000e3, + 0x000000e6,0x0004003d,0x00000006,0x000000e8,0x000000d0,0x000500c7,0x00000006,0x000000e9, + 0x000000e8,0x0000003e,0x0003003e,0x000000e7,0x000000e9,0x0004003d,0x00000006,0x000000ef, + 0x000000cc,0x0003003e,0x000000ee,0x000000ef,0x00050039,0x00000007,0x000000f0,0x0000001b, + 0x000000ee,0x00050041,0x00000008,0x000000f1,0x000000ec,0x000000ed,0x0003003e,0x000000f1, + 0x000000f0,0x0004003d,0x00000006,0x000000f4,0x000000d0,0x0003003e,0x000000f3,0x000000f4, + 0x00050039,0x00000007,0x000000f5,0x0000001b,0x000000f3,0x00050041,0x00000008,0x000000f6, + 0x000000ec,0x000000f2,0x0003003e,0x000000f6,0x000000f5,0x0004003d,0x00000006,0x000000f7, + 0x000000cc,0x0004003d,0x00000006,0x000000f8,0x000000d0,0x000500ac,0x0000001d,0x000000f9, + 0x000000f7,0x000000f8,0x0004003d,0x0000001d,0x000000fa,0x00000025,0x000500a6,0x0000001d, + 0x000000fb,0x000000f9,0x000000fa,0x000300f7,0x000000fd,0x00000000,0x000400fa,0x000000fb, + 0x000000fc,0x00000132,0x000200f8,0x000000fc,0x0004003d,0x00000006,0x000000ff,0x000000d4, + 0x00050084,0x00000006,0x00000100,0x0000009a,0x000000ff,0x0004003d,0x00000006,0x00000101, + 0x000000df,0x00050080,0x00000006,0x00000102,0x00000100,0x00000101,0x00050084,0x00000006, + 0x00000104,0x00000102,0x00000103,0x00050080,0x00000006,0x00000106,0x00000104,0x00000105, + 0x000500c2,0x00000006,0x00000108,0x00000106,0x00000107,0x0004003d,0x00000006,0x00000109, + 0x000000d8,0x00050084,0x00000006,0x0000010a,0x0000009a,0x00000109,0x0004003d,0x00000006, + 0x0000010b,0x000000e3,0x00050080,0x00000006,0x0000010c,0x0000010a,0x0000010b,0x00050084, + 0x00000006,0x0000010e,0x0000010c,0x0000010d,0x00050080,0x00000006,0x00000110,0x0000010e, + 0x0000010f,0x000500c2,0x00000006,0x00000111,0x00000110,0x000000ac,0x0004003d,0x00000006, + 0x00000112,0x000000dc,0x00050084,0x00000006,0x00000113,0x0000009a,0x00000112,0x0004003d, + 0x00000006,0x00000114,0x000000e7,0x00050080,0x00000006,0x00000115,0x00000113,0x00000114, + 0x00050084,0x00000006,0x00000116,0x00000115,0x00000103,0x00050080,0x00000006,0x00000117, + 0x00000116,0x00000105,0x000500c2,0x00000006,0x00000118,0x00000117,0x00000107,0x00070050, + 0x00000007,0x00000119,0x00000108,0x00000111,0x00000118,0x000000c8,0x00050041,0x00000008, + 0x0000011a,0x000000ec,0x000000fe,0x0003003e,0x0000011a,0x00000119,0x0004003d,0x00000006, + 0x0000011b,0x000000d4,0x0004003d,0x00000006,0x0000011c,0x000000df,0x00050084,0x00000006, + 0x0000011d,0x0000011c,0x0000009a,0x00050080,0x00000006,0x0000011e,0x0000011b,0x0000011d, + 0x00050084,0x00000006,0x0000011f,0x0000011e,0x00000103,0x00050080,0x00000006,0x00000120, + 0x0000011f,0x00000105,0x000500c2,0x00000006,0x00000121,0x00000120,0x00000107,0x0004003d, + 0x00000006,0x00000122,0x000000d8,0x0004003d,0x00000006,0x00000123,0x000000e3,0x00050084, + 0x00000006,0x00000124,0x00000123,0x0000009a,0x00050080,0x00000006,0x00000125,0x00000122, + 0x00000124,0x00050084,0x00000006,0x00000126,0x00000125,0x0000010d,0x00050080,0x00000006, + 0x00000127,0x00000126,0x0000010f,0x000500c2,0x00000006,0x00000128,0x00000127,0x000000ac, + 0x0004003d,0x00000006,0x00000129,0x000000dc,0x0004003d,0x00000006,0x0000012a,0x000000e7, + 0x00050084,0x00000006,0x0000012b,0x0000012a,0x0000009a,0x00050080,0x00000006,0x0000012c, + 0x00000129,0x0000012b,0x00050084,0x00000006,0x0000012d,0x0000012c,0x00000103,0x00050080, + 0x00000006,0x0000012e,0x0000012d,0x00000105,0x000500c2,0x00000006,0x0000012f,0x0000012e, + 0x00000107,0x00070050,0x00000007,0x00000130,0x00000121,0x00000128,0x0000012f,0x000000c8, + 0x00050041,0x00000008,0x00000131,0x000000ec,0x0000009e,0x0003003e,0x00000131,0x00000130, + 0x000200f9,0x000000fd,0x000200f8,0x00000132,0x0004003d,0x00000006,0x00000133,0x000000d4, + 0x0004003d,0x00000006,0x00000134,0x000000df,0x00050080,0x00000006,0x00000135,0x00000133, + 0x00000134,0x00050084,0x00000006,0x00000137,0x00000135,0x00000136,0x00050080,0x00000006, + 0x00000139,0x00000137,0x00000138,0x000500c2,0x00000006,0x0000013a,0x00000139,0x000000a1, + 0x0004003d,0x00000006,0x0000013b,0x000000d8,0x0004003d,0x00000006,0x0000013c,0x000000e3, + 0x00050080,0x00000006,0x0000013d,0x0000013b,0x0000013c,0x00050084,0x00000006,0x0000013f, + 0x0000013d,0x0000013e,0x00050080,0x00000006,0x00000141,0x0000013f,0x00000140,0x000500c2, + 0x00000006,0x00000142,0x00000141,0x000000ac,0x0004003d,0x00000006,0x00000143,0x000000dc, + 0x0004003d,0x00000006,0x00000144,0x000000e7,0x00050080,0x00000006,0x00000145,0x00000143, + 0x00000144,0x00050084,0x00000006,0x00000146,0x00000145,0x00000136,0x00050080,0x00000006, + 0x00000147,0x00000146,0x00000138,0x000500c2,0x00000006,0x00000148,0x00000147,0x000000a1, + 0x00070050,0x00000007,0x00000149,0x0000013a,0x00000142,0x00000148,0x000000c8,0x00050041, + 0x00000008,0x0000014a,0x000000ec,0x000000fe,0x0003003e,0x0000014a,0x00000149,0x00050041, + 0x00000008,0x0000014c,0x000000ec,0x0000009e,0x0003003e,0x0000014c,0x0000014b,0x000200f9, + 0x000000fd,0x000200f8,0x000000fd,0x0003003e,0x0000014d,0x00000032,0x000200f9,0x0000014e, + 0x000200f8,0x0000014e,0x000400f6,0x00000150,0x00000151,0x00000000,0x000200f9,0x00000152, + 0x000200f8,0x00000152,0x0004003d,0x00000006,0x00000153,0x0000014d,0x000500b0,0x0000001d, + 0x00000154,0x00000153,0x0000001f,0x000400fa,0x00000154,0x0000014f,0x00000150,0x000200f8, + 0x0000014f,0x0004003d,0x00000006,0x00000155,0x0000014d,0x0004003d,0x00000006,0x00000156, + 0x00000024,0x0004003d,0x00000006,0x00000157,0x0000014d,0x00050084,0x00000006,0x00000158, + 0x0000009a,0x00000157,0x000500c2,0x00000006,0x00000159,0x00000156,0x00000158,0x000500c7, + 0x00000006,0x0000015a,0x00000159,0x0000004c,0x00050041,0x00000008,0x0000015b,0x000000ec, + 0x0000015a,0x0004003d,0x00000007,0x0000015c,0x0000015b,0x00050041,0x00000008,0x0000015d, + 0x00000026,0x00000155,0x0003003e,0x0000015d,0x0000015c,0x000200f9,0x00000151,0x000200f8, + 0x00000151,0x0004003d,0x00000006,0x0000015e,0x0000014d,0x00050080,0x00000006,0x0000015f, + 0x0000015e,0x000000f2,0x0003003e,0x0000014d,0x0000015f,0x000200f9,0x0000014e,0x000200f8, + 0x00000150,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000002f,0x00000000,0x0000002b, + 0x00030037,0x00000009,0x0000002c,0x00030037,0x00000009,0x0000002d,0x00030037,0x0000002a, + 0x0000002e,0x000200f8,0x00000030,0x0004003b,0x00000009,0x00000160,0x00000007,0x0004003b, + 0x00000009,0x00000163,0x00000007,0x0004003b,0x00000169,0x0000016a,0x00000007,0x0004003b, + 0x00000008,0x000001bc,0x00000007,0x0004003b,0x00000009,0x000001c0,0x00000007,0x0004003b, + 0x00000008,0x000001cc,0x00000007,0x0004003b,0x00000009,0x000001ce,0x00000007,0x0004003b, + 0x00000009,0x000001cf,0x00000007,0x0004003d,0x00000006,0x00000161,0x0000002c,0x000500c7, + 0x00000006,0x00000162,0x00000161,0x000000c8,0x0003003e,0x00000160,0x00000162,0x0004003d, + 0x00000006,0x00000164,0x0000002c,0x000500c2,0x00000006,0x00000165,0x00000164,0x000000a1, + 0x000500c7,0x00000006,0x00000166,0x00000165,0x000000c8,0x0003003e,0x00000163,0x00000166, + 0x0004003d,0x00000006,0x0000016b,0x00000160,0x00050041,0x00000009,0x0000016c,0x0000016a, + 0x000000ed,0x0003003e,0x0000016c,0x0000016b,0x0004003d,0x00000006,0x0000016d,0x00000163, + 0x00050041,0x00000009,0x0000016e,0x0000016a,0x000000f2,0x0003003e,0x0000016e,0x0000016d, + 0x0004003d,0x00000006,0x0000016f,0x00000160,0x0004003d,0x00000006,0x00000170,0x00000163, + 0x000500ac,0x0000001d,0x00000171,0x0000016f,0x00000170,0x000300f7,0x00000173,0x00000000, + 0x000400fa,0x00000171,0x00000172,0x0000019f,0x000200f8,0x00000172,0x0004003d,0x00000006, + 0x00000175,0x00000160,0x00050084,0x00000006,0x00000176,0x00000174,0x00000175,0x0004003d, + 0x00000006,0x00000177,0x00000163,0x00050080,0x00000006,0x00000178,0x00000176,0x00000177, + 0x00050086,0x00000006,0x0000017a,0x00000178,0x00000179,0x00050041,0x00000009,0x0000017b, + 0x0000016a,0x000000fe,0x0003003e,0x0000017b,0x0000017a,0x0004003d,0x00000006,0x0000017d, + 0x00000160,0x00050084,0x00000006,0x0000017e,0x0000017c,0x0000017d,0x0004003d,0x00000006, + 0x0000017f,0x00000163,0x00050084,0x00000006,0x00000180,0x0000009a,0x0000017f,0x00050080, + 0x00000006,0x00000181,0x0000017e,0x00000180,0x00050086,0x00000006,0x00000182,0x00000181, + 0x00000179,0x00050041,0x00000009,0x00000183,0x0000016a,0x0000009e,0x0003003e,0x00000183, + 0x00000182,0x0004003d,0x00000006,0x00000184,0x00000160,0x00050084,0x00000006,0x00000185, + 0x00000074,0x00000184,0x0004003d,0x00000006,0x00000186,0x00000163,0x00050084,0x00000006, + 0x00000187,0x0000004c,0x00000186,0x00050080,0x00000006,0x00000188,0x00000185,0x00000187, + 0x00050086,0x00000006,0x00000189,0x00000188,0x00000179,0x00050041,0x00000009,0x0000018a, + 0x0000016a,0x00000093,0x0003003e,0x0000018a,0x00000189,0x0004003d,0x00000006,0x0000018b, + 0x00000160,0x00050084,0x00000006,0x0000018c,0x0000004c,0x0000018b,0x0004003d,0x00000006, + 0x0000018d,0x00000163,0x00050084,0x00000006,0x0000018e,0x00000074,0x0000018d,0x00050080, + 0x00000006,0x0000018f,0x0000018c,0x0000018e,0x00050086,0x00000006,0x00000190,0x0000018f, + 0x00000179,0x00050041,0x00000009,0x00000191,0x0000016a,0x0000003a,0x0003003e,0x00000191, + 0x00000190,0x0004003d,0x00000006,0x00000192,0x00000160,0x00050084,0x00000006,0x00000193, + 0x0000009a,0x00000192,0x0004003d,0x00000006,0x00000194,0x00000163,0x00050084,0x00000006, + 0x00000195,0x0000017c,0x00000194,0x00050080,0x00000006,0x00000196,0x00000193,0x00000195, + 0x00050086,0x00000006,0x00000197,0x00000196,0x00000179,0x00050041,0x00000009,0x00000198, + 0x0000016a,0x000000bc,0x0003003e,0x00000198,0x00000197,0x0004003d,0x00000006,0x00000199, + 0x00000160,0x0004003d,0x00000006,0x0000019a,0x00000163,0x00050084,0x00000006,0x0000019b, + 0x00000174,0x0000019a,0x00050080,0x00000006,0x0000019c,0x00000199,0x0000019b,0x00050086, + 0x00000006,0x0000019d,0x0000019c,0x00000179,0x00050041,0x00000009,0x0000019e,0x0000016a, + 0x00000107,0x0003003e,0x0000019e,0x0000019d,0x000200f9,0x00000173,0x000200f8,0x0000019f, + 0x0004003d,0x00000006,0x000001a0,0x00000160,0x00050084,0x00000006,0x000001a1,0x00000074, + 0x000001a0,0x0004003d,0x00000006,0x000001a2,0x00000163,0x00050080,0x00000006,0x000001a3, + 0x000001a1,0x000001a2,0x00050086,0x00000006,0x000001a4,0x000001a3,0x0000017c,0x00050041, + 0x00000009,0x000001a5,0x0000016a,0x000000fe,0x0003003e,0x000001a5,0x000001a4,0x0004003d, + 0x00000006,0x000001a6,0x00000160,0x00050084,0x00000006,0x000001a7,0x0000004c,0x000001a6, + 0x0004003d,0x00000006,0x000001a8,0x00000163,0x00050084,0x00000006,0x000001a9,0x0000009a, + 0x000001a8,0x00050080,0x00000006,0x000001aa,0x000001a7,0x000001a9,0x00050086,0x00000006, + 0x000001ab,0x000001aa,0x0000017c,0x00050041,0x00000009,0x000001ac,0x0000016a,0x0000009e, + 0x0003003e,0x000001ac,0x000001ab,0x0004003d,0x00000006,0x000001ad,0x00000160,0x00050084, + 0x00000006,0x000001ae,0x0000009a,0x000001ad,0x0004003d,0x00000006,0x000001af,0x00000163, + 0x00050084,0x00000006,0x000001b0,0x0000004c,0x000001af,0x00050080,0x00000006,0x000001b1, + 0x000001ae,0x000001b0,0x00050086,0x00000006,0x000001b2,0x000001b1,0x0000017c,0x00050041, + 0x00000009,0x000001b3,0x0000016a,0x00000093,0x0003003e,0x000001b3,0x000001b2,0x0004003d, + 0x00000006,0x000001b4,0x00000160,0x0004003d,0x00000006,0x000001b5,0x00000163,0x00050084, + 0x00000006,0x000001b6,0x00000074,0x000001b5,0x00050080,0x00000006,0x000001b7,0x000001b4, + 0x000001b6,0x00050086,0x00000006,0x000001b8,0x000001b7,0x0000017c,0x00050041,0x00000009, + 0x000001b9,0x0000016a,0x0000003a,0x0003003e,0x000001b9,0x000001b8,0x00050041,0x00000009, + 0x000001ba,0x0000016a,0x000000bc,0x0003003e,0x000001ba,0x00000032,0x00050041,0x00000009, + 0x000001bb,0x0000016a,0x00000107,0x0003003e,0x000001bb,0x000000c8,0x000200f9,0x00000173, + 0x000200f8,0x00000173,0x0004003d,0x00000006,0x000001bd,0x0000002c,0x0004003d,0x00000006, + 0x000001be,0x0000002d,0x00070050,0x00000007,0x000001bf,0x000001bd,0x000001be,0x00000032, + 0x00000032,0x0003003e,0x000001bc,0x000001bf,0x0003003e,0x000001c0,0x00000032,0x000200f9, + 0x000001c1,0x000200f8,0x000001c1,0x000400f6,0x000001c3,0x000001c4,0x00000000,0x000200f9, + 0x000001c5,0x000200f8,0x000001c5,0x0004003d,0x00000006,0x000001c6,0x000001c0,0x000500b0, + 0x0000001d,0x000001c7,0x000001c6,0x0000001f,0x000400fa,0x000001c7,0x000001c2,0x000001c3, + 0x000200f8,0x000001c2,0x0004003d,0x00000006,0x000001c8,0x000001c0,0x0004003d,0x00000006, + 0x000001c9,0x000001c0,0x00050084,0x00000006,0x000001ca,0x0000004c,0x000001c9,0x00050080, + 0x00000006,0x000001cb,0x0000001f,0x000001ca,0x0004003d,0x00000007,0x000001cd,0x000001bc, + 0x0003003e,0x000001cc,0x000001cd,0x0003003e,0x000001ce,0x000001cb,0x0003003e,0x000001cf, + 0x0000004c,0x00070039,0x00000006,0x000001d0,0x0000000e,0x000001cc,0x000001ce,0x000001cf, + 0x00050041,0x00000009,0x000001d1,0x0000016a,0x000001d0,0x0004003d,0x00000006,0x000001d2, + 0x000001d1,0x00050041,0x00000009,0x000001d3,0x0000002e,0x000001c8,0x0003003e,0x000001d3, + 0x000001d2,0x000200f9,0x000001c4,0x000200f8,0x000001c4,0x0004003d,0x00000006,0x000001d4, + 0x000001c0,0x00050080,0x00000006,0x000001d5,0x000001d4,0x000000f2,0x0003003e,0x000001c0, + 0x000001d5,0x000200f9,0x000001c1,0x000200f8,0x000001c3,0x000100fd,0x00010038 +}; + // 1115.1.0 +static const uint32_t spv_bc4[] = { + 0x07230203,0x00010300,0x0008000b,0x000002c6,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000073, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000e,0x73746962,0x34757628,0x3b31753b,0x003b3175,0x00030005,0x0000000b,0x00000062, + 0x00030005,0x0000000c,0x00736f70,0x00030005,0x0000000d,0x0000006e,0x00050005,0x00000015, + 0x74786573,0x3b316928,0x003b3169,0x00030005,0x00000013,0x00000076,0x00030005,0x00000014, + 0x0000006e,0x00060005,0x0000001e,0x28747570,0x753b3175,0x66763b31,0x00003b34,0x00030005, + 0x0000001b,0x00007874,0x00030005,0x0000001c,0x00007974,0x00030005,0x0000001d,0x00000076, + 0x000a0005,0x0000002a,0x5f346362,0x6e616863,0x286c656e,0x753b3175,0x31623b31,0x5b31753b, + 0x3b5d3631,0x00000000,0x00030005,0x00000026,0x00006f6c,0x00030005,0x00000027,0x00006968, + 0x00030005,0x00000028,0x006e6773,0x00030005,0x00000029,0x00000076,0x00030005,0x00000032, + 0x00006977,0x00030005,0x00000036,0x0000006f,0x00030005,0x0000003a,0x00000076,0x00030005, + 0x00000070,0x006b6c62,0x00080005,0x00000073,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x00000044,0x00030005,0x00000076,0x00000070,0x00030005,0x00000082,0x00004350, + 0x00060006,0x00000082,0x00000000,0x5f637273,0x64726f77,0x00000000,0x00060006,0x00000082, + 0x00000001,0x5f776f72,0x636f6c62,0x0000736b,0x00070006,0x00000082,0x00000002,0x6579616c, + 0x6c625f72,0x736b636f,0x00000000,0x00050006,0x00000082,0x00000003,0x67616c66,0x00000073, + 0x00050006,0x00000082,0x00000004,0x5f747364,0x0066666f,0x00050006,0x00000082,0x00000005, + 0x65747865,0x0000746e,0x00030005,0x00000084,0x00006370,0x00030005,0x00000095,0x00747364, + 0x00030005,0x000000b1,0x00003065,0x00040005,0x000000b6,0x61726170,0x0000006d,0x00040005, + 0x000000b7,0x61726170,0x0000006d,0x00030005,0x000000bb,0x00003165,0x00040005,0x000000c0, + 0x61726170,0x0000006d,0x00040005,0x000000c1,0x61726170,0x0000006d,0x00030005,0x000000cf, + 0x006c6170,0x00030005,0x000000db,0x00000069,0x00050005,0x000000f3,0x65646e69,0x6c626178, + 0x00000065,0x00050005,0x000000f9,0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000107, + 0x00000069,0x00050005,0x0000011a,0x65646e69,0x6c626178,0x00000065,0x00050005,0x00000120, + 0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000134,0x00000062,0x00030005,0x00000138, + 0x00000074,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005,0x00000146,0x61726170, + 0x0000006d,0x00040005,0x00000147,0x61726170,0x0000006d,0x00030005,0x00000150,0x006b6c62, + 0x00040005,0x00000153,0x6b6c626e,0x00000000,0x00040005,0x0000016c,0x64726f77,0x00000073, + 0x00040005,0x0000016d,0x65736162,0x00000000,0x00030005,0x00000181,0x00000062,0x00030005, + 0x00000183,0x00637253,0x00040006,0x00000183,0x00000000,0x00000077,0x00030005,0x00000185, + 0x00637273,0x00030005,0x000001a5,0x006e6773,0x00030005,0x000001aa,0x00000076,0x00040005, + 0x000001ab,0x61726170,0x0000006d,0x00040005,0x000001ae,0x61726170,0x0000006d,0x00040005, + 0x000001b1,0x61726170,0x0000006d,0x00040005,0x000001b3,0x61726170,0x0000006d,0x00030005, + 0x000001b6,0x00000074,0x00040005,0x000001cb,0x61726170,0x0000006d,0x00040005,0x000001cc, + 0x61726170,0x0000006d,0x00040005,0x000001cd,0x61726170,0x0000006d,0x00040047,0x00000073, + 0x0000000b,0x0000001c,0x00030047,0x00000082,0x00000002,0x00050048,0x00000082,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000082,0x00000001,0x00000023,0x00000004,0x00050048, + 0x00000082,0x00000002,0x00000023,0x00000008,0x00050048,0x00000082,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x00000082,0x00000004,0x00000023,0x00000010,0x00050048,0x00000082, + 0x00000005,0x00000023,0x00000018,0x00030047,0x00000095,0x00000019,0x00040047,0x00000095, + 0x00000021,0x00000001,0x00040047,0x00000095,0x00000022,0x00000000,0x00040047,0x00000182, + 0x00000006,0x00000004,0x00030047,0x00000183,0x00000002,0x00040048,0x00000183,0x00000000, + 0x00000018,0x00050048,0x00000183,0x00000000,0x00000023,0x00000000,0x00030047,0x00000185, + 0x00000018,0x00040047,0x00000185,0x00000021,0x00000000,0x00040047,0x00000185,0x00000022, + 0x00000000,0x00040047,0x000001d1,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040017,0x00000007, + 0x00000006,0x00000004,0x00040020,0x00000008,0x00000007,0x00000007,0x00040020,0x00000009, + 0x00000007,0x00000006,0x00060021,0x0000000a,0x00000006,0x00000008,0x00000009,0x00000009, + 0x00040015,0x00000010,0x00000020,0x00000001,0x00040020,0x00000011,0x00000007,0x00000010, + 0x00050021,0x00000012,0x00000010,0x00000011,0x00000011,0x00030016,0x00000017,0x00000020, + 0x00040017,0x00000018,0x00000017,0x00000004,0x00040020,0x00000019,0x00000007,0x00000018, + 0x00060021,0x0000001a,0x00000002,0x00000009,0x00000009,0x00000019,0x00020014,0x00000020, + 0x00040020,0x00000021,0x00000007,0x00000020,0x0004002b,0x00000006,0x00000022,0x00000010, + 0x0004001c,0x00000023,0x00000006,0x00000022,0x00040020,0x00000024,0x00000007,0x00000023, + 0x00070021,0x00000025,0x00000002,0x00000009,0x00000009,0x00000021,0x00000024,0x0004002b, + 0x00000006,0x0000002d,0x00000000,0x0004002b,0x00000010,0x00000034,0x00000005,0x0004002b, + 0x00000006,0x00000038,0x0000001f,0x0004002b,0x00000006,0x00000043,0x00000020,0x0004002b, + 0x00000006,0x00000046,0x00000003,0x0004002b,0x00000006,0x0000004c,0x00000001,0x0004002b, + 0x00000010,0x00000065,0x00000020,0x00040017,0x0000006e,0x00000006,0x00000002,0x00040020, + 0x0000006f,0x00000007,0x0000006e,0x00040017,0x00000071,0x00000006,0x00000003,0x00040020, + 0x00000072,0x00000001,0x00000071,0x0004003b,0x00000072,0x00000073,0x00000001,0x0004002b, + 0x00000006,0x00000078,0x00000004,0x00040017,0x00000081,0x00000010,0x00000002,0x0008001e, + 0x00000082,0x00000006,0x00000006,0x00000006,0x00000006,0x00000081,0x0000006e,0x00040020, + 0x00000083,0x00000009,0x00000082,0x0004003b,0x00000083,0x00000084,0x00000009,0x00040020, + 0x00000085,0x00000009,0x00000006,0x00090019,0x00000093,0x00000017,0x00000001,0x00000000, + 0x00000001,0x00000000,0x00000002,0x0000000f,0x00040020,0x00000094,0x00000000,0x00000093, + 0x0004003b,0x00000094,0x00000095,0x00000000,0x0004002b,0x00000010,0x00000097,0x00000004, + 0x00040020,0x00000098,0x00000009,0x00000081,0x0004002b,0x00000006,0x0000009e,0x00000002, + 0x00040020,0x0000009f,0x00000001,0x00000006,0x0004002b,0x00000010,0x000000a2,0x00000003, + 0x0004002b,0x00000010,0x000000a5,0x00000008,0x00040017,0x000000a9,0x00000010,0x00000003, + 0x0004002b,0x00000006,0x000000b3,0x000000ff,0x0004002b,0x00000010,0x000000b9,0xffffff81, + 0x0004002b,0x00000006,0x000000cc,0x00000008,0x0004001c,0x000000cd,0x00000010,0x000000cc, + 0x00040020,0x000000ce,0x00000007,0x000000cd,0x0004002b,0x00000010,0x000000d0,0x00000000, + 0x0004002b,0x00000010,0x000000d3,0x00000001,0x0004002b,0x00000010,0x000000e2,0x00000006, + 0x0004002b,0x00000010,0x000000e4,0x00000002,0x0004002b,0x00000006,0x000000e7,0x00000006, + 0x0004001c,0x000000e8,0x00000010,0x000000e7,0x0004002b,0x00000010,0x000000e9,0x00002493, + 0x0004002b,0x00000010,0x000000ea,0x00004924,0x0004002b,0x00000010,0x000000eb,0x00006db6, + 0x0004002b,0x00000010,0x000000ec,0x0000924a,0x0004002b,0x00000010,0x000000ed,0x0000b6dc, + 0x0004002b,0x00000010,0x000000ee,0x0000db6d,0x0009002c,0x000000e8,0x000000ef,0x000000e9, + 0x000000ea,0x000000eb,0x000000ec,0x000000ed,0x000000ee,0x00040020,0x000000f2,0x00000007, + 0x000000e8,0x0004002b,0x00000010,0x000000ff,0x00008000,0x0004002b,0x00000010,0x00000101, + 0x00000010,0x0004001c,0x00000111,0x00000010,0x00000078,0x0004002b,0x00000010,0x00000112, + 0x00003333,0x0004002b,0x00000010,0x00000113,0x00006667,0x0004002b,0x00000010,0x00000114, + 0x00009999,0x0004002b,0x00000010,0x00000115,0x0000cccd,0x0007002c,0x00000111,0x00000116, + 0x00000112,0x00000113,0x00000114,0x00000115,0x00040020,0x00000119,0x00000007,0x00000111, + 0x0004002b,0x00000010,0x0000012e,0x00000007,0x0004002b,0x00000010,0x00000130,0x0000007f, + 0x0004002b,0x00000010,0x00000131,0x000000ff,0x00040020,0x00000154,0x00000009,0x0000006e, + 0x0003001d,0x00000182,0x00000006,0x0003001e,0x00000183,0x00000182,0x00040020,0x00000184, + 0x0000000c,0x00000183,0x0004003b,0x00000184,0x00000185,0x0000000c,0x00040020,0x00000187, + 0x0000000c,0x00000006,0x0004002b,0x00000017,0x000001c6,0x437f0000,0x0004002b,0x00000017, + 0x000001c8,0x00000000,0x0004002b,0x00000017,0x000001c9,0x3f800000,0x0006002c,0x00000071, + 0x000001d1,0x000000cc,0x000000cc,0x0000004c,0x0004001c,0x000001d2,0x00000010,0x00000043, + 0x0004002b,0x00000010,0x000001d3,0x0000000a,0x0004002b,0x00000010,0x000001d4,0xffffffff, + 0x0004002b,0x00000010,0x000001d5,0x0000000b,0x0004002b,0x00000010,0x000001d6,0x0000000c, + 0x0004002b,0x00000010,0x000001d7,0x0000000d,0x0004002b,0x00000010,0x000001d8,0x00000009, + 0x0023002c,0x000001d2,0x000001d9,0x000000d0,0x000000d3,0x000000e4,0x000001d3,0x000001d4, + 0x000001d4,0x000000a2,0x000001d5,0x000001d4,0x000001d4,0x00000097,0x000001d6,0x000001d4, + 0x000001d4,0x00000034,0x000001d7,0x000001d4,0x000001d4,0x000000e2,0x000001d4,0x000001d4, + 0x000001d4,0x0000012e,0x000001d4,0x000001d4,0x000001d4,0x000000a5,0x000001d4,0x000001d4, + 0x000001d4,0x000001d8,0x000001d4,0x0004002b,0x00000006,0x000001da,0x0000000f,0x0004001c, + 0x000001db,0x00000006,0x000001da,0x0004002b,0x00000006,0x000001dc,0x00000014,0x0004002b, + 0x00000006,0x000001dd,0x0000002c,0x0004002b,0x00000006,0x000001de,0x0000003f,0x0004002b, + 0x00000006,0x000001df,0x00000054,0x0004002b,0x00000006,0x000001e0,0x00000069,0x0004002b, + 0x00000006,0x000001e1,0x0000007d,0x0004002b,0x00000006,0x000001e2,0x00000091,0x0004002b, + 0x00000006,0x000001e3,0x000000a7,0x0004002b,0x00000006,0x000001e4,0x000000bd,0x0004002b, + 0x00000006,0x000001e5,0x000000d5,0x0004002b,0x00000006,0x000001e6,0x000000db,0x0004002b, + 0x00000006,0x000001e7,0x000000e4,0x0004002b,0x00000006,0x000001e8,0x000000ed,0x0004002b, + 0x00000006,0x000001e9,0x000000f6,0x0012002c,0x000001db,0x000001ea,0x0000002d,0x000001dc, + 0x000001dd,0x000001de,0x000001df,0x000001e0,0x000001e1,0x000001e2,0x000001e3,0x000001e4, + 0x000001e5,0x000001e6,0x000001e7,0x000001e8,0x000001e9,0x0004001c,0x000001eb,0x00000006, + 0x000001e9,0x0004002b,0x00000006,0x000001ec,0x00000816,0x0004002b,0x00000006,0x000001ed, + 0x0000081a,0x0004002b,0x00000006,0x000001ee,0x0000081b,0x0004002b,0x00000006,0x000001ef, + 0x000000a0,0x0004002b,0x00000006,0x000001f0,0x000000a4,0x0004002b,0x00000006,0x000001f1, + 0x000000a8,0x0004002b,0x00000006,0x000001f2,0x00000051,0x0004002b,0x00000006,0x000001f3, + 0x00000817,0x0004002b,0x00000006,0x000001f4,0x00000046,0x0004002b,0x00000006,0x000001f5, + 0x00000055,0x0004002b,0x00000006,0x000001f6,0x0000001b,0x0004002b,0x00000006,0x000001f7, + 0x00000047,0x0004002b,0x00000006,0x000001f8,0x00000059,0x0004002b,0x00000006,0x000001f9, + 0x0000021b,0x0004002b,0x00000006,0x000001fa,0x0000004a,0x0004002b,0x00000006,0x000001fb, + 0x00000052,0x0004002b,0x00000006,0x000001fc,0x0000041b,0x0004002b,0x00000006,0x000001fd, + 0x00000053,0x0004002b,0x00000006,0x000001fe,0x0000061b,0x0004002b,0x00000006,0x000001ff, + 0x0000005c,0x0004002b,0x00000006,0x00000200,0x00000a16,0x0004002b,0x00000006,0x00000201, + 0x00000a17,0x0004002b,0x00000006,0x00000202,0x00000070,0x0004002b,0x00000006,0x00000203, + 0x00000074,0x0004002b,0x00000006,0x00000204,0x00000a1a,0x0004002b,0x00000006,0x00000205, + 0x00000078,0x0004002b,0x00000006,0x00000206,0x00000a1b,0x0004002b,0x00000006,0x00000207, + 0x00000061,0x0004002b,0x00000006,0x00000208,0x00000065,0x0004002b,0x00000006,0x00000209, + 0x00000062,0x0004002b,0x00000006,0x0000020a,0x00000063,0x0004002b,0x00000006,0x0000020b, + 0x00001410,0x0004002b,0x00000006,0x0000020c,0x00000045,0x0004002b,0x00000006,0x0000020d, + 0x00001414,0x0004002b,0x00000006,0x0000020e,0x00000049,0x0004002b,0x00000006,0x0000020f, + 0x00001418,0x0004002b,0x00000006,0x00000210,0x00000041,0x0004002b,0x00000006,0x00000211, + 0x00000042,0x0004002b,0x00000006,0x00000212,0x00000043,0x0004002b,0x00000006,0x00000213, + 0x00000090,0x0004002b,0x00000006,0x00000214,0x00000094,0x0004002b,0x00000006,0x00000215, + 0x00000098,0x0004002b,0x00000006,0x00000216,0x00000080,0x0004002b,0x00000006,0x00000217, + 0x00000084,0x0004002b,0x00000006,0x00000218,0x00000088,0x0004002b,0x00000006,0x00000219, + 0x00000060,0x0004002b,0x00000006,0x0000021a,0x00000064,0x0004002b,0x00000006,0x0000021b, + 0x00000068,0x0004002b,0x00000006,0x0000021c,0x000000a1,0x0004002b,0x00000006,0x0000021d, + 0x000000a5,0x0004002b,0x00000006,0x0000021e,0x000000a9,0x0004002b,0x00000006,0x0000021f, + 0x00000095,0x0004002b,0x00000006,0x00000220,0x00000099,0x0004002b,0x00000006,0x00000221, + 0x00000081,0x0004002b,0x00000006,0x00000222,0x00005420,0x0004002b,0x00000006,0x00000223, + 0x00000085,0x0004002b,0x00000006,0x00000224,0x00005424,0x0004002b,0x00000006,0x00000225, + 0x00000089,0x0004002b,0x00000006,0x00000226,0x00005428,0x0004002b,0x00000006,0x00000227, + 0x00005460,0x0004002b,0x00000006,0x00000228,0x00005464,0x0004002b,0x00000006,0x00000229, + 0x00005468,0x00f9002c,0x000001eb,0x0000022a,0x000001ec,0x000001ed,0x000001ee,0x000001ef, + 0x000001f0,0x000001f1,0x000001f2,0x000001f3,0x000001f4,0x000001f5,0x000001f6,0x000001f7, + 0x000001f8,0x000001f9,0x000001fa,0x000001fb,0x000001fc,0x000001fd,0x000001fe,0x000001ff, + 0x00000200,0x000001f3,0x00000201,0x00000202,0x000001f6,0x000001f9,0x000001ed,0x00000203, + 0x00000204,0x000001fc,0x000001ec,0x00000205,0x000001fe,0x00000206,0x000001ee,0x00000207, + 0x000001f4,0x00000208,0x000001f7,0x000001e0,0x000001fa,0x00000209,0x0000020a,0x000001ff, + 0x000001ef,0x000001f0,0x000001f1,0x000001f2,0x0000020b,0x000001f4,0x0000020c,0x0000020d, + 0x000001f6,0x000001f7,0x0000020e,0x0000020f,0x000001f9,0x000001fa,0x000001fb,0x000001fc, + 0x000001fd,0x000001fe,0x000001ff,0x000001ef,0x000001f0,0x000001f1,0x00000210,0x0000020b, + 0x000001f3,0x000001f4,0x000001f5,0x0000020d,0x000001f7,0x0000020e,0x0000020f,0x000001f9, + 0x000001fa,0x00000211,0x000001f6,0x000001fc,0x00000212,0x000001ec,0x000001fe,0x000001ff, + 0x000001ef,0x000001f0,0x000001f1,0x00000210,0x0000020b,0x000001ed,0x000001f4,0x0000020c, + 0x0000020d,0x000001f6,0x000001f7,0x000001f8,0x0000020f,0x000001fa,0x00000211,0x000001f9, + 0x000001fc,0x00000212,0x000001ee,0x000001fe,0x000001ff,0x00000213,0x000001ed,0x00000214, + 0x000001ec,0x00000215,0x000001ee,0x000001f2,0x000001f3,0x000001f4,0x000001f5,0x000001f6, + 0x000001f7,0x000001f8,0x000001f9,0x000001fa,0x000001fb,0x000001fc,0x000001fd,0x000001fe, + 0x000001ff,0x00000216,0x000001f3,0x000001ed,0x00000217,0x000001fc,0x000001ec,0x00000218, + 0x000001fe,0x000001ee,0x00000207,0x000001f4,0x000001f5,0x000001f6,0x000001f7,0x000001f8, + 0x000001f9,0x000001fa,0x00000209,0x0000020a,0x000001ff,0x00000216,0x000001f6,0x000001ed, + 0x00000217,0x00000200,0x000001ec,0x00000218,0x00000201,0x000001ee,0x000001f2,0x000001f3, + 0x000001f4,0x00000208,0x000001f7,0x000001f8,0x000001f9,0x000001fa,0x000001fb,0x000001fc, + 0x000001fd,0x000001fe,0x000001ff,0x00000216,0x000001f9,0x000001ed,0x00000217,0x00000204, + 0x000001ec,0x00000218,0x00000206,0x000001ee,0x000001f2,0x000001f3,0x000001f4,0x000001f5, + 0x000001f6,0x000001f7,0x000001e0,0x000001fa,0x000001fb,0x000001fc,0x000001fd,0x000001fe, + 0x000001ff,0x00000219,0x000001f3,0x000001f6,0x000001f9,0x000001ed,0x0000021a,0x00000200, + 0x00000204,0x000001fc,0x000001ec,0x0000021b,0x00000201,0x000001fe,0x00000206,0x000001ee, + 0x00000207,0x000001f4,0x00000208,0x000001f7,0x000001e0,0x000001fa,0x00000209,0x0000020a, + 0x000001ff,0x000001ef,0x000001f0,0x000001f1,0x0000021c,0x0000021d,0x0000021e,0x000001ef, + 0x000001f0,0x000001f1,0x000001e2,0x0000020b,0x0000021f,0x0000020d,0x00000220,0x0000020f, + 0x000001ef,0x000001f0,0x000001f1,0x00000221,0x00000222,0x00000223,0x00000224,0x00000225, + 0x00000226,0x000001ef,0x000001f0,0x000001f1,0x00000210,0x00000227,0x0000020c,0x00000228, + 0x0000020e,0x00000229,0x0004002b,0x00000006,0x0000022b,0x0000000e,0x0004001c,0x0000022c, + 0x00000010,0x0000022b,0x0011002c,0x0000022c,0x0000022d,0x000001d3,0x0000012e,0x000001d5, + 0x000001d5,0x000001d5,0x000001d8,0x000000a5,0x000000a5,0x000000a5,0x000000e2,0x000001d3, + 0x000001d5,0x000001d6,0x00000101,0x0011002c,0x0000022c,0x0000022e,0x00000034,0x000000e2, + 0x00000034,0x00000097,0x00000097,0x00000034,0x000000e2,0x00000034,0x00000034,0x000000e2, + 0x000001d3,0x000001d8,0x000000a5,0x00000097,0x0011002c,0x0000022c,0x0000022f,0x00000034, + 0x000000e2,0x00000097,0x00000034,0x00000097,0x00000034,0x00000034,0x000000e2,0x00000034, + 0x000000e2,0x000001d3,0x000001d8,0x000000a5,0x00000097,0x0011002c,0x0000022c,0x00000230, + 0x00000034,0x000000e2,0x00000097,0x00000097,0x00000034,0x00000034,0x00000034,0x00000034, + 0x000000e2,0x000000e2,0x000001d3,0x000001d8,0x000000a5,0x00000097,0x0004002b,0x00000006, + 0x00000231,0x00000040,0x0004001c,0x00000232,0x00000006,0x00000231,0x0004002b,0x00000006, + 0x00000233,0x50505050,0x0004002b,0x00000006,0x00000234,0x40404040,0x0004002b,0x00000006, + 0x00000235,0x54545454,0x0004002b,0x00000006,0x00000236,0x54505040,0x0004002b,0x00000006, + 0x00000237,0x50404000,0x0004002b,0x00000006,0x00000238,0x55545450,0x0004002b,0x00000006, + 0x00000239,0x55545040,0x0004002b,0x00000006,0x0000023a,0x54504000,0x0004002b,0x00000006, + 0x0000023b,0x50400000,0x0004002b,0x00000006,0x0000023c,0x55555450,0x0004002b,0x00000006, + 0x0000023d,0x55544000,0x0004002b,0x00000006,0x0000023e,0x54400000,0x0004002b,0x00000006, + 0x0000023f,0x55555440,0x0004002b,0x00000006,0x00000240,0x55550000,0x0004002b,0x00000006, + 0x00000241,0x55555500,0x0004002b,0x00000006,0x00000242,0x55000000,0x0004002b,0x00000006, + 0x00000243,0x55150100,0x0004002b,0x00000006,0x00000244,0x00004054,0x0004002b,0x00000006, + 0x00000245,0x15010000,0x0004002b,0x00000006,0x00000246,0x00405054,0x0004002b,0x00000006, + 0x00000247,0x00004050,0x0004002b,0x00000006,0x00000248,0x15050100,0x0004002b,0x00000006, + 0x00000249,0x05010000,0x0004002b,0x00000006,0x0000024a,0x40505054,0x0004002b,0x00000006, + 0x0000024b,0x00404050,0x0004002b,0x00000006,0x0000024c,0x05010100,0x0004002b,0x00000006, + 0x0000024d,0x14141414,0x0004002b,0x00000006,0x0000024e,0x05141450,0x0004002b,0x00000006, + 0x0000024f,0x01155440,0x0004002b,0x00000006,0x00000250,0x00555500,0x0004002b,0x00000006, + 0x00000251,0x15014054,0x0004002b,0x00000006,0x00000252,0x05414150,0x0004002b,0x00000006, + 0x00000253,0x44444444,0x0004002b,0x00000006,0x00000254,0x55005500,0x0004002b,0x00000006, + 0x00000255,0x11441144,0x0004002b,0x00000006,0x00000256,0x05055050,0x0004002b,0x00000006, + 0x00000257,0x05500550,0x0004002b,0x00000006,0x00000258,0x11114444,0x0004002b,0x00000006, + 0x00000259,0x41144114,0x0004002b,0x00000006,0x0000025a,0x44111144,0x0004002b,0x00000006, + 0x0000025b,0x15055054,0x0004002b,0x00000006,0x0000025c,0x01055040,0x0004002b,0x00000006, + 0x0000025d,0x05041050,0x0004002b,0x00000006,0x0000025e,0x05455150,0x0004002b,0x00000006, + 0x0000025f,0x14414114,0x0004002b,0x00000006,0x00000260,0x50050550,0x0004002b,0x00000006, + 0x00000261,0x41411414,0x0004002b,0x00000006,0x00000262,0x00141400,0x0004002b,0x00000006, + 0x00000263,0x00041504,0x0004002b,0x00000006,0x00000264,0x00105410,0x0004002b,0x00000006, + 0x00000265,0x10541000,0x0004002b,0x00000006,0x00000266,0x04150400,0x0004002b,0x00000006, + 0x00000267,0x50410514,0x0004002b,0x00000006,0x00000268,0x41051450,0x0004002b,0x00000006, + 0x00000269,0x05415014,0x0004002b,0x00000006,0x0000026a,0x14054150,0x0004002b,0x00000006, + 0x0000026b,0x41050514,0x0004002b,0x00000006,0x0000026c,0x41505014,0x0004002b,0x00000006, + 0x0000026d,0x40011554,0x0004002b,0x00000006,0x0000026e,0x54150140,0x0004002b,0x00000006, + 0x0000026f,0x50505500,0x0004002b,0x00000006,0x00000270,0x00555050,0x0004002b,0x00000006, + 0x00000271,0x15151010,0x0004002b,0x00000006,0x00000272,0x54540404,0x0043002c,0x00000232, + 0x00000273,0x00000233,0x00000234,0x00000235,0x00000236,0x00000237,0x00000238,0x00000239, + 0x0000023a,0x0000023b,0x0000023c,0x0000023d,0x0000023e,0x0000023f,0x00000240,0x00000241, + 0x00000242,0x00000243,0x00000244,0x00000245,0x00000246,0x00000247,0x00000248,0x00000249, + 0x0000024a,0x0000024b,0x0000024c,0x0000024d,0x0000024e,0x0000024f,0x00000250,0x00000251, + 0x00000252,0x00000253,0x00000254,0x00000255,0x00000256,0x00000257,0x00000258,0x00000259, + 0x0000025a,0x0000025b,0x0000025c,0x0000025d,0x0000025e,0x0000025f,0x00000260,0x00000261, + 0x00000262,0x00000263,0x00000264,0x00000265,0x00000266,0x00000267,0x00000268,0x00000269, + 0x0000026a,0x0000026b,0x0000026c,0x0000026d,0x0000026e,0x0000026f,0x00000270,0x00000271, + 0x00000272,0x0043002c,0x00000232,0x00000274,0x000001da,0x000001da,0x000001da,0x000001da, + 0x000001da,0x000001da,0x000001da,0x000001da,0x000001da,0x000001da,0x000001da,0x000001da, + 0x000001da,0x000001da,0x000001da,0x000001da,0x000001da,0x0000009e,0x000000cc,0x0000009e, + 0x0000009e,0x000000cc,0x000000cc,0x000001da,0x0000009e,0x000000cc,0x0000009e,0x0000009e, + 0x000000cc,0x000000cc,0x0000009e,0x0000009e,0x000001da,0x000001da,0x000000e7,0x000000cc, + 0x0000009e,0x000000cc,0x000001da,0x000001da,0x0000009e,0x000000cc,0x0000009e,0x0000009e, + 0x0000009e,0x000001da,0x000001da,0x000000e7,0x000000e7,0x0000009e,0x000000e7,0x000000cc, + 0x000001da,0x000001da,0x0000009e,0x0000009e,0x000001da,0x000001da,0x000001da,0x000001da, + 0x000001da,0x0000009e,0x0000009e,0x000001da,0x0004002b,0x00000006,0x00000275,0xaa685050, + 0x0004002b,0x00000006,0x00000276,0x6a5a5040,0x0004002b,0x00000006,0x00000277,0x5a5a4200, + 0x0004002b,0x00000006,0x00000278,0x5450a0a8,0x0004002b,0x00000006,0x00000279,0xa5a50000, + 0x0004002b,0x00000006,0x0000027a,0xa0a05050,0x0004002b,0x00000006,0x0000027b,0x5555a0a0, + 0x0004002b,0x00000006,0x0000027c,0x5a5a5050,0x0004002b,0x00000006,0x0000027d,0xaa550000, + 0x0004002b,0x00000006,0x0000027e,0xaa555500,0x0004002b,0x00000006,0x0000027f,0xaaaa5500, + 0x0004002b,0x00000006,0x00000280,0x90909090,0x0004002b,0x00000006,0x00000281,0x94949494, + 0x0004002b,0x00000006,0x00000282,0xa4a4a4a4,0x0004002b,0x00000006,0x00000283,0xa9a59450, + 0x0004002b,0x00000006,0x00000284,0x2a0a4250,0x0004002b,0x00000006,0x00000285,0xa5945040, + 0x0004002b,0x00000006,0x00000286,0x0a425054,0x0004002b,0x00000006,0x00000287,0xa5a5a500, + 0x0004002b,0x00000006,0x00000288,0x55a0a0a0,0x0004002b,0x00000006,0x00000289,0xa8a85454, + 0x0004002b,0x00000006,0x0000028a,0x6a6a4040,0x0004002b,0x00000006,0x0000028b,0xa4a45000, + 0x0004002b,0x00000006,0x0000028c,0x1a1a0500,0x0004002b,0x00000006,0x0000028d,0x0050a4a4, + 0x0004002b,0x00000006,0x0000028e,0xaaa59090,0x0004002b,0x00000006,0x0000028f,0x14696914, + 0x0004002b,0x00000006,0x00000290,0x69691400,0x0004002b,0x00000006,0x00000291,0xa08585a0, + 0x0004002b,0x00000006,0x00000292,0xaa821414,0x0004002b,0x00000006,0x00000293,0x50a4a450, + 0x0004002b,0x00000006,0x00000294,0x6a5a0200,0x0004002b,0x00000006,0x00000295,0xa9a58000, + 0x0004002b,0x00000006,0x00000296,0x5090a0a8,0x0004002b,0x00000006,0x00000297,0xa8a09050, + 0x0004002b,0x00000006,0x00000298,0x24242424,0x0004002b,0x00000006,0x00000299,0x00aa5500, + 0x0004002b,0x00000006,0x0000029a,0x24924924,0x0004002b,0x00000006,0x0000029b,0x24499224, + 0x0004002b,0x00000006,0x0000029c,0x50a50a50,0x0004002b,0x00000006,0x0000029d,0x500aa550, + 0x0004002b,0x00000006,0x0000029e,0xaaaa4444,0x0004002b,0x00000006,0x0000029f,0x66660000, + 0x0004002b,0x00000006,0x000002a0,0xa5a0a5a0,0x0004002b,0x00000006,0x000002a1,0x50a050a0, + 0x0004002b,0x00000006,0x000002a2,0x69286928,0x0004002b,0x00000006,0x000002a3,0x44aaaa44, + 0x0004002b,0x00000006,0x000002a4,0x66666600,0x0004002b,0x00000006,0x000002a5,0xaa444444, + 0x0004002b,0x00000006,0x000002a6,0x54a854a8,0x0004002b,0x00000006,0x000002a7,0x95809580, + 0x0004002b,0x00000006,0x000002a8,0x96969600,0x0004002b,0x00000006,0x000002a9,0xa85454a8, + 0x0004002b,0x00000006,0x000002aa,0x80959580,0x0004002b,0x00000006,0x000002ab,0xaa141414, + 0x0004002b,0x00000006,0x000002ac,0x96960000,0x0004002b,0x00000006,0x000002ad,0xaaaa1414, + 0x0004002b,0x00000006,0x000002ae,0xa05050a0,0x0004002b,0x00000006,0x000002af,0xa0a5a5a0, + 0x0004002b,0x00000006,0x000002b0,0x96000000,0x0004002b,0x00000006,0x000002b1,0x40804080, + 0x0004002b,0x00000006,0x000002b2,0xa9a8a9a8,0x0004002b,0x00000006,0x000002b3,0xaaaaaa44, + 0x0004002b,0x00000006,0x000002b4,0x2a4a5254,0x0043002c,0x00000232,0x000002b5,0x00000275, + 0x00000276,0x00000277,0x00000278,0x00000279,0x0000027a,0x0000027b,0x0000027c,0x0000027d, + 0x0000027e,0x0000027f,0x00000280,0x00000281,0x00000282,0x00000283,0x00000284,0x00000285, + 0x00000286,0x00000287,0x00000288,0x00000289,0x0000028a,0x0000028b,0x0000028c,0x0000028d, + 0x0000028e,0x0000028f,0x00000290,0x00000291,0x00000292,0x00000293,0x00000294,0x00000295, + 0x00000296,0x00000297,0x00000298,0x00000299,0x0000029a,0x0000029b,0x0000029c,0x0000029d, + 0x0000029e,0x0000029f,0x000002a0,0x000002a1,0x000002a2,0x000002a3,0x000002a4,0x000002a5, + 0x000002a6,0x000002a7,0x000002a8,0x000002a9,0x000002aa,0x000002ab,0x000002ac,0x000002ad, + 0x000002ae,0x000002af,0x000002b0,0x000002b1,0x000002b2,0x000002b3,0x000002b4,0x0004002b, + 0x00000006,0x000002b6,0x000000f3,0x0004002b,0x00000006,0x000002b7,0x00000083,0x0004002b, + 0x00000006,0x000002b8,0x0000008f,0x0004002b,0x00000006,0x000002b9,0x000000f8,0x0004002b, + 0x00000006,0x000002ba,0x000000f5,0x0004002b,0x00000006,0x000002bb,0x0000008a,0x0004002b, + 0x00000006,0x000002bc,0x00000035,0x0004002b,0x00000006,0x000002bd,0x000000a6,0x0004002b, + 0x00000006,0x000002be,0x000000af,0x0004002b,0x00000006,0x000002bf,0x0000006f,0x0004002b, + 0x00000006,0x000002c0,0x000000fa,0x0004002b,0x00000006,0x000002c1,0x000000fd,0x0004002b, + 0x00000006,0x000002c2,0x000000fc,0x0043002c,0x00000232,0x000002c3,0x000002b6,0x000002b7, + 0x000002b8,0x000001de,0x000002b9,0x000002b6,0x000001de,0x000002b8,0x000002b9,0x000002b9, + 0x000001e9,0x000001e9,0x000001e9,0x000002ba,0x000002b6,0x000002b7,0x000002b6,0x000002b7, + 0x000002b9,0x000001de,0x000002b6,0x000002b7,0x000001e9,0x000002bb,0x000002bc,0x000002b9, + 0x0000021b,0x000002bd,0x000002b9,0x000002ba,0x000002be,0x000002b8,0x000002b9,0x000001de, + 0x000002b6,0x0000021d,0x000002bd,0x000002bb,0x00000215,0x000002be,0x000002bf,0x000002b6, + 0x000002b8,0x000002ba,0x000001de,0x000002bf,0x000002bf,0x000002b8,0x000002b6,0x000001de, + 0x000002ba,0x000002ba,0x000002ba,0x000002b9,0x000002ba,0x000002c0,0x000002ba,0x000002c0, + 0x000002b9,0x000002c1,0x000001de,0x000002c2,0x000002b6,0x000002b7,0x000b002c,0x000000cd, + 0x000002c4,0x00000097,0x000000e2,0x00000034,0x0000012e,0x00000034,0x0000012e,0x0000012e, + 0x00000034,0x000b002c,0x000000cd,0x000002c5,0x000000d0,0x000000d0,0x000000d0,0x000000d0, + 0x000000e2,0x000000a5,0x0000012e,0x00000034,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000006f,0x00000150,0x00000007,0x0004003b, + 0x0000006f,0x00000153,0x00000007,0x0004003b,0x00000009,0x0000016c,0x00000007,0x0004003b, + 0x00000009,0x0000016d,0x00000007,0x0004003b,0x00000008,0x00000181,0x00000007,0x0004003b, + 0x00000009,0x00000190,0x00000007,0x0004003b,0x00000009,0x0000019b,0x00000007,0x0004003b, + 0x00000021,0x000001a5,0x00000007,0x0004003b,0x00000024,0x000001aa,0x00000007,0x0004003b, + 0x00000009,0x000001ab,0x00000007,0x0004003b,0x00000009,0x000001ae,0x00000007,0x0004003b, + 0x00000021,0x000001b1,0x00000007,0x0004003b,0x00000024,0x000001b3,0x00000007,0x0004003b, + 0x00000009,0x000001b6,0x00000007,0x0004003b,0x00000009,0x000001cb,0x00000007,0x0004003b, + 0x00000009,0x000001cc,0x00000007,0x0004003b,0x00000019,0x000001cd,0x00000007,0x0004003d, + 0x00000071,0x00000151,0x00000073,0x0007004f,0x0000006e,0x00000152,0x00000151,0x00000151, + 0x00000000,0x00000001,0x0003003e,0x00000150,0x00000152,0x00050041,0x00000154,0x00000155, + 0x00000084,0x00000034,0x0004003d,0x0000006e,0x00000156,0x00000155,0x00050050,0x0000006e, + 0x00000157,0x00000046,0x00000046,0x00050080,0x0000006e,0x00000158,0x00000156,0x00000157, + 0x00050050,0x0000006e,0x00000159,0x00000078,0x00000078,0x00050086,0x0000006e,0x0000015a, + 0x00000158,0x00000159,0x0003003e,0x00000153,0x0000015a,0x00050041,0x00000009,0x0000015b, + 0x00000150,0x0000002d,0x0004003d,0x00000006,0x0000015c,0x0000015b,0x00050041,0x00000009, + 0x0000015d,0x00000153,0x0000002d,0x0004003d,0x00000006,0x0000015e,0x0000015d,0x000500ae, + 0x00000020,0x0000015f,0x0000015c,0x0000015e,0x000400a8,0x00000020,0x00000160,0x0000015f, + 0x000300f7,0x00000162,0x00000000,0x000400fa,0x00000160,0x00000161,0x00000162,0x000200f8, + 0x00000161,0x00050041,0x00000009,0x00000163,0x00000150,0x0000004c,0x0004003d,0x00000006, + 0x00000164,0x00000163,0x00050041,0x00000009,0x00000165,0x00000153,0x0000004c,0x0004003d, + 0x00000006,0x00000166,0x00000165,0x000500ae,0x00000020,0x00000167,0x00000164,0x00000166, + 0x000200f9,0x00000162,0x000200f8,0x00000162,0x000700f5,0x00000020,0x00000168,0x0000015f, + 0x00000005,0x00000167,0x00000161,0x000300f7,0x0000016a,0x00000000,0x000400fa,0x00000168, + 0x00000169,0x0000016a,0x000200f8,0x00000169,0x000100fd,0x000200f8,0x0000016a,0x0003003e, + 0x0000016c,0x0000009e,0x00050041,0x00000085,0x0000016e,0x00000084,0x000000d0,0x0004003d, + 0x00000006,0x0000016f,0x0000016e,0x00050041,0x0000009f,0x00000170,0x00000073,0x0000009e, + 0x0004003d,0x00000006,0x00000171,0x00000170,0x00050041,0x00000085,0x00000172,0x00000084, + 0x000000e4,0x0004003d,0x00000006,0x00000173,0x00000172,0x00050084,0x00000006,0x00000174, + 0x00000171,0x00000173,0x00050041,0x00000009,0x00000175,0x00000150,0x0000004c,0x0004003d, + 0x00000006,0x00000176,0x00000175,0x00050041,0x00000085,0x00000177,0x00000084,0x000000d3, + 0x0004003d,0x00000006,0x00000178,0x00000177,0x00050084,0x00000006,0x00000179,0x00000176, + 0x00000178,0x00050080,0x00000006,0x0000017a,0x00000174,0x00000179,0x00050041,0x00000009, + 0x0000017b,0x00000150,0x0000002d,0x0004003d,0x00000006,0x0000017c,0x0000017b,0x00050080, + 0x00000006,0x0000017d,0x0000017a,0x0000017c,0x0004003d,0x00000006,0x0000017e,0x0000016c, + 0x00050084,0x00000006,0x0000017f,0x0000017d,0x0000017e,0x00050080,0x00000006,0x00000180, + 0x0000016f,0x0000017f,0x0003003e,0x0000016d,0x00000180,0x0004003d,0x00000006,0x00000186, + 0x0000016d,0x00060041,0x00000187,0x00000188,0x00000185,0x000000d0,0x00000186,0x0004003d, + 0x00000006,0x00000189,0x00000188,0x0004003d,0x00000006,0x0000018a,0x0000016d,0x00050080, + 0x00000006,0x0000018b,0x0000018a,0x0000004c,0x00060041,0x00000187,0x0000018c,0x00000185, + 0x000000d0,0x0000018b,0x0004003d,0x00000006,0x0000018d,0x0000018c,0x0004003d,0x00000006, + 0x0000018e,0x0000016c,0x000500ac,0x00000020,0x0000018f,0x0000018e,0x0000009e,0x000300f7, + 0x00000192,0x00000000,0x000400fa,0x0000018f,0x00000191,0x00000197,0x000200f8,0x00000191, + 0x0004003d,0x00000006,0x00000193,0x0000016d,0x00050080,0x00000006,0x00000194,0x00000193, + 0x0000009e,0x00060041,0x00000187,0x00000195,0x00000185,0x000000d0,0x00000194,0x0004003d, + 0x00000006,0x00000196,0x00000195,0x0003003e,0x00000190,0x00000196,0x000200f9,0x00000192, + 0x000200f8,0x00000197,0x0003003e,0x00000190,0x0000002d,0x000200f9,0x00000192,0x000200f8, + 0x00000192,0x0004003d,0x00000006,0x00000198,0x00000190,0x0004003d,0x00000006,0x00000199, + 0x0000016c,0x000500ac,0x00000020,0x0000019a,0x00000199,0x0000009e,0x000300f7,0x0000019d, + 0x00000000,0x000400fa,0x0000019a,0x0000019c,0x000001a2,0x000200f8,0x0000019c,0x0004003d, + 0x00000006,0x0000019e,0x0000016d,0x00050080,0x00000006,0x0000019f,0x0000019e,0x00000046, + 0x00060041,0x00000187,0x000001a0,0x00000185,0x000000d0,0x0000019f,0x0004003d,0x00000006, + 0x000001a1,0x000001a0,0x0003003e,0x0000019b,0x000001a1,0x000200f9,0x0000019d,0x000200f8, + 0x000001a2,0x0003003e,0x0000019b,0x0000002d,0x000200f9,0x0000019d,0x000200f8,0x0000019d, + 0x0004003d,0x00000006,0x000001a3,0x0000019b,0x00070050,0x00000007,0x000001a4,0x00000189, + 0x0000018d,0x00000198,0x000001a3,0x0003003e,0x00000181,0x000001a4,0x00050041,0x00000085, + 0x000001a6,0x00000084,0x000000a2,0x0004003d,0x00000006,0x000001a7,0x000001a6,0x000500c7, + 0x00000006,0x000001a8,0x000001a7,0x0000009e,0x000500ab,0x00000020,0x000001a9,0x000001a8, + 0x0000002d,0x0003003e,0x000001a5,0x000001a9,0x00050041,0x00000009,0x000001ac,0x00000181, + 0x0000002d,0x0004003d,0x00000006,0x000001ad,0x000001ac,0x0003003e,0x000001ab,0x000001ad, + 0x00050041,0x00000009,0x000001af,0x00000181,0x0000004c,0x0004003d,0x00000006,0x000001b0, + 0x000001af,0x0003003e,0x000001ae,0x000001b0,0x0004003d,0x00000020,0x000001b2,0x000001a5, + 0x0003003e,0x000001b1,0x000001b2,0x00080039,0x00000002,0x000001b4,0x0000002a,0x000001ab, + 0x000001ae,0x000001b1,0x000001b3,0x0004003d,0x00000023,0x000001b5,0x000001b3,0x0003003e, + 0x000001aa,0x000001b5,0x0003003e,0x000001b6,0x0000002d,0x000200f9,0x000001b7,0x000200f8, + 0x000001b7,0x000400f6,0x000001b9,0x000001ba,0x00000000,0x000200f9,0x000001bb,0x000200f8, + 0x000001bb,0x0004003d,0x00000006,0x000001bc,0x000001b6,0x000500b0,0x00000020,0x000001bd, + 0x000001bc,0x00000022,0x000400fa,0x000001bd,0x000001b8,0x000001b9,0x000200f8,0x000001b8, + 0x0004003d,0x00000006,0x000001be,0x000001b6,0x000500c7,0x00000006,0x000001bf,0x000001be, + 0x00000046,0x0004003d,0x00000006,0x000001c0,0x000001b6,0x000500c2,0x00000006,0x000001c1, + 0x000001c0,0x000000e4,0x0004003d,0x00000006,0x000001c2,0x000001b6,0x00050041,0x00000009, + 0x000001c3,0x000001aa,0x000001c2,0x0004003d,0x00000006,0x000001c4,0x000001c3,0x00040070, + 0x00000017,0x000001c5,0x000001c4,0x00050088,0x00000017,0x000001c7,0x000001c5,0x000001c6, + 0x00070050,0x00000018,0x000001ca,0x000001c7,0x000001c8,0x000001c8,0x000001c9,0x0003003e, + 0x000001cb,0x000001bf,0x0003003e,0x000001cc,0x000001c1,0x0003003e,0x000001cd,0x000001ca, + 0x00070039,0x00000002,0x000001ce,0x0000001e,0x000001cb,0x000001cc,0x000001cd,0x000200f9, + 0x000001ba,0x000200f8,0x000001ba,0x0004003d,0x00000006,0x000001cf,0x000001b6,0x00050080, + 0x00000006,0x000001d0,0x000001cf,0x000000d3,0x0003003e,0x000001b6,0x000001d0,0x000200f9, + 0x000001b7,0x000200f8,0x000001b9,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000e, + 0x00000000,0x0000000a,0x00030037,0x00000008,0x0000000b,0x00030037,0x00000009,0x0000000c, + 0x00030037,0x00000009,0x0000000d,0x000200f8,0x0000000f,0x0004003b,0x00000009,0x00000032, + 0x00000007,0x0004003b,0x00000009,0x00000036,0x00000007,0x0004003b,0x00000009,0x0000003a, + 0x00000007,0x0004003b,0x00000009,0x00000057,0x00000007,0x0004003d,0x00000006,0x0000002c, + 0x0000000d,0x000500aa,0x00000020,0x0000002e,0x0000002c,0x0000002d,0x000300f7,0x00000030, + 0x00000000,0x000400fa,0x0000002e,0x0000002f,0x00000030,0x000200f8,0x0000002f,0x000200fe, + 0x0000002d,0x000200f8,0x00000030,0x0004003d,0x00000006,0x00000033,0x0000000c,0x000500c2, + 0x00000006,0x00000035,0x00000033,0x00000034,0x0003003e,0x00000032,0x00000035,0x0004003d, + 0x00000006,0x00000037,0x0000000c,0x000500c7,0x00000006,0x00000039,0x00000037,0x00000038, + 0x0003003e,0x00000036,0x00000039,0x0004003d,0x00000006,0x0000003b,0x00000032,0x00050041, + 0x00000009,0x0000003c,0x0000000b,0x0000003b,0x0004003d,0x00000006,0x0000003d,0x0000003c, + 0x0004003d,0x00000006,0x0000003e,0x00000036,0x000500c2,0x00000006,0x0000003f,0x0000003d, + 0x0000003e,0x0003003e,0x0000003a,0x0000003f,0x0004003d,0x00000006,0x00000040,0x00000036, + 0x0004003d,0x00000006,0x00000041,0x0000000d,0x00050080,0x00000006,0x00000042,0x00000040, + 0x00000041,0x000500ac,0x00000020,0x00000044,0x00000042,0x00000043,0x0004003d,0x00000006, + 0x00000045,0x00000032,0x000500b0,0x00000020,0x00000047,0x00000045,0x00000046,0x000500a7, + 0x00000020,0x00000048,0x00000044,0x00000047,0x000300f7,0x0000004a,0x00000000,0x000400fa, + 0x00000048,0x00000049,0x0000004a,0x000200f8,0x00000049,0x0004003d,0x00000006,0x0000004b, + 0x00000032,0x00050080,0x00000006,0x0000004d,0x0000004b,0x0000004c,0x00050041,0x00000009, + 0x0000004e,0x0000000b,0x0000004d,0x0004003d,0x00000006,0x0000004f,0x0000004e,0x0004003d, + 0x00000006,0x00000050,0x00000036,0x00050082,0x00000006,0x00000051,0x00000043,0x00000050, + 0x000500c4,0x00000006,0x00000052,0x0000004f,0x00000051,0x0004003d,0x00000006,0x00000053, + 0x0000003a,0x000500c5,0x00000006,0x00000054,0x00000053,0x00000052,0x0003003e,0x0000003a, + 0x00000054,0x000200f9,0x0000004a,0x000200f8,0x0000004a,0x0004003d,0x00000006,0x00000055, + 0x0000000d,0x000500aa,0x00000020,0x00000056,0x00000055,0x00000043,0x000300f7,0x00000059, + 0x00000000,0x000400fa,0x00000056,0x00000058,0x0000005b,0x000200f8,0x00000058,0x0004003d, + 0x00000006,0x0000005a,0x0000003a,0x0003003e,0x00000057,0x0000005a,0x000200f9,0x00000059, + 0x000200f8,0x0000005b,0x0004003d,0x00000006,0x0000005c,0x0000003a,0x0004003d,0x00000006, + 0x0000005d,0x0000000d,0x000500c4,0x00000006,0x0000005e,0x0000004c,0x0000005d,0x00050082, + 0x00000006,0x0000005f,0x0000005e,0x0000004c,0x000500c7,0x00000006,0x00000060,0x0000005c, + 0x0000005f,0x0003003e,0x00000057,0x00000060,0x000200f9,0x00000059,0x000200f8,0x00000059, + 0x0004003d,0x00000006,0x00000061,0x00000057,0x000200fe,0x00000061,0x00010038,0x00050036, + 0x00000010,0x00000015,0x00000000,0x00000012,0x00030037,0x00000011,0x00000013,0x00030037, + 0x00000011,0x00000014,0x000200f8,0x00000016,0x0004003d,0x00000010,0x00000064,0x00000013, + 0x0004003d,0x00000010,0x00000066,0x00000014,0x00050082,0x00000010,0x00000067,0x00000065, + 0x00000066,0x000500c4,0x00000010,0x00000068,0x00000064,0x00000067,0x0004003d,0x00000010, + 0x00000069,0x00000014,0x00050082,0x00000010,0x0000006a,0x00000065,0x00000069,0x000500c3, + 0x00000010,0x0000006b,0x00000068,0x0000006a,0x000200fe,0x0000006b,0x00010038,0x00050036, + 0x00000002,0x0000001e,0x00000000,0x0000001a,0x00030037,0x00000009,0x0000001b,0x00030037, + 0x00000009,0x0000001c,0x00030037,0x00000019,0x0000001d,0x000200f8,0x0000001f,0x0004003b, + 0x0000006f,0x00000070,0x00000007,0x0004003b,0x0000006f,0x00000076,0x00000007,0x0004003d, + 0x00000071,0x00000074,0x00000073,0x0007004f,0x0000006e,0x00000075,0x00000074,0x00000074, + 0x00000000,0x00000001,0x0003003e,0x00000070,0x00000075,0x0004003d,0x0000006e,0x00000077, + 0x00000070,0x00050050,0x0000006e,0x00000079,0x00000078,0x00000078,0x00050084,0x0000006e, + 0x0000007a,0x00000077,0x00000079,0x0004003d,0x00000006,0x0000007b,0x0000001b,0x0004003d, + 0x00000006,0x0000007c,0x0000001c,0x00050050,0x0000006e,0x0000007d,0x0000007b,0x0000007c, + 0x00050080,0x0000006e,0x0000007e,0x0000007a,0x0000007d,0x0003003e,0x00000076,0x0000007e, + 0x00050041,0x00000009,0x0000007f,0x00000076,0x0000002d,0x0004003d,0x00000006,0x00000080, + 0x0000007f,0x00060041,0x00000085,0x00000086,0x00000084,0x00000034,0x0000002d,0x0004003d, + 0x00000006,0x00000087,0x00000086,0x000500b0,0x00000020,0x00000088,0x00000080,0x00000087, + 0x000300f7,0x0000008a,0x00000000,0x000400fa,0x00000088,0x00000089,0x0000008a,0x000200f8, + 0x00000089,0x00050041,0x00000009,0x0000008b,0x00000076,0x0000004c,0x0004003d,0x00000006, + 0x0000008c,0x0000008b,0x00060041,0x00000085,0x0000008d,0x00000084,0x00000034,0x0000004c, + 0x0004003d,0x00000006,0x0000008e,0x0000008d,0x000500b0,0x00000020,0x0000008f,0x0000008c, + 0x0000008e,0x000200f9,0x0000008a,0x000200f8,0x0000008a,0x000700f5,0x00000020,0x00000090, + 0x00000088,0x0000001f,0x0000008f,0x00000089,0x000300f7,0x00000092,0x00000000,0x000400fa, + 0x00000090,0x00000091,0x00000092,0x000200f8,0x00000091,0x0004003d,0x00000093,0x00000096, + 0x00000095,0x00050041,0x00000098,0x00000099,0x00000084,0x00000097,0x0004003d,0x00000081, + 0x0000009a,0x00000099,0x0004003d,0x0000006e,0x0000009b,0x00000076,0x0004007c,0x00000081, + 0x0000009c,0x0000009b,0x00050080,0x00000081,0x0000009d,0x0000009a,0x0000009c,0x00050041, + 0x0000009f,0x000000a0,0x00000073,0x0000009e,0x0004003d,0x00000006,0x000000a1,0x000000a0, + 0x00050041,0x00000085,0x000000a3,0x00000084,0x000000a2,0x0004003d,0x00000006,0x000000a4, + 0x000000a3,0x000500c2,0x00000006,0x000000a6,0x000000a4,0x000000a5,0x00050080,0x00000006, + 0x000000a7,0x000000a1,0x000000a6,0x0004007c,0x00000010,0x000000a8,0x000000a7,0x00050051, + 0x00000010,0x000000aa,0x0000009d,0x00000000,0x00050051,0x00000010,0x000000ab,0x0000009d, + 0x00000001,0x00060050,0x000000a9,0x000000ac,0x000000aa,0x000000ab,0x000000a8,0x0004003d, + 0x00000018,0x000000ad,0x0000001d,0x00040063,0x00000096,0x000000ac,0x000000ad,0x000200f9, + 0x00000092,0x000200f8,0x00000092,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000002a, + 0x00000000,0x00000025,0x00030037,0x00000009,0x00000026,0x00030037,0x00000009,0x00000027, + 0x00030037,0x00000021,0x00000028,0x00030037,0x00000024,0x00000029,0x000200f8,0x0000002b, + 0x0004003b,0x00000011,0x000000b1,0x00000007,0x0004003b,0x00000011,0x000000b6,0x00000007, + 0x0004003b,0x00000011,0x000000b7,0x00000007,0x0004003b,0x00000011,0x000000bb,0x00000007, + 0x0004003b,0x00000011,0x000000c0,0x00000007,0x0004003b,0x00000011,0x000000c1,0x00000007, + 0x0004003b,0x000000ce,0x000000cf,0x00000007,0x0004003b,0x00000011,0x000000db,0x00000007, + 0x0004003b,0x000000f2,0x000000f3,0x00000007,0x0004003b,0x000000f2,0x000000f9,0x00000007, + 0x0004003b,0x00000011,0x00000107,0x00000007,0x0004003b,0x00000119,0x0000011a,0x00000007, + 0x0004003b,0x00000119,0x00000120,0x00000007,0x0004003b,0x00000008,0x00000134,0x00000007, + 0x0004003b,0x00000009,0x00000138,0x00000007,0x0004003b,0x00000008,0x00000144,0x00000007, + 0x0004003b,0x00000009,0x00000146,0x00000007,0x0004003b,0x00000009,0x00000147,0x00000007, + 0x0004003d,0x00000020,0x000000ae,0x00000028,0x000300f7,0x000000b0,0x00000000,0x000400fa, + 0x000000ae,0x000000af,0x000000c4,0x000200f8,0x000000af,0x0004003d,0x00000006,0x000000b2, + 0x00000026,0x000500c7,0x00000006,0x000000b4,0x000000b2,0x000000b3,0x0004007c,0x00000010, + 0x000000b5,0x000000b4,0x0003003e,0x000000b6,0x000000b5,0x0003003e,0x000000b7,0x000000a5, + 0x00060039,0x00000010,0x000000b8,0x00000015,0x000000b6,0x000000b7,0x0007000c,0x00000010, + 0x000000ba,0x00000001,0x0000002a,0x000000b8,0x000000b9,0x0003003e,0x000000b1,0x000000ba, + 0x0004003d,0x00000006,0x000000bc,0x00000026,0x000500c2,0x00000006,0x000000bd,0x000000bc, + 0x000000a5,0x000500c7,0x00000006,0x000000be,0x000000bd,0x000000b3,0x0004007c,0x00000010, + 0x000000bf,0x000000be,0x0003003e,0x000000c0,0x000000bf,0x0003003e,0x000000c1,0x000000a5, + 0x00060039,0x00000010,0x000000c2,0x00000015,0x000000c0,0x000000c1,0x0007000c,0x00000010, + 0x000000c3,0x00000001,0x0000002a,0x000000c2,0x000000b9,0x0003003e,0x000000bb,0x000000c3, + 0x000200f9,0x000000b0,0x000200f8,0x000000c4,0x0004003d,0x00000006,0x000000c5,0x00000026, + 0x000500c7,0x00000006,0x000000c6,0x000000c5,0x000000b3,0x0004007c,0x00000010,0x000000c7, + 0x000000c6,0x0003003e,0x000000b1,0x000000c7,0x0004003d,0x00000006,0x000000c8,0x00000026, + 0x000500c2,0x00000006,0x000000c9,0x000000c8,0x000000a5,0x000500c7,0x00000006,0x000000ca, + 0x000000c9,0x000000b3,0x0004007c,0x00000010,0x000000cb,0x000000ca,0x0003003e,0x000000bb, + 0x000000cb,0x000200f9,0x000000b0,0x000200f8,0x000000b0,0x0004003d,0x00000010,0x000000d1, + 0x000000b1,0x00050041,0x00000011,0x000000d2,0x000000cf,0x000000d0,0x0003003e,0x000000d2, + 0x000000d1,0x0004003d,0x00000010,0x000000d4,0x000000bb,0x00050041,0x00000011,0x000000d5, + 0x000000cf,0x000000d3,0x0003003e,0x000000d5,0x000000d4,0x0004003d,0x00000010,0x000000d6, + 0x000000b1,0x0004003d,0x00000010,0x000000d7,0x000000bb,0x000500ad,0x00000020,0x000000d8, + 0x000000d6,0x000000d7,0x000300f7,0x000000da,0x00000000,0x000400fa,0x000000d8,0x000000d9, + 0x00000106,0x000200f8,0x000000d9,0x0003003e,0x000000db,0x000000d0,0x000200f9,0x000000dc, + 0x000200f8,0x000000dc,0x000400f6,0x000000de,0x000000df,0x00000000,0x000200f9,0x000000e0, + 0x000200f8,0x000000e0,0x0004003d,0x00000010,0x000000e1,0x000000db,0x000500b1,0x00000020, + 0x000000e3,0x000000e1,0x000000e2,0x000400fa,0x000000e3,0x000000dd,0x000000de,0x000200f8, + 0x000000dd,0x0004003d,0x00000010,0x000000e5,0x000000db,0x00050080,0x00000010,0x000000e6, + 0x000000e4,0x000000e5,0x0004003d,0x00000010,0x000000f0,0x000000db,0x00050082,0x00000010, + 0x000000f1,0x00000034,0x000000f0,0x0003003e,0x000000f3,0x000000ef,0x00050041,0x00000011, + 0x000000f4,0x000000f3,0x000000f1,0x0004003d,0x00000010,0x000000f5,0x000000f4,0x0004003d, + 0x00000010,0x000000f6,0x000000b1,0x00050084,0x00000010,0x000000f7,0x000000f5,0x000000f6, + 0x0004003d,0x00000010,0x000000f8,0x000000db,0x0003003e,0x000000f9,0x000000ef,0x00050041, + 0x00000011,0x000000fa,0x000000f9,0x000000f8,0x0004003d,0x00000010,0x000000fb,0x000000fa, + 0x0004003d,0x00000010,0x000000fc,0x000000bb,0x00050084,0x00000010,0x000000fd,0x000000fb, + 0x000000fc,0x00050080,0x00000010,0x000000fe,0x000000f7,0x000000fd,0x00050080,0x00000010, + 0x00000100,0x000000fe,0x000000ff,0x000500c3,0x00000010,0x00000102,0x00000100,0x00000101, + 0x00050041,0x00000011,0x00000103,0x000000cf,0x000000e6,0x0003003e,0x00000103,0x00000102, + 0x000200f9,0x000000df,0x000200f8,0x000000df,0x0004003d,0x00000010,0x00000104,0x000000db, + 0x00050080,0x00000010,0x00000105,0x00000104,0x000000d3,0x0003003e,0x000000db,0x00000105, + 0x000200f9,0x000000dc,0x000200f8,0x000000de,0x000200f9,0x000000da,0x000200f8,0x00000106, + 0x0003003e,0x00000107,0x000000d0,0x000200f9,0x00000108,0x000200f8,0x00000108,0x000400f6, + 0x0000010a,0x0000010b,0x00000000,0x000200f9,0x0000010c,0x000200f8,0x0000010c,0x0004003d, + 0x00000010,0x0000010d,0x00000107,0x000500b1,0x00000020,0x0000010e,0x0000010d,0x00000097, + 0x000400fa,0x0000010e,0x00000109,0x0000010a,0x000200f8,0x00000109,0x0004003d,0x00000010, + 0x0000010f,0x00000107,0x00050080,0x00000010,0x00000110,0x000000e4,0x0000010f,0x0004003d, + 0x00000010,0x00000117,0x00000107,0x00050082,0x00000010,0x00000118,0x000000a2,0x00000117, + 0x0003003e,0x0000011a,0x00000116,0x00050041,0x00000011,0x0000011b,0x0000011a,0x00000118, + 0x0004003d,0x00000010,0x0000011c,0x0000011b,0x0004003d,0x00000010,0x0000011d,0x000000b1, + 0x00050084,0x00000010,0x0000011e,0x0000011c,0x0000011d,0x0004003d,0x00000010,0x0000011f, + 0x00000107,0x0003003e,0x00000120,0x00000116,0x00050041,0x00000011,0x00000121,0x00000120, + 0x0000011f,0x0004003d,0x00000010,0x00000122,0x00000121,0x0004003d,0x00000010,0x00000123, + 0x000000bb,0x00050084,0x00000010,0x00000124,0x00000122,0x00000123,0x00050080,0x00000010, + 0x00000125,0x0000011e,0x00000124,0x00050080,0x00000010,0x00000126,0x00000125,0x000000ff, + 0x000500c3,0x00000010,0x00000127,0x00000126,0x00000101,0x00050041,0x00000011,0x00000128, + 0x000000cf,0x00000110,0x0003003e,0x00000128,0x00000127,0x000200f9,0x0000010b,0x000200f8, + 0x0000010b,0x0004003d,0x00000010,0x00000129,0x00000107,0x00050080,0x00000010,0x0000012a, + 0x00000129,0x000000d3,0x0003003e,0x00000107,0x0000012a,0x000200f9,0x00000108,0x000200f8, + 0x0000010a,0x0004003d,0x00000020,0x0000012b,0x00000028,0x000600a9,0x00000010,0x0000012c, + 0x0000012b,0x000000b9,0x000000d0,0x00050041,0x00000011,0x0000012d,0x000000cf,0x000000e2, + 0x0003003e,0x0000012d,0x0000012c,0x0004003d,0x00000020,0x0000012f,0x00000028,0x000600a9, + 0x00000010,0x00000132,0x0000012f,0x00000130,0x00000131,0x00050041,0x00000011,0x00000133, + 0x000000cf,0x0000012e,0x0003003e,0x00000133,0x00000132,0x000200f9,0x000000da,0x000200f8, + 0x000000da,0x0004003d,0x00000006,0x00000135,0x00000026,0x0004003d,0x00000006,0x00000136, + 0x00000027,0x00070050,0x00000007,0x00000137,0x00000135,0x00000136,0x0000002d,0x0000002d, + 0x0003003e,0x00000134,0x00000137,0x0003003e,0x00000138,0x0000002d,0x000200f9,0x00000139, + 0x000200f8,0x00000139,0x000400f6,0x0000013b,0x0000013c,0x00000000,0x000200f9,0x0000013d, + 0x000200f8,0x0000013d,0x0004003d,0x00000006,0x0000013e,0x00000138,0x000500b0,0x00000020, + 0x0000013f,0x0000013e,0x00000022,0x000400fa,0x0000013f,0x0000013a,0x0000013b,0x000200f8, + 0x0000013a,0x0004003d,0x00000006,0x00000140,0x00000138,0x0004003d,0x00000006,0x00000141, + 0x00000138,0x00050084,0x00000006,0x00000142,0x00000046,0x00000141,0x00050080,0x00000006, + 0x00000143,0x00000022,0x00000142,0x0004003d,0x00000007,0x00000145,0x00000134,0x0003003e, + 0x00000144,0x00000145,0x0003003e,0x00000146,0x00000143,0x0003003e,0x00000147,0x00000046, + 0x00070039,0x00000006,0x00000148,0x0000000e,0x00000144,0x00000146,0x00000147,0x00050041, + 0x00000011,0x00000149,0x000000cf,0x00000148,0x0004003d,0x00000010,0x0000014a,0x00000149, + 0x0004007c,0x00000006,0x0000014b,0x0000014a,0x000500c7,0x00000006,0x0000014c,0x0000014b, + 0x000000b3,0x00050041,0x00000009,0x0000014d,0x00000029,0x00000140,0x0003003e,0x0000014d, + 0x0000014c,0x000200f9,0x0000013c,0x000200f8,0x0000013c,0x0004003d,0x00000006,0x0000014e, + 0x00000138,0x00050080,0x00000006,0x0000014f,0x0000014e,0x000000d3,0x0003003e,0x00000138, + 0x0000014f,0x000200f9,0x00000139,0x000200f8,0x0000013b,0x000100fd,0x00010038 +}; + // 1115.1.0 +static const uint32_t spv_bc5[] = { + 0x07230203,0x00010300,0x0008000b,0x000002d7,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000073, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000e,0x73746962,0x34757628,0x3b31753b,0x003b3175,0x00030005,0x0000000b,0x00000062, + 0x00030005,0x0000000c,0x00736f70,0x00030005,0x0000000d,0x0000006e,0x00050005,0x00000015, + 0x74786573,0x3b316928,0x003b3169,0x00030005,0x00000013,0x00000076,0x00030005,0x00000014, + 0x0000006e,0x00060005,0x0000001e,0x28747570,0x753b3175,0x66763b31,0x00003b34,0x00030005, + 0x0000001b,0x00007874,0x00030005,0x0000001c,0x00007974,0x00030005,0x0000001d,0x00000076, + 0x000a0005,0x0000002a,0x5f346362,0x6e616863,0x286c656e,0x753b3175,0x31623b31,0x5b31753b, + 0x3b5d3631,0x00000000,0x00030005,0x00000026,0x00006f6c,0x00030005,0x00000027,0x00006968, + 0x00030005,0x00000028,0x006e6773,0x00030005,0x00000029,0x00000076,0x00030005,0x00000032, + 0x00006977,0x00030005,0x00000036,0x0000006f,0x00030005,0x0000003a,0x00000076,0x00030005, + 0x00000070,0x006b6c62,0x00080005,0x00000073,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x00000044,0x00030005,0x00000076,0x00000070,0x00030005,0x00000082,0x00004350, + 0x00060006,0x00000082,0x00000000,0x5f637273,0x64726f77,0x00000000,0x00060006,0x00000082, + 0x00000001,0x5f776f72,0x636f6c62,0x0000736b,0x00070006,0x00000082,0x00000002,0x6579616c, + 0x6c625f72,0x736b636f,0x00000000,0x00050006,0x00000082,0x00000003,0x67616c66,0x00000073, + 0x00050006,0x00000082,0x00000004,0x5f747364,0x0066666f,0x00050006,0x00000082,0x00000005, + 0x65747865,0x0000746e,0x00030005,0x00000084,0x00006370,0x00030005,0x00000095,0x00747364, + 0x00030005,0x000000b1,0x00003065,0x00040005,0x000000b6,0x61726170,0x0000006d,0x00040005, + 0x000000b7,0x61726170,0x0000006d,0x00030005,0x000000bb,0x00003165,0x00040005,0x000000c0, + 0x61726170,0x0000006d,0x00040005,0x000000c1,0x61726170,0x0000006d,0x00030005,0x000000cf, + 0x006c6170,0x00030005,0x000000db,0x00000069,0x00050005,0x000000f3,0x65646e69,0x6c626178, + 0x00000065,0x00050005,0x000000f9,0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000107, + 0x00000069,0x00050005,0x0000011a,0x65646e69,0x6c626178,0x00000065,0x00050005,0x00000120, + 0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000134,0x00000062,0x00030005,0x00000138, + 0x00000074,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005,0x00000146,0x61726170, + 0x0000006d,0x00040005,0x00000147,0x61726170,0x0000006d,0x00030005,0x00000150,0x006b6c62, + 0x00040005,0x00000153,0x6b6c626e,0x00000000,0x00040005,0x0000016c,0x64726f77,0x00000073, + 0x00040005,0x0000016d,0x65736162,0x00000000,0x00030005,0x00000181,0x00000062,0x00030005, + 0x00000183,0x00637253,0x00040006,0x00000183,0x00000000,0x00000077,0x00030005,0x00000185, + 0x00637273,0x00030005,0x000001a5,0x006e6773,0x00030005,0x000001aa,0x00000072,0x00040005, + 0x000001ab,0x61726170,0x0000006d,0x00040005,0x000001ae,0x61726170,0x0000006d,0x00040005, + 0x000001b1,0x61726170,0x0000006d,0x00040005,0x000001b3,0x61726170,0x0000006d,0x00030005, + 0x000001b6,0x00000067,0x00040005,0x000001b7,0x61726170,0x0000006d,0x00040005,0x000001ba, + 0x61726170,0x0000006d,0x00040005,0x000001bd,0x61726170,0x0000006d,0x00040005,0x000001bf, + 0x61726170,0x0000006d,0x00030005,0x000001c2,0x00000074,0x00040005,0x000001dc,0x61726170, + 0x0000006d,0x00040005,0x000001dd,0x61726170,0x0000006d,0x00040005,0x000001de,0x61726170, + 0x0000006d,0x00040047,0x00000073,0x0000000b,0x0000001c,0x00030047,0x00000082,0x00000002, + 0x00050048,0x00000082,0x00000000,0x00000023,0x00000000,0x00050048,0x00000082,0x00000001, + 0x00000023,0x00000004,0x00050048,0x00000082,0x00000002,0x00000023,0x00000008,0x00050048, + 0x00000082,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000082,0x00000004,0x00000023, + 0x00000010,0x00050048,0x00000082,0x00000005,0x00000023,0x00000018,0x00030047,0x00000095, + 0x00000019,0x00040047,0x00000095,0x00000021,0x00000001,0x00040047,0x00000095,0x00000022, + 0x00000000,0x00040047,0x00000182,0x00000006,0x00000004,0x00030047,0x00000183,0x00000002, + 0x00040048,0x00000183,0x00000000,0x00000018,0x00050048,0x00000183,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000185,0x00000018,0x00040047,0x00000185,0x00000021,0x00000000, + 0x00040047,0x00000185,0x00000022,0x00000000,0x00040047,0x000001e2,0x0000000b,0x00000019, + 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020, + 0x00000000,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000007, + 0x00000007,0x00040020,0x00000009,0x00000007,0x00000006,0x00060021,0x0000000a,0x00000006, + 0x00000008,0x00000009,0x00000009,0x00040015,0x00000010,0x00000020,0x00000001,0x00040020, + 0x00000011,0x00000007,0x00000010,0x00050021,0x00000012,0x00000010,0x00000011,0x00000011, + 0x00030016,0x00000017,0x00000020,0x00040017,0x00000018,0x00000017,0x00000004,0x00040020, + 0x00000019,0x00000007,0x00000018,0x00060021,0x0000001a,0x00000002,0x00000009,0x00000009, + 0x00000019,0x00020014,0x00000020,0x00040020,0x00000021,0x00000007,0x00000020,0x0004002b, + 0x00000006,0x00000022,0x00000010,0x0004001c,0x00000023,0x00000006,0x00000022,0x00040020, + 0x00000024,0x00000007,0x00000023,0x00070021,0x00000025,0x00000002,0x00000009,0x00000009, + 0x00000021,0x00000024,0x0004002b,0x00000006,0x0000002d,0x00000000,0x0004002b,0x00000010, + 0x00000034,0x00000005,0x0004002b,0x00000006,0x00000038,0x0000001f,0x0004002b,0x00000006, + 0x00000043,0x00000020,0x0004002b,0x00000006,0x00000046,0x00000003,0x0004002b,0x00000006, + 0x0000004c,0x00000001,0x0004002b,0x00000010,0x00000065,0x00000020,0x00040017,0x0000006e, + 0x00000006,0x00000002,0x00040020,0x0000006f,0x00000007,0x0000006e,0x00040017,0x00000071, + 0x00000006,0x00000003,0x00040020,0x00000072,0x00000001,0x00000071,0x0004003b,0x00000072, + 0x00000073,0x00000001,0x0004002b,0x00000006,0x00000078,0x00000004,0x00040017,0x00000081, + 0x00000010,0x00000002,0x0008001e,0x00000082,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000081,0x0000006e,0x00040020,0x00000083,0x00000009,0x00000082,0x0004003b,0x00000083, + 0x00000084,0x00000009,0x00040020,0x00000085,0x00000009,0x00000006,0x00090019,0x00000093, + 0x00000017,0x00000001,0x00000000,0x00000001,0x00000000,0x00000002,0x0000000d,0x00040020, + 0x00000094,0x00000000,0x00000093,0x0004003b,0x00000094,0x00000095,0x00000000,0x0004002b, + 0x00000010,0x00000097,0x00000004,0x00040020,0x00000098,0x00000009,0x00000081,0x0004002b, + 0x00000006,0x0000009e,0x00000002,0x00040020,0x0000009f,0x00000001,0x00000006,0x0004002b, + 0x00000010,0x000000a2,0x00000003,0x0004002b,0x00000010,0x000000a5,0x00000008,0x00040017, + 0x000000a9,0x00000010,0x00000003,0x0004002b,0x00000006,0x000000b3,0x000000ff,0x0004002b, + 0x00000010,0x000000b9,0xffffff81,0x0004002b,0x00000006,0x000000cc,0x00000008,0x0004001c, + 0x000000cd,0x00000010,0x000000cc,0x00040020,0x000000ce,0x00000007,0x000000cd,0x0004002b, + 0x00000010,0x000000d0,0x00000000,0x0004002b,0x00000010,0x000000d3,0x00000001,0x0004002b, + 0x00000010,0x000000e2,0x00000006,0x0004002b,0x00000010,0x000000e4,0x00000002,0x0004002b, + 0x00000006,0x000000e7,0x00000006,0x0004001c,0x000000e8,0x00000010,0x000000e7,0x0004002b, + 0x00000010,0x000000e9,0x00002493,0x0004002b,0x00000010,0x000000ea,0x00004924,0x0004002b, + 0x00000010,0x000000eb,0x00006db6,0x0004002b,0x00000010,0x000000ec,0x0000924a,0x0004002b, + 0x00000010,0x000000ed,0x0000b6dc,0x0004002b,0x00000010,0x000000ee,0x0000db6d,0x0009002c, + 0x000000e8,0x000000ef,0x000000e9,0x000000ea,0x000000eb,0x000000ec,0x000000ed,0x000000ee, + 0x00040020,0x000000f2,0x00000007,0x000000e8,0x0004002b,0x00000010,0x000000ff,0x00008000, + 0x0004002b,0x00000010,0x00000101,0x00000010,0x0004001c,0x00000111,0x00000010,0x00000078, + 0x0004002b,0x00000010,0x00000112,0x00003333,0x0004002b,0x00000010,0x00000113,0x00006667, + 0x0004002b,0x00000010,0x00000114,0x00009999,0x0004002b,0x00000010,0x00000115,0x0000cccd, + 0x0007002c,0x00000111,0x00000116,0x00000112,0x00000113,0x00000114,0x00000115,0x00040020, + 0x00000119,0x00000007,0x00000111,0x0004002b,0x00000010,0x0000012e,0x00000007,0x0004002b, + 0x00000010,0x00000130,0x0000007f,0x0004002b,0x00000010,0x00000131,0x000000ff,0x00040020, + 0x00000154,0x00000009,0x0000006e,0x0003001d,0x00000182,0x00000006,0x0003001e,0x00000183, + 0x00000182,0x00040020,0x00000184,0x0000000c,0x00000183,0x0004003b,0x00000184,0x00000185, + 0x0000000c,0x00040020,0x00000187,0x0000000c,0x00000006,0x0004002b,0x00000017,0x000001d2, + 0x437f0000,0x0004002b,0x00000017,0x000001d9,0x00000000,0x0004002b,0x00000017,0x000001da, + 0x3f800000,0x0006002c,0x00000071,0x000001e2,0x000000cc,0x000000cc,0x0000004c,0x0004001c, + 0x000001e3,0x00000010,0x00000043,0x0004002b,0x00000010,0x000001e4,0x0000000a,0x0004002b, + 0x00000010,0x000001e5,0xffffffff,0x0004002b,0x00000010,0x000001e6,0x0000000b,0x0004002b, + 0x00000010,0x000001e7,0x0000000c,0x0004002b,0x00000010,0x000001e8,0x0000000d,0x0004002b, + 0x00000010,0x000001e9,0x00000009,0x0023002c,0x000001e3,0x000001ea,0x000000d0,0x000000d3, + 0x000000e4,0x000001e4,0x000001e5,0x000001e5,0x000000a2,0x000001e6,0x000001e5,0x000001e5, + 0x00000097,0x000001e7,0x000001e5,0x000001e5,0x00000034,0x000001e8,0x000001e5,0x000001e5, + 0x000000e2,0x000001e5,0x000001e5,0x000001e5,0x0000012e,0x000001e5,0x000001e5,0x000001e5, + 0x000000a5,0x000001e5,0x000001e5,0x000001e5,0x000001e9,0x000001e5,0x0004002b,0x00000006, + 0x000001eb,0x0000000f,0x0004001c,0x000001ec,0x00000006,0x000001eb,0x0004002b,0x00000006, + 0x000001ed,0x00000014,0x0004002b,0x00000006,0x000001ee,0x0000002c,0x0004002b,0x00000006, + 0x000001ef,0x0000003f,0x0004002b,0x00000006,0x000001f0,0x00000054,0x0004002b,0x00000006, + 0x000001f1,0x00000069,0x0004002b,0x00000006,0x000001f2,0x0000007d,0x0004002b,0x00000006, + 0x000001f3,0x00000091,0x0004002b,0x00000006,0x000001f4,0x000000a7,0x0004002b,0x00000006, + 0x000001f5,0x000000bd,0x0004002b,0x00000006,0x000001f6,0x000000d5,0x0004002b,0x00000006, + 0x000001f7,0x000000db,0x0004002b,0x00000006,0x000001f8,0x000000e4,0x0004002b,0x00000006, + 0x000001f9,0x000000ed,0x0004002b,0x00000006,0x000001fa,0x000000f6,0x0012002c,0x000001ec, + 0x000001fb,0x0000002d,0x000001ed,0x000001ee,0x000001ef,0x000001f0,0x000001f1,0x000001f2, + 0x000001f3,0x000001f4,0x000001f5,0x000001f6,0x000001f7,0x000001f8,0x000001f9,0x000001fa, + 0x0004001c,0x000001fc,0x00000006,0x000001fa,0x0004002b,0x00000006,0x000001fd,0x00000816, + 0x0004002b,0x00000006,0x000001fe,0x0000081a,0x0004002b,0x00000006,0x000001ff,0x0000081b, + 0x0004002b,0x00000006,0x00000200,0x000000a0,0x0004002b,0x00000006,0x00000201,0x000000a4, + 0x0004002b,0x00000006,0x00000202,0x000000a8,0x0004002b,0x00000006,0x00000203,0x00000051, + 0x0004002b,0x00000006,0x00000204,0x00000817,0x0004002b,0x00000006,0x00000205,0x00000046, + 0x0004002b,0x00000006,0x00000206,0x00000055,0x0004002b,0x00000006,0x00000207,0x0000001b, + 0x0004002b,0x00000006,0x00000208,0x00000047,0x0004002b,0x00000006,0x00000209,0x00000059, + 0x0004002b,0x00000006,0x0000020a,0x0000021b,0x0004002b,0x00000006,0x0000020b,0x0000004a, + 0x0004002b,0x00000006,0x0000020c,0x00000052,0x0004002b,0x00000006,0x0000020d,0x0000041b, + 0x0004002b,0x00000006,0x0000020e,0x00000053,0x0004002b,0x00000006,0x0000020f,0x0000061b, + 0x0004002b,0x00000006,0x00000210,0x0000005c,0x0004002b,0x00000006,0x00000211,0x00000a16, + 0x0004002b,0x00000006,0x00000212,0x00000a17,0x0004002b,0x00000006,0x00000213,0x00000070, + 0x0004002b,0x00000006,0x00000214,0x00000074,0x0004002b,0x00000006,0x00000215,0x00000a1a, + 0x0004002b,0x00000006,0x00000216,0x00000078,0x0004002b,0x00000006,0x00000217,0x00000a1b, + 0x0004002b,0x00000006,0x00000218,0x00000061,0x0004002b,0x00000006,0x00000219,0x00000065, + 0x0004002b,0x00000006,0x0000021a,0x00000062,0x0004002b,0x00000006,0x0000021b,0x00000063, + 0x0004002b,0x00000006,0x0000021c,0x00001410,0x0004002b,0x00000006,0x0000021d,0x00000045, + 0x0004002b,0x00000006,0x0000021e,0x00001414,0x0004002b,0x00000006,0x0000021f,0x00000049, + 0x0004002b,0x00000006,0x00000220,0x00001418,0x0004002b,0x00000006,0x00000221,0x00000041, + 0x0004002b,0x00000006,0x00000222,0x00000042,0x0004002b,0x00000006,0x00000223,0x00000043, + 0x0004002b,0x00000006,0x00000224,0x00000090,0x0004002b,0x00000006,0x00000225,0x00000094, + 0x0004002b,0x00000006,0x00000226,0x00000098,0x0004002b,0x00000006,0x00000227,0x00000080, + 0x0004002b,0x00000006,0x00000228,0x00000084,0x0004002b,0x00000006,0x00000229,0x00000088, + 0x0004002b,0x00000006,0x0000022a,0x00000060,0x0004002b,0x00000006,0x0000022b,0x00000064, + 0x0004002b,0x00000006,0x0000022c,0x00000068,0x0004002b,0x00000006,0x0000022d,0x000000a1, + 0x0004002b,0x00000006,0x0000022e,0x000000a5,0x0004002b,0x00000006,0x0000022f,0x000000a9, + 0x0004002b,0x00000006,0x00000230,0x00000095,0x0004002b,0x00000006,0x00000231,0x00000099, + 0x0004002b,0x00000006,0x00000232,0x00000081,0x0004002b,0x00000006,0x00000233,0x00005420, + 0x0004002b,0x00000006,0x00000234,0x00000085,0x0004002b,0x00000006,0x00000235,0x00005424, + 0x0004002b,0x00000006,0x00000236,0x00000089,0x0004002b,0x00000006,0x00000237,0x00005428, + 0x0004002b,0x00000006,0x00000238,0x00005460,0x0004002b,0x00000006,0x00000239,0x00005464, + 0x0004002b,0x00000006,0x0000023a,0x00005468,0x00f9002c,0x000001fc,0x0000023b,0x000001fd, + 0x000001fe,0x000001ff,0x00000200,0x00000201,0x00000202,0x00000203,0x00000204,0x00000205, + 0x00000206,0x00000207,0x00000208,0x00000209,0x0000020a,0x0000020b,0x0000020c,0x0000020d, + 0x0000020e,0x0000020f,0x00000210,0x00000211,0x00000204,0x00000212,0x00000213,0x00000207, + 0x0000020a,0x000001fe,0x00000214,0x00000215,0x0000020d,0x000001fd,0x00000216,0x0000020f, + 0x00000217,0x000001ff,0x00000218,0x00000205,0x00000219,0x00000208,0x000001f1,0x0000020b, + 0x0000021a,0x0000021b,0x00000210,0x00000200,0x00000201,0x00000202,0x00000203,0x0000021c, + 0x00000205,0x0000021d,0x0000021e,0x00000207,0x00000208,0x0000021f,0x00000220,0x0000020a, + 0x0000020b,0x0000020c,0x0000020d,0x0000020e,0x0000020f,0x00000210,0x00000200,0x00000201, + 0x00000202,0x00000221,0x0000021c,0x00000204,0x00000205,0x00000206,0x0000021e,0x00000208, + 0x0000021f,0x00000220,0x0000020a,0x0000020b,0x00000222,0x00000207,0x0000020d,0x00000223, + 0x000001fd,0x0000020f,0x00000210,0x00000200,0x00000201,0x00000202,0x00000221,0x0000021c, + 0x000001fe,0x00000205,0x0000021d,0x0000021e,0x00000207,0x00000208,0x00000209,0x00000220, + 0x0000020b,0x00000222,0x0000020a,0x0000020d,0x00000223,0x000001ff,0x0000020f,0x00000210, + 0x00000224,0x000001fe,0x00000225,0x000001fd,0x00000226,0x000001ff,0x00000203,0x00000204, + 0x00000205,0x00000206,0x00000207,0x00000208,0x00000209,0x0000020a,0x0000020b,0x0000020c, + 0x0000020d,0x0000020e,0x0000020f,0x00000210,0x00000227,0x00000204,0x000001fe,0x00000228, + 0x0000020d,0x000001fd,0x00000229,0x0000020f,0x000001ff,0x00000218,0x00000205,0x00000206, + 0x00000207,0x00000208,0x00000209,0x0000020a,0x0000020b,0x0000021a,0x0000021b,0x00000210, + 0x00000227,0x00000207,0x000001fe,0x00000228,0x00000211,0x000001fd,0x00000229,0x00000212, + 0x000001ff,0x00000203,0x00000204,0x00000205,0x00000219,0x00000208,0x00000209,0x0000020a, + 0x0000020b,0x0000020c,0x0000020d,0x0000020e,0x0000020f,0x00000210,0x00000227,0x0000020a, + 0x000001fe,0x00000228,0x00000215,0x000001fd,0x00000229,0x00000217,0x000001ff,0x00000203, + 0x00000204,0x00000205,0x00000206,0x00000207,0x00000208,0x000001f1,0x0000020b,0x0000020c, + 0x0000020d,0x0000020e,0x0000020f,0x00000210,0x0000022a,0x00000204,0x00000207,0x0000020a, + 0x000001fe,0x0000022b,0x00000211,0x00000215,0x0000020d,0x000001fd,0x0000022c,0x00000212, + 0x0000020f,0x00000217,0x000001ff,0x00000218,0x00000205,0x00000219,0x00000208,0x000001f1, + 0x0000020b,0x0000021a,0x0000021b,0x00000210,0x00000200,0x00000201,0x00000202,0x0000022d, + 0x0000022e,0x0000022f,0x00000200,0x00000201,0x00000202,0x000001f3,0x0000021c,0x00000230, + 0x0000021e,0x00000231,0x00000220,0x00000200,0x00000201,0x00000202,0x00000232,0x00000233, + 0x00000234,0x00000235,0x00000236,0x00000237,0x00000200,0x00000201,0x00000202,0x00000221, + 0x00000238,0x0000021d,0x00000239,0x0000021f,0x0000023a,0x0004002b,0x00000006,0x0000023c, + 0x0000000e,0x0004001c,0x0000023d,0x00000010,0x0000023c,0x0011002c,0x0000023d,0x0000023e, + 0x000001e4,0x0000012e,0x000001e6,0x000001e6,0x000001e6,0x000001e9,0x000000a5,0x000000a5, + 0x000000a5,0x000000e2,0x000001e4,0x000001e6,0x000001e7,0x00000101,0x0011002c,0x0000023d, + 0x0000023f,0x00000034,0x000000e2,0x00000034,0x00000097,0x00000097,0x00000034,0x000000e2, + 0x00000034,0x00000034,0x000000e2,0x000001e4,0x000001e9,0x000000a5,0x00000097,0x0011002c, + 0x0000023d,0x00000240,0x00000034,0x000000e2,0x00000097,0x00000034,0x00000097,0x00000034, + 0x00000034,0x000000e2,0x00000034,0x000000e2,0x000001e4,0x000001e9,0x000000a5,0x00000097, + 0x0011002c,0x0000023d,0x00000241,0x00000034,0x000000e2,0x00000097,0x00000097,0x00000034, + 0x00000034,0x00000034,0x00000034,0x000000e2,0x000000e2,0x000001e4,0x000001e9,0x000000a5, + 0x00000097,0x0004002b,0x00000006,0x00000242,0x00000040,0x0004001c,0x00000243,0x00000006, + 0x00000242,0x0004002b,0x00000006,0x00000244,0x50505050,0x0004002b,0x00000006,0x00000245, + 0x40404040,0x0004002b,0x00000006,0x00000246,0x54545454,0x0004002b,0x00000006,0x00000247, + 0x54505040,0x0004002b,0x00000006,0x00000248,0x50404000,0x0004002b,0x00000006,0x00000249, + 0x55545450,0x0004002b,0x00000006,0x0000024a,0x55545040,0x0004002b,0x00000006,0x0000024b, + 0x54504000,0x0004002b,0x00000006,0x0000024c,0x50400000,0x0004002b,0x00000006,0x0000024d, + 0x55555450,0x0004002b,0x00000006,0x0000024e,0x55544000,0x0004002b,0x00000006,0x0000024f, + 0x54400000,0x0004002b,0x00000006,0x00000250,0x55555440,0x0004002b,0x00000006,0x00000251, + 0x55550000,0x0004002b,0x00000006,0x00000252,0x55555500,0x0004002b,0x00000006,0x00000253, + 0x55000000,0x0004002b,0x00000006,0x00000254,0x55150100,0x0004002b,0x00000006,0x00000255, + 0x00004054,0x0004002b,0x00000006,0x00000256,0x15010000,0x0004002b,0x00000006,0x00000257, + 0x00405054,0x0004002b,0x00000006,0x00000258,0x00004050,0x0004002b,0x00000006,0x00000259, + 0x15050100,0x0004002b,0x00000006,0x0000025a,0x05010000,0x0004002b,0x00000006,0x0000025b, + 0x40505054,0x0004002b,0x00000006,0x0000025c,0x00404050,0x0004002b,0x00000006,0x0000025d, + 0x05010100,0x0004002b,0x00000006,0x0000025e,0x14141414,0x0004002b,0x00000006,0x0000025f, + 0x05141450,0x0004002b,0x00000006,0x00000260,0x01155440,0x0004002b,0x00000006,0x00000261, + 0x00555500,0x0004002b,0x00000006,0x00000262,0x15014054,0x0004002b,0x00000006,0x00000263, + 0x05414150,0x0004002b,0x00000006,0x00000264,0x44444444,0x0004002b,0x00000006,0x00000265, + 0x55005500,0x0004002b,0x00000006,0x00000266,0x11441144,0x0004002b,0x00000006,0x00000267, + 0x05055050,0x0004002b,0x00000006,0x00000268,0x05500550,0x0004002b,0x00000006,0x00000269, + 0x11114444,0x0004002b,0x00000006,0x0000026a,0x41144114,0x0004002b,0x00000006,0x0000026b, + 0x44111144,0x0004002b,0x00000006,0x0000026c,0x15055054,0x0004002b,0x00000006,0x0000026d, + 0x01055040,0x0004002b,0x00000006,0x0000026e,0x05041050,0x0004002b,0x00000006,0x0000026f, + 0x05455150,0x0004002b,0x00000006,0x00000270,0x14414114,0x0004002b,0x00000006,0x00000271, + 0x50050550,0x0004002b,0x00000006,0x00000272,0x41411414,0x0004002b,0x00000006,0x00000273, + 0x00141400,0x0004002b,0x00000006,0x00000274,0x00041504,0x0004002b,0x00000006,0x00000275, + 0x00105410,0x0004002b,0x00000006,0x00000276,0x10541000,0x0004002b,0x00000006,0x00000277, + 0x04150400,0x0004002b,0x00000006,0x00000278,0x50410514,0x0004002b,0x00000006,0x00000279, + 0x41051450,0x0004002b,0x00000006,0x0000027a,0x05415014,0x0004002b,0x00000006,0x0000027b, + 0x14054150,0x0004002b,0x00000006,0x0000027c,0x41050514,0x0004002b,0x00000006,0x0000027d, + 0x41505014,0x0004002b,0x00000006,0x0000027e,0x40011554,0x0004002b,0x00000006,0x0000027f, + 0x54150140,0x0004002b,0x00000006,0x00000280,0x50505500,0x0004002b,0x00000006,0x00000281, + 0x00555050,0x0004002b,0x00000006,0x00000282,0x15151010,0x0004002b,0x00000006,0x00000283, + 0x54540404,0x0043002c,0x00000243,0x00000284,0x00000244,0x00000245,0x00000246,0x00000247, + 0x00000248,0x00000249,0x0000024a,0x0000024b,0x0000024c,0x0000024d,0x0000024e,0x0000024f, + 0x00000250,0x00000251,0x00000252,0x00000253,0x00000254,0x00000255,0x00000256,0x00000257, + 0x00000258,0x00000259,0x0000025a,0x0000025b,0x0000025c,0x0000025d,0x0000025e,0x0000025f, + 0x00000260,0x00000261,0x00000262,0x00000263,0x00000264,0x00000265,0x00000266,0x00000267, + 0x00000268,0x00000269,0x0000026a,0x0000026b,0x0000026c,0x0000026d,0x0000026e,0x0000026f, + 0x00000270,0x00000271,0x00000272,0x00000273,0x00000274,0x00000275,0x00000276,0x00000277, + 0x00000278,0x00000279,0x0000027a,0x0000027b,0x0000027c,0x0000027d,0x0000027e,0x0000027f, + 0x00000280,0x00000281,0x00000282,0x00000283,0x0043002c,0x00000243,0x00000285,0x000001eb, + 0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb, + 0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x000001eb, + 0x0000009e,0x000000cc,0x0000009e,0x0000009e,0x000000cc,0x000000cc,0x000001eb,0x0000009e, + 0x000000cc,0x0000009e,0x0000009e,0x000000cc,0x000000cc,0x0000009e,0x0000009e,0x000001eb, + 0x000001eb,0x000000e7,0x000000cc,0x0000009e,0x000000cc,0x000001eb,0x000001eb,0x0000009e, + 0x000000cc,0x0000009e,0x0000009e,0x0000009e,0x000001eb,0x000001eb,0x000000e7,0x000000e7, + 0x0000009e,0x000000e7,0x000000cc,0x000001eb,0x000001eb,0x0000009e,0x0000009e,0x000001eb, + 0x000001eb,0x000001eb,0x000001eb,0x000001eb,0x0000009e,0x0000009e,0x000001eb,0x0004002b, + 0x00000006,0x00000286,0xaa685050,0x0004002b,0x00000006,0x00000287,0x6a5a5040,0x0004002b, + 0x00000006,0x00000288,0x5a5a4200,0x0004002b,0x00000006,0x00000289,0x5450a0a8,0x0004002b, + 0x00000006,0x0000028a,0xa5a50000,0x0004002b,0x00000006,0x0000028b,0xa0a05050,0x0004002b, + 0x00000006,0x0000028c,0x5555a0a0,0x0004002b,0x00000006,0x0000028d,0x5a5a5050,0x0004002b, + 0x00000006,0x0000028e,0xaa550000,0x0004002b,0x00000006,0x0000028f,0xaa555500,0x0004002b, + 0x00000006,0x00000290,0xaaaa5500,0x0004002b,0x00000006,0x00000291,0x90909090,0x0004002b, + 0x00000006,0x00000292,0x94949494,0x0004002b,0x00000006,0x00000293,0xa4a4a4a4,0x0004002b, + 0x00000006,0x00000294,0xa9a59450,0x0004002b,0x00000006,0x00000295,0x2a0a4250,0x0004002b, + 0x00000006,0x00000296,0xa5945040,0x0004002b,0x00000006,0x00000297,0x0a425054,0x0004002b, + 0x00000006,0x00000298,0xa5a5a500,0x0004002b,0x00000006,0x00000299,0x55a0a0a0,0x0004002b, + 0x00000006,0x0000029a,0xa8a85454,0x0004002b,0x00000006,0x0000029b,0x6a6a4040,0x0004002b, + 0x00000006,0x0000029c,0xa4a45000,0x0004002b,0x00000006,0x0000029d,0x1a1a0500,0x0004002b, + 0x00000006,0x0000029e,0x0050a4a4,0x0004002b,0x00000006,0x0000029f,0xaaa59090,0x0004002b, + 0x00000006,0x000002a0,0x14696914,0x0004002b,0x00000006,0x000002a1,0x69691400,0x0004002b, + 0x00000006,0x000002a2,0xa08585a0,0x0004002b,0x00000006,0x000002a3,0xaa821414,0x0004002b, + 0x00000006,0x000002a4,0x50a4a450,0x0004002b,0x00000006,0x000002a5,0x6a5a0200,0x0004002b, + 0x00000006,0x000002a6,0xa9a58000,0x0004002b,0x00000006,0x000002a7,0x5090a0a8,0x0004002b, + 0x00000006,0x000002a8,0xa8a09050,0x0004002b,0x00000006,0x000002a9,0x24242424,0x0004002b, + 0x00000006,0x000002aa,0x00aa5500,0x0004002b,0x00000006,0x000002ab,0x24924924,0x0004002b, + 0x00000006,0x000002ac,0x24499224,0x0004002b,0x00000006,0x000002ad,0x50a50a50,0x0004002b, + 0x00000006,0x000002ae,0x500aa550,0x0004002b,0x00000006,0x000002af,0xaaaa4444,0x0004002b, + 0x00000006,0x000002b0,0x66660000,0x0004002b,0x00000006,0x000002b1,0xa5a0a5a0,0x0004002b, + 0x00000006,0x000002b2,0x50a050a0,0x0004002b,0x00000006,0x000002b3,0x69286928,0x0004002b, + 0x00000006,0x000002b4,0x44aaaa44,0x0004002b,0x00000006,0x000002b5,0x66666600,0x0004002b, + 0x00000006,0x000002b6,0xaa444444,0x0004002b,0x00000006,0x000002b7,0x54a854a8,0x0004002b, + 0x00000006,0x000002b8,0x95809580,0x0004002b,0x00000006,0x000002b9,0x96969600,0x0004002b, + 0x00000006,0x000002ba,0xa85454a8,0x0004002b,0x00000006,0x000002bb,0x80959580,0x0004002b, + 0x00000006,0x000002bc,0xaa141414,0x0004002b,0x00000006,0x000002bd,0x96960000,0x0004002b, + 0x00000006,0x000002be,0xaaaa1414,0x0004002b,0x00000006,0x000002bf,0xa05050a0,0x0004002b, + 0x00000006,0x000002c0,0xa0a5a5a0,0x0004002b,0x00000006,0x000002c1,0x96000000,0x0004002b, + 0x00000006,0x000002c2,0x40804080,0x0004002b,0x00000006,0x000002c3,0xa9a8a9a8,0x0004002b, + 0x00000006,0x000002c4,0xaaaaaa44,0x0004002b,0x00000006,0x000002c5,0x2a4a5254,0x0043002c, + 0x00000243,0x000002c6,0x00000286,0x00000287,0x00000288,0x00000289,0x0000028a,0x0000028b, + 0x0000028c,0x0000028d,0x0000028e,0x0000028f,0x00000290,0x00000291,0x00000292,0x00000293, + 0x00000294,0x00000295,0x00000296,0x00000297,0x00000298,0x00000299,0x0000029a,0x0000029b, + 0x0000029c,0x0000029d,0x0000029e,0x0000029f,0x000002a0,0x000002a1,0x000002a2,0x000002a3, + 0x000002a4,0x000002a5,0x000002a6,0x000002a7,0x000002a8,0x000002a9,0x000002aa,0x000002ab, + 0x000002ac,0x000002ad,0x000002ae,0x000002af,0x000002b0,0x000002b1,0x000002b2,0x000002b3, + 0x000002b4,0x000002b5,0x000002b6,0x000002b7,0x000002b8,0x000002b9,0x000002ba,0x000002bb, + 0x000002bc,0x000002bd,0x000002be,0x000002bf,0x000002c0,0x000002c1,0x000002c2,0x000002c3, + 0x000002c4,0x000002c5,0x0004002b,0x00000006,0x000002c7,0x000000f3,0x0004002b,0x00000006, + 0x000002c8,0x00000083,0x0004002b,0x00000006,0x000002c9,0x0000008f,0x0004002b,0x00000006, + 0x000002ca,0x000000f8,0x0004002b,0x00000006,0x000002cb,0x000000f5,0x0004002b,0x00000006, + 0x000002cc,0x0000008a,0x0004002b,0x00000006,0x000002cd,0x00000035,0x0004002b,0x00000006, + 0x000002ce,0x000000a6,0x0004002b,0x00000006,0x000002cf,0x000000af,0x0004002b,0x00000006, + 0x000002d0,0x0000006f,0x0004002b,0x00000006,0x000002d1,0x000000fa,0x0004002b,0x00000006, + 0x000002d2,0x000000fd,0x0004002b,0x00000006,0x000002d3,0x000000fc,0x0043002c,0x00000243, + 0x000002d4,0x000002c7,0x000002c8,0x000002c9,0x000001ef,0x000002ca,0x000002c7,0x000001ef, + 0x000002c9,0x000002ca,0x000002ca,0x000001fa,0x000001fa,0x000001fa,0x000002cb,0x000002c7, + 0x000002c8,0x000002c7,0x000002c8,0x000002ca,0x000001ef,0x000002c7,0x000002c8,0x000001fa, + 0x000002cc,0x000002cd,0x000002ca,0x0000022c,0x000002ce,0x000002ca,0x000002cb,0x000002cf, + 0x000002c9,0x000002ca,0x000001ef,0x000002c7,0x0000022e,0x000002ce,0x000002cc,0x00000226, + 0x000002cf,0x000002d0,0x000002c7,0x000002c9,0x000002cb,0x000001ef,0x000002d0,0x000002d0, + 0x000002c9,0x000002c7,0x000001ef,0x000002cb,0x000002cb,0x000002cb,0x000002ca,0x000002cb, + 0x000002d1,0x000002cb,0x000002d1,0x000002ca,0x000002d2,0x000001ef,0x000002d3,0x000002c7, + 0x000002c8,0x000b002c,0x000000cd,0x000002d5,0x00000097,0x000000e2,0x00000034,0x0000012e, + 0x00000034,0x0000012e,0x0000012e,0x00000034,0x000b002c,0x000000cd,0x000002d6,0x000000d0, + 0x000000d0,0x000000d0,0x000000d0,0x000000e2,0x000000a5,0x0000012e,0x00000034,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000006f, + 0x00000150,0x00000007,0x0004003b,0x0000006f,0x00000153,0x00000007,0x0004003b,0x00000009, + 0x0000016c,0x00000007,0x0004003b,0x00000009,0x0000016d,0x00000007,0x0004003b,0x00000008, + 0x00000181,0x00000007,0x0004003b,0x00000009,0x00000190,0x00000007,0x0004003b,0x00000009, + 0x0000019b,0x00000007,0x0004003b,0x00000021,0x000001a5,0x00000007,0x0004003b,0x00000024, + 0x000001aa,0x00000007,0x0004003b,0x00000009,0x000001ab,0x00000007,0x0004003b,0x00000009, + 0x000001ae,0x00000007,0x0004003b,0x00000021,0x000001b1,0x00000007,0x0004003b,0x00000024, + 0x000001b3,0x00000007,0x0004003b,0x00000024,0x000001b6,0x00000007,0x0004003b,0x00000009, + 0x000001b7,0x00000007,0x0004003b,0x00000009,0x000001ba,0x00000007,0x0004003b,0x00000021, + 0x000001bd,0x00000007,0x0004003b,0x00000024,0x000001bf,0x00000007,0x0004003b,0x00000009, + 0x000001c2,0x00000007,0x0004003b,0x00000009,0x000001dc,0x00000007,0x0004003b,0x00000009, + 0x000001dd,0x00000007,0x0004003b,0x00000019,0x000001de,0x00000007,0x0004003d,0x00000071, + 0x00000151,0x00000073,0x0007004f,0x0000006e,0x00000152,0x00000151,0x00000151,0x00000000, + 0x00000001,0x0003003e,0x00000150,0x00000152,0x00050041,0x00000154,0x00000155,0x00000084, + 0x00000034,0x0004003d,0x0000006e,0x00000156,0x00000155,0x00050050,0x0000006e,0x00000157, + 0x00000046,0x00000046,0x00050080,0x0000006e,0x00000158,0x00000156,0x00000157,0x00050050, + 0x0000006e,0x00000159,0x00000078,0x00000078,0x00050086,0x0000006e,0x0000015a,0x00000158, + 0x00000159,0x0003003e,0x00000153,0x0000015a,0x00050041,0x00000009,0x0000015b,0x00000150, + 0x0000002d,0x0004003d,0x00000006,0x0000015c,0x0000015b,0x00050041,0x00000009,0x0000015d, + 0x00000153,0x0000002d,0x0004003d,0x00000006,0x0000015e,0x0000015d,0x000500ae,0x00000020, + 0x0000015f,0x0000015c,0x0000015e,0x000400a8,0x00000020,0x00000160,0x0000015f,0x000300f7, + 0x00000162,0x00000000,0x000400fa,0x00000160,0x00000161,0x00000162,0x000200f8,0x00000161, + 0x00050041,0x00000009,0x00000163,0x00000150,0x0000004c,0x0004003d,0x00000006,0x00000164, + 0x00000163,0x00050041,0x00000009,0x00000165,0x00000153,0x0000004c,0x0004003d,0x00000006, + 0x00000166,0x00000165,0x000500ae,0x00000020,0x00000167,0x00000164,0x00000166,0x000200f9, + 0x00000162,0x000200f8,0x00000162,0x000700f5,0x00000020,0x00000168,0x0000015f,0x00000005, + 0x00000167,0x00000161,0x000300f7,0x0000016a,0x00000000,0x000400fa,0x00000168,0x00000169, + 0x0000016a,0x000200f8,0x00000169,0x000100fd,0x000200f8,0x0000016a,0x0003003e,0x0000016c, + 0x00000078,0x00050041,0x00000085,0x0000016e,0x00000084,0x000000d0,0x0004003d,0x00000006, + 0x0000016f,0x0000016e,0x00050041,0x0000009f,0x00000170,0x00000073,0x0000009e,0x0004003d, + 0x00000006,0x00000171,0x00000170,0x00050041,0x00000085,0x00000172,0x00000084,0x000000e4, + 0x0004003d,0x00000006,0x00000173,0x00000172,0x00050084,0x00000006,0x00000174,0x00000171, + 0x00000173,0x00050041,0x00000009,0x00000175,0x00000150,0x0000004c,0x0004003d,0x00000006, + 0x00000176,0x00000175,0x00050041,0x00000085,0x00000177,0x00000084,0x000000d3,0x0004003d, + 0x00000006,0x00000178,0x00000177,0x00050084,0x00000006,0x00000179,0x00000176,0x00000178, + 0x00050080,0x00000006,0x0000017a,0x00000174,0x00000179,0x00050041,0x00000009,0x0000017b, + 0x00000150,0x0000002d,0x0004003d,0x00000006,0x0000017c,0x0000017b,0x00050080,0x00000006, + 0x0000017d,0x0000017a,0x0000017c,0x0004003d,0x00000006,0x0000017e,0x0000016c,0x00050084, + 0x00000006,0x0000017f,0x0000017d,0x0000017e,0x00050080,0x00000006,0x00000180,0x0000016f, + 0x0000017f,0x0003003e,0x0000016d,0x00000180,0x0004003d,0x00000006,0x00000186,0x0000016d, + 0x00060041,0x00000187,0x00000188,0x00000185,0x000000d0,0x00000186,0x0004003d,0x00000006, + 0x00000189,0x00000188,0x0004003d,0x00000006,0x0000018a,0x0000016d,0x00050080,0x00000006, + 0x0000018b,0x0000018a,0x0000004c,0x00060041,0x00000187,0x0000018c,0x00000185,0x000000d0, + 0x0000018b,0x0004003d,0x00000006,0x0000018d,0x0000018c,0x0004003d,0x00000006,0x0000018e, + 0x0000016c,0x000500ac,0x00000020,0x0000018f,0x0000018e,0x0000009e,0x000300f7,0x00000192, + 0x00000000,0x000400fa,0x0000018f,0x00000191,0x00000197,0x000200f8,0x00000191,0x0004003d, + 0x00000006,0x00000193,0x0000016d,0x00050080,0x00000006,0x00000194,0x00000193,0x0000009e, + 0x00060041,0x00000187,0x00000195,0x00000185,0x000000d0,0x00000194,0x0004003d,0x00000006, + 0x00000196,0x00000195,0x0003003e,0x00000190,0x00000196,0x000200f9,0x00000192,0x000200f8, + 0x00000197,0x0003003e,0x00000190,0x0000002d,0x000200f9,0x00000192,0x000200f8,0x00000192, + 0x0004003d,0x00000006,0x00000198,0x00000190,0x0004003d,0x00000006,0x00000199,0x0000016c, + 0x000500ac,0x00000020,0x0000019a,0x00000199,0x0000009e,0x000300f7,0x0000019d,0x00000000, + 0x000400fa,0x0000019a,0x0000019c,0x000001a2,0x000200f8,0x0000019c,0x0004003d,0x00000006, + 0x0000019e,0x0000016d,0x00050080,0x00000006,0x0000019f,0x0000019e,0x00000046,0x00060041, + 0x00000187,0x000001a0,0x00000185,0x000000d0,0x0000019f,0x0004003d,0x00000006,0x000001a1, + 0x000001a0,0x0003003e,0x0000019b,0x000001a1,0x000200f9,0x0000019d,0x000200f8,0x000001a2, + 0x0003003e,0x0000019b,0x0000002d,0x000200f9,0x0000019d,0x000200f8,0x0000019d,0x0004003d, + 0x00000006,0x000001a3,0x0000019b,0x00070050,0x00000007,0x000001a4,0x00000189,0x0000018d, + 0x00000198,0x000001a3,0x0003003e,0x00000181,0x000001a4,0x00050041,0x00000085,0x000001a6, + 0x00000084,0x000000a2,0x0004003d,0x00000006,0x000001a7,0x000001a6,0x000500c7,0x00000006, + 0x000001a8,0x000001a7,0x0000009e,0x000500ab,0x00000020,0x000001a9,0x000001a8,0x0000002d, + 0x0003003e,0x000001a5,0x000001a9,0x00050041,0x00000009,0x000001ac,0x00000181,0x0000002d, + 0x0004003d,0x00000006,0x000001ad,0x000001ac,0x0003003e,0x000001ab,0x000001ad,0x00050041, + 0x00000009,0x000001af,0x00000181,0x0000004c,0x0004003d,0x00000006,0x000001b0,0x000001af, + 0x0003003e,0x000001ae,0x000001b0,0x0004003d,0x00000020,0x000001b2,0x000001a5,0x0003003e, + 0x000001b1,0x000001b2,0x00080039,0x00000002,0x000001b4,0x0000002a,0x000001ab,0x000001ae, + 0x000001b1,0x000001b3,0x0004003d,0x00000023,0x000001b5,0x000001b3,0x0003003e,0x000001aa, + 0x000001b5,0x00050041,0x00000009,0x000001b8,0x00000181,0x0000009e,0x0004003d,0x00000006, + 0x000001b9,0x000001b8,0x0003003e,0x000001b7,0x000001b9,0x00050041,0x00000009,0x000001bb, + 0x00000181,0x00000046,0x0004003d,0x00000006,0x000001bc,0x000001bb,0x0003003e,0x000001ba, + 0x000001bc,0x0004003d,0x00000020,0x000001be,0x000001a5,0x0003003e,0x000001bd,0x000001be, + 0x00080039,0x00000002,0x000001c0,0x0000002a,0x000001b7,0x000001ba,0x000001bd,0x000001bf, + 0x0004003d,0x00000023,0x000001c1,0x000001bf,0x0003003e,0x000001b6,0x000001c1,0x0003003e, + 0x000001c2,0x0000002d,0x000200f9,0x000001c3,0x000200f8,0x000001c3,0x000400f6,0x000001c5, + 0x000001c6,0x00000000,0x000200f9,0x000001c7,0x000200f8,0x000001c7,0x0004003d,0x00000006, + 0x000001c8,0x000001c2,0x000500b0,0x00000020,0x000001c9,0x000001c8,0x00000022,0x000400fa, + 0x000001c9,0x000001c4,0x000001c5,0x000200f8,0x000001c4,0x0004003d,0x00000006,0x000001ca, + 0x000001c2,0x000500c7,0x00000006,0x000001cb,0x000001ca,0x00000046,0x0004003d,0x00000006, + 0x000001cc,0x000001c2,0x000500c2,0x00000006,0x000001cd,0x000001cc,0x000000e4,0x0004003d, + 0x00000006,0x000001ce,0x000001c2,0x00050041,0x00000009,0x000001cf,0x000001aa,0x000001ce, + 0x0004003d,0x00000006,0x000001d0,0x000001cf,0x00040070,0x00000017,0x000001d1,0x000001d0, + 0x00050088,0x00000017,0x000001d3,0x000001d1,0x000001d2,0x0004003d,0x00000006,0x000001d4, + 0x000001c2,0x00050041,0x00000009,0x000001d5,0x000001b6,0x000001d4,0x0004003d,0x00000006, + 0x000001d6,0x000001d5,0x00040070,0x00000017,0x000001d7,0x000001d6,0x00050088,0x00000017, + 0x000001d8,0x000001d7,0x000001d2,0x00070050,0x00000018,0x000001db,0x000001d3,0x000001d8, + 0x000001d9,0x000001da,0x0003003e,0x000001dc,0x000001cb,0x0003003e,0x000001dd,0x000001cd, + 0x0003003e,0x000001de,0x000001db,0x00070039,0x00000002,0x000001df,0x0000001e,0x000001dc, + 0x000001dd,0x000001de,0x000200f9,0x000001c6,0x000200f8,0x000001c6,0x0004003d,0x00000006, + 0x000001e0,0x000001c2,0x00050080,0x00000006,0x000001e1,0x000001e0,0x000000d3,0x0003003e, + 0x000001c2,0x000001e1,0x000200f9,0x000001c3,0x000200f8,0x000001c5,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000000e,0x00000000,0x0000000a,0x00030037,0x00000008,0x0000000b, + 0x00030037,0x00000009,0x0000000c,0x00030037,0x00000009,0x0000000d,0x000200f8,0x0000000f, + 0x0004003b,0x00000009,0x00000032,0x00000007,0x0004003b,0x00000009,0x00000036,0x00000007, + 0x0004003b,0x00000009,0x0000003a,0x00000007,0x0004003b,0x00000009,0x00000057,0x00000007, + 0x0004003d,0x00000006,0x0000002c,0x0000000d,0x000500aa,0x00000020,0x0000002e,0x0000002c, + 0x0000002d,0x000300f7,0x00000030,0x00000000,0x000400fa,0x0000002e,0x0000002f,0x00000030, + 0x000200f8,0x0000002f,0x000200fe,0x0000002d,0x000200f8,0x00000030,0x0004003d,0x00000006, + 0x00000033,0x0000000c,0x000500c2,0x00000006,0x00000035,0x00000033,0x00000034,0x0003003e, + 0x00000032,0x00000035,0x0004003d,0x00000006,0x00000037,0x0000000c,0x000500c7,0x00000006, + 0x00000039,0x00000037,0x00000038,0x0003003e,0x00000036,0x00000039,0x0004003d,0x00000006, + 0x0000003b,0x00000032,0x00050041,0x00000009,0x0000003c,0x0000000b,0x0000003b,0x0004003d, + 0x00000006,0x0000003d,0x0000003c,0x0004003d,0x00000006,0x0000003e,0x00000036,0x000500c2, + 0x00000006,0x0000003f,0x0000003d,0x0000003e,0x0003003e,0x0000003a,0x0000003f,0x0004003d, + 0x00000006,0x00000040,0x00000036,0x0004003d,0x00000006,0x00000041,0x0000000d,0x00050080, + 0x00000006,0x00000042,0x00000040,0x00000041,0x000500ac,0x00000020,0x00000044,0x00000042, + 0x00000043,0x0004003d,0x00000006,0x00000045,0x00000032,0x000500b0,0x00000020,0x00000047, + 0x00000045,0x00000046,0x000500a7,0x00000020,0x00000048,0x00000044,0x00000047,0x000300f7, + 0x0000004a,0x00000000,0x000400fa,0x00000048,0x00000049,0x0000004a,0x000200f8,0x00000049, + 0x0004003d,0x00000006,0x0000004b,0x00000032,0x00050080,0x00000006,0x0000004d,0x0000004b, + 0x0000004c,0x00050041,0x00000009,0x0000004e,0x0000000b,0x0000004d,0x0004003d,0x00000006, + 0x0000004f,0x0000004e,0x0004003d,0x00000006,0x00000050,0x00000036,0x00050082,0x00000006, + 0x00000051,0x00000043,0x00000050,0x000500c4,0x00000006,0x00000052,0x0000004f,0x00000051, + 0x0004003d,0x00000006,0x00000053,0x0000003a,0x000500c5,0x00000006,0x00000054,0x00000053, + 0x00000052,0x0003003e,0x0000003a,0x00000054,0x000200f9,0x0000004a,0x000200f8,0x0000004a, + 0x0004003d,0x00000006,0x00000055,0x0000000d,0x000500aa,0x00000020,0x00000056,0x00000055, + 0x00000043,0x000300f7,0x00000059,0x00000000,0x000400fa,0x00000056,0x00000058,0x0000005b, + 0x000200f8,0x00000058,0x0004003d,0x00000006,0x0000005a,0x0000003a,0x0003003e,0x00000057, + 0x0000005a,0x000200f9,0x00000059,0x000200f8,0x0000005b,0x0004003d,0x00000006,0x0000005c, + 0x0000003a,0x0004003d,0x00000006,0x0000005d,0x0000000d,0x000500c4,0x00000006,0x0000005e, + 0x0000004c,0x0000005d,0x00050082,0x00000006,0x0000005f,0x0000005e,0x0000004c,0x000500c7, + 0x00000006,0x00000060,0x0000005c,0x0000005f,0x0003003e,0x00000057,0x00000060,0x000200f9, + 0x00000059,0x000200f8,0x00000059,0x0004003d,0x00000006,0x00000061,0x00000057,0x000200fe, + 0x00000061,0x00010038,0x00050036,0x00000010,0x00000015,0x00000000,0x00000012,0x00030037, + 0x00000011,0x00000013,0x00030037,0x00000011,0x00000014,0x000200f8,0x00000016,0x0004003d, + 0x00000010,0x00000064,0x00000013,0x0004003d,0x00000010,0x00000066,0x00000014,0x00050082, + 0x00000010,0x00000067,0x00000065,0x00000066,0x000500c4,0x00000010,0x00000068,0x00000064, + 0x00000067,0x0004003d,0x00000010,0x00000069,0x00000014,0x00050082,0x00000010,0x0000006a, + 0x00000065,0x00000069,0x000500c3,0x00000010,0x0000006b,0x00000068,0x0000006a,0x000200fe, + 0x0000006b,0x00010038,0x00050036,0x00000002,0x0000001e,0x00000000,0x0000001a,0x00030037, + 0x00000009,0x0000001b,0x00030037,0x00000009,0x0000001c,0x00030037,0x00000019,0x0000001d, + 0x000200f8,0x0000001f,0x0004003b,0x0000006f,0x00000070,0x00000007,0x0004003b,0x0000006f, + 0x00000076,0x00000007,0x0004003d,0x00000071,0x00000074,0x00000073,0x0007004f,0x0000006e, + 0x00000075,0x00000074,0x00000074,0x00000000,0x00000001,0x0003003e,0x00000070,0x00000075, + 0x0004003d,0x0000006e,0x00000077,0x00000070,0x00050050,0x0000006e,0x00000079,0x00000078, + 0x00000078,0x00050084,0x0000006e,0x0000007a,0x00000077,0x00000079,0x0004003d,0x00000006, + 0x0000007b,0x0000001b,0x0004003d,0x00000006,0x0000007c,0x0000001c,0x00050050,0x0000006e, + 0x0000007d,0x0000007b,0x0000007c,0x00050080,0x0000006e,0x0000007e,0x0000007a,0x0000007d, + 0x0003003e,0x00000076,0x0000007e,0x00050041,0x00000009,0x0000007f,0x00000076,0x0000002d, + 0x0004003d,0x00000006,0x00000080,0x0000007f,0x00060041,0x00000085,0x00000086,0x00000084, + 0x00000034,0x0000002d,0x0004003d,0x00000006,0x00000087,0x00000086,0x000500b0,0x00000020, + 0x00000088,0x00000080,0x00000087,0x000300f7,0x0000008a,0x00000000,0x000400fa,0x00000088, + 0x00000089,0x0000008a,0x000200f8,0x00000089,0x00050041,0x00000009,0x0000008b,0x00000076, + 0x0000004c,0x0004003d,0x00000006,0x0000008c,0x0000008b,0x00060041,0x00000085,0x0000008d, + 0x00000084,0x00000034,0x0000004c,0x0004003d,0x00000006,0x0000008e,0x0000008d,0x000500b0, + 0x00000020,0x0000008f,0x0000008c,0x0000008e,0x000200f9,0x0000008a,0x000200f8,0x0000008a, + 0x000700f5,0x00000020,0x00000090,0x00000088,0x0000001f,0x0000008f,0x00000089,0x000300f7, + 0x00000092,0x00000000,0x000400fa,0x00000090,0x00000091,0x00000092,0x000200f8,0x00000091, + 0x0004003d,0x00000093,0x00000096,0x00000095,0x00050041,0x00000098,0x00000099,0x00000084, + 0x00000097,0x0004003d,0x00000081,0x0000009a,0x00000099,0x0004003d,0x0000006e,0x0000009b, + 0x00000076,0x0004007c,0x00000081,0x0000009c,0x0000009b,0x00050080,0x00000081,0x0000009d, + 0x0000009a,0x0000009c,0x00050041,0x0000009f,0x000000a0,0x00000073,0x0000009e,0x0004003d, + 0x00000006,0x000000a1,0x000000a0,0x00050041,0x00000085,0x000000a3,0x00000084,0x000000a2, + 0x0004003d,0x00000006,0x000000a4,0x000000a3,0x000500c2,0x00000006,0x000000a6,0x000000a4, + 0x000000a5,0x00050080,0x00000006,0x000000a7,0x000000a1,0x000000a6,0x0004007c,0x00000010, + 0x000000a8,0x000000a7,0x00050051,0x00000010,0x000000aa,0x0000009d,0x00000000,0x00050051, + 0x00000010,0x000000ab,0x0000009d,0x00000001,0x00060050,0x000000a9,0x000000ac,0x000000aa, + 0x000000ab,0x000000a8,0x0004003d,0x00000018,0x000000ad,0x0000001d,0x00040063,0x00000096, + 0x000000ac,0x000000ad,0x000200f9,0x00000092,0x000200f8,0x00000092,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000002a,0x00000000,0x00000025,0x00030037,0x00000009,0x00000026, + 0x00030037,0x00000009,0x00000027,0x00030037,0x00000021,0x00000028,0x00030037,0x00000024, + 0x00000029,0x000200f8,0x0000002b,0x0004003b,0x00000011,0x000000b1,0x00000007,0x0004003b, + 0x00000011,0x000000b6,0x00000007,0x0004003b,0x00000011,0x000000b7,0x00000007,0x0004003b, + 0x00000011,0x000000bb,0x00000007,0x0004003b,0x00000011,0x000000c0,0x00000007,0x0004003b, + 0x00000011,0x000000c1,0x00000007,0x0004003b,0x000000ce,0x000000cf,0x00000007,0x0004003b, + 0x00000011,0x000000db,0x00000007,0x0004003b,0x000000f2,0x000000f3,0x00000007,0x0004003b, + 0x000000f2,0x000000f9,0x00000007,0x0004003b,0x00000011,0x00000107,0x00000007,0x0004003b, + 0x00000119,0x0000011a,0x00000007,0x0004003b,0x00000119,0x00000120,0x00000007,0x0004003b, + 0x00000008,0x00000134,0x00000007,0x0004003b,0x00000009,0x00000138,0x00000007,0x0004003b, + 0x00000008,0x00000144,0x00000007,0x0004003b,0x00000009,0x00000146,0x00000007,0x0004003b, + 0x00000009,0x00000147,0x00000007,0x0004003d,0x00000020,0x000000ae,0x00000028,0x000300f7, + 0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af,0x000000c4,0x000200f8,0x000000af, + 0x0004003d,0x00000006,0x000000b2,0x00000026,0x000500c7,0x00000006,0x000000b4,0x000000b2, + 0x000000b3,0x0004007c,0x00000010,0x000000b5,0x000000b4,0x0003003e,0x000000b6,0x000000b5, + 0x0003003e,0x000000b7,0x000000a5,0x00060039,0x00000010,0x000000b8,0x00000015,0x000000b6, + 0x000000b7,0x0007000c,0x00000010,0x000000ba,0x00000001,0x0000002a,0x000000b8,0x000000b9, + 0x0003003e,0x000000b1,0x000000ba,0x0004003d,0x00000006,0x000000bc,0x00000026,0x000500c2, + 0x00000006,0x000000bd,0x000000bc,0x000000a5,0x000500c7,0x00000006,0x000000be,0x000000bd, + 0x000000b3,0x0004007c,0x00000010,0x000000bf,0x000000be,0x0003003e,0x000000c0,0x000000bf, + 0x0003003e,0x000000c1,0x000000a5,0x00060039,0x00000010,0x000000c2,0x00000015,0x000000c0, + 0x000000c1,0x0007000c,0x00000010,0x000000c3,0x00000001,0x0000002a,0x000000c2,0x000000b9, + 0x0003003e,0x000000bb,0x000000c3,0x000200f9,0x000000b0,0x000200f8,0x000000c4,0x0004003d, + 0x00000006,0x000000c5,0x00000026,0x000500c7,0x00000006,0x000000c6,0x000000c5,0x000000b3, + 0x0004007c,0x00000010,0x000000c7,0x000000c6,0x0003003e,0x000000b1,0x000000c7,0x0004003d, + 0x00000006,0x000000c8,0x00000026,0x000500c2,0x00000006,0x000000c9,0x000000c8,0x000000a5, + 0x000500c7,0x00000006,0x000000ca,0x000000c9,0x000000b3,0x0004007c,0x00000010,0x000000cb, + 0x000000ca,0x0003003e,0x000000bb,0x000000cb,0x000200f9,0x000000b0,0x000200f8,0x000000b0, + 0x0004003d,0x00000010,0x000000d1,0x000000b1,0x00050041,0x00000011,0x000000d2,0x000000cf, + 0x000000d0,0x0003003e,0x000000d2,0x000000d1,0x0004003d,0x00000010,0x000000d4,0x000000bb, + 0x00050041,0x00000011,0x000000d5,0x000000cf,0x000000d3,0x0003003e,0x000000d5,0x000000d4, + 0x0004003d,0x00000010,0x000000d6,0x000000b1,0x0004003d,0x00000010,0x000000d7,0x000000bb, + 0x000500ad,0x00000020,0x000000d8,0x000000d6,0x000000d7,0x000300f7,0x000000da,0x00000000, + 0x000400fa,0x000000d8,0x000000d9,0x00000106,0x000200f8,0x000000d9,0x0003003e,0x000000db, + 0x000000d0,0x000200f9,0x000000dc,0x000200f8,0x000000dc,0x000400f6,0x000000de,0x000000df, + 0x00000000,0x000200f9,0x000000e0,0x000200f8,0x000000e0,0x0004003d,0x00000010,0x000000e1, + 0x000000db,0x000500b1,0x00000020,0x000000e3,0x000000e1,0x000000e2,0x000400fa,0x000000e3, + 0x000000dd,0x000000de,0x000200f8,0x000000dd,0x0004003d,0x00000010,0x000000e5,0x000000db, + 0x00050080,0x00000010,0x000000e6,0x000000e4,0x000000e5,0x0004003d,0x00000010,0x000000f0, + 0x000000db,0x00050082,0x00000010,0x000000f1,0x00000034,0x000000f0,0x0003003e,0x000000f3, + 0x000000ef,0x00050041,0x00000011,0x000000f4,0x000000f3,0x000000f1,0x0004003d,0x00000010, + 0x000000f5,0x000000f4,0x0004003d,0x00000010,0x000000f6,0x000000b1,0x00050084,0x00000010, + 0x000000f7,0x000000f5,0x000000f6,0x0004003d,0x00000010,0x000000f8,0x000000db,0x0003003e, + 0x000000f9,0x000000ef,0x00050041,0x00000011,0x000000fa,0x000000f9,0x000000f8,0x0004003d, + 0x00000010,0x000000fb,0x000000fa,0x0004003d,0x00000010,0x000000fc,0x000000bb,0x00050084, + 0x00000010,0x000000fd,0x000000fb,0x000000fc,0x00050080,0x00000010,0x000000fe,0x000000f7, + 0x000000fd,0x00050080,0x00000010,0x00000100,0x000000fe,0x000000ff,0x000500c3,0x00000010, + 0x00000102,0x00000100,0x00000101,0x00050041,0x00000011,0x00000103,0x000000cf,0x000000e6, + 0x0003003e,0x00000103,0x00000102,0x000200f9,0x000000df,0x000200f8,0x000000df,0x0004003d, + 0x00000010,0x00000104,0x000000db,0x00050080,0x00000010,0x00000105,0x00000104,0x000000d3, + 0x0003003e,0x000000db,0x00000105,0x000200f9,0x000000dc,0x000200f8,0x000000de,0x000200f9, + 0x000000da,0x000200f8,0x00000106,0x0003003e,0x00000107,0x000000d0,0x000200f9,0x00000108, + 0x000200f8,0x00000108,0x000400f6,0x0000010a,0x0000010b,0x00000000,0x000200f9,0x0000010c, + 0x000200f8,0x0000010c,0x0004003d,0x00000010,0x0000010d,0x00000107,0x000500b1,0x00000020, + 0x0000010e,0x0000010d,0x00000097,0x000400fa,0x0000010e,0x00000109,0x0000010a,0x000200f8, + 0x00000109,0x0004003d,0x00000010,0x0000010f,0x00000107,0x00050080,0x00000010,0x00000110, + 0x000000e4,0x0000010f,0x0004003d,0x00000010,0x00000117,0x00000107,0x00050082,0x00000010, + 0x00000118,0x000000a2,0x00000117,0x0003003e,0x0000011a,0x00000116,0x00050041,0x00000011, + 0x0000011b,0x0000011a,0x00000118,0x0004003d,0x00000010,0x0000011c,0x0000011b,0x0004003d, + 0x00000010,0x0000011d,0x000000b1,0x00050084,0x00000010,0x0000011e,0x0000011c,0x0000011d, + 0x0004003d,0x00000010,0x0000011f,0x00000107,0x0003003e,0x00000120,0x00000116,0x00050041, + 0x00000011,0x00000121,0x00000120,0x0000011f,0x0004003d,0x00000010,0x00000122,0x00000121, + 0x0004003d,0x00000010,0x00000123,0x000000bb,0x00050084,0x00000010,0x00000124,0x00000122, + 0x00000123,0x00050080,0x00000010,0x00000125,0x0000011e,0x00000124,0x00050080,0x00000010, + 0x00000126,0x00000125,0x000000ff,0x000500c3,0x00000010,0x00000127,0x00000126,0x00000101, + 0x00050041,0x00000011,0x00000128,0x000000cf,0x00000110,0x0003003e,0x00000128,0x00000127, + 0x000200f9,0x0000010b,0x000200f8,0x0000010b,0x0004003d,0x00000010,0x00000129,0x00000107, + 0x00050080,0x00000010,0x0000012a,0x00000129,0x000000d3,0x0003003e,0x00000107,0x0000012a, + 0x000200f9,0x00000108,0x000200f8,0x0000010a,0x0004003d,0x00000020,0x0000012b,0x00000028, + 0x000600a9,0x00000010,0x0000012c,0x0000012b,0x000000b9,0x000000d0,0x00050041,0x00000011, + 0x0000012d,0x000000cf,0x000000e2,0x0003003e,0x0000012d,0x0000012c,0x0004003d,0x00000020, + 0x0000012f,0x00000028,0x000600a9,0x00000010,0x00000132,0x0000012f,0x00000130,0x00000131, + 0x00050041,0x00000011,0x00000133,0x000000cf,0x0000012e,0x0003003e,0x00000133,0x00000132, + 0x000200f9,0x000000da,0x000200f8,0x000000da,0x0004003d,0x00000006,0x00000135,0x00000026, + 0x0004003d,0x00000006,0x00000136,0x00000027,0x00070050,0x00000007,0x00000137,0x00000135, + 0x00000136,0x0000002d,0x0000002d,0x0003003e,0x00000134,0x00000137,0x0003003e,0x00000138, + 0x0000002d,0x000200f9,0x00000139,0x000200f8,0x00000139,0x000400f6,0x0000013b,0x0000013c, + 0x00000000,0x000200f9,0x0000013d,0x000200f8,0x0000013d,0x0004003d,0x00000006,0x0000013e, + 0x00000138,0x000500b0,0x00000020,0x0000013f,0x0000013e,0x00000022,0x000400fa,0x0000013f, + 0x0000013a,0x0000013b,0x000200f8,0x0000013a,0x0004003d,0x00000006,0x00000140,0x00000138, + 0x0004003d,0x00000006,0x00000141,0x00000138,0x00050084,0x00000006,0x00000142,0x00000046, + 0x00000141,0x00050080,0x00000006,0x00000143,0x00000022,0x00000142,0x0004003d,0x00000007, + 0x00000145,0x00000134,0x0003003e,0x00000144,0x00000145,0x0003003e,0x00000146,0x00000143, + 0x0003003e,0x00000147,0x00000046,0x00070039,0x00000006,0x00000148,0x0000000e,0x00000144, + 0x00000146,0x00000147,0x00050041,0x00000011,0x00000149,0x000000cf,0x00000148,0x0004003d, + 0x00000010,0x0000014a,0x00000149,0x0004007c,0x00000006,0x0000014b,0x0000014a,0x000500c7, + 0x00000006,0x0000014c,0x0000014b,0x000000b3,0x00050041,0x00000009,0x0000014d,0x00000029, + 0x00000140,0x0003003e,0x0000014d,0x0000014c,0x000200f9,0x0000013c,0x000200f8,0x0000013c, + 0x0004003d,0x00000006,0x0000014e,0x00000138,0x00050080,0x00000006,0x0000014f,0x0000014e, + 0x000000d3,0x0003003e,0x00000138,0x0000014f,0x000200f9,0x00000139,0x000200f8,0x0000013b, + 0x000100fd,0x00010038 +}; + // 1115.1.0 +static const uint32_t spv_bc6h[] = { + 0x07230203,0x00010300,0x0008000b,0x00000475,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000079,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000e,0x73746962, + 0x34757628,0x3b31753b,0x003b3175,0x00030005,0x0000000b,0x00000062,0x00030005,0x0000000c, + 0x00736f70,0x00030005,0x0000000d,0x0000006e,0x00050005,0x00000015,0x74786573,0x3b316928, + 0x003b3169,0x00030005,0x00000013,0x00000076,0x00030005,0x00000014,0x0000006e,0x00060005, + 0x0000001e,0x28747570,0x753b3175,0x66763b31,0x00003b34,0x00030005,0x0000001b,0x00007874, + 0x00030005,0x0000001c,0x00007974,0x00030005,0x0000001d,0x00000076,0x00090005,0x00000026, + 0x5f366362,0x75716e75,0x69746e61,0x6928657a,0x31693b31,0x3b31623b,0x00000000,0x00030005, + 0x00000023,0x006c6176,0x00040005,0x00000024,0x7469626e,0x00000073,0x00030005,0x00000025, + 0x006e6773,0x00070005,0x0000002b,0x5f366362,0x696e6966,0x69286873,0x31623b31,0x0000003b, + 0x00030005,0x00000029,0x006c6176,0x00030005,0x0000002a,0x006e6773,0x00060005,0x00000030, + 0x68366362,0x34757628,0x3b31623b,0x00000000,0x00030005,0x0000002e,0x006b6c62,0x00030005, + 0x0000002f,0x006e6773,0x00030005,0x00000038,0x00006977,0x00030005,0x0000003c,0x0000006f, + 0x00030005,0x00000040,0x00000076,0x00030005,0x00000076,0x006b6c62,0x00080005,0x00000079, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00030005,0x0000007c, + 0x00000070,0x00030005,0x00000088,0x00004350,0x00060006,0x00000088,0x00000000,0x5f637273, + 0x64726f77,0x00000000,0x00060006,0x00000088,0x00000001,0x5f776f72,0x636f6c62,0x0000736b, + 0x00070006,0x00000088,0x00000002,0x6579616c,0x6c625f72,0x736b636f,0x00000000,0x00050006, + 0x00000088,0x00000003,0x67616c66,0x00000073,0x00050006,0x00000088,0x00000004,0x5f747364, + 0x0066666f,0x00050006,0x00000088,0x00000005,0x65747865,0x0000746e,0x00030005,0x0000008a, + 0x00006370,0x00030005,0x0000009b,0x00747364,0x00030005,0x000000dd,0x00000073,0x00030005, + 0x000000e8,0x00716e75,0x00030005,0x00000121,0x00000073,0x00030005,0x0000012f,0x00736f70, + 0x00040005,0x00000130,0x65646f63,0x00000000,0x00040005,0x00000131,0x61726170,0x0000006d, + 0x00040005,0x00000133,0x61726170,0x0000006d,0x00040005,0x00000134,0x61726170,0x0000006d, + 0x00040005,0x0000013a,0x61726170,0x0000006d,0x00040005,0x0000013c,0x61726170,0x0000006d, + 0x00040005,0x0000013d,0x61726170,0x0000006d,0x00040005,0x00000144,0x65646f6d,0x00000000, + 0x00050005,0x00000150,0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000157,0x00000074, + 0x00040005,0x00000167,0x61726170,0x0000006d,0x00040005,0x00000168,0x61726170,0x0000006d, + 0x00040005,0x00000169,0x61726170,0x0000006d,0x00030005,0x0000016e,0x00000069,0x00030005, + 0x00000179,0x00007065,0x00040005,0x0000017e,0x74726170,0x0064695f,0x00030005,0x0000017f, + 0x00000065,0x00050005,0x00000193,0x65646e69,0x6c626178,0x00000065,0x00050005,0x0000019e, + 0x65646e69,0x6c626178,0x00000065,0x00030005,0x000001a2,0x00000064,0x00050005,0x000001e5, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x000001e8,0x67726174,0x00007465,0x00030005, + 0x000001eb,0x0000006e,0x00030005,0x000001ef,0x00006873,0x00030005,0x000001f3,0x00000076, + 0x00040005,0x000001f4,0x61726170,0x0000006d,0x00040005,0x000001f6,0x61726170,0x0000006d, + 0x00040005,0x000001f8,0x61726170,0x0000006d,0x00030005,0x0000021a,0x006f7774,0x00040005, + 0x0000021d,0x7374706e,0x00000000,0x00030005,0x00000220,0x00000077,0x00050005,0x00000226, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x0000022c,0x61726170,0x0000006d,0x00040005, + 0x0000022f,0x61726170,0x0000006d,0x00040005,0x00000233,0x61726170,0x0000006d,0x00040005, + 0x00000236,0x61726170,0x0000006d,0x00040005,0x0000023a,0x61726170,0x0000006d,0x00040005, + 0x0000023d,0x61726170,0x0000006d,0x00030005,0x0000024a,0x00000069,0x00040005,0x00000257, + 0x61726170,0x0000006d,0x00040005,0x0000025a,0x61726170,0x0000006d,0x00050005,0x0000025b, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x00000266,0x61726170,0x0000006d,0x00040005, + 0x00000269,0x61726170,0x0000006d,0x00050005,0x0000026a,0x65646e69,0x6c626178,0x00000065, + 0x00040005,0x00000275,0x61726170,0x0000006d,0x00040005,0x00000278,0x61726170,0x0000006d, + 0x00050005,0x00000279,0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000287,0x00000069, + 0x00030005,0x00000290,0x00000063,0x00030005,0x00000298,0x00000076,0x00040005,0x000002b0, + 0x61726170,0x0000006d,0x00040005,0x000002b2,0x61726170,0x0000006d,0x00030005,0x000002bd, + 0x00000069,0x00040005,0x000002c7,0x61726170,0x0000006d,0x00040005,0x000002ca,0x61726170, + 0x0000006d,0x00040005,0x000002cc,0x61726170,0x0000006d,0x00040005,0x000002d2,0x74726170, + 0x00000000,0x00050005,0x00000318,0x65646e69,0x6c626178,0x00000065,0x00040005,0x0000031b, + 0x68636e61,0x0000726f,0x00050005,0x00000320,0x65646e69,0x6c626178,0x00000065,0x00030005, + 0x00000324,0x00000074,0x00040005,0x0000032c,0x73627573,0x00007465,0x00030005,0x00000338, + 0x0000626e,0x00030005,0x0000034d,0x00786469,0x00040005,0x0000034e,0x61726170,0x0000006d, + 0x00040005,0x00000350,0x61726170,0x0000006d,0x00040005,0x00000352,0x61726170,0x0000006d, + 0x00030005,0x00000358,0x00007477,0x00050005,0x00000367,0x65646e69,0x6c626178,0x00000065, + 0x00050005,0x00000379,0x65646e69,0x6c626178,0x00000065,0x00030005,0x0000037d,0x00003273, + 0x00030005,0x00000381,0x00000063,0x00030005,0x00000389,0x00000061,0x00030005,0x00000390, + 0x00000062,0x00030005,0x00000399,0x00000068,0x00040005,0x000003a5,0x61726170,0x0000006d, + 0x00040005,0x000003a6,0x61726170,0x0000006d,0x00040005,0x000003be,0x61726170,0x0000006d, + 0x00040005,0x000003bf,0x61726170,0x0000006d,0x00040005,0x000003c0,0x61726170,0x0000006d, + 0x00030005,0x000003c4,0x006b6c62,0x00040005,0x000003c7,0x6b6c626e,0x00000000,0x00040005, + 0x000003e0,0x64726f77,0x00000073,0x00040005,0x000003e1,0x65736162,0x00000000,0x00030005, + 0x000003f5,0x00000062,0x00030005,0x000003f7,0x00637253,0x00040006,0x000003f7,0x00000000, + 0x00000077,0x00030005,0x000003f9,0x00637273,0x00030005,0x00000419,0x006e6773,0x00040005, + 0x0000041e,0x61726170,0x0000006d,0x00040005,0x00000420,0x61726170,0x0000006d,0x00040047, + 0x00000079,0x0000000b,0x0000001c,0x00030047,0x00000088,0x00000002,0x00050048,0x00000088, + 0x00000000,0x00000023,0x00000000,0x00050048,0x00000088,0x00000001,0x00000023,0x00000004, + 0x00050048,0x00000088,0x00000002,0x00000023,0x00000008,0x00050048,0x00000088,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x00000088,0x00000004,0x00000023,0x00000010,0x00050048, + 0x00000088,0x00000005,0x00000023,0x00000018,0x00030047,0x0000009b,0x00000019,0x00040047, + 0x0000009b,0x00000021,0x00000001,0x00040047,0x0000009b,0x00000022,0x00000000,0x00040047, + 0x000003f6,0x00000006,0x00000004,0x00030047,0x000003f7,0x00000002,0x00040048,0x000003f7, + 0x00000000,0x00000018,0x00050048,0x000003f7,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000003f9,0x00000018,0x00040047,0x000003f9,0x00000021,0x00000000,0x00040047,0x000003f9, + 0x00000022,0x00000000,0x00040047,0x00000423,0x0000000b,0x00000019,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040017, + 0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000007,0x00000007,0x00040020, + 0x00000009,0x00000007,0x00000006,0x00060021,0x0000000a,0x00000006,0x00000008,0x00000009, + 0x00000009,0x00040015,0x00000010,0x00000020,0x00000001,0x00040020,0x00000011,0x00000007, + 0x00000010,0x00050021,0x00000012,0x00000010,0x00000011,0x00000011,0x00030016,0x00000017, + 0x00000020,0x00040017,0x00000018,0x00000017,0x00000004,0x00040020,0x00000019,0x00000007, + 0x00000018,0x00060021,0x0000001a,0x00000002,0x00000009,0x00000009,0x00000019,0x00020014, + 0x00000020,0x00040020,0x00000021,0x00000007,0x00000020,0x00060021,0x00000022,0x00000010, + 0x00000011,0x00000011,0x00000021,0x00050021,0x00000028,0x00000006,0x00000011,0x00000021, + 0x00050021,0x0000002d,0x00000002,0x00000008,0x00000021,0x0004002b,0x00000006,0x00000033, + 0x00000000,0x0004002b,0x00000010,0x0000003a,0x00000005,0x0004002b,0x00000006,0x0000003e, + 0x0000001f,0x0004002b,0x00000006,0x00000049,0x00000020,0x0004002b,0x00000006,0x0000004c, + 0x00000003,0x0004002b,0x00000006,0x00000052,0x00000001,0x0004002b,0x00000010,0x0000006b, + 0x00000020,0x00040017,0x00000074,0x00000006,0x00000002,0x00040020,0x00000075,0x00000007, + 0x00000074,0x00040017,0x00000077,0x00000006,0x00000003,0x00040020,0x00000078,0x00000001, + 0x00000077,0x0004003b,0x00000078,0x00000079,0x00000001,0x0004002b,0x00000006,0x0000007e, + 0x00000004,0x00040017,0x00000087,0x00000010,0x00000002,0x0008001e,0x00000088,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000087,0x00000074,0x00040020,0x00000089,0x00000009, + 0x00000088,0x0004003b,0x00000089,0x0000008a,0x00000009,0x00040020,0x0000008b,0x00000009, + 0x00000006,0x00090019,0x00000099,0x00000017,0x00000001,0x00000000,0x00000001,0x00000000, + 0x00000002,0x00000002,0x00040020,0x0000009a,0x00000000,0x00000099,0x0004003b,0x0000009a, + 0x0000009b,0x00000000,0x0004002b,0x00000010,0x0000009d,0x00000004,0x00040020,0x0000009e, + 0x00000009,0x00000087,0x0004002b,0x00000006,0x000000a4,0x00000002,0x00040020,0x000000a5, + 0x00000001,0x00000006,0x0004002b,0x00000010,0x000000a8,0x00000003,0x0004002b,0x00000010, + 0x000000ab,0x00000008,0x00040017,0x000000af,0x00000010,0x00000003,0x0004002b,0x00000010, + 0x000000b9,0x0000000f,0x0004002b,0x00000010,0x000000c0,0x00000000,0x0004002b,0x00000010, + 0x000000c6,0x00000001,0x0004002b,0x00000010,0x000000cd,0x0000ffff,0x0004002b,0x00000010, + 0x000000d0,0x00000010,0x0004002b,0x00000010,0x000000d2,0x00008000,0x0004002b,0x00000010, + 0x000000f2,0x00007fff,0x0004002b,0x00000010,0x000000f6,0x00004000,0x0004002b,0x00000010, + 0x0000010c,0x0000001f,0x0004002b,0x00000010,0x0000010e,0x00000006,0x0004002b,0x00000006, + 0x00000126,0x00008000,0x0004002b,0x00000010,0x0000013f,0x00000002,0x0004002b,0x00000006, + 0x00000143,0x00000005,0x0004001c,0x00000145,0x00000010,0x00000049,0x0004002b,0x00000010, + 0x00000146,0x0000000a,0x0004002b,0x00000010,0x00000147,0xffffffff,0x0004002b,0x00000010, + 0x00000148,0x0000000b,0x0004002b,0x00000010,0x00000149,0x0000000c,0x0004002b,0x00000010, + 0x0000014a,0x0000000d,0x0004002b,0x00000010,0x0000014b,0x00000007,0x0004002b,0x00000010, + 0x0000014c,0x00000009,0x0023002c,0x00000145,0x0000014d,0x000000c0,0x000000c6,0x0000013f, + 0x00000146,0x00000147,0x00000147,0x000000a8,0x00000148,0x00000147,0x00000147,0x0000009d, + 0x00000149,0x00000147,0x00000147,0x0000003a,0x0000014a,0x00000147,0x00000147,0x0000010e, + 0x00000147,0x00000147,0x00000147,0x0000014b,0x00000147,0x00000147,0x00000147,0x000000ab, + 0x00000147,0x00000147,0x00000147,0x0000014c,0x00000147,0x00040020,0x0000014f,0x00000007, + 0x00000145,0x0004002b,0x00000006,0x0000015e,0x00000010,0x0004002b,0x00000017,0x00000164, + 0x00000000,0x0004002b,0x00000017,0x00000165,0x3f800000,0x0007002c,0x00000018,0x00000166, + 0x00000164,0x00000164,0x00000164,0x00000165,0x0004002b,0x00000006,0x00000176,0x0000000c, + 0x0004001c,0x00000177,0x00000010,0x00000176,0x00040020,0x00000178,0x00000007,0x00000177, + 0x0004002b,0x00000006,0x00000180,0x0000000f,0x0004001c,0x00000181,0x00000006,0x00000180, + 0x0004002b,0x00000006,0x00000182,0x00000014,0x0004002b,0x00000006,0x00000183,0x0000002c, + 0x0004002b,0x00000006,0x00000184,0x0000003f,0x0004002b,0x00000006,0x00000185,0x00000054, + 0x0004002b,0x00000006,0x00000186,0x00000069,0x0004002b,0x00000006,0x00000187,0x0000007d, + 0x0004002b,0x00000006,0x00000188,0x00000091,0x0004002b,0x00000006,0x00000189,0x000000a7, + 0x0004002b,0x00000006,0x0000018a,0x000000bd,0x0004002b,0x00000006,0x0000018b,0x000000d5, + 0x0004002b,0x00000006,0x0000018c,0x000000db,0x0004002b,0x00000006,0x0000018d,0x000000e4, + 0x0004002b,0x00000006,0x0000018e,0x000000ed,0x0004002b,0x00000006,0x0000018f,0x000000f6, + 0x0012002c,0x00000181,0x00000190,0x00000033,0x00000182,0x00000183,0x00000184,0x00000185, + 0x00000186,0x00000187,0x00000188,0x00000189,0x0000018a,0x0000018b,0x0000018c,0x0000018d, + 0x0000018e,0x0000018f,0x00040020,0x00000192,0x00000007,0x00000181,0x0004001c,0x000001a3, + 0x00000006,0x0000018f,0x0004002b,0x00000006,0x000001a4,0x00000816,0x0004002b,0x00000006, + 0x000001a5,0x0000081a,0x0004002b,0x00000006,0x000001a6,0x0000081b,0x0004002b,0x00000006, + 0x000001a7,0x000000a0,0x0004002b,0x00000006,0x000001a8,0x000000a4,0x0004002b,0x00000006, + 0x000001a9,0x000000a8,0x0004002b,0x00000006,0x000001aa,0x00000051,0x0004002b,0x00000006, + 0x000001ab,0x00000817,0x0004002b,0x00000006,0x000001ac,0x00000046,0x0004002b,0x00000006, + 0x000001ad,0x00000055,0x0004002b,0x00000006,0x000001ae,0x0000001b,0x0004002b,0x00000006, + 0x000001af,0x00000047,0x0004002b,0x00000006,0x000001b0,0x00000059,0x0004002b,0x00000006, + 0x000001b1,0x0000021b,0x0004002b,0x00000006,0x000001b2,0x0000004a,0x0004002b,0x00000006, + 0x000001b3,0x00000052,0x0004002b,0x00000006,0x000001b4,0x0000041b,0x0004002b,0x00000006, + 0x000001b5,0x00000053,0x0004002b,0x00000006,0x000001b6,0x0000061b,0x0004002b,0x00000006, + 0x000001b7,0x0000005c,0x0004002b,0x00000006,0x000001b8,0x00000a16,0x0004002b,0x00000006, + 0x000001b9,0x00000a17,0x0004002b,0x00000006,0x000001ba,0x00000070,0x0004002b,0x00000006, + 0x000001bb,0x00000074,0x0004002b,0x00000006,0x000001bc,0x00000a1a,0x0004002b,0x00000006, + 0x000001bd,0x00000078,0x0004002b,0x00000006,0x000001be,0x00000a1b,0x0004002b,0x00000006, + 0x000001bf,0x00000061,0x0004002b,0x00000006,0x000001c0,0x00000065,0x0004002b,0x00000006, + 0x000001c1,0x00000062,0x0004002b,0x00000006,0x000001c2,0x00000063,0x0004002b,0x00000006, + 0x000001c3,0x00001410,0x0004002b,0x00000006,0x000001c4,0x00000045,0x0004002b,0x00000006, + 0x000001c5,0x00001414,0x0004002b,0x00000006,0x000001c6,0x00000049,0x0004002b,0x00000006, + 0x000001c7,0x00001418,0x0004002b,0x00000006,0x000001c8,0x00000041,0x0004002b,0x00000006, + 0x000001c9,0x00000042,0x0004002b,0x00000006,0x000001ca,0x00000043,0x0004002b,0x00000006, + 0x000001cb,0x00000090,0x0004002b,0x00000006,0x000001cc,0x00000094,0x0004002b,0x00000006, + 0x000001cd,0x00000098,0x0004002b,0x00000006,0x000001ce,0x00000080,0x0004002b,0x00000006, + 0x000001cf,0x00000084,0x0004002b,0x00000006,0x000001d0,0x00000088,0x0004002b,0x00000006, + 0x000001d1,0x00000060,0x0004002b,0x00000006,0x000001d2,0x00000064,0x0004002b,0x00000006, + 0x000001d3,0x00000068,0x0004002b,0x00000006,0x000001d4,0x000000a1,0x0004002b,0x00000006, + 0x000001d5,0x000000a5,0x0004002b,0x00000006,0x000001d6,0x000000a9,0x0004002b,0x00000006, + 0x000001d7,0x00000095,0x0004002b,0x00000006,0x000001d8,0x00000099,0x0004002b,0x00000006, + 0x000001d9,0x00000081,0x0004002b,0x00000006,0x000001da,0x00005420,0x0004002b,0x00000006, + 0x000001db,0x00000085,0x0004002b,0x00000006,0x000001dc,0x00005424,0x0004002b,0x00000006, + 0x000001dd,0x00000089,0x0004002b,0x00000006,0x000001de,0x00005428,0x0004002b,0x00000006, + 0x000001df,0x00005460,0x0004002b,0x00000006,0x000001e0,0x00005464,0x0004002b,0x00000006, + 0x000001e1,0x00005468,0x00f9002c,0x000001a3,0x000001e2,0x000001a4,0x000001a5,0x000001a6, + 0x000001a7,0x000001a8,0x000001a9,0x000001aa,0x000001ab,0x000001ac,0x000001ad,0x000001ae, + 0x000001af,0x000001b0,0x000001b1,0x000001b2,0x000001b3,0x000001b4,0x000001b5,0x000001b6, + 0x000001b7,0x000001b8,0x000001ab,0x000001b9,0x000001ba,0x000001ae,0x000001b1,0x000001a5, + 0x000001bb,0x000001bc,0x000001b4,0x000001a4,0x000001bd,0x000001b6,0x000001be,0x000001a6, + 0x000001bf,0x000001ac,0x000001c0,0x000001af,0x00000186,0x000001b2,0x000001c1,0x000001c2, + 0x000001b7,0x000001a7,0x000001a8,0x000001a9,0x000001aa,0x000001c3,0x000001ac,0x000001c4, + 0x000001c5,0x000001ae,0x000001af,0x000001c6,0x000001c7,0x000001b1,0x000001b2,0x000001b3, + 0x000001b4,0x000001b5,0x000001b6,0x000001b7,0x000001a7,0x000001a8,0x000001a9,0x000001c8, + 0x000001c3,0x000001ab,0x000001ac,0x000001ad,0x000001c5,0x000001af,0x000001c6,0x000001c7, + 0x000001b1,0x000001b2,0x000001c9,0x000001ae,0x000001b4,0x000001ca,0x000001a4,0x000001b6, + 0x000001b7,0x000001a7,0x000001a8,0x000001a9,0x000001c8,0x000001c3,0x000001a5,0x000001ac, + 0x000001c4,0x000001c5,0x000001ae,0x000001af,0x000001b0,0x000001c7,0x000001b2,0x000001c9, + 0x000001b1,0x000001b4,0x000001ca,0x000001a6,0x000001b6,0x000001b7,0x000001cb,0x000001a5, + 0x000001cc,0x000001a4,0x000001cd,0x000001a6,0x000001aa,0x000001ab,0x000001ac,0x000001ad, + 0x000001ae,0x000001af,0x000001b0,0x000001b1,0x000001b2,0x000001b3,0x000001b4,0x000001b5, + 0x000001b6,0x000001b7,0x000001ce,0x000001ab,0x000001a5,0x000001cf,0x000001b4,0x000001a4, + 0x000001d0,0x000001b6,0x000001a6,0x000001bf,0x000001ac,0x000001ad,0x000001ae,0x000001af, + 0x000001b0,0x000001b1,0x000001b2,0x000001c1,0x000001c2,0x000001b7,0x000001ce,0x000001ae, + 0x000001a5,0x000001cf,0x000001b8,0x000001a4,0x000001d0,0x000001b9,0x000001a6,0x000001aa, + 0x000001ab,0x000001ac,0x000001c0,0x000001af,0x000001b0,0x000001b1,0x000001b2,0x000001b3, + 0x000001b4,0x000001b5,0x000001b6,0x000001b7,0x000001ce,0x000001b1,0x000001a5,0x000001cf, + 0x000001bc,0x000001a4,0x000001d0,0x000001be,0x000001a6,0x000001aa,0x000001ab,0x000001ac, + 0x000001ad,0x000001ae,0x000001af,0x00000186,0x000001b2,0x000001b3,0x000001b4,0x000001b5, + 0x000001b6,0x000001b7,0x000001d1,0x000001ab,0x000001ae,0x000001b1,0x000001a5,0x000001d2, + 0x000001b8,0x000001bc,0x000001b4,0x000001a4,0x000001d3,0x000001b9,0x000001b6,0x000001be, + 0x000001a6,0x000001bf,0x000001ac,0x000001c0,0x000001af,0x00000186,0x000001b2,0x000001c1, + 0x000001c2,0x000001b7,0x000001a7,0x000001a8,0x000001a9,0x000001d4,0x000001d5,0x000001d6, + 0x000001a7,0x000001a8,0x000001a9,0x00000188,0x000001c3,0x000001d7,0x000001c5,0x000001d8, + 0x000001c7,0x000001a7,0x000001a8,0x000001a9,0x000001d9,0x000001da,0x000001db,0x000001dc, + 0x000001dd,0x000001de,0x000001a7,0x000001a8,0x000001a9,0x000001c8,0x000001df,0x000001c4, + 0x000001e0,0x000001c6,0x000001e1,0x00040020,0x000001e4,0x00000007,0x000001a3,0x0004002b, + 0x00000006,0x000001ff,0x00004000,0x0004002b,0x00000006,0x00000221,0x0000000e,0x0004001c, + 0x00000222,0x00000010,0x00000221,0x0011002c,0x00000222,0x00000223,0x00000146,0x0000014b, + 0x00000148,0x00000148,0x00000148,0x0000014c,0x000000ab,0x000000ab,0x000000ab,0x0000010e, + 0x00000146,0x00000148,0x00000149,0x000000d0,0x00040020,0x00000225,0x00000007,0x00000222, + 0x0011002c,0x00000222,0x00000255,0x0000003a,0x0000010e,0x0000003a,0x0000009d,0x0000009d, + 0x0000003a,0x0000010e,0x0000003a,0x0000003a,0x0000010e,0x00000146,0x0000014c,0x000000ab, + 0x0000009d,0x0011002c,0x00000222,0x00000264,0x0000003a,0x0000010e,0x0000009d,0x0000003a, + 0x0000009d,0x0000003a,0x0000003a,0x0000010e,0x0000003a,0x0000010e,0x00000146,0x0000014c, + 0x000000ab,0x0000009d,0x0011002c,0x00000222,0x00000273,0x0000003a,0x0000010e,0x0000009d, + 0x0000009d,0x0000003a,0x0000003a,0x0000003a,0x0000003a,0x0000010e,0x0000010e,0x00000146, + 0x0000014c,0x000000ab,0x0000009d,0x0004002b,0x00000006,0x000002d3,0x00000040,0x0004001c, + 0x000002d4,0x00000006,0x000002d3,0x0004002b,0x00000006,0x000002d5,0x50505050,0x0004002b, + 0x00000006,0x000002d6,0x40404040,0x0004002b,0x00000006,0x000002d7,0x54545454,0x0004002b, + 0x00000006,0x000002d8,0x54505040,0x0004002b,0x00000006,0x000002d9,0x50404000,0x0004002b, + 0x00000006,0x000002da,0x55545450,0x0004002b,0x00000006,0x000002db,0x55545040,0x0004002b, + 0x00000006,0x000002dc,0x54504000,0x0004002b,0x00000006,0x000002dd,0x50400000,0x0004002b, + 0x00000006,0x000002de,0x55555450,0x0004002b,0x00000006,0x000002df,0x55544000,0x0004002b, + 0x00000006,0x000002e0,0x54400000,0x0004002b,0x00000006,0x000002e1,0x55555440,0x0004002b, + 0x00000006,0x000002e2,0x55550000,0x0004002b,0x00000006,0x000002e3,0x55555500,0x0004002b, + 0x00000006,0x000002e4,0x55000000,0x0004002b,0x00000006,0x000002e5,0x55150100,0x0004002b, + 0x00000006,0x000002e6,0x00004054,0x0004002b,0x00000006,0x000002e7,0x15010000,0x0004002b, + 0x00000006,0x000002e8,0x00405054,0x0004002b,0x00000006,0x000002e9,0x00004050,0x0004002b, + 0x00000006,0x000002ea,0x15050100,0x0004002b,0x00000006,0x000002eb,0x05010000,0x0004002b, + 0x00000006,0x000002ec,0x40505054,0x0004002b,0x00000006,0x000002ed,0x00404050,0x0004002b, + 0x00000006,0x000002ee,0x05010100,0x0004002b,0x00000006,0x000002ef,0x14141414,0x0004002b, + 0x00000006,0x000002f0,0x05141450,0x0004002b,0x00000006,0x000002f1,0x01155440,0x0004002b, + 0x00000006,0x000002f2,0x00555500,0x0004002b,0x00000006,0x000002f3,0x15014054,0x0004002b, + 0x00000006,0x000002f4,0x05414150,0x0004002b,0x00000006,0x000002f5,0x44444444,0x0004002b, + 0x00000006,0x000002f6,0x55005500,0x0004002b,0x00000006,0x000002f7,0x11441144,0x0004002b, + 0x00000006,0x000002f8,0x05055050,0x0004002b,0x00000006,0x000002f9,0x05500550,0x0004002b, + 0x00000006,0x000002fa,0x11114444,0x0004002b,0x00000006,0x000002fb,0x41144114,0x0004002b, + 0x00000006,0x000002fc,0x44111144,0x0004002b,0x00000006,0x000002fd,0x15055054,0x0004002b, + 0x00000006,0x000002fe,0x01055040,0x0004002b,0x00000006,0x000002ff,0x05041050,0x0004002b, + 0x00000006,0x00000300,0x05455150,0x0004002b,0x00000006,0x00000301,0x14414114,0x0004002b, + 0x00000006,0x00000302,0x50050550,0x0004002b,0x00000006,0x00000303,0x41411414,0x0004002b, + 0x00000006,0x00000304,0x00141400,0x0004002b,0x00000006,0x00000305,0x00041504,0x0004002b, + 0x00000006,0x00000306,0x00105410,0x0004002b,0x00000006,0x00000307,0x10541000,0x0004002b, + 0x00000006,0x00000308,0x04150400,0x0004002b,0x00000006,0x00000309,0x50410514,0x0004002b, + 0x00000006,0x0000030a,0x41051450,0x0004002b,0x00000006,0x0000030b,0x05415014,0x0004002b, + 0x00000006,0x0000030c,0x14054150,0x0004002b,0x00000006,0x0000030d,0x41050514,0x0004002b, + 0x00000006,0x0000030e,0x41505014,0x0004002b,0x00000006,0x0000030f,0x40011554,0x0004002b, + 0x00000006,0x00000310,0x54150140,0x0004002b,0x00000006,0x00000311,0x50505500,0x0004002b, + 0x00000006,0x00000312,0x00555050,0x0004002b,0x00000006,0x00000313,0x15151010,0x0004002b, + 0x00000006,0x00000314,0x54540404,0x0043002c,0x000002d4,0x00000315,0x000002d5,0x000002d6, + 0x000002d7,0x000002d8,0x000002d9,0x000002da,0x000002db,0x000002dc,0x000002dd,0x000002de, + 0x000002df,0x000002e0,0x000002e1,0x000002e2,0x000002e3,0x000002e4,0x000002e5,0x000002e6, + 0x000002e7,0x000002e8,0x000002e9,0x000002ea,0x000002eb,0x000002ec,0x000002ed,0x000002ee, + 0x000002ef,0x000002f0,0x000002f1,0x000002f2,0x000002f3,0x000002f4,0x000002f5,0x000002f6, + 0x000002f7,0x000002f8,0x000002f9,0x000002fa,0x000002fb,0x000002fc,0x000002fd,0x000002fe, + 0x000002ff,0x00000300,0x00000301,0x00000302,0x00000303,0x00000304,0x00000305,0x00000306, + 0x00000307,0x00000308,0x00000309,0x0000030a,0x0000030b,0x0000030c,0x0000030d,0x0000030e, + 0x0000030f,0x00000310,0x00000311,0x00000312,0x00000313,0x00000314,0x00040020,0x00000317, + 0x00000007,0x000002d4,0x0004002b,0x00000006,0x0000031c,0x00000008,0x0004002b,0x00000006, + 0x0000031d,0x00000006,0x0043002c,0x000002d4,0x0000031e,0x00000180,0x00000180,0x00000180, + 0x00000180,0x00000180,0x00000180,0x00000180,0x00000180,0x00000180,0x00000180,0x00000180, + 0x00000180,0x00000180,0x00000180,0x00000180,0x00000180,0x00000180,0x000000a4,0x0000031c, + 0x000000a4,0x000000a4,0x0000031c,0x0000031c,0x00000180,0x000000a4,0x0000031c,0x000000a4, + 0x000000a4,0x0000031c,0x0000031c,0x000000a4,0x000000a4,0x00000180,0x00000180,0x0000031d, + 0x0000031c,0x000000a4,0x0000031c,0x00000180,0x00000180,0x000000a4,0x0000031c,0x000000a4, + 0x000000a4,0x000000a4,0x00000180,0x00000180,0x0000031d,0x0000031d,0x000000a4,0x0000031d, + 0x0000031c,0x00000180,0x00000180,0x000000a4,0x000000a4,0x00000180,0x00000180,0x00000180, + 0x00000180,0x00000180,0x000000a4,0x000000a4,0x00000180,0x0004001c,0x0000035d,0x00000010, + 0x0000031c,0x0004002b,0x00000010,0x0000035e,0x00000012,0x0004002b,0x00000010,0x0000035f, + 0x0000001b,0x0004002b,0x00000010,0x00000360,0x00000025,0x0004002b,0x00000010,0x00000361, + 0x0000002e,0x0004002b,0x00000010,0x00000362,0x00000037,0x0004002b,0x00000010,0x00000363, + 0x00000040,0x000b002c,0x0000035d,0x00000364,0x000000c0,0x0000014c,0x0000035e,0x0000035f, + 0x00000360,0x00000361,0x00000362,0x00000363,0x00040020,0x00000366,0x00000007,0x0000035d, + 0x0004001c,0x0000036b,0x00000010,0x0000015e,0x0004002b,0x00000010,0x0000036c,0x00000011, + 0x0004002b,0x00000010,0x0000036d,0x00000015,0x0004002b,0x00000010,0x0000036e,0x0000001a, + 0x0004002b,0x00000010,0x0000036f,0x0000001e,0x0004002b,0x00000010,0x00000370,0x00000022, + 0x0004002b,0x00000010,0x00000371,0x00000026,0x0004002b,0x00000010,0x00000372,0x0000002b, + 0x0004002b,0x00000010,0x00000373,0x0000002f,0x0004002b,0x00000010,0x00000374,0x00000033, + 0x0004002b,0x00000010,0x00000375,0x0000003c,0x0013002c,0x0000036b,0x00000376,0x000000c0, + 0x0000009d,0x0000014c,0x0000014a,0x0000036c,0x0000036d,0x0000036e,0x0000036f,0x00000370, + 0x00000371,0x00000372,0x00000373,0x00000374,0x00000362,0x00000375,0x00000363,0x00040020, + 0x00000378,0x00000007,0x0000036b,0x00040020,0x00000398,0x00000007,0x00000077,0x00040017, + 0x000003b2,0x00000017,0x00000002,0x00040020,0x000003c8,0x00000009,0x00000074,0x0003001d, + 0x000003f6,0x00000006,0x0003001e,0x000003f7,0x000003f6,0x00040020,0x000003f8,0x0000000c, + 0x000003f7,0x0004003b,0x000003f8,0x000003f9,0x0000000c,0x00040020,0x000003fb,0x0000000c, + 0x00000006,0x0006002c,0x00000077,0x00000423,0x0000031c,0x0000031c,0x00000052,0x0004002b, + 0x00000006,0x00000424,0xaa685050,0x0004002b,0x00000006,0x00000425,0x6a5a5040,0x0004002b, + 0x00000006,0x00000426,0x5a5a4200,0x0004002b,0x00000006,0x00000427,0x5450a0a8,0x0004002b, + 0x00000006,0x00000428,0xa5a50000,0x0004002b,0x00000006,0x00000429,0xa0a05050,0x0004002b, + 0x00000006,0x0000042a,0x5555a0a0,0x0004002b,0x00000006,0x0000042b,0x5a5a5050,0x0004002b, + 0x00000006,0x0000042c,0xaa550000,0x0004002b,0x00000006,0x0000042d,0xaa555500,0x0004002b, + 0x00000006,0x0000042e,0xaaaa5500,0x0004002b,0x00000006,0x0000042f,0x90909090,0x0004002b, + 0x00000006,0x00000430,0x94949494,0x0004002b,0x00000006,0x00000431,0xa4a4a4a4,0x0004002b, + 0x00000006,0x00000432,0xa9a59450,0x0004002b,0x00000006,0x00000433,0x2a0a4250,0x0004002b, + 0x00000006,0x00000434,0xa5945040,0x0004002b,0x00000006,0x00000435,0x0a425054,0x0004002b, + 0x00000006,0x00000436,0xa5a5a500,0x0004002b,0x00000006,0x00000437,0x55a0a0a0,0x0004002b, + 0x00000006,0x00000438,0xa8a85454,0x0004002b,0x00000006,0x00000439,0x6a6a4040,0x0004002b, + 0x00000006,0x0000043a,0xa4a45000,0x0004002b,0x00000006,0x0000043b,0x1a1a0500,0x0004002b, + 0x00000006,0x0000043c,0x0050a4a4,0x0004002b,0x00000006,0x0000043d,0xaaa59090,0x0004002b, + 0x00000006,0x0000043e,0x14696914,0x0004002b,0x00000006,0x0000043f,0x69691400,0x0004002b, + 0x00000006,0x00000440,0xa08585a0,0x0004002b,0x00000006,0x00000441,0xaa821414,0x0004002b, + 0x00000006,0x00000442,0x50a4a450,0x0004002b,0x00000006,0x00000443,0x6a5a0200,0x0004002b, + 0x00000006,0x00000444,0xa9a58000,0x0004002b,0x00000006,0x00000445,0x5090a0a8,0x0004002b, + 0x00000006,0x00000446,0xa8a09050,0x0004002b,0x00000006,0x00000447,0x24242424,0x0004002b, + 0x00000006,0x00000448,0x00aa5500,0x0004002b,0x00000006,0x00000449,0x24924924,0x0004002b, + 0x00000006,0x0000044a,0x24499224,0x0004002b,0x00000006,0x0000044b,0x50a50a50,0x0004002b, + 0x00000006,0x0000044c,0x500aa550,0x0004002b,0x00000006,0x0000044d,0xaaaa4444,0x0004002b, + 0x00000006,0x0000044e,0x66660000,0x0004002b,0x00000006,0x0000044f,0xa5a0a5a0,0x0004002b, + 0x00000006,0x00000450,0x50a050a0,0x0004002b,0x00000006,0x00000451,0x69286928,0x0004002b, + 0x00000006,0x00000452,0x44aaaa44,0x0004002b,0x00000006,0x00000453,0x66666600,0x0004002b, + 0x00000006,0x00000454,0xaa444444,0x0004002b,0x00000006,0x00000455,0x54a854a8,0x0004002b, + 0x00000006,0x00000456,0x95809580,0x0004002b,0x00000006,0x00000457,0x96969600,0x0004002b, + 0x00000006,0x00000458,0xa85454a8,0x0004002b,0x00000006,0x00000459,0x80959580,0x0004002b, + 0x00000006,0x0000045a,0xaa141414,0x0004002b,0x00000006,0x0000045b,0x96960000,0x0004002b, + 0x00000006,0x0000045c,0xaaaa1414,0x0004002b,0x00000006,0x0000045d,0xa05050a0,0x0004002b, + 0x00000006,0x0000045e,0xa0a5a5a0,0x0004002b,0x00000006,0x0000045f,0x96000000,0x0004002b, + 0x00000006,0x00000460,0x40804080,0x0004002b,0x00000006,0x00000461,0xa9a8a9a8,0x0004002b, + 0x00000006,0x00000462,0xaaaaaa44,0x0004002b,0x00000006,0x00000463,0x2a4a5254,0x0043002c, + 0x000002d4,0x00000464,0x00000424,0x00000425,0x00000426,0x00000427,0x00000428,0x00000429, + 0x0000042a,0x0000042b,0x0000042c,0x0000042d,0x0000042e,0x0000042f,0x00000430,0x00000431, + 0x00000432,0x00000433,0x00000434,0x00000435,0x00000436,0x00000437,0x00000438,0x00000439, + 0x0000043a,0x0000043b,0x0000043c,0x0000043d,0x0000043e,0x0000043f,0x00000440,0x00000441, + 0x00000442,0x00000443,0x00000444,0x00000445,0x00000446,0x00000447,0x00000448,0x00000449, + 0x0000044a,0x0000044b,0x0000044c,0x0000044d,0x0000044e,0x0000044f,0x00000450,0x00000451, + 0x00000452,0x00000453,0x00000454,0x00000455,0x00000456,0x00000457,0x00000458,0x00000459, + 0x0000045a,0x0000045b,0x0000045c,0x0000045d,0x0000045e,0x0000045f,0x00000460,0x00000461, + 0x00000462,0x00000463,0x0004002b,0x00000006,0x00000465,0x000000f3,0x0004002b,0x00000006, + 0x00000466,0x00000083,0x0004002b,0x00000006,0x00000467,0x0000008f,0x0004002b,0x00000006, + 0x00000468,0x000000f8,0x0004002b,0x00000006,0x00000469,0x000000f5,0x0004002b,0x00000006, + 0x0000046a,0x0000008a,0x0004002b,0x00000006,0x0000046b,0x00000035,0x0004002b,0x00000006, + 0x0000046c,0x000000a6,0x0004002b,0x00000006,0x0000046d,0x000000af,0x0004002b,0x00000006, + 0x0000046e,0x0000006f,0x0004002b,0x00000006,0x0000046f,0x000000fa,0x0004002b,0x00000006, + 0x00000470,0x000000fd,0x0004002b,0x00000006,0x00000471,0x000000fc,0x0043002c,0x000002d4, + 0x00000472,0x00000465,0x00000466,0x00000467,0x00000184,0x00000468,0x00000465,0x00000184, + 0x00000467,0x00000468,0x00000468,0x0000018f,0x0000018f,0x0000018f,0x00000469,0x00000465, + 0x00000466,0x00000465,0x00000466,0x00000468,0x00000184,0x00000465,0x00000466,0x0000018f, + 0x0000046a,0x0000046b,0x00000468,0x000001d3,0x0000046c,0x00000468,0x00000469,0x0000046d, + 0x00000467,0x00000468,0x00000184,0x00000465,0x000001d5,0x0000046c,0x0000046a,0x000001cd, + 0x0000046d,0x0000046e,0x00000465,0x00000467,0x00000469,0x00000184,0x0000046e,0x0000046e, + 0x00000467,0x00000465,0x00000184,0x00000469,0x00000469,0x00000469,0x00000468,0x00000469, + 0x0000046f,0x00000469,0x0000046f,0x00000468,0x00000470,0x00000184,0x00000471,0x00000465, + 0x00000466,0x000b002c,0x0000035d,0x00000473,0x0000009d,0x0000010e,0x0000003a,0x0000014b, + 0x0000003a,0x0000014b,0x0000014b,0x0000003a,0x000b002c,0x0000035d,0x00000474,0x000000c0, + 0x000000c0,0x000000c0,0x000000c0,0x0000010e,0x000000ab,0x0000014b,0x0000003a,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000075, + 0x000003c4,0x00000007,0x0004003b,0x00000075,0x000003c7,0x00000007,0x0004003b,0x00000009, + 0x000003e0,0x00000007,0x0004003b,0x00000009,0x000003e1,0x00000007,0x0004003b,0x00000008, + 0x000003f5,0x00000007,0x0004003b,0x00000009,0x00000404,0x00000007,0x0004003b,0x00000009, + 0x0000040f,0x00000007,0x0004003b,0x00000021,0x00000419,0x00000007,0x0004003b,0x00000008, + 0x0000041e,0x00000007,0x0004003b,0x00000021,0x00000420,0x00000007,0x0004003d,0x00000077, + 0x000003c5,0x00000079,0x0007004f,0x00000074,0x000003c6,0x000003c5,0x000003c5,0x00000000, + 0x00000001,0x0003003e,0x000003c4,0x000003c6,0x00050041,0x000003c8,0x000003c9,0x0000008a, + 0x0000003a,0x0004003d,0x00000074,0x000003ca,0x000003c9,0x00050050,0x00000074,0x000003cb, + 0x0000004c,0x0000004c,0x00050080,0x00000074,0x000003cc,0x000003ca,0x000003cb,0x00050050, + 0x00000074,0x000003cd,0x0000007e,0x0000007e,0x00050086,0x00000074,0x000003ce,0x000003cc, + 0x000003cd,0x0003003e,0x000003c7,0x000003ce,0x00050041,0x00000009,0x000003cf,0x000003c4, + 0x00000033,0x0004003d,0x00000006,0x000003d0,0x000003cf,0x00050041,0x00000009,0x000003d1, + 0x000003c7,0x00000033,0x0004003d,0x00000006,0x000003d2,0x000003d1,0x000500ae,0x00000020, + 0x000003d3,0x000003d0,0x000003d2,0x000400a8,0x00000020,0x000003d4,0x000003d3,0x000300f7, + 0x000003d6,0x00000000,0x000400fa,0x000003d4,0x000003d5,0x000003d6,0x000200f8,0x000003d5, + 0x00050041,0x00000009,0x000003d7,0x000003c4,0x00000052,0x0004003d,0x00000006,0x000003d8, + 0x000003d7,0x00050041,0x00000009,0x000003d9,0x000003c7,0x00000052,0x0004003d,0x00000006, + 0x000003da,0x000003d9,0x000500ae,0x00000020,0x000003db,0x000003d8,0x000003da,0x000200f9, + 0x000003d6,0x000200f8,0x000003d6,0x000700f5,0x00000020,0x000003dc,0x000003d3,0x00000005, + 0x000003db,0x000003d5,0x000300f7,0x000003de,0x00000000,0x000400fa,0x000003dc,0x000003dd, + 0x000003de,0x000200f8,0x000003dd,0x000100fd,0x000200f8,0x000003de,0x0003003e,0x000003e0, + 0x0000007e,0x00050041,0x0000008b,0x000003e2,0x0000008a,0x000000c0,0x0004003d,0x00000006, + 0x000003e3,0x000003e2,0x00050041,0x000000a5,0x000003e4,0x00000079,0x000000a4,0x0004003d, + 0x00000006,0x000003e5,0x000003e4,0x00050041,0x0000008b,0x000003e6,0x0000008a,0x0000013f, + 0x0004003d,0x00000006,0x000003e7,0x000003e6,0x00050084,0x00000006,0x000003e8,0x000003e5, + 0x000003e7,0x00050041,0x00000009,0x000003e9,0x000003c4,0x00000052,0x0004003d,0x00000006, + 0x000003ea,0x000003e9,0x00050041,0x0000008b,0x000003eb,0x0000008a,0x000000c6,0x0004003d, + 0x00000006,0x000003ec,0x000003eb,0x00050084,0x00000006,0x000003ed,0x000003ea,0x000003ec, + 0x00050080,0x00000006,0x000003ee,0x000003e8,0x000003ed,0x00050041,0x00000009,0x000003ef, + 0x000003c4,0x00000033,0x0004003d,0x00000006,0x000003f0,0x000003ef,0x00050080,0x00000006, + 0x000003f1,0x000003ee,0x000003f0,0x0004003d,0x00000006,0x000003f2,0x000003e0,0x00050084, + 0x00000006,0x000003f3,0x000003f1,0x000003f2,0x00050080,0x00000006,0x000003f4,0x000003e3, + 0x000003f3,0x0003003e,0x000003e1,0x000003f4,0x0004003d,0x00000006,0x000003fa,0x000003e1, + 0x00060041,0x000003fb,0x000003fc,0x000003f9,0x000000c0,0x000003fa,0x0004003d,0x00000006, + 0x000003fd,0x000003fc,0x0004003d,0x00000006,0x000003fe,0x000003e1,0x00050080,0x00000006, + 0x000003ff,0x000003fe,0x00000052,0x00060041,0x000003fb,0x00000400,0x000003f9,0x000000c0, + 0x000003ff,0x0004003d,0x00000006,0x00000401,0x00000400,0x0004003d,0x00000006,0x00000402, + 0x000003e0,0x000500ac,0x00000020,0x00000403,0x00000402,0x000000a4,0x000300f7,0x00000406, + 0x00000000,0x000400fa,0x00000403,0x00000405,0x0000040b,0x000200f8,0x00000405,0x0004003d, + 0x00000006,0x00000407,0x000003e1,0x00050080,0x00000006,0x00000408,0x00000407,0x000000a4, + 0x00060041,0x000003fb,0x00000409,0x000003f9,0x000000c0,0x00000408,0x0004003d,0x00000006, + 0x0000040a,0x00000409,0x0003003e,0x00000404,0x0000040a,0x000200f9,0x00000406,0x000200f8, + 0x0000040b,0x0003003e,0x00000404,0x00000033,0x000200f9,0x00000406,0x000200f8,0x00000406, + 0x0004003d,0x00000006,0x0000040c,0x00000404,0x0004003d,0x00000006,0x0000040d,0x000003e0, + 0x000500ac,0x00000020,0x0000040e,0x0000040d,0x000000a4,0x000300f7,0x00000411,0x00000000, + 0x000400fa,0x0000040e,0x00000410,0x00000416,0x000200f8,0x00000410,0x0004003d,0x00000006, + 0x00000412,0x000003e1,0x00050080,0x00000006,0x00000413,0x00000412,0x0000004c,0x00060041, + 0x000003fb,0x00000414,0x000003f9,0x000000c0,0x00000413,0x0004003d,0x00000006,0x00000415, + 0x00000414,0x0003003e,0x0000040f,0x00000415,0x000200f9,0x00000411,0x000200f8,0x00000416, + 0x0003003e,0x0000040f,0x00000033,0x000200f9,0x00000411,0x000200f8,0x00000411,0x0004003d, + 0x00000006,0x00000417,0x0000040f,0x00070050,0x00000007,0x00000418,0x000003fd,0x00000401, + 0x0000040c,0x00000417,0x0003003e,0x000003f5,0x00000418,0x00050041,0x0000008b,0x0000041a, + 0x0000008a,0x000000a8,0x0004003d,0x00000006,0x0000041b,0x0000041a,0x000500c7,0x00000006, + 0x0000041c,0x0000041b,0x000000a4,0x000500ab,0x00000020,0x0000041d,0x0000041c,0x00000033, + 0x0003003e,0x00000419,0x0000041d,0x0004003d,0x00000007,0x0000041f,0x000003f5,0x0003003e, + 0x0000041e,0x0000041f,0x0004003d,0x00000020,0x00000421,0x00000419,0x0003003e,0x00000420, + 0x00000421,0x00060039,0x00000002,0x00000422,0x00000030,0x0000041e,0x00000420,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000e,0x00000000,0x0000000a,0x00030037,0x00000008, + 0x0000000b,0x00030037,0x00000009,0x0000000c,0x00030037,0x00000009,0x0000000d,0x000200f8, + 0x0000000f,0x0004003b,0x00000009,0x00000038,0x00000007,0x0004003b,0x00000009,0x0000003c, + 0x00000007,0x0004003b,0x00000009,0x00000040,0x00000007,0x0004003b,0x00000009,0x0000005d, + 0x00000007,0x0004003d,0x00000006,0x00000032,0x0000000d,0x000500aa,0x00000020,0x00000034, + 0x00000032,0x00000033,0x000300f7,0x00000036,0x00000000,0x000400fa,0x00000034,0x00000035, + 0x00000036,0x000200f8,0x00000035,0x000200fe,0x00000033,0x000200f8,0x00000036,0x0004003d, + 0x00000006,0x00000039,0x0000000c,0x000500c2,0x00000006,0x0000003b,0x00000039,0x0000003a, + 0x0003003e,0x00000038,0x0000003b,0x0004003d,0x00000006,0x0000003d,0x0000000c,0x000500c7, + 0x00000006,0x0000003f,0x0000003d,0x0000003e,0x0003003e,0x0000003c,0x0000003f,0x0004003d, + 0x00000006,0x00000041,0x00000038,0x00050041,0x00000009,0x00000042,0x0000000b,0x00000041, + 0x0004003d,0x00000006,0x00000043,0x00000042,0x0004003d,0x00000006,0x00000044,0x0000003c, + 0x000500c2,0x00000006,0x00000045,0x00000043,0x00000044,0x0003003e,0x00000040,0x00000045, + 0x0004003d,0x00000006,0x00000046,0x0000003c,0x0004003d,0x00000006,0x00000047,0x0000000d, + 0x00050080,0x00000006,0x00000048,0x00000046,0x00000047,0x000500ac,0x00000020,0x0000004a, + 0x00000048,0x00000049,0x0004003d,0x00000006,0x0000004b,0x00000038,0x000500b0,0x00000020, + 0x0000004d,0x0000004b,0x0000004c,0x000500a7,0x00000020,0x0000004e,0x0000004a,0x0000004d, + 0x000300f7,0x00000050,0x00000000,0x000400fa,0x0000004e,0x0000004f,0x00000050,0x000200f8, + 0x0000004f,0x0004003d,0x00000006,0x00000051,0x00000038,0x00050080,0x00000006,0x00000053, + 0x00000051,0x00000052,0x00050041,0x00000009,0x00000054,0x0000000b,0x00000053,0x0004003d, + 0x00000006,0x00000055,0x00000054,0x0004003d,0x00000006,0x00000056,0x0000003c,0x00050082, + 0x00000006,0x00000057,0x00000049,0x00000056,0x000500c4,0x00000006,0x00000058,0x00000055, + 0x00000057,0x0004003d,0x00000006,0x00000059,0x00000040,0x000500c5,0x00000006,0x0000005a, + 0x00000059,0x00000058,0x0003003e,0x00000040,0x0000005a,0x000200f9,0x00000050,0x000200f8, + 0x00000050,0x0004003d,0x00000006,0x0000005b,0x0000000d,0x000500aa,0x00000020,0x0000005c, + 0x0000005b,0x00000049,0x000300f7,0x0000005f,0x00000000,0x000400fa,0x0000005c,0x0000005e, + 0x00000061,0x000200f8,0x0000005e,0x0004003d,0x00000006,0x00000060,0x00000040,0x0003003e, + 0x0000005d,0x00000060,0x000200f9,0x0000005f,0x000200f8,0x00000061,0x0004003d,0x00000006, + 0x00000062,0x00000040,0x0004003d,0x00000006,0x00000063,0x0000000d,0x000500c4,0x00000006, + 0x00000064,0x00000052,0x00000063,0x00050082,0x00000006,0x00000065,0x00000064,0x00000052, + 0x000500c7,0x00000006,0x00000066,0x00000062,0x00000065,0x0003003e,0x0000005d,0x00000066, + 0x000200f9,0x0000005f,0x000200f8,0x0000005f,0x0004003d,0x00000006,0x00000067,0x0000005d, + 0x000200fe,0x00000067,0x00010038,0x00050036,0x00000010,0x00000015,0x00000000,0x00000012, + 0x00030037,0x00000011,0x00000013,0x00030037,0x00000011,0x00000014,0x000200f8,0x00000016, + 0x0004003d,0x00000010,0x0000006a,0x00000013,0x0004003d,0x00000010,0x0000006c,0x00000014, + 0x00050082,0x00000010,0x0000006d,0x0000006b,0x0000006c,0x000500c4,0x00000010,0x0000006e, + 0x0000006a,0x0000006d,0x0004003d,0x00000010,0x0000006f,0x00000014,0x00050082,0x00000010, + 0x00000070,0x0000006b,0x0000006f,0x000500c3,0x00000010,0x00000071,0x0000006e,0x00000070, + 0x000200fe,0x00000071,0x00010038,0x00050036,0x00000002,0x0000001e,0x00000000,0x0000001a, + 0x00030037,0x00000009,0x0000001b,0x00030037,0x00000009,0x0000001c,0x00030037,0x00000019, + 0x0000001d,0x000200f8,0x0000001f,0x0004003b,0x00000075,0x00000076,0x00000007,0x0004003b, + 0x00000075,0x0000007c,0x00000007,0x0004003d,0x00000077,0x0000007a,0x00000079,0x0007004f, + 0x00000074,0x0000007b,0x0000007a,0x0000007a,0x00000000,0x00000001,0x0003003e,0x00000076, + 0x0000007b,0x0004003d,0x00000074,0x0000007d,0x00000076,0x00050050,0x00000074,0x0000007f, + 0x0000007e,0x0000007e,0x00050084,0x00000074,0x00000080,0x0000007d,0x0000007f,0x0004003d, + 0x00000006,0x00000081,0x0000001b,0x0004003d,0x00000006,0x00000082,0x0000001c,0x00050050, + 0x00000074,0x00000083,0x00000081,0x00000082,0x00050080,0x00000074,0x00000084,0x00000080, + 0x00000083,0x0003003e,0x0000007c,0x00000084,0x00050041,0x00000009,0x00000085,0x0000007c, + 0x00000033,0x0004003d,0x00000006,0x00000086,0x00000085,0x00060041,0x0000008b,0x0000008c, + 0x0000008a,0x0000003a,0x00000033,0x0004003d,0x00000006,0x0000008d,0x0000008c,0x000500b0, + 0x00000020,0x0000008e,0x00000086,0x0000008d,0x000300f7,0x00000090,0x00000000,0x000400fa, + 0x0000008e,0x0000008f,0x00000090,0x000200f8,0x0000008f,0x00050041,0x00000009,0x00000091, + 0x0000007c,0x00000052,0x0004003d,0x00000006,0x00000092,0x00000091,0x00060041,0x0000008b, + 0x00000093,0x0000008a,0x0000003a,0x00000052,0x0004003d,0x00000006,0x00000094,0x00000093, + 0x000500b0,0x00000020,0x00000095,0x00000092,0x00000094,0x000200f9,0x00000090,0x000200f8, + 0x00000090,0x000700f5,0x00000020,0x00000096,0x0000008e,0x0000001f,0x00000095,0x0000008f, + 0x000300f7,0x00000098,0x00000000,0x000400fa,0x00000096,0x00000097,0x00000098,0x000200f8, + 0x00000097,0x0004003d,0x00000099,0x0000009c,0x0000009b,0x00050041,0x0000009e,0x0000009f, + 0x0000008a,0x0000009d,0x0004003d,0x00000087,0x000000a0,0x0000009f,0x0004003d,0x00000074, + 0x000000a1,0x0000007c,0x0004007c,0x00000087,0x000000a2,0x000000a1,0x00050080,0x00000087, + 0x000000a3,0x000000a0,0x000000a2,0x00050041,0x000000a5,0x000000a6,0x00000079,0x000000a4, + 0x0004003d,0x00000006,0x000000a7,0x000000a6,0x00050041,0x0000008b,0x000000a9,0x0000008a, + 0x000000a8,0x0004003d,0x00000006,0x000000aa,0x000000a9,0x000500c2,0x00000006,0x000000ac, + 0x000000aa,0x000000ab,0x00050080,0x00000006,0x000000ad,0x000000a7,0x000000ac,0x0004007c, + 0x00000010,0x000000ae,0x000000ad,0x00050051,0x00000010,0x000000b0,0x000000a3,0x00000000, + 0x00050051,0x00000010,0x000000b1,0x000000a3,0x00000001,0x00060050,0x000000af,0x000000b2, + 0x000000b0,0x000000b1,0x000000ae,0x0004003d,0x00000018,0x000000b3,0x0000001d,0x00040063, + 0x0000009c,0x000000b2,0x000000b3,0x000200f9,0x00000098,0x000200f8,0x00000098,0x000100fd, + 0x00010038,0x00050036,0x00000010,0x00000026,0x00000000,0x00000022,0x00030037,0x00000011, + 0x00000023,0x00030037,0x00000011,0x00000024,0x00030037,0x00000021,0x00000025,0x000200f8, + 0x00000027,0x0004003b,0x00000011,0x000000dd,0x00000007,0x0004003b,0x00000011,0x000000e8, + 0x00000007,0x0004003b,0x00000011,0x000000fd,0x00000007,0x0004003d,0x00000020,0x000000b4, + 0x00000025,0x000400a8,0x00000020,0x000000b5,0x000000b4,0x000300f7,0x000000b7,0x00000000, + 0x000400fa,0x000000b5,0x000000b6,0x000000b7,0x000200f8,0x000000b6,0x0004003d,0x00000010, + 0x000000b8,0x00000024,0x000500af,0x00000020,0x000000ba,0x000000b8,0x000000b9,0x000300f7, + 0x000000bc,0x00000000,0x000400fa,0x000000ba,0x000000bb,0x000000bc,0x000200f8,0x000000bb, + 0x0004003d,0x00000010,0x000000bd,0x00000023,0x000200fe,0x000000bd,0x000200f8,0x000000bc, + 0x0004003d,0x00000010,0x000000bf,0x00000023,0x000500aa,0x00000020,0x000000c1,0x000000bf, + 0x000000c0,0x000300f7,0x000000c3,0x00000000,0x000400fa,0x000000c1,0x000000c2,0x000000c3, + 0x000200f8,0x000000c2,0x000200fe,0x000000c0,0x000200f8,0x000000c3,0x0004003d,0x00000010, + 0x000000c5,0x00000023,0x0004003d,0x00000010,0x000000c7,0x00000024,0x000500c4,0x00000010, + 0x000000c8,0x000000c6,0x000000c7,0x00050082,0x00000010,0x000000c9,0x000000c8,0x000000c6, + 0x000500aa,0x00000020,0x000000ca,0x000000c5,0x000000c9,0x000300f7,0x000000cc,0x00000000, + 0x000400fa,0x000000ca,0x000000cb,0x000000cc,0x000200f8,0x000000cb,0x000200fe,0x000000cd, + 0x000200f8,0x000000cc,0x0004003d,0x00000010,0x000000cf,0x00000023,0x000500c4,0x00000010, + 0x000000d1,0x000000cf,0x000000d0,0x00050080,0x00000010,0x000000d3,0x000000d1,0x000000d2, + 0x0004003d,0x00000010,0x000000d4,0x00000024,0x000500c3,0x00000010,0x000000d5,0x000000d3, + 0x000000d4,0x000200fe,0x000000d5,0x000200f8,0x000000b7,0x0004003d,0x00000010,0x000000d7, + 0x00000024,0x000500af,0x00000020,0x000000d8,0x000000d7,0x000000d0,0x000300f7,0x000000da, + 0x00000000,0x000400fa,0x000000d8,0x000000d9,0x000000da,0x000200f8,0x000000d9,0x0004003d, + 0x00000010,0x000000db,0x00000023,0x000200fe,0x000000db,0x000200f8,0x000000da,0x0003003e, + 0x000000dd,0x000000c0,0x0004003d,0x00000010,0x000000de,0x00000023,0x000500b1,0x00000020, + 0x000000df,0x000000de,0x000000c0,0x000300f7,0x000000e1,0x00000000,0x000400fa,0x000000df, + 0x000000e0,0x000000e1,0x000200f8,0x000000e0,0x0003003e,0x000000dd,0x000000c6,0x0004003d, + 0x00000010,0x000000e2,0x00000023,0x0004007e,0x00000010,0x000000e3,0x000000e2,0x0003003e, + 0x00000023,0x000000e3,0x000200f9,0x000000e1,0x000200f8,0x000000e1,0x0004003d,0x00000010, + 0x000000e4,0x00000023,0x000500aa,0x00000020,0x000000e5,0x000000e4,0x000000c0,0x000300f7, + 0x000000e7,0x00000000,0x000400fa,0x000000e5,0x000000e6,0x000000e9,0x000200f8,0x000000e6, + 0x0003003e,0x000000e8,0x000000c0,0x000200f9,0x000000e7,0x000200f8,0x000000e9,0x0004003d, + 0x00000010,0x000000ea,0x00000023,0x0004003d,0x00000010,0x000000eb,0x00000024,0x00050082, + 0x00000010,0x000000ec,0x000000eb,0x000000c6,0x000500c4,0x00000010,0x000000ed,0x000000c6, + 0x000000ec,0x00050082,0x00000010,0x000000ee,0x000000ed,0x000000c6,0x000500af,0x00000020, + 0x000000ef,0x000000ea,0x000000ee,0x000300f7,0x000000f1,0x00000000,0x000400fa,0x000000ef, + 0x000000f0,0x000000f3,0x000200f8,0x000000f0,0x0003003e,0x000000e8,0x000000f2,0x000200f9, + 0x000000f1,0x000200f8,0x000000f3,0x0004003d,0x00000010,0x000000f4,0x00000023,0x000500c4, + 0x00000010,0x000000f5,0x000000f4,0x000000b9,0x00050080,0x00000010,0x000000f7,0x000000f5, + 0x000000f6,0x0004003d,0x00000010,0x000000f8,0x00000024,0x00050082,0x00000010,0x000000f9, + 0x000000f8,0x000000c6,0x000500c3,0x00000010,0x000000fa,0x000000f7,0x000000f9,0x0003003e, + 0x000000e8,0x000000fa,0x000200f9,0x000000f1,0x000200f8,0x000000f1,0x000200f9,0x000000e7, + 0x000200f8,0x000000e7,0x0004003d,0x00000010,0x000000fb,0x000000dd,0x000500ab,0x00000020, + 0x000000fc,0x000000fb,0x000000c0,0x000300f7,0x000000ff,0x00000000,0x000400fa,0x000000fc, + 0x000000fe,0x00000102,0x000200f8,0x000000fe,0x0004003d,0x00000010,0x00000100,0x000000e8, + 0x0004007e,0x00000010,0x00000101,0x00000100,0x0003003e,0x000000fd,0x00000101,0x000200f9, + 0x000000ff,0x000200f8,0x00000102,0x0004003d,0x00000010,0x00000103,0x000000e8,0x0003003e, + 0x000000fd,0x00000103,0x000200f9,0x000000ff,0x000200f8,0x000000ff,0x0004003d,0x00000010, + 0x00000104,0x000000fd,0x000200fe,0x00000104,0x00010038,0x00050036,0x00000006,0x0000002b, + 0x00000000,0x00000028,0x00030037,0x00000011,0x00000029,0x00030037,0x00000021,0x0000002a, + 0x000200f8,0x0000002c,0x0004003b,0x00000011,0x00000114,0x00000007,0x0004003b,0x00000009, + 0x00000121,0x00000007,0x0004003d,0x00000020,0x00000107,0x0000002a,0x000400a8,0x00000020, + 0x00000108,0x00000107,0x000300f7,0x0000010a,0x00000000,0x000400fa,0x00000108,0x00000109, + 0x0000010a,0x000200f8,0x00000109,0x0004003d,0x00000010,0x0000010b,0x00000029,0x00050084, + 0x00000010,0x0000010d,0x0000010b,0x0000010c,0x000500c3,0x00000010,0x0000010f,0x0000010d, + 0x0000010e,0x0004007c,0x00000006,0x00000110,0x0000010f,0x000200fe,0x00000110,0x000200f8, + 0x0000010a,0x0004003d,0x00000010,0x00000112,0x00000029,0x000500b1,0x00000020,0x00000113, + 0x00000112,0x000000c0,0x000300f7,0x00000116,0x00000000,0x000400fa,0x00000113,0x00000115, + 0x0000011c,0x000200f8,0x00000115,0x0004003d,0x00000010,0x00000117,0x00000029,0x0004007e, + 0x00000010,0x00000118,0x00000117,0x00050084,0x00000010,0x00000119,0x00000118,0x0000010c, + 0x000500c3,0x00000010,0x0000011a,0x00000119,0x0000003a,0x0004007e,0x00000010,0x0000011b, + 0x0000011a,0x0003003e,0x00000114,0x0000011b,0x000200f9,0x00000116,0x000200f8,0x0000011c, + 0x0004003d,0x00000010,0x0000011d,0x00000029,0x00050084,0x00000010,0x0000011e,0x0000011d, + 0x0000010c,0x000500c3,0x00000010,0x0000011f,0x0000011e,0x0000003a,0x0003003e,0x00000114, + 0x0000011f,0x000200f9,0x00000116,0x000200f8,0x00000116,0x0004003d,0x00000010,0x00000120, + 0x00000114,0x0003003e,0x00000029,0x00000120,0x0003003e,0x00000121,0x00000033,0x0004003d, + 0x00000010,0x00000122,0x00000029,0x000500b1,0x00000020,0x00000123,0x00000122,0x000000c0, + 0x000300f7,0x00000125,0x00000000,0x000400fa,0x00000123,0x00000124,0x00000125,0x000200f8, + 0x00000124,0x0003003e,0x00000121,0x00000126,0x0004003d,0x00000010,0x00000127,0x00000029, + 0x0004007e,0x00000010,0x00000128,0x00000127,0x0003003e,0x00000029,0x00000128,0x000200f9, + 0x00000125,0x000200f8,0x00000125,0x0004003d,0x00000006,0x00000129,0x00000121,0x0004003d, + 0x00000010,0x0000012a,0x00000029,0x0004007c,0x00000006,0x0000012b,0x0000012a,0x000500c5, + 0x00000006,0x0000012c,0x00000129,0x0000012b,0x000200fe,0x0000012c,0x00010038,0x00050036, + 0x00000002,0x00000030,0x00000000,0x0000002d,0x00030037,0x00000008,0x0000002e,0x00030037, + 0x00000021,0x0000002f,0x000200f8,0x00000031,0x0004003b,0x00000009,0x0000012f,0x00000007, + 0x0004003b,0x00000009,0x00000130,0x00000007,0x0004003b,0x00000008,0x00000131,0x00000007, + 0x0004003b,0x00000009,0x00000133,0x00000007,0x0004003b,0x00000009,0x00000134,0x00000007, + 0x0004003b,0x00000008,0x0000013a,0x00000007,0x0004003b,0x00000009,0x0000013c,0x00000007, + 0x0004003b,0x00000009,0x0000013d,0x00000007,0x0004003b,0x00000011,0x00000144,0x00000007, + 0x0004003b,0x0000014f,0x00000150,0x00000007,0x0004003b,0x00000009,0x00000157,0x00000007, + 0x0004003b,0x00000009,0x00000167,0x00000007,0x0004003b,0x00000009,0x00000168,0x00000007, + 0x0004003b,0x00000019,0x00000169,0x00000007,0x0004003b,0x00000011,0x0000016e,0x00000007, + 0x0004003b,0x00000178,0x00000179,0x00000007,0x0004003b,0x00000009,0x0000017e,0x00000007, + 0x0004003b,0x00000009,0x0000017f,0x00000007,0x0004003b,0x00000192,0x00000193,0x00000007, + 0x0004003b,0x00000192,0x0000019e,0x00000007,0x0004003b,0x00000009,0x000001a2,0x00000007, + 0x0004003b,0x000001e4,0x000001e5,0x00000007,0x0004003b,0x00000009,0x000001e8,0x00000007, + 0x0004003b,0x00000009,0x000001eb,0x00000007,0x0004003b,0x00000009,0x000001ef,0x00000007, + 0x0004003b,0x00000009,0x000001f3,0x00000007,0x0004003b,0x00000008,0x000001f4,0x00000007, + 0x0004003b,0x00000009,0x000001f6,0x00000007,0x0004003b,0x00000009,0x000001f8,0x00000007, + 0x0004003b,0x00000021,0x0000021a,0x00000007,0x0004003b,0x00000011,0x0000021d,0x00000007, + 0x0004003b,0x00000011,0x00000220,0x00000007,0x0004003b,0x00000225,0x00000226,0x00000007, + 0x0004003b,0x00000011,0x0000022c,0x00000007,0x0004003b,0x00000011,0x0000022f,0x00000007, + 0x0004003b,0x00000011,0x00000233,0x00000007,0x0004003b,0x00000011,0x00000236,0x00000007, + 0x0004003b,0x00000011,0x0000023a,0x00000007,0x0004003b,0x00000011,0x0000023d,0x00000007, + 0x0004003b,0x00000011,0x0000024a,0x00000007,0x0004003b,0x00000011,0x00000257,0x00000007, + 0x0004003b,0x00000011,0x0000025a,0x00000007,0x0004003b,0x00000225,0x0000025b,0x00000007, + 0x0004003b,0x00000011,0x00000266,0x00000007,0x0004003b,0x00000011,0x00000269,0x00000007, + 0x0004003b,0x00000225,0x0000026a,0x00000007,0x0004003b,0x00000011,0x00000275,0x00000007, + 0x0004003b,0x00000011,0x00000278,0x00000007,0x0004003b,0x00000225,0x00000279,0x00000007, + 0x0004003b,0x00000011,0x00000287,0x00000007,0x0004003b,0x00000011,0x00000290,0x00000007, + 0x0004003b,0x00000011,0x00000298,0x00000007,0x0004003b,0x00000011,0x000002ad,0x00000007, + 0x0004003b,0x00000011,0x000002b0,0x00000007,0x0004003b,0x00000011,0x000002b2,0x00000007, + 0x0004003b,0x00000011,0x000002bd,0x00000007,0x0004003b,0x00000011,0x000002c7,0x00000007, + 0x0004003b,0x00000011,0x000002ca,0x00000007,0x0004003b,0x00000021,0x000002cc,0x00000007, + 0x0004003b,0x00000009,0x000002d2,0x00000007,0x0004003b,0x00000317,0x00000318,0x00000007, + 0x0004003b,0x00000009,0x0000031b,0x00000007,0x0004003b,0x00000317,0x00000320,0x00000007, + 0x0004003b,0x00000009,0x00000324,0x00000007,0x0004003b,0x00000009,0x0000032c,0x00000007, + 0x0004003b,0x00000009,0x0000032e,0x00000007,0x0004003b,0x00000009,0x00000338,0x00000007, + 0x0004003b,0x00000009,0x0000034d,0x00000007,0x0004003b,0x00000008,0x0000034e,0x00000007, + 0x0004003b,0x00000009,0x00000350,0x00000007,0x0004003b,0x00000009,0x00000352,0x00000007, + 0x0004003b,0x00000011,0x00000358,0x00000007,0x0004003b,0x00000011,0x0000035a,0x00000007, + 0x0004003b,0x00000366,0x00000367,0x00000007,0x0004003b,0x00000378,0x00000379,0x00000007, + 0x0004003b,0x00000011,0x0000037d,0x00000007,0x0004003b,0x00000011,0x00000381,0x00000007, + 0x0004003b,0x00000011,0x00000389,0x00000007,0x0004003b,0x00000011,0x00000390,0x00000007, + 0x0004003b,0x00000398,0x00000399,0x00000007,0x0004003b,0x00000011,0x000003a5,0x00000007, + 0x0004003b,0x00000021,0x000003a6,0x00000007,0x0004003b,0x00000009,0x000003be,0x00000007, + 0x0004003b,0x00000009,0x000003bf,0x00000007,0x0004003b,0x00000019,0x000003c0,0x00000007, + 0x0003003e,0x0000012f,0x00000033,0x0004003d,0x00000007,0x00000132,0x0000002e,0x0003003e, + 0x00000131,0x00000132,0x0003003e,0x00000133,0x00000033,0x0003003e,0x00000134,0x000000a4, + 0x00070039,0x00000006,0x00000135,0x0000000e,0x00000131,0x00000133,0x00000134,0x0003003e, + 0x00000130,0x00000135,0x0003003e,0x0000012f,0x000000a4,0x0004003d,0x00000006,0x00000136, + 0x00000130,0x000500ac,0x00000020,0x00000137,0x00000136,0x00000052,0x000300f7,0x00000139, + 0x00000000,0x000400fa,0x00000137,0x00000138,0x00000139,0x000200f8,0x00000138,0x0004003d, + 0x00000007,0x0000013b,0x0000002e,0x0003003e,0x0000013a,0x0000013b,0x0003003e,0x0000013c, + 0x000000a4,0x0003003e,0x0000013d,0x0000004c,0x00070039,0x00000006,0x0000013e,0x0000000e, + 0x0000013a,0x0000013c,0x0000013d,0x000500c4,0x00000006,0x00000140,0x0000013e,0x0000013f, + 0x0004003d,0x00000006,0x00000141,0x00000130,0x000500c5,0x00000006,0x00000142,0x00000141, + 0x00000140,0x0003003e,0x00000130,0x00000142,0x0003003e,0x0000012f,0x00000143,0x000200f9, + 0x00000139,0x000200f8,0x00000139,0x0004003d,0x00000006,0x0000014e,0x00000130,0x0003003e, + 0x00000150,0x0000014d,0x00050041,0x00000011,0x00000151,0x00000150,0x0000014e,0x0004003d, + 0x00000010,0x00000152,0x00000151,0x0003003e,0x00000144,0x00000152,0x0004003d,0x00000010, + 0x00000153,0x00000144,0x000500b1,0x00000020,0x00000154,0x00000153,0x000000c0,0x000300f7, + 0x00000156,0x00000000,0x000400fa,0x00000154,0x00000155,0x00000156,0x000200f8,0x00000155, + 0x0003003e,0x00000157,0x00000033,0x000200f9,0x00000158,0x000200f8,0x00000158,0x000400f6, + 0x0000015a,0x0000015b,0x00000000,0x000200f9,0x0000015c,0x000200f8,0x0000015c,0x0004003d, + 0x00000006,0x0000015d,0x00000157,0x000500b0,0x00000020,0x0000015f,0x0000015d,0x0000015e, + 0x000400fa,0x0000015f,0x00000159,0x0000015a,0x000200f8,0x00000159,0x0004003d,0x00000006, + 0x00000160,0x00000157,0x000500c7,0x00000006,0x00000161,0x00000160,0x0000004c,0x0004003d, + 0x00000006,0x00000162,0x00000157,0x000500c2,0x00000006,0x00000163,0x00000162,0x0000013f, + 0x0003003e,0x00000167,0x00000161,0x0003003e,0x00000168,0x00000163,0x0003003e,0x00000169, + 0x00000166,0x00070039,0x00000002,0x0000016a,0x0000001e,0x00000167,0x00000168,0x00000169, + 0x000200f9,0x0000015b,0x000200f8,0x0000015b,0x0004003d,0x00000006,0x0000016b,0x00000157, + 0x00050080,0x00000006,0x0000016c,0x0000016b,0x000000c6,0x0003003e,0x00000157,0x0000016c, + 0x000200f9,0x00000158,0x000200f8,0x0000015a,0x000100fd,0x000200f8,0x00000156,0x0003003e, + 0x0000016e,0x000000c0,0x000200f9,0x0000016f,0x000200f8,0x0000016f,0x000400f6,0x00000171, + 0x00000172,0x00000000,0x000200f9,0x00000173,0x000200f8,0x00000173,0x0004003d,0x00000010, + 0x00000174,0x0000016e,0x000500b1,0x00000020,0x00000175,0x00000174,0x00000149,0x000400fa, + 0x00000175,0x00000170,0x00000171,0x000200f8,0x00000170,0x0004003d,0x00000010,0x0000017a, + 0x0000016e,0x00050041,0x00000011,0x0000017b,0x00000179,0x0000017a,0x0003003e,0x0000017b, + 0x000000c0,0x000200f9,0x00000172,0x000200f8,0x00000172,0x0004003d,0x00000010,0x0000017c, + 0x0000016e,0x00050080,0x00000010,0x0000017d,0x0000017c,0x000000c6,0x0003003e,0x0000016e, + 0x0000017d,0x000200f9,0x0000016f,0x000200f8,0x00000171,0x0003003e,0x0000017e,0x00000033, + 0x0004003d,0x00000010,0x00000191,0x00000144,0x0003003e,0x00000193,0x00000190,0x00050041, + 0x00000009,0x00000194,0x00000193,0x00000191,0x0004003d,0x00000006,0x00000195,0x00000194, + 0x0003003e,0x0000017f,0x00000195,0x000200f9,0x00000196,0x000200f8,0x00000196,0x000400f6, + 0x00000198,0x00000199,0x00000000,0x000200f9,0x0000019a,0x000200f8,0x0000019a,0x0004003d, + 0x00000006,0x0000019b,0x0000017f,0x0004003d,0x00000010,0x0000019c,0x00000144,0x00050080, + 0x00000010,0x0000019d,0x0000019c,0x000000c6,0x0003003e,0x0000019e,0x00000190,0x00050041, + 0x00000009,0x0000019f,0x0000019e,0x0000019d,0x0004003d,0x00000006,0x000001a0,0x0000019f, + 0x000500b0,0x00000020,0x000001a1,0x0000019b,0x000001a0,0x000400fa,0x000001a1,0x00000197, + 0x00000198,0x000200f8,0x00000197,0x0004003d,0x00000006,0x000001e3,0x0000017f,0x0003003e, + 0x000001e5,0x000001e2,0x00050041,0x00000009,0x000001e6,0x000001e5,0x000001e3,0x0004003d, + 0x00000006,0x000001e7,0x000001e6,0x0003003e,0x000001a2,0x000001e7,0x0004003d,0x00000006, + 0x000001e9,0x000001a2,0x000500c7,0x00000006,0x000001ea,0x000001e9,0x00000180,0x0003003e, + 0x000001e8,0x000001ea,0x0004003d,0x00000006,0x000001ec,0x000001a2,0x000500c2,0x00000006, + 0x000001ed,0x000001ec,0x0000009d,0x000500c7,0x00000006,0x000001ee,0x000001ed,0x0000003e, + 0x0003003e,0x000001eb,0x000001ee,0x0004003d,0x00000006,0x000001f0,0x000001a2,0x000500c2, + 0x00000006,0x000001f1,0x000001f0,0x0000014c,0x000500c7,0x00000006,0x000001f2,0x000001f1, + 0x0000003e,0x0003003e,0x000001ef,0x000001f2,0x0004003d,0x00000007,0x000001f5,0x0000002e, + 0x0003003e,0x000001f4,0x000001f5,0x0004003d,0x00000006,0x000001f7,0x0000012f,0x0003003e, + 0x000001f6,0x000001f7,0x0004003d,0x00000006,0x000001f9,0x000001eb,0x0003003e,0x000001f8, + 0x000001f9,0x00070039,0x00000006,0x000001fa,0x0000000e,0x000001f4,0x000001f6,0x000001f8, + 0x0003003e,0x000001f3,0x000001fa,0x0004003d,0x00000006,0x000001fb,0x000001eb,0x0004003d, + 0x00000006,0x000001fc,0x0000012f,0x00050080,0x00000006,0x000001fd,0x000001fc,0x000001fb, + 0x0003003e,0x0000012f,0x000001fd,0x0004003d,0x00000006,0x000001fe,0x000001a2,0x000500c7, + 0x00000006,0x00000200,0x000001fe,0x000001ff,0x000500ab,0x00000020,0x00000201,0x00000200, + 0x00000033,0x000300f7,0x00000203,0x00000000,0x000400fa,0x00000201,0x00000202,0x00000203, + 0x000200f8,0x00000202,0x0004003d,0x00000006,0x00000204,0x000001f3,0x000400cc,0x00000006, + 0x00000205,0x00000204,0x0004003d,0x00000006,0x00000206,0x000001eb,0x00050082,0x00000006, + 0x00000207,0x00000049,0x00000206,0x000500c2,0x00000006,0x00000208,0x00000205,0x00000207, + 0x0003003e,0x000001f3,0x00000208,0x000200f9,0x00000203,0x000200f8,0x00000203,0x0004003d, + 0x00000006,0x00000209,0x000001e8,0x000500aa,0x00000020,0x0000020a,0x00000209,0x00000176, + 0x000300f7,0x0000020c,0x00000000,0x000400fa,0x0000020a,0x0000020b,0x0000020e,0x000200f8, + 0x0000020b,0x0004003d,0x00000006,0x0000020d,0x000001f3,0x0003003e,0x0000017e,0x0000020d, + 0x000200f9,0x0000020c,0x000200f8,0x0000020e,0x0004003d,0x00000006,0x0000020f,0x000001e8, + 0x0004003d,0x00000006,0x00000210,0x000001f3,0x0004003d,0x00000006,0x00000211,0x000001ef, + 0x000500c4,0x00000006,0x00000212,0x00000210,0x00000211,0x0004007c,0x00000010,0x00000213, + 0x00000212,0x00050041,0x00000011,0x00000214,0x00000179,0x0000020f,0x0004003d,0x00000010, + 0x00000215,0x00000214,0x000500c5,0x00000010,0x00000216,0x00000215,0x00000213,0x00050041, + 0x00000011,0x00000217,0x00000179,0x0000020f,0x0003003e,0x00000217,0x00000216,0x000200f9, + 0x0000020c,0x000200f8,0x0000020c,0x000200f9,0x00000199,0x000200f8,0x00000199,0x0004003d, + 0x00000006,0x00000218,0x0000017f,0x00050080,0x00000006,0x00000219,0x00000218,0x000000c6, + 0x0003003e,0x0000017f,0x00000219,0x000200f9,0x00000196,0x000200f8,0x00000198,0x0004003d, + 0x00000010,0x0000021b,0x00000144,0x000500b1,0x00000020,0x0000021c,0x0000021b,0x00000146, + 0x0003003e,0x0000021a,0x0000021c,0x0004003d,0x00000020,0x0000021e,0x0000021a,0x000600a9, + 0x00000010,0x0000021f,0x0000021e,0x0000009d,0x0000013f,0x0003003e,0x0000021d,0x0000021f, + 0x0004003d,0x00000010,0x00000224,0x00000144,0x0003003e,0x00000226,0x00000223,0x00050041, + 0x00000011,0x00000227,0x00000226,0x00000224,0x0004003d,0x00000010,0x00000228,0x00000227, + 0x0003003e,0x00000220,0x00000228,0x0004003d,0x00000020,0x00000229,0x0000002f,0x000300f7, + 0x0000022b,0x00000000,0x000400fa,0x00000229,0x0000022a,0x0000022b,0x000200f8,0x0000022a, + 0x00050041,0x00000011,0x0000022d,0x00000179,0x000000c0,0x0004003d,0x00000010,0x0000022e, + 0x0000022d,0x0003003e,0x0000022c,0x0000022e,0x0004003d,0x00000010,0x00000230,0x00000220, + 0x0003003e,0x0000022f,0x00000230,0x00060039,0x00000010,0x00000231,0x00000015,0x0000022c, + 0x0000022f,0x00050041,0x00000011,0x00000232,0x00000179,0x000000c0,0x0003003e,0x00000232, + 0x00000231,0x00050041,0x00000011,0x00000234,0x00000179,0x0000009d,0x0004003d,0x00000010, + 0x00000235,0x00000234,0x0003003e,0x00000233,0x00000235,0x0004003d,0x00000010,0x00000237, + 0x00000220,0x0003003e,0x00000236,0x00000237,0x00060039,0x00000010,0x00000238,0x00000015, + 0x00000233,0x00000236,0x00050041,0x00000011,0x00000239,0x00000179,0x0000009d,0x0003003e, + 0x00000239,0x00000238,0x00050041,0x00000011,0x0000023b,0x00000179,0x000000ab,0x0004003d, + 0x00000010,0x0000023c,0x0000023b,0x0003003e,0x0000023a,0x0000023c,0x0004003d,0x00000010, + 0x0000023e,0x00000220,0x0003003e,0x0000023d,0x0000023e,0x00060039,0x00000010,0x0000023f, + 0x00000015,0x0000023a,0x0000023d,0x00050041,0x00000011,0x00000240,0x00000179,0x000000ab, + 0x0003003e,0x00000240,0x0000023f,0x000200f9,0x0000022b,0x000200f8,0x0000022b,0x0004003d, + 0x00000010,0x00000241,0x00000144,0x000500ab,0x00000020,0x00000242,0x00000241,0x0000014c, + 0x0004003d,0x00000010,0x00000243,0x00000144,0x000500ab,0x00000020,0x00000244,0x00000243, + 0x00000146,0x000500a7,0x00000020,0x00000245,0x00000242,0x00000244,0x0004003d,0x00000020, + 0x00000246,0x0000002f,0x000500a6,0x00000020,0x00000247,0x00000245,0x00000246,0x000300f7, + 0x00000249,0x00000000,0x000400fa,0x00000247,0x00000248,0x00000249,0x000200f8,0x00000248, + 0x0003003e,0x0000024a,0x000000c6,0x000200f9,0x0000024b,0x000200f8,0x0000024b,0x000400f6, + 0x0000024d,0x0000024e,0x00000000,0x000200f9,0x0000024f,0x000200f8,0x0000024f,0x0004003d, + 0x00000010,0x00000250,0x0000024a,0x0004003d,0x00000010,0x00000251,0x0000021d,0x000500b1, + 0x00000020,0x00000252,0x00000250,0x00000251,0x000400fa,0x00000252,0x0000024c,0x0000024d, + 0x000200f8,0x0000024c,0x0004003d,0x00000010,0x00000253,0x0000024a,0x0004003d,0x00000010, + 0x00000254,0x0000024a,0x0004003d,0x00000010,0x00000256,0x00000144,0x00050041,0x00000011, + 0x00000258,0x00000179,0x00000254,0x0004003d,0x00000010,0x00000259,0x00000258,0x0003003e, + 0x00000257,0x00000259,0x0003003e,0x0000025b,0x00000255,0x00050041,0x00000011,0x0000025c, + 0x0000025b,0x00000256,0x0004003d,0x00000010,0x0000025d,0x0000025c,0x0003003e,0x0000025a, + 0x0000025d,0x00060039,0x00000010,0x0000025e,0x00000015,0x00000257,0x0000025a,0x00050041, + 0x00000011,0x0000025f,0x00000179,0x00000253,0x0003003e,0x0000025f,0x0000025e,0x0004003d, + 0x00000010,0x00000260,0x0000024a,0x00050080,0x00000010,0x00000261,0x0000009d,0x00000260, + 0x0004003d,0x00000010,0x00000262,0x0000024a,0x00050080,0x00000010,0x00000263,0x0000009d, + 0x00000262,0x0004003d,0x00000010,0x00000265,0x00000144,0x00050041,0x00000011,0x00000267, + 0x00000179,0x00000263,0x0004003d,0x00000010,0x00000268,0x00000267,0x0003003e,0x00000266, + 0x00000268,0x0003003e,0x0000026a,0x00000264,0x00050041,0x00000011,0x0000026b,0x0000026a, + 0x00000265,0x0004003d,0x00000010,0x0000026c,0x0000026b,0x0003003e,0x00000269,0x0000026c, + 0x00060039,0x00000010,0x0000026d,0x00000015,0x00000266,0x00000269,0x00050041,0x00000011, + 0x0000026e,0x00000179,0x00000261,0x0003003e,0x0000026e,0x0000026d,0x0004003d,0x00000010, + 0x0000026f,0x0000024a,0x00050080,0x00000010,0x00000270,0x000000ab,0x0000026f,0x0004003d, + 0x00000010,0x00000271,0x0000024a,0x00050080,0x00000010,0x00000272,0x000000ab,0x00000271, + 0x0004003d,0x00000010,0x00000274,0x00000144,0x00050041,0x00000011,0x00000276,0x00000179, + 0x00000272,0x0004003d,0x00000010,0x00000277,0x00000276,0x0003003e,0x00000275,0x00000277, + 0x0003003e,0x00000279,0x00000273,0x00050041,0x00000011,0x0000027a,0x00000279,0x00000274, + 0x0004003d,0x00000010,0x0000027b,0x0000027a,0x0003003e,0x00000278,0x0000027b,0x00060039, + 0x00000010,0x0000027c,0x00000015,0x00000275,0x00000278,0x00050041,0x00000011,0x0000027d, + 0x00000179,0x00000270,0x0003003e,0x0000027d,0x0000027c,0x000200f9,0x0000024e,0x000200f8, + 0x0000024e,0x0004003d,0x00000010,0x0000027e,0x0000024a,0x00050080,0x00000010,0x0000027f, + 0x0000027e,0x000000c6,0x0003003e,0x0000024a,0x0000027f,0x000200f9,0x0000024b,0x000200f8, + 0x0000024d,0x000200f9,0x00000249,0x000200f8,0x00000249,0x0004003d,0x00000010,0x00000280, + 0x00000144,0x000500ab,0x00000020,0x00000281,0x00000280,0x0000014c,0x0004003d,0x00000010, + 0x00000282,0x00000144,0x000500ab,0x00000020,0x00000283,0x00000282,0x00000146,0x000500a7, + 0x00000020,0x00000284,0x00000281,0x00000283,0x000300f7,0x00000286,0x00000000,0x000400fa, + 0x00000284,0x00000285,0x00000286,0x000200f8,0x00000285,0x0003003e,0x00000287,0x000000c6, + 0x000200f9,0x00000288,0x000200f8,0x00000288,0x000400f6,0x0000028a,0x0000028b,0x00000000, + 0x000200f9,0x0000028c,0x000200f8,0x0000028c,0x0004003d,0x00000010,0x0000028d,0x00000287, + 0x0004003d,0x00000010,0x0000028e,0x0000021d,0x000500b1,0x00000020,0x0000028f,0x0000028d, + 0x0000028e,0x000400fa,0x0000028f,0x00000289,0x0000028a,0x000200f8,0x00000289,0x0003003e, + 0x00000290,0x000000c0,0x000200f9,0x00000291,0x000200f8,0x00000291,0x000400f6,0x00000293, + 0x00000294,0x00000000,0x000200f9,0x00000295,0x000200f8,0x00000295,0x0004003d,0x00000010, + 0x00000296,0x00000290,0x000500b1,0x00000020,0x00000297,0x00000296,0x000000a8,0x000400fa, + 0x00000297,0x00000292,0x00000293,0x000200f8,0x00000292,0x0004003d,0x00000010,0x00000299, + 0x00000290,0x00050084,0x00000010,0x0000029a,0x00000299,0x0000009d,0x0004003d,0x00000010, + 0x0000029b,0x00000287,0x00050080,0x00000010,0x0000029c,0x0000029a,0x0000029b,0x00050041, + 0x00000011,0x0000029d,0x00000179,0x0000029c,0x0004003d,0x00000010,0x0000029e,0x0000029d, + 0x0004003d,0x00000010,0x0000029f,0x00000290,0x00050084,0x00000010,0x000002a0,0x0000029f, + 0x0000009d,0x00050041,0x00000011,0x000002a1,0x00000179,0x000002a0,0x0004003d,0x00000010, + 0x000002a2,0x000002a1,0x00050080,0x00000010,0x000002a3,0x0000029e,0x000002a2,0x0004003d, + 0x00000010,0x000002a4,0x00000220,0x000500c4,0x00000010,0x000002a5,0x000000c6,0x000002a4, + 0x00050082,0x00000010,0x000002a6,0x000002a5,0x000000c6,0x000500c7,0x00000010,0x000002a7, + 0x000002a3,0x000002a6,0x0003003e,0x00000298,0x000002a7,0x0004003d,0x00000010,0x000002a8, + 0x00000290,0x00050084,0x00000010,0x000002a9,0x000002a8,0x0000009d,0x0004003d,0x00000010, + 0x000002aa,0x00000287,0x00050080,0x00000010,0x000002ab,0x000002a9,0x000002aa,0x0004003d, + 0x00000020,0x000002ac,0x0000002f,0x000300f7,0x000002af,0x00000000,0x000400fa,0x000002ac, + 0x000002ae,0x000002b5,0x000200f8,0x000002ae,0x0004003d,0x00000010,0x000002b1,0x00000298, + 0x0003003e,0x000002b0,0x000002b1,0x0004003d,0x00000010,0x000002b3,0x00000220,0x0003003e, + 0x000002b2,0x000002b3,0x00060039,0x00000010,0x000002b4,0x00000015,0x000002b0,0x000002b2, + 0x0003003e,0x000002ad,0x000002b4,0x000200f9,0x000002af,0x000200f8,0x000002b5,0x0004003d, + 0x00000010,0x000002b6,0x00000298,0x0003003e,0x000002ad,0x000002b6,0x000200f9,0x000002af, + 0x000200f8,0x000002af,0x0004003d,0x00000010,0x000002b7,0x000002ad,0x00050041,0x00000011, + 0x000002b8,0x00000179,0x000002ab,0x0003003e,0x000002b8,0x000002b7,0x000200f9,0x00000294, + 0x000200f8,0x00000294,0x0004003d,0x00000010,0x000002b9,0x00000290,0x00050080,0x00000010, + 0x000002ba,0x000002b9,0x000000c6,0x0003003e,0x00000290,0x000002ba,0x000200f9,0x00000291, + 0x000200f8,0x00000293,0x000200f9,0x0000028b,0x000200f8,0x0000028b,0x0004003d,0x00000010, + 0x000002bb,0x00000287,0x00050080,0x00000010,0x000002bc,0x000002bb,0x000000c6,0x0003003e, + 0x00000287,0x000002bc,0x000200f9,0x00000288,0x000200f8,0x0000028a,0x000200f9,0x00000286, + 0x000200f8,0x00000286,0x0003003e,0x000002bd,0x000000c0,0x000200f9,0x000002be,0x000200f8, + 0x000002be,0x000400f6,0x000002c0,0x000002c1,0x00000000,0x000200f9,0x000002c2,0x000200f8, + 0x000002c2,0x0004003d,0x00000010,0x000002c3,0x000002bd,0x000500b1,0x00000020,0x000002c4, + 0x000002c3,0x00000149,0x000400fa,0x000002c4,0x000002bf,0x000002c0,0x000200f8,0x000002bf, + 0x0004003d,0x00000010,0x000002c5,0x000002bd,0x0004003d,0x00000010,0x000002c6,0x000002bd, + 0x00050041,0x00000011,0x000002c8,0x00000179,0x000002c6,0x0004003d,0x00000010,0x000002c9, + 0x000002c8,0x0003003e,0x000002c7,0x000002c9,0x0004003d,0x00000010,0x000002cb,0x00000220, + 0x0003003e,0x000002ca,0x000002cb,0x0004003d,0x00000020,0x000002cd,0x0000002f,0x0003003e, + 0x000002cc,0x000002cd,0x00070039,0x00000010,0x000002ce,0x00000026,0x000002c7,0x000002ca, + 0x000002cc,0x00050041,0x00000011,0x000002cf,0x00000179,0x000002c5,0x0003003e,0x000002cf, + 0x000002ce,0x000200f9,0x000002c1,0x000200f8,0x000002c1,0x0004003d,0x00000010,0x000002d0, + 0x000002bd,0x00050080,0x00000010,0x000002d1,0x000002d0,0x000000c6,0x0003003e,0x000002bd, + 0x000002d1,0x000200f9,0x000002be,0x000200f8,0x000002c0,0x0004003d,0x00000006,0x00000316, + 0x0000017e,0x0003003e,0x00000318,0x00000315,0x00050041,0x00000009,0x00000319,0x00000318, + 0x00000316,0x0004003d,0x00000006,0x0000031a,0x00000319,0x0003003e,0x000002d2,0x0000031a, + 0x0004003d,0x00000006,0x0000031f,0x0000017e,0x0003003e,0x00000320,0x0000031e,0x00050041, + 0x00000009,0x00000321,0x00000320,0x0000031f,0x0004003d,0x00000006,0x00000322,0x00000321, + 0x000500c7,0x00000006,0x00000323,0x00000322,0x00000180,0x0003003e,0x0000031b,0x00000323, + 0x0003003e,0x00000324,0x00000033,0x000200f9,0x00000325,0x000200f8,0x00000325,0x000400f6, + 0x00000327,0x00000328,0x00000000,0x000200f9,0x00000329,0x000200f8,0x00000329,0x0004003d, + 0x00000006,0x0000032a,0x00000324,0x000500b0,0x00000020,0x0000032b,0x0000032a,0x0000015e, + 0x000400fa,0x0000032b,0x00000326,0x00000327,0x000200f8,0x00000326,0x0004003d,0x00000020, + 0x0000032d,0x0000021a,0x000300f7,0x00000330,0x00000000,0x000400fa,0x0000032d,0x0000032f, + 0x00000336,0x000200f8,0x0000032f,0x0004003d,0x00000006,0x00000331,0x000002d2,0x0004003d, + 0x00000006,0x00000332,0x00000324,0x00050084,0x00000006,0x00000333,0x000000a4,0x00000332, + 0x000500c2,0x00000006,0x00000334,0x00000331,0x00000333,0x000500c7,0x00000006,0x00000335, + 0x00000334,0x0000004c,0x0003003e,0x0000032e,0x00000335,0x000200f9,0x00000330,0x000200f8, + 0x00000336,0x0003003e,0x0000032e,0x00000033,0x000200f9,0x00000330,0x000200f8,0x00000330, + 0x0004003d,0x00000006,0x00000337,0x0000032e,0x0003003e,0x0000032c,0x00000337,0x0004003d, + 0x00000020,0x00000339,0x0000021a,0x000600a9,0x00000006,0x0000033a,0x00000339,0x0000004c, + 0x0000007e,0x0003003e,0x00000338,0x0000033a,0x0004003d,0x00000006,0x0000033b,0x00000324, + 0x000500aa,0x00000020,0x0000033c,0x0000033b,0x00000033,0x000400a8,0x00000020,0x0000033d, + 0x0000033c,0x000300f7,0x0000033f,0x00000000,0x000400fa,0x0000033d,0x0000033e,0x0000033f, + 0x000200f8,0x0000033e,0x0004003d,0x00000020,0x00000340,0x0000021a,0x0004003d,0x00000006, + 0x00000341,0x0000032c,0x000500aa,0x00000020,0x00000342,0x00000341,0x00000052,0x000500a7, + 0x00000020,0x00000343,0x00000340,0x00000342,0x0004003d,0x00000006,0x00000344,0x00000324, + 0x0004003d,0x00000006,0x00000345,0x0000031b,0x000500aa,0x00000020,0x00000346,0x00000344, + 0x00000345,0x000500a7,0x00000020,0x00000347,0x00000343,0x00000346,0x000200f9,0x0000033f, + 0x000200f8,0x0000033f,0x000700f5,0x00000020,0x00000348,0x0000033c,0x00000330,0x00000347, + 0x0000033e,0x000300f7,0x0000034a,0x00000000,0x000400fa,0x00000348,0x00000349,0x0000034a, + 0x000200f8,0x00000349,0x0004003d,0x00000006,0x0000034b,0x00000338,0x00050082,0x00000006, + 0x0000034c,0x0000034b,0x000000c6,0x0003003e,0x00000338,0x0000034c,0x000200f9,0x0000034a, + 0x000200f8,0x0000034a,0x0004003d,0x00000007,0x0000034f,0x0000002e,0x0003003e,0x0000034e, + 0x0000034f,0x0004003d,0x00000006,0x00000351,0x0000012f,0x0003003e,0x00000350,0x00000351, + 0x0004003d,0x00000006,0x00000353,0x00000338,0x0003003e,0x00000352,0x00000353,0x00070039, + 0x00000006,0x00000354,0x0000000e,0x0000034e,0x00000350,0x00000352,0x0003003e,0x0000034d, + 0x00000354,0x0004003d,0x00000006,0x00000355,0x00000338,0x0004003d,0x00000006,0x00000356, + 0x0000012f,0x00050080,0x00000006,0x00000357,0x00000356,0x00000355,0x0003003e,0x0000012f, + 0x00000357,0x0004003d,0x00000020,0x00000359,0x0000021a,0x000300f7,0x0000035c,0x00000000, + 0x000400fa,0x00000359,0x0000035b,0x0000036a,0x000200f8,0x0000035b,0x0004003d,0x00000006, + 0x00000365,0x0000034d,0x0003003e,0x00000367,0x00000364,0x00050041,0x00000011,0x00000368, + 0x00000367,0x00000365,0x0004003d,0x00000010,0x00000369,0x00000368,0x0003003e,0x0000035a, + 0x00000369,0x000200f9,0x0000035c,0x000200f8,0x0000036a,0x0004003d,0x00000006,0x00000377, + 0x0000034d,0x0003003e,0x00000379,0x00000376,0x00050041,0x00000011,0x0000037a,0x00000379, + 0x00000377,0x0004003d,0x00000010,0x0000037b,0x0000037a,0x0003003e,0x0000035a,0x0000037b, + 0x000200f9,0x0000035c,0x000200f8,0x0000035c,0x0004003d,0x00000010,0x0000037c,0x0000035a, + 0x0003003e,0x00000358,0x0000037c,0x0004003d,0x00000006,0x0000037e,0x0000032c,0x0004007c, + 0x00000010,0x0000037f,0x0000037e,0x00050084,0x00000010,0x00000380,0x0000037f,0x0000013f, + 0x0003003e,0x0000037d,0x00000380,0x0003003e,0x00000381,0x000000c0,0x000200f9,0x00000382, + 0x000200f8,0x00000382,0x000400f6,0x00000384,0x00000385,0x00000000,0x000200f9,0x00000386, + 0x000200f8,0x00000386,0x0004003d,0x00000010,0x00000387,0x00000381,0x000500b1,0x00000020, + 0x00000388,0x00000387,0x000000a8,0x000400fa,0x00000388,0x00000383,0x00000384,0x000200f8, + 0x00000383,0x0004003d,0x00000010,0x0000038a,0x00000381,0x00050084,0x00000010,0x0000038b, + 0x0000038a,0x0000009d,0x0004003d,0x00000010,0x0000038c,0x0000037d,0x00050080,0x00000010, + 0x0000038d,0x0000038b,0x0000038c,0x00050041,0x00000011,0x0000038e,0x00000179,0x0000038d, + 0x0004003d,0x00000010,0x0000038f,0x0000038e,0x0003003e,0x00000389,0x0000038f,0x0004003d, + 0x00000010,0x00000391,0x00000381,0x00050084,0x00000010,0x00000392,0x00000391,0x0000009d, + 0x0004003d,0x00000010,0x00000393,0x0000037d,0x00050080,0x00000010,0x00000394,0x00000392, + 0x00000393,0x00050080,0x00000010,0x00000395,0x00000394,0x000000c6,0x00050041,0x00000011, + 0x00000396,0x00000179,0x00000395,0x0004003d,0x00000010,0x00000397,0x00000396,0x0003003e, + 0x00000390,0x00000397,0x0004003d,0x00000010,0x0000039a,0x00000381,0x0004003d,0x00000010, + 0x0000039b,0x00000389,0x0004003d,0x00000010,0x0000039c,0x00000358,0x00050082,0x00000010, + 0x0000039d,0x00000363,0x0000039c,0x00050084,0x00000010,0x0000039e,0x0000039b,0x0000039d, + 0x0004003d,0x00000010,0x0000039f,0x00000390,0x0004003d,0x00000010,0x000003a0,0x00000358, + 0x00050084,0x00000010,0x000003a1,0x0000039f,0x000003a0,0x00050080,0x00000010,0x000003a2, + 0x0000039e,0x000003a1,0x00050080,0x00000010,0x000003a3,0x000003a2,0x0000006b,0x000500c3, + 0x00000010,0x000003a4,0x000003a3,0x0000010e,0x0003003e,0x000003a5,0x000003a4,0x0004003d, + 0x00000020,0x000003a7,0x0000002f,0x0003003e,0x000003a6,0x000003a7,0x00060039,0x00000006, + 0x000003a8,0x0000002b,0x000003a5,0x000003a6,0x00050041,0x00000009,0x000003a9,0x00000399, + 0x0000039a,0x0003003e,0x000003a9,0x000003a8,0x000200f9,0x00000385,0x000200f8,0x00000385, + 0x0004003d,0x00000010,0x000003aa,0x00000381,0x00050080,0x00000010,0x000003ab,0x000003aa, + 0x000000c6,0x0003003e,0x00000381,0x000003ab,0x000200f9,0x00000382,0x000200f8,0x00000384, + 0x0004003d,0x00000006,0x000003ac,0x00000324,0x000500c7,0x00000006,0x000003ad,0x000003ac, + 0x0000004c,0x0004003d,0x00000006,0x000003ae,0x00000324,0x000500c2,0x00000006,0x000003af, + 0x000003ae,0x0000013f,0x00050041,0x00000009,0x000003b0,0x00000399,0x00000033,0x0004003d, + 0x00000006,0x000003b1,0x000003b0,0x0006000c,0x000003b2,0x000003b3,0x00000001,0x0000003e, + 0x000003b1,0x00050051,0x00000017,0x000003b4,0x000003b3,0x00000000,0x00050041,0x00000009, + 0x000003b5,0x00000399,0x00000052,0x0004003d,0x00000006,0x000003b6,0x000003b5,0x0006000c, + 0x000003b2,0x000003b7,0x00000001,0x0000003e,0x000003b6,0x00050051,0x00000017,0x000003b8, + 0x000003b7,0x00000000,0x00050041,0x00000009,0x000003b9,0x00000399,0x000000a4,0x0004003d, + 0x00000006,0x000003ba,0x000003b9,0x0006000c,0x000003b2,0x000003bb,0x00000001,0x0000003e, + 0x000003ba,0x00050051,0x00000017,0x000003bc,0x000003bb,0x00000000,0x00070050,0x00000018, + 0x000003bd,0x000003b4,0x000003b8,0x000003bc,0x00000165,0x0003003e,0x000003be,0x000003ad, + 0x0003003e,0x000003bf,0x000003af,0x0003003e,0x000003c0,0x000003bd,0x00070039,0x00000002, + 0x000003c1,0x0000001e,0x000003be,0x000003bf,0x000003c0,0x000200f9,0x00000328,0x000200f8, + 0x00000328,0x0004003d,0x00000006,0x000003c2,0x00000324,0x00050080,0x00000006,0x000003c3, + 0x000003c2,0x000000c6,0x0003003e,0x00000324,0x000003c3,0x000200f9,0x00000325,0x000200f8, + 0x00000327,0x000100fd,0x00010038 +}; + // 1115.1.0 +static const uint32_t spv_bc7[] = { + 0x07230203,0x00010300,0x0008000b,0x0000052d,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000005c,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000e,0x73746962, + 0x34757628,0x3b31753b,0x003b3175,0x00030005,0x0000000b,0x00000062,0x00030005,0x0000000c, + 0x00736f70,0x00030005,0x0000000d,0x0000006e,0x00060005,0x00000017,0x28747570,0x753b3175, + 0x66763b31,0x00003b34,0x00030005,0x00000014,0x00007874,0x00030005,0x00000015,0x00007974, + 0x00030005,0x00000016,0x00000076,0x00050005,0x0000001b,0x28376362,0x3b347576,0x00000000, + 0x00030005,0x0000001a,0x006b6c62,0x00030005,0x00000024,0x00006977,0x00030005,0x00000029, + 0x0000006f,0x00030005,0x0000002d,0x00000076,0x00030005,0x00000059,0x006b6c62,0x00080005, + 0x0000005c,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00030005, + 0x0000005f,0x00000070,0x00030005,0x0000006b,0x00004350,0x00060006,0x0000006b,0x00000000, + 0x5f637273,0x64726f77,0x00000000,0x00060006,0x0000006b,0x00000001,0x5f776f72,0x636f6c62, + 0x0000736b,0x00070006,0x0000006b,0x00000002,0x6579616c,0x6c625f72,0x736b636f,0x00000000, + 0x00050006,0x0000006b,0x00000003,0x67616c66,0x00000073,0x00050006,0x0000006b,0x00000004, + 0x5f747364,0x0066666f,0x00050006,0x0000006b,0x00000005,0x65747865,0x0000746e,0x00030005, + 0x0000006d,0x00006370,0x00030005,0x0000007e,0x00747364,0x00040005,0x00000097,0x65646f6d, + 0x00000000,0x00040005,0x000000a2,0x61726170,0x0000006d,0x00040005,0x000000a4,0x61726170, + 0x0000006d,0x00040005,0x000000a6,0x61726170,0x0000006d,0x00030005,0x000000b1,0x00000074, + 0x00040005,0x000000c1,0x61726170,0x0000006d,0x00040005,0x000000c2,0x61726170,0x0000006d, + 0x00040005,0x000000c3,0x61726170,0x0000006d,0x00030005,0x000000c8,0x00736f70,0x00040005, + 0x000000cb,0x7261706e,0x00007374,0x00040005,0x000000cc,0x74726170,0x0064695f,0x00050005, + 0x000000cd,0x61746f72,0x6e6f6974,0x00000000,0x00040005,0x000000ce,0x6c657369,0x00000000, + 0x00030005,0x000000e6,0x00006270,0x00040005,0x000000eb,0x61726170,0x0000006d,0x00040005, + 0x000000ed,0x61726170,0x0000006d,0x00040005,0x000000ef,0x61726170,0x0000006d,0x00040005, + 0x000000f5,0x7370656e,0x00000000,0x00040005,0x00000100,0x61726170,0x0000006d,0x00040005, + 0x00000102,0x61726170,0x0000006d,0x00040005,0x00000104,0x61726170,0x0000006d,0x00040005, + 0x0000010c,0x61726170,0x0000006d,0x00040005,0x0000010e,0x61726170,0x0000006d,0x00040005, + 0x00000110,0x61726170,0x0000006d,0x00030005,0x00000115,0x00006263,0x00050005,0x0000011c, + 0x65646e69,0x6c626178,0x00000065,0x00030005,0x0000011f,0x00006261,0x00050005,0x00000123, + 0x65646e69,0x6c626178,0x00000065,0x00030005,0x00000126,0x00000063,0x00030005,0x0000012e, + 0x00000065,0x00030005,0x0000013a,0x00007065,0x00040005,0x0000013f,0x61726170,0x0000006d, + 0x00040005,0x00000141,0x61726170,0x0000006d,0x00040005,0x00000143,0x61726170,0x0000006d, + 0x00030005,0x0000014e,0x00000065,0x00040005,0x0000015e,0x61726170,0x0000006d,0x00040005, + 0x00000160,0x61726170,0x0000006d,0x00040005,0x00000162,0x61726170,0x0000006d,0x00040005, + 0x0000016f,0x74696270,0x00000073,0x00030005,0x00000188,0x00000065,0x00030005,0x00000191, + 0x00000063,0x00030005,0x000001a7,0x00003070,0x00040005,0x000001a8,0x61726170,0x0000006d, + 0x00040005,0x000001aa,0x61726170,0x0000006d,0x00040005,0x000001ac,0x61726170,0x0000006d, + 0x00030005,0x000001ae,0x00003170,0x00040005,0x000001b1,0x61726170,0x0000006d,0x00040005, + 0x000001b3,0x61726170,0x0000006d,0x00040005,0x000001b4,0x61726170,0x0000006d,0x00030005, + 0x000001b8,0x00000063,0x00030005,0x000001db,0x00000065,0x00030005,0x000001e4,0x00000070, + 0x00040005,0x000001e5,0x61726170,0x0000006d,0x00040005,0x000001e7,0x61726170,0x0000006d, + 0x00040005,0x000001e9,0x61726170,0x0000006d,0x00030005,0x000001ed,0x00000063,0x00030005, + 0x00000200,0x00000065,0x00030005,0x00000209,0x0000006a,0x00030005,0x00000210,0x00000063, + 0x00030005,0x00000256,0x00006269,0x00030005,0x00000264,0x00326269,0x00040005,0x0000026f, + 0x74726170,0x00000000,0x00050005,0x000002ba,0x65646e69,0x6c626178,0x00000065,0x00050005, + 0x00000305,0x65646e69,0x6c626178,0x00000065,0x00040005,0x0000030b,0x68636e61,0x0073726f, + 0x00050005,0x00000314,0x65646e69,0x6c626178,0x00000065,0x00050005,0x00000331,0x65646e69, + 0x6c626178,0x00000065,0x00030005,0x00000337,0x00000074,0x00040005,0x0000033f,0x73627573, + 0x00007465,0x00030005,0x00000345,0x0000626e,0x00040005,0x00000347,0x68636e61,0x0000726f, + 0x00040005,0x0000036b,0x31786469,0x00000000,0x00040005,0x0000036d,0x61726170,0x0000006d, + 0x00040005,0x0000036f,0x61726170,0x0000006d,0x00040005,0x00000371,0x61726170,0x0000006d, + 0x00030005,0x0000037a,0x00000074,0x00040005,0x00000382,0x73627573,0x00007465,0x00030005, + 0x00000388,0x00003065,0x00030005,0x0000038b,0x00003165,0x00030005,0x0000038e,0x00003169, + 0x00030005,0x00000396,0x00007477,0x00050005,0x000003a1,0x65646e69,0x6c626178,0x00000065, + 0x00050005,0x000003b4,0x65646e69,0x6c626178,0x00000065,0x00050005,0x000003c3,0x65646e69, + 0x6c626178,0x00000065,0x00030005,0x000003c8,0x0000006b,0x00030005,0x000003d0,0x00000063, + 0x00030005,0x000003e6,0x0032626e,0x00030005,0x000003f1,0x00003269,0x00040005,0x000003f2, + 0x61726170,0x0000006d,0x00040005,0x000003f4,0x61726170,0x0000006d,0x00040005,0x000003f6, + 0x61726170,0x0000006d,0x00030005,0x000003fc,0x00006177,0x00050005,0x00000403,0x65646e69, + 0x6c626178,0x00000065,0x00050005,0x00000408,0x65646e69,0x6c626178,0x00000065,0x00030005, + 0x0000040c,0x00006277,0x00050005,0x00000413,0x65646e69,0x6c626178,0x00000065,0x00050005, + 0x00000418,0x65646e69,0x6c626178,0x00000065,0x00030005,0x0000041c,0x00006377,0x00030005, + 0x00000422,0x006c6177,0x00030005,0x00000428,0x0000006b,0x00040005,0x00000470,0x61726170, + 0x0000006d,0x00040005,0x00000471,0x61726170,0x0000006d,0x00040005,0x00000472,0x61726170, + 0x0000006d,0x00030005,0x00000476,0x006b6c62,0x00040005,0x00000479,0x6b6c626e,0x00000000, + 0x00040005,0x00000492,0x64726f77,0x00000073,0x00040005,0x00000493,0x65736162,0x00000000, + 0x00030005,0x000004a7,0x00000062,0x00030005,0x000004a9,0x00637253,0x00040006,0x000004a9, + 0x00000000,0x00000077,0x00030005,0x000004ab,0x00637273,0x00030005,0x000004cb,0x006e6773, + 0x00040005,0x000004d0,0x61726170,0x0000006d,0x00040047,0x0000005c,0x0000000b,0x0000001c, + 0x00030047,0x0000006b,0x00000002,0x00050048,0x0000006b,0x00000000,0x00000023,0x00000000, + 0x00050048,0x0000006b,0x00000001,0x00000023,0x00000004,0x00050048,0x0000006b,0x00000002, + 0x00000023,0x00000008,0x00050048,0x0000006b,0x00000003,0x00000023,0x0000000c,0x00050048, + 0x0000006b,0x00000004,0x00000023,0x00000010,0x00050048,0x0000006b,0x00000005,0x00000023, + 0x00000018,0x00030047,0x0000007e,0x00000019,0x00040047,0x0000007e,0x00000021,0x00000001, + 0x00040047,0x0000007e,0x00000022,0x00000000,0x00040047,0x000004a8,0x00000006,0x00000004, + 0x00030047,0x000004a9,0x00000002,0x00040048,0x000004a9,0x00000000,0x00000018,0x00050048, + 0x000004a9,0x00000000,0x00000023,0x00000000,0x00030047,0x000004ab,0x00000018,0x00040047, + 0x000004ab,0x00000021,0x00000000,0x00040047,0x000004ab,0x00000022,0x00000000,0x00040047, + 0x000004d3,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00040015,0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000004, + 0x00040020,0x00000008,0x00000007,0x00000007,0x00040020,0x00000009,0x00000007,0x00000006, + 0x00060021,0x0000000a,0x00000006,0x00000008,0x00000009,0x00000009,0x00030016,0x00000010, + 0x00000020,0x00040017,0x00000011,0x00000010,0x00000004,0x00040020,0x00000012,0x00000007, + 0x00000011,0x00060021,0x00000013,0x00000002,0x00000009,0x00000009,0x00000012,0x00040021, + 0x00000019,0x00000002,0x00000008,0x0004002b,0x00000006,0x0000001e,0x00000000,0x00020014, + 0x0000001f,0x00040015,0x00000026,0x00000020,0x00000001,0x0004002b,0x00000026,0x00000027, + 0x00000005,0x0004002b,0x00000006,0x0000002b,0x0000001f,0x0004002b,0x00000006,0x00000036, + 0x00000020,0x0004002b,0x00000006,0x00000039,0x00000003,0x0004002b,0x00000006,0x0000003f, + 0x00000001,0x00040017,0x00000057,0x00000006,0x00000002,0x00040020,0x00000058,0x00000007, + 0x00000057,0x00040017,0x0000005a,0x00000006,0x00000003,0x00040020,0x0000005b,0x00000001, + 0x0000005a,0x0004003b,0x0000005b,0x0000005c,0x00000001,0x0004002b,0x00000006,0x00000061, + 0x00000004,0x00040017,0x0000006a,0x00000026,0x00000002,0x0008001e,0x0000006b,0x00000006, + 0x00000006,0x00000006,0x00000006,0x0000006a,0x00000057,0x00040020,0x0000006c,0x00000009, + 0x0000006b,0x0004003b,0x0000006c,0x0000006d,0x00000009,0x00040020,0x0000006e,0x00000009, + 0x00000006,0x00090019,0x0000007c,0x00000010,0x00000001,0x00000000,0x00000001,0x00000000, + 0x00000002,0x00000004,0x00040020,0x0000007d,0x00000000,0x0000007c,0x0004003b,0x0000007d, + 0x0000007e,0x00000000,0x0004002b,0x00000026,0x00000080,0x00000004,0x00040020,0x00000081, + 0x00000009,0x0000006a,0x0004002b,0x00000006,0x00000087,0x00000002,0x00040020,0x00000088, + 0x00000001,0x00000006,0x0004002b,0x00000026,0x0000008b,0x00000003,0x0004002b,0x00000026, + 0x0000008e,0x00000008,0x00040017,0x00000092,0x00000026,0x00000003,0x0004002b,0x00000006, + 0x0000009e,0x00000008,0x0004002b,0x00000026,0x000000ab,0x00000001,0x0004002b,0x00000006, + 0x000000b8,0x00000010,0x0004002b,0x00000026,0x000000bd,0x00000002,0x0004002b,0x00000010, + 0x000000bf,0x00000000,0x0007002c,0x00000011,0x000000c0,0x000000bf,0x000000bf,0x000000bf, + 0x000000bf,0x0004002b,0x00000006,0x000000db,0x00000007,0x0004002b,0x00000006,0x000000e9, + 0x00000006,0x0004002b,0x00000006,0x000000fb,0x00000005,0x00040020,0x00000114,0x00000007, + 0x00000026,0x0004001c,0x00000116,0x00000026,0x0000009e,0x0004002b,0x00000026,0x00000117, + 0x00000006,0x0004002b,0x00000026,0x00000118,0x00000007,0x000b002c,0x00000116,0x00000119, + 0x00000080,0x00000117,0x00000027,0x00000118,0x00000027,0x00000118,0x00000118,0x00000027, + 0x00040020,0x0000011b,0x00000007,0x00000116,0x0004002b,0x00000026,0x00000120,0x00000000, + 0x000b002c,0x00000116,0x00000121,0x00000120,0x00000120,0x00000120,0x00000120,0x00000117, + 0x0000008e,0x00000118,0x00000027,0x0004001c,0x00000137,0x00000006,0x00000061,0x0004001c, + 0x00000138,0x00000137,0x000000e9,0x00040020,0x00000139,0x00000007,0x00000138,0x00040020, + 0x0000016e,0x00000007,0x0000001f,0x0004002b,0x00000006,0x00000170,0x000000cb,0x0004002b, + 0x00000006,0x0000022f,0x000000ff,0x0004002b,0x00000006,0x00000275,0x00000040,0x0004001c, + 0x00000276,0x00000006,0x00000275,0x0004002b,0x00000006,0x00000277,0x50505050,0x0004002b, + 0x00000006,0x00000278,0x40404040,0x0004002b,0x00000006,0x00000279,0x54545454,0x0004002b, + 0x00000006,0x0000027a,0x54505040,0x0004002b,0x00000006,0x0000027b,0x50404000,0x0004002b, + 0x00000006,0x0000027c,0x55545450,0x0004002b,0x00000006,0x0000027d,0x55545040,0x0004002b, + 0x00000006,0x0000027e,0x54504000,0x0004002b,0x00000006,0x0000027f,0x50400000,0x0004002b, + 0x00000006,0x00000280,0x55555450,0x0004002b,0x00000006,0x00000281,0x55544000,0x0004002b, + 0x00000006,0x00000282,0x54400000,0x0004002b,0x00000006,0x00000283,0x55555440,0x0004002b, + 0x00000006,0x00000284,0x55550000,0x0004002b,0x00000006,0x00000285,0x55555500,0x0004002b, + 0x00000006,0x00000286,0x55000000,0x0004002b,0x00000006,0x00000287,0x55150100,0x0004002b, + 0x00000006,0x00000288,0x00004054,0x0004002b,0x00000006,0x00000289,0x15010000,0x0004002b, + 0x00000006,0x0000028a,0x00405054,0x0004002b,0x00000006,0x0000028b,0x00004050,0x0004002b, + 0x00000006,0x0000028c,0x15050100,0x0004002b,0x00000006,0x0000028d,0x05010000,0x0004002b, + 0x00000006,0x0000028e,0x40505054,0x0004002b,0x00000006,0x0000028f,0x00404050,0x0004002b, + 0x00000006,0x00000290,0x05010100,0x0004002b,0x00000006,0x00000291,0x14141414,0x0004002b, + 0x00000006,0x00000292,0x05141450,0x0004002b,0x00000006,0x00000293,0x01155440,0x0004002b, + 0x00000006,0x00000294,0x00555500,0x0004002b,0x00000006,0x00000295,0x15014054,0x0004002b, + 0x00000006,0x00000296,0x05414150,0x0004002b,0x00000006,0x00000297,0x44444444,0x0004002b, + 0x00000006,0x00000298,0x55005500,0x0004002b,0x00000006,0x00000299,0x11441144,0x0004002b, + 0x00000006,0x0000029a,0x05055050,0x0004002b,0x00000006,0x0000029b,0x05500550,0x0004002b, + 0x00000006,0x0000029c,0x11114444,0x0004002b,0x00000006,0x0000029d,0x41144114,0x0004002b, + 0x00000006,0x0000029e,0x44111144,0x0004002b,0x00000006,0x0000029f,0x15055054,0x0004002b, + 0x00000006,0x000002a0,0x01055040,0x0004002b,0x00000006,0x000002a1,0x05041050,0x0004002b, + 0x00000006,0x000002a2,0x05455150,0x0004002b,0x00000006,0x000002a3,0x14414114,0x0004002b, + 0x00000006,0x000002a4,0x50050550,0x0004002b,0x00000006,0x000002a5,0x41411414,0x0004002b, + 0x00000006,0x000002a6,0x00141400,0x0004002b,0x00000006,0x000002a7,0x00041504,0x0004002b, + 0x00000006,0x000002a8,0x00105410,0x0004002b,0x00000006,0x000002a9,0x10541000,0x0004002b, + 0x00000006,0x000002aa,0x04150400,0x0004002b,0x00000006,0x000002ab,0x50410514,0x0004002b, + 0x00000006,0x000002ac,0x41051450,0x0004002b,0x00000006,0x000002ad,0x05415014,0x0004002b, + 0x00000006,0x000002ae,0x14054150,0x0004002b,0x00000006,0x000002af,0x41050514,0x0004002b, + 0x00000006,0x000002b0,0x41505014,0x0004002b,0x00000006,0x000002b1,0x40011554,0x0004002b, + 0x00000006,0x000002b2,0x54150140,0x0004002b,0x00000006,0x000002b3,0x50505500,0x0004002b, + 0x00000006,0x000002b4,0x00555050,0x0004002b,0x00000006,0x000002b5,0x15151010,0x0004002b, + 0x00000006,0x000002b6,0x54540404,0x0043002c,0x00000276,0x000002b7,0x00000277,0x00000278, + 0x00000279,0x0000027a,0x0000027b,0x0000027c,0x0000027d,0x0000027e,0x0000027f,0x00000280, + 0x00000281,0x00000282,0x00000283,0x00000284,0x00000285,0x00000286,0x00000287,0x00000288, + 0x00000289,0x0000028a,0x0000028b,0x0000028c,0x0000028d,0x0000028e,0x0000028f,0x00000290, + 0x00000291,0x00000292,0x00000293,0x00000294,0x00000295,0x00000296,0x00000297,0x00000298, + 0x00000299,0x0000029a,0x0000029b,0x0000029c,0x0000029d,0x0000029e,0x0000029f,0x000002a0, + 0x000002a1,0x000002a2,0x000002a3,0x000002a4,0x000002a5,0x000002a6,0x000002a7,0x000002a8, + 0x000002a9,0x000002aa,0x000002ab,0x000002ac,0x000002ad,0x000002ae,0x000002af,0x000002b0, + 0x000002b1,0x000002b2,0x000002b3,0x000002b4,0x000002b5,0x000002b6,0x00040020,0x000002b9, + 0x00000007,0x00000276,0x0004002b,0x00000006,0x000002c3,0xaa685050,0x0004002b,0x00000006, + 0x000002c4,0x6a5a5040,0x0004002b,0x00000006,0x000002c5,0x5a5a4200,0x0004002b,0x00000006, + 0x000002c6,0x5450a0a8,0x0004002b,0x00000006,0x000002c7,0xa5a50000,0x0004002b,0x00000006, + 0x000002c8,0xa0a05050,0x0004002b,0x00000006,0x000002c9,0x5555a0a0,0x0004002b,0x00000006, + 0x000002ca,0x5a5a5050,0x0004002b,0x00000006,0x000002cb,0xaa550000,0x0004002b,0x00000006, + 0x000002cc,0xaa555500,0x0004002b,0x00000006,0x000002cd,0xaaaa5500,0x0004002b,0x00000006, + 0x000002ce,0x90909090,0x0004002b,0x00000006,0x000002cf,0x94949494,0x0004002b,0x00000006, + 0x000002d0,0xa4a4a4a4,0x0004002b,0x00000006,0x000002d1,0xa9a59450,0x0004002b,0x00000006, + 0x000002d2,0x2a0a4250,0x0004002b,0x00000006,0x000002d3,0xa5945040,0x0004002b,0x00000006, + 0x000002d4,0x0a425054,0x0004002b,0x00000006,0x000002d5,0xa5a5a500,0x0004002b,0x00000006, + 0x000002d6,0x55a0a0a0,0x0004002b,0x00000006,0x000002d7,0xa8a85454,0x0004002b,0x00000006, + 0x000002d8,0x6a6a4040,0x0004002b,0x00000006,0x000002d9,0xa4a45000,0x0004002b,0x00000006, + 0x000002da,0x1a1a0500,0x0004002b,0x00000006,0x000002db,0x0050a4a4,0x0004002b,0x00000006, + 0x000002dc,0xaaa59090,0x0004002b,0x00000006,0x000002dd,0x14696914,0x0004002b,0x00000006, + 0x000002de,0x69691400,0x0004002b,0x00000006,0x000002df,0xa08585a0,0x0004002b,0x00000006, + 0x000002e0,0xaa821414,0x0004002b,0x00000006,0x000002e1,0x50a4a450,0x0004002b,0x00000006, + 0x000002e2,0x6a5a0200,0x0004002b,0x00000006,0x000002e3,0xa9a58000,0x0004002b,0x00000006, + 0x000002e4,0x5090a0a8,0x0004002b,0x00000006,0x000002e5,0xa8a09050,0x0004002b,0x00000006, + 0x000002e6,0x24242424,0x0004002b,0x00000006,0x000002e7,0x00aa5500,0x0004002b,0x00000006, + 0x000002e8,0x24924924,0x0004002b,0x00000006,0x000002e9,0x24499224,0x0004002b,0x00000006, + 0x000002ea,0x50a50a50,0x0004002b,0x00000006,0x000002eb,0x500aa550,0x0004002b,0x00000006, + 0x000002ec,0xaaaa4444,0x0004002b,0x00000006,0x000002ed,0x66660000,0x0004002b,0x00000006, + 0x000002ee,0xa5a0a5a0,0x0004002b,0x00000006,0x000002ef,0x50a050a0,0x0004002b,0x00000006, + 0x000002f0,0x69286928,0x0004002b,0x00000006,0x000002f1,0x44aaaa44,0x0004002b,0x00000006, + 0x000002f2,0x66666600,0x0004002b,0x00000006,0x000002f3,0xaa444444,0x0004002b,0x00000006, + 0x000002f4,0x54a854a8,0x0004002b,0x00000006,0x000002f5,0x95809580,0x0004002b,0x00000006, + 0x000002f6,0x96969600,0x0004002b,0x00000006,0x000002f7,0xa85454a8,0x0004002b,0x00000006, + 0x000002f8,0x80959580,0x0004002b,0x00000006,0x000002f9,0xaa141414,0x0004002b,0x00000006, + 0x000002fa,0x96960000,0x0004002b,0x00000006,0x000002fb,0xaaaa1414,0x0004002b,0x00000006, + 0x000002fc,0xa05050a0,0x0004002b,0x00000006,0x000002fd,0xa0a5a5a0,0x0004002b,0x00000006, + 0x000002fe,0x96000000,0x0004002b,0x00000006,0x000002ff,0x40804080,0x0004002b,0x00000006, + 0x00000300,0xa9a8a9a8,0x0004002b,0x00000006,0x00000301,0xaaaaaa44,0x0004002b,0x00000006, + 0x00000302,0x2a4a5254,0x0043002c,0x00000276,0x00000303,0x000002c3,0x000002c4,0x000002c5, + 0x000002c6,0x000002c7,0x000002c8,0x000002c9,0x000002ca,0x000002cb,0x000002cc,0x000002cd, + 0x000002ce,0x000002cf,0x000002d0,0x000002d1,0x000002d2,0x000002d3,0x000002d4,0x000002d5, + 0x000002d6,0x000002d7,0x000002d8,0x000002d9,0x000002da,0x000002db,0x000002dc,0x000002dd, + 0x000002de,0x000002df,0x000002e0,0x000002e1,0x000002e2,0x000002e3,0x000002e4,0x000002e5, + 0x000002e6,0x000002e7,0x000002e8,0x000002e9,0x000002ea,0x000002eb,0x000002ec,0x000002ed, + 0x000002ee,0x000002ef,0x000002f0,0x000002f1,0x000002f2,0x000002f3,0x000002f4,0x000002f5, + 0x000002f6,0x000002f7,0x000002f8,0x000002f9,0x000002fa,0x000002fb,0x000002fc,0x000002fd, + 0x000002fe,0x000002ff,0x00000300,0x00000301,0x00000302,0x0004002b,0x00000006,0x00000311, + 0x0000000f,0x0043002c,0x00000276,0x00000312,0x00000311,0x00000311,0x00000311,0x00000311, + 0x00000311,0x00000311,0x00000311,0x00000311,0x00000311,0x00000311,0x00000311,0x00000311, + 0x00000311,0x00000311,0x00000311,0x00000311,0x00000311,0x00000087,0x0000009e,0x00000087, + 0x00000087,0x0000009e,0x0000009e,0x00000311,0x00000087,0x0000009e,0x00000087,0x00000087, + 0x0000009e,0x0000009e,0x00000087,0x00000087,0x00000311,0x00000311,0x000000e9,0x0000009e, + 0x00000087,0x0000009e,0x00000311,0x00000311,0x00000087,0x0000009e,0x00000087,0x00000087, + 0x00000087,0x00000311,0x00000311,0x000000e9,0x000000e9,0x00000087,0x000000e9,0x0000009e, + 0x00000311,0x00000311,0x00000087,0x00000087,0x00000311,0x00000311,0x00000311,0x00000311, + 0x00000311,0x00000087,0x00000087,0x00000311,0x0004002b,0x00000006,0x0000031d,0x000000f3, + 0x0004002b,0x00000006,0x0000031e,0x00000083,0x0004002b,0x00000006,0x0000031f,0x0000008f, + 0x0004002b,0x00000006,0x00000320,0x0000003f,0x0004002b,0x00000006,0x00000321,0x000000f8, + 0x0004002b,0x00000006,0x00000322,0x000000f6,0x0004002b,0x00000006,0x00000323,0x000000f5, + 0x0004002b,0x00000006,0x00000324,0x0000008a,0x0004002b,0x00000006,0x00000325,0x00000035, + 0x0004002b,0x00000006,0x00000326,0x00000068,0x0004002b,0x00000006,0x00000327,0x000000a6, + 0x0004002b,0x00000006,0x00000328,0x000000af,0x0004002b,0x00000006,0x00000329,0x000000a5, + 0x0004002b,0x00000006,0x0000032a,0x00000098,0x0004002b,0x00000006,0x0000032b,0x0000006f, + 0x0004002b,0x00000006,0x0000032c,0x000000fa,0x0004002b,0x00000006,0x0000032d,0x000000fd, + 0x0004002b,0x00000006,0x0000032e,0x000000fc,0x0043002c,0x00000276,0x0000032f,0x0000031d, + 0x0000031e,0x0000031f,0x00000320,0x00000321,0x0000031d,0x00000320,0x0000031f,0x00000321, + 0x00000321,0x00000322,0x00000322,0x00000322,0x00000323,0x0000031d,0x0000031e,0x0000031d, + 0x0000031e,0x00000321,0x00000320,0x0000031d,0x0000031e,0x00000322,0x00000324,0x00000325, + 0x00000321,0x00000326,0x00000327,0x00000321,0x00000323,0x00000328,0x0000031f,0x00000321, + 0x00000320,0x0000031d,0x00000329,0x00000327,0x00000324,0x0000032a,0x00000328,0x0000032b, + 0x0000031d,0x0000031f,0x00000323,0x00000320,0x0000032b,0x0000032b,0x0000031f,0x0000031d, + 0x00000320,0x00000323,0x00000323,0x00000323,0x00000321,0x00000323,0x0000032c,0x00000323, + 0x0000032c,0x00000321,0x0000032d,0x00000320,0x0000032e,0x0000031d,0x0000031e,0x0004001c, + 0x00000369,0x00000006,0x000000b8,0x00040020,0x0000036a,0x00000007,0x00000369,0x0004002b, + 0x00000006,0x0000039c,0x00000015,0x0004002b,0x00000006,0x0000039d,0x0000002b,0x0007002c, + 0x00000137,0x0000039e,0x0000001e,0x0000039c,0x0000039d,0x00000275,0x00040020,0x000003a0, + 0x00000007,0x00000137,0x0004001c,0x000003aa,0x00000006,0x0000009e,0x0004002b,0x00000006, + 0x000003ab,0x00000009,0x0004002b,0x00000006,0x000003ac,0x00000012,0x0004002b,0x00000006, + 0x000003ad,0x0000001b,0x0004002b,0x00000006,0x000003ae,0x00000025,0x0004002b,0x00000006, + 0x000003af,0x0000002e,0x0004002b,0x00000006,0x000003b0,0x00000037,0x000b002c,0x000003aa, + 0x000003b1,0x0000001e,0x000003ab,0x000003ac,0x000003ad,0x000003ae,0x000003af,0x000003b0, + 0x00000275,0x00040020,0x000003b3,0x00000007,0x000003aa,0x0004002b,0x00000006,0x000003b8, + 0x0000000d,0x0004002b,0x00000006,0x000003b9,0x00000011,0x0004002b,0x00000006,0x000003ba, + 0x0000001a,0x0004002b,0x00000006,0x000003bb,0x0000001e,0x0004002b,0x00000006,0x000003bc, + 0x00000022,0x0004002b,0x00000006,0x000003bd,0x00000026,0x0004002b,0x00000006,0x000003be, + 0x0000002f,0x0004002b,0x00000006,0x000003bf,0x00000033,0x0004002b,0x00000006,0x000003c0, + 0x0000003c,0x0013002c,0x00000369,0x000003c1,0x0000001e,0x00000061,0x000003ab,0x000003b8, + 0x000003b9,0x0000039c,0x000003ba,0x000003bb,0x000003bc,0x000003bd,0x0000039d,0x000003be, + 0x000003bf,0x000003b0,0x000003c0,0x00000275,0x0004002b,0x00000010,0x0000046d,0x437f0000, + 0x00040020,0x0000047a,0x00000009,0x00000057,0x0003001d,0x000004a8,0x00000006,0x0003001e, + 0x000004a9,0x000004a8,0x00040020,0x000004aa,0x0000000c,0x000004a9,0x0004003b,0x000004aa, + 0x000004ab,0x0000000c,0x00040020,0x000004ad,0x0000000c,0x00000006,0x0006002c,0x0000005a, + 0x000004d3,0x0000009e,0x0000009e,0x0000003f,0x0004001c,0x000004d4,0x00000026,0x00000036, + 0x0004002b,0x00000026,0x000004d5,0x0000000a,0x0004002b,0x00000026,0x000004d6,0xffffffff, + 0x0004002b,0x00000026,0x000004d7,0x0000000b,0x0004002b,0x00000026,0x000004d8,0x0000000c, + 0x0004002b,0x00000026,0x000004d9,0x0000000d,0x0004002b,0x00000026,0x000004da,0x00000009, + 0x0023002c,0x000004d4,0x000004db,0x00000120,0x000000ab,0x000000bd,0x000004d5,0x000004d6, + 0x000004d6,0x0000008b,0x000004d7,0x000004d6,0x000004d6,0x00000080,0x000004d8,0x000004d6, + 0x000004d6,0x00000027,0x000004d9,0x000004d6,0x000004d6,0x00000117,0x000004d6,0x000004d6, + 0x000004d6,0x00000118,0x000004d6,0x000004d6,0x000004d6,0x0000008e,0x000004d6,0x000004d6, + 0x000004d6,0x000004da,0x000004d6,0x0004001c,0x000004dc,0x00000006,0x00000311,0x0004002b, + 0x00000006,0x000004dd,0x00000014,0x0004002b,0x00000006,0x000004de,0x0000002c,0x0004002b, + 0x00000006,0x000004df,0x00000054,0x0004002b,0x00000006,0x000004e0,0x00000069,0x0004002b, + 0x00000006,0x000004e1,0x0000007d,0x0004002b,0x00000006,0x000004e2,0x00000091,0x0004002b, + 0x00000006,0x000004e3,0x000000a7,0x0004002b,0x00000006,0x000004e4,0x000000bd,0x0004002b, + 0x00000006,0x000004e5,0x000000d5,0x0004002b,0x00000006,0x000004e6,0x000000db,0x0004002b, + 0x00000006,0x000004e7,0x000000e4,0x0004002b,0x00000006,0x000004e8,0x000000ed,0x0012002c, + 0x000004dc,0x000004e9,0x0000001e,0x000004dd,0x000004de,0x00000320,0x000004df,0x000004e0, + 0x000004e1,0x000004e2,0x000004e3,0x000004e4,0x000004e5,0x000004e6,0x000004e7,0x000004e8, + 0x00000322,0x0004001c,0x000004ea,0x00000006,0x00000322,0x0004002b,0x00000006,0x000004eb, + 0x00000816,0x0004002b,0x00000006,0x000004ec,0x0000081a,0x0004002b,0x00000006,0x000004ed, + 0x0000081b,0x0004002b,0x00000006,0x000004ee,0x000000a0,0x0004002b,0x00000006,0x000004ef, + 0x000000a4,0x0004002b,0x00000006,0x000004f0,0x000000a8,0x0004002b,0x00000006,0x000004f1, + 0x00000051,0x0004002b,0x00000006,0x000004f2,0x00000817,0x0004002b,0x00000006,0x000004f3, + 0x00000046,0x0004002b,0x00000006,0x000004f4,0x00000055,0x0004002b,0x00000006,0x000004f5, + 0x00000047,0x0004002b,0x00000006,0x000004f6,0x00000059,0x0004002b,0x00000006,0x000004f7, + 0x0000021b,0x0004002b,0x00000006,0x000004f8,0x0000004a,0x0004002b,0x00000006,0x000004f9, + 0x00000052,0x0004002b,0x00000006,0x000004fa,0x0000041b,0x0004002b,0x00000006,0x000004fb, + 0x00000053,0x0004002b,0x00000006,0x000004fc,0x0000061b,0x0004002b,0x00000006,0x000004fd, + 0x0000005c,0x0004002b,0x00000006,0x000004fe,0x00000a16,0x0004002b,0x00000006,0x000004ff, + 0x00000a17,0x0004002b,0x00000006,0x00000500,0x00000070,0x0004002b,0x00000006,0x00000501, + 0x00000074,0x0004002b,0x00000006,0x00000502,0x00000a1a,0x0004002b,0x00000006,0x00000503, + 0x00000078,0x0004002b,0x00000006,0x00000504,0x00000a1b,0x0004002b,0x00000006,0x00000505, + 0x00000061,0x0004002b,0x00000006,0x00000506,0x00000065,0x0004002b,0x00000006,0x00000507, + 0x00000062,0x0004002b,0x00000006,0x00000508,0x00000063,0x0004002b,0x00000006,0x00000509, + 0x00001410,0x0004002b,0x00000006,0x0000050a,0x00000045,0x0004002b,0x00000006,0x0000050b, + 0x00001414,0x0004002b,0x00000006,0x0000050c,0x00000049,0x0004002b,0x00000006,0x0000050d, + 0x00001418,0x0004002b,0x00000006,0x0000050e,0x00000041,0x0004002b,0x00000006,0x0000050f, + 0x00000042,0x0004002b,0x00000006,0x00000510,0x00000043,0x0004002b,0x00000006,0x00000511, + 0x00000090,0x0004002b,0x00000006,0x00000512,0x00000094,0x0004002b,0x00000006,0x00000513, + 0x00000080,0x0004002b,0x00000006,0x00000514,0x00000084,0x0004002b,0x00000006,0x00000515, + 0x00000088,0x0004002b,0x00000006,0x00000516,0x00000060,0x0004002b,0x00000006,0x00000517, + 0x00000064,0x0004002b,0x00000006,0x00000518,0x000000a1,0x0004002b,0x00000006,0x00000519, + 0x000000a9,0x0004002b,0x00000006,0x0000051a,0x00000095,0x0004002b,0x00000006,0x0000051b, + 0x00000099,0x0004002b,0x00000006,0x0000051c,0x00000081,0x0004002b,0x00000006,0x0000051d, + 0x00005420,0x0004002b,0x00000006,0x0000051e,0x00000085,0x0004002b,0x00000006,0x0000051f, + 0x00005424,0x0004002b,0x00000006,0x00000520,0x00000089,0x0004002b,0x00000006,0x00000521, + 0x00005428,0x0004002b,0x00000006,0x00000522,0x00005460,0x0004002b,0x00000006,0x00000523, + 0x00005464,0x0004002b,0x00000006,0x00000524,0x00005468,0x00f9002c,0x000004ea,0x00000525, + 0x000004eb,0x000004ec,0x000004ed,0x000004ee,0x000004ef,0x000004f0,0x000004f1,0x000004f2, + 0x000004f3,0x000004f4,0x000003ad,0x000004f5,0x000004f6,0x000004f7,0x000004f8,0x000004f9, + 0x000004fa,0x000004fb,0x000004fc,0x000004fd,0x000004fe,0x000004f2,0x000004ff,0x00000500, + 0x000003ad,0x000004f7,0x000004ec,0x00000501,0x00000502,0x000004fa,0x000004eb,0x00000503, + 0x000004fc,0x00000504,0x000004ed,0x00000505,0x000004f3,0x00000506,0x000004f5,0x000004e0, + 0x000004f8,0x00000507,0x00000508,0x000004fd,0x000004ee,0x000004ef,0x000004f0,0x000004f1, + 0x00000509,0x000004f3,0x0000050a,0x0000050b,0x000003ad,0x000004f5,0x0000050c,0x0000050d, + 0x000004f7,0x000004f8,0x000004f9,0x000004fa,0x000004fb,0x000004fc,0x000004fd,0x000004ee, + 0x000004ef,0x000004f0,0x0000050e,0x00000509,0x000004f2,0x000004f3,0x000004f4,0x0000050b, + 0x000004f5,0x0000050c,0x0000050d,0x000004f7,0x000004f8,0x0000050f,0x000003ad,0x000004fa, + 0x00000510,0x000004eb,0x000004fc,0x000004fd,0x000004ee,0x000004ef,0x000004f0,0x0000050e, + 0x00000509,0x000004ec,0x000004f3,0x0000050a,0x0000050b,0x000003ad,0x000004f5,0x000004f6, + 0x0000050d,0x000004f8,0x0000050f,0x000004f7,0x000004fa,0x00000510,0x000004ed,0x000004fc, + 0x000004fd,0x00000511,0x000004ec,0x00000512,0x000004eb,0x0000032a,0x000004ed,0x000004f1, + 0x000004f2,0x000004f3,0x000004f4,0x000003ad,0x000004f5,0x000004f6,0x000004f7,0x000004f8, + 0x000004f9,0x000004fa,0x000004fb,0x000004fc,0x000004fd,0x00000513,0x000004f2,0x000004ec, + 0x00000514,0x000004fa,0x000004eb,0x00000515,0x000004fc,0x000004ed,0x00000505,0x000004f3, + 0x000004f4,0x000003ad,0x000004f5,0x000004f6,0x000004f7,0x000004f8,0x00000507,0x00000508, + 0x000004fd,0x00000513,0x000003ad,0x000004ec,0x00000514,0x000004fe,0x000004eb,0x00000515, + 0x000004ff,0x000004ed,0x000004f1,0x000004f2,0x000004f3,0x00000506,0x000004f5,0x000004f6, + 0x000004f7,0x000004f8,0x000004f9,0x000004fa,0x000004fb,0x000004fc,0x000004fd,0x00000513, + 0x000004f7,0x000004ec,0x00000514,0x00000502,0x000004eb,0x00000515,0x00000504,0x000004ed, + 0x000004f1,0x000004f2,0x000004f3,0x000004f4,0x000003ad,0x000004f5,0x000004e0,0x000004f8, + 0x000004f9,0x000004fa,0x000004fb,0x000004fc,0x000004fd,0x00000516,0x000004f2,0x000003ad, + 0x000004f7,0x000004ec,0x00000517,0x000004fe,0x00000502,0x000004fa,0x000004eb,0x00000326, + 0x000004ff,0x000004fc,0x00000504,0x000004ed,0x00000505,0x000004f3,0x00000506,0x000004f5, + 0x000004e0,0x000004f8,0x00000507,0x00000508,0x000004fd,0x000004ee,0x000004ef,0x000004f0, + 0x00000518,0x00000329,0x00000519,0x000004ee,0x000004ef,0x000004f0,0x000004e2,0x00000509, + 0x0000051a,0x0000050b,0x0000051b,0x0000050d,0x000004ee,0x000004ef,0x000004f0,0x0000051c, + 0x0000051d,0x0000051e,0x0000051f,0x00000520,0x00000521,0x000004ee,0x000004ef,0x000004f0, + 0x0000050e,0x00000522,0x0000050a,0x00000523,0x0000050c,0x00000524,0x0004002b,0x00000006, + 0x00000526,0x0000000e,0x0004001c,0x00000527,0x00000026,0x00000526,0x0004002b,0x00000026, + 0x00000528,0x00000010,0x0011002c,0x00000527,0x00000529,0x000004d5,0x00000118,0x000004d7, + 0x000004d7,0x000004d7,0x000004da,0x0000008e,0x0000008e,0x0000008e,0x00000117,0x000004d5, + 0x000004d7,0x000004d8,0x00000528,0x0011002c,0x00000527,0x0000052a,0x00000027,0x00000117, + 0x00000027,0x00000080,0x00000080,0x00000027,0x00000117,0x00000027,0x00000027,0x00000117, + 0x000004d5,0x000004da,0x0000008e,0x00000080,0x0011002c,0x00000527,0x0000052b,0x00000027, + 0x00000117,0x00000080,0x00000027,0x00000080,0x00000027,0x00000027,0x00000117,0x00000027, + 0x00000117,0x000004d5,0x000004da,0x0000008e,0x00000080,0x0011002c,0x00000527,0x0000052c, + 0x00000027,0x00000117,0x00000080,0x00000080,0x00000027,0x00000027,0x00000027,0x00000027, + 0x00000117,0x00000117,0x000004d5,0x000004da,0x0000008e,0x00000080,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000058,0x00000476, + 0x00000007,0x0004003b,0x00000058,0x00000479,0x00000007,0x0004003b,0x00000009,0x00000492, + 0x00000007,0x0004003b,0x00000009,0x00000493,0x00000007,0x0004003b,0x00000008,0x000004a7, + 0x00000007,0x0004003b,0x00000009,0x000004b6,0x00000007,0x0004003b,0x00000009,0x000004c1, + 0x00000007,0x0004003b,0x0000016e,0x000004cb,0x00000007,0x0004003b,0x00000008,0x000004d0, + 0x00000007,0x0004003d,0x0000005a,0x00000477,0x0000005c,0x0007004f,0x00000057,0x00000478, + 0x00000477,0x00000477,0x00000000,0x00000001,0x0003003e,0x00000476,0x00000478,0x00050041, + 0x0000047a,0x0000047b,0x0000006d,0x00000027,0x0004003d,0x00000057,0x0000047c,0x0000047b, + 0x00050050,0x00000057,0x0000047d,0x00000039,0x00000039,0x00050080,0x00000057,0x0000047e, + 0x0000047c,0x0000047d,0x00050050,0x00000057,0x0000047f,0x00000061,0x00000061,0x00050086, + 0x00000057,0x00000480,0x0000047e,0x0000047f,0x0003003e,0x00000479,0x00000480,0x00050041, + 0x00000009,0x00000481,0x00000476,0x0000001e,0x0004003d,0x00000006,0x00000482,0x00000481, + 0x00050041,0x00000009,0x00000483,0x00000479,0x0000001e,0x0004003d,0x00000006,0x00000484, + 0x00000483,0x000500ae,0x0000001f,0x00000485,0x00000482,0x00000484,0x000400a8,0x0000001f, + 0x00000486,0x00000485,0x000300f7,0x00000488,0x00000000,0x000400fa,0x00000486,0x00000487, + 0x00000488,0x000200f8,0x00000487,0x00050041,0x00000009,0x00000489,0x00000476,0x0000003f, + 0x0004003d,0x00000006,0x0000048a,0x00000489,0x00050041,0x00000009,0x0000048b,0x00000479, + 0x0000003f,0x0004003d,0x00000006,0x0000048c,0x0000048b,0x000500ae,0x0000001f,0x0000048d, + 0x0000048a,0x0000048c,0x000200f9,0x00000488,0x000200f8,0x00000488,0x000700f5,0x0000001f, + 0x0000048e,0x00000485,0x00000005,0x0000048d,0x00000487,0x000300f7,0x00000490,0x00000000, + 0x000400fa,0x0000048e,0x0000048f,0x00000490,0x000200f8,0x0000048f,0x000100fd,0x000200f8, + 0x00000490,0x0003003e,0x00000492,0x00000061,0x00050041,0x0000006e,0x00000494,0x0000006d, + 0x00000120,0x0004003d,0x00000006,0x00000495,0x00000494,0x00050041,0x00000088,0x00000496, + 0x0000005c,0x00000087,0x0004003d,0x00000006,0x00000497,0x00000496,0x00050041,0x0000006e, + 0x00000498,0x0000006d,0x000000bd,0x0004003d,0x00000006,0x00000499,0x00000498,0x00050084, + 0x00000006,0x0000049a,0x00000497,0x00000499,0x00050041,0x00000009,0x0000049b,0x00000476, + 0x0000003f,0x0004003d,0x00000006,0x0000049c,0x0000049b,0x00050041,0x0000006e,0x0000049d, + 0x0000006d,0x000000ab,0x0004003d,0x00000006,0x0000049e,0x0000049d,0x00050084,0x00000006, + 0x0000049f,0x0000049c,0x0000049e,0x00050080,0x00000006,0x000004a0,0x0000049a,0x0000049f, + 0x00050041,0x00000009,0x000004a1,0x00000476,0x0000001e,0x0004003d,0x00000006,0x000004a2, + 0x000004a1,0x00050080,0x00000006,0x000004a3,0x000004a0,0x000004a2,0x0004003d,0x00000006, + 0x000004a4,0x00000492,0x00050084,0x00000006,0x000004a5,0x000004a3,0x000004a4,0x00050080, + 0x00000006,0x000004a6,0x00000495,0x000004a5,0x0003003e,0x00000493,0x000004a6,0x0004003d, + 0x00000006,0x000004ac,0x00000493,0x00060041,0x000004ad,0x000004ae,0x000004ab,0x00000120, + 0x000004ac,0x0004003d,0x00000006,0x000004af,0x000004ae,0x0004003d,0x00000006,0x000004b0, + 0x00000493,0x00050080,0x00000006,0x000004b1,0x000004b0,0x0000003f,0x00060041,0x000004ad, + 0x000004b2,0x000004ab,0x00000120,0x000004b1,0x0004003d,0x00000006,0x000004b3,0x000004b2, + 0x0004003d,0x00000006,0x000004b4,0x00000492,0x000500ac,0x0000001f,0x000004b5,0x000004b4, + 0x00000087,0x000300f7,0x000004b8,0x00000000,0x000400fa,0x000004b5,0x000004b7,0x000004bd, + 0x000200f8,0x000004b7,0x0004003d,0x00000006,0x000004b9,0x00000493,0x00050080,0x00000006, + 0x000004ba,0x000004b9,0x00000087,0x00060041,0x000004ad,0x000004bb,0x000004ab,0x00000120, + 0x000004ba,0x0004003d,0x00000006,0x000004bc,0x000004bb,0x0003003e,0x000004b6,0x000004bc, + 0x000200f9,0x000004b8,0x000200f8,0x000004bd,0x0003003e,0x000004b6,0x0000001e,0x000200f9, + 0x000004b8,0x000200f8,0x000004b8,0x0004003d,0x00000006,0x000004be,0x000004b6,0x0004003d, + 0x00000006,0x000004bf,0x00000492,0x000500ac,0x0000001f,0x000004c0,0x000004bf,0x00000087, + 0x000300f7,0x000004c3,0x00000000,0x000400fa,0x000004c0,0x000004c2,0x000004c8,0x000200f8, + 0x000004c2,0x0004003d,0x00000006,0x000004c4,0x00000493,0x00050080,0x00000006,0x000004c5, + 0x000004c4,0x00000039,0x00060041,0x000004ad,0x000004c6,0x000004ab,0x00000120,0x000004c5, + 0x0004003d,0x00000006,0x000004c7,0x000004c6,0x0003003e,0x000004c1,0x000004c7,0x000200f9, + 0x000004c3,0x000200f8,0x000004c8,0x0003003e,0x000004c1,0x0000001e,0x000200f9,0x000004c3, + 0x000200f8,0x000004c3,0x0004003d,0x00000006,0x000004c9,0x000004c1,0x00070050,0x00000007, + 0x000004ca,0x000004af,0x000004b3,0x000004be,0x000004c9,0x0003003e,0x000004a7,0x000004ca, + 0x00050041,0x0000006e,0x000004cc,0x0000006d,0x0000008b,0x0004003d,0x00000006,0x000004cd, + 0x000004cc,0x000500c7,0x00000006,0x000004ce,0x000004cd,0x00000087,0x000500ab,0x0000001f, + 0x000004cf,0x000004ce,0x0000001e,0x0003003e,0x000004cb,0x000004cf,0x0004003d,0x00000007, + 0x000004d1,0x000004a7,0x0003003e,0x000004d0,0x000004d1,0x00050039,0x00000002,0x000004d2, + 0x0000001b,0x000004d0,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000e,0x00000000, + 0x0000000a,0x00030037,0x00000008,0x0000000b,0x00030037,0x00000009,0x0000000c,0x00030037, + 0x00000009,0x0000000d,0x000200f8,0x0000000f,0x0004003b,0x00000009,0x00000024,0x00000007, + 0x0004003b,0x00000009,0x00000029,0x00000007,0x0004003b,0x00000009,0x0000002d,0x00000007, + 0x0004003b,0x00000009,0x0000004a,0x00000007,0x0004003d,0x00000006,0x0000001d,0x0000000d, + 0x000500aa,0x0000001f,0x00000020,0x0000001d,0x0000001e,0x000300f7,0x00000022,0x00000000, + 0x000400fa,0x00000020,0x00000021,0x00000022,0x000200f8,0x00000021,0x000200fe,0x0000001e, + 0x000200f8,0x00000022,0x0004003d,0x00000006,0x00000025,0x0000000c,0x000500c2,0x00000006, + 0x00000028,0x00000025,0x00000027,0x0003003e,0x00000024,0x00000028,0x0004003d,0x00000006, + 0x0000002a,0x0000000c,0x000500c7,0x00000006,0x0000002c,0x0000002a,0x0000002b,0x0003003e, + 0x00000029,0x0000002c,0x0004003d,0x00000006,0x0000002e,0x00000024,0x00050041,0x00000009, + 0x0000002f,0x0000000b,0x0000002e,0x0004003d,0x00000006,0x00000030,0x0000002f,0x0004003d, + 0x00000006,0x00000031,0x00000029,0x000500c2,0x00000006,0x00000032,0x00000030,0x00000031, + 0x0003003e,0x0000002d,0x00000032,0x0004003d,0x00000006,0x00000033,0x00000029,0x0004003d, + 0x00000006,0x00000034,0x0000000d,0x00050080,0x00000006,0x00000035,0x00000033,0x00000034, + 0x000500ac,0x0000001f,0x00000037,0x00000035,0x00000036,0x0004003d,0x00000006,0x00000038, + 0x00000024,0x000500b0,0x0000001f,0x0000003a,0x00000038,0x00000039,0x000500a7,0x0000001f, + 0x0000003b,0x00000037,0x0000003a,0x000300f7,0x0000003d,0x00000000,0x000400fa,0x0000003b, + 0x0000003c,0x0000003d,0x000200f8,0x0000003c,0x0004003d,0x00000006,0x0000003e,0x00000024, + 0x00050080,0x00000006,0x00000040,0x0000003e,0x0000003f,0x00050041,0x00000009,0x00000041, + 0x0000000b,0x00000040,0x0004003d,0x00000006,0x00000042,0x00000041,0x0004003d,0x00000006, + 0x00000043,0x00000029,0x00050082,0x00000006,0x00000044,0x00000036,0x00000043,0x000500c4, + 0x00000006,0x00000045,0x00000042,0x00000044,0x0004003d,0x00000006,0x00000046,0x0000002d, + 0x000500c5,0x00000006,0x00000047,0x00000046,0x00000045,0x0003003e,0x0000002d,0x00000047, + 0x000200f9,0x0000003d,0x000200f8,0x0000003d,0x0004003d,0x00000006,0x00000048,0x0000000d, + 0x000500aa,0x0000001f,0x00000049,0x00000048,0x00000036,0x000300f7,0x0000004c,0x00000000, + 0x000400fa,0x00000049,0x0000004b,0x0000004e,0x000200f8,0x0000004b,0x0004003d,0x00000006, + 0x0000004d,0x0000002d,0x0003003e,0x0000004a,0x0000004d,0x000200f9,0x0000004c,0x000200f8, + 0x0000004e,0x0004003d,0x00000006,0x0000004f,0x0000002d,0x0004003d,0x00000006,0x00000050, + 0x0000000d,0x000500c4,0x00000006,0x00000051,0x0000003f,0x00000050,0x00050082,0x00000006, + 0x00000052,0x00000051,0x0000003f,0x000500c7,0x00000006,0x00000053,0x0000004f,0x00000052, + 0x0003003e,0x0000004a,0x00000053,0x000200f9,0x0000004c,0x000200f8,0x0000004c,0x0004003d, + 0x00000006,0x00000054,0x0000004a,0x000200fe,0x00000054,0x00010038,0x00050036,0x00000002, + 0x00000017,0x00000000,0x00000013,0x00030037,0x00000009,0x00000014,0x00030037,0x00000009, + 0x00000015,0x00030037,0x00000012,0x00000016,0x000200f8,0x00000018,0x0004003b,0x00000058, + 0x00000059,0x00000007,0x0004003b,0x00000058,0x0000005f,0x00000007,0x0004003d,0x0000005a, + 0x0000005d,0x0000005c,0x0007004f,0x00000057,0x0000005e,0x0000005d,0x0000005d,0x00000000, + 0x00000001,0x0003003e,0x00000059,0x0000005e,0x0004003d,0x00000057,0x00000060,0x00000059, + 0x00050050,0x00000057,0x00000062,0x00000061,0x00000061,0x00050084,0x00000057,0x00000063, + 0x00000060,0x00000062,0x0004003d,0x00000006,0x00000064,0x00000014,0x0004003d,0x00000006, + 0x00000065,0x00000015,0x00050050,0x00000057,0x00000066,0x00000064,0x00000065,0x00050080, + 0x00000057,0x00000067,0x00000063,0x00000066,0x0003003e,0x0000005f,0x00000067,0x00050041, + 0x00000009,0x00000068,0x0000005f,0x0000001e,0x0004003d,0x00000006,0x00000069,0x00000068, + 0x00060041,0x0000006e,0x0000006f,0x0000006d,0x00000027,0x0000001e,0x0004003d,0x00000006, + 0x00000070,0x0000006f,0x000500b0,0x0000001f,0x00000071,0x00000069,0x00000070,0x000300f7, + 0x00000073,0x00000000,0x000400fa,0x00000071,0x00000072,0x00000073,0x000200f8,0x00000072, + 0x00050041,0x00000009,0x00000074,0x0000005f,0x0000003f,0x0004003d,0x00000006,0x00000075, + 0x00000074,0x00060041,0x0000006e,0x00000076,0x0000006d,0x00000027,0x0000003f,0x0004003d, + 0x00000006,0x00000077,0x00000076,0x000500b0,0x0000001f,0x00000078,0x00000075,0x00000077, + 0x000200f9,0x00000073,0x000200f8,0x00000073,0x000700f5,0x0000001f,0x00000079,0x00000071, + 0x00000018,0x00000078,0x00000072,0x000300f7,0x0000007b,0x00000000,0x000400fa,0x00000079, + 0x0000007a,0x0000007b,0x000200f8,0x0000007a,0x0004003d,0x0000007c,0x0000007f,0x0000007e, + 0x00050041,0x00000081,0x00000082,0x0000006d,0x00000080,0x0004003d,0x0000006a,0x00000083, + 0x00000082,0x0004003d,0x00000057,0x00000084,0x0000005f,0x0004007c,0x0000006a,0x00000085, + 0x00000084,0x00050080,0x0000006a,0x00000086,0x00000083,0x00000085,0x00050041,0x00000088, + 0x00000089,0x0000005c,0x00000087,0x0004003d,0x00000006,0x0000008a,0x00000089,0x00050041, + 0x0000006e,0x0000008c,0x0000006d,0x0000008b,0x0004003d,0x00000006,0x0000008d,0x0000008c, + 0x000500c2,0x00000006,0x0000008f,0x0000008d,0x0000008e,0x00050080,0x00000006,0x00000090, + 0x0000008a,0x0000008f,0x0004007c,0x00000026,0x00000091,0x00000090,0x00050051,0x00000026, + 0x00000093,0x00000086,0x00000000,0x00050051,0x00000026,0x00000094,0x00000086,0x00000001, + 0x00060050,0x00000092,0x00000095,0x00000093,0x00000094,0x00000091,0x0004003d,0x00000011, + 0x00000096,0x00000016,0x00040063,0x0000007f,0x00000095,0x00000096,0x000200f9,0x0000007b, + 0x000200f8,0x0000007b,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000001b,0x00000000, + 0x00000019,0x00030037,0x00000008,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000009, + 0x00000097,0x00000007,0x0004003b,0x00000008,0x000000a2,0x00000007,0x0004003b,0x00000009, + 0x000000a4,0x00000007,0x0004003b,0x00000009,0x000000a6,0x00000007,0x0004003b,0x00000009, + 0x000000b1,0x00000007,0x0004003b,0x00000009,0x000000c1,0x00000007,0x0004003b,0x00000009, + 0x000000c2,0x00000007,0x0004003b,0x00000012,0x000000c3,0x00000007,0x0004003b,0x00000009, + 0x000000c8,0x00000007,0x0004003b,0x00000009,0x000000cb,0x00000007,0x0004003b,0x00000009, + 0x000000cc,0x00000007,0x0004003b,0x00000009,0x000000cd,0x00000007,0x0004003b,0x00000009, + 0x000000ce,0x00000007,0x0004003b,0x00000009,0x000000e6,0x00000007,0x0004003b,0x00000008, + 0x000000eb,0x00000007,0x0004003b,0x00000009,0x000000ed,0x00000007,0x0004003b,0x00000009, + 0x000000ef,0x00000007,0x0004003b,0x00000009,0x000000f5,0x00000007,0x0004003b,0x00000008, + 0x00000100,0x00000007,0x0004003b,0x00000009,0x00000102,0x00000007,0x0004003b,0x00000009, + 0x00000104,0x00000007,0x0004003b,0x00000008,0x0000010c,0x00000007,0x0004003b,0x00000009, + 0x0000010e,0x00000007,0x0004003b,0x00000009,0x00000110,0x00000007,0x0004003b,0x00000114, + 0x00000115,0x00000007,0x0004003b,0x0000011b,0x0000011c,0x00000007,0x0004003b,0x00000114, + 0x0000011f,0x00000007,0x0004003b,0x0000011b,0x00000123,0x00000007,0x0004003b,0x00000009, + 0x00000126,0x00000007,0x0004003b,0x00000009,0x0000012e,0x00000007,0x0004003b,0x00000139, + 0x0000013a,0x00000007,0x0004003b,0x00000008,0x0000013f,0x00000007,0x0004003b,0x00000009, + 0x00000141,0x00000007,0x0004003b,0x00000009,0x00000143,0x00000007,0x0004003b,0x00000009, + 0x0000014e,0x00000007,0x0004003b,0x00000008,0x0000015e,0x00000007,0x0004003b,0x00000009, + 0x00000160,0x00000007,0x0004003b,0x00000009,0x00000162,0x00000007,0x0004003b,0x0000016e, + 0x0000016f,0x00000007,0x0004003b,0x00000009,0x00000188,0x00000007,0x0004003b,0x00000009, + 0x00000191,0x00000007,0x0004003b,0x00000009,0x000001a7,0x00000007,0x0004003b,0x00000008, + 0x000001a8,0x00000007,0x0004003b,0x00000009,0x000001aa,0x00000007,0x0004003b,0x00000009, + 0x000001ac,0x00000007,0x0004003b,0x00000009,0x000001ae,0x00000007,0x0004003b,0x00000008, + 0x000001b1,0x00000007,0x0004003b,0x00000009,0x000001b3,0x00000007,0x0004003b,0x00000009, + 0x000001b4,0x00000007,0x0004003b,0x00000009,0x000001b8,0x00000007,0x0004003b,0x00000009, + 0x000001db,0x00000007,0x0004003b,0x00000009,0x000001e4,0x00000007,0x0004003b,0x00000008, + 0x000001e5,0x00000007,0x0004003b,0x00000009,0x000001e7,0x00000007,0x0004003b,0x00000009, + 0x000001e9,0x00000007,0x0004003b,0x00000009,0x000001ed,0x00000007,0x0004003b,0x00000009, + 0x00000200,0x00000007,0x0004003b,0x00000009,0x00000209,0x00000007,0x0004003b,0x00000009, + 0x00000210,0x00000007,0x0004003b,0x00000009,0x00000256,0x00000007,0x0004003b,0x00000009, + 0x0000025c,0x00000007,0x0004003b,0x00000009,0x00000264,0x00000007,0x0004003b,0x00000009, + 0x00000267,0x00000007,0x0004003b,0x00000009,0x0000026f,0x00000007,0x0004003b,0x00000009, + 0x00000272,0x00000007,0x0004003b,0x000002b9,0x000002ba,0x00000007,0x0004003b,0x00000009, + 0x000002c0,0x00000007,0x0004003b,0x000002b9,0x00000305,0x00000007,0x0004003b,0x00000009, + 0x0000030b,0x00000007,0x0004003b,0x00000009,0x0000030e,0x00000007,0x0004003b,0x000002b9, + 0x00000314,0x00000007,0x0004003b,0x00000009,0x0000031a,0x00000007,0x0004003b,0x000002b9, + 0x00000331,0x00000007,0x0004003b,0x00000009,0x00000337,0x00000007,0x0004003b,0x00000009, + 0x0000033f,0x00000007,0x0004003b,0x00000009,0x00000345,0x00000007,0x0004003b,0x0000016e, + 0x00000347,0x00000007,0x0004003b,0x0000036a,0x0000036b,0x00000007,0x0004003b,0x00000008, + 0x0000036d,0x00000007,0x0004003b,0x00000009,0x0000036f,0x00000007,0x0004003b,0x00000009, + 0x00000371,0x00000007,0x0004003b,0x00000009,0x0000037a,0x00000007,0x0004003b,0x00000009, + 0x00000382,0x00000007,0x0004003b,0x00000009,0x00000388,0x00000007,0x0004003b,0x00000009, + 0x0000038b,0x00000007,0x0004003b,0x00000009,0x0000038e,0x00000007,0x0004003b,0x00000009, + 0x00000396,0x00000007,0x0004003b,0x00000009,0x00000399,0x00000007,0x0004003b,0x000003a0, + 0x000003a1,0x00000007,0x0004003b,0x00000009,0x000003a7,0x00000007,0x0004003b,0x000003b3, + 0x000003b4,0x00000007,0x0004003b,0x0000036a,0x000003c3,0x00000007,0x0004003b,0x00000009, + 0x000003c8,0x00000007,0x0004003b,0x00000008,0x000003d0,0x00000007,0x0004003b,0x00000009, + 0x000003e6,0x00000007,0x0004003b,0x00000009,0x000003e9,0x00000007,0x0004003b,0x00000009, + 0x000003f1,0x00000007,0x0004003b,0x00000008,0x000003f2,0x00000007,0x0004003b,0x00000009, + 0x000003f4,0x00000007,0x0004003b,0x00000009,0x000003f6,0x00000007,0x0004003b,0x00000009, + 0x000003fc,0x00000007,0x0004003b,0x00000009,0x000003ff,0x00000007,0x0004003b,0x000003a0, + 0x00000403,0x00000007,0x0004003b,0x000003b3,0x00000408,0x00000007,0x0004003b,0x00000009, + 0x0000040c,0x00000007,0x0004003b,0x00000009,0x0000040f,0x00000007,0x0004003b,0x000003a0, + 0x00000413,0x00000007,0x0004003b,0x000003b3,0x00000418,0x00000007,0x0004003b,0x00000009, + 0x0000041c,0x00000007,0x0004003b,0x00000009,0x00000422,0x00000007,0x0004003b,0x00000009, + 0x00000428,0x00000007,0x0004003b,0x00000009,0x00000470,0x00000007,0x0004003b,0x00000009, + 0x00000471,0x00000007,0x0004003b,0x00000012,0x00000472,0x00000007,0x0003003e,0x00000097, + 0x0000001e,0x000200f9,0x00000098,0x000200f8,0x00000098,0x000400f6,0x0000009a,0x0000009b, + 0x00000000,0x000200f9,0x0000009c,0x000200f8,0x0000009c,0x0004003d,0x00000006,0x0000009d, + 0x00000097,0x000500b0,0x0000001f,0x0000009f,0x0000009d,0x0000009e,0x000300f7,0x000000a1, + 0x00000000,0x000400fa,0x0000009f,0x000000a0,0x000000a1,0x000200f8,0x000000a0,0x0004003d, + 0x00000007,0x000000a3,0x0000001a,0x0003003e,0x000000a2,0x000000a3,0x0004003d,0x00000006, + 0x000000a5,0x00000097,0x0003003e,0x000000a4,0x000000a5,0x0003003e,0x000000a6,0x0000003f, + 0x00070039,0x00000006,0x000000a7,0x0000000e,0x000000a2,0x000000a4,0x000000a6,0x000500aa, + 0x0000001f,0x000000a8,0x000000a7,0x0000001e,0x000200f9,0x000000a1,0x000200f8,0x000000a1, + 0x000700f5,0x0000001f,0x000000a9,0x0000009f,0x0000009c,0x000000a8,0x000000a0,0x000400fa, + 0x000000a9,0x00000099,0x0000009a,0x000200f8,0x00000099,0x0004003d,0x00000006,0x000000aa, + 0x00000097,0x00050080,0x00000006,0x000000ac,0x000000aa,0x000000ab,0x0003003e,0x00000097, + 0x000000ac,0x000200f9,0x0000009b,0x000200f8,0x0000009b,0x000200f9,0x00000098,0x000200f8, + 0x0000009a,0x0004003d,0x00000006,0x000000ad,0x00000097,0x000500ae,0x0000001f,0x000000ae, + 0x000000ad,0x0000009e,0x000300f7,0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af, + 0x000000b0,0x000200f8,0x000000af,0x0003003e,0x000000b1,0x0000001e,0x000200f9,0x000000b2, + 0x000200f8,0x000000b2,0x000400f6,0x000000b4,0x000000b5,0x00000000,0x000200f9,0x000000b6, + 0x000200f8,0x000000b6,0x0004003d,0x00000006,0x000000b7,0x000000b1,0x000500b0,0x0000001f, + 0x000000b9,0x000000b7,0x000000b8,0x000400fa,0x000000b9,0x000000b3,0x000000b4,0x000200f8, + 0x000000b3,0x0004003d,0x00000006,0x000000ba,0x000000b1,0x000500c7,0x00000006,0x000000bb, + 0x000000ba,0x00000039,0x0004003d,0x00000006,0x000000bc,0x000000b1,0x000500c2,0x00000006, + 0x000000be,0x000000bc,0x000000bd,0x0003003e,0x000000c1,0x000000bb,0x0003003e,0x000000c2, + 0x000000be,0x0003003e,0x000000c3,0x000000c0,0x00070039,0x00000002,0x000000c4,0x00000017, + 0x000000c1,0x000000c2,0x000000c3,0x000200f9,0x000000b5,0x000200f8,0x000000b5,0x0004003d, + 0x00000006,0x000000c5,0x000000b1,0x00050080,0x00000006,0x000000c6,0x000000c5,0x000000ab, + 0x0003003e,0x000000b1,0x000000c6,0x000200f9,0x000000b2,0x000200f8,0x000000b4,0x000100fd, + 0x000200f8,0x000000b0,0x0004003d,0x00000006,0x000000c9,0x00000097,0x00050080,0x00000006, + 0x000000ca,0x000000c9,0x0000003f,0x0003003e,0x000000c8,0x000000ca,0x0003003e,0x000000cb, + 0x0000003f,0x0003003e,0x000000cc,0x0000001e,0x0003003e,0x000000cd,0x0000001e,0x0003003e, + 0x000000ce,0x0000001e,0x0004003d,0x00000006,0x000000cf,0x00000097,0x000500aa,0x0000001f, + 0x000000d0,0x000000cf,0x0000001e,0x0004003d,0x00000006,0x000000d1,0x00000097,0x000500aa, + 0x0000001f,0x000000d2,0x000000d1,0x0000003f,0x000500a6,0x0000001f,0x000000d3,0x000000d0, + 0x000000d2,0x0004003d,0x00000006,0x000000d4,0x00000097,0x000500aa,0x0000001f,0x000000d5, + 0x000000d4,0x00000087,0x000500a6,0x0000001f,0x000000d6,0x000000d3,0x000000d5,0x0004003d, + 0x00000006,0x000000d7,0x00000097,0x000500aa,0x0000001f,0x000000d8,0x000000d7,0x00000039, + 0x000500a6,0x0000001f,0x000000d9,0x000000d6,0x000000d8,0x0004003d,0x00000006,0x000000da, + 0x00000097,0x000500aa,0x0000001f,0x000000dc,0x000000da,0x000000db,0x000500a6,0x0000001f, + 0x000000dd,0x000000d9,0x000000dc,0x000300f7,0x000000df,0x00000000,0x000400fa,0x000000dd, + 0x000000de,0x000000df,0x000200f8,0x000000de,0x0004003d,0x00000006,0x000000e0,0x00000097, + 0x000500aa,0x0000001f,0x000000e1,0x000000e0,0x0000001e,0x0004003d,0x00000006,0x000000e2, + 0x00000097,0x000500aa,0x0000001f,0x000000e3,0x000000e2,0x00000087,0x000500a6,0x0000001f, + 0x000000e4,0x000000e1,0x000000e3,0x000600a9,0x00000006,0x000000e5,0x000000e4,0x00000039, + 0x00000087,0x0003003e,0x000000cb,0x000000e5,0x0004003d,0x00000006,0x000000e7,0x00000097, + 0x000500aa,0x0000001f,0x000000e8,0x000000e7,0x0000001e,0x000600a9,0x00000006,0x000000ea, + 0x000000e8,0x00000061,0x000000e9,0x0003003e,0x000000e6,0x000000ea,0x0004003d,0x00000007, + 0x000000ec,0x0000001a,0x0003003e,0x000000eb,0x000000ec,0x0004003d,0x00000006,0x000000ee, + 0x000000c8,0x0003003e,0x000000ed,0x000000ee,0x0004003d,0x00000006,0x000000f0,0x000000e6, + 0x0003003e,0x000000ef,0x000000f0,0x00070039,0x00000006,0x000000f1,0x0000000e,0x000000eb, + 0x000000ed,0x000000ef,0x0003003e,0x000000cc,0x000000f1,0x0004003d,0x00000006,0x000000f2, + 0x000000e6,0x0004003d,0x00000006,0x000000f3,0x000000c8,0x00050080,0x00000006,0x000000f4, + 0x000000f3,0x000000f2,0x0003003e,0x000000c8,0x000000f4,0x000200f9,0x000000df,0x000200f8, + 0x000000df,0x0004003d,0x00000006,0x000000f6,0x000000cb,0x00050084,0x00000006,0x000000f7, + 0x000000f6,0x00000087,0x0003003e,0x000000f5,0x000000f7,0x0004003d,0x00000006,0x000000f8, + 0x00000097,0x000500aa,0x0000001f,0x000000f9,0x000000f8,0x00000061,0x0004003d,0x00000006, + 0x000000fa,0x00000097,0x000500aa,0x0000001f,0x000000fc,0x000000fa,0x000000fb,0x000500a6, + 0x0000001f,0x000000fd,0x000000f9,0x000000fc,0x000300f7,0x000000ff,0x00000000,0x000400fa, + 0x000000fd,0x000000fe,0x000000ff,0x000200f8,0x000000fe,0x0004003d,0x00000007,0x00000101, + 0x0000001a,0x0003003e,0x00000100,0x00000101,0x0004003d,0x00000006,0x00000103,0x000000c8, + 0x0003003e,0x00000102,0x00000103,0x0003003e,0x00000104,0x00000087,0x00070039,0x00000006, + 0x00000105,0x0000000e,0x00000100,0x00000102,0x00000104,0x0003003e,0x000000cd,0x00000105, + 0x0004003d,0x00000006,0x00000106,0x000000c8,0x00050080,0x00000006,0x00000107,0x00000106, + 0x00000087,0x0003003e,0x000000c8,0x00000107,0x0004003d,0x00000006,0x00000108,0x00000097, + 0x000500aa,0x0000001f,0x00000109,0x00000108,0x00000061,0x000300f7,0x0000010b,0x00000000, + 0x000400fa,0x00000109,0x0000010a,0x0000010b,0x000200f8,0x0000010a,0x0004003d,0x00000007, + 0x0000010d,0x0000001a,0x0003003e,0x0000010c,0x0000010d,0x0004003d,0x00000006,0x0000010f, + 0x000000c8,0x0003003e,0x0000010e,0x0000010f,0x0003003e,0x00000110,0x0000003f,0x00070039, + 0x00000006,0x00000111,0x0000000e,0x0000010c,0x0000010e,0x00000110,0x0003003e,0x000000ce, + 0x00000111,0x0004003d,0x00000006,0x00000112,0x000000c8,0x00050080,0x00000006,0x00000113, + 0x00000112,0x0000003f,0x0003003e,0x000000c8,0x00000113,0x000200f9,0x0000010b,0x000200f8, + 0x0000010b,0x000200f9,0x000000ff,0x000200f8,0x000000ff,0x0004003d,0x00000006,0x0000011a, + 0x00000097,0x0003003e,0x0000011c,0x00000119,0x00050041,0x00000114,0x0000011d,0x0000011c, + 0x0000011a,0x0004003d,0x00000026,0x0000011e,0x0000011d,0x0003003e,0x00000115,0x0000011e, + 0x0004003d,0x00000006,0x00000122,0x00000097,0x0003003e,0x00000123,0x00000121,0x00050041, + 0x00000114,0x00000124,0x00000123,0x00000122,0x0004003d,0x00000026,0x00000125,0x00000124, + 0x0003003e,0x0000011f,0x00000125,0x0003003e,0x00000126,0x0000001e,0x000200f9,0x00000127, + 0x000200f8,0x00000127,0x000400f6,0x00000129,0x0000012a,0x00000000,0x000200f9,0x0000012b, + 0x000200f8,0x0000012b,0x0004003d,0x00000006,0x0000012c,0x00000126,0x000500b0,0x0000001f, + 0x0000012d,0x0000012c,0x00000039,0x000400fa,0x0000012d,0x00000128,0x00000129,0x000200f8, + 0x00000128,0x0003003e,0x0000012e,0x0000001e,0x000200f9,0x0000012f,0x000200f8,0x0000012f, + 0x000400f6,0x00000131,0x00000132,0x00000000,0x000200f9,0x00000133,0x000200f8,0x00000133, + 0x0004003d,0x00000006,0x00000134,0x0000012e,0x0004003d,0x00000006,0x00000135,0x000000f5, + 0x000500b0,0x0000001f,0x00000136,0x00000134,0x00000135,0x000400fa,0x00000136,0x00000130, + 0x00000131,0x000200f8,0x00000130,0x0004003d,0x00000006,0x0000013b,0x0000012e,0x0004003d, + 0x00000006,0x0000013c,0x00000126,0x0004003d,0x00000026,0x0000013d,0x00000115,0x0004007c, + 0x00000006,0x0000013e,0x0000013d,0x0004003d,0x00000007,0x00000140,0x0000001a,0x0003003e, + 0x0000013f,0x00000140,0x0004003d,0x00000006,0x00000142,0x000000c8,0x0003003e,0x00000141, + 0x00000142,0x0003003e,0x00000143,0x0000013e,0x00070039,0x00000006,0x00000144,0x0000000e, + 0x0000013f,0x00000141,0x00000143,0x00060041,0x00000009,0x00000145,0x0000013a,0x0000013b, + 0x0000013c,0x0003003e,0x00000145,0x00000144,0x0004003d,0x00000026,0x00000146,0x00000115, + 0x0004007c,0x00000006,0x00000147,0x00000146,0x0004003d,0x00000006,0x00000148,0x000000c8, + 0x00050080,0x00000006,0x00000149,0x00000148,0x00000147,0x0003003e,0x000000c8,0x00000149, + 0x000200f9,0x00000132,0x000200f8,0x00000132,0x0004003d,0x00000006,0x0000014a,0x0000012e, + 0x00050080,0x00000006,0x0000014b,0x0000014a,0x000000ab,0x0003003e,0x0000012e,0x0000014b, + 0x000200f9,0x0000012f,0x000200f8,0x00000131,0x000200f9,0x0000012a,0x000200f8,0x0000012a, + 0x0004003d,0x00000006,0x0000014c,0x00000126,0x00050080,0x00000006,0x0000014d,0x0000014c, + 0x000000ab,0x0003003e,0x00000126,0x0000014d,0x000200f9,0x00000127,0x000200f8,0x00000129, + 0x0003003e,0x0000014e,0x0000001e,0x000200f9,0x0000014f,0x000200f8,0x0000014f,0x000400f6, + 0x00000151,0x00000152,0x00000000,0x000200f9,0x00000153,0x000200f8,0x00000153,0x0004003d, + 0x00000006,0x00000154,0x0000014e,0x0004003d,0x00000006,0x00000155,0x000000f5,0x000500b0, + 0x0000001f,0x00000156,0x00000154,0x00000155,0x000400fa,0x00000156,0x00000150,0x00000151, + 0x000200f8,0x00000150,0x0004003d,0x00000026,0x00000157,0x0000011f,0x000500ad,0x0000001f, + 0x00000158,0x00000157,0x00000120,0x000300f7,0x0000015a,0x00000000,0x000400fa,0x00000158, + 0x00000159,0x00000169,0x000200f8,0x00000159,0x0004003d,0x00000006,0x0000015b,0x0000014e, + 0x0004003d,0x00000026,0x0000015c,0x0000011f,0x0004007c,0x00000006,0x0000015d,0x0000015c, + 0x0004003d,0x00000007,0x0000015f,0x0000001a,0x0003003e,0x0000015e,0x0000015f,0x0004003d, + 0x00000006,0x00000161,0x000000c8,0x0003003e,0x00000160,0x00000161,0x0003003e,0x00000162, + 0x0000015d,0x00070039,0x00000006,0x00000163,0x0000000e,0x0000015e,0x00000160,0x00000162, + 0x00060041,0x00000009,0x00000164,0x0000013a,0x0000015b,0x0000008b,0x0003003e,0x00000164, + 0x00000163,0x0004003d,0x00000026,0x00000165,0x0000011f,0x0004007c,0x00000006,0x00000166, + 0x00000165,0x0004003d,0x00000006,0x00000167,0x000000c8,0x00050080,0x00000006,0x00000168, + 0x00000167,0x00000166,0x0003003e,0x000000c8,0x00000168,0x000200f9,0x0000015a,0x000200f8, + 0x00000169,0x0004003d,0x00000006,0x0000016a,0x0000014e,0x00060041,0x00000009,0x0000016b, + 0x0000013a,0x0000016a,0x0000008b,0x0003003e,0x0000016b,0x0000001e,0x000200f9,0x0000015a, + 0x000200f8,0x0000015a,0x000200f9,0x00000152,0x000200f8,0x00000152,0x0004003d,0x00000006, + 0x0000016c,0x0000014e,0x00050080,0x00000006,0x0000016d,0x0000016c,0x000000ab,0x0003003e, + 0x0000014e,0x0000016d,0x000200f9,0x0000014f,0x000200f8,0x00000151,0x0004003d,0x00000006, + 0x00000171,0x00000097,0x000500c2,0x00000006,0x00000172,0x00000170,0x00000171,0x000500c7, + 0x00000006,0x00000173,0x00000172,0x0000003f,0x000500ab,0x0000001f,0x00000174,0x00000173, + 0x0000001e,0x0004003d,0x00000006,0x00000175,0x00000097,0x000500aa,0x0000001f,0x00000176, + 0x00000175,0x0000003f,0x000500a6,0x0000001f,0x00000177,0x00000174,0x00000176,0x0003003e, + 0x0000016f,0x00000177,0x0004003d,0x00000006,0x00000178,0x00000097,0x000500aa,0x0000001f, + 0x00000179,0x00000178,0x0000001e,0x0004003d,0x00000006,0x0000017a,0x00000097,0x000500aa, + 0x0000001f,0x0000017b,0x0000017a,0x0000003f,0x000500a6,0x0000001f,0x0000017c,0x00000179, + 0x0000017b,0x0004003d,0x00000006,0x0000017d,0x00000097,0x000500aa,0x0000001f,0x0000017e, + 0x0000017d,0x00000039,0x000500a6,0x0000001f,0x0000017f,0x0000017c,0x0000017e,0x0004003d, + 0x00000006,0x00000180,0x00000097,0x000500aa,0x0000001f,0x00000181,0x00000180,0x000000e9, + 0x000500a6,0x0000001f,0x00000182,0x0000017f,0x00000181,0x0004003d,0x00000006,0x00000183, + 0x00000097,0x000500aa,0x0000001f,0x00000184,0x00000183,0x000000db,0x000500a6,0x0000001f, + 0x00000185,0x00000182,0x00000184,0x000300f7,0x00000187,0x00000000,0x000400fa,0x00000185, + 0x00000186,0x00000187,0x000200f8,0x00000186,0x0003003e,0x00000188,0x0000001e,0x000200f9, + 0x00000189,0x000200f8,0x00000189,0x000400f6,0x0000018b,0x0000018c,0x00000000,0x000200f9, + 0x0000018d,0x000200f8,0x0000018d,0x0004003d,0x00000006,0x0000018e,0x00000188,0x0004003d, + 0x00000006,0x0000018f,0x000000f5,0x000500b0,0x0000001f,0x00000190,0x0000018e,0x0000018f, + 0x000400fa,0x00000190,0x0000018a,0x0000018b,0x000200f8,0x0000018a,0x0003003e,0x00000191, + 0x0000001e,0x000200f9,0x00000192,0x000200f8,0x00000192,0x000400f6,0x00000194,0x00000195, + 0x00000000,0x000200f9,0x00000196,0x000200f8,0x00000196,0x0004003d,0x00000006,0x00000197, + 0x00000191,0x000500b0,0x0000001f,0x00000198,0x00000197,0x00000061,0x000400fa,0x00000198, + 0x00000193,0x00000194,0x000200f8,0x00000193,0x0004003d,0x00000006,0x00000199,0x00000188, + 0x0004003d,0x00000006,0x0000019a,0x00000191,0x00060041,0x00000009,0x0000019b,0x0000013a, + 0x00000199,0x0000019a,0x0004003d,0x00000006,0x0000019c,0x0000019b,0x000500c4,0x00000006, + 0x0000019d,0x0000019c,0x000000ab,0x00060041,0x00000009,0x0000019e,0x0000013a,0x00000199, + 0x0000019a,0x0003003e,0x0000019e,0x0000019d,0x000200f9,0x00000195,0x000200f8,0x00000195, + 0x0004003d,0x00000006,0x0000019f,0x00000191,0x00050080,0x00000006,0x000001a0,0x0000019f, + 0x000000ab,0x0003003e,0x00000191,0x000001a0,0x000200f9,0x00000192,0x000200f8,0x00000194, + 0x000200f9,0x0000018c,0x000200f8,0x0000018c,0x0004003d,0x00000006,0x000001a1,0x00000188, + 0x00050080,0x00000006,0x000001a2,0x000001a1,0x000000ab,0x0003003e,0x00000188,0x000001a2, + 0x000200f9,0x00000189,0x000200f8,0x0000018b,0x0004003d,0x00000006,0x000001a3,0x00000097, + 0x000500aa,0x0000001f,0x000001a4,0x000001a3,0x0000003f,0x000300f7,0x000001a6,0x00000000, + 0x000400fa,0x000001a4,0x000001a5,0x000001da,0x000200f8,0x000001a5,0x0004003d,0x00000007, + 0x000001a9,0x0000001a,0x0003003e,0x000001a8,0x000001a9,0x0004003d,0x00000006,0x000001ab, + 0x000000c8,0x0003003e,0x000001aa,0x000001ab,0x0003003e,0x000001ac,0x0000003f,0x00070039, + 0x00000006,0x000001ad,0x0000000e,0x000001a8,0x000001aa,0x000001ac,0x0003003e,0x000001a7, + 0x000001ad,0x0004003d,0x00000006,0x000001af,0x000000c8,0x00050080,0x00000006,0x000001b0, + 0x000001af,0x0000003f,0x0004003d,0x00000007,0x000001b2,0x0000001a,0x0003003e,0x000001b1, + 0x000001b2,0x0003003e,0x000001b3,0x000001b0,0x0003003e,0x000001b4,0x0000003f,0x00070039, + 0x00000006,0x000001b5,0x0000000e,0x000001b1,0x000001b3,0x000001b4,0x0003003e,0x000001ae, + 0x000001b5,0x0004003d,0x00000006,0x000001b6,0x000000c8,0x00050080,0x00000006,0x000001b7, + 0x000001b6,0x00000087,0x0003003e,0x000000c8,0x000001b7,0x0003003e,0x000001b8,0x0000001e, + 0x000200f9,0x000001b9,0x000200f8,0x000001b9,0x000400f6,0x000001bb,0x000001bc,0x00000000, + 0x000200f9,0x000001bd,0x000200f8,0x000001bd,0x0004003d,0x00000006,0x000001be,0x000001b8, + 0x000500b0,0x0000001f,0x000001bf,0x000001be,0x00000039,0x000400fa,0x000001bf,0x000001ba, + 0x000001bb,0x000200f8,0x000001ba,0x0004003d,0x00000006,0x000001c0,0x000001b8,0x0004003d, + 0x00000006,0x000001c1,0x000001a7,0x00060041,0x00000009,0x000001c2,0x0000013a,0x00000120, + 0x000001c0,0x0004003d,0x00000006,0x000001c3,0x000001c2,0x000500c5,0x00000006,0x000001c4, + 0x000001c3,0x000001c1,0x00060041,0x00000009,0x000001c5,0x0000013a,0x00000120,0x000001c0, + 0x0003003e,0x000001c5,0x000001c4,0x0004003d,0x00000006,0x000001c6,0x000001b8,0x0004003d, + 0x00000006,0x000001c7,0x000001a7,0x00060041,0x00000009,0x000001c8,0x0000013a,0x000000ab, + 0x000001c6,0x0004003d,0x00000006,0x000001c9,0x000001c8,0x000500c5,0x00000006,0x000001ca, + 0x000001c9,0x000001c7,0x00060041,0x00000009,0x000001cb,0x0000013a,0x000000ab,0x000001c6, + 0x0003003e,0x000001cb,0x000001ca,0x0004003d,0x00000006,0x000001cc,0x000001b8,0x0004003d, + 0x00000006,0x000001cd,0x000001ae,0x00060041,0x00000009,0x000001ce,0x0000013a,0x000000bd, + 0x000001cc,0x0004003d,0x00000006,0x000001cf,0x000001ce,0x000500c5,0x00000006,0x000001d0, + 0x000001cf,0x000001cd,0x00060041,0x00000009,0x000001d1,0x0000013a,0x000000bd,0x000001cc, + 0x0003003e,0x000001d1,0x000001d0,0x0004003d,0x00000006,0x000001d2,0x000001b8,0x0004003d, + 0x00000006,0x000001d3,0x000001ae,0x00060041,0x00000009,0x000001d4,0x0000013a,0x0000008b, + 0x000001d2,0x0004003d,0x00000006,0x000001d5,0x000001d4,0x000500c5,0x00000006,0x000001d6, + 0x000001d5,0x000001d3,0x00060041,0x00000009,0x000001d7,0x0000013a,0x0000008b,0x000001d2, + 0x0003003e,0x000001d7,0x000001d6,0x000200f9,0x000001bc,0x000200f8,0x000001bc,0x0004003d, + 0x00000006,0x000001d8,0x000001b8,0x00050080,0x00000006,0x000001d9,0x000001d8,0x000000ab, + 0x0003003e,0x000001b8,0x000001d9,0x000200f9,0x000001b9,0x000200f8,0x000001bb,0x000200f9, + 0x000001a6,0x000200f8,0x000001da,0x0003003e,0x000001db,0x0000001e,0x000200f9,0x000001dc, + 0x000200f8,0x000001dc,0x000400f6,0x000001de,0x000001df,0x00000000,0x000200f9,0x000001e0, + 0x000200f8,0x000001e0,0x0004003d,0x00000006,0x000001e1,0x000001db,0x0004003d,0x00000006, + 0x000001e2,0x000000f5,0x000500b0,0x0000001f,0x000001e3,0x000001e1,0x000001e2,0x000400fa, + 0x000001e3,0x000001dd,0x000001de,0x000200f8,0x000001dd,0x0004003d,0x00000007,0x000001e6, + 0x0000001a,0x0003003e,0x000001e5,0x000001e6,0x0004003d,0x00000006,0x000001e8,0x000000c8, + 0x0003003e,0x000001e7,0x000001e8,0x0003003e,0x000001e9,0x0000003f,0x00070039,0x00000006, + 0x000001ea,0x0000000e,0x000001e5,0x000001e7,0x000001e9,0x0003003e,0x000001e4,0x000001ea, + 0x0004003d,0x00000006,0x000001eb,0x000000c8,0x00050080,0x00000006,0x000001ec,0x000001eb, + 0x0000003f,0x0003003e,0x000000c8,0x000001ec,0x0003003e,0x000001ed,0x0000001e,0x000200f9, + 0x000001ee,0x000200f8,0x000001ee,0x000400f6,0x000001f0,0x000001f1,0x00000000,0x000200f9, + 0x000001f2,0x000200f8,0x000001f2,0x0004003d,0x00000006,0x000001f3,0x000001ed,0x000500b0, + 0x0000001f,0x000001f4,0x000001f3,0x00000061,0x000400fa,0x000001f4,0x000001ef,0x000001f0, + 0x000200f8,0x000001ef,0x0004003d,0x00000006,0x000001f5,0x000001db,0x0004003d,0x00000006, + 0x000001f6,0x000001ed,0x0004003d,0x00000006,0x000001f7,0x000001e4,0x00060041,0x00000009, + 0x000001f8,0x0000013a,0x000001f5,0x000001f6,0x0004003d,0x00000006,0x000001f9,0x000001f8, + 0x000500c5,0x00000006,0x000001fa,0x000001f9,0x000001f7,0x00060041,0x00000009,0x000001fb, + 0x0000013a,0x000001f5,0x000001f6,0x0003003e,0x000001fb,0x000001fa,0x000200f9,0x000001f1, + 0x000200f8,0x000001f1,0x0004003d,0x00000006,0x000001fc,0x000001ed,0x00050080,0x00000006, + 0x000001fd,0x000001fc,0x000000ab,0x0003003e,0x000001ed,0x000001fd,0x000200f9,0x000001ee, + 0x000200f8,0x000001f0,0x000200f9,0x000001df,0x000200f8,0x000001df,0x0004003d,0x00000006, + 0x000001fe,0x000001db,0x00050080,0x00000006,0x000001ff,0x000001fe,0x000000ab,0x0003003e, + 0x000001db,0x000001ff,0x000200f9,0x000001dc,0x000200f8,0x000001de,0x000200f9,0x000001a6, + 0x000200f8,0x000001a6,0x000200f9,0x00000187,0x000200f8,0x00000187,0x0003003e,0x00000200, + 0x0000001e,0x000200f9,0x00000201,0x000200f8,0x00000201,0x000400f6,0x00000203,0x00000204, + 0x00000000,0x000200f9,0x00000205,0x000200f8,0x00000205,0x0004003d,0x00000006,0x00000206, + 0x00000200,0x0004003d,0x00000006,0x00000207,0x000000f5,0x000500b0,0x0000001f,0x00000208, + 0x00000206,0x00000207,0x000400fa,0x00000208,0x00000202,0x00000203,0x000200f8,0x00000202, + 0x0004003d,0x00000026,0x0000020a,0x00000115,0x0004007c,0x00000006,0x0000020b,0x0000020a, + 0x0004003d,0x00000006,0x0000020c,0x00000097,0x000500c2,0x00000006,0x0000020d,0x00000170, + 0x0000020c,0x000500c7,0x00000006,0x0000020e,0x0000020d,0x0000003f,0x00050080,0x00000006, + 0x0000020f,0x0000020b,0x0000020e,0x0003003e,0x00000209,0x0000020f,0x0003003e,0x00000210, + 0x0000001e,0x000200f9,0x00000211,0x000200f8,0x00000211,0x000400f6,0x00000213,0x00000214, + 0x00000000,0x000200f9,0x00000215,0x000200f8,0x00000215,0x0004003d,0x00000006,0x00000216, + 0x00000210,0x000500b0,0x0000001f,0x00000217,0x00000216,0x00000039,0x000400fa,0x00000217, + 0x00000212,0x00000213,0x000200f8,0x00000212,0x0004003d,0x00000006,0x00000218,0x00000200, + 0x0004003d,0x00000006,0x00000219,0x00000210,0x0004003d,0x00000006,0x0000021a,0x00000200, + 0x0004003d,0x00000006,0x0000021b,0x00000210,0x00060041,0x00000009,0x0000021c,0x0000013a, + 0x0000021a,0x0000021b,0x0004003d,0x00000006,0x0000021d,0x0000021c,0x0004003d,0x00000006, + 0x0000021e,0x00000209,0x00050082,0x00000006,0x0000021f,0x0000009e,0x0000021e,0x000500c4, + 0x00000006,0x00000220,0x0000021d,0x0000021f,0x00060041,0x00000009,0x00000221,0x0000013a, + 0x00000218,0x00000219,0x0003003e,0x00000221,0x00000220,0x0004003d,0x00000006,0x00000222, + 0x00000200,0x0004003d,0x00000006,0x00000223,0x00000210,0x0004003d,0x00000006,0x00000224, + 0x00000200,0x0004003d,0x00000006,0x00000225,0x00000210,0x00060041,0x00000009,0x00000226, + 0x0000013a,0x00000224,0x00000225,0x0004003d,0x00000006,0x00000227,0x00000226,0x0004003d, + 0x00000006,0x00000228,0x00000200,0x0004003d,0x00000006,0x00000229,0x00000210,0x00060041, + 0x00000009,0x0000022a,0x0000013a,0x00000228,0x00000229,0x0004003d,0x00000006,0x0000022b, + 0x0000022a,0x0004003d,0x00000006,0x0000022c,0x00000209,0x000500c2,0x00000006,0x0000022d, + 0x0000022b,0x0000022c,0x000500c5,0x00000006,0x0000022e,0x00000227,0x0000022d,0x000500c7, + 0x00000006,0x00000230,0x0000022e,0x0000022f,0x00060041,0x00000009,0x00000231,0x0000013a, + 0x00000222,0x00000223,0x0003003e,0x00000231,0x00000230,0x000200f9,0x00000214,0x000200f8, + 0x00000214,0x0004003d,0x00000006,0x00000232,0x00000210,0x00050080,0x00000006,0x00000233, + 0x00000232,0x000000ab,0x0003003e,0x00000210,0x00000233,0x000200f9,0x00000211,0x000200f8, + 0x00000213,0x0004003d,0x00000026,0x00000234,0x0000011f,0x0004007c,0x00000006,0x00000235, + 0x00000234,0x0004003d,0x00000006,0x00000236,0x00000097,0x000500c2,0x00000006,0x00000237, + 0x00000170,0x00000236,0x000500c7,0x00000006,0x00000238,0x00000237,0x0000003f,0x00050080, + 0x00000006,0x00000239,0x00000235,0x00000238,0x0003003e,0x00000209,0x00000239,0x0004003d, + 0x00000006,0x0000023a,0x00000200,0x0004003d,0x00000006,0x0000023b,0x00000200,0x00060041, + 0x00000009,0x0000023c,0x0000013a,0x0000023b,0x0000008b,0x0004003d,0x00000006,0x0000023d, + 0x0000023c,0x0004003d,0x00000006,0x0000023e,0x00000209,0x00050082,0x00000006,0x0000023f, + 0x0000009e,0x0000023e,0x000500c4,0x00000006,0x00000240,0x0000023d,0x0000023f,0x00060041, + 0x00000009,0x00000241,0x0000013a,0x0000023a,0x0000008b,0x0003003e,0x00000241,0x00000240, + 0x0004003d,0x00000006,0x00000242,0x00000200,0x0004003d,0x00000006,0x00000243,0x00000200, + 0x00060041,0x00000009,0x00000244,0x0000013a,0x00000243,0x0000008b,0x0004003d,0x00000006, + 0x00000245,0x00000244,0x0004003d,0x00000006,0x00000246,0x00000200,0x00060041,0x00000009, + 0x00000247,0x0000013a,0x00000246,0x0000008b,0x0004003d,0x00000006,0x00000248,0x00000247, + 0x0004003d,0x00000006,0x00000249,0x00000209,0x000500c2,0x00000006,0x0000024a,0x00000248, + 0x00000249,0x000500c5,0x00000006,0x0000024b,0x00000245,0x0000024a,0x000500c7,0x00000006, + 0x0000024c,0x0000024b,0x0000022f,0x00060041,0x00000009,0x0000024d,0x0000013a,0x00000242, + 0x0000008b,0x0003003e,0x0000024d,0x0000024c,0x0004003d,0x00000026,0x0000024e,0x0000011f, + 0x000500aa,0x0000001f,0x0000024f,0x0000024e,0x00000120,0x000300f7,0x00000251,0x00000000, + 0x000400fa,0x0000024f,0x00000250,0x00000251,0x000200f8,0x00000250,0x0004003d,0x00000006, + 0x00000252,0x00000200,0x00060041,0x00000009,0x00000253,0x0000013a,0x00000252,0x0000008b, + 0x0003003e,0x00000253,0x0000022f,0x000200f9,0x00000251,0x000200f8,0x00000251,0x000200f9, + 0x00000204,0x000200f8,0x00000204,0x0004003d,0x00000006,0x00000254,0x00000200,0x00050080, + 0x00000006,0x00000255,0x00000254,0x000000ab,0x0003003e,0x00000200,0x00000255,0x000200f9, + 0x00000201,0x000200f8,0x00000203,0x0004003d,0x00000006,0x00000257,0x00000097,0x000500aa, + 0x0000001f,0x00000258,0x00000257,0x0000001e,0x0004003d,0x00000006,0x00000259,0x00000097, + 0x000500aa,0x0000001f,0x0000025a,0x00000259,0x0000003f,0x000500a6,0x0000001f,0x0000025b, + 0x00000258,0x0000025a,0x000300f7,0x0000025e,0x00000000,0x000400fa,0x0000025b,0x0000025d, + 0x0000025f,0x000200f8,0x0000025d,0x0003003e,0x0000025c,0x00000039,0x000200f9,0x0000025e, + 0x000200f8,0x0000025f,0x0004003d,0x00000006,0x00000260,0x00000097,0x000500aa,0x0000001f, + 0x00000261,0x00000260,0x000000e9,0x000600a9,0x00000006,0x00000262,0x00000261,0x00000061, + 0x00000087,0x0003003e,0x0000025c,0x00000262,0x000200f9,0x0000025e,0x000200f8,0x0000025e, + 0x0004003d,0x00000006,0x00000263,0x0000025c,0x0003003e,0x00000256,0x00000263,0x0004003d, + 0x00000006,0x00000265,0x00000097,0x000500aa,0x0000001f,0x00000266,0x00000265,0x00000061, + 0x000300f7,0x00000269,0x00000000,0x000400fa,0x00000266,0x00000268,0x0000026a,0x000200f8, + 0x00000268,0x0003003e,0x00000267,0x00000039,0x000200f9,0x00000269,0x000200f8,0x0000026a, + 0x0004003d,0x00000006,0x0000026b,0x00000097,0x000500aa,0x0000001f,0x0000026c,0x0000026b, + 0x000000fb,0x000600a9,0x00000006,0x0000026d,0x0000026c,0x00000087,0x0000001e,0x0003003e, + 0x00000267,0x0000026d,0x000200f9,0x00000269,0x000200f8,0x00000269,0x0004003d,0x00000006, + 0x0000026e,0x00000267,0x0003003e,0x00000264,0x0000026e,0x0004003d,0x00000006,0x00000270, + 0x000000cb,0x000500aa,0x0000001f,0x00000271,0x00000270,0x00000087,0x000300f7,0x00000274, + 0x00000000,0x000400fa,0x00000271,0x00000273,0x000002bd,0x000200f8,0x00000273,0x0004003d, + 0x00000006,0x000002b8,0x000000cc,0x0003003e,0x000002ba,0x000002b7,0x00050041,0x00000009, + 0x000002bb,0x000002ba,0x000002b8,0x0004003d,0x00000006,0x000002bc,0x000002bb,0x0003003e, + 0x00000272,0x000002bc,0x000200f9,0x00000274,0x000200f8,0x000002bd,0x0004003d,0x00000006, + 0x000002be,0x000000cb,0x000500aa,0x0000001f,0x000002bf,0x000002be,0x00000039,0x000300f7, + 0x000002c2,0x00000000,0x000400fa,0x000002bf,0x000002c1,0x00000308,0x000200f8,0x000002c1, + 0x0004003d,0x00000006,0x00000304,0x000000cc,0x0003003e,0x00000305,0x00000303,0x00050041, + 0x00000009,0x00000306,0x00000305,0x00000304,0x0004003d,0x00000006,0x00000307,0x00000306, + 0x0003003e,0x000002c0,0x00000307,0x000200f9,0x000002c2,0x000200f8,0x00000308,0x0003003e, + 0x000002c0,0x0000001e,0x000200f9,0x000002c2,0x000200f8,0x000002c2,0x0004003d,0x00000006, + 0x00000309,0x000002c0,0x0003003e,0x00000272,0x00000309,0x000200f9,0x00000274,0x000200f8, + 0x00000274,0x0004003d,0x00000006,0x0000030a,0x00000272,0x0003003e,0x0000026f,0x0000030a, + 0x0004003d,0x00000006,0x0000030c,0x000000cb,0x000500aa,0x0000001f,0x0000030d,0x0000030c, + 0x00000087,0x000300f7,0x00000310,0x00000000,0x000400fa,0x0000030d,0x0000030f,0x00000317, + 0x000200f8,0x0000030f,0x0004003d,0x00000006,0x00000313,0x000000cc,0x0003003e,0x00000314, + 0x00000312,0x00050041,0x00000009,0x00000315,0x00000314,0x00000313,0x0004003d,0x00000006, + 0x00000316,0x00000315,0x0003003e,0x0000030e,0x00000316,0x000200f9,0x00000310,0x000200f8, + 0x00000317,0x0004003d,0x00000006,0x00000318,0x000000cb,0x000500aa,0x0000001f,0x00000319, + 0x00000318,0x00000039,0x000300f7,0x0000031c,0x00000000,0x000400fa,0x00000319,0x0000031b, + 0x00000334,0x000200f8,0x0000031b,0x0004003d,0x00000006,0x00000330,0x000000cc,0x0003003e, + 0x00000331,0x0000032f,0x00050041,0x00000009,0x00000332,0x00000331,0x00000330,0x0004003d, + 0x00000006,0x00000333,0x00000332,0x0003003e,0x0000031a,0x00000333,0x000200f9,0x0000031c, + 0x000200f8,0x00000334,0x0003003e,0x0000031a,0x0000001e,0x000200f9,0x0000031c,0x000200f8, + 0x0000031c,0x0004003d,0x00000006,0x00000335,0x0000031a,0x0003003e,0x0000030e,0x00000335, + 0x000200f9,0x00000310,0x000200f8,0x00000310,0x0004003d,0x00000006,0x00000336,0x0000030e, + 0x0003003e,0x0000030b,0x00000336,0x0003003e,0x00000337,0x0000001e,0x000200f9,0x00000338, + 0x000200f8,0x00000338,0x000400f6,0x0000033a,0x0000033b,0x00000000,0x000200f9,0x0000033c, + 0x000200f8,0x0000033c,0x0004003d,0x00000006,0x0000033d,0x00000337,0x000500b0,0x0000001f, + 0x0000033e,0x0000033d,0x000000b8,0x000400fa,0x0000033e,0x00000339,0x0000033a,0x000200f8, + 0x00000339,0x0004003d,0x00000006,0x00000340,0x0000026f,0x0004003d,0x00000006,0x00000341, + 0x00000337,0x00050084,0x00000006,0x00000342,0x00000087,0x00000341,0x000500c2,0x00000006, + 0x00000343,0x00000340,0x00000342,0x000500c7,0x00000006,0x00000344,0x00000343,0x00000039, + 0x0003003e,0x0000033f,0x00000344,0x0004003d,0x00000006,0x00000346,0x00000256,0x0003003e, + 0x00000345,0x00000346,0x0004003d,0x00000006,0x00000348,0x00000337,0x000500aa,0x0000001f, + 0x00000349,0x00000348,0x0000001e,0x000400a8,0x0000001f,0x0000034a,0x00000349,0x000300f7, + 0x0000034c,0x00000000,0x000400fa,0x0000034a,0x0000034b,0x0000034c,0x000200f8,0x0000034b, + 0x0004003d,0x00000006,0x0000034d,0x0000033f,0x000500aa,0x0000001f,0x0000034e,0x0000034d, + 0x0000003f,0x000300f7,0x00000350,0x00000000,0x000400fa,0x0000034e,0x0000034f,0x00000350, + 0x000200f8,0x0000034f,0x0004003d,0x00000006,0x00000351,0x00000337,0x0004003d,0x00000006, + 0x00000352,0x0000030b,0x000500c7,0x00000006,0x00000353,0x00000352,0x00000311,0x000500aa, + 0x0000001f,0x00000354,0x00000351,0x00000353,0x000200f9,0x00000350,0x000200f8,0x00000350, + 0x000700f5,0x0000001f,0x00000355,0x0000034e,0x0000034b,0x00000354,0x0000034f,0x000200f9, + 0x0000034c,0x000200f8,0x0000034c,0x000700f5,0x0000001f,0x00000356,0x00000349,0x00000339, + 0x00000355,0x00000350,0x000400a8,0x0000001f,0x00000357,0x00000356,0x000300f7,0x00000359, + 0x00000000,0x000400fa,0x00000357,0x00000358,0x00000359,0x000200f8,0x00000358,0x0004003d, + 0x00000006,0x0000035a,0x0000033f,0x000500aa,0x0000001f,0x0000035b,0x0000035a,0x00000087, + 0x000300f7,0x0000035d,0x00000000,0x000400fa,0x0000035b,0x0000035c,0x0000035d,0x000200f8, + 0x0000035c,0x0004003d,0x00000006,0x0000035e,0x00000337,0x0004003d,0x00000006,0x0000035f, + 0x0000030b,0x000500c2,0x00000006,0x00000360,0x0000035f,0x00000080,0x000500aa,0x0000001f, + 0x00000361,0x0000035e,0x00000360,0x000200f9,0x0000035d,0x000200f8,0x0000035d,0x000700f5, + 0x0000001f,0x00000362,0x0000035b,0x00000358,0x00000361,0x0000035c,0x000200f9,0x00000359, + 0x000200f8,0x00000359,0x000700f5,0x0000001f,0x00000363,0x00000356,0x0000034c,0x00000362, + 0x0000035d,0x0003003e,0x00000347,0x00000363,0x0004003d,0x0000001f,0x00000364,0x00000347, + 0x000300f7,0x00000366,0x00000000,0x000400fa,0x00000364,0x00000365,0x00000366,0x000200f8, + 0x00000365,0x0004003d,0x00000006,0x00000367,0x00000345,0x00050082,0x00000006,0x00000368, + 0x00000367,0x000000ab,0x0003003e,0x00000345,0x00000368,0x000200f9,0x00000366,0x000200f8, + 0x00000366,0x0004003d,0x00000006,0x0000036c,0x00000337,0x0004003d,0x00000007,0x0000036e, + 0x0000001a,0x0003003e,0x0000036d,0x0000036e,0x0004003d,0x00000006,0x00000370,0x000000c8, + 0x0003003e,0x0000036f,0x00000370,0x0004003d,0x00000006,0x00000372,0x00000345,0x0003003e, + 0x00000371,0x00000372,0x00070039,0x00000006,0x00000373,0x0000000e,0x0000036d,0x0000036f, + 0x00000371,0x00050041,0x00000009,0x00000374,0x0000036b,0x0000036c,0x0003003e,0x00000374, + 0x00000373,0x0004003d,0x00000006,0x00000375,0x00000345,0x0004003d,0x00000006,0x00000376, + 0x000000c8,0x00050080,0x00000006,0x00000377,0x00000376,0x00000375,0x0003003e,0x000000c8, + 0x00000377,0x000200f9,0x0000033b,0x000200f8,0x0000033b,0x0004003d,0x00000006,0x00000378, + 0x00000337,0x00050080,0x00000006,0x00000379,0x00000378,0x000000ab,0x0003003e,0x00000337, + 0x00000379,0x000200f9,0x00000338,0x000200f8,0x0000033a,0x0003003e,0x0000037a,0x0000001e, + 0x000200f9,0x0000037b,0x000200f8,0x0000037b,0x000400f6,0x0000037d,0x0000037e,0x00000000, + 0x000200f9,0x0000037f,0x000200f8,0x0000037f,0x0004003d,0x00000006,0x00000380,0x0000037a, + 0x000500b0,0x0000001f,0x00000381,0x00000380,0x000000b8,0x000400fa,0x00000381,0x0000037c, + 0x0000037d,0x000200f8,0x0000037c,0x0004003d,0x00000006,0x00000383,0x0000026f,0x0004003d, + 0x00000006,0x00000384,0x0000037a,0x00050084,0x00000006,0x00000385,0x00000087,0x00000384, + 0x000500c2,0x00000006,0x00000386,0x00000383,0x00000385,0x000500c7,0x00000006,0x00000387, + 0x00000386,0x00000039,0x0003003e,0x00000382,0x00000387,0x0004003d,0x00000006,0x00000389, + 0x00000382,0x00050084,0x00000006,0x0000038a,0x00000389,0x00000087,0x0003003e,0x00000388, + 0x0000038a,0x0004003d,0x00000006,0x0000038c,0x00000388,0x00050080,0x00000006,0x0000038d, + 0x0000038c,0x0000003f,0x0003003e,0x0000038b,0x0000038d,0x0004003d,0x00000006,0x0000038f, + 0x0000037a,0x00050041,0x00000009,0x00000390,0x0000036b,0x0000038f,0x0004003d,0x00000006, + 0x00000391,0x00000390,0x0003003e,0x0000038e,0x00000391,0x0004003d,0x00000006,0x00000392, + 0x00000264,0x000500aa,0x0000001f,0x00000393,0x00000392,0x0000001e,0x000300f7,0x00000395, + 0x00000000,0x000400fa,0x00000393,0x00000394,0x000003e5,0x000200f8,0x00000394,0x0004003d, + 0x00000006,0x00000397,0x00000256,0x000500aa,0x0000001f,0x00000398,0x00000397,0x00000087, + 0x000300f7,0x0000039b,0x00000000,0x000400fa,0x00000398,0x0000039a,0x000003a4,0x000200f8, + 0x0000039a,0x0004003d,0x00000006,0x0000039f,0x0000038e,0x0003003e,0x000003a1,0x0000039e, + 0x00050041,0x00000009,0x000003a2,0x000003a1,0x0000039f,0x0004003d,0x00000006,0x000003a3, + 0x000003a2,0x0003003e,0x00000399,0x000003a3,0x000200f9,0x0000039b,0x000200f8,0x000003a4, + 0x0004003d,0x00000006,0x000003a5,0x00000256,0x000500aa,0x0000001f,0x000003a6,0x000003a5, + 0x00000039,0x000300f7,0x000003a9,0x00000000,0x000400fa,0x000003a6,0x000003a8,0x000003b7, + 0x000200f8,0x000003a8,0x0004003d,0x00000006,0x000003b2,0x0000038e,0x0003003e,0x000003b4, + 0x000003b1,0x00050041,0x00000009,0x000003b5,0x000003b4,0x000003b2,0x0004003d,0x00000006, + 0x000003b6,0x000003b5,0x0003003e,0x000003a7,0x000003b6,0x000200f9,0x000003a9,0x000200f8, + 0x000003b7,0x0004003d,0x00000006,0x000003c2,0x0000038e,0x0003003e,0x000003c3,0x000003c1, + 0x00050041,0x00000009,0x000003c4,0x000003c3,0x000003c2,0x0004003d,0x00000006,0x000003c5, + 0x000003c4,0x0003003e,0x000003a7,0x000003c5,0x000200f9,0x000003a9,0x000200f8,0x000003a9, + 0x0004003d,0x00000006,0x000003c6,0x000003a7,0x0003003e,0x00000399,0x000003c6,0x000200f9, + 0x0000039b,0x000200f8,0x0000039b,0x0004003d,0x00000006,0x000003c7,0x00000399,0x0003003e, + 0x00000396,0x000003c7,0x0003003e,0x000003c8,0x0000001e,0x000200f9,0x000003c9,0x000200f8, + 0x000003c9,0x000400f6,0x000003cb,0x000003cc,0x00000000,0x000200f9,0x000003cd,0x000200f8, + 0x000003cd,0x0004003d,0x00000006,0x000003ce,0x000003c8,0x000500b0,0x0000001f,0x000003cf, + 0x000003ce,0x00000061,0x000400fa,0x000003cf,0x000003ca,0x000003cb,0x000200f8,0x000003ca, + 0x0004003d,0x00000006,0x000003d1,0x000003c8,0x0004003d,0x00000006,0x000003d2,0x00000388, + 0x0004003d,0x00000006,0x000003d3,0x000003c8,0x00060041,0x00000009,0x000003d4,0x0000013a, + 0x000003d2,0x000003d3,0x0004003d,0x00000006,0x000003d5,0x000003d4,0x0004003d,0x00000006, + 0x000003d6,0x00000396,0x00050082,0x00000006,0x000003d7,0x00000275,0x000003d6,0x00050084, + 0x00000006,0x000003d8,0x000003d5,0x000003d7,0x0004003d,0x00000006,0x000003d9,0x0000038b, + 0x0004003d,0x00000006,0x000003da,0x000003c8,0x00060041,0x00000009,0x000003db,0x0000013a, + 0x000003d9,0x000003da,0x0004003d,0x00000006,0x000003dc,0x000003db,0x0004003d,0x00000006, + 0x000003dd,0x00000396,0x00050084,0x00000006,0x000003de,0x000003dc,0x000003dd,0x00050080, + 0x00000006,0x000003df,0x000003d8,0x000003de,0x00050080,0x00000006,0x000003e0,0x000003df, + 0x00000036,0x000500c2,0x00000006,0x000003e1,0x000003e0,0x00000117,0x00050041,0x00000009, + 0x000003e2,0x000003d0,0x000003d1,0x0003003e,0x000003e2,0x000003e1,0x000200f9,0x000003cc, + 0x000200f8,0x000003cc,0x0004003d,0x00000006,0x000003e3,0x000003c8,0x00050080,0x00000006, + 0x000003e4,0x000003e3,0x000000ab,0x0003003e,0x000003c8,0x000003e4,0x000200f9,0x000003c9, + 0x000200f8,0x000003cb,0x000200f9,0x00000395,0x000200f8,0x000003e5,0x0004003d,0x00000006, + 0x000003e7,0x0000037a,0x000500aa,0x0000001f,0x000003e8,0x000003e7,0x0000001e,0x000300f7, + 0x000003eb,0x00000000,0x000400fa,0x000003e8,0x000003ea,0x000003ee,0x000200f8,0x000003ea, + 0x0004003d,0x00000006,0x000003ec,0x00000264,0x00050082,0x00000006,0x000003ed,0x000003ec, + 0x0000003f,0x0003003e,0x000003e9,0x000003ed,0x000200f9,0x000003eb,0x000200f8,0x000003ee, + 0x0004003d,0x00000006,0x000003ef,0x00000264,0x0003003e,0x000003e9,0x000003ef,0x000200f9, + 0x000003eb,0x000200f8,0x000003eb,0x0004003d,0x00000006,0x000003f0,0x000003e9,0x0003003e, + 0x000003e6,0x000003f0,0x0004003d,0x00000007,0x000003f3,0x0000001a,0x0003003e,0x000003f2, + 0x000003f3,0x0004003d,0x00000006,0x000003f5,0x000000c8,0x0003003e,0x000003f4,0x000003f5, + 0x0004003d,0x00000006,0x000003f7,0x000003e6,0x0003003e,0x000003f6,0x000003f7,0x00070039, + 0x00000006,0x000003f8,0x0000000e,0x000003f2,0x000003f4,0x000003f6,0x0003003e,0x000003f1, + 0x000003f8,0x0004003d,0x00000006,0x000003f9,0x000003e6,0x0004003d,0x00000006,0x000003fa, + 0x000000c8,0x00050080,0x00000006,0x000003fb,0x000003fa,0x000003f9,0x0003003e,0x000000c8, + 0x000003fb,0x0004003d,0x00000006,0x000003fd,0x00000256,0x000500aa,0x0000001f,0x000003fe, + 0x000003fd,0x00000087,0x000300f7,0x00000401,0x00000000,0x000400fa,0x000003fe,0x00000400, + 0x00000406,0x000200f8,0x00000400,0x0004003d,0x00000006,0x00000402,0x0000038e,0x0003003e, + 0x00000403,0x0000039e,0x00050041,0x00000009,0x00000404,0x00000403,0x00000402,0x0004003d, + 0x00000006,0x00000405,0x00000404,0x0003003e,0x000003ff,0x00000405,0x000200f9,0x00000401, + 0x000200f8,0x00000406,0x0004003d,0x00000006,0x00000407,0x0000038e,0x0003003e,0x00000408, + 0x000003b1,0x00050041,0x00000009,0x00000409,0x00000408,0x00000407,0x0004003d,0x00000006, + 0x0000040a,0x00000409,0x0003003e,0x000003ff,0x0000040a,0x000200f9,0x00000401,0x000200f8, + 0x00000401,0x0004003d,0x00000006,0x0000040b,0x000003ff,0x0003003e,0x000003fc,0x0000040b, + 0x0004003d,0x00000006,0x0000040d,0x00000264,0x000500aa,0x0000001f,0x0000040e,0x0000040d, + 0x00000087,0x000300f7,0x00000411,0x00000000,0x000400fa,0x0000040e,0x00000410,0x00000416, + 0x000200f8,0x00000410,0x0004003d,0x00000006,0x00000412,0x000003f1,0x0003003e,0x00000413, + 0x0000039e,0x00050041,0x00000009,0x00000414,0x00000413,0x00000412,0x0004003d,0x00000006, + 0x00000415,0x00000414,0x0003003e,0x0000040f,0x00000415,0x000200f9,0x00000411,0x000200f8, + 0x00000416,0x0004003d,0x00000006,0x00000417,0x000003f1,0x0003003e,0x00000418,0x000003b1, + 0x00050041,0x00000009,0x00000419,0x00000418,0x00000417,0x0004003d,0x00000006,0x0000041a, + 0x00000419,0x0003003e,0x0000040f,0x0000041a,0x000200f9,0x00000411,0x000200f8,0x00000411, + 0x0004003d,0x00000006,0x0000041b,0x0000040f,0x0003003e,0x0000040c,0x0000041b,0x0004003d, + 0x00000006,0x0000041d,0x000000ce,0x000500aa,0x0000001f,0x0000041e,0x0000041d,0x0000001e, + 0x0004003d,0x00000006,0x0000041f,0x000003fc,0x0004003d,0x00000006,0x00000420,0x0000040c, + 0x000600a9,0x00000006,0x00000421,0x0000041e,0x0000041f,0x00000420,0x0003003e,0x0000041c, + 0x00000421,0x0004003d,0x00000006,0x00000423,0x000000ce,0x000500aa,0x0000001f,0x00000424, + 0x00000423,0x0000001e,0x0004003d,0x00000006,0x00000425,0x0000040c,0x0004003d,0x00000006, + 0x00000426,0x000003fc,0x000600a9,0x00000006,0x00000427,0x00000424,0x00000425,0x00000426, + 0x0003003e,0x00000422,0x00000427,0x0003003e,0x00000428,0x0000001e,0x000200f9,0x00000429, + 0x000200f8,0x00000429,0x000400f6,0x0000042b,0x0000042c,0x00000000,0x000200f9,0x0000042d, + 0x000200f8,0x0000042d,0x0004003d,0x00000006,0x0000042e,0x00000428,0x000500b0,0x0000001f, + 0x0000042f,0x0000042e,0x00000039,0x000400fa,0x0000042f,0x0000042a,0x0000042b,0x000200f8, + 0x0000042a,0x0004003d,0x00000006,0x00000430,0x00000428,0x0004003d,0x00000006,0x00000431, + 0x00000388,0x0004003d,0x00000006,0x00000432,0x00000428,0x00060041,0x00000009,0x00000433, + 0x0000013a,0x00000431,0x00000432,0x0004003d,0x00000006,0x00000434,0x00000433,0x0004003d, + 0x00000006,0x00000435,0x0000041c,0x00050082,0x00000006,0x00000436,0x00000275,0x00000435, + 0x00050084,0x00000006,0x00000437,0x00000434,0x00000436,0x0004003d,0x00000006,0x00000438, + 0x0000038b,0x0004003d,0x00000006,0x00000439,0x00000428,0x00060041,0x00000009,0x0000043a, + 0x0000013a,0x00000438,0x00000439,0x0004003d,0x00000006,0x0000043b,0x0000043a,0x0004003d, + 0x00000006,0x0000043c,0x0000041c,0x00050084,0x00000006,0x0000043d,0x0000043b,0x0000043c, + 0x00050080,0x00000006,0x0000043e,0x00000437,0x0000043d,0x00050080,0x00000006,0x0000043f, + 0x0000043e,0x00000036,0x000500c2,0x00000006,0x00000440,0x0000043f,0x00000117,0x00050041, + 0x00000009,0x00000441,0x000003d0,0x00000430,0x0003003e,0x00000441,0x00000440,0x000200f9, + 0x0000042c,0x000200f8,0x0000042c,0x0004003d,0x00000006,0x00000442,0x00000428,0x00050080, + 0x00000006,0x00000443,0x00000442,0x000000ab,0x0003003e,0x00000428,0x00000443,0x000200f9, + 0x00000429,0x000200f8,0x0000042b,0x0004003d,0x00000006,0x00000444,0x00000388,0x00060041, + 0x00000009,0x00000445,0x0000013a,0x00000444,0x0000008b,0x0004003d,0x00000006,0x00000446, + 0x00000445,0x0004003d,0x00000006,0x00000447,0x00000422,0x00050082,0x00000006,0x00000448, + 0x00000275,0x00000447,0x00050084,0x00000006,0x00000449,0x00000446,0x00000448,0x0004003d, + 0x00000006,0x0000044a,0x0000038b,0x00060041,0x00000009,0x0000044b,0x0000013a,0x0000044a, + 0x0000008b,0x0004003d,0x00000006,0x0000044c,0x0000044b,0x0004003d,0x00000006,0x0000044d, + 0x00000422,0x00050084,0x00000006,0x0000044e,0x0000044c,0x0000044d,0x00050080,0x00000006, + 0x0000044f,0x00000449,0x0000044e,0x00050080,0x00000006,0x00000450,0x0000044f,0x00000036, + 0x000500c2,0x00000006,0x00000451,0x00000450,0x00000117,0x00050041,0x00000009,0x00000452, + 0x000003d0,0x00000039,0x0003003e,0x00000452,0x00000451,0x000200f9,0x00000395,0x000200f8, + 0x00000395,0x0004003d,0x00000006,0x00000453,0x000000cd,0x000500aa,0x0000001f,0x00000454, + 0x00000453,0x0000003f,0x000300f7,0x00000456,0x00000000,0x000400fa,0x00000454,0x00000455, + 0x00000459,0x000200f8,0x00000455,0x0004003d,0x00000007,0x00000457,0x000003d0,0x0009004f, + 0x00000007,0x00000458,0x00000457,0x00000457,0x00000003,0x00000001,0x00000002,0x00000000, + 0x0003003e,0x000003d0,0x00000458,0x000200f9,0x00000456,0x000200f8,0x00000459,0x0004003d, + 0x00000006,0x0000045a,0x000000cd,0x000500aa,0x0000001f,0x0000045b,0x0000045a,0x00000087, + 0x000300f7,0x0000045d,0x00000000,0x000400fa,0x0000045b,0x0000045c,0x00000460,0x000200f8, + 0x0000045c,0x0004003d,0x00000007,0x0000045e,0x000003d0,0x0009004f,0x00000007,0x0000045f, + 0x0000045e,0x0000045e,0x00000000,0x00000003,0x00000002,0x00000001,0x0003003e,0x000003d0, + 0x0000045f,0x000200f9,0x0000045d,0x000200f8,0x00000460,0x0004003d,0x00000006,0x00000461, + 0x000000cd,0x000500aa,0x0000001f,0x00000462,0x00000461,0x00000039,0x000300f7,0x00000464, + 0x00000000,0x000400fa,0x00000462,0x00000463,0x00000464,0x000200f8,0x00000463,0x0004003d, + 0x00000007,0x00000465,0x000003d0,0x0009004f,0x00000007,0x00000466,0x00000465,0x00000465, + 0x00000000,0x00000001,0x00000003,0x00000002,0x0003003e,0x000003d0,0x00000466,0x000200f9, + 0x00000464,0x000200f8,0x00000464,0x000200f9,0x0000045d,0x000200f8,0x0000045d,0x000200f9, + 0x00000456,0x000200f8,0x00000456,0x0004003d,0x00000006,0x00000467,0x0000037a,0x000500c7, + 0x00000006,0x00000468,0x00000467,0x00000039,0x0004003d,0x00000006,0x00000469,0x0000037a, + 0x000500c2,0x00000006,0x0000046a,0x00000469,0x000000bd,0x0004003d,0x00000007,0x0000046b, + 0x000003d0,0x00040070,0x00000011,0x0000046c,0x0000046b,0x00070050,0x00000011,0x0000046e, + 0x0000046d,0x0000046d,0x0000046d,0x0000046d,0x00050088,0x00000011,0x0000046f,0x0000046c, + 0x0000046e,0x0003003e,0x00000470,0x00000468,0x0003003e,0x00000471,0x0000046a,0x0003003e, + 0x00000472,0x0000046f,0x00070039,0x00000002,0x00000473,0x00000017,0x00000470,0x00000471, + 0x00000472,0x000200f9,0x0000037e,0x000200f8,0x0000037e,0x0004003d,0x00000006,0x00000474, + 0x0000037a,0x00050080,0x00000006,0x00000475,0x00000474,0x000000ab,0x0003003e,0x0000037a, + 0x00000475,0x000200f9,0x0000037b,0x000200f8,0x0000037d,0x000100fd,0x00010038 +}; diff --git a/app/src/main/cpp/vkbridge/server_conn.c b/app/src/main/cpp/vkbridge/server_conn.c new file mode 100644 index 000000000..bebcaa3d9 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_conn.c @@ -0,0 +1,535 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Connections: one thread per client thread, requests executed in order, replies sent back. + * A command buffer's recorded commands arrive in one message at vkEndCommandBuffer and are + * replayed here. + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include +#include +#include +#include +#include +#include + +static pthread_mutex_t tables_lock = PTHREAD_MUTEX_INITIALIZER; +static vkb_srv_table *tables[VKB_MAX_TABLES]; +static uint32_t next_table_id = 1; + +static pthread_mutex_t procs_lock = PTHREAD_MUTEX_INITIALIZER; +static vkb_srv_proc *procs; + +static __thread vkb_srv_table *tls_table; +__thread const char *vkb_srv_current_cmd; + +vkb_srv_table *vkb_srv_current_table(void) { return tls_table; } +void vkb_srv_set_current_table(vkb_srv_table *t) { tls_table = t; } + +/* Server side of the generated encoders' helpers: handles are already the server's values. */ +uint64_t vkb_remote(const void *h) { return (uint64_t)(uintptr_t)h; } +int vkb_cb_begin_is_secondary(const VkCommandBufferBeginInfo *s) { (void)s; return 1; } + +uint32_t vkb_table_register(vkb_srv_table *t) +{ + pthread_mutex_lock(&tables_lock); + uint32_t id = 0; + for (uint32_t tries = 0; tries < VKB_MAX_TABLES; tries++) { + uint32_t cand = next_table_id++; + if (next_table_id >= VKB_MAX_TABLES) next_table_id = 1; + if (!tables[cand]) { + id = cand; + break; + } + } + if (id) { + t->id = id; + tables[id] = t; + } + pthread_mutex_unlock(&tables_lock); + return id; +} + +void vkb_table_unregister(vkb_srv_table *t) +{ + pthread_mutex_lock(&tables_lock); + if (t->id && t->id < VKB_MAX_TABLES && tables[t->id] == t) tables[t->id] = NULL; + pthread_mutex_unlock(&tables_lock); +} + +vkb_srv_table *vkb_table_get(uint32_t id) +{ + if (!id || id >= VKB_MAX_TABLES) return NULL; + pthread_mutex_lock(&tables_lock); + vkb_srv_table *t = tables[id]; + pthread_mutex_unlock(&tables_lock); + return t; +} + +void vkb_srv_reply_status(vkb_srv_call *c, uint32_t status) +{ + c->status = status; +} + +void vkb_srv_bad_message(vkb_srv_call *c) +{ + VKB_ERR("malformed request"); + c->status = VKB_ST_BAD_MESSAGE; +} + +void vkb_srv_missing(vkb_srv_call *c, const char *name) +{ + VKB_ERR("the driver has no %s", name); + c->status = VKB_ST_MISSING; +} + +void vkb_srv_close_after_send(vkb_srv_call *c, int fd) +{ + if (c->nclose < VKB_MAX_FDS) c->close_after[c->nclose++] = fd; +} + +/* ------------------------------------------------------------------ process cleanup */ + +void vkb_proc_cleanup(vkb_srv_proc *p) +{ + /* Devices first, then their instances. */ + for (int pass = 0; pass < 2; pass++) { + for (uint32_t i = 1; i < VKB_MAX_TABLES; i++) { + pthread_mutex_lock(&tables_lock); + vkb_srv_table *t = tables[i]; + int mine = t && t->proc == p && t->is_device == (pass == 0); + if (mine) tables[i] = NULL; + pthread_mutex_unlock(&tables_lock); + if (!mine) continue; + if (t->is_device) { + VKB_INFO("process %d exited without destroying device %u; cleaning up", p->pid, t->id); + if (t->real.vkDeviceWaitIdle) t->real.vkDeviceWaitIdle(t->device); + vkb_spvfix_device_destroy(t); + vkb_dsmap_device_destroy(t); + vkb_pcache_device_destroy(t); + vkb_emu_device_destroy(t); + vkb_mem_free_all(t); + t->real.vkDestroyDevice(t->device, NULL); + } else { + VKB_INFO("process %d exited without destroying instance %u; cleaning up", p->pid, t->id); + t->real.vkDestroyInstance(t->instance, NULL); + } + pthread_mutex_destroy(&t->lock); + free(t); + } + } +} + +static vkb_srv_proc *proc_join(uint64_t token, int pid) +{ + pthread_mutex_lock(&procs_lock); + vkb_srv_proc *p = procs; + while (p && p->token != token) p = p->next; + if (!p) { + p = calloc(1, sizeof(*p)); + p->token = token; + p->pid = pid; + pthread_mutex_init(&p->olock, NULL); + pthread_cond_init(&p->ocond, NULL); + p->next = procs; + procs = p; + VKB_INFO("client process %d connected", pid); + } + p->conns++; + pthread_mutex_unlock(&procs_lock); + return p; +} + +static void proc_leave(vkb_srv_proc *p) +{ + pthread_mutex_lock(&procs_lock); + int last = --p->conns == 0; + if (last) { + vkb_srv_proc **pp = &procs; + while (*pp && *pp != p) pp = &(*pp)->next; + if (*pp) *pp = p->next; + } + pthread_mutex_unlock(&procs_lock); + if (last) { + vkb_proc_cleanup(p); + VKB_INFO("client process %d gone", p->pid); + pthread_mutex_destroy(&p->olock); + pthread_cond_destroy(&p->ocond); + free(p); + } else { + pthread_mutex_lock(&p->olock); + p->conn_closed = 1; + pthread_cond_broadcast(&p->ocond); + pthread_mutex_unlock(&p->olock); + } +} + +/* Waits until every async request of the process up to `barrier` has run. */ +static void order_wait(vkb_srv_proc *p, uint64_t barrier) +{ + if (!p || !barrier) return; + pthread_mutex_lock(&p->olock); + int waited = 0; + while (p->watermark < barrier) { + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += 1; + if (pthread_cond_timedwait(&p->ocond, &p->olock, &ts) != 0 && ++waited >= 3 && p->conn_closed) { + /* A connection of this process is gone with requests it never sent: go on. */ + VKB_WARN("process %d: async request %llu never arrived; continuing", p->pid, (unsigned long long)(p->watermark + 1)); + p->watermark = barrier; + memset(p->done, 0, sizeof(p->done)); + break; + } + } + pthread_mutex_unlock(&p->olock); +} + +static void order_done(vkb_srv_proc *p, uint64_t seq) +{ + if (!p || !seq) return; + pthread_mutex_lock(&p->olock); + if (seq > p->watermark) { + p->done[seq % VKB_SEQ_RING] = 1; + while (p->done[(p->watermark + 1) % VKB_SEQ_RING]) { + p->done[(p->watermark + 1) % VKB_SEQ_RING] = 0; + p->watermark++; + } + pthread_cond_broadcast(&p->ocond); + } + pthread_mutex_unlock(&p->olock); +} + +/* ------------------------------------------------------------------ command buffer replay */ + +static int is_stream_cmd(uint32_t id) +{ + const char *n = vkb_cmd_names[id]; + return !strncmp(n, "vkCmd", 5) || id == VKB_CMD_vkBeginCommandBuffer || id == VKB_CMD_vkbPushDescRaw; +} + +void vkb_sv_vkEndCommandBuffer(vkb_srv_call *c) +{ + VkCommandBuffer cb = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(&c->d); + size_t len = 0; + const uint8_t *s = vkb_dec_blob(&c->d, &len); + if (c->d.err) { + vkb_srv_bad_message(c); + return; + } + VkResult begin_r = VK_SUCCESS; + size_t pos = 0; + vkb_enc scratch; + vkb_enc_init(&scratch); + uint32_t ncmds = 0; + while (s && pos + 8 <= len) { + uint32_t id, n; + memcpy(&id, s + pos, 4); + memcpy(&n, s + pos + 4, 4); + pos += 8; + if (id >= VKB_CMD_COUNT || !is_stream_cmd(id) || n > len - pos) { + VKB_ERR("command stream: bad entry (id %u, %u bytes) after %u commands", id, n, ncmds); + c->status = VKB_ST_BAD_MESSAGE; + vkb_enc_free(&scratch); + return; + } + vkb_srv_call sub; + memset(&sub, 0, sizeof(sub)); + vkb_dec_init(&sub.d, s + pos, n, c->d.arena, NULL, 0); + sub.r = scratch; + vkb_enc_reset(&sub.r); + sub.dt = c->dt; + sub.table = c->table; + sub.conn = c->conn; + sub.in_stream = 1; + vkb_srv_current_cmd = vkb_cmd_names[id]; + vkb_srv_handlers[id](&sub); + vkb_srv_current_cmd = vkb_cmd_names[VKB_CMD_vkEndCommandBuffer]; + scratch = sub.r; + if (sub.status != VKB_ST_OK) { + VKB_ERR("command stream: %s failed (status %u)", vkb_cmd_names[id], sub.status); + } + if (id == VKB_CMD_vkBeginCommandBuffer && scratch.len >= 4) memcpy(&begin_r, scratch.buf, 4); + pos += (n + 7) & ~(size_t)7; + ncmds++; + } + vkb_enc_free(&scratch); + VkResult r = c->dt->vkEndCommandBuffer(cb); + if (begin_r != VK_SUCCESS) r = begin_r; + if (vkb_verbose) VKB_DBG("command buffer %p: %u commands, %zu bytes -> %d", (void *)cb, ncmds, len, r); + vkb_enc_u32(&c->r, (uint32_t)r); +} + +/* ------------------------------------------------------------------ hello */ + +void vkb_sv_vkbHello(vkb_srv_call *c) +{ + uint64_t hash = vkb_dec_u64(&c->d); + uint64_t token = vkb_dec_u64(&c->d); + uint32_t pid = vkb_dec_u32(&c->d); + const char *comm = vkb_dec_str(&c->d); + if (c->d.err) { + vkb_srv_bad_message(c); + return; + } + vkb_enc_u64(&c->r, VKB_PROTOCOL_HASH); + if (hash != VKB_PROTOCOL_HASH) { + VKB_ERR("client %d (%s) speaks protocol %016llx, this server %016llx: refusing", pid, + comm ? comm : "?", (unsigned long long)hash, (unsigned long long)VKB_PROTOCOL_HASH); + vkb_enc_u32(&c->r, 0); + return; + } + if (!c->conn->proc) { + c->conn->proc = proc_join(token, (int)pid); + if (c->conn->proc->conns == 1) VKB_INFO("process %u is %s", pid, comm ? comm : "?"); + } + vkb_enc_u32(&c->r, 1); +} + +/* ------------------------------------------------------------------ statistics */ + +/* VKBRIDGE_STATS= on the server: time spent per command, waiting for order, idle. */ +static uint64_t st_ns[VKB_CMD_COUNT], st_n[VKB_CMD_COUNT], st_wait_ns, st_last; +static int st_period = -1; + +static uint64_t mono_ns(void) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t)ts.tv_sec * 1000000000ull + (uint64_t)ts.tv_nsec; +} + +static void stats_add(uint32_t cmd, uint64_t ns, uint64_t wait_ns) +{ + if (st_period < 0) { + const char *v = getenv("VKBRIDGE_STATS"); + st_period = v ? atoi(v) : 0; + } + if (!st_period) return; + __atomic_add_fetch(&st_ns[cmd], ns, __ATOMIC_RELAXED); + __atomic_add_fetch(&st_n[cmd], 1, __ATOMIC_RELAXED); + __atomic_add_fetch(&st_wait_ns, wait_ns, __ATOMIC_RELAXED); + uint64_t now = mono_ns(), last = __atomic_load_n(&st_last, __ATOMIC_RELAXED); + if (!last) { + __atomic_store_n(&st_last, now, __ATOMIC_RELAXED); + return; + } + if (now - last < (uint64_t)st_period * 1000000000ull || !__atomic_compare_exchange_n(&st_last, &last, now, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) + return; + uint64_t total = 0; + for (uint32_t i = 0; i < VKB_CMD_COUNT; i++) total += st_ns[i]; + VKB_INFO("stats over %ds: %.1f ms in handlers, %.1f ms waiting for order", st_period, total / 1e6, st_wait_ns / 1e6); + for (int k = 0; k < 8; k++) { + uint64_t best = 0; + uint32_t bi = 0; + for (uint32_t i = 0; i < VKB_CMD_COUNT; i++) + if (st_ns[i] > best) { + best = st_ns[i]; + bi = i; + } + if (!best) break; + VKB_INFO(" %-40s %8llu calls %9.2f ms (%.2f us each)", vkb_cmd_names[bi], (unsigned long long)st_n[bi], best / 1e6, + best / 1e3 / (double)st_n[bi]); + st_ns[bi] = 0; + } + memset(st_ns, 0, sizeof(st_ns)); + memset(st_n, 0, sizeof(st_n)); + st_wait_ns = 0; +} + +/* ------------------------------------------------------------------ connection loop */ + +/* Reads the next request. Buffered: a burst of small asynchronous requests costs one recvmsg, not + * two reads each. Descriptors arrive with the first bytes of their message, so they queue up in + * order and each header takes its nfds from the front. The payload points into the buffer and + * stays valid until the next call. */ +static int srv_recv(vkb_srv_conn *conn, vkb_msg_hdr *h, uint8_t **payload, int *fds, int *nfds) +{ + *nfds = 0; + if (conn->rpos == conn->rlen && conn->rcap > (16u << 20)) { + free(conn->rb); + conn->rb = NULL; + conn->rcap = conn->rpos = conn->rlen = 0; + } + for (;;) { + size_t avail = conn->rlen - conn->rpos; + size_t need = sizeof(*h); + if (avail >= sizeof(*h)) { + memcpy(h, conn->rb + conn->rpos, sizeof(*h)); + if (h->magic != VKB_MAGIC) { + VKB_ERR("transport: bad message magic 0x%08x", h->magic); + return -1; + } + if (h->size > (1u << 30) || h->nfds > VKB_MAX_FDS) { + VKB_ERR("transport: bad message (%u bytes, %u descriptors)", h->size, h->nfds); + return -1; + } + need += h->size; + if (avail >= need) { + if ((int)h->nfds > conn->fdn) { + VKB_ERR("transport: message arrived without its %u descriptors", h->nfds); + return -1; + } + *nfds = (int)h->nfds; + memcpy(fds, conn->fdq, sizeof(int) * h->nfds); + conn->fdn -= (int)h->nfds; + memmove(conn->fdq, conn->fdq + h->nfds, sizeof(int) * conn->fdn); + *payload = conn->rb + conn->rpos + sizeof(*h); + conn->rpos += need; + return 0; + } + } + if (conn->rpos) { + memmove(conn->rb, conn->rb + conn->rpos, avail); + conn->rpos = 0; + conn->rlen = avail; + } + if (need < (256u << 10)) need = 256u << 10; + if (need > conn->rcap) { + size_t nc = conn->rcap ? conn->rcap : (256u << 10); + while (nc < need) nc *= 2; + uint8_t *nb = realloc(conn->rb, nc); + if (!nb) return -1; + conn->rb = nb; + conn->rcap = nc; + } + union { + char buf[CMSG_SPACE(sizeof(int) * VKB_MAX_FDS)]; + struct cmsghdr align; + } cm; + struct iovec iov = {conn->rb + conn->rlen, conn->rcap - conn->rlen}; + struct msghdr msg; + memset(&msg, 0, sizeof(msg)); + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_control = cm.buf; + msg.msg_controllen = sizeof(cm.buf); + ssize_t r; + do { + r = recvmsg(conn->sock, &msg, MSG_CMSG_CLOEXEC); + } while (r < 0 && errno == EINTR); + if (r <= 0) return -1; + for (struct cmsghdr *cmh = CMSG_FIRSTHDR(&msg); cmh; cmh = CMSG_NXTHDR(&msg, cmh)) { + if (cmh->cmsg_level != SOL_SOCKET || cmh->cmsg_type != SCM_RIGHTS) continue; + int n = (int)((cmh->cmsg_len - CMSG_LEN(0)) / sizeof(int)); + for (int i = 0; i < n; i++) { + int fd; + memcpy(&fd, CMSG_DATA(cmh) + i * sizeof(int), sizeof(int)); + if (conn->fdn < (int)(sizeof(conn->fdq) / sizeof(conn->fdq[0]))) conn->fdq[conn->fdn++] = fd; + else close(fd); + } + } + if (msg.msg_flags & MSG_CTRUNC) VKB_WARN("transport: descriptors truncated"); + conn->rlen += (size_t)r; + } +} + +static void *conn_main(void *arg) +{ + vkb_srv_conn *conn = arg; + vkb_srv_call c; + vkb_enc_init(&c.r); + int fds[VKB_MAX_FDS]; + for (;;) { + vkb_msg_hdr h; + int nfds = 0; + uint8_t *payload; + if (srv_recv(conn, &h, &payload, fds, &nfds) < 0) break; + vkb_enc_reset(&c.r); + vkb_dec_init(&c.d, payload, h.size, &conn->arena, fds, nfds); + c.conn = conn; + c.status = VKB_ST_OK; + c.nclose = 0; + c.in_stream = 0; + c.table = NULL; + c.dt = &vkb_global_dt; + if (h.cmd >= VKB_CMD_COUNT) { + VKB_ERR("unknown command id %u", h.cmd); + c.status = VKB_ST_BAD_MESSAGE; + } else if (!conn->proc && h.cmd != VKB_CMD_vkbHello) { + VKB_ERR("%s before hello", vkb_cmd_names[h.cmd]); + c.status = VKB_ST_BAD_MESSAGE; + } else { + if (h.table) { + c.table = vkb_table_get(h.table); + if (!c.table || c.table->proc != conn->proc) { + VKB_ERR("%s: unknown dispatch table %u", vkb_cmd_names[h.cmd], h.table); + c.status = VKB_ST_BAD_TABLE; + } else { + c.dt = &c.table->dt; + } + } + if (c.status == VKB_ST_OK) { + uint64_t t0 = st_period ? mono_ns() : 0; + order_wait(conn->proc, h.barrier); + uint64_t t1 = st_period ? mono_ns() : 0; + vkb_srv_set_current_table(c.table); + if (vkb_verbose) VKB_DBG("-> %s", vkb_cmd_names[h.cmd]); + vkb_srv_current_cmd = vkb_cmd_names[h.cmd]; + vkb_srv_handlers[h.cmd](&c); + vkb_srv_current_cmd = NULL; + vkb_srv_set_current_table(NULL); + if (st_period) stats_add(h.cmd, mono_ns() - t1, t1 - t0); + } + } + vkb_dec_close_untaken(&c.d); + order_done(conn->proc, h.seq); + if (!(h.flags & VKB_F_NOREPLY)) { + vkb_msg_hdr rh = {VKB_MAGIC, c.status == VKB_ST_OK ? (uint32_t)c.r.len : 0, c.status, 0, + c.status == VKB_ST_OK ? (uint32_t)c.r.nfds : 0, 0, 0, 0}; + if (c.r.oom) { + rh.cmd = VKB_ST_BAD_MESSAGE; + rh.size = 0; + rh.nfds = 0; + } + if (vkb_send_msg(conn->sock, &rh, c.r.buf, c.r.fds, (int)rh.nfds) < 0) { + for (int i = 0; i < c.nclose; i++) close(c.close_after[i]); + break; + } + } else if (c.status != VKB_ST_OK) { + VKB_ERR("asynchronous %s failed (status %u)", vkb_cmd_names[h.cmd], c.status); + } else if (vkb_cmd_result[h.cmd] && c.r.len >= sizeof(int32_t)) { + /* The client already told the app VK_SUCCESS; a failure can only be reported here. */ + int32_t vr; + memcpy(&vr, c.r.buf, sizeof(vr)); + if (vr < 0) VKB_ERR("asynchronous %s returned %d", vkb_cmd_names[h.cmd], vr); + } + for (int i = 0; i < c.nclose; i++) close(c.close_after[i]); + vkb_arena_reset(&conn->arena); + } + close(conn->sock); + vkb_enc_free(&c.r); + free(conn->rb); + for (int i = 0; i < conn->fdn; i++) close(conn->fdq[i]); + vkb_arena_free(&conn->arena); + if (conn->proc) proc_leave(conn->proc); + free(conn); + return NULL; +} + +void vkb_srv_serve(int lfd) +{ + stats_add(0, 0, 0); + for (;;) { + int s = accept4(lfd, NULL, NULL, SOCK_CLOEXEC); + if (s < 0) { + if (errno == EINTR || errno == ECONNABORTED) continue; + VKB_ERR("accept: %s", strerror(errno)); + continue; + } + vkb_srv_conn *conn = calloc(1, sizeof(*conn)); + conn->sock = s; + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + /* Driver calls (pipeline compiles) can use a lot of stack. */ + pthread_attr_setstacksize(&attr, 4u << 20); + if (pthread_create(&conn->thread, &attr, conn_main, conn) != 0) { + VKB_ERR("cannot start a connection thread"); + close(s); + free(conn); + } + pthread_attr_destroy(&attr); + } +} diff --git a/app/src/main/cpp/vkbridge/server_dsmap.c b/app/src/main/cpp/vkbridge/server_dsmap.c new file mode 100644 index 000000000..8d769841d --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_dsmap.c @@ -0,0 +1,337 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Descriptor sets named by the client. Where the client keeps a pool's books it knows an + * allocation will succeed, so it names the sets itself (VKB_DS_TAG | n) and sends the allocation + * without waiting (vkbAllocDescSets) - DXVK allocates a set or two per draw, and a round trip + * each was most of the bridge's remaining cost per frame. Here those names map to the driver's + * sets: wrappers in the device's dispatch table translate them wherever a set goes back to the + * driver (updates, template updates, binds, frees), and a pool's reset or destruction forgets its + * sets. Sets the server named itself (the synchronous path) pass through untouched. + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include +#include + +#define VKB_DS_TAG (1ull << 63) +#define DS_BUCKETS 8192 +#define DS_LOCAL 64 + +typedef struct ds_ent { + uint64_t id; + VkDescriptorSet set; + struct ds_ent *next; /* bucket chain */ + struct ds_ent *pool_next; /* the pool's sets */ +} ds_ent; + +typedef struct ds_pool { + VkDescriptorPool pool; + ds_ent *sets; + struct ds_pool *next; +} ds_pool; + +typedef struct vkb_dsmap { + pthread_mutex_t lock; + ds_ent *buckets[DS_BUCKETS]; + ds_pool *pools; + int warned; + PFN_vkAllocateDescriptorSets allocate; + PFN_vkUpdateDescriptorSets update; + PFN_vkUpdateDescriptorSetWithTemplate update_template; + PFN_vkCmdBindDescriptorSets bind; + PFN_vkCmdBindDescriptorSets2 bind2; + PFN_vkFreeDescriptorSets free_sets; + PFN_vkResetDescriptorPool reset_pool; + PFN_vkDestroyDescriptorPool destroy_pool; +} vkb_dsmap; + +static unsigned bucket(uint64_t id) +{ + id *= 0x9e3779b97f4a7c15ull; + return (unsigned)(id >> 51) & (DS_BUCKETS - 1); +} + +static vkb_dsmap *cur(void) +{ + vkb_srv_table *t = vkb_srv_current_table(); + return t ? t->dsmap : NULL; +} + +static int tagged(VkDescriptorSet s) +{ + return ((uint64_t)s & VKB_DS_TAG) != 0; +} + +/* The driver's set for a client name; VK_NULL_HANDLE when its allocation failed. */ +static VkDescriptorSet lookup(vkb_dsmap *m, VkDescriptorSet s) +{ + if (!tagged(s)) return s; + uint64_t id = (uint64_t)s; + pthread_mutex_lock(&m->lock); + ds_ent *e = m->buckets[bucket(id)]; + while (e && e->id != id) e = e->next; + VkDescriptorSet r = e ? e->set : VK_NULL_HANDLE; + pthread_mutex_unlock(&m->lock); + return r; +} + +static void missing(vkb_dsmap *m, const char *where) +{ + if (__atomic_fetch_add(&m->warned, 1, __ATOMIC_RELAXED) < 20) + VKB_ERR("%s: a descriptor set the client allocated ahead does not exist (its allocation failed); skipped", where); +} + +static ds_pool *pool_get(vkb_dsmap *m, VkDescriptorPool pool, int create) +{ + for (ds_pool *p = m->pools; p; p = p->next) + if (p->pool == pool) return p; + if (!create) return NULL; + ds_pool *p = calloc(1, sizeof(*p)); + if (!p) return NULL; + p->pool = pool; + p->next = m->pools; + m->pools = p; + return p; +} + +/* Forgets the pool's sets (a reset or destruction freed them); the record goes with destroy. */ +static void pool_forget(vkb_dsmap *m, VkDescriptorPool pool, int destroy) +{ + pthread_mutex_lock(&m->lock); + for (ds_pool **pp = &m->pools; *pp; pp = &(*pp)->next) { + ds_pool *p = *pp; + if (p->pool != pool) continue; + while (p->sets) { + ds_ent *e = p->sets; + p->sets = e->pool_next; + ds_ent **bp = &m->buckets[bucket(e->id)]; + while (*bp && *bp != e) bp = &(*bp)->next; + if (*bp) *bp = e->next; + free(e); + } + if (destroy) { + *pp = p->next; + free(p); + } + break; + } + pthread_mutex_unlock(&m->lock); +} + +/* ------------------------------------------------------------------ the allocation request */ + +/* vkbAllocDescSets: device, pool, count, then per set its layout and the client's name. */ +void vkb_sv_vkbAllocDescSets(vkb_srv_call *c) +{ + VkDevice dev = (VkDevice)(uintptr_t)vkb_dec_u64(&c->d); + VkDescriptorPool pool; + vkb_dec_bytes(&c->d, &pool, sizeof(pool)); + uint32_t n = vkb_dec_u32(&c->d); + if (c->d.err || !c->table || !c->table->dsmap || n == 0 || n > 4096) { + vkb_srv_bad_message(c); + return; + } + vkb_dsmap *m = c->table->dsmap; + VkDescriptorSetLayout layouts_local[DS_LOCAL], *layouts = n <= DS_LOCAL ? layouts_local : malloc(n * sizeof(*layouts)); + uint64_t ids_local[DS_LOCAL], *ids = n <= DS_LOCAL ? ids_local : malloc(n * sizeof(*ids)); + VkDescriptorSet sets_local[DS_LOCAL], *sets = n <= DS_LOCAL ? sets_local : malloc(n * sizeof(*sets)); + if (!layouts || !ids || !sets) goto out; + for (uint32_t i = 0; i < n; i++) { + vkb_dec_bytes(&c->d, &layouts[i], sizeof(layouts[i])); + ids[i] = vkb_dec_u64(&c->d); + } + if (c->d.err) { + vkb_srv_bad_message(c); + goto out; + } + VkDescriptorSetAllocateInfo ai = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, NULL, pool, n, layouts}; + VkResult r = m->allocate(dev, &ai, sets); + if (r != VK_SUCCESS) { + VKB_ERR("allocating %u descriptor sets the client named ahead failed: %d (the client's pool books disagree " + "with the driver)", n, r); + goto out; + } + pthread_mutex_lock(&m->lock); + ds_pool *p = pool_get(m, pool, 1); + for (uint32_t i = 0; i < n; i++) { + ds_ent *e = malloc(sizeof(*e)); + if (!e || !p) { + free(e); + break; + } + e->id = ids[i]; + e->set = sets[i]; + unsigned b = bucket(e->id); + e->next = m->buckets[b]; + m->buckets[b] = e; + e->pool_next = p->sets; + p->sets = e; + } + pthread_mutex_unlock(&m->lock); +out: + if (layouts != layouts_local) free(layouts); + if (ids != ids_local) free(ids); + if (sets != sets_local) free(sets); +} + +/* ------------------------------------------------------------------ wrappers */ + +static void VKAPI_CALL ds_UpdateDescriptorSets(VkDevice device, uint32_t nw, const VkWriteDescriptorSet *w, uint32_t nc, + const VkCopyDescriptorSet *cp) +{ + vkb_dsmap *m = cur(); + int any = 0; + for (uint32_t i = 0; i < nw && !any; i++) any = tagged(w[i].dstSet); + for (uint32_t i = 0; i < nc && !any; i++) any = tagged(cp[i].srcSet) || tagged(cp[i].dstSet); + if (!any) { + m->update(device, nw, w, nc, cp); + return; + } + VkWriteDescriptorSet w_local[DS_LOCAL], *w2 = nw <= DS_LOCAL ? w_local : malloc(nw * sizeof(*w2)); + VkCopyDescriptorSet c_local[DS_LOCAL], *c2 = nc <= DS_LOCAL ? c_local : malloc(nc * sizeof(*c2)); + if ((nw && !w2) || (nc && !c2)) goto out; + uint32_t kw = 0, kc = 0; + for (uint32_t i = 0; i < nw; i++) { + w2[kw] = w[i]; + w2[kw].dstSet = lookup(m, w[i].dstSet); + if (w2[kw].dstSet) kw++; + else missing(m, "vkUpdateDescriptorSets"); + } + for (uint32_t i = 0; i < nc; i++) { + c2[kc] = cp[i]; + c2[kc].srcSet = lookup(m, cp[i].srcSet); + c2[kc].dstSet = lookup(m, cp[i].dstSet); + if (c2[kc].srcSet && c2[kc].dstSet) kc++; + else missing(m, "vkUpdateDescriptorSets (copy)"); + } + if (kw || kc) m->update(device, kw, w2, kc, c2); +out: + if (w2 != w_local) free(w2); + if (c2 != c_local) free(c2); +} + +static void VKAPI_CALL ds_UpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet set, VkDescriptorUpdateTemplate tmpl, + const void *data) +{ + vkb_dsmap *m = cur(); + VkDescriptorSet s = lookup(m, set); + if (!s) { + missing(m, "vkUpdateDescriptorSetWithTemplate"); + return; + } + m->update_template(device, s, tmpl, data); +} + +/* Translates n sets into out; 0 when one of them does not exist. */ +static int translate(vkb_dsmap *m, uint32_t n, const VkDescriptorSet *in, VkDescriptorSet *out) +{ + for (uint32_t i = 0; i < n; i++) { + /* VK_NULL_HANDLE is allowed in binds (graphicsPipelineLibrary) and stays so. */ + out[i] = in[i] ? lookup(m, in[i]) : VK_NULL_HANDLE; + if (in[i] && !out[i]) return 0; + } + return 1; +} + +static void VKAPI_CALL ds_CmdBindDescriptorSets(VkCommandBuffer cb, VkPipelineBindPoint bp, VkPipelineLayout layout, uint32_t first, + uint32_t n, const VkDescriptorSet *sets, uint32_t ndyn, const uint32_t *dyn) +{ + vkb_dsmap *m = cur(); + VkDescriptorSet local[DS_LOCAL], *s = n <= DS_LOCAL ? local : malloc(n * sizeof(*s)); + if (!s) return; + if (translate(m, n, sets, s)) m->bind(cb, bp, layout, first, n, s, ndyn, dyn); + else missing(m, "vkCmdBindDescriptorSets"); + if (s != local) free(s); +} + +static void VKAPI_CALL ds_CmdBindDescriptorSets2(VkCommandBuffer cb, const VkBindDescriptorSetsInfo *info) +{ + vkb_dsmap *m = cur(); + uint32_t n = info->descriptorSetCount; + VkDescriptorSet local[DS_LOCAL], *s = n <= DS_LOCAL ? local : malloc(n * sizeof(*s)); + if (!s) return; + VkBindDescriptorSetsInfo i2 = *info; + i2.pDescriptorSets = s; + if (translate(m, n, info->pDescriptorSets, s)) m->bind2(cb, &i2); + else missing(m, "vkCmdBindDescriptorSets2"); + if (s != local) free(s); +} + +static VkResult VKAPI_CALL ds_FreeDescriptorSets(VkDevice device, VkDescriptorPool pool, uint32_t n, const VkDescriptorSet *sets) +{ + vkb_dsmap *m = cur(); + VkDescriptorSet local[DS_LOCAL], *s = n <= DS_LOCAL ? local : malloc(n * sizeof(*s)); + if (!s) return VK_ERROR_OUT_OF_HOST_MEMORY; + /* Named sets come only from pools without FREE_DESCRIPTOR_SET (the client keeps no books on + * those), so this is an app error at worst: what does not exist is left out. */ + uint32_t k = 0; + for (uint32_t i = 0; i < n; i++) { + VkDescriptorSet t = sets[i] ? lookup(m, sets[i]) : VK_NULL_HANDLE; + if (t || !sets[i]) s[k++] = t; + } + VkResult r = k ? m->free_sets(device, pool, k, s) : VK_SUCCESS; + if (s != local) free(s); + return r; +} + +static VkResult VKAPI_CALL ds_ResetDescriptorPool(VkDevice device, VkDescriptorPool pool, VkDescriptorPoolResetFlags flags) +{ + vkb_dsmap *m = cur(); + pool_forget(m, pool, 0); + return m->reset_pool(device, pool, flags); +} + +static void VKAPI_CALL ds_DestroyDescriptorPool(VkDevice device, VkDescriptorPool pool, const VkAllocationCallbacks *a) +{ + vkb_dsmap *m = cur(); + if (pool) pool_forget(m, pool, 1); + m->destroy_pool(device, pool, a); +} + +/* ------------------------------------------------------------------ device hooks */ + +void vkb_dsmap_device_init(vkb_srv_table *t) +{ + vkb_dispatch *dt = &t->dt; + if (!dt->vkAllocateDescriptorSets || !dt->vkUpdateDescriptorSets || !dt->vkCmdBindDescriptorSets || + !dt->vkResetDescriptorPool || !dt->vkDestroyDescriptorPool || !dt->vkFreeDescriptorSets) + return; + vkb_dsmap *m = calloc(1, sizeof(*m)); + if (!m) return; + pthread_mutex_init(&m->lock, NULL); + m->allocate = dt->vkAllocateDescriptorSets; + m->update = dt->vkUpdateDescriptorSets; + m->update_template = dt->vkUpdateDescriptorSetWithTemplate; + m->bind = dt->vkCmdBindDescriptorSets; + m->bind2 = dt->vkCmdBindDescriptorSets2; + m->free_sets = dt->vkFreeDescriptorSets; + m->reset_pool = dt->vkResetDescriptorPool; + m->destroy_pool = dt->vkDestroyDescriptorPool; + dt->vkUpdateDescriptorSets = ds_UpdateDescriptorSets; + if (m->update_template) dt->vkUpdateDescriptorSetWithTemplate = ds_UpdateDescriptorSetWithTemplate; + dt->vkCmdBindDescriptorSets = ds_CmdBindDescriptorSets; + if (m->bind2) dt->vkCmdBindDescriptorSets2 = ds_CmdBindDescriptorSets2; + dt->vkFreeDescriptorSets = ds_FreeDescriptorSets; + dt->vkResetDescriptorPool = ds_ResetDescriptorPool; + dt->vkDestroyDescriptorPool = ds_DestroyDescriptorPool; + t->dsmap = m; +} + +void vkb_dsmap_device_destroy(vkb_srv_table *t) +{ + vkb_dsmap *m = t->dsmap; + if (!m) return; + vkb_dispatch *dt = &t->dt; + dt->vkUpdateDescriptorSets = m->update; + if (m->update_template) dt->vkUpdateDescriptorSetWithTemplate = m->update_template; + dt->vkCmdBindDescriptorSets = m->bind; + if (m->bind2) dt->vkCmdBindDescriptorSets2 = m->bind2; + dt->vkFreeDescriptorSets = m->free_sets; + dt->vkResetDescriptorPool = m->reset_pool; + dt->vkDestroyDescriptorPool = m->destroy_pool; + while (m->pools) pool_forget(m, m->pools->pool, 1); + pthread_mutex_destroy(&m->lock); + free(m); + t->dsmap = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_emu.c b/app/src/main/cpp/vkbridge/server_emu.c new file mode 100644 index 000000000..072ed8a9d --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu.c @@ -0,0 +1,155 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Feature emulation: entry point. What the GPU lacks and the bridge can make up for is decided + * here per physical device; the client reports those features as present, the server strips + * them from vkCreateDevice and installs wrappers in the device's dispatch table. + */ +#define _GNU_SOURCE +#include "vkb_server.h" +#include "server_emu.h" + +#include +#include + +static int token(const char *list, const char *t) +{ + size_t n = strlen(t); + for (const char *p = list; p && (p = strstr(p, t)); p += n) + if ((p == list || p[-1] == ',') && (p[n] == ',' || p[n] == 0)) return 1; + return 0; +} + +static int env_off(const char *name) +{ + const char *v = getenv(name); + return v && !strcmp(v, "0"); +} + +uint32_t vkb_emu_detect(const vkb_dispatch *idt, VkPhysicalDevice pd, uint32_t *missing) +{ + VkPhysicalDeviceFeatures f; + idt->vkGetPhysicalDeviceFeatures(pd, &f); + uint32_t n = 0; + idt->vkEnumerateDeviceExtensionProperties(pd, NULL, &n, NULL); + VkExtensionProperties *e = calloc(n ? n : 1, sizeof(*e)); + idt->vkEnumerateDeviceExtensionProperties(pd, NULL, &n, e); + int divisor = 0, depth_clip = 0, maint5 = 0, robust2 = 0; + for (uint32_t i = 0; i < n; i++) { + if (!strcmp(e[i].extensionName, "VK_EXT_vertex_attribute_divisor") || + !strcmp(e[i].extensionName, "VK_KHR_vertex_attribute_divisor")) + divisor = 1; + if (!strcmp(e[i].extensionName, "VK_EXT_depth_clip_enable")) depth_clip = 1; + if (!strcmp(e[i].extensionName, "VK_KHR_maintenance5")) maint5 = 1; + if (!strcmp(e[i].extensionName, "VK_EXT_robustness2") || !strcmp(e[i].extensionName, "VK_KHR_robustness2")) robust2 = 1; + } + free(e); + /* VKBRIDGE_FAKE_MISSING=bc,divisor,clip,cull,depthclip pretends the GPU lacks them (host tests). */ + const char *fake = getenv("VKBRIDGE_FAKE_MISSING"); + if (fake) { + if (token(fake, "bc")) f.textureCompressionBC = VK_FALSE; + if (token(fake, "divisor")) divisor = 0; + if (token(fake, "clip")) f.shaderClipDistance = VK_FALSE; + if (token(fake, "cull")) f.shaderCullDistance = VK_FALSE; + if (token(fake, "depthclip")) depth_clip = 0; + if (token(fake, "maint5")) maint5 = 0; + if (token(fake, "robustness2")) robust2 = 0; + } + uint32_t emu = 0; + VkPhysicalDeviceProperties props; + idt->vkGetPhysicalDeviceProperties(pd, &props); + /* Vulkan 1.4 has maintenance5 in core. */ + if (!maint5 && (props.apiVersion < VK_API_VERSION_1_4 || (fake && token(fake, "maint5"))) && !env_off("VKBRIDGE_EMU_MAINT5")) + emu |= VKB_EMU_MAINT5; + if (!f.textureCompressionBC && vkb_emu_bcn_supported(idt, pd) && !env_off("VKBRIDGE_EMU_BCN")) emu |= VKB_EMU_BCN; + if (!divisor && !env_off("VKBRIDGE_EMU_DIVISOR")) emu |= VKB_EMU_DIVISOR; + if (!f.shaderClipDistance && !env_off("VKBRIDGE_EMU_CLIP")) emu |= VKB_EMU_CLIP_DISTANCE; + if (!f.shaderCullDistance && !env_off("VKBRIDGE_EMU_CULL")) emu |= VKB_EMU_CULL_DISTANCE; + if (!depth_clip && f.depthClamp && !env_off("VKBRIDGE_EMU_DEPTHCLIP")) emu |= VKB_EMU_DEPTH_CLIP; + /* DXVK will not start without robustness2. Mali r44 lacks it; GameNative's wrapper reports it + * (robustBufferAccess2, robustImageAccess2, nullDescriptor) without enforcing it, and DXVK + * games run - out-of-bounds reads and null descriptors are then up to the driver. */ + if (!robust2 && f.robustBufferAccess && !env_off("VKBRIDGE_EMU_ROBUSTNESS2")) emu |= VKB_EMU_ROBUSTNESS2; + /* PointSize in geometry/tessellation stages: stripped when the feature is missing. */ + if (!f.shaderTessellationAndGeometryPointSize && (f.geometryShader || f.tessellationShader)) emu |= VKB_EMU_POINT_SIZE; + uint32_t miss = 0; + if (!f.textureCompressionBC) miss |= VKB_EMU_BCN; + if (!divisor) miss |= VKB_EMU_DIVISOR; + if (!f.shaderClipDistance) miss |= VKB_EMU_CLIP_DISTANCE; + if (!f.shaderCullDistance) miss |= VKB_EMU_CULL_DISTANCE; + if (!depth_clip) miss |= VKB_EMU_DEPTH_CLIP; + if (emu & VKB_EMU_MAINT5) miss |= VKB_EMU_MAINT5; + if (!robust2) miss |= VKB_EMU_ROBUSTNESS2; + *missing = miss; + return emu & VKB_EMU_IMPLEMENTED; +} + +/* Remove a structure from a pNext chain (the chain lives in the request's arena). */ +static void chain_remove(VkDeviceCreateInfo *ci, VkStructureType t) +{ + VkBaseOutStructure *prev = (VkBaseOutStructure *)ci; + while (prev->pNext) { + if (prev->pNext->sType == t) prev->pNext = prev->pNext->pNext; + else prev = prev->pNext; + } +} + +static VkPhysicalDeviceFeatures *find_features(VkDeviceCreateInfo *ci) +{ + if (ci->pEnabledFeatures) return (VkPhysicalDeviceFeatures *)ci->pEnabledFeatures; + for (VkBaseOutStructure *b = (VkBaseOutStructure *)ci->pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2) return &((VkPhysicalDeviceFeatures2 *)b)->features; + return NULL; +} + +void vkb_emu_device_create_info(vkb_srv_table *inst, VkPhysicalDevice pd, uint32_t emu, VkDeviceCreateInfo *ci, vkb_arena *a) +{ + VkPhysicalDeviceFeatures real; + inst->real.vkGetPhysicalDeviceFeatures(pd, &real); + VkPhysicalDeviceFeatures *f = find_features(ci); + if ((emu & (VKB_EMU_BCN | VKB_EMU_DEPTH_CLIP)) && !f) { + /* The BC decoder writes R8/RG8 storage images: it needs this feature on, so the request + * gets a features structure if it had none. */ + f = vkb_arena_alloc(a, sizeof(*f)); + ci->pEnabledFeatures = f; + } + if (f) { + /* pEnabledFeatures came from the request: it is ours to change. Anything the client asked + * for that the GPU does not have is either emulated or would fail the call. */ + VkBool32 *want = (VkBool32 *)f; + const VkBool32 *have = (const VkBool32 *)ℜ + for (size_t i = 0; i < sizeof(*f) / sizeof(VkBool32); i++) { + if (want[i] && !have[i]) want[i] = VK_FALSE; + } + if (emu & VKB_EMU_BCN) f->shaderStorageImageExtendedFormats = VK_TRUE; + if (emu & VKB_EMU_DEPTH_CLIP) f->depthClamp = VK_TRUE; + } + if (emu & VKB_EMU_DIVISOR) chain_remove(ci, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT); + if (emu & VKB_EMU_DEPTH_CLIP) chain_remove(ci, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT); + if (emu & VKB_EMU_MAINT5) chain_remove(ci, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES); + if (emu & VKB_EMU_ROBUSTNESS2) { + chain_remove(ci, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT); + /* What robustness the GPU has stays on; robustBufferAccess2 asks for at least that. */ + VkPhysicalDeviceFeatures *rf = find_features(ci); + if (rf) rf->robustBufferAccess = VK_TRUE; + } +} + +void vkb_emu_device_init(vkb_srv_table *dev, uint32_t emu) +{ + if (!emu) return; + vkb_emu_device *e = calloc(1, sizeof(*e)); + e->flags = emu; + e->dev = dev; + pthread_mutex_init(&e->lock, NULL); + dev->emu = e; + vkb_emu_install(dev); +} + +void vkb_emu_device_destroy(vkb_srv_table *dev) +{ + if (!dev->emu) return; + vkb_emu_uninstall(dev); + pthread_mutex_destroy(&dev->emu->lock); + free(dev->emu); + dev->emu = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_emu.h b/app/src/main/cpp/vkbridge/server_emu.h new file mode 100644 index 000000000..ed079692e --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu.h @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#ifndef VKB_SERVER_EMU_H +#define VKB_SERVER_EMU_H + +#include "vkb_server.h" + +/* Emulations that are implemented (the rest are never offered to the client). */ +#define VKB_EMU_IMPLEMENTED (VKB_EMU_MAINT5 | VKB_EMU_CLIP_DISTANCE | VKB_EMU_CULL_DISTANCE | VKB_EMU_POINT_SIZE | VKB_EMU_BCN | \ + VKB_EMU_DIVISOR | VKB_EMU_DEPTH_CLIP | VKB_EMU_ROBUSTNESS2) + +#define VKB_EMU_BUCKETS 1024 + +typedef struct vkb_emu_image { + VkImage image; + VkImageType type; + VkFormat format; /* what the driver holds */ + VkFormat client_format; /* what the app asked for (differs for emulated formats) */ + VkExtent3D extent; + uint32_t mips, layers; + void *emu; /* per-emulation state (BCn: decode resources) */ + struct vkb_emu_image *next; +} vkb_emu_image; + +typedef struct vkb_emu_buffer { + VkBuffer buffer; + VkDeviceSize size; + struct vkb_emu_buffer *next; +} vkb_emu_buffer; + +typedef struct vkb_emu_device { + uint32_t flags; + vkb_srv_table *dev; + pthread_mutex_t lock; + vkb_emu_image *images[VKB_EMU_BUCKETS]; + vkb_emu_buffer *buffers[VKB_EMU_BUCKETS]; + void *bcn; /* server_emu_bcn.c */ + void *cmdstate; /* server_emu_cmdstate.c */ + void *divisor; /* server_emu_divisor.c */ + void *shaders; /* server_emu_shader.c */ +} vkb_emu_device; + +/* command buffer state (server_emu_cmdstate.c) */ +void vkb_emu_cmdstate_install(vkb_srv_table *dev); +void vkb_emu_cmdstate_uninstall(vkb_srv_table *dev); +void vkb_emu_restore_compute(vkb_emu_device *e, VkCommandBuffer cb); +void *vkb_emu_cb_gfx(vkb_emu_device *e, VkCommandBuffer cb, size_t size); +VkDescriptorSet vkb_emu_cb_scratch_set(vkb_emu_device *e, VkCommandBuffer cb, VkDescriptorSetLayout dsl); +/* vertex attribute divisor (server_emu_divisor.c) */ +typedef struct div_info div_info; +size_t vkb_emu_divisor_info_size(void); +void vkb_emu_divisor_pipeline(vkb_emu_device *e, VkDevice device, VkGraphicsPipelineCreateInfo *ci, div_info *out); +void vkb_emu_divisor_created(vkb_emu_device *e, VkDevice device, VkPipelineCache cache, const VkGraphicsPipelineCreateInfo *ci, + VkPipeline p, div_info *info); +void vkb_emu_divisor_install(vkb_srv_table *dev); +void vkb_emu_divisor_uninstall(vkb_srv_table *dev); +void vkb_emu_gfx_bind_pipeline(vkb_emu_device *e, VkCommandBuffer cb, VkPipeline p); +void vkb_emu_gfx_reset(void *gfx); +void vkb_emu_gfx_free(void *gfx); +/* BCn (server_emu_bcn.c) */ +void vkb_emu_bcn_install(vkb_srv_table *dev); +void vkb_emu_bcn_uninstall(vkb_srv_table *dev); +VkFormat vkb_emu_bcn_view_format(vkb_emu_device *e, VkImage image, VkFormat requested); +void vkb_emu_bcn_buffer_usage(vkb_emu_device *e, VkBufferCreateInfo *ci); +int vkb_emu_bcn_blocks_readback(vkb_emu_device *e, VkImage img); + +/* layer (server_emu_layer.c) */ +void vkb_emu_depth_clip_pipeline(vkb_emu_device *e, VkGraphicsPipelineCreateInfo *ci); +void vkb_emu_depth_clip_install(vkb_srv_table *dev); +vkb_emu_device *vkb_emu_cur(void); +const vkb_dispatch *vkb_emu_real(void); +void *vkb_emu_chain_take(const void *head, VkStructureType t); +vkb_emu_image *vkb_emu_find_image(vkb_emu_device *e, VkImage img); +void vkb_emu_track_image(vkb_emu_device *e, VkImage img, const VkImageCreateInfo *ci, VkFormat client_format); + +/* feature hooks (server_emu_features.c and friends) */ +int vkb_emu_bcn_supported(const vkb_dispatch *idt, VkPhysicalDevice pd); +void vkb_emu_install(vkb_srv_table *dev); +void vkb_emu_uninstall(vkb_srv_table *dev); +void vkb_emu_install_features(vkb_srv_table *dev); +void vkb_emu_uninstall_features(vkb_srv_table *dev); +void vkb_emu_image_create_info(vkb_emu_device *e, VkImageCreateInfo *ci); +void vkb_emu_image_release(vkb_emu_device *e, vkb_emu_image *img); +/* Rewrites a graphics pipeline's shaders; temporary modules are appended to mods. */ +void vkb_emu_shader_pipeline(vkb_emu_device *e, VkDevice device, VkGraphicsPipelineCreateInfo *ci, VkShaderModule *mods, + uint32_t *nmods, uint32_t cap); +void vkb_emu_shader_install(vkb_srv_table *dev); +VkShaderModule vkb_emu_shader_zero_base_instance(vkb_emu_device *e, VkDevice device, const VkPipelineShaderStageCreateInfo *vs); +void vkb_emu_shader_uninstall(vkb_srv_table *dev); +/* 1 = handled (the emulation recorded its own commands instead). */ +int vkb_emu_copy_image(vkb_emu_device *e, VkCommandBuffer cb, VkImage src, VkImageLayout sl, VkImage dst, VkImageLayout dl, + uint32_t n, const VkImageCopy *regions); +int vkb_emu_copy_image2(vkb_emu_device *e, VkCommandBuffer cb, const VkCopyImageInfo2 *info); +int vkb_emu_copy_buffer_to_image(vkb_emu_device *e, VkCommandBuffer cb, VkBuffer src, VkImage dst, VkImageLayout dl, uint32_t n, + const VkBufferImageCopy *regions); +int vkb_emu_copy_buffer_to_image2(vkb_emu_device *e, VkCommandBuffer cb, const VkCopyBufferToImageInfo2 *info); + +#endif diff --git a/app/src/main/cpp/vkbridge/server_emu_bcn.c b/app/src/main/cpp/vkbridge/server_emu_bcn.c new file mode 100644 index 000000000..12c439774 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu_bcn.c @@ -0,0 +1,432 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * BC1-BC7 textures on a GPU without them (textureCompressionBC missing; DXVK and vkd3d-proton + * refuse such a device). The image the app creates in a BC format is created decoded instead + * (RGBA8 / R8 / RG8 / RGBA16F, see vkb_emu_formats.h), mutable so sRGB/SNORM views work, and + * every upload - vkCmdCopyBufferToImage(2), how all BC data arrives - becomes a compute dispatch + * that decodes the blocks from the source buffer straight into it (shaders/bc_decode.comp). The + * app's compute bindings are restored afterwards (server_emu_cmdstate.c). + * + * Not emulated (logged once): reading a BC image back to a buffer, and copies between BC and + * uncompressed images (they would need an encoder). + */ +#define _GNU_SOURCE +#include "server_emu.h" +#include "vkb_emu_formats.h" +#include "bc_spv.h" + +#include +#include + +enum { FAM_BC1, FAM_BC2, FAM_BC3, FAM_BC4, FAM_BC5, FAM_BC6H, FAM_BC7, FAM_COUNT }; + +typedef struct bcn_state { + VkDescriptorSetLayout dsl; + VkPipelineLayout layout; + VkPipeline pipes[FAM_COUNT]; + VkDeviceSize ssbo_align; + int push; /* VK_KHR_push_descriptor; else per-command-buffer sets */ + pthread_mutex_t lock; +} bcn_state; + +typedef struct bcn_image { + VkImageView views[16]; /* per mip: 2D array storage view of every layer */ +} bcn_image; + +typedef struct pc_t { + uint32_t src_word, row_blocks, layer_blocks, flags; + int32_t dst_off[2]; + uint32_t extent[2]; +} pc_t; + +static int family(VkFormat f) +{ + switch (f) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: return FAM_BC1; + case VK_FORMAT_BC2_UNORM_BLOCK: case VK_FORMAT_BC2_SRGB_BLOCK: return FAM_BC2; + case VK_FORMAT_BC3_UNORM_BLOCK: case VK_FORMAT_BC3_SRGB_BLOCK: return FAM_BC3; + case VK_FORMAT_BC4_UNORM_BLOCK: case VK_FORMAT_BC4_SNORM_BLOCK: return FAM_BC4; + case VK_FORMAT_BC5_UNORM_BLOCK: case VK_FORMAT_BC5_SNORM_BLOCK: return FAM_BC5; + case VK_FORMAT_BC6H_UFLOAT_BLOCK: case VK_FORMAT_BC6H_SFLOAT_BLOCK: return FAM_BC6H; + default: return FAM_BC7; + } +} + +static uint32_t family_flags(VkFormat f) +{ + uint32_t fl = 0; + if (f == VK_FORMAT_BC1_RGB_UNORM_BLOCK || f == VK_FORMAT_BC1_RGB_SRGB_BLOCK) fl |= 1; + if (f == VK_FORMAT_BC4_SNORM_BLOCK || f == VK_FORMAT_BC5_SNORM_BLOCK || f == VK_FORMAT_BC6H_SFLOAT_BLOCK) fl |= 2; + return fl; +} + +int vkb_emu_bcn_supported(const vkb_dispatch *idt, VkPhysicalDevice pd) +{ + VkPhysicalDeviceFeatures f; + idt->vkGetPhysicalDeviceFeatures(pd, &f); + if (!f.shaderStorageImageExtendedFormats) { + VKB_WARN("BC emulation: the GPU lacks shaderStorageImageExtendedFormats"); + return 0; + } + static const VkFormat need[] = {VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R16G16B16A16_SFLOAT}; + for (size_t i = 0; i < sizeof(need) / sizeof(need[0]); i++) { + VkFormatProperties fp; + idt->vkGetPhysicalDeviceFormatProperties(pd, need[i], &fp); + if (!(fp.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) { + VKB_WARN("BC emulation: format %d cannot be a storage image", need[i]); + return 0; + } + } + VkPhysicalDeviceProperties p; + idt->vkGetPhysicalDeviceProperties(pd, &p); + if (p.apiVersion >= VK_API_VERSION_1_4) return 1; + uint32_t n = 0; + idt->vkEnumerateDeviceExtensionProperties(pd, NULL, &n, NULL); + VkExtensionProperties *e = calloc(n ? n : 1, sizeof(*e)); + idt->vkEnumerateDeviceExtensionProperties(pd, NULL, &n, e); + free(e); + /* Without VK_KHR_push_descriptor (Mali-G720 on driver 44.1) the decoder binds ordinary sets. */ + return 1; +} + +/* Push descriptors for the decoder; without them, sets from the command buffer's scratch pools. + * VKBRIDGE_FAKE_MISSING=...,push takes the second way on a GPU that has them (host tests). */ +static int has_push(vkb_srv_table *dev) +{ + const char *fake = getenv("VKBRIDGE_FAKE_MISSING"); + if (fake && strstr(fake, "push")) return 0; + VkPhysicalDeviceProperties p; + dev->real.vkGetPhysicalDeviceProperties(dev->physical, &p); + if (p.apiVersion >= VK_API_VERSION_1_4 && dev->api_version >= VK_API_VERSION_1_4) return dev->real.vkCmdPushDescriptorSet != NULL; + uint32_t n = 0; + dev->real.vkEnumerateDeviceExtensionProperties(dev->physical, NULL, &n, NULL); + VkExtensionProperties *e = calloc(n ? n : 1, sizeof(*e)); + dev->real.vkEnumerateDeviceExtensionProperties(dev->physical, NULL, &n, e); + int ok = 0; + for (uint32_t i = 0; i < n; i++) ok |= !strcmp(e[i].extensionName, "VK_KHR_push_descriptor"); + free(e); + return ok && dev->real.vkCmdPushDescriptorSet != NULL; +} + +/* ------------------------------------------------------------------ images */ + +void vkb_emu_image_create_info(vkb_emu_device *e, VkImageCreateInfo *ci) +{ + if (!(e->flags & VKB_EMU_BCN) || !vkb_is_bc(ci->format)) return; + /* The image keeps the meaning of the app's format (sRGB, SNORM) so blits and copies convert as + * they would; the decoder writes it through a view in the storage format (EXTENDED_USAGE lets + * the image carry STORAGE although sRGB/SNORM formats cannot be stored to). */ + static __thread VkFormat list[2]; + VkFormat view = vkb_bc_view_format(ci->format), st = vkb_bc_storage_format(ci->format); + list[0] = view; + list[1] = st; + ci->format = view; + ci->flags &= ~(VkImageCreateFlags)VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT; + ci->flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT; + ci->usage |= VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + for (VkBaseOutStructure *b = (VkBaseOutStructure *)ci->pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO) { + VkImageFormatListCreateInfo *fl = (VkImageFormatListCreateInfo *)b; + fl->viewFormatCount = view == st ? 1 : 2; + fl->pViewFormats = list; + } + } +} + +void vkb_emu_image_release(vkb_emu_device *e, vkb_emu_image *img) +{ + bcn_image *bi = img->emu; + if (!bi) return; + for (int i = 0; i < 16; i++) + if (bi->views[i]) e->dev->real.vkDestroyImageView(e->dev->device, bi->views[i], NULL); + free(bi); + img->emu = NULL; +} + +VkFormat vkb_emu_bcn_view_format(vkb_emu_device *e, VkImage image, VkFormat requested) +{ + if (!(e->flags & VKB_EMU_BCN)) return requested; + if (vkb_is_bc(requested)) return vkb_bc_view_format(requested); + vkb_emu_image *r = vkb_emu_find_image(e, image); + if (r && vkb_is_bc(r->client_format)) { + VKB_ONCE(VKB_LOG_WARN, "BC emulation: an uncompressed view (format %d) of a BC image shows decoded texels (logged once)", requested); + return vkb_bc_view_format(r->client_format); + } + return requested; +} + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateImageView(VkDevice device, const VkImageViewCreateInfo *ci, + const VkAllocationCallbacks *pAllocator, VkImageView *pView) +{ + VkImageViewCreateInfo *v = (VkImageViewCreateInfo *)ci; + v->format = vkb_emu_bcn_view_format(vkb_emu_cur(), ci->image, ci->format); + return vkb_emu_real()->vkCreateImageView(device, v, pAllocator, pView); +} + +void vkb_emu_bcn_buffer_usage(vkb_emu_device *e, VkBufferCreateInfo *ci) +{ + /* The decoder reads uploads as a storage buffer. */ + if ((e->flags & VKB_EMU_BCN) && (ci->usage & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)) ci->usage |= VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; +} + +/* ------------------------------------------------------------------ decoder */ + +static VkPipeline pipeline(vkb_emu_device *e, int fam) +{ + bcn_state *s = e->bcn; + if (s->pipes[fam]) return s->pipes[fam]; + pthread_mutex_lock(&s->lock); + if (!s->pipes[fam]) { + static const uint32_t *const code[FAM_COUNT] = {spv_bc1, spv_bc2, spv_bc3, spv_bc4, spv_bc5, spv_bc6h, spv_bc7}; + static const size_t size[FAM_COUNT] = {sizeof(spv_bc1), sizeof(spv_bc2), sizeof(spv_bc3), sizeof(spv_bc4), + sizeof(spv_bc5), sizeof(spv_bc6h), sizeof(spv_bc7)}; + const vkb_dispatch *r = &e->dev->real; + VkDevice d = e->dev->device; + VkShaderModuleCreateInfo mci = {VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, NULL, 0, size[fam], code[fam]}; + VkShaderModule m; + if (r->vkCreateShaderModule(d, &mci, NULL, &m) == VK_SUCCESS) { + VkComputePipelineCreateInfo pci = {VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + pci.stage = (VkPipelineShaderStageCreateInfo){VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL, 0, + VK_SHADER_STAGE_COMPUTE_BIT, m, "main", NULL}; + pci.layout = s->layout; + if (r->vkCreateComputePipelines(d, VK_NULL_HANDLE, 1, &pci, NULL, &s->pipes[fam]) != VK_SUCCESS) { + VKB_ERR("BC emulation: decoder pipeline %d failed to build", fam); + s->pipes[fam] = VK_NULL_HANDLE; + } + r->vkDestroyShaderModule(d, m, NULL); + } + } + pthread_mutex_unlock(&s->lock); + return s->pipes[fam]; +} + +static VkImageView storage_view(vkb_emu_device *e, vkb_emu_image *img, uint32_t mip) +{ + if (mip >= 16) return VK_NULL_HANDLE; + pthread_mutex_lock(&e->lock); + if (!img->emu) img->emu = calloc(1, sizeof(bcn_image)); + bcn_image *bi = img->emu; + VkImageView v = bi->views[mip]; + pthread_mutex_unlock(&e->lock); + if (v) return v; + VkImageViewUsageCreateInfo usage = {VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, NULL, VK_IMAGE_USAGE_STORAGE_BIT}; + VkImageViewCreateInfo ci = {VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, &usage, 0, img->image, VK_IMAGE_VIEW_TYPE_2D_ARRAY, + vkb_bc_storage_format(img->client_format), + {0}, {VK_IMAGE_ASPECT_COLOR_BIT, mip, 1, 0, img->layers}}; + if (e->dev->real.vkCreateImageView(e->dev->device, &ci, NULL, &v) != VK_SUCCESS) return VK_NULL_HANDLE; + pthread_mutex_lock(&e->lock); + if (bi->views[mip]) { + e->dev->real.vkDestroyImageView(e->dev->device, v, NULL); + v = bi->views[mip]; + } else { + bi->views[mip] = v; + } + pthread_mutex_unlock(&e->lock); + return v; +} + +typedef struct region { + VkDeviceSize offset; + uint32_t row_length, image_height; + VkImageSubresourceLayers sub; + VkOffset3D ioff; + VkExtent3D iext; +} region; + +static void decode(vkb_emu_device *e, VkCommandBuffer cb, VkBuffer src, vkb_emu_image *img, VkImageLayout layout, + uint32_t n, const region *regs) +{ + bcn_state *s = e->bcn; + const vkb_dispatch *r = &e->dev->real; + if (img->type != VK_IMAGE_TYPE_2D) { + VKB_ONCE(VKB_LOG_WARN, "BC emulation: uploads to 1D/3D BC images are not decoded (logged once)"); + return; + } + VkPipeline pipe = pipeline(e, family(img->client_format)); + if (!pipe) return; + for (uint32_t i = 0; i < n; i++) { + const region *g = ®s[i]; + VkImageView view = storage_view(e, img, g->sub.mipLevel); + if (!view) continue; + VkImageSubresourceRange range = {VK_IMAGE_ASPECT_COLOR_BIT, g->sub.mipLevel, 1, g->sub.baseArrayLayer, g->sub.layerCount}; + VkMemoryBarrier mb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER, NULL, VK_ACCESS_MEMORY_WRITE_BIT, + VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT}; + VkImageMemoryBarrier ib = {VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_WRITE_BIT, + layout, VK_IMAGE_LAYOUT_GENERAL, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, img->image, range}; + r->vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + 0, 1, &mb, 0, NULL, 1, &ib); + VkDeviceSize aligned = g->offset & ~(s->ssbo_align - 1); + VkDescriptorBufferInfo bi = {src, aligned, VK_WHOLE_SIZE}; + VkDescriptorImageInfo ii = {VK_NULL_HANDLE, view, VK_IMAGE_LAYOUT_GENERAL}; + VkWriteDescriptorSet w[2] = { + {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, NULL, VK_NULL_HANDLE, 0, 0, 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, NULL, &bi, NULL}, + {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, NULL, VK_NULL_HANDLE, 1, 0, 1, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &ii, NULL, NULL}}; + r->vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_COMPUTE, pipe); + if (s->push) { + r->vkCmdPushDescriptorSet(cb, VK_PIPELINE_BIND_POINT_COMPUTE, s->layout, 0, 2, w); + } else { + VkDescriptorSet set = vkb_emu_cb_scratch_set(e, cb, s->dsl); + if (!set) { + VKB_ONCE(VKB_LOG_ERROR, "BC emulation: no descriptor set for the decoder (logged once)"); + continue; + } + w[0].dstSet = w[1].dstSet = set; + r->vkUpdateDescriptorSets(e->dev->device, 2, w, 0, NULL); + r->vkCmdBindDescriptorSets(cb, VK_PIPELINE_BIND_POINT_COMPUTE, s->layout, 0, 1, &set, 0, NULL); + } + uint32_t w_tex = g->row_length ? g->row_length : g->iext.width; + uint32_t h_tex = g->image_height ? g->image_height : g->iext.height; + pc_t pc; + pc.src_word = (uint32_t)((g->offset - aligned) / 4); + pc.row_blocks = (w_tex + 3) / 4; + pc.layer_blocks = pc.row_blocks * ((h_tex + 3) / 4); + pc.flags = family_flags(img->client_format) | (g->sub.baseArrayLayer << 8); + pc.dst_off[0] = g->ioff.x; + pc.dst_off[1] = g->ioff.y; + pc.extent[0] = g->iext.width; + pc.extent[1] = g->iext.height; + r->vkCmdPushConstants(cb, s->layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(pc), &pc); + uint32_t bw = (g->iext.width + 3) / 4, bh = (g->iext.height + 3) / 4; + r->vkCmdDispatch(cb, (bw + 7) / 8, (bh + 7) / 8, g->sub.layerCount); + ib.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; + ib.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT; + ib.oldLayout = VK_IMAGE_LAYOUT_GENERAL; + ib.newLayout = layout; + r->vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, NULL, 0, NULL, 1, &ib); + } + vkb_emu_restore_compute(e, cb); +} + +static vkb_emu_image *bc_image(vkb_emu_device *e, VkImage img) +{ + if (!(e->flags & VKB_EMU_BCN)) return NULL; + vkb_emu_image *r = vkb_emu_find_image(e, img); + return r && vkb_is_bc(r->client_format) ? r : NULL; +} + +int vkb_emu_copy_buffer_to_image(vkb_emu_device *e, VkCommandBuffer cb, VkBuffer src, VkImage dst, VkImageLayout dl, uint32_t n, + const VkBufferImageCopy *regions) +{ + vkb_emu_image *img = bc_image(e, dst); + if (!img) return 0; + region *g = malloc((n ? n : 1) * sizeof(*g)); + for (uint32_t i = 0; i < n; i++) + g[i] = (region){regions[i].bufferOffset, regions[i].bufferRowLength, regions[i].bufferImageHeight, regions[i].imageSubresource, + regions[i].imageOffset, regions[i].imageExtent}; + decode(e, cb, src, img, dl, n, g); + free(g); + return 1; +} + +int vkb_emu_copy_buffer_to_image2(vkb_emu_device *e, VkCommandBuffer cb, const VkCopyBufferToImageInfo2 *info) +{ + vkb_emu_image *img = bc_image(e, info->dstImage); + if (!img) return 0; + region *g = malloc((info->regionCount ? info->regionCount : 1) * sizeof(*g)); + for (uint32_t i = 0; i < info->regionCount; i++) { + const VkBufferImageCopy2 *r = &info->pRegions[i]; + g[i] = (region){r->bufferOffset, r->bufferRowLength, r->bufferImageHeight, r->imageSubresource, r->imageOffset, r->imageExtent}; + } + decode(e, cb, info->srcBuffer, img, info->dstImageLayout, info->regionCount, g); + free(g); + return 1; +} + +/* Copies between BC images copy decoded texels; a region may run past a small mip's edge (whole + * blocks), which the decoded image does not have. */ +static void clamp_region(const vkb_emu_image *s, const vkb_emu_image *d, const VkImageSubresourceLayers *ss, + const VkImageSubresourceLayers *ds, const VkOffset3D *so, const VkOffset3D *dof, VkExtent3D *ext) +{ + uint32_t sw = s->extent.width >> ss->mipLevel, sh = s->extent.height >> ss->mipLevel; + uint32_t dw = d->extent.width >> ds->mipLevel, dh = d->extent.height >> ds->mipLevel; + if (!sw) sw = 1; + if (!sh) sh = 1; + if (!dw) dw = 1; + if (!dh) dh = 1; + if ((uint32_t)so->x + ext->width > sw) ext->width = sw > (uint32_t)so->x ? sw - (uint32_t)so->x : 0; + if ((uint32_t)so->y + ext->height > sh) ext->height = sh > (uint32_t)so->y ? sh - (uint32_t)so->y : 0; + if ((uint32_t)dof->x + ext->width > dw) ext->width = dw > (uint32_t)dof->x ? dw - (uint32_t)dof->x : 0; + if ((uint32_t)dof->y + ext->height > dh) ext->height = dh > (uint32_t)dof->y ? dh - (uint32_t)dof->y : 0; +} + +int vkb_emu_copy_image(vkb_emu_device *e, VkCommandBuffer cb, VkImage src, VkImageLayout sl, VkImage dst, VkImageLayout dl, uint32_t n, + const VkImageCopy *regions) +{ + vkb_emu_image *s = bc_image(e, src), *d = bc_image(e, dst); + if (!s && !d) return 0; + if (!s || !d || vkb_bc_storage_format(s->client_format) != vkb_bc_storage_format(d->client_format)) { + VKB_ONCE(VKB_LOG_WARN, "BC emulation: a copy between a BC image and another format is skipped (logged once)"); + return 1; + } + VkImageCopy *c = (VkImageCopy *)regions; + for (uint32_t i = 0; i < n; i++) + clamp_region(s, d, &c[i].srcSubresource, &c[i].dstSubresource, &c[i].srcOffset, &c[i].dstOffset, &c[i].extent); + e->dev->real.vkCmdCopyImage(cb, src, sl, dst, dl, n, regions); + return 1; +} + +int vkb_emu_copy_image2(vkb_emu_device *e, VkCommandBuffer cb, const VkCopyImageInfo2 *info) +{ + vkb_emu_image *s = bc_image(e, info->srcImage), *d = bc_image(e, info->dstImage); + if (!s && !d) return 0; + if (!s || !d || vkb_bc_storage_format(s->client_format) != vkb_bc_storage_format(d->client_format)) { + VKB_ONCE(VKB_LOG_WARN, "BC emulation: a copy between a BC image and another format is skipped (logged once)"); + return 1; + } + VkImageCopy2 *c = (VkImageCopy2 *)info->pRegions; + for (uint32_t i = 0; i < info->regionCount; i++) + clamp_region(s, d, &c[i].srcSubresource, &c[i].dstSubresource, &c[i].srcOffset, &c[i].dstOffset, &c[i].extent); + e->dev->real.vkCmdCopyImage2(cb, info); + return 1; +} + +int vkb_emu_bcn_blocks_readback(vkb_emu_device *e, VkImage img) +{ + if (!bc_image(e, img)) return 0; + VKB_ONCE(VKB_LOG_WARN, "BC emulation: reading a BC image back to a buffer is not supported (logged once)"); + return 1; +} + +/* ------------------------------------------------------------------ install */ + +void vkb_emu_bcn_install(vkb_srv_table *dev) +{ + vkb_emu_device *e = dev->emu; + if (!(e->flags & VKB_EMU_BCN)) return; + bcn_state *s = calloc(1, sizeof(*s)); + pthread_mutex_init(&s->lock, NULL); + VkPhysicalDeviceProperties p; + dev->real.vkGetPhysicalDeviceProperties(dev->physical, &p); + s->ssbo_align = p.limits.minStorageBufferOffsetAlignment ? p.limits.minStorageBufferOffsetAlignment : 4; + VkDescriptorSetLayoutBinding b[2] = {{0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, + {1, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}}; + s->push = has_push(dev); + VKB_INFO("BC emulation: decoder binds with %s", s->push ? "push descriptors" : "descriptor sets (no VK_KHR_push_descriptor)"); + VkDescriptorSetLayoutCreateInfo dci = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, NULL, + s->push ? VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT : 0, 2, b}; + VkPushConstantRange pr = {VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(pc_t)}; + if (dev->real.vkCreateDescriptorSetLayout(dev->device, &dci, NULL, &s->dsl) != VK_SUCCESS) { + VKB_ERR("BC emulation: cannot create the decoder's descriptor layout"); + free(s); + e->flags &= ~VKB_EMU_BCN; + return; + } + VkPipelineLayoutCreateInfo plci = {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, NULL, 0, 1, &s->dsl, 1, &pr}; + dev->real.vkCreatePipelineLayout(dev->device, &plci, NULL, &s->layout); + e->bcn = s; + dev->dt.vkCreateImageView = emu_CreateImageView; +} + +void vkb_emu_bcn_uninstall(vkb_srv_table *dev) +{ + bcn_state *s = dev->emu->bcn; + if (!s) return; + for (int i = 0; i < FAM_COUNT; i++) + if (s->pipes[i]) dev->real.vkDestroyPipeline(dev->device, s->pipes[i], NULL); + dev->real.vkDestroyPipelineLayout(dev->device, s->layout, NULL); + dev->real.vkDestroyDescriptorSetLayout(dev->device, s->dsl, NULL); + pthread_mutex_destroy(&s->lock); + free(s); + dev->emu->bcn = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_emu_cmdstate.c b/app/src/main/cpp/vkbridge/server_emu_cmdstate.c new file mode 100644 index 000000000..9d9a66fb5 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu_cmdstate.c @@ -0,0 +1,290 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * What an app has bound in a command buffer, for emulations that record commands of their own + * into it (the BCn decoder's dispatches) and must leave the app's state as it was: the compute + * pipeline, compute descriptor sets, push constants and push descriptors. Bind calls are kept as + * they were made (a later call that covers an earlier one replaces it) and replayed in order. + */ +#define _GNU_SOURCE +#include "server_emu.h" + +#include +#include + +typedef struct bind_sets { + VkPipelineLayout layout; + uint32_t first, count, ndyn; + VkDescriptorSet sets[32]; + uint32_t dyn[64]; +} bind_sets; + +typedef struct push_consts { + VkPipelineLayout layout; + VkShaderStageFlags stages; + uint32_t offset, size; + uint8_t data[256]; +} push_consts; + +typedef struct push_tmpl { + VkDescriptorUpdateTemplate tmpl; + VkPipelineLayout layout; + uint32_t set; + void *data; + size_t size; +} push_tmpl; + +typedef struct cb_state { + VkCommandBuffer cb; + VkPipeline compute_pipeline; + bind_sets *sets; + uint32_t nsets, capsets; + push_consts *pcs; + uint32_t npcs, cappcs; + push_tmpl *pts; + uint32_t npts, cappts; + void *gfx; /* graphics-side state (divisor emulation) */ + /* Descriptor sets emulations record with (no push descriptors), alive until the next begin. */ + VkDescriptorPool *scratch; + uint32_t nscratch, cur_scratch, used_scratch; + struct cb_state *next; +} cb_state; + +#define CB_BUCKETS 512 +#define SCRATCH_SETS 64 +typedef struct cmdstate { + pthread_mutex_t lock; + cb_state *b[CB_BUCKETS]; +} cmdstate; + +/* Packed size of the template data being pushed (set by the raw push handler, server_misc.c). */ +__thread size_t vkb_emu_push_size; + +static cmdstate *g_states_for(vkb_emu_device *e) { return (cmdstate *)e->cmdstate; } + +static unsigned ch(VkCommandBuffer cb) +{ + uint64_t k = (uint64_t)(uintptr_t)cb; + k ^= k >> 30; + k *= 0xbf58476d1ce4e5b9ull; + return (unsigned)(k >> 55) & (CB_BUCKETS - 1); +} + +static cb_state *get(vkb_emu_device *e, VkCommandBuffer cb) +{ + cmdstate *s = g_states_for(e); + pthread_mutex_lock(&s->lock); + cb_state *c = s->b[ch(cb)]; + while (c && c->cb != cb) c = c->next; + if (!c) { + c = calloc(1, sizeof(*c)); + c->cb = cb; + c->next = s->b[ch(cb)]; + s->b[ch(cb)] = c; + } + pthread_mutex_unlock(&s->lock); + return c; +} + +/* A descriptor set of layout `dsl` (storage buffers and images only) for a command the emulation + * records into cb; it lives until cb is begun again, when the app has seen the work finish. */ +VkDescriptorSet vkb_emu_cb_scratch_set(vkb_emu_device *e, VkCommandBuffer cb, VkDescriptorSetLayout dsl) +{ + cb_state *c = get(e, cb); + const vkb_dispatch *r = &e->dev->real; + for (;;) { + if (c->cur_scratch >= c->nscratch) { + VkDescriptorPoolSize sizes[2] = {{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, SCRATCH_SETS * 2}, + {VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, SCRATCH_SETS * 2}}; + VkDescriptorPoolCreateInfo pci = {VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, NULL, 0, SCRATCH_SETS, 2, sizes}; + VkDescriptorPool pool; + VkDescriptorPool *np = realloc(c->scratch, (c->nscratch + 1) * sizeof(*np)); + if (!np) return VK_NULL_HANDLE; + c->scratch = np; + if (r->vkCreateDescriptorPool(e->dev->device, &pci, NULL, &pool) != VK_SUCCESS) return VK_NULL_HANDLE; + c->scratch[c->nscratch++] = pool; + } + if (c->used_scratch < SCRATCH_SETS) { + VkDescriptorSetAllocateInfo ai = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, NULL, c->scratch[c->cur_scratch], 1, &dsl}; + VkDescriptorSet set; + if (r->vkAllocateDescriptorSets(e->dev->device, &ai, &set) == VK_SUCCESS) { + c->used_scratch++; + return set; + } + } + c->cur_scratch++; + c->used_scratch = 0; + } +} + +void *vkb_emu_cb_gfx(vkb_emu_device *e, VkCommandBuffer cb, size_t size) +{ + cb_state *c = get(e, cb); + if (!c->gfx) c->gfx = calloc(1, size); + return c->gfx; +} + +static void reset(vkb_emu_device *e, cb_state *c) +{ + for (uint32_t i = 0; i < c->nscratch && i <= c->cur_scratch; i++) + e->dev->real.vkResetDescriptorPool(e->dev->device, c->scratch[i], 0); + c->cur_scratch = 0; + c->used_scratch = 0; + c->compute_pipeline = VK_NULL_HANDLE; + c->nsets = 0; + c->npcs = 0; + for (uint32_t i = 0; i < c->npts; i++) free(c->pts[i].data); + c->npts = 0; + vkb_emu_gfx_reset(c->gfx); +} + +/* ------------------------------------------------------------------ wrappers */ + +static VKAPI_ATTR VkResult VKAPI_CALL emu_BeginCommandBuffer(VkCommandBuffer cb, const VkCommandBufferBeginInfo *info) +{ + reset(vkb_emu_cur(), get(vkb_emu_cur(), cb)); + return vkb_emu_real()->vkBeginCommandBuffer(cb, info); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBindPipeline(VkCommandBuffer cb, VkPipelineBindPoint bp, VkPipeline p) +{ + vkb_emu_device *e = vkb_emu_cur(); + if (bp == VK_PIPELINE_BIND_POINT_COMPUTE) get(e, cb)->compute_pipeline = p; + if (bp == VK_PIPELINE_BIND_POINT_GRAPHICS) vkb_emu_gfx_bind_pipeline(e, cb, p); + vkb_emu_real()->vkCmdBindPipeline(cb, bp, p); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBindDescriptorSets(VkCommandBuffer cb, VkPipelineBindPoint bp, VkPipelineLayout layout, + uint32_t first, uint32_t count, const VkDescriptorSet *sets, + uint32_t ndyn, const uint32_t *dyn) +{ + if (bp == VK_PIPELINE_BIND_POINT_COMPUTE && count <= 32 && ndyn <= 64) { + cb_state *c = get(vkb_emu_cur(), cb); + /* Drop earlier calls this one covers completely. */ + uint32_t k = 0; + for (uint32_t i = 0; i < c->nsets; i++) { + bind_sets *b = &c->sets[i]; + if (b->first >= first && b->first + b->count <= first + count) continue; + c->sets[k++] = *b; + } + c->nsets = k; + if (c->nsets == c->capsets) { + c->capsets = c->capsets ? c->capsets * 2 : 8; + c->sets = realloc(c->sets, c->capsets * sizeof(*c->sets)); + } + bind_sets *b = &c->sets[c->nsets++]; + b->layout = layout; + b->first = first; + b->count = count; + b->ndyn = ndyn; + memcpy(b->sets, sets, count * sizeof(*sets)); + if (ndyn) memcpy(b->dyn, dyn, ndyn * sizeof(*dyn)); + } + vkb_emu_real()->vkCmdBindDescriptorSets(cb, bp, layout, first, count, sets, ndyn, dyn); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdPushConstants(VkCommandBuffer cb, VkPipelineLayout layout, VkShaderStageFlags stages, + uint32_t offset, uint32_t size, const void *data) +{ + if ((stages & VK_SHADER_STAGE_COMPUTE_BIT) && offset + size <= 256) { + cb_state *c = get(vkb_emu_cur(), cb); + uint32_t k = 0; + for (uint32_t i = 0; i < c->npcs; i++) { + push_consts *p = &c->pcs[i]; + if (p->offset >= offset && p->offset + p->size <= offset + size && p->stages == stages) continue; + c->pcs[k++] = *p; + } + c->npcs = k; + if (c->npcs == c->cappcs) { + c->cappcs = c->cappcs ? c->cappcs * 2 : 8; + c->pcs = realloc(c->pcs, c->cappcs * sizeof(*c->pcs)); + } + push_consts *p = &c->pcs[c->npcs++]; + p->layout = layout; + p->stages = stages; + p->offset = offset; + p->size = size; + memcpy(p->data + offset, data, size); + } + vkb_emu_real()->vkCmdPushConstants(cb, layout, stages, offset, size, data); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdPushDescriptorSetWithTemplate(VkCommandBuffer cb, VkDescriptorUpdateTemplate tmpl, + VkPipelineLayout layout, uint32_t set, const void *data) +{ + /* Only the template's bind point decides; recording it for both costs nothing when replayed + * into the same bind point it was made for. Sizes are unknown here: the bridge's raw template + * path hands over the packed size (vkb_emu_push_size). */ + vkb_emu_device *e = vkb_emu_cur(); + cb_state *c = get(e, cb); + size_t size = vkb_emu_push_size; + if (size && size < (1u << 20)) { + if (c->npts == c->cappts) { + c->cappts = c->cappts ? c->cappts * 2 : 4; + c->pts = realloc(c->pts, c->cappts * sizeof(*c->pts)); + } + push_tmpl *p = &c->pts[c->npts++]; + p->tmpl = tmpl; + p->layout = layout; + p->set = set; + p->size = size; + p->data = malloc(size); + memcpy(p->data, data, size); + } + vkb_emu_real()->vkCmdPushDescriptorSetWithTemplate(cb, tmpl, layout, set, data); +} + +/* Puts back what the app had bound for compute after an emulation recorded its own dispatch. */ +void vkb_emu_restore_compute(vkb_emu_device *e, VkCommandBuffer cb) +{ + cb_state *c = get(e, cb); + const vkb_dispatch *r = vkb_emu_real(); + if (c->compute_pipeline) r->vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_COMPUTE, c->compute_pipeline); + for (uint32_t i = 0; i < c->nsets; i++) { + bind_sets *b = &c->sets[i]; + r->vkCmdBindDescriptorSets(cb, VK_PIPELINE_BIND_POINT_COMPUTE, b->layout, b->first, b->count, b->sets, b->ndyn, b->dyn); + } + for (uint32_t i = 0; i < c->npts; i++) { + push_tmpl *p = &c->pts[i]; + r->vkCmdPushDescriptorSetWithTemplate(cb, p->tmpl, p->layout, p->set, p->data); + } + for (uint32_t i = 0; i < c->npcs; i++) { + push_consts *p = &c->pcs[i]; + r->vkCmdPushConstants(cb, p->layout, p->stages, p->offset, p->size, p->data + p->offset); + } +} + +void vkb_emu_cmdstate_install(vkb_srv_table *dev) +{ + vkb_emu_device *e = dev->emu; + cmdstate *s = calloc(1, sizeof(*s)); + pthread_mutex_init(&s->lock, NULL); + e->cmdstate = s; + dev->dt.vkBeginCommandBuffer = emu_BeginCommandBuffer; + dev->dt.vkCmdBindPipeline = emu_CmdBindPipeline; + dev->dt.vkCmdBindDescriptorSets = emu_CmdBindDescriptorSets; + dev->dt.vkCmdPushConstants = emu_CmdPushConstants; + if (dev->real.vkCmdPushDescriptorSetWithTemplate) dev->dt.vkCmdPushDescriptorSetWithTemplate = emu_CmdPushDescriptorSetWithTemplate; +} + +void vkb_emu_cmdstate_uninstall(vkb_srv_table *dev) +{ + cmdstate *s = dev->emu->cmdstate; + if (!s) return; + for (int i = 0; i < CB_BUCKETS; i++) { + while (s->b[i]) { + cb_state *c = s->b[i]; + s->b[i] = c->next; + reset(dev->emu, c); + for (uint32_t j = 0; j < c->nscratch; j++) dev->real.vkDestroyDescriptorPool(dev->device, c->scratch[j], NULL); + free(c->scratch); + free(c->sets); + free(c->pcs); + free(c->pts); + vkb_emu_gfx_free(c->gfx); + free(c); + } + } + pthread_mutex_destroy(&s->lock); + free(s); + dev->emu->cmdstate = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_emu_divisor.c b/app/src/main/cpp/vkbridge/server_emu_divisor.c new file mode 100644 index 000000000..e19fca47d --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu_divisor.c @@ -0,0 +1,454 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Vertex attribute divisor (VK_EXT/KHR_vertex_attribute_divisor) on a GPU without it. + * + * A binding with divisor d != 1 fetches element firstInstance + i / d for instance i (d = 0: always + * firstInstance). Emulated by giving such bindings a stride of 0 - every instance reads the same + * element - and rebinding the buffer at that element before each draw. With d > 1 the draw is + * split into runs of instances that share elements; each run keeps its own firstInstance, so + * gl_InstanceIndex and every ordinary instance-rate attribute stay exactly as they were. + * Indirect draws cannot be split on the CPU: divisor-0 bindings use element 0 there, d > 1 is + * approximated the same way (logged once). + */ +#define _GNU_SOURCE +#include "server_emu.h" + +#include +#include + +#define MAX_BIND 32 + +typedef struct div_info { + uint32_t mask; /* bindings emulated */ + uint32_t divisor[MAX_BIND]; + uint32_t stride[MAX_BIND]; /* the app's stride (baked pipelines) */ + int dynamic_stride; /* the pipeline takes strides at bind time */ + int dynamic_input; /* the pipeline takes vertex input at record time */ + int split; /* some divisor > 1: draws are split */ + VkPipeline zero_base; /* variant whose vertex shader reads BaseInstance as 0 */ + VkShaderModule zero_vs; /* its vertex shader, between creation steps */ + uint32_t vs_stage; +} div_info; + +typedef struct pipe_rec { + VkPipeline p; + div_info info; + struct pipe_rec *next; +} pipe_rec; + +typedef struct gfx_state { + VkPipeline pipeline; /* bound graphics pipeline */ + div_info pipe; /* the bound pipeline's */ + div_info dyn; /* from vkCmdSetVertexInputEXT */ + int use_dyn; + VkBuffer buf[MAX_BIND]; + VkDeviceSize off[MAX_BIND], size[MAX_BIND], stride[MAX_BIND]; + uint32_t bound; /* slots the app bound */ + uint32_t tampered; /* slots we rebound */ +} gfx_state; + +typedef struct div_state { + pthread_mutex_t lock; + pipe_rec *b[256]; +} div_state; + +static div_state *dstate(vkb_emu_device *e) { return e->divisor; } + +static unsigned ph(VkPipeline p) +{ + uint64_t k = (uint64_t)p; + k ^= k >> 33; + k *= 0xff51afd7ed558ccdull; + return (unsigned)(k >> 56); +} + +static const div_info *find_pipe(vkb_emu_device *e, VkPipeline p) +{ + div_state *s = dstate(e); + pthread_mutex_lock(&s->lock); + pipe_rec *r = s->b[ph(p)]; + while (r && r->p != p) r = r->next; + pthread_mutex_unlock(&s->lock); + return r ? &r->info : NULL; +} + +static void store_pipe(vkb_emu_device *e, VkPipeline p, const div_info *info) +{ + div_state *s = dstate(e); + pipe_rec *r = calloc(1, sizeof(*r)); + r->p = p; + r->info = *info; + pthread_mutex_lock(&s->lock); + r->next = s->b[ph(p)]; + s->b[ph(p)] = r; + pthread_mutex_unlock(&s->lock); +} + +static void drop_pipe(vkb_emu_device *e, VkPipeline p) +{ + div_state *s = dstate(e); + pthread_mutex_lock(&s->lock); + pipe_rec **pp = &s->b[ph(p)]; + while (*pp && (*pp)->p != p) pp = &(*pp)->next; + pipe_rec *r = *pp; + if (r) *pp = r->next; + pthread_mutex_unlock(&s->lock); + if (r && r->info.zero_base) e->dev->real.vkDestroyPipeline(e->dev->device, r->info.zero_base, NULL); + free(r); +} + +/* ------------------------------------------------------------------ pipelines */ + +static int has_dynamic(const VkGraphicsPipelineCreateInfo *ci, VkDynamicState d) +{ + if (!ci->pDynamicState) return 0; + for (uint32_t i = 0; i < ci->pDynamicState->dynamicStateCount; i++) + if (ci->pDynamicState->pDynamicStates[i] == d) return 1; + return 0; +} + +/* Strips the divisor state of one create info; returns what the pipeline needs at draw time. */ +void vkb_emu_divisor_pipeline(vkb_emu_device *e, VkDevice device, VkGraphicsPipelineCreateInfo *ci, div_info *out) +{ + memset(out, 0, sizeof(*out)); + if (!(e->flags & VKB_EMU_DIVISOR)) return; + out->dynamic_stride = has_dynamic(ci, VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE); + out->dynamic_input = has_dynamic(ci, VK_DYNAMIC_STATE_VERTEX_INPUT_EXT); + /* Pieces linked from libraries bring their own records. */ + for (const VkBaseInStructure *b = ci->pNext; b; b = b->pNext) { + if (b->sType != VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR) continue; + const VkPipelineLibraryCreateInfoKHR *l = (const void *)b; + for (uint32_t i = 0; i < l->libraryCount; i++) { + const div_info *li = find_pipe(e, l->pLibraries[i]); + if (!li || !li->mask) continue; + for (uint32_t k = 0; k < MAX_BIND; k++) + if (li->mask & (1u << k)) { + out->mask |= 1u << k; + out->divisor[k] = li->divisor[k]; + out->stride[k] = li->stride[k]; + if (li->divisor[k] > 1) out->split = 1; + } + } + } + VkPipelineVertexInputStateCreateInfo *vi = (VkPipelineVertexInputStateCreateInfo *)ci->pVertexInputState; + if (!vi || out->dynamic_input) return; + VkPipelineVertexInputDivisorStateCreateInfo *d = + vkb_emu_chain_take(vi, VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO); + if (!d) return; + VkVertexInputBindingDescription *bd = (VkVertexInputBindingDescription *)vi->pVertexBindingDescriptions; + for (uint32_t i = 0; i < d->vertexBindingDivisorCount; i++) { + uint32_t b = d->pVertexBindingDivisors[i].binding, div = d->pVertexBindingDivisors[i].divisor; + if (div == 1 || b >= MAX_BIND) continue; + for (uint32_t k = 0; k < vi->vertexBindingDescriptionCount; k++) { + if (bd[k].binding != b) continue; + out->mask |= 1u << b; + out->divisor[b] = div; + out->stride[b] = bd[k].stride; + if (div > 1) out->split = 1; + bd[k].stride = 0; + } + } + /* The vertex shader's SPIR-V is still at hand here (it may be inline). */ + if (out->split && ci->pStages) { + for (uint32_t st = 0; st < ci->stageCount; st++) { + if (ci->pStages[st].stage != VK_SHADER_STAGE_VERTEX_BIT) continue; + out->zero_vs = vkb_emu_shader_zero_base_instance(e, device, &ci->pStages[st]); + out->vs_stage = st; + } + } +} + +void vkb_emu_divisor_created(vkb_emu_device *e, VkDevice device, VkPipelineCache cache, const VkGraphicsPipelineCreateInfo *ci, + VkPipeline p, div_info *info) +{ + if (!(e->flags & VKB_EMU_DIVISOR)) return; + if (!p) { + if (info->zero_vs) vkb_emu_real()->vkDestroyShaderModule(device, info->zero_vs, NULL); + return; + } + if (info->zero_vs) { + /* Split draws move BaseInstance: a variant that reads it as 0 serves the usual + * firstInstance = 0 draws exactly. */ + VkPipelineShaderStageCreateInfo *st = malloc(ci->stageCount * sizeof(*st)); + memcpy(st, ci->pStages, ci->stageCount * sizeof(*st)); + st[info->vs_stage].module = info->zero_vs; + st[info->vs_stage].pNext = NULL; + VkGraphicsPipelineCreateInfo v = *ci; + v.pStages = st; + if (vkb_emu_real()->vkCreateGraphicsPipelines(device, cache, 1, &v, NULL, &info->zero_base) != VK_SUCCESS) + info->zero_base = VK_NULL_HANDLE; + vkb_emu_real()->vkDestroyShaderModule(device, info->zero_vs, NULL); + info->zero_vs = VK_NULL_HANDLE; + free(st); + } + if (info->mask || info->dynamic_input || info->dynamic_stride) store_pipe(e, p, info); + if (info->mask) + VKB_DBG("divisor: pipeline %p emulates bindings 0x%x (dynamic stride %d, dynamic input %d, split %d, variant %p)", (void *)p, + info->mask, info->dynamic_stride, info->dynamic_input, info->split, (void *)info->zero_base); +} + +size_t vkb_emu_divisor_info_size(void) { return sizeof(div_info); } + +static VKAPI_ATTR void VKAPI_CALL emu_DestroyPipeline(VkDevice device, VkPipeline p, const VkAllocationCallbacks *pAllocator) +{ + if (p) drop_pipe(vkb_emu_cur(), p); + vkb_emu_real()->vkDestroyPipeline(device, p, pAllocator); +} + +/* ------------------------------------------------------------------ command buffers */ + +static gfx_state *gfx(vkb_emu_device *e, VkCommandBuffer cb) { return vkb_emu_cb_gfx(e, cb, sizeof(gfx_state)); } + +void vkb_emu_gfx_reset(void *g) +{ + if (g) memset(g, 0, sizeof(gfx_state)); +} + +void vkb_emu_gfx_free(void *g) { free(g); } + +void vkb_emu_gfx_bind_pipeline(vkb_emu_device *e, VkCommandBuffer cb, VkPipeline p) +{ + if (!(e->flags & VKB_EMU_DIVISOR)) return; + gfx_state *g = gfx(e, cb); + g->pipeline = p; + const div_info *i = find_pipe(e, p); + if (i) g->pipe = *i; + else memset(&g->pipe, 0, sizeof(g->pipe)); + g->use_dyn = g->pipe.dynamic_input; +} + +static void record_bind(gfx_state *g, uint32_t first, uint32_t n, const VkBuffer *b, const VkDeviceSize *o, const VkDeviceSize *s, + const VkDeviceSize *st) +{ + for (uint32_t i = 0; i < n && first + i < MAX_BIND; i++) { + uint32_t k = first + i; + g->buf[k] = b[i]; + g->off[k] = o[i]; + g->size[k] = s ? s[i] : VK_WHOLE_SIZE; + if (st) g->stride[k] = st[i]; + g->bound |= 1u << k; + g->tampered &= ~(1u << k); + } +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBindVertexBuffers(VkCommandBuffer cb, uint32_t first, uint32_t n, const VkBuffer *b, + const VkDeviceSize *o) +{ + vkb_emu_device *e = vkb_emu_cur(); + record_bind(gfx(e, cb), first, n, b, o, NULL, NULL); + vkb_emu_real()->vkCmdBindVertexBuffers(cb, first, n, b, o); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBindVertexBuffers2(VkCommandBuffer cb, uint32_t first, uint32_t n, const VkBuffer *b, + const VkDeviceSize *o, const VkDeviceSize *s, const VkDeviceSize *st) +{ + vkb_emu_device *e = vkb_emu_cur(); + record_bind(gfx(e, cb), first, n, b, o, s, st); + vkb_emu_real()->vkCmdBindVertexBuffers2(cb, first, n, b, o, s, st); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdSetVertexInputEXT(VkCommandBuffer cb, uint32_t nb, const VkVertexInputBindingDescription2EXT *bd, + uint32_t na, const VkVertexInputAttributeDescription2EXT *ad) +{ + vkb_emu_device *e = vkb_emu_cur(); + gfx_state *g = gfx(e, cb); + memset(&g->dyn, 0, sizeof(g->dyn)); + g->dyn.dynamic_stride = 1; + g->dyn.dynamic_input = 1; + VkVertexInputBindingDescription2EXT *w = (VkVertexInputBindingDescription2EXT *)bd; + for (uint32_t i = 0; i < nb; i++) { + uint32_t b = w[i].binding; + if (w[i].inputRate != VK_VERTEX_INPUT_RATE_INSTANCE || w[i].divisor == 1 || b >= MAX_BIND) continue; + g->dyn.mask |= 1u << b; + g->dyn.divisor[b] = w[i].divisor; + g->dyn.stride[b] = w[i].stride; + g->stride[b] = w[i].stride; + w[i].stride = 0; + w[i].divisor = 1; + } + vkb_emu_real()->vkCmdSetVertexInputEXT(cb, nb, bd, na, ad); +} + +/* Rebinds the emulated bindings for instances starting at `inst` (relative to the draw), and puts + * back any slot we changed that the current pipeline does not emulate. */ +static void prepare(vkb_emu_device *e, VkCommandBuffer cb, gfx_state *g, const div_info *di, uint32_t first_instance, uint32_t inst) +{ + const vkb_dispatch *r = vkb_emu_real(); + for (uint32_t k = 0; k < MAX_BIND; k++) { + uint32_t bit = 1u << k; + if (!(g->bound & bit)) continue; + if (di->mask & bit) { + uint32_t d = di->divisor[k]; + VkDeviceSize stride = di->dynamic_input ? g->dyn.stride[k] : (di->dynamic_stride ? g->stride[k] : di->stride[k]); + VkDeviceSize elem = (VkDeviceSize)first_instance + (d ? inst / d : 0); + VkDeviceSize off = g->off[k] + elem * stride; + if (di->dynamic_stride || di->dynamic_input) { + VkDeviceSize size = g->size[k] == VK_WHOLE_SIZE ? VK_WHOLE_SIZE : (g->size[k] > elem * stride ? g->size[k] - elem * stride : 0); + VkDeviceSize zero = 0; + r->vkCmdBindVertexBuffers2(cb, k, 1, &g->buf[k], &off, size == VK_WHOLE_SIZE ? NULL : &size, &zero); + } else { + r->vkCmdBindVertexBuffers(cb, k, 1, &g->buf[k], &off); + } + g->tampered |= bit; + } else if (g->tampered & bit) { + if (di->dynamic_stride) { + VkDeviceSize size = g->size[k]; + r->vkCmdBindVertexBuffers2(cb, k, 1, &g->buf[k], &g->off[k], size == VK_WHOLE_SIZE ? NULL : &size, &g->stride[k]); + } else { + r->vkCmdBindVertexBuffers(cb, k, 1, &g->buf[k], &g->off[k]); + } + g->tampered &= ~bit; + } + } + (void)e; +} + +static const div_info *active(gfx_state *g) +{ + return g->use_dyn ? &g->dyn : &g->pipe; +} + +/* The next instance where some emulated binding moves to its next element. */ +static uint32_t next_boundary(const div_info *di, uint32_t i, uint32_t count) +{ + uint32_t next = count; + for (uint32_t k = 0; k < MAX_BIND; k++) { + if (!(di->mask & (1u << k)) || di->divisor[k] <= 1) continue; + uint32_t d = di->divisor[k], nb = (i / d + 1) * d; + if (nb < next) next = nb; + } + return next; +} + +/* A split draw binds the BaseInstance-as-0 variant when that keeps it exact. */ +static int split_begin(vkb_emu_device *e, VkCommandBuffer cb, gfx_state *g, const div_info *di, uint32_t fi, uint32_t ic) +{ + (void)e; + if (!di->split || next_boundary(di, 0, ic) >= ic) return 0; + if (fi == 0 && di->zero_base) { + vkb_emu_real()->vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_GRAPHICS, di->zero_base); + return 1; + } + if (fi != 0) VKB_ONCE(VKB_LOG_WARN, "divisor emulation: a split draw with firstInstance > 0 may see SV_InstanceID offset (logged once)"); + (void)g; + return 0; +} + +static void split_end(VkCommandBuffer cb, gfx_state *g, int variant) +{ + if (variant) vkb_emu_real()->vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_GRAPHICS, g->pipeline); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdDraw(VkCommandBuffer cb, uint32_t vc, uint32_t ic, uint32_t fv, uint32_t fi) +{ + vkb_emu_device *e = vkb_emu_cur(); + gfx_state *g = gfx(e, cb); + const div_info *di = active(g); + if (!di->mask && !g->tampered) { + vkb_emu_real()->vkCmdDraw(cb, vc, ic, fv, fi); + return; + } + VKB_DBG("divisor: draw %u instances from %u, bindings 0x%x (dyn %d), bound 0x%x", ic, fi, di->mask, g->use_dyn, g->bound); + int variant = split_begin(e, cb, g, di, fi, ic); + for (uint32_t i = 0; i < ic || (ic == 0 && i == 0);) { + uint32_t end = next_boundary(di, i, ic); + prepare(e, cb, g, di, fi, i); + if (ic) vkb_emu_real()->vkCmdDraw(cb, vc, end - i, fv, fi + i); + if (!ic) break; + i = end; + } + split_end(cb, g, variant); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdDrawIndexed(VkCommandBuffer cb, uint32_t xc, uint32_t ic, uint32_t fx, int32_t vo, uint32_t fi) +{ + vkb_emu_device *e = vkb_emu_cur(); + gfx_state *g = gfx(e, cb); + const div_info *di = active(g); + if (!di->mask && !g->tampered) { + vkb_emu_real()->vkCmdDrawIndexed(cb, xc, ic, fx, vo, fi); + return; + } + int variant = split_begin(e, cb, g, di, fi, ic); + for (uint32_t i = 0; i < ic || (ic == 0 && i == 0);) { + uint32_t end = next_boundary(di, i, ic); + prepare(e, cb, g, di, fi, i); + if (ic) vkb_emu_real()->vkCmdDrawIndexed(cb, xc, end - i, fx, vo, fi + i); + if (!ic) break; + i = end; + } + split_end(cb, g, variant); +} + +static void indirect_prepare(vkb_emu_device *e, VkCommandBuffer cb) +{ + gfx_state *g = gfx(e, cb); + const div_info *di = active(g); + if (!di->mask && !g->tampered) return; + for (uint32_t k = 0; k < MAX_BIND; k++) + if ((di->mask & (1u << k)) && di->divisor[k] > 1) + VKB_ONCE(VKB_LOG_WARN, "divisor emulation: an indirect draw with an instance divisor > 1 is approximated (logged once)"); + prepare(e, cb, g, di, 0, 0); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdDrawIndirect(VkCommandBuffer cb, VkBuffer b, VkDeviceSize o, uint32_t n, uint32_t s) +{ + indirect_prepare(vkb_emu_cur(), cb); + vkb_emu_real()->vkCmdDrawIndirect(cb, b, o, n, s); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdDrawIndexedIndirect(VkCommandBuffer cb, VkBuffer b, VkDeviceSize o, uint32_t n, uint32_t s) +{ + indirect_prepare(vkb_emu_cur(), cb); + vkb_emu_real()->vkCmdDrawIndexedIndirect(cb, b, o, n, s); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdDrawIndirectCount(VkCommandBuffer cb, VkBuffer b, VkDeviceSize o, VkBuffer cbuf, VkDeviceSize co, + uint32_t max, uint32_t s) +{ + indirect_prepare(vkb_emu_cur(), cb); + vkb_emu_real()->vkCmdDrawIndirectCount(cb, b, o, cbuf, co, max, s); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdDrawIndexedIndirectCount(VkCommandBuffer cb, VkBuffer b, VkDeviceSize o, VkBuffer cbuf, + VkDeviceSize co, uint32_t max, uint32_t s) +{ + indirect_prepare(vkb_emu_cur(), cb); + vkb_emu_real()->vkCmdDrawIndexedIndirectCount(cb, b, o, cbuf, co, max, s); +} + +void vkb_emu_divisor_install(vkb_srv_table *dev) +{ + vkb_emu_device *e = dev->emu; + if (!(e->flags & VKB_EMU_DIVISOR)) return; + div_state *s = calloc(1, sizeof(*s)); + pthread_mutex_init(&s->lock, NULL); + e->divisor = s; + vkb_dispatch *dt = &dev->dt; + dt->vkDestroyPipeline = emu_DestroyPipeline; + dt->vkCmdBindVertexBuffers = emu_CmdBindVertexBuffers; + if (dev->real.vkCmdBindVertexBuffers2) dt->vkCmdBindVertexBuffers2 = emu_CmdBindVertexBuffers2; + if (dev->real.vkCmdSetVertexInputEXT) dt->vkCmdSetVertexInputEXT = emu_CmdSetVertexInputEXT; + dt->vkCmdDraw = emu_CmdDraw; + dt->vkCmdDrawIndexed = emu_CmdDrawIndexed; + dt->vkCmdDrawIndirect = emu_CmdDrawIndirect; + dt->vkCmdDrawIndexedIndirect = emu_CmdDrawIndexedIndirect; + if (dev->real.vkCmdDrawIndirectCount) dt->vkCmdDrawIndirectCount = emu_CmdDrawIndirectCount; + if (dev->real.vkCmdDrawIndexedIndirectCount) dt->vkCmdDrawIndexedIndirectCount = emu_CmdDrawIndexedIndirectCount; +} + +void vkb_emu_divisor_uninstall(vkb_srv_table *dev) +{ + div_state *s = dev->emu->divisor; + if (!s) return; + for (int i = 0; i < 256; i++) { + while (s->b[i]) { + pipe_rec *r = s->b[i]; + s->b[i] = r->next; + free(r); + } + } + pthread_mutex_destroy(&s->lock); + free(s); + dev->emu->divisor = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_emu_features.c b/app/src/main/cpp/vkbridge/server_emu_features.c new file mode 100644 index 000000000..33bef1f10 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu_features.c @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Installs the feature emulations into a device. + */ +#define _GNU_SOURCE +#include "server_emu.h" + +void vkb_emu_install_features(vkb_srv_table *dev) +{ + vkb_emu_cmdstate_install(dev); + vkb_emu_shader_install(dev); + vkb_emu_bcn_install(dev); + vkb_emu_divisor_install(dev); +} + +void vkb_emu_uninstall_features(vkb_srv_table *dev) +{ + vkb_emu_divisor_uninstall(dev); + vkb_emu_bcn_uninstall(dev); + vkb_emu_shader_uninstall(dev); + vkb_emu_cmdstate_uninstall(dev); +} diff --git a/app/src/main/cpp/vkbridge/server_emu_layer.c b/app/src/main/cpp/vkbridge/server_emu_layer.c new file mode 100644 index 000000000..74adc44ea --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu_layer.c @@ -0,0 +1,478 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Emulation wrappers installed into a device's dispatch table, like a Vulkan layer: the generated + * handlers call c->dt, which for an emulating device points here first. The device is found + * through the per-call table the connection loop sets (vkb_srv_current_table). + * + * VK_KHR_maintenance5 (Zink and DXVK 2.7 refuse a Vulkan 1.3 device without it): + * - 64-bit flags structures (pipeline create flags 2, buffer usage 2) folded into the 32-bit + * fields, which hold every bit a 1.3 driver knows; + * - shader modules given inline (VkShaderModuleCreateInfo chained to a stage) created and + * destroyed around the pipeline; + * - vkCmdBindIndexBuffer2, vkGetRenderingAreaGranularity, vkGetImageSubresourceLayout2 and + * vkGetDeviceImageSubresourceLayout on their 1.0 equivalents; + * - VK_REMAINING_ARRAY_LAYERS in copy regions and VK_WHOLE_SIZE in vertex buffer sizes, resolved + * from the image/buffer the server keeps a record of. + */ +#define _GNU_SOURCE +#include "server_emu.h" + +#include +#include + +/* ------------------------------------------------------------------ resource records */ + +static unsigned rh(uint64_t k) +{ + k ^= k >> 29; + k *= 0xbf58476d1ce4e5b9ull; + return (unsigned)(k >> 52) & (VKB_EMU_BUCKETS - 1); +} + +void vkb_emu_track_image(vkb_emu_device *e, VkImage img, const VkImageCreateInfo *ci, VkFormat client_format) +{ + vkb_emu_image *r = calloc(1, sizeof(*r)); + r->image = img; + r->type = ci->imageType; + r->format = ci->format; + r->client_format = client_format; + r->extent = ci->extent; + r->mips = ci->mipLevels; + r->layers = ci->arrayLayers; + pthread_mutex_lock(&e->lock); + unsigned h = rh((uint64_t)img); + r->next = e->images[h]; + e->images[h] = r; + pthread_mutex_unlock(&e->lock); +} + +vkb_emu_image *vkb_emu_find_image(vkb_emu_device *e, VkImage img) +{ + pthread_mutex_lock(&e->lock); + vkb_emu_image *r = e->images[rh((uint64_t)img)]; + while (r && r->image != img) r = r->next; + pthread_mutex_unlock(&e->lock); + return r; +} + +static void untrack_image(vkb_emu_device *e, VkImage img) +{ + pthread_mutex_lock(&e->lock); + vkb_emu_image **pp = &e->images[rh((uint64_t)img)]; + while (*pp && (*pp)->image != img) pp = &(*pp)->next; + vkb_emu_image *r = *pp; + if (r) *pp = r->next; + pthread_mutex_unlock(&e->lock); + if (r) { + vkb_emu_image_release(e, r); + free(r); + } +} + +static void track_buffer(vkb_emu_device *e, VkBuffer b, VkDeviceSize size) +{ + vkb_emu_buffer *r = calloc(1, sizeof(*r)); + r->buffer = b; + r->size = size; + pthread_mutex_lock(&e->lock); + unsigned h = rh((uint64_t)b); + r->next = e->buffers[h]; + e->buffers[h] = r; + pthread_mutex_unlock(&e->lock); +} + +static VkDeviceSize buffer_size(vkb_emu_device *e, VkBuffer b) +{ + pthread_mutex_lock(&e->lock); + vkb_emu_buffer *r = e->buffers[rh((uint64_t)b)]; + while (r && r->buffer != b) r = r->next; + VkDeviceSize s = r ? r->size : 0; + pthread_mutex_unlock(&e->lock); + return s; +} + +static void untrack_buffer(vkb_emu_device *e, VkBuffer b) +{ + pthread_mutex_lock(&e->lock); + vkb_emu_buffer **pp = &e->buffers[rh((uint64_t)b)]; + while (*pp && (*pp)->buffer != b) pp = &(*pp)->next; + vkb_emu_buffer *r = *pp; + if (r) *pp = r->next; + pthread_mutex_unlock(&e->lock); + free(r); +} + +vkb_emu_device *vkb_emu_cur(void) +{ + vkb_srv_table *t = vkb_srv_current_table(); + return t ? t->emu : NULL; +} + +const vkb_dispatch *vkb_emu_real(void) +{ + return &vkb_srv_current_table()->real; +} + +/* Removes the first structure of type t from a chain we own (decoded into the call's arena). */ +void *vkb_emu_chain_take(const void *head_const, VkStructureType t) +{ + VkBaseOutStructure *prev = (VkBaseOutStructure *)head_const; + while (prev->pNext) { + if (prev->pNext->sType == t) { + VkBaseOutStructure *found = prev->pNext; + prev->pNext = found->pNext; + return found; + } + prev = prev->pNext; + } + return NULL; +} + +/* ------------------------------------------------------------------ resources */ + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) +{ + vkb_emu_device *e = vkb_emu_cur(); + VkBufferCreateInfo *ci = (VkBufferCreateInfo *)pCreateInfo; + if (e->flags & VKB_EMU_MAINT5) { + VkBufferUsageFlags2CreateInfo *u = vkb_emu_chain_take(ci, VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO); + if (u) ci->usage = (VkBufferUsageFlags)u->usage; + } + vkb_emu_bcn_buffer_usage(e, ci); + VkResult r = vkb_emu_real()->vkCreateBuffer(device, ci, pAllocator, pBuffer); + if (r == VK_SUCCESS) track_buffer(e, *pBuffer, ci->size); + return r; +} + +static VKAPI_ATTR void VKAPI_CALL emu_DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator) +{ + if (buffer) untrack_buffer(vkb_emu_cur(), buffer); + vkb_emu_real()->vkDestroyBuffer(device, buffer, pAllocator); +} + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkBufferView *pView) +{ + if (vkb_emu_cur()->flags & VKB_EMU_MAINT5) vkb_emu_chain_take(pCreateInfo, VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO); + return vkb_emu_real()->vkCreateBufferView(device, pCreateInfo, pAllocator, pView); +} + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkImage *pImage) +{ + vkb_emu_device *e = vkb_emu_cur(); + VkImageCreateInfo *ci = (VkImageCreateInfo *)pCreateInfo; + VkFormat client_format = ci->format; + vkb_emu_image_create_info(e, ci); + VkResult r = vkb_emu_real()->vkCreateImage(device, ci, pAllocator, pImage); + if (r == VK_SUCCESS) vkb_emu_track_image(e, *pImage, ci, client_format); + return r; +} + +static VKAPI_ATTR void VKAPI_CALL emu_DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) +{ + if (image) untrack_image(vkb_emu_cur(), image); + vkb_emu_real()->vkDestroyImage(device, image, pAllocator); +} + +/* ------------------------------------------------------------------ pipelines */ + +/* Fold flags2 and create inline shader modules; temporaries are recorded in mods[]. */ +static void prep_stage(VkDevice device, VkPipelineShaderStageCreateInfo *st, VkShaderModule *mods, uint32_t *nmods, uint32_t cap) +{ + if (st->module) return; + VkShaderModuleCreateInfo *smci = vkb_emu_chain_take(st, VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO); + if (!smci) return; + VkShaderModule m = VK_NULL_HANDLE; + smci->pNext = NULL; + if (vkb_emu_real()->vkCreateShaderModule(device, smci, NULL, &m) == VK_SUCCESS) { + st->module = m; + if (*nmods < cap) mods[(*nmods)++] = m; + } +} + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateGraphicsPipelines(VkDevice device, VkPipelineCache cache, uint32_t n, + const VkGraphicsPipelineCreateInfo *infos, + const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) +{ + vkb_emu_device *e = vkb_emu_cur(); + VkShaderModule mods[64]; + uint32_t nmods = 0; + size_t dsz = vkb_emu_divisor_info_size(); + uint8_t *divs = calloc(n ? n : 1, dsz); + for (uint32_t i = 0; i < n; i++) { + VkGraphicsPipelineCreateInfo *ci = (VkGraphicsPipelineCreateInfo *)&infos[i]; + vkb_emu_divisor_pipeline(e, device, ci, (div_info *)(divs + i * dsz)); + vkb_emu_depth_clip_pipeline(e, ci); + /* Shader rewrites first: they read inline SPIR-V before it becomes a module. */ + vkb_emu_shader_pipeline(e, device, ci, mods, &nmods, 64); + if (e->flags & VKB_EMU_MAINT5) { + VkPipelineCreateFlags2CreateInfo *f2 = vkb_emu_chain_take(ci, VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO); + if (f2) ci->flags = (VkPipelineCreateFlags)f2->flags; + for (uint32_t s = 0; s < ci->stageCount; s++) + prep_stage(device, (VkPipelineShaderStageCreateInfo *)&ci->pStages[s], mods, &nmods, 64); + } + } + VkResult r = vkb_emu_real()->vkCreateGraphicsPipelines(device, cache, n, infos, pAllocator, pPipelines); + /* Before the temporary modules go: a divisor variant is built from the same stages. */ + for (uint32_t i = 0; i < n; i++) + vkb_emu_divisor_created(e, device, cache, &infos[i], r >= 0 ? pPipelines[i] : VK_NULL_HANDLE, (div_info *)(divs + i * dsz)); + for (uint32_t i = 0; i < nmods; i++) vkb_emu_real()->vkDestroyShaderModule(device, mods[i], NULL); + free(divs); + return r; +} + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateComputePipelines(VkDevice device, VkPipelineCache cache, uint32_t n, + const VkComputePipelineCreateInfo *infos, + const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) +{ + vkb_emu_device *e = vkb_emu_cur(); + VkShaderModule mods[64]; + uint32_t nmods = 0; + for (uint32_t i = 0; i < n; i++) { + VkComputePipelineCreateInfo *ci = (VkComputePipelineCreateInfo *)&infos[i]; + if (e->flags & VKB_EMU_MAINT5) { + VkPipelineCreateFlags2CreateInfo *f2 = vkb_emu_chain_take(ci, VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO); + if (f2) ci->flags = (VkPipelineCreateFlags)f2->flags; + prep_stage(device, &ci->stage, mods, &nmods, 64); + } + } + VkResult r = vkb_emu_real()->vkCreateComputePipelines(device, cache, n, infos, pAllocator, pPipelines); + for (uint32_t i = 0; i < nmods; i++) vkb_emu_real()->vkDestroyShaderModule(device, mods[i], NULL); + return r; +} + +/* ------------------------------------------------------------------ maintenance5 entry points */ + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBindIndexBuffer2(VkCommandBuffer cb, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, + VkIndexType type) +{ + (void)size; + vkb_emu_real()->vkCmdBindIndexBuffer(cb, buffer, offset, type); +} + +static VKAPI_ATTR void VKAPI_CALL emu_GetRenderingAreaGranularity(VkDevice device, const VkRenderingAreaInfo *info, VkExtent2D *g) +{ + (void)device; + (void)info; + g->width = 1; + g->height = 1; +} + +static VKAPI_ATTR void VKAPI_CALL emu_GetImageSubresourceLayout2(VkDevice device, VkImage image, const VkImageSubresource2 *sub, + VkSubresourceLayout2 *layout) +{ + vkb_emu_real()->vkGetImageSubresourceLayout(device, image, &sub->imageSubresource, &layout->subresourceLayout); +} + +static VKAPI_ATTR void VKAPI_CALL emu_GetDeviceImageSubresourceLayout(VkDevice device, const VkDeviceImageSubresourceInfo *info, + VkSubresourceLayout2 *layout) +{ + VkImage img; + memset(&layout->subresourceLayout, 0, sizeof(layout->subresourceLayout)); + if (vkb_emu_real()->vkCreateImage(device, info->pCreateInfo, NULL, &img) != VK_SUCCESS) return; + vkb_emu_real()->vkGetImageSubresourceLayout(device, img, &info->pSubresource->imageSubresource, &layout->subresourceLayout); + vkb_emu_real()->vkDestroyImage(device, img, NULL); +} + +/* VK_REMAINING_ARRAY_LAYERS in a copy region, resolved against the image. */ +static void fix_layers(vkb_emu_device *e, VkImage img, VkImageSubresourceLayers *l) +{ + if (l->layerCount != VK_REMAINING_ARRAY_LAYERS) return; + vkb_emu_image *r = vkb_emu_find_image(e, img); + l->layerCount = r && r->layers > l->baseArrayLayer ? r->layers - l->baseArrayLayer : 1; +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdCopyImage(VkCommandBuffer cb, VkImage src, VkImageLayout sl, VkImage dst, VkImageLayout dl, + uint32_t n, const VkImageCopy *regions) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < n; i++) { + fix_layers(e, src, (VkImageSubresourceLayers *)®ions[i].srcSubresource); + fix_layers(e, dst, (VkImageSubresourceLayers *)®ions[i].dstSubresource); + } + if (vkb_emu_copy_image(e, cb, src, sl, dst, dl, n, regions)) return; + vkb_emu_real()->vkCmdCopyImage(cb, src, sl, dst, dl, n, regions); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdCopyImage2(VkCommandBuffer cb, const VkCopyImageInfo2 *info) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < info->regionCount; i++) { + fix_layers(e, info->srcImage, (VkImageSubresourceLayers *)&info->pRegions[i].srcSubresource); + fix_layers(e, info->dstImage, (VkImageSubresourceLayers *)&info->pRegions[i].dstSubresource); + } + if (vkb_emu_copy_image2(e, cb, info)) return; + vkb_emu_real()->vkCmdCopyImage2(cb, info); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBlitImage(VkCommandBuffer cb, VkImage src, VkImageLayout sl, VkImage dst, VkImageLayout dl, + uint32_t n, const VkImageBlit *regions, VkFilter filter) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < n; i++) { + fix_layers(e, src, (VkImageSubresourceLayers *)®ions[i].srcSubresource); + fix_layers(e, dst, (VkImageSubresourceLayers *)®ions[i].dstSubresource); + } + vkb_emu_real()->vkCmdBlitImage(cb, src, sl, dst, dl, n, regions, filter); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBlitImage2(VkCommandBuffer cb, const VkBlitImageInfo2 *info) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < info->regionCount; i++) { + fix_layers(e, info->srcImage, (VkImageSubresourceLayers *)&info->pRegions[i].srcSubresource); + fix_layers(e, info->dstImage, (VkImageSubresourceLayers *)&info->pRegions[i].dstSubresource); + } + vkb_emu_real()->vkCmdBlitImage2(cb, info); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdResolveImage(VkCommandBuffer cb, VkImage src, VkImageLayout sl, VkImage dst, VkImageLayout dl, + uint32_t n, const VkImageResolve *regions) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < n; i++) { + fix_layers(e, src, (VkImageSubresourceLayers *)®ions[i].srcSubresource); + fix_layers(e, dst, (VkImageSubresourceLayers *)®ions[i].dstSubresource); + } + vkb_emu_real()->vkCmdResolveImage(cb, src, sl, dst, dl, n, regions); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdResolveImage2(VkCommandBuffer cb, const VkResolveImageInfo2 *info) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < info->regionCount; i++) { + fix_layers(e, info->srcImage, (VkImageSubresourceLayers *)&info->pRegions[i].srcSubresource); + fix_layers(e, info->dstImage, (VkImageSubresourceLayers *)&info->pRegions[i].dstSubresource); + } + vkb_emu_real()->vkCmdResolveImage2(cb, info); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdCopyBufferToImage(VkCommandBuffer cb, VkBuffer src, VkImage dst, VkImageLayout dl, uint32_t n, + const VkBufferImageCopy *regions) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < n; i++) fix_layers(e, dst, (VkImageSubresourceLayers *)®ions[i].imageSubresource); + if (vkb_emu_copy_buffer_to_image(e, cb, src, dst, dl, n, regions)) return; + vkb_emu_real()->vkCmdCopyBufferToImage(cb, src, dst, dl, n, regions); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdCopyBufferToImage2(VkCommandBuffer cb, const VkCopyBufferToImageInfo2 *info) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < info->regionCount; i++) + fix_layers(e, info->dstImage, (VkImageSubresourceLayers *)&info->pRegions[i].imageSubresource); + if (vkb_emu_copy_buffer_to_image2(e, cb, info)) return; + vkb_emu_real()->vkCmdCopyBufferToImage2(cb, info); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdCopyImageToBuffer(VkCommandBuffer cb, VkImage src, VkImageLayout sl, VkBuffer dst, uint32_t n, + const VkBufferImageCopy *regions) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < n; i++) fix_layers(e, src, (VkImageSubresourceLayers *)®ions[i].imageSubresource); + if (vkb_emu_bcn_blocks_readback(e, src)) return; + vkb_emu_real()->vkCmdCopyImageToBuffer(cb, src, sl, dst, n, regions); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdCopyImageToBuffer2(VkCommandBuffer cb, const VkCopyImageToBufferInfo2 *info) +{ + vkb_emu_device *e = vkb_emu_cur(); + for (uint32_t i = 0; i < info->regionCount; i++) + fix_layers(e, info->srcImage, (VkImageSubresourceLayers *)&info->pRegions[i].imageSubresource); + if (vkb_emu_bcn_blocks_readback(e, info->srcImage)) return; + vkb_emu_real()->vkCmdCopyImageToBuffer2(cb, info); +} + +static VKAPI_ATTR void VKAPI_CALL emu_CmdBindVertexBuffers2(VkCommandBuffer cb, uint32_t first, uint32_t n, const VkBuffer *buffers, + const VkDeviceSize *offsets, const VkDeviceSize *sizes, + const VkDeviceSize *strides) +{ + vkb_emu_device *e = vkb_emu_cur(); + if (sizes) { + VkDeviceSize *s = (VkDeviceSize *)sizes; + for (uint32_t i = 0; i < n; i++) { + if (s[i] != VK_WHOLE_SIZE || !buffers[i]) continue; + VkDeviceSize total = buffer_size(e, buffers[i]); + s[i] = total > offsets[i] ? total - offsets[i] : 0; + } + } + vkb_emu_real()->vkCmdBindVertexBuffers2(cb, first, n, buffers, offsets, sizes, strides); +} + +/* ------------------------------------------------------------------ install */ + +void vkb_emu_install(vkb_srv_table *dev) +{ + vkb_emu_device *e = dev->emu; + vkb_dispatch *dt = &dev->dt; + /* Resource records are needed by every emulation. */ + dt->vkCreateBuffer = emu_CreateBuffer; + dt->vkDestroyBuffer = emu_DestroyBuffer; + dt->vkCreateImage = emu_CreateImage; + dt->vkDestroyImage = emu_DestroyImage; + dt->vkCreateGraphicsPipelines = emu_CreateGraphicsPipelines; + dt->vkCreateComputePipelines = emu_CreateComputePipelines; + dt->vkCmdCopyImage = emu_CmdCopyImage; + dt->vkCmdCopyBufferToImage = emu_CmdCopyBufferToImage; + if (dev->real.vkCmdCopyImage2) dt->vkCmdCopyImage2 = emu_CmdCopyImage2; + if (dev->real.vkCmdCopyBufferToImage2) dt->vkCmdCopyBufferToImage2 = emu_CmdCopyBufferToImage2; + dt->vkCmdCopyImageToBuffer = emu_CmdCopyImageToBuffer; + if (dev->real.vkCmdCopyImageToBuffer2) dt->vkCmdCopyImageToBuffer2 = emu_CmdCopyImageToBuffer2; + if (e->flags & VKB_EMU_MAINT5) { + dt->vkCreateBufferView = emu_CreateBufferView; + dt->vkCmdBindIndexBuffer2 = emu_CmdBindIndexBuffer2; + dt->vkGetRenderingAreaGranularity = emu_GetRenderingAreaGranularity; + dt->vkGetImageSubresourceLayout2 = emu_GetImageSubresourceLayout2; + dt->vkGetDeviceImageSubresourceLayout = emu_GetDeviceImageSubresourceLayout; + dt->vkCmdBlitImage = emu_CmdBlitImage; + dt->vkCmdResolveImage = emu_CmdResolveImage; + if (dev->real.vkCmdBlitImage2) dt->vkCmdBlitImage2 = emu_CmdBlitImage2; + if (dev->real.vkCmdResolveImage2) dt->vkCmdResolveImage2 = emu_CmdResolveImage2; + if (dev->real.vkCmdBindVertexBuffers2) dt->vkCmdBindVertexBuffers2 = emu_CmdBindVertexBuffers2; + } + vkb_emu_install_features(dev); + vkb_emu_depth_clip_install(dev); + VKB_INFO("device %u: emulation 0x%x installed", dev->id, e->flags); +} + +void vkb_emu_uninstall(vkb_srv_table *dev) +{ + vkb_emu_device *e = dev->emu; + vkb_emu_uninstall_features(dev); + for (int i = 0; i < VKB_EMU_BUCKETS; i++) { + while (e->images[i]) { + vkb_emu_image *r = e->images[i]; + e->images[i] = r->next; + vkb_emu_image_release(e, r); + free(r); + } + while (e->buffers[i]) { + vkb_emu_buffer *r = e->buffers[i]; + e->buffers[i] = r->next; + free(r); + } + } +} + +/* ------------------------------------------------------------------ depth clip enable */ + +/* VK_EXT_depth_clip_enable on a GPU without it. Without the extension Vulkan clips exactly when + * depth clamp is off, so a pipeline's clamp becomes "not clip" (D3D's DepthClipEnable = FALSE is + * clamping; clip + clamp only differs for fragments the clip removes anyway). The client hides + * dynamic depth clip/clamp while this is emulated, so both are static pipeline state here. */ +void vkb_emu_depth_clip_pipeline(vkb_emu_device *e, VkGraphicsPipelineCreateInfo *ci) +{ + if (!(e->flags & VKB_EMU_DEPTH_CLIP)) return; + VkPipelineRasterizationStateCreateInfo *rs = (VkPipelineRasterizationStateCreateInfo *)ci->pRasterizationState; + if (!rs) return; + VkPipelineRasterizationDepthClipStateCreateInfoEXT *dc = + vkb_emu_chain_take(rs, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT); + if (dc) rs->depthClampEnable = dc->depthClipEnable ? VK_FALSE : VK_TRUE; +} + +void vkb_emu_depth_clip_install(vkb_srv_table *dev) +{ + (void)dev; +} diff --git a/app/src/main/cpp/vkbridge/server_emu_shader.c b/app/src/main/cpp/vkbridge/server_emu_shader.c new file mode 100644 index 000000000..64dda0be8 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_emu_shader.c @@ -0,0 +1,429 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Shader-side emulations, done when a graphics pipeline is created (both ends of the vertex -> + * fragment interface are known then): + * + * clip distance (shaderClipDistance missing): the last pre-rasterization stage's ClipDistance + * output becomes an ordinary varying at a free location; the fragment shader reads it and + * discards the fragment when any distance is negative. For planar clip distances this is the + * same set of pixels the hardware clipper would keep. + * cull distance (shaderCullDistance missing): the output becomes an unread varying - nothing is + * culled, which costs fragments but never drops geometry that should be visible. + * point size in geometry/tessellation (shaderTessellationAndGeometryPointSize missing): same. + * + * Shader modules are kept as SPIR-V so a pipeline can build rewritten variants; the driver's own + * module is created from a variant that needs none of the missing features. + */ +#define _GNU_SOURCE +#include "server_emu.h" +#include "spirv_edit.h" + +#include +#include +#include +#include + +typedef struct shader_rec { + VkShaderModule module; + uint32_t *code; + size_t size; + struct shader_rec *next; +} shader_rec; + +typedef struct shader_state { + pthread_mutex_t lock; + shader_rec *mods[1024]; +} shader_state; + +#define SHADER_EMU (VKB_EMU_CLIP_DISTANCE | VKB_EMU_CULL_DISTANCE | VKB_EMU_POINT_SIZE) +/* Emulations that need the shader modules' SPIR-V kept. */ +#define SHADER_STORE (SHADER_EMU | VKB_EMU_DIVISOR) + +static unsigned mh(VkShaderModule m) +{ + uint64_t k = (uint64_t)m; + k ^= k >> 31; + k *= 0x94d049bb133111ebull; + return (unsigned)(k >> 54); +} + +static shader_state *state(vkb_emu_device *e) { return e->shaders; } + +static const shader_rec *find_module(vkb_emu_device *e, VkShaderModule m) +{ + shader_state *s = state(e); + pthread_mutex_lock(&s->lock); + shader_rec *r = s->mods[mh(m)]; + while (r && r->module != m) r = r->next; + pthread_mutex_unlock(&s->lock); + return r; +} + +/* ------------------------------------------------------------------ rewrites */ + +/* Finds a standalone Output/Input variable decorated with a builtin; 0 if none. 2 = in a block. */ +static uint32_t builtin_var(const spv_mod *m, uint32_t builtin, uint32_t storage, int *in_block) +{ + *in_block = 0; + for (uint32_t i = 0; i < m->count; i++) { + const spv_inst *in = &m->ins[i]; + if (in->op == SpvOpDecorate && in->w[1] == SpvDecorationBuiltIn && in->w[2] == builtin) { + int d = spv_find_def(m, in->w[0]); + if (d >= 0 && m->ins[d].op == SpvOpVariable && m->ins[d].w[2] == storage) return in->w[0]; + } + if (in->op == SpvOpMemberDecorate && in->w[2] == SpvDecorationBuiltIn && in->w[3] == builtin) *in_block = 1; + } + return 0; +} + +static uint32_t var_pointee(const spv_mod *m, uint32_t var) +{ + int d = spv_find_def(m, var); + if (d < 0) return 0; + int p = spv_find_def(m, m->ins[d].w[0]); + return p < 0 ? 0 : m->ins[p].w[2]; +} + +static void add_decoration(spv_mod *m, uint32_t id, uint32_t dec, uint32_t value) +{ + uint32_t ops[3] = {id, dec, value}; + spv_insert(m, spv_annotations_end(m), SpvOpDecorate, ops, 3); +} + +/* Builtin output -> plain varying at *loc (advanced). Returns the element count, 0 if absent. */ +static uint32_t demote_builtin(spv_mod *m, uint32_t builtin, uint32_t *loc, int *unsupported) +{ + int in_block; + uint32_t var = builtin_var(m, builtin, SpvStorageClassOutput, &in_block); + if (!var) { + if (in_block) *unsupported = 1; + return 0; + } + uint32_t pointee = var_pointee(m, var); + uint32_t n = spv_array_length(m, pointee); + if (!n) n = 1; + spv_remove_decoration(m, var, SpvDecorationBuiltIn); + add_decoration(m, var, SpvDecorationLocation, *loc); + *loc += n; + return n; +} + +/* The pre-rasterization side. Returns the clip distance count (0: none), -1 if it cannot. */ +static int rewrite_pre_raster(spv_mod *m, uint32_t emu, uint32_t clip_loc, int last_stage) +{ + int unsupported = 0; + uint32_t loc = clip_loc; + int clip = 0; + if ((emu & VKB_EMU_CLIP_DISTANCE) && spv_has_capability(m, SpvCapabilityClipDistance)) { + clip = (int)demote_builtin(m, SpvBuiltInClipDistance, &loc, &unsupported); + spv_remove_capability(m, SpvCapabilityClipDistance); + } + if ((emu & VKB_EMU_CULL_DISTANCE) && spv_has_capability(m, SpvCapabilityCullDistance)) { + demote_builtin(m, SpvBuiltInCullDistance, &loc, &unsupported); + spv_remove_capability(m, SpvCapabilityCullDistance); + } + int model = spv_execution_model(m); + if ((emu & VKB_EMU_POINT_SIZE) && (model == SpvExecutionModelGeometry || model == SpvExecutionModelTessellationEvaluation) && + (spv_has_capability(m, SpvCapabilityGeometryPointSize) || spv_has_capability(m, SpvCapabilityTessellationPointSize))) { + demote_builtin(m, SpvBuiltInPointSize, &loc, &unsupported); + spv_remove_capability(m, SpvCapabilityGeometryPointSize); + spv_remove_capability(m, SpvCapabilityTessellationPointSize); + } + (void)last_stage; + if (unsupported) VKB_ONCE(VKB_LOG_WARN, "emulation: clip/cull distance inside an output block is not handled (logged once)"); + return unsupported && !clip ? -1 : clip; +} + +/* The fragment side: read the distances at `loc` and discard when any is negative. */ +static int rewrite_fragment(spv_mod *m, uint32_t loc, uint32_t n) +{ + uint32_t f32 = spv_type_float(m, 32); + uint32_t len = spv_const_u32(m, n); + uint32_t arr = spv_type_array(m, f32, len); + uint32_t parr = spv_type_pointer(m, SpvStorageClassInput, arr); + uint32_t pf = spv_type_pointer(m, SpvStorageClassInput, f32); + uint32_t tbool = spv_type_bool(m); + uint32_t zero = spv_const_f32(m, 0.0f); + uint32_t idx[16]; + for (uint32_t i = 0; i < n && i < 16; i++) idx[i] = spv_const_u32(m, i); + uint32_t var = spv_new_id(m); + uint32_t vops[3] = {parr, var, SpvStorageClassInput}; + spv_insert(m, spv_types_end(m), SpvOpVariable, vops, 3); + add_decoration(m, var, SpvDecorationLocation, loc); + spv_add_interface(m, var); + + int ep = spv_find_op(m, SpvOpEntryPoint, 0); + if (ep < 0) return -1; + uint32_t fn = m->ins[ep].w[1]; + int fi = -1; + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpFunction && m->ins[i].w[1] == fn) fi = (int)i; + if (fi < 0) return -1; + int li = spv_find_op(m, SpvOpLabel, (uint32_t)fi); + if (li < 0) return -1; + uint32_t first_label = m->ins[li].w[0]; + uint32_t at = (uint32_t)li + 1; + while (at < m->count && (m->ins[at].op == SpvOpVariable || m->ins[at].op == SpvOpLine || m->ins[at].op == SpvOpNoLine)) at++; + + uint32_t any = 0; + for (uint32_t i = 0; i < n && i < 16; i++) { + uint32_t p = spv_new_id(m), v = spv_new_id(m), lt = spv_new_id(m); + uint32_t ac[4] = {pf, p, var, idx[i]}; + at = spv_insert(m, at, SpvOpAccessChain, ac, 4) + 1; + uint32_t ld[3] = {f32, v, p}; + at = spv_insert(m, at, SpvOpLoad, ld, 3) + 1; + uint32_t cmp[4] = {tbool, lt, v, zero}; + at = spv_insert(m, at, SpvOpFOrdLessThan, cmp, 4) + 1; + if (any) { + uint32_t o = spv_new_id(m), orr[4] = {tbool, o, any, lt}; + at = spv_insert(m, at, SpvOpLogicalOr, orr, 4) + 1; + any = o; + } else { + any = lt; + } + } + uint32_t kill = spv_new_id(m), merge = spv_new_id(m); + uint32_t sm[2] = {merge, 0}; + at = spv_insert(m, at, SpvOpSelectionMerge, sm, 2) + 1; + uint32_t bc[3] = {any, kill, merge}; + at = spv_insert(m, at, SpvOpBranchConditional, bc, 3) + 1; + at = spv_insert(m, at, SpvOpLabel, &kill, 1) + 1; + at = spv_insert(m, at, spv_version(m) >= 0x00010600 ? SpvOpTerminateInvocation : SpvOpKill, NULL, 0) + 1; + at = spv_insert(m, at, SpvOpLabel, &merge, 1) + 1; + /* Phis that named the old entry block as a predecessor now come from the merge block. */ + for (uint32_t i = at; i < m->count; i++) { + spv_inst *in = &m->ins[i]; + if (in->op != 245 /* OpPhi */) continue; + for (uint32_t k = 3; k < (uint32_t)in->n - 1; k += 2) + if (in->w[k] == first_label) in->w[k] = merge; + } + return m->err ? -1 : 0; +} + +/* ------------------------------------------------------------------ module store */ + +static VkResult make_module(VkDevice device, const spv_mod *m, VkShaderModule *out) +{ + uint32_t *code; + size_t size = spv_write(m, &code); + if (!size) return VK_ERROR_OUT_OF_HOST_MEMORY; + const char *dump = getenv("VKBRIDGE_DUMP_SPIRV"); + if (dump && *dump) { + static int seq; + char path[512]; + snprintf(path, sizeof(path), "%s/vkbridge-%d-%d.spv", dump, (int)getpid(), __atomic_fetch_add(&seq, 1, __ATOMIC_RELAXED)); + FILE *f = fopen(path, "wb"); + if (f) { + fwrite(code, 1, size, f); + fclose(f); + } + } + VkShaderModuleCreateInfo ci = {VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, NULL, 0, size, code}; + VkResult r = vkb_emu_real()->vkCreateShaderModule(device, &ci, NULL, out); + free(code); + return r; +} + +static VKAPI_ATTR VkResult VKAPI_CALL emu_CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *ci, + const VkAllocationCallbacks *pAllocator, VkShaderModule *pModule) +{ + vkb_emu_device *e = vkb_emu_cur(); + spv_mod m; + VkResult r; + int needs = 0; + if (spv_parse(&m, ci->pCode, ci->codeSize) == 0) { + needs = spv_has_capability(&m, SpvCapabilityClipDistance) || spv_has_capability(&m, SpvCapabilityCullDistance) || + spv_has_capability(&m, SpvCapabilityGeometryPointSize) || spv_has_capability(&m, SpvCapabilityTessellationPointSize); + } + if (needs) { + /* The driver's module must not ask for what it lacks; pipelines use rewritten variants. */ + int maxo = spv_max_location(&m, SpvStorageClassOutput); + rewrite_pre_raster(&m, e->flags, (uint32_t)(maxo + 1), 1); + r = make_module(device, &m, pModule); + } else { + r = vkb_emu_real()->vkCreateShaderModule(device, ci, pAllocator, pModule); + } + spv_free(&m); + if (r != VK_SUCCESS) return r; + shader_rec *rec = calloc(1, sizeof(*rec)); + rec->module = *pModule; + rec->size = ci->codeSize; + rec->code = malloc(ci->codeSize); + memcpy(rec->code, ci->pCode, ci->codeSize); + shader_state *s = state(e); + pthread_mutex_lock(&s->lock); + unsigned h = mh(*pModule); + rec->next = s->mods[h]; + s->mods[h] = rec; + pthread_mutex_unlock(&s->lock); + return r; +} + +static VKAPI_ATTR void VKAPI_CALL emu_DestroyShaderModule(VkDevice device, VkShaderModule module, const VkAllocationCallbacks *pAllocator) +{ + vkb_emu_device *e = vkb_emu_cur(); + if (module) { + shader_state *s = state(e); + pthread_mutex_lock(&s->lock); + shader_rec **pp = &s->mods[mh(module)]; + while (*pp && (*pp)->module != module) pp = &(*pp)->next; + shader_rec *r = *pp; + if (r) *pp = r->next; + pthread_mutex_unlock(&s->lock); + if (r) { + free(r->code); + free(r); + } + } + vkb_emu_real()->vkDestroyShaderModule(device, module, pAllocator); +} + +/* The SPIR-V of a stage: its module's (kept here) or the inline VkShaderModuleCreateInfo's. */ +static int stage_code(vkb_emu_device *e, const VkPipelineShaderStageCreateInfo *st, const uint32_t **code, size_t *size) +{ + if (st->module) { + const shader_rec *r = find_module(e, st->module); + if (!r) return 0; + *code = r->code; + *size = r->size; + return 1; + } + for (const VkBaseInStructure *b = st->pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) { + *code = ((const VkShaderModuleCreateInfo *)b)->pCode; + *size = ((const VkShaderModuleCreateInfo *)b)->codeSize; + return 1; + } + } + return 0; +} + +/* Replace a stage's shader by a rewritten module (recorded for destruction after the call). */ +static void set_stage_module(VkDevice device, VkPipelineShaderStageCreateInfo *st, const spv_mod *m, VkShaderModule *mods, + uint32_t *nmods, uint32_t cap) +{ + VkShaderModule mod; + if (*nmods >= cap || make_module(device, m, &mod) != VK_SUCCESS) return; + mods[(*nmods)++] = mod; + st->module = mod; + vkb_emu_chain_take(st, VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO); +} + +void vkb_emu_shader_pipeline(vkb_emu_device *e, VkDevice device, VkGraphicsPipelineCreateInfo *ci, VkShaderModule *mods, + uint32_t *nmods, uint32_t cap) +{ + if (!(e->flags & SHADER_EMU) || !ci->pStages) return; + VkPipelineShaderStageCreateInfo *pre = NULL, *frag = NULL; + int pre_rank = -1; + for (uint32_t s = 0; s < ci->stageCount; s++) { + VkPipelineShaderStageCreateInfo *st = (VkPipelineShaderStageCreateInfo *)&ci->pStages[s]; + int rank = st->stage == VK_SHADER_STAGE_VERTEX_BIT ? 0 : st->stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT ? 1 + : st->stage == VK_SHADER_STAGE_GEOMETRY_BIT ? 2 : -1; + if (rank > pre_rank) { + pre_rank = rank; + pre = st; + } + if (st->stage == VK_SHADER_STAGE_FRAGMENT_BIT) frag = st; + } + if (!pre) return; + const uint32_t *code; + size_t size; + if (!stage_code(e, pre, &code, &size)) return; + spv_mod pm; + if (spv_parse(&pm, code, size) != 0) return; + if (!spv_has_capability(&pm, SpvCapabilityClipDistance) && !spv_has_capability(&pm, SpvCapabilityCullDistance) && + !spv_has_capability(&pm, SpvCapabilityGeometryPointSize) && !spv_has_capability(&pm, SpvCapabilityTessellationPointSize)) { + spv_free(&pm); + return; + } + spv_mod fm; + int have_frag = 0; + const uint32_t *fcode; + size_t fsize; + if (frag && stage_code(e, frag, &fcode, &fsize) && spv_parse(&fm, fcode, fsize) == 0) have_frag = 1; + int loc = spv_max_location(&pm, SpvStorageClassOutput); + if (have_frag) { + int fl = spv_max_location(&fm, SpvStorageClassInput); + if (fl > loc) loc = fl; + } + int clip = rewrite_pre_raster(&pm, e->flags, (uint32_t)(loc + 1), 1); + if (clip >= 0) set_stage_module(device, pre, &pm, mods, nmods, cap); + if (clip > 0) { + if (have_frag) { + if (rewrite_fragment(&fm, (uint32_t)(loc + 1), (uint32_t)clip) == 0) set_stage_module(device, frag, &fm, mods, nmods, cap); + } else { + VKB_ONCE(VKB_LOG_WARN, "emulation: clip distances in a pipeline without a fragment shader are not applied (logged once)"); + } + } + VKB_DBG("emulation: pipeline with %d clip distance(s) rewritten at location %d", clip, loc + 1); + spv_free(&pm); + if (have_frag) spv_free(&fm); +} + +/* A vertex shader that reads BaseInstance as 0 (divisor emulation splits draws, which moves + * BaseInstance; DXVK derives SV_InstanceID from it). VK_NULL_HANDLE when the shader never reads it. */ +VkShaderModule vkb_emu_shader_zero_base_instance(vkb_emu_device *e, VkDevice device, const VkPipelineShaderStageCreateInfo *vs) +{ + const uint32_t *code; + size_t size; + if (!e->shaders || !stage_code(e, vs, &code, &size)) return VK_NULL_HANDLE; + spv_mod m; + if (spv_parse(&m, code, size) != 0) return VK_NULL_HANDLE; + int in_block; + uint32_t var = builtin_var(&m, SpvBuiltInBaseInstance, SpvStorageClassInput, &in_block); + VkShaderModule out = VK_NULL_HANDLE; + if (var) { + int d = spv_find_def(&m, var); + int p = d >= 0 ? spv_find_def(&m, m.ins[d].w[0]) : -1; + uint32_t type = p >= 0 ? m.ins[p].w[2] : 0; + int td = spv_find_def(&m, type); + uint32_t zero = 0; + if (td >= 0 && m.ins[td].op == SpvOpTypeInt) { + zero = spv_new_id(&m); + uint32_t ops[3] = {type, zero, 0}; + spv_insert(&m, spv_types_end(&m), SpvOpConstant, ops, 3); + } + int changed = 0; + for (uint32_t i = 0; zero && i < m.count; i++) { + spv_inst *in = &m.ins[i]; + if (in->op == SpvOpLoad && in->w[2] == var) { + /* %r = OpLoad %int %BaseInstance -> %r = OpCopyObject %int %zero */ + in->op = 83; /* OpCopyObject */ + in->w[2] = zero; + in->n = 4; + changed = 1; + } + } + if (changed) make_module(device, &m, &out); + } + spv_free(&m); + return out; +} + +void vkb_emu_shader_install(vkb_srv_table *dev) +{ + vkb_emu_device *e = dev->emu; + if (!(e->flags & SHADER_STORE)) return; + shader_state *s = calloc(1, sizeof(*s)); + pthread_mutex_init(&s->lock, NULL); + e->shaders = s; + dev->dt.vkCreateShaderModule = emu_CreateShaderModule; + dev->dt.vkDestroyShaderModule = emu_DestroyShaderModule; +} + +void vkb_emu_shader_uninstall(vkb_srv_table *dev) +{ + shader_state *s = dev->emu->shaders; + if (!s) return; + for (int i = 0; i < 1024; i++) { + while (s->mods[i]) { + shader_rec *r = s->mods[i]; + s->mods[i] = r->next; + free(r->code); + free(r); + } + } + pthread_mutex_destroy(&s->lock); + free(s); + dev->emu->shaders = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_instance.c b/app/src/main/cpp/vkbridge/server_instance.c new file mode 100644 index 000000000..6b6c25dbf --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_instance.c @@ -0,0 +1,354 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Instances, devices and the startup self-test. + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include +#include +#include + +vkb_pd_knowledge vkb_pds[VKB_MAX_PDS]; +int vkb_npds; + +static int has_ext(const VkExtensionProperties *e, uint32_t n, const char *name) +{ + for (uint32_t i = 0; i < n; i++) + if (!strcmp(e[i].extensionName, name)) return 1; + return 0; +} + +const vkb_pd_knowledge *vkb_pd_lookup(const vkb_dispatch *dt, VkPhysicalDevice pd) +{ + VkPhysicalDeviceIDProperties id = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES}; + VkPhysicalDeviceProperties2 p2 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, &id}; + if (!dt->vkGetPhysicalDeviceProperties2) return NULL; + dt->vkGetPhysicalDeviceProperties2(pd, &p2); + for (int i = 0; i < vkb_npds; i++) + if (vkb_pds[i].valid && !memcmp(vkb_pds[i].uuid, id.deviceUUID, VK_UUID_SIZE)) return &vkb_pds[i]; + return NULL; +} + +/* What the self-test found, for a later session's log (the in-app server tests once). */ +void vkb_log_summary(void) +{ + for (int i = 0; i < vkb_npds; i++) { + const vkb_pd_knowledge *k = &vkb_pds[i]; + if (k->valid) + VKB_INFO("%s: memory sharing = %s, missing 0x%x, emulating 0x%x (from the first session's self-test)", k->name, + vkb_mem_strategy_name(k->info.strategy), k->info.missing, k->info.emu); + } +} + +/* ------------------------------------------------------------------ startup self-test */ + +static void log_device(const vkb_dispatch *dt, VkPhysicalDevice pd, const VkPhysicalDeviceProperties *p) +{ + VKB_INFO("GPU: %s (vendor 0x%04x device 0x%04x, Vulkan %u.%u.%u, driver 0x%08x)", p->deviceName, + p->vendorID, p->deviceID, VK_API_VERSION_MAJOR(p->apiVersion), VK_API_VERSION_MINOR(p->apiVersion), + VK_API_VERSION_PATCH(p->apiVersion), p->driverVersion); + VkPhysicalDeviceFeatures f; + dt->vkGetPhysicalDeviceFeatures(pd, &f); +#define F(x) #x, f.x + VKB_INFO("features: %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u", F(textureCompressionBC), F(shaderClipDistance), + F(shaderCullDistance), F(geometryShader), F(tessellationShader), F(depthClamp), F(shaderFloat64), F(shaderInt64)); + VKB_INFO("features: %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u", F(multiViewport), F(independentBlend), F(logicOp), + F(fillModeNonSolid), F(dualSrcBlend), F(sampleRateShading), F(depthBiasClamp), F(wideLines)); + VKB_INFO("features: %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u", F(drawIndirectFirstInstance), F(multiDrawIndirect), + F(occlusionQueryPrecise), F(pipelineStatisticsQuery), F(vertexPipelineStoresAndAtomics), + F(fragmentStoresAndAtomics), F(shaderStorageImageWriteWithoutFormat), F(imageCubeArray)); + VKB_INFO("features: %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u", F(robustBufferAccess), F(fullDrawIndexUint32), F(samplerAnisotropy), + F(depthBounds), F(largePoints), F(shaderStorageImageExtendedFormats)); +#undef F + uint32_t n = 0; + dt->vkEnumerateDeviceExtensionProperties(pd, NULL, &n, NULL); + VkExtensionProperties *e = calloc(n ? n : 1, sizeof(*e)); + dt->vkEnumerateDeviceExtensionProperties(pd, NULL, &n, e); + static const char *const watch[] = { + "VK_EXT_depth_clip_enable", "VK_EXT_vertex_attribute_divisor", "VK_KHR_vertex_attribute_divisor", + "VK_EXT_external_memory_dma_buf", "VK_EXT_image_drm_format_modifier", "VK_KHR_external_memory_fd", + "VK_EXT_external_memory_host", "VK_ANDROID_external_memory_android_hardware_buffer", + "VK_KHR_external_semaphore_fd", "VK_KHR_external_fence_fd", "VK_EXT_queue_family_foreign", + "VK_EXT_robustness2", "VK_EXT_transform_feedback", "VK_EXT_custom_border_color", + "VK_EXT_mutable_descriptor_type", "VK_VALVE_mutable_descriptor_type", "VK_EXT_extended_dynamic_state3", + "VK_EXT_graphics_pipeline_library", "VK_EXT_physical_device_drm", "VK_KHR_push_descriptor", + "VK_EXT_descriptor_indexing", "VK_KHR_timeline_semaphore", "VK_EXT_memory_budget", + "VK_KHR_maintenance5", "VK_EXT_line_rasterization", "VK_EXT_provoking_vertex", + }; + char line[1024]; + size_t len = 0; + line[0] = 0; + for (size_t i = 0; i < sizeof(watch) / sizeof(watch[0]); i++) { + int ok = has_ext(e, n, watch[i]); + len += (size_t)snprintf(line + len, sizeof(line) - len, "%s%s%s", len ? " " : "", ok ? "+" : "-", watch[i] + 3); + if (len > 700 || i + 1 == sizeof(watch) / sizeof(watch[0])) { + VKB_INFO("extensions: %s", line); + len = 0; + line[0] = 0; + } + } + VKB_INFO("%u device extensions in total", n); + /* All of them, until the device runs show which ones the server's process sees (it is not an + * app process, and saw fewer than the capability viewer on the same tablet). */ + len = 0; + line[0] = 0; + for (uint32_t i = 0; i < n; i++) { + len += (size_t)snprintf(line + len, sizeof(line) - len, "%s%s:%u", len ? " " : "", e[i].extensionName + 3, e[i].specVersion); + if (len > 700 || i + 1 == n) { + VKB_INFO(" all: %s", line); + len = 0; + line[0] = 0; + } + } + free(e); + VkPhysicalDeviceMemoryProperties mp; + dt->vkGetPhysicalDeviceMemoryProperties(pd, &mp); + for (uint32_t i = 0; i < mp.memoryHeapCount; i++) + VKB_INFO("memory heap %u: %llu MB flags 0x%x", i, (unsigned long long)(mp.memoryHeaps[i].size >> 20), mp.memoryHeaps[i].flags); + for (uint32_t i = 0; i < mp.memoryTypeCount; i++) + VKB_INFO("memory type %u: heap %u flags 0x%x", i, mp.memoryTypes[i].heapIndex, mp.memoryTypes[i].propertyFlags); +} + +void vkb_selftest_all(void) +{ + uint32_t api = VK_API_VERSION_1_0; + if (vkb_global_dt.vkEnumerateInstanceVersion) vkb_global_dt.vkEnumerateInstanceVersion(&api); + if (api > VK_API_VERSION_1_3) api = VK_API_VERSION_1_3; + VkApplicationInfo app = {VK_STRUCTURE_TYPE_APPLICATION_INFO, NULL, "vkbridge-selftest", 1, "vkbridge", 1, api}; + VkInstanceCreateInfo ci = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, NULL, 0, &app, 0, NULL, 0, NULL}; + VkInstance inst; + VkResult r = vkb_global_dt.vkCreateInstance(&ci, NULL, &inst); + if (r != VK_SUCCESS) { + VKB_ERR("self-test: vkCreateInstance failed (%d); the driver is unusable", r); + return; + } + vkb_dispatch dt; + vkb_dispatch_load_instance(&dt, vkb_gipa, inst); + uint32_t n = 0; + dt.vkEnumeratePhysicalDevices(inst, &n, NULL); + if (n > VKB_MAX_PDS) n = VKB_MAX_PDS; + VkPhysicalDevice pds[VKB_MAX_PDS]; + dt.vkEnumeratePhysicalDevices(inst, &n, pds); + VKB_INFO("self-test: loader Vulkan %u.%u, %u physical device(s)", VK_API_VERSION_MAJOR(api), VK_API_VERSION_MINOR(api), n); + for (uint32_t i = 0; i < n; i++) { + VkPhysicalDeviceIDProperties id = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES}; + VkPhysicalDeviceProperties2 p2 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, &id}; + dt.vkGetPhysicalDeviceProperties2(pds[i], &p2); + log_device(&dt, pds[i], &p2.properties); + vkb_pd_knowledge *k = &vkb_pds[vkb_npds++]; + memcpy(k->uuid, id.deviceUUID, VK_UUID_SIZE); + snprintf(k->name, sizeof(k->name), "%s", p2.properties.deviceName); + k->info.real_api_version = p2.properties.apiVersion; + vkb_mem_selftest(k, inst, &dt, pds[i]); + k->info.emu_available = vkb_emu_detect(&dt, pds[i], &k->info.missing); + k->info.emu = k->info.emu_available; + const char *emu_env = getenv("VKBRIDGE_EMULATE"); + if (emu_env && !strcmp(emu_env, "0")) k->info.emu = 0; + k->valid = 1; + VKB_INFO("%s: memory sharing = %s, missing 0x%x, emulating 0x%x", k->name, vkb_mem_strategy_name(k->info.strategy), + k->info.missing, k->info.emu); + } + dt.vkDestroyInstance(inst, NULL); +} + +/* ------------------------------------------------------------------ instance */ + +void vkb_sv_vkCreateInstance(vkb_srv_call *c) +{ + VkInstanceCreateInfo *ci = NULL; + if (vkb_dec_u8(&c->d)) { + ci = vkb_dec_alloc(&c->d, sizeof(*ci)); + if (ci) vkb_dec_VkInstanceCreateInfo(&c->d, ci); + } + uint8_t want_out = vkb_dec_u8(&c->d); + if (c->d.err || !ci || !want_out) { + vkb_srv_bad_message(c); + return; + } + VkInstance inst = VK_NULL_HANDLE; + VkResult r = vkb_global_dt.vkCreateInstance(ci, NULL, &inst); + uint32_t id = 0; + if (r == VK_SUCCESS) { + vkb_srv_table *t = calloc(1, sizeof(*t)); + pthread_mutex_init(&t->lock, NULL); + t->instance = inst; + t->proc = c->conn->proc; + t->api_version = ci->pApplicationInfo ? ci->pApplicationInfo->apiVersion : VK_API_VERSION_1_0; + vkb_dispatch_load_instance(&t->real, vkb_gipa, inst); + t->dt = t->real; + id = vkb_table_register(t); + if (!id) { + t->real.vkDestroyInstance(inst, NULL); + free(t); + r = VK_ERROR_OUT_OF_HOST_MEMORY; + inst = VK_NULL_HANDLE; + } else { + VKB_INFO("instance %u created (app \"%s\", engine \"%s\", Vulkan %u.%u)", id, + ci->pApplicationInfo && ci->pApplicationInfo->pApplicationName ? ci->pApplicationInfo->pApplicationName : "", + ci->pApplicationInfo && ci->pApplicationInfo->pEngineName ? ci->pApplicationInfo->pEngineName : "", + VK_API_VERSION_MAJOR(t->api_version), VK_API_VERSION_MINOR(t->api_version)); + } + } else { + VKB_ERR("vkCreateInstance failed: %d", r); + } + vkb_enc_u32(&c->r, (uint32_t)r); + vkb_enc_u64(&c->r, (uint64_t)(uintptr_t)inst); + vkb_enc_u32(&c->r, id); +} + +void vkb_sv_vkDestroyInstance(vkb_srv_call *c) +{ + VkInstance inst = (VkInstance)(uintptr_t)vkb_dec_u64(&c->d); + vkb_srv_table *t = c->table; + if (!t || t->is_device || t->instance != inst) { + vkb_srv_bad_message(c); + return; + } + vkb_table_unregister(t); + t->real.vkDestroyInstance(inst, NULL); + pthread_mutex_destroy(&t->lock); + free(t); + c->table = NULL; +} + +void vkb_sv_vkbQueryServer(vkb_srv_call *c) +{ + VkPhysicalDevice pd = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(&c->d); + if (c->d.err || !c->table) { + vkb_srv_bad_message(c); + return; + } + const vkb_pd_knowledge *k = vkb_pd_lookup(c->dt, pd); + vkb_server_pd_info info; + memset(&info, 0, sizeof(info)); + if (k) info = k->info; + else VKB_WARN("query for a physical device the self-test did not see"); + vkb_enc_raw(&c->r, &info, sizeof(info)); +} + +/* ------------------------------------------------------------------ device */ + +static int list_has(const char *const *l, uint32_t n, const char *s) +{ + for (uint32_t i = 0; i < n; i++) + if (l[i] && !strcmp(l[i], s)) return 1; + return 0; +} + +void vkb_sv_vkCreateDevice(vkb_srv_call *c) +{ + VkPhysicalDevice pd = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(&c->d); + VkDeviceCreateInfo *ci = NULL; + if (vkb_dec_u8(&c->d)) { + ci = vkb_dec_alloc(&c->d, sizeof(*ci)); + if (ci) vkb_dec_VkDeviceCreateInfo(&c->d, ci); + } + uint8_t want_out = vkb_dec_u8(&c->d); + vkb_srv_table *inst = c->table; + if (c->d.err || !ci || !want_out || !inst || inst->is_device) { + vkb_srv_bad_message(c); + return; + } + const vkb_pd_knowledge *k = vkb_pd_lookup(&inst->real, pd); + uint32_t strategy = k ? k->info.strategy : VKB_MEM_NONE; + uint32_t emu = k ? k->info.emu : 0; + + /* Extensions the server itself needs (memory sharing), when the driver has them. */ + uint32_t avail_n = 0; + inst->real.vkEnumerateDeviceExtensionProperties(pd, NULL, &avail_n, NULL); + VkExtensionProperties *avail = vkb_dec_alloc(&c->d, (avail_n ? avail_n : 1) * sizeof(*avail)); + inst->real.vkEnumerateDeviceExtensionProperties(pd, NULL, &avail_n, avail); + uint32_t extra_n = 0; + const char *const *extra = vkb_mem_required_extensions(strategy, &extra_n); + const char **exts = vkb_dec_alloc(&c->d, (ci->enabledExtensionCount + extra_n + 10) * sizeof(char *)); + uint32_t n = 0; + for (uint32_t i = 0; i < ci->enabledExtensionCount; i++) { + const char *e = ci->ppEnabledExtensionNames[i]; + if (!has_ext(avail, avail_n, e)) { + VKB_DBG("device extension %s is emulated or client-side; not passed to the driver", e); + continue; + } + exts[n++] = e; + } + for (uint32_t i = 0; i < extra_n; i++) + if (has_ext(avail, avail_n, extra[i]) && !list_has(exts, n, extra[i])) exts[n++] = extra[i]; + /* What the client's presentation code uses on every device (dma-buf swapchains, sync fds). */ + static const char *const wsi_exts[] = { + "VK_KHR_external_memory_fd", "VK_EXT_external_memory_dma_buf", "VK_KHR_image_format_list", + "VK_EXT_image_drm_format_modifier", "VK_KHR_external_semaphore_fd", "VK_KHR_external_fence_fd", + }; + for (size_t i = 0; i < sizeof(wsi_exts) / sizeof(wsi_exts[0]); i++) + if (has_ext(avail, avail_n, wsi_exts[i]) && !list_has(exts, n, wsi_exts[i])) exts[n++] = wsi_exts[i]; + /* The BC decoder binds its buffer and image with push descriptors. */ + if ((emu & VKB_EMU_BCN) && has_ext(avail, avail_n, "VK_KHR_push_descriptor") && !list_has(exts, n, "VK_KHR_push_descriptor")) + exts[n++] = "VK_KHR_push_descriptor"; + ci->enabledExtensionCount = n; + ci->ppEnabledExtensionNames = exts; + ci->enabledLayerCount = 0; + ci->ppEnabledLayerNames = NULL; + + vkb_emu_device_create_info(inst, pd, emu, ci, c->d.arena); + + VkDevice dev = VK_NULL_HANDLE; + VkResult r = inst->real.vkCreateDevice(pd, ci, NULL, &dev); + uint32_t id = 0; + if (r == VK_SUCCESS) { + vkb_srv_table *t = calloc(1, sizeof(*t)); + pthread_mutex_init(&t->lock, NULL); + t->is_device = 1; + t->proc = c->conn->proc; + t->instance = inst->instance; + t->device = dev; + t->physical = pd; + t->parent = inst; + t->pd = k; + t->api_version = inst->api_version; + t->real = inst->real; + PFN_vkGetDeviceProcAddr gdpa = (PFN_vkGetDeviceProcAddr)vkb_gipa(inst->instance, "vkGetDeviceProcAddr"); + vkb_dispatch_load_device(&t->real, gdpa, dev); + t->dt = t->real; + id = vkb_table_register(t); + if (!id) { + t->real.vkDestroyDevice(dev, NULL); + free(t); + dev = VK_NULL_HANDLE; + r = VK_ERROR_OUT_OF_HOST_MEMORY; + } else { + vkb_emu_device_init(t, emu); + vkb_pcache_device_init(t); + vkb_dsmap_device_init(t); + vkb_spvfix_device_init(t); + VKB_INFO("device %u created on %s (%u extensions, memory sharing %s)", id, k ? k->name : "?", n, + vkb_mem_strategy_name(strategy)); + for (uint32_t i = 0; i < n; i++) VKB_DBG(" device extension %s", exts[i]); + } + } else { + VKB_ERR("vkCreateDevice failed: %d (%u extensions)", r, n); + for (uint32_t i = 0; i < n; i++) VKB_ERR(" requested %s", exts[i]); + } + vkb_enc_u32(&c->r, (uint32_t)r); + vkb_enc_u64(&c->r, (uint64_t)(uintptr_t)dev); + vkb_enc_u32(&c->r, id); +} + +void vkb_sv_vkDestroyDevice(vkb_srv_call *c) +{ + VkDevice dev = (VkDevice)(uintptr_t)vkb_dec_u64(&c->d); + vkb_srv_table *t = c->table; + if (!t || !t->is_device || t->device != dev) { + vkb_srv_bad_message(c); + return; + } + vkb_table_unregister(t); + vkb_spvfix_device_destroy(t); + vkb_dsmap_device_destroy(t); + vkb_pcache_device_destroy(t); + vkb_emu_device_destroy(t); + vkb_mem_free_all(t); + t->real.vkDestroyDevice(dev, NULL); + VKB_INFO("device %u destroyed", t->id); + pthread_mutex_destroy(&t->lock); + free(t); + c->table = NULL; +} diff --git a/app/src/main/cpp/vkbridge/server_main.c b/app/src/main/cpp/vkbridge/server_main.c new file mode 100644 index 000000000..8fe6d1fbe --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_main.c @@ -0,0 +1,329 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * vkbridge server entry point. + * + * libvkbridge_server.so --socket [--log ] [--vulkan ] [--cache-dir ] [--selftest] + * + * Packaged as a "library" so Android extracts it into the native library directory, from where + * the app executes it like proot. It loads the system Vulkan loader (on the device: the vendor's + * Mali driver behind /system/lib64/libvulkan.so), runs a self-test that decides how mapped memory + * is shared with the Linux side, then serves the session's Vulkan calls until it is killed or its + * parent dies. + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __ANDROID__ +#include +#elif defined(__GLIBC__) +#include +#endif + +PFN_vkGetInstanceProcAddr vkb_gipa; +vkb_dispatch vkb_global_dt; +int vkb_verbose; + +static FILE *log_file; +static int log_level = VKB_LOG_INFO; +static pthread_mutex_t log_lock = PTHREAD_MUTEX_INITIALIZER; + +int vkb_log_level(void) { return log_level; } + +void vkb_log(int level, const char *fmt, ...) +{ + if (level > log_level) return; + char msg[2048]; + va_list ap; + va_start(ap, fmt); + vsnprintf(msg, sizeof(msg), fmt, ap); + va_end(ap); + static const char *const tags[] = {"E", "W", "I", "D"}; + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + struct tm tm; + localtime_r(&ts.tv_sec, &tm); + pthread_mutex_lock(&log_lock); + FILE *f = log_file ? log_file : stderr; + fprintf(f, "%02d:%02d:%02d.%03ld vkbridge-server %s %s\n", tm.tm_hour, tm.tm_min, tm.tm_sec, + ts.tv_nsec / 1000000, tags[level & 3], msg); + fflush(f); + pthread_mutex_unlock(&log_lock); +#ifdef __ANDROID__ + static const int prio[] = {ANDROID_LOG_ERROR, ANDROID_LOG_WARN, ANDROID_LOG_INFO, ANDROID_LOG_DEBUG}; + __android_log_write(prio[level & 3], "vkbridge", msg); +#endif +} + +extern __thread const char *vkb_srv_current_cmd; + +/* A crash is almost always the driver's: say in which call, then die as we would have. */ +__attribute__((unused)) static void on_crash(int sig) +{ + char buf[256]; + const char *cmd = vkb_srv_current_cmd ? vkb_srv_current_cmd : "(no Vulkan call)"; + int n = snprintf(buf, sizeof(buf), "vkbridge-server E crashed with signal %d in %s\n", sig, cmd); + if (log_file) { + if (write(fileno(log_file), buf, (size_t)n) < 0) {} + } + if (write(2, buf, (size_t)n) < 0) {} +#ifdef __ANDROID__ + __android_log_write(ANDROID_LOG_FATAL, "vkbridge", buf); +#elif defined(__GLIBC__) + void *frames[32]; + int nf = backtrace(frames, 32); + backtrace_symbols_fd(frames, nf, 2); + if (log_file) backtrace_symbols_fd(frames, nf, fileno(log_file)); +#endif + signal(sig, SIG_DFL); + raise(sig); +} + +static void *load_vulkan(const char *override) +{ + const char *names[] = { + override, +#ifdef __ANDROID__ + "libvulkan.so", +#else + "libvulkan.so.1", + "libvulkan.so", +#endif + }; + for (size_t i = 0; i < sizeof(names) / sizeof(names[0]); i++) { + if (!names[i]) continue; + void *h = dlopen(names[i], RTLD_NOW | RTLD_LOCAL); + if (h) { + VKB_INFO("Vulkan loader: %s", names[i]); + return h; + } + VKB_WARN("cannot open %s: %s", names[i], dlerror()); + } + return NULL; +} + +static int listen_on(const char *path) +{ + struct sockaddr_un a; + if (strlen(path) >= sizeof(a.sun_path)) { + VKB_ERR("socket path too long (%zu bytes): %s", strlen(path), path); + return -1; + } + int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); + if (fd < 0) { + VKB_ERR("socket: %s", strerror(errno)); + return -1; + } + memset(&a, 0, sizeof(a)); + a.sun_family = AF_UNIX; + strcpy(a.sun_path, path); + unlink(path); + if (bind(fd, (struct sockaddr *)&a, sizeof(a)) < 0) { + VKB_ERR("bind %s: %s", path, strerror(errno)); + close(fd); + return -1; + } + chmod(path, 0600); + if (listen(fd, 128) < 0) { + VKB_ERR("listen: %s", strerror(errno)); + close(fd); + return -1; + } + return fd; +} + +/* Opens (or switches to) the log file; NULL keeps logging to stderr/logcat only. */ +static void open_log(const char *path) +{ + FILE *f = path ? fopen(path, "ae") : NULL; + if (path && !f) fprintf(stderr, "vkbridge-server: cannot open log %s: %s\n", path, strerror(errno)); + pthread_mutex_lock(&log_lock); + FILE *old = log_file; + log_file = f; + pthread_mutex_unlock(&log_lock); + if (old) fclose(old); +} + +/* Loads the Vulkan loader and runs the self-test; 0 when there is nothing to serve. */ +static int server_init(const char *vk_lib, const char *cache_dir) +{ + VKB_INFO("starting (pid %d, protocol %016llx)", getpid(), (unsigned long long)VKB_PROTOCOL_HASH); + void *lib = load_vulkan(vk_lib); + if (!lib) { + VKB_ERR("no Vulkan loader; nothing to serve"); + return 0; + } + vkb_gipa = (PFN_vkGetInstanceProcAddr)dlsym(lib, "vkGetInstanceProcAddr"); + if (!vkb_gipa) { + VKB_ERR("the Vulkan loader exports no vkGetInstanceProcAddr"); + return 0; + } + vkb_dispatch_load_instance(&vkb_global_dt, vkb_gipa, VK_NULL_HANDLE); + vkb_pcache_set_dir(cache_dir); + vkb_selftest_all(); + return 1; +} + +#ifdef VKB_JNI +/* + * In the app's own process (the default on the device): Android chooses the GPU driver, Samsung's + * updatable one included, while the app starts up, and only for the app's process - a separate + * executable gets the plain /vendor driver, which on the Tab S10+ lacked VK_EXT_robustness2 and + * more that the app itself sees. Winlator's Vortek runs its server in-process for the same reason. + * Started once and kept for the app's life; each session only points the log at its own folder. + */ +#include + +static pthread_mutex_t jni_lock = PTHREAD_MUTEX_INITIALIZER; +static char jni_socket[256]; +static int jni_state; /* 0 not started, 1 serving, -1 failed */ + +static void *serve_thread(void *arg) +{ + vkb_srv_serve((int)(intptr_t)arg); + VKB_ERR("in-app server stopped serving"); + return NULL; +} + +static char *jstr(JNIEnv *env, jstring s) +{ + if (!s) return NULL; + const char *c = (*env)->GetStringUTFChars(env, s, NULL); + char *r = c ? strdup(c) : NULL; + if (c) (*env)->ReleaseStringUTFChars(env, s, c); + return r; +} + +JNIEXPORT jint JNICALL Java_com_droiddeck_launcher_gpu_VkBridgeNative_nativeStart(JNIEnv *env, jclass cls, jstring jsocket, + jstring jlog, jstring jcache) +{ + (void)cls; + char *sock = jstr(env, jsocket), *logp = jstr(env, jlog), *cache = jstr(env, jcache); + pthread_mutex_lock(&jni_lock); + open_log(logp); + if (getenv("VKBRIDGE_DEBUG")) { + vkb_verbose = 1; + log_level = VKB_LOG_DEBUG; + } + int ok = 0; + if (jni_state == 1 && sock && !strcmp(sock, jni_socket) && access(sock, F_OK) == 0) { + VKB_INFO("in-app server already serving at %s (pid %d); this session's log continues here", sock, getpid()); + vkb_log_summary(); + ok = 1; + } else if (jni_state == 1) { + VKB_ERR("in-app server serves %s, asked for %s (or its socket is gone)", jni_socket, sock ? sock : "(none)"); + } else if (jni_state == 0 && sock) { + jni_state = -1; + if (server_init(NULL, cache)) { + int lfd = listen_on(sock); + pthread_t t; + if (lfd >= 0 && pthread_create(&t, NULL, serve_thread, (void *)(intptr_t)lfd) == 0) { + pthread_detach(t); + snprintf(jni_socket, sizeof(jni_socket), "%s", sock); + jni_state = 1; + ok = 1; + VKB_INFO("listening on %s (in the app's process)", sock); + } + } + } + pthread_mutex_unlock(&jni_lock); + free(sock); + free(logp); + free(cache); + return ok; +} +#else +static void usage(void) +{ + fprintf(stderr, "usage: vkbridge-server --socket PATH [--log FILE] [--vulkan LIB] [--cache-dir DIR] [--selftest] [--verbose]\n"); +} + +static pid_t parent_pid; + +static void *parent_watch(void *arg) +{ + (void)arg; + for (;;) { + sleep(1); + if (getppid() != parent_pid) { + VKB_INFO("the app (pid %d) is gone; exiting", (int)parent_pid); + _exit(0); + } + } + return NULL; +} + +static void start_parent_watch(void) +{ + parent_pid = getppid(); + if (parent_pid <= 1) return; /* started by init or a shell that already left: nothing to watch */ + pthread_t t; + pthread_attr_t a; + pthread_attr_init(&a); + pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED); + pthread_create(&t, &a, parent_watch, NULL); + pthread_attr_destroy(&a); +} + +int main(int argc, char **argv) +{ + const char *sock_path = getenv("VKBRIDGE_SOCKET"); + const char *log_path = getenv("VKBRIDGE_SERVER_LOG"); + const char *vk_lib = getenv("VKBRIDGE_SERVER_VULKAN"); + const char *cache_dir = getenv("VKBRIDGE_CACHE_DIR"); + int selftest_only = 0; + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--socket") && i + 1 < argc) sock_path = argv[++i]; + else if (!strcmp(argv[i], "--log") && i + 1 < argc) log_path = argv[++i]; + else if (!strcmp(argv[i], "--vulkan") && i + 1 < argc) vk_lib = argv[++i]; + else if (!strcmp(argv[i], "--cache-dir") && i + 1 < argc) cache_dir = argv[++i]; + else if (!strcmp(argv[i], "--selftest")) selftest_only = 1; + else if (!strcmp(argv[i], "--verbose")) vkb_verbose = 1; + else { + usage(); + return 2; + } + } + if (getenv("VKBRIDGE_DEBUG")) vkb_verbose = 1; + if (vkb_verbose) log_level = VKB_LOG_DEBUG; + open_log(log_path); + signal(SIGPIPE, SIG_IGN); + signal(SIGSEGV, on_crash); + signal(SIGBUS, on_crash); + signal(SIGABRT, on_crash); + signal(SIGILL, on_crash); + signal(SIGFPE, on_crash); + /* The server is the app's child: when the app dies, so does the session's GPU. Not with + * PR_SET_PDEATHSIG: that fires when the parent THREAD exits, and Android's ProcessBuilder forks + * from the session's start-up thread, which ends right after starting the guest (the server + * was killed 6 ms into the first device run). The parent process is watched instead. */ + start_parent_watch(); + + if (!server_init(vk_lib, cache_dir)) return 1; + if (selftest_only) return vkb_npds > 0 ? 0 : 1; + + if (!sock_path) { + usage(); + return 2; + } + int lfd = listen_on(sock_path); + if (lfd < 0) return 1; + VKB_INFO("listening on %s", sock_path); + vkb_srv_serve(lfd); + return 0; +} +#endif diff --git a/app/src/main/cpp/vkbridge/server_memory.c b/app/src/main/cpp/vkbridge/server_memory.c new file mode 100644 index 000000000..22b0cd872 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_memory.c @@ -0,0 +1,834 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Host-visible memory shared with the client. + * + * A Linux program maps Vulkan memory and writes to it directly; those writes must land in the + * pages the GPU reads. The server makes such memory shareable in one of three ways, chosen per + * GPU by a self-test at startup that checks the GPU and both CPU mappings really see the same + * bytes: + * hostptr the client creates a memfd, the server maps it and imports it + * (VK_EXT_external_memory_host); + * dmabuf the server allocates exportable memory and hands the client its dma-buf + * (VK_EXT_external_memory_dma_buf), which the client maps; + * ahb the server allocates a BLOB AHardwareBuffer, imports it, and hands the client the + * dma-buf behind it (Android only); + * dmaheap the server allocates from /dev/dma_heap (system-uncached, else system), imports that + * dma-buf into the driver and hands it to the client - what GameNative's wrapper does on + * Mali when the driver will not export one (Android; root-only on desktops). + * VKBRIDGE_MEMORY=hostptr|dmabuf|dmaheap|ahb forces one. + */ +#define _GNU_SOURCE +#ifdef __ANDROID__ +#define VK_USE_PLATFORM_ANDROID_KHR 1 +#endif +#include "vkb_server.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __ANDROID__ +#include +/* libnativewindow, opened at run time (getNativeHandle is not in the NDK headers). */ +typedef struct { + uint32_t width, height, layers, format; + uint64_t usage; + uint32_t stride, rfu0; + uint64_t rfu1; +} vkb_ahb_desc; +typedef struct { + int version, numFds, numInts; + int data[0]; +} vkb_native_handle; +static int (*p_AHardwareBuffer_allocate)(const vkb_ahb_desc *, struct AHardwareBuffer **); +static void (*p_AHardwareBuffer_release)(struct AHardwareBuffer *); +static const vkb_native_handle *(*p_AHardwareBuffer_getNativeHandle)(const struct AHardwareBuffer *); +#define AHB_FORMAT_BLOB 0x21 +#define AHB_USAGE_CPU_READ_OFTEN 3ull +#define AHB_USAGE_CPU_WRITE_OFTEN (3ull << 4) +#define AHB_USAGE_GPU_DATA_BUFFER (1ull << 24) + +static int ahb_load(void) +{ + static int state; + if (state) return state > 0; + void *h = dlopen("libnativewindow.so", RTLD_NOW); + if (!h) h = dlopen("libandroid.so", RTLD_NOW); + if (h) { + p_AHardwareBuffer_allocate = dlsym(h, "AHardwareBuffer_allocate"); + p_AHardwareBuffer_release = dlsym(h, "AHardwareBuffer_release"); + p_AHardwareBuffer_getNativeHandle = dlsym(h, "AHardwareBuffer_getNativeHandle"); + } + state = (p_AHardwareBuffer_allocate && p_AHardwareBuffer_release && p_AHardwareBuffer_getNativeHandle) ? 1 : -1; + if (state < 0) VKB_WARN("AHardwareBuffer functions unavailable"); + return state > 0; +} +#endif + +static const char *const ext_hostptr[] = {"VK_KHR_external_memory", "VK_EXT_external_memory_host"}; +static const char *const ext_dmabuf[] = {"VK_KHR_external_memory", "VK_KHR_external_memory_fd", "VK_EXT_external_memory_dma_buf"}; +#ifdef __ANDROID__ +static const char *const ext_ahb[] = {"VK_KHR_external_memory", "VK_ANDROID_external_memory_android_hardware_buffer", + "VK_EXT_queue_family_foreign", "VK_KHR_sampler_ycbcr_conversion", + "VK_KHR_dedicated_allocation", "VK_KHR_get_memory_requirements2"}; +#endif + +const char *const *vkb_mem_required_extensions(uint32_t strategy, uint32_t *count) +{ + switch (strategy) { + case VKB_MEM_HOSTPTR: *count = 2; return ext_hostptr; + case VKB_MEM_DMABUF: *count = 3; return ext_dmabuf; + case VKB_MEM_DMAHEAP: *count = 3; return ext_dmabuf; +#ifdef __ANDROID__ + case VKB_MEM_AHB: *count = 6; return ext_ahb; +#endif + default: *count = 0; return NULL; + } +} + +static uint32_t strategy_handle_type(uint32_t s) +{ + switch (s) { + case VKB_MEM_HOSTPTR: return VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT; + case VKB_MEM_DMABUF: return VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; + case VKB_MEM_DMAHEAP: return VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; +#ifdef __ANDROID__ + case VKB_MEM_AHB: return VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID; +#endif + default: return 0; + } +} + +int vkb_memfd(const char *name, size_t size) +{ + int fd = (int)syscall(SYS_memfd_create, name, 1u /* MFD_CLOEXEC */); + if (fd < 0) return -1; + if (ftruncate(fd, (off_t)size) < 0) { + close(fd); + return -1; + } + return fd; +} + +/* ------------------------------------------------------------------ tracking */ + +static unsigned mem_hash(VkDeviceMemory m) +{ + uint64_t v = (uint64_t)(uintptr_t)m; + v ^= v >> 17; + v *= 0x9E3779B97F4A7C15ull; + return (unsigned)(v >> 56); +} + +void vkb_mem_track(vkb_srv_table *dev, vkb_srv_mem *m) +{ + pthread_mutex_lock(&dev->lock); + unsigned h = mem_hash(m->mem); + m->next = dev->mems[h]; + dev->mems[h] = m; + pthread_mutex_unlock(&dev->lock); +} + +vkb_srv_mem *vkb_mem_find(vkb_srv_table *dev, VkDeviceMemory mem, int remove) +{ + pthread_mutex_lock(&dev->lock); + vkb_srv_mem **pp = &dev->mems[mem_hash(mem)]; + while (*pp && (*pp)->mem != mem) pp = &(*pp)->next; + vkb_srv_mem *m = *pp; + if (m && remove) *pp = m->next; + pthread_mutex_unlock(&dev->lock); + return m; +} + +/* Frees the server-side resources of an allocation (the VkDeviceMemory must already be freed). */ +static void mem_release_backing(vkb_srv_mem *m) +{ + if (m->host_ptr) munmap(m->host_ptr, m->host_len); +#ifdef __ANDROID__ + if (m->ahb) p_AHardwareBuffer_release(m->ahb); +#endif + free(m); +} + +void vkb_mem_release(vkb_srv_table *dev, vkb_srv_mem *m) +{ + if (m->mapped) dev->real.vkUnmapMemory(dev->device, m->mem); + dev->real.vkFreeMemory(dev->device, m->mem, NULL); + mem_release_backing(m); +} + +void vkb_mem_free_all(vkb_srv_table *dev) +{ + for (int i = 0; i < 256; i++) { + vkb_srv_mem *m = dev->mems[i]; + dev->mems[i] = NULL; + while (m) { + vkb_srv_mem *n = m->next; + vkb_mem_release(dev, m); + m = n; + } + } +} + +/* The dma-heap the dmaheap strategy allocates from, opened once: system-uncached first (the GPU + * and the client both write through it without cache maintenance), else the cached system heap. */ +static int dmaheap_fd(void) +{ + static int fd = -2; + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&lock); + if (fd == -2) { + const char *names[] = {"/dev/dma_heap/system-uncached", "/dev/dma_heap/system"}; + if (getenv("VKBRIDGE_DMAHEAP_CACHED")) names[0] = "/dev/dma_heap/system"; + fd = -1; + for (int i = 0; i < 2 && fd < 0; i++) { + fd = open(names[i], O_RDONLY | O_CLOEXEC); + if (fd >= 0) VKB_INFO("dmaheap: allocating from %s", names[i]); + else VKB_INFO("dmaheap: %s: %s", names[i], strerror(errno)); + } + } + int r = fd; + pthread_mutex_unlock(&lock); + return r; +} + +/* Unlinks every structure of type t from the chain starting at *head. */ +static void chain_drop(const void **head, VkStructureType t) +{ + const VkBaseInStructure **pp = (const VkBaseInStructure **)head; + while (*pp) { + if ((*pp)->sType == t) *pp = (*pp)->pNext; + else pp = (const VkBaseInStructure **)&((VkBaseInStructure *)*pp)->pNext; + } +} + +/* The driver's vkGetDeviceProcAddr (for entry points the dispatch table does not carry). */ +PFN_vkGetDeviceProcAddr vkb_mem_gdpa; + +/* ------------------------------------------------------------------ allocation */ + +/* + * Allocates shared memory with strategy `s`. `ai` is the app's (or the self-test's) allocate + * info; for hostptr, `client_fd` is the client's memfd (consumed). On success *out_fd is the fd + * to send to the client (-1 for hostptr, where the client already has its pages). + */ +static VkResult alloc_shared(const vkb_dispatch *dt, VkDevice dev, uint32_t s, const VkMemoryAllocateInfo *ai, + int client_fd, vkb_srv_mem **out, int *out_fd) +{ + *out_fd = -1; + *out = NULL; + vkb_srv_mem *m = calloc(1, sizeof(*m)); + if (!m) { + if (client_fd >= 0) close(client_fd); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + m->size = ai->allocationSize; + m->type = ai->memoryTypeIndex; + m->strategy = s; + VkMemoryAllocateInfo info = *ai; + VkResult r = VK_ERROR_FEATURE_NOT_PRESENT; + switch (s) { + case VKB_MEM_HOSTPTR: { + if (client_fd < 0) break; + void *p = mmap(NULL, (size_t)ai->allocationSize, PROT_READ | PROT_WRITE, MAP_SHARED, client_fd, 0); + close(client_fd); + client_fd = -1; + if (p == MAP_FAILED) { + VKB_ERR("hostptr: mmap of the client's memory failed: %s", strerror(errno)); + r = VK_ERROR_OUT_OF_HOST_MEMORY; + break; + } + m->host_ptr = p; + m->host_len = (size_t)ai->allocationSize; + VkMemoryHostPointerPropertiesEXT hp = {VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT}; + if (!dt->vkGetMemoryHostPointerPropertiesEXT || + dt->vkGetMemoryHostPointerPropertiesEXT(dev, VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, p, &hp) != VK_SUCCESS || + !(hp.memoryTypeBits & (1u << ai->memoryTypeIndex))) { + r = VK_ERROR_INVALID_EXTERNAL_HANDLE; + break; + } + VkImportMemoryHostPointerInfoEXT imp = {VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT, info.pNext, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, p}; + info.pNext = &imp; + r = dt->vkAllocateMemory(dev, &info, NULL, &m->mem); + break; + } + case VKB_MEM_DMABUF: { + VkExportMemoryAllocateInfo exp = {VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, info.pNext, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT}; + /* An export the app asked for itself is merged rather than duplicated. */ + for (VkBaseOutStructure *b = (VkBaseOutStructure *)info.pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO) { + ((VkExportMemoryAllocateInfo *)b)->handleTypes |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; + exp.sType = VK_STRUCTURE_TYPE_MAX_ENUM; + } + } + if (exp.sType != VK_STRUCTURE_TYPE_MAX_ENUM) info.pNext = &exp; + r = dt->vkAllocateMemory(dev, &info, NULL, &m->mem); + if (r != VK_SUCCESS) { + VKB_INFO("dmabuf: exportable allocation of %llu bytes (type %u) failed: %d", (unsigned long long)info.allocationSize, + info.memoryTypeIndex, r); + break; + } + VkMemoryGetFdInfoKHR gi = {VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR, NULL, m->mem, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT}; + int fd = -1; + VkResult fr = dt->vkGetMemoryFdKHR ? dt->vkGetMemoryFdKHR(dev, &gi, &fd) : VK_ERROR_EXTENSION_NOT_PRESENT; + if (fr != VK_SUCCESS || fd < 0) { + VKB_INFO("dmabuf: vkGetMemoryFdKHR %s: %d (fd %d)", dt->vkGetMemoryFdKHR ? "failed" : "not loaded", fr, fd); + dt->vkFreeMemory(dev, m->mem, NULL); + m->mem = VK_NULL_HANDLE; + r = VK_ERROR_INVALID_EXTERNAL_HANDLE; + break; + } + *out_fd = fd; + break; + } + case VKB_MEM_DMAHEAP: { + int hfd = dmaheap_fd(); + if (hfd < 0) break; + uint64_t len = (ai->allocationSize + 4095) & ~4095ull; + struct dma_heap_allocation_data hd = {len, 0, O_RDWR | O_CLOEXEC, 0}; + if (ioctl(hfd, DMA_HEAP_IOCTL_ALLOC, &hd) < 0) { + VKB_INFO("dmaheap: allocating %llu bytes failed: %s", (unsigned long long)len, strerror(errno)); + r = VK_ERROR_OUT_OF_DEVICE_MEMORY; + break; + } + int fd = (int)hd.fd; + VkMemoryFdPropertiesKHR fp = {VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR}; + VkResult pr = dt->vkGetMemoryFdPropertiesKHR + ? dt->vkGetMemoryFdPropertiesKHR(dev, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, fd, &fp) + : VK_ERROR_EXTENSION_NOT_PRESENT; + if (pr != VK_SUCCESS || !(fp.memoryTypeBits & (1u << ai->memoryTypeIndex))) { + VKB_INFO("dmaheap: fd properties %d, memory types 0x%x (want type %u)", pr, fp.memoryTypeBits, ai->memoryTypeIndex); + close(fd); + r = VK_ERROR_INVALID_EXTERNAL_HANDLE; + break; + } + /* The import takes its own fd; ours goes to the client. A dedicated-allocation struct + * with an imported dma-buf crashes some Mali drivers (GameNative mesa PR #8): dropped. */ + int imp_fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); + VkImportMemoryFdInfoKHR imp = {VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR, info.pNext, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, imp_fd}; + chain_drop(&imp.pNext, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO); + chain_drop(&imp.pNext, VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO); + info.pNext = &imp; + info.allocationSize = len; + r = imp_fd >= 0 ? dt->vkAllocateMemory(dev, &info, NULL, &m->mem) : VK_ERROR_TOO_MANY_OBJECTS; + if (r != VK_SUCCESS) { + VKB_INFO("dmaheap: import of %llu bytes failed: %d", (unsigned long long)len, r); + if (imp_fd >= 0) close(imp_fd); /* a failed import leaves the fd with us */ + close(fd); + break; + } + *out_fd = fd; + break; + } +#ifdef __ANDROID__ + case VKB_MEM_AHB: { + if (!ahb_load()) break; + /* Through the device's own vkGetDeviceProcAddr: Android's loader answers NULL for it from + * vkGetInstanceProcAddr(NULL, ...), which desktop loaders allow (the first device run). */ + PFN_vkGetAndroidHardwareBufferPropertiesANDROID get_props = NULL; + if (vkb_mem_gdpa) + get_props = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)vkb_mem_gdpa(dev, "vkGetAndroidHardwareBufferPropertiesANDROID"); + if (!get_props) { + VKB_INFO("ahb: vkGetAndroidHardwareBufferPropertiesANDROID not found"); + break; + } + uint64_t sz = ai->allocationSize; + if (sz > 0xFFFFFFFFull) { + r = VK_ERROR_OUT_OF_DEVICE_MEMORY; + break; + } + /* CPU usage decides how gralloc caches the pages; VKBRIDGE_AHB_RARELY=1 asks for uncached. */ + uint64_t cpu = getenv("VKBRIDGE_AHB_RARELY") ? (2ull | (2ull << 4)) : (AHB_USAGE_CPU_READ_OFTEN | AHB_USAGE_CPU_WRITE_OFTEN); + vkb_ahb_desc d = {(uint32_t)sz, 1, 1, AHB_FORMAT_BLOB, cpu | AHB_USAGE_GPU_DATA_BUFFER, 0, 0, 0}; + struct AHardwareBuffer *ahb = NULL; + int ar = p_AHardwareBuffer_allocate(&d, &ahb); + if (ar != 0 || !ahb) { + VKB_INFO("ahb: AHardwareBuffer_allocate(%u bytes) failed: %d", (unsigned)sz, ar); + r = VK_ERROR_OUT_OF_DEVICE_MEMORY; + break; + } + m->ahb = ahb; + VkAndroidHardwareBufferPropertiesANDROID props = {VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID}; + VkResult pr = get_props(dev, ahb, &props); + if (pr != VK_SUCCESS || !(props.memoryTypeBits & (1u << ai->memoryTypeIndex))) { + VKB_INFO("ahb: properties %d, memory types 0x%x (want type %u)", pr, props.memoryTypeBits, ai->memoryTypeIndex); + r = VK_ERROR_INVALID_EXTERNAL_HANDLE; + break; + } + VkImportAndroidHardwareBufferInfoANDROID imp = {VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, info.pNext, ahb}; + info.pNext = &imp; + info.allocationSize = props.allocationSize; + r = dt->vkAllocateMemory(dev, &info, NULL, &m->mem); + if (r != VK_SUCCESS) { + VKB_INFO("ahb: import of %llu bytes failed: %d", (unsigned long long)info.allocationSize, r); + break; + } + const vkb_native_handle *nh = p_AHardwareBuffer_getNativeHandle(ahb); + if (!nh || nh->numFds < 1) { + VKB_INFO("ahb: no fd in the native handle (%d)", nh ? nh->numFds : -1); + dt->vkFreeMemory(dev, m->mem, NULL); + m->mem = VK_NULL_HANDLE; + r = VK_ERROR_INVALID_EXTERNAL_HANDLE; + break; + } + /* Mali's gralloc can put more than one fd in the handle (metadata beside the pages): the + * memory is the one at least as large as the allocation. */ + int pick = -1; + for (int i = 0; i < nh->numFds && pick < 0; i++) { + off_t end = lseek(nh->data[i], 0, SEEK_END); + if (end >= (off_t)sz) pick = nh->data[i]; + if (nh->numFds > 1) VKB_INFO("ahb: handle fd %d of %d is %lld bytes", i + 1, nh->numFds, (long long)end); + } + if (pick < 0) { + VKB_INFO("ahb: no fd in the handle covers %llu bytes", (unsigned long long)sz); + dt->vkFreeMemory(dev, m->mem, NULL); + m->mem = VK_NULL_HANDLE; + r = VK_ERROR_INVALID_EXTERNAL_HANDLE; + break; + } + *out_fd = fcntl(pick, F_DUPFD_CLOEXEC, 0); + break; + } +#endif + default: + break; + } + if (client_fd >= 0) close(client_fd); + if (r != VK_SUCCESS) { + mem_release_backing(m); + return r; + } + *out = m; + return VK_SUCCESS; +} + +/* ------------------------------------------------------------------ handlers */ + +static void close_import_fds(const void *pNext) +{ + for (const VkBaseInStructure *b = pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR) vkb_close_fd(((const VkImportMemoryFdInfoKHR *)b)->fd); +} + +void vkb_sv_vkAllocateMemory(vkb_srv_call *c) +{ + VkDevice dev = (VkDevice)(uintptr_t)vkb_dec_u64(&c->d); + VkMemoryAllocateInfo ai; + int have = vkb_dec_u8(&c->d); + if (have) vkb_dec_VkMemoryAllocateInfo(&c->d, &ai); + uint32_t mode = vkb_dec_u32(&c->d); + int client_fd = vkb_dec_fd(&c->d); + vkb_srv_table *t = c->table; + if (c->d.err || !have || !t || !t->is_device || t->device != dev) { + if (client_fd >= 0) close(client_fd); + vkb_srv_bad_message(c); + return; + } + VkResult r; + vkb_srv_mem *m = NULL; + int out_fd = -1; + if (mode == VKB_ALLOC_SHARED) { + uint32_t s = t->pd ? t->pd->info.strategy : VKB_MEM_NONE; + r = alloc_shared(c->dt, dev, s, &ai, client_fd, &m, &out_fd); + if (r != VK_SUCCESS) VKB_WARN("shared allocation of %llu bytes (type %u, %s) failed: %d", + (unsigned long long)ai.allocationSize, ai.memoryTypeIndex, vkb_mem_strategy_name(s), r); + } else { + if (client_fd >= 0) close(client_fd); + m = calloc(1, sizeof(*m)); + m->size = ai.allocationSize; + m->type = ai.memoryTypeIndex; + r = c->dt->vkAllocateMemory(dev, &ai, NULL, &m->mem); + if (r != VK_SUCCESS) { + close_import_fds(ai.pNext); + free(m); + m = NULL; + } + } + if (m) vkb_mem_track(t, m); + vkb_enc_u32(&c->r, (uint32_t)r); + vkb_enc_u64(&c->r, m ? (uint64_t)(uintptr_t)m->mem : 0); + vkb_enc_fd(&c->r, out_fd); + if (out_fd >= 0) vkb_srv_close_after_send(c, out_fd); + vkb_enc_u64(&c->r, m ? (uint64_t)m->size : 0); +} + +void vkb_sv_vkFreeMemory(vkb_srv_call *c) +{ + VkDevice dev = (VkDevice)(uintptr_t)vkb_dec_u64(&c->d); + VkDeviceMemory mem; + vkb_dec_bytes(&c->d, &mem, sizeof(mem)); + vkb_srv_table *t = c->table; + if (c->d.err || !t || !t->is_device || t->device != dev) { + vkb_srv_bad_message(c); + return; + } + if (!mem) return; + vkb_srv_mem *m = vkb_mem_find(t, mem, 1); + if (m) { + vkb_mem_release(t, m); + } else { + VKB_WARN("vkFreeMemory of untracked memory"); + c->dt->vkFreeMemory(dev, mem, NULL); + } +} + +static VkResult ensure_server_map(vkb_srv_table *t, vkb_srv_mem *m) +{ + if (m->mapped) return VK_SUCCESS; + pthread_mutex_lock(&t->lock); + VkResult r = VK_SUCCESS; + if (!m->mapped) r = t->real.vkMapMemory(t->device, m->mem, 0, VK_WHOLE_SIZE, 0, &m->mapped); + pthread_mutex_unlock(&t->lock); + return r; +} + +static void flush_or_invalidate(vkb_srv_call *c, int flush) +{ + VkDevice dev = (VkDevice)(uintptr_t)vkb_dec_u64(&c->d); + uint32_t n = vkb_dec_u32(&c->d); + vkb_srv_table *t = c->table; + if (c->d.err || !t || !t->is_device || t->device != dev || n > 65536) { + vkb_srv_bad_message(c); + return; + } + VkMappedMemoryRange *ranges = vkb_dec_alloc(&c->d, (n ? n : 1) * sizeof(*ranges)); + for (uint32_t i = 0; ranges && i < n; i++) vkb_dec_VkMappedMemoryRange(&c->d, &ranges[i]); + if (c->d.err) { + vkb_srv_bad_message(c); + return; + } + VkResult r = VK_SUCCESS; + for (uint32_t i = 0; i < n && r == VK_SUCCESS; i++) { + vkb_srv_mem *m = vkb_mem_find(t, ranges[i].memory, 0); + if (m) r = ensure_server_map(t, m); + } + if (r == VK_SUCCESS && n) { + r = flush ? c->dt->vkFlushMappedMemoryRanges(dev, n, ranges) : c->dt->vkInvalidateMappedMemoryRanges(dev, n, ranges); + } + vkb_enc_u32(&c->r, (uint32_t)r); +} + +void vkb_sv_vkFlushMappedMemoryRanges(vkb_srv_call *c) { flush_or_invalidate(c, 1); } +void vkb_sv_vkInvalidateMappedMemoryRanges(vkb_srv_call *c) { flush_or_invalidate(c, 0); } + +/* ------------------------------------------------------------------ self-test */ + +typedef struct { + const vkb_dispatch *idt; + vkb_dispatch dt; + VkPhysicalDevice pd; + VkDevice dev; + VkQueue queue; + VkCommandPool pool; + uint32_t qf; + VkPhysicalDeviceMemoryProperties mp; + VkDeviceSize import_align; +} selftest; + +static int submit_and_wait(selftest *st, VkCommandBuffer cb) +{ + VkFenceCreateInfo fci = {VK_STRUCTURE_TYPE_FENCE_CREATE_INFO}; + VkFence f; + if (st->dt.vkCreateFence(st->dev, &fci, NULL, &f) != VK_SUCCESS) return 0; + VkSubmitInfo si = {VK_STRUCTURE_TYPE_SUBMIT_INFO, NULL, 0, NULL, NULL, 1, &cb, 0, NULL}; + int ok = st->dt.vkQueueSubmit(st->queue, 1, &si, f) == VK_SUCCESS && + st->dt.vkWaitForFences(st->dev, 1, &f, VK_TRUE, 5000000000ull) == VK_SUCCESS; + st->dt.vkDestroyFence(st->dev, f, NULL); + return ok; +} + +#define TEST_SIZE (256u * 1024u) + +/* One allocation of `type` with strategy `s`, checked from both sides. 1 = shared and coherent + * (no flush needed), 2 = shared when flushed, 0 = not shared. */ +static int test_type_mode(selftest *st, uint32_t s, uint32_t type, int no_flush); + +/* Without flushes first: imported pages from an uncached heap are coherent in practice even where + * the driver's type does not say HOST_COHERENT (Mali-G720: dma-heap imports land in type 1, + * HOST_CACHED without COHERENT, and pass with no flush). Only if that fails, with flushes. */ +static int test_type(selftest *st, uint32_t s, uint32_t type) +{ + int coherent_flag = (st->mp.memoryTypes[type].propertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0; + if (!coherent_flag && !getenv("VKBRIDGE_SELFTEST_NOFLUSH")) { + int r = test_type_mode(st, s, type, 1); + if (r) { + VKB_INFO(" %s, type %u: coherent in practice (no flushes needed)", vkb_mem_strategy_name(s), type); + return 1; + } + } + return test_type_mode(st, s, type, 0); +} + +static int test_type_mode(selftest *st, uint32_t s, uint32_t type, int no_flush) +{ + const vkb_dispatch *dt = &st->dt; + int result = 0; + VkExternalMemoryBufferCreateInfo ext = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, NULL, strategy_handle_type(s)}; + VkBufferCreateInfo bci = {VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, &ext, 0, TEST_SIZE, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, + VK_SHARING_MODE_EXCLUSIVE, 0, NULL}; + VkBuffer buf = VK_NULL_HANDLE; + if (dt->vkCreateBuffer(st->dev, &bci, NULL, &buf) != VK_SUCCESS) return 0; + VkMemoryRequirements req; + dt->vkGetBufferMemoryRequirements(st->dev, buf, &req); + if (!(req.memoryTypeBits & (1u << type))) { + dt->vkDestroyBuffer(st->dev, buf, NULL); + return 0; + } + VkDeviceSize size = req.size; + if (s == VKB_MEM_HOSTPTR) size = (size + st->import_align - 1) & ~(st->import_align - 1); + VkMemoryAllocateInfo ai = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, size, type}; + int cfd = -1; + if (s == VKB_MEM_HOSTPTR) { + cfd = vkb_memfd("vkbridge-selftest", (size_t)size); + if (cfd < 0) { + dt->vkDestroyBuffer(st->dev, buf, NULL); + return 0; + } + } + int keep_fd = s == VKB_MEM_HOSTPTR ? fcntl(cfd, F_DUPFD_CLOEXEC, 0) : -1; + vkb_srv_mem *m = NULL; + int out_fd = -1; + VkResult r = alloc_shared(dt, st->dev, s, &ai, cfd, &m, &out_fd); + if (r != VK_SUCCESS) { + VKB_INFO(" %s, type %u: allocation failed (%d)", vkb_mem_strategy_name(s), type, r); + if (keep_fd >= 0) close(keep_fd); + dt->vkDestroyBuffer(st->dev, buf, NULL); + return 0; + } + int map_fd = s == VKB_MEM_HOSTPTR ? keep_fd : out_fd; + uint8_t *cmap = mmap(NULL, (size_t)m->size, PROT_READ | PROT_WRITE, MAP_SHARED, map_fd, 0); + if (map_fd >= 0) close(map_fd); + void *smap = NULL; + if (cmap == MAP_FAILED) { + VKB_INFO(" %s, type %u: the client cannot map the memory (%s)", vkb_mem_strategy_name(s), type, strerror(errno)); + cmap = NULL; + goto out; + } + if (dt->vkBindBufferMemory(st->dev, buf, m->mem, 0) != VK_SUCCESS || + dt->vkMapMemory(st->dev, m->mem, 0, VK_WHOLE_SIZE, 0, &smap) != VK_SUCCESS) { + VKB_INFO(" %s, type %u: bind/map failed", vkb_mem_strategy_name(s), type); + goto out; + } + int coherent = (st->mp.memoryTypes[type].propertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0; + /* VKBRIDGE_SELFTEST_NOFLUSH=1 forces it for every type. */ + if (no_flush || getenv("VKBRIDGE_SELFTEST_NOFLUSH")) coherent = 1; + VkMappedMemoryRange whole = {VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, NULL, m->mem, 0, VK_WHOLE_SIZE}; + + /* 1: the two CPU mappings are the same pages. */ + for (uint32_t i = 0; i < TEST_SIZE / 4; i += 997) ((volatile uint32_t *)cmap)[i] = 0x11220000u + i; + __sync_synchronize(); + for (uint32_t i = 0; i < TEST_SIZE / 4; i += 997) { + if (((volatile uint32_t *)smap)[i] != 0x11220000u + i) { + VKB_INFO(" %s, type %u: CPU mappings differ at word %u", vkb_mem_strategy_name(s), type, i); + goto out; + } + } + /* 2: GPU writes, client reads. 3: client writes, GPU copies, client reads the copy. */ + for (uint32_t i = TEST_SIZE / 8; i < TEST_SIZE / 8 + TEST_SIZE / 32; i++) ((volatile uint32_t *)cmap)[i] = 0x5a000000u ^ (i * 2654435761u); + if (!coherent) dt->vkFlushMappedMemoryRanges(st->dev, 1, &whole); + VkCommandBufferAllocateInfo cai = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL, st->pool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1}; + VkCommandBuffer cb; + if (dt->vkAllocateCommandBuffers(st->dev, &cai, &cb) != VK_SUCCESS) goto out; + VkCommandBufferBeginInfo bi = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, NULL}; + dt->vkBeginCommandBuffer(cb, &bi); + dt->vkCmdFillBuffer(cb, buf, 0, TEST_SIZE / 8, 0xA5A5A5A5u); + /* Layout (bytes): [0, N/8) GPU fill; [N/2, N/2 + N/8) written by the client and copied by + * the GPU to [3N/4, 3N/4 + N/8). */ + VkBufferCopy region = {TEST_SIZE / 2, TEST_SIZE / 4 * 3, TEST_SIZE / 8}; + dt->vkCmdCopyBuffer(cb, buf, buf, 1, ®ion); + VkMemoryBarrier mb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER, NULL, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT}; + dt->vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &mb, 0, NULL, 0, NULL); + dt->vkEndCommandBuffer(cb); + int submitted = submit_and_wait(st, cb); + dt->vkFreeCommandBuffers(st->dev, st->pool, 1, &cb); + if (!submitted) { + VKB_INFO(" %s, type %u: GPU submission failed", vkb_mem_strategy_name(s), type); + goto out; + } + if (!coherent) dt->vkInvalidateMappedMemoryRanges(st->dev, 1, &whole); + for (uint32_t i = 0; i < TEST_SIZE / 32; i++) { + if (((volatile uint32_t *)cmap)[i] != 0xA5A5A5A5u) { + VKB_INFO(" %s, type %u: the client does not see a GPU write (word %u = 0x%08x)", vkb_mem_strategy_name(s), type, i, + ((volatile uint32_t *)cmap)[i]); + goto out; + } + } + for (uint32_t i = 0; i < TEST_SIZE / 32; i++) { + uint32_t want = 0x5a000000u ^ ((TEST_SIZE / 8 + i) * 2654435761u); + uint32_t got = ((volatile uint32_t *)cmap)[TEST_SIZE / 16 * 3 + i]; + if (got != want) { + VKB_INFO(" %s, type %u: the GPU does not see a client write (word %u = 0x%08x, want 0x%08x)", vkb_mem_strategy_name(s), + type, i, got, want); + goto out; + } + } + result = coherent ? 1 : 2; + VKB_INFO(" %s, type %u (flags 0x%x): shared OK%s", vkb_mem_strategy_name(s), type, st->mp.memoryTypes[type].propertyFlags, + coherent ? ", coherent" : ", needs flushes"); +out: + if (cmap) munmap(cmap, (size_t)m->size); + if (smap) dt->vkUnmapMemory(st->dev, m->mem); + dt->vkDestroyBuffer(st->dev, buf, NULL); + dt->vkFreeMemory(st->dev, m->mem, NULL); + mem_release_backing(m); + return result; +} + +static int has_ext(const VkExtensionProperties *e, uint32_t n, const char *name) +{ + for (uint32_t i = 0; i < n; i++) + if (!strcmp(e[i].extensionName, name)) return 1; + return 0; +} + +/* What the driver says it can do with each kind of external buffer memory (the device runs). */ +static void log_external_props(const vkb_dispatch *idt, VkPhysicalDevice pd) +{ + if (!idt->vkGetPhysicalDeviceExternalBufferProperties) return; + static const struct { uint32_t bit; const char *name; } types[] = { + {VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, "opaque fd"}, + {VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, "dma-buf"}, + {VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, "host allocation"}, +#ifdef __ANDROID__ + {VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, "AHB"}, +#endif + }; + for (size_t i = 0; i < sizeof(types) / sizeof(types[0]); i++) { + VkPhysicalDeviceExternalBufferInfo bi = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, NULL, 0, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, + (VkExternalMemoryHandleTypeFlagBits)types[i].bit}; + VkExternalBufferProperties ep = {VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES}; + idt->vkGetPhysicalDeviceExternalBufferProperties(pd, &bi, &ep); + const VkExternalMemoryProperties *p = &ep.externalMemoryProperties; + VKB_INFO("external buffers, %s: features 0x%x (%s%s%s), export from 0x%x, compatible 0x%x", types[i].name, + p->externalMemoryFeatures, + p->externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT ? "dedicated-only " : "", + p->externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT ? "exportable " : "", + p->externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT ? "importable" : "", + p->exportFromImportedHandleTypes, p->compatibleHandleTypes); + } +} + +void vkb_mem_selftest(vkb_pd_knowledge *k, VkInstance inst, const vkb_dispatch *idt, VkPhysicalDevice pd) +{ + selftest st; + memset(&st, 0, sizeof(st)); + st.idt = idt; + st.pd = pd; + idt->vkGetPhysicalDeviceMemoryProperties(pd, &st.mp); + + uint32_t nq = 0; + idt->vkGetPhysicalDeviceQueueFamilyProperties(pd, &nq, NULL); + VkQueueFamilyProperties qp[16]; + if (nq > 16) nq = 16; + idt->vkGetPhysicalDeviceQueueFamilyProperties(pd, &nq, qp); + st.qf = 0; + for (uint32_t i = 0; i < nq; i++) + if (qp[i].queueFlags & (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT)) { + st.qf = i; + break; + } + + uint32_t ne = 0; + idt->vkEnumerateDeviceExtensionProperties(pd, NULL, &ne, NULL); + VkExtensionProperties *ex = calloc(ne ? ne : 1, sizeof(*ex)); + idt->vkEnumerateDeviceExtensionProperties(pd, NULL, &ne, ex); + + uint32_t candidates[4]; + int nc = 0; + const char *force = getenv("VKBRIDGE_MEMORY"); + /* GameNative's order on Mali: the driver's own export, a dma-heap import, then an AHB. */ + uint32_t order[] = {VKB_MEM_HOSTPTR, VKB_MEM_DMABUF, VKB_MEM_DMAHEAP, VKB_MEM_AHB}; + for (int i = 0; i < 4; i++) { + uint32_t s = order[i]; + if (force && strcmp(force, vkb_mem_strategy_name(s))) continue; + uint32_t n; + const char *const *req = vkb_mem_required_extensions(s, &n); + if (!req) continue; + int ok = 1; + for (uint32_t j = 0; j < n; j++) + if (strcmp(req[j], "VK_KHR_external_memory") && strcmp(req[j], "VK_KHR_sampler_ycbcr_conversion") && + strcmp(req[j], "VK_KHR_dedicated_allocation") && strcmp(req[j], "VK_KHR_get_memory_requirements2") && + !has_ext(ex, ne, req[j])) + ok = 0; + if (ok) candidates[nc++] = s; + else VKB_INFO("memory sharing: %s unavailable (driver lacks its extensions)", vkb_mem_strategy_name(s)); + } + + /* One test device with every candidate's extensions. */ + const char *exts[16]; + uint32_t nx = 0; + for (int i = 0; i < nc; i++) { + uint32_t n; + const char *const *req = vkb_mem_required_extensions(candidates[i], &n); + for (uint32_t j = 0; j < n; j++) { + if (!has_ext(ex, ne, req[j])) continue; + int dup = 0; + for (uint32_t q = 0; q < nx; q++) dup |= !strcmp(exts[q], req[j]); + if (!dup && nx < 16) exts[nx++] = req[j]; + } + } + free(ex); + float prio = 1.0f; + VkDeviceQueueCreateInfo qci = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, NULL, 0, st.qf, 1, &prio}; + VkDeviceCreateInfo dci = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, NULL, 0, 1, &qci, 0, NULL, nx, exts, NULL}; + if (idt->vkCreateDevice(pd, &dci, NULL, &st.dev) != VK_SUCCESS) { + VKB_ERR("memory self-test: cannot create a device"); + return; + } + st.dt = *idt; + PFN_vkGetDeviceProcAddr gdpa = (PFN_vkGetDeviceProcAddr)vkb_gipa(inst, "vkGetDeviceProcAddr"); + vkb_mem_gdpa = gdpa; + log_external_props(idt, pd); + vkb_dispatch_load_device(&st.dt, gdpa, st.dev); + st.dt.vkGetDeviceQueue(st.dev, st.qf, 0, &st.queue); + VkCommandPoolCreateInfo pci = {VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, NULL, 0, st.qf}; + st.dt.vkCreateCommandPool(st.dev, &pci, NULL, &st.pool); + + VkPhysicalDeviceExternalMemoryHostPropertiesEXT hostp = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT}; + VkPhysicalDeviceProperties2 p2 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, &hostp}; + idt->vkGetPhysicalDeviceProperties2(pd, &p2); + st.import_align = hostp.minImportedHostPointerAlignment ? hostp.minImportedHostPointerAlignment : 4096; + if (st.import_align < 4096) st.import_align = 4096; + + k->info.strategy = VKB_MEM_NONE; + for (int i = 0; i < nc; i++) { + uint32_t s = candidates[i]; + uint32_t shareable = 0, coherent = 0; + for (uint32_t t = 0; t < st.mp.memoryTypeCount; t++) { + if (!(st.mp.memoryTypes[t].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) continue; + if (st.mp.memoryTypes[t].propertyFlags & VK_MEMORY_PROPERTY_PROTECTED_BIT) continue; + int res = test_type(&st, s, t); + if (res) shareable |= 1u << t; + if (res == 1) coherent |= 1u << t; + } + if (coherent) { + k->info.strategy = s; + k->info.buffer_handle_types = strategy_handle_type(s); + k->info.shareable_types = shareable; + k->info.coherent_types = coherent; + k->info.import_alignment = st.import_align; + break; + } + VKB_INFO("memory sharing: %s failed the self-test", vkb_mem_strategy_name(s)); + } + if (k->info.strategy == VKB_MEM_NONE) + VKB_ERR("memory sharing: no method works on %s; Linux programs will get no host-visible memory", k->name); + + st.dt.vkDestroyCommandPool(st.dev, st.pool, NULL); + st.dt.vkDestroyDevice(st.dev, NULL); +} diff --git a/app/src/main/cpp/vkbridge/server_misc.c b/app/src/main/cpp/vkbridge/server_misc.c new file mode 100644 index 000000000..388c9b42d --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_misc.c @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Descriptor update templates. The client repacks the app's data to the layout of the template + * it created on the server (entries rewritten to packed offsets), so the blob is used as is. + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include + +void vkb_sv_vkbDescUpdateRaw(vkb_srv_call *c) +{ + VkDevice dev = (VkDevice)(uintptr_t)vkb_dec_u64(&c->d); + VkDescriptorSet set; + VkDescriptorUpdateTemplate tmpl; + vkb_dec_bytes(&c->d, &set, sizeof(set)); + vkb_dec_bytes(&c->d, &tmpl, sizeof(tmpl)); + size_t n = 0; + const void *data = vkb_dec_blob(&c->d, &n); + if (c->d.err || !c->table) { + vkb_srv_bad_message(c); + return; + } + if (!c->dt->vkUpdateDescriptorSetWithTemplate) { + vkb_srv_missing(c, "vkUpdateDescriptorSetWithTemplate"); + return; + } + c->dt->vkUpdateDescriptorSetWithTemplate(dev, set, tmpl, data); +} + +void vkb_sv_vkbPushDescRaw(vkb_srv_call *c) +{ + VkCommandBuffer cb = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(&c->d); + VkDescriptorUpdateTemplate tmpl; + VkPipelineLayout layout; + vkb_dec_bytes(&c->d, &tmpl, sizeof(tmpl)); + vkb_dec_bytes(&c->d, &layout, sizeof(layout)); + uint32_t set = vkb_dec_u32(&c->d); + size_t n = 0; + const void *data = vkb_dec_blob(&c->d, &n); + if (c->d.err || !c->table) { + vkb_srv_bad_message(c); + return; + } + if (!c->dt->vkCmdPushDescriptorSetWithTemplate) { + vkb_srv_missing(c, "vkCmdPushDescriptorSetWithTemplate"); + return; + } + extern __thread size_t vkb_emu_push_size; + vkb_emu_push_size = n; + c->dt->vkCmdPushDescriptorSetWithTemplate(cb, tmpl, layout, set, data); + vkb_emu_push_size = 0; +} diff --git a/app/src/main/cpp/vkbridge/server_pcache.c b/app/src/main/cpp/vkbridge/server_pcache.c new file mode 100644 index 000000000..9db19947c --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_pcache.c @@ -0,0 +1,287 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Persistent pipeline cache. Mali compiles every pipeline from scratch in each new process unless + * it is handed a VkPipelineCache; games through DXVK pass none. With a cache directory set + * (--cache-dir), each device gets a cache loaded from /--.vkpc: + * - pipelines created without a cache use it; + * - caches the app creates empty start from it, and are merged back into it when destroyed; + * - it is written back every few seconds while new pipelines come in (the app stops the server + * with SIGKILL, so there is no reliable last chance) and when the device goes away. + * The file's header is checked against the GPU before the driver sees it. + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#define PC_MAX_FILE (256u << 20) +#define PC_SAVE_PERIOD_S 10 + +typedef struct vkb_pcache { + vkb_srv_table *t; + VkPipelineCache cache; + char path[512]; + int dirty; + size_t saved_size; + PFN_vkCreateGraphicsPipelines create_gfx; + PFN_vkCreateComputePipelines create_compute; + PFN_vkCreatePipelineCache create_cache; + PFN_vkDestroyPipelineCache destroy_cache; + struct vkb_pcache *next; +} vkb_pcache; + +static const char *pc_dir; +static pthread_mutex_t pc_lock = PTHREAD_MUTEX_INITIALIZER; +static vkb_pcache *pc_list; +static int pc_thread_started; + +void vkb_pcache_set_dir(const char *dir) +{ + if (!dir || !*dir) return; + mkdir(dir, 0700); + pc_dir = dir; + VKB_INFO("pipeline cache directory %s", dir); +} + +static vkb_pcache *cur(void) +{ + vkb_srv_table *t = vkb_srv_current_table(); + return t ? t->pcache : NULL; +} + +/* The header every pipeline cache starts with (VkPipelineCacheHeaderVersionOne). */ +static int header_ok(const vkb_srv_table *t, const uint8_t *data, size_t size) +{ + VkPipelineCacheHeaderVersionOne h; + if (size < sizeof(h)) return 0; + memcpy(&h, data, sizeof(h)); + VkPhysicalDeviceProperties props; + t->real.vkGetPhysicalDeviceProperties(t->physical, &props); + return h.headerSize >= sizeof(h) && h.headerVersion == VK_PIPELINE_CACHE_HEADER_VERSION_ONE && + h.vendorID == props.vendorID && h.deviceID == props.deviceID && + !memcmp(h.pipelineCacheUUID, props.pipelineCacheUUID, VK_UUID_SIZE); +} + +static uint8_t *read_file(const char *path, size_t *size) +{ + *size = 0; + int fd = open(path, O_RDONLY | O_CLOEXEC); + if (fd < 0) return NULL; + struct stat st; + uint8_t *buf = NULL; + if (fstat(fd, &st) == 0 && st.st_size > 0 && (uint64_t)st.st_size <= PC_MAX_FILE && (buf = malloc((size_t)st.st_size))) { + size_t got = 0; + while (got < (size_t)st.st_size) { + ssize_t r = read(fd, buf + got, (size_t)st.st_size - got); + if (r <= 0) break; + got += (size_t)r; + } + if (got == (size_t)st.st_size) { + *size = got; + } else { + free(buf); + buf = NULL; + } + } + close(fd); + return buf; +} + +/* Writes the cache next to its file and renames it over, so a kill mid-write loses nothing. */ +static void save(vkb_pcache *p) +{ + vkb_srv_table *t = p->t; + size_t size = 0; + if (t->real.vkGetPipelineCacheData(t->device, p->cache, &size, NULL) != VK_SUCCESS || !size || size > PC_MAX_FILE) return; + if (size == p->saved_size) { + /* Nothing new was compiled (merges of what it already had leave the size alone). */ + p->dirty = 0; + return; + } + uint8_t *buf = malloc(size); + if (!buf) return; + VkResult r = t->real.vkGetPipelineCacheData(t->device, p->cache, &size, buf); + if (r == VK_SUCCESS) { + char tmp[600]; + snprintf(tmp, sizeof(tmp), "%s.%d.tmp", p->path, (int)getpid()); + int fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0600); + int ok = fd >= 0; + for (size_t done = 0; ok && done < size;) { + ssize_t w = write(fd, buf + done, size - done); + if (w < 0 && errno == EINTR) continue; + if (w <= 0) ok = 0; + else done += (size_t)w; + } + if (fd >= 0 && fsync(fd) != 0) ok = 0; + if (fd >= 0) close(fd); + if (ok && rename(tmp, p->path) == 0) { + VKB_INFO("device %u: pipeline cache saved (%zu KB)", t->id, size >> 10); + p->saved_size = size; + p->dirty = 0; + } else { + VKB_WARN("device %u: pipeline cache not saved to %s: %s", t->id, p->path, strerror(errno)); + unlink(tmp); + } + } + free(buf); +} + +static void *saver(void *arg) +{ + (void)arg; + for (;;) { + struct timespec ts = {PC_SAVE_PERIOD_S, 0}; + nanosleep(&ts, NULL); + pthread_mutex_lock(&pc_lock); + for (vkb_pcache *p = pc_list; p; p = p->next) + if (__atomic_load_n(&p->dirty, __ATOMIC_RELAXED)) save(p); + pthread_mutex_unlock(&pc_lock); + } + return NULL; +} + +/* ------------------------------------------------------------------ wrappers */ + +static VkResult VKAPI_CALL pc_CreateGraphicsPipelines(VkDevice device, VkPipelineCache cache, uint32_t n, + const VkGraphicsPipelineCreateInfo *ci, const VkAllocationCallbacks *a, + VkPipeline *out) +{ + vkb_pcache *p = cur(); + if (!cache) { + cache = p->cache; + __atomic_store_n(&p->dirty, 1, __ATOMIC_RELAXED); + } + return p->create_gfx(device, cache, n, ci, a, out); +} + +static VkResult VKAPI_CALL pc_CreateComputePipelines(VkDevice device, VkPipelineCache cache, uint32_t n, + const VkComputePipelineCreateInfo *ci, const VkAllocationCallbacks *a, + VkPipeline *out) +{ + vkb_pcache *p = cur(); + if (!cache) { + cache = p->cache; + __atomic_store_n(&p->dirty, 1, __ATOMIC_RELAXED); + } + return p->create_compute(device, cache, n, ci, a, out); +} + +static VkResult VKAPI_CALL pc_CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *ci, + const VkAllocationCallbacks *a, VkPipelineCache *out) +{ + vkb_pcache *p = cur(); + if (ci->initialDataSize) return p->create_cache(device, ci, a, out); + size_t size = 0; + uint8_t *buf = NULL; + if (p->t->real.vkGetPipelineCacheData(device, p->cache, &size, NULL) == VK_SUCCESS && size && (buf = malloc(size)) && + p->t->real.vkGetPipelineCacheData(device, p->cache, &size, buf) != VK_SUCCESS) + size = 0; + VkPipelineCacheCreateInfo seeded = *ci; + seeded.initialDataSize = buf ? size : 0; + seeded.pInitialData = buf; + VkResult r = p->create_cache(device, &seeded, a, out); + free(buf); + return r; +} + +static void VKAPI_CALL pc_DestroyPipelineCache(VkDevice device, VkPipelineCache cache, const VkAllocationCallbacks *a) +{ + vkb_pcache *p = cur(); + if (cache && cache != p->cache && p->t->real.vkMergePipelineCaches(device, p->cache, 1, &cache) == VK_SUCCESS) + __atomic_store_n(&p->dirty, 1, __ATOMIC_RELAXED); + p->destroy_cache(device, cache, a); +} + +/* ------------------------------------------------------------------ device hooks */ + +void vkb_pcache_device_init(vkb_srv_table *t) +{ + if (!pc_dir || !t->real.vkCreatePipelineCache || !t->real.vkGetPipelineCacheData || !t->real.vkMergePipelineCaches) return; + vkb_pcache *p = calloc(1, sizeof(*p)); + if (!p) return; + p->t = t; + VkPhysicalDeviceProperties props; + t->real.vkGetPhysicalDeviceProperties(t->physical, &props); + char uuid[2 * VK_UUID_SIZE + 1]; + for (int i = 0; i < VK_UUID_SIZE; i++) snprintf(uuid + 2 * i, 3, "%02x", props.pipelineCacheUUID[i]); + snprintf(p->path, sizeof(p->path), "%s/%04x-%04x-%s.vkpc", pc_dir, props.vendorID, props.deviceID, uuid); + + size_t size; + uint8_t *data = read_file(p->path, &size); + if (data && !header_ok(t, data, size)) { + VKB_WARN("device %u: %s is not this GPU's pipeline cache; starting empty", t->id, p->path); + free(data); + data = NULL; + size = 0; + } + VkPipelineCacheCreateInfo ci = {VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, NULL, 0, data ? size : 0, data}; + VkResult r = t->real.vkCreatePipelineCache(t->device, &ci, NULL, &p->cache); + if (r != VK_SUCCESS && data) { + VKB_WARN("device %u: driver refused the saved pipeline cache (%d); starting empty", t->id, r); + ci.initialDataSize = 0; + ci.pInitialData = NULL; + r = t->real.vkCreatePipelineCache(t->device, &ci, NULL, &p->cache); + } + free(data); + if (r != VK_SUCCESS) { + VKB_WARN("device %u: no pipeline cache (%d)", t->id, r); + free(p); + return; + } + p->saved_size = size; + VKB_INFO("device %u: pipeline cache %s (%zu KB loaded)", t->id, p->path, size >> 10); + + vkb_dispatch *dt = &t->dt; + p->create_gfx = dt->vkCreateGraphicsPipelines; + p->create_compute = dt->vkCreateComputePipelines; + p->create_cache = dt->vkCreatePipelineCache; + p->destroy_cache = dt->vkDestroyPipelineCache; + dt->vkCreateGraphicsPipelines = pc_CreateGraphicsPipelines; + dt->vkCreateComputePipelines = pc_CreateComputePipelines; + dt->vkCreatePipelineCache = pc_CreatePipelineCache; + dt->vkDestroyPipelineCache = pc_DestroyPipelineCache; + t->pcache = p; + + pthread_mutex_lock(&pc_lock); + p->next = pc_list; + pc_list = p; + if (!pc_thread_started) { + pthread_t th; + pthread_attr_t at; + pthread_attr_init(&at); + pthread_attr_setdetachstate(&at, PTHREAD_CREATE_DETACHED); + pc_thread_started = pthread_create(&th, &at, saver, NULL) == 0; + pthread_attr_destroy(&at); + } + pthread_mutex_unlock(&pc_lock); +} + +/* Before the device is destroyed: last save, then the cache goes. */ +void vkb_pcache_device_destroy(vkb_srv_table *t) +{ + vkb_pcache *p = t->pcache; + if (!p) return; + pthread_mutex_lock(&pc_lock); + for (vkb_pcache **pp = &pc_list; *pp; pp = &(*pp)->next) { + if (*pp == p) { + *pp = p->next; + break; + } + } + if (p->dirty) save(p); + pthread_mutex_unlock(&pc_lock); + t->dt.vkCreateGraphicsPipelines = p->create_gfx; + t->dt.vkCreateComputePipelines = p->create_compute; + t->dt.vkCreatePipelineCache = p->create_cache; + t->dt.vkDestroyPipelineCache = p->destroy_cache; + t->real.vkDestroyPipelineCache(t->device, p->cache, NULL); + t->pcache = NULL; + free(p); +} diff --git a/app/src/main/cpp/vkbridge/server_spvfix.c b/app/src/main/cpp/vkbridge/server_spvfix.c new file mode 100644 index 000000000..b0524f2b6 --- /dev/null +++ b/app/src/main/cpp/vkbridge/server_spvfix.c @@ -0,0 +1,149 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * SPIR-V fixes for Mali's shader compiler, applied to every module the app hands the driver. + * + * DXVK (1.7.3 and later) guards texture reads with OpSelect(cond, texel, vec4(0)) where cond is an + * OpConstantComposite of OpSpecConstantTrue/False. Mali's compiler folds that composite as if it + * were a plain constant - taking the spec constants at their default - and every texture reads + * black. Declaring the composite OpSpecConstantComposite (same operands, same length) keeps it + * specializable and the fold away. Found by leegao (bionic-vulkan-wrapper issue #93, + * "OpCompositeConstant" write-up, 2025-08-10); Vortek patches the same pattern. + * + * The code is patched in place: it lives in the server's receive buffer (vkCreateShaderModule's + * pCode, or a VkShaderModuleCreateInfo chained to a pipeline stage), so nothing is copied. + * On for ARM GPUs; VKBRIDGE_SPIRV_FIX=1/0 forces it (host tests). + */ +#define _GNU_SOURCE +#include "vkb_server.h" + +#include +#include + +#define OP_SPEC_CONSTANT_TRUE 48 +#define OP_SPEC_CONSTANT_FALSE 49 +#define OP_SPEC_CONSTANT 50 +#define OP_SPEC_CONSTANT_COMPOSITE 51 +#define OP_SPEC_CONSTANT_OP 52 +#define OP_CONSTANT_COMPOSITE 44 +#define OP_FUNCTION 54 + +typedef struct vkb_spvfix { + PFN_vkCreateShaderModule create_module; + PFN_vkCreateGraphicsPipelines create_gfx; + PFN_vkCreateComputePipelines create_compute; + unsigned long patched; /* composites changed, for the log */ +} vkb_spvfix; + +static vkb_spvfix *cur(void) +{ + vkb_srv_table *t = vkb_srv_current_table(); + return t ? t->spvfix : NULL; +} + +/* Patches one module in place; returns the number of composites changed. */ +static unsigned fix_module(uint32_t *w, size_t bytes) +{ + size_t n = bytes / 4; + if (n < 5 || w[0] != 0x07230203u) return 0; + uint32_t bound = w[3]; + if (!bound || bound > (1u << 24)) return 0; + uint8_t *spec = calloc(bound, 1); + if (!spec) return 0; + unsigned changed = 0; + for (size_t i = 5; i < n;) { + uint32_t op = w[i] & 0xffff, len = w[i] >> 16; + if (!len || i + len > n) break; + if (op == OP_FUNCTION) break; /* constants all come before the first function */ + if ((op == OP_SPEC_CONSTANT_TRUE || op == OP_SPEC_CONSTANT_FALSE || op == OP_SPEC_CONSTANT || + op == OP_SPEC_CONSTANT_COMPOSITE || op == OP_SPEC_CONSTANT_OP) && len >= 3 && w[i + 2] < bound) { + spec[w[i + 2]] = 1; + } else if (op == OP_CONSTANT_COMPOSITE && len >= 3 && w[i + 2] < bound) { + int any = 0; + for (uint32_t k = 3; k < len; k++) any |= w[i + k] < bound && spec[w[i + k]]; + if (any) { + /* A composite of spec constants is itself one: declared so, it is no longer folded. */ + w[i] = (len << 16) | OP_SPEC_CONSTANT_COMPOSITE; + spec[w[i + 2]] = 1; + changed++; + } + } + i += len; + } + free(spec); + return changed; +} + +static void note(vkb_spvfix *f, unsigned changed) +{ + if (!changed) return; + unsigned long before = __atomic_fetch_add(&f->patched, changed, __ATOMIC_RELAXED); + if (!before) VKB_INFO("SPIR-V fix: spec-constant composites redeclared for Mali's compiler (first in this device)"); +} + +static void fix_stages(vkb_spvfix *f, uint32_t n, const VkPipelineShaderStageCreateInfo *st) +{ + for (uint32_t i = 0; i < n; i++) + for (const VkBaseInStructure *b = st[i].pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) { + const VkShaderModuleCreateInfo *mi = (const void *)b; + note(f, fix_module((uint32_t *)mi->pCode, mi->codeSize)); + } +} + +static VkResult VKAPI_CALL fx_CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *ci, const VkAllocationCallbacks *a, + VkShaderModule *out) +{ + vkb_spvfix *f = cur(); + note(f, fix_module((uint32_t *)ci->pCode, ci->codeSize)); + return f->create_module(device, ci, a, out); +} + +static VkResult VKAPI_CALL fx_CreateGraphicsPipelines(VkDevice device, VkPipelineCache cache, uint32_t n, + const VkGraphicsPipelineCreateInfo *ci, const VkAllocationCallbacks *a, + VkPipeline *out) +{ + vkb_spvfix *f = cur(); + for (uint32_t i = 0; i < n; i++) fix_stages(f, ci[i].stageCount, ci[i].pStages); + return f->create_gfx(device, cache, n, ci, a, out); +} + +static VkResult VKAPI_CALL fx_CreateComputePipelines(VkDevice device, VkPipelineCache cache, uint32_t n, + const VkComputePipelineCreateInfo *ci, const VkAllocationCallbacks *a, + VkPipeline *out) +{ + vkb_spvfix *f = cur(); + for (uint32_t i = 0; i < n; i++) fix_stages(f, 1, &ci[i].stage); + return f->create_compute(device, cache, n, ci, a, out); +} + +void vkb_spvfix_device_init(vkb_srv_table *t) +{ + VkPhysicalDeviceProperties p; + t->real.vkGetPhysicalDeviceProperties(t->physical, &p); + const char *env = getenv("VKBRIDGE_SPIRV_FIX"); + int on = env ? strcmp(env, "0") != 0 : p.vendorID == 0x13B5; /* ARM */ + if (!on || !t->dt.vkCreateShaderModule) return; + vkb_spvfix *f = calloc(1, sizeof(*f)); + if (!f) return; + vkb_dispatch *dt = &t->dt; + f->create_module = dt->vkCreateShaderModule; + f->create_gfx = dt->vkCreateGraphicsPipelines; + f->create_compute = dt->vkCreateComputePipelines; + dt->vkCreateShaderModule = fx_CreateShaderModule; + dt->vkCreateGraphicsPipelines = fx_CreateGraphicsPipelines; + dt->vkCreateComputePipelines = fx_CreateComputePipelines; + t->spvfix = f; + VKB_INFO("device %u: Mali SPIR-V fixes on", t->id); +} + +void vkb_spvfix_device_destroy(vkb_srv_table *t) +{ + vkb_spvfix *f = t->spvfix; + if (!f) return; + t->dt.vkCreateShaderModule = f->create_module; + t->dt.vkCreateGraphicsPipelines = f->create_gfx; + t->dt.vkCreateComputePipelines = f->create_compute; + if (f->patched) VKB_INFO("device %u: SPIR-V fix changed %lu composites", t->id, f->patched); + free(f); + t->spvfix = NULL; +} diff --git a/app/src/main/cpp/vkbridge/spirv_edit.c b/app/src/main/cpp/vkbridge/spirv_edit.c new file mode 100644 index 000000000..cbf926c01 --- /dev/null +++ b/app/src/main/cpp/vkbridge/spirv_edit.c @@ -0,0 +1,328 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#include "spirv_edit.h" + +#include +#include + +int spv_parse(spv_mod *m, const uint32_t *code, size_t bytes) +{ + memset(m, 0, sizeof(*m)); + if (bytes < 20 || (bytes & 3) || code[0] != 0x07230203u) return -1; + memcpy(m->header, code, 20); + size_t words = bytes / 4, pos = 5; + while (pos < words) { + uint32_t n = code[pos] >> 16, op = code[pos] & 0xffff; + if (n == 0 || pos + n > words) return -1; + spv_insert(m, m->count, (uint16_t)op, code + pos + 1, (uint16_t)(n - 1)); + if (m->err) return -1; + pos += n; + } + return 0; +} + +size_t spv_write(const spv_mod *m, uint32_t **out) +{ + size_t words = 5; + for (uint32_t i = 0; i < m->count; i++) words += m->ins[i].n; + uint32_t *buf = malloc(words * 4); + if (!buf) return 0; + memcpy(buf, m->header, 20); + size_t pos = 5; + for (uint32_t i = 0; i < m->count; i++) { + const spv_inst *in = &m->ins[i]; + buf[pos++] = ((uint32_t)in->n << 16) | in->op; + memcpy(buf + pos, in->w, (size_t)(in->n - 1) * 4); + pos += in->n - 1; + } + *out = buf; + return words * 4; +} + +void spv_free(spv_mod *m) +{ + for (uint32_t i = 0; i < m->count; i++) free(m->ins[i].w); + free(m->ins); + memset(m, 0, sizeof(*m)); +} + +uint32_t spv_insert(spv_mod *m, uint32_t at, uint16_t op, const uint32_t *ops, uint16_t nops) +{ + if (m->count == m->cap) { + uint32_t nc = m->cap ? m->cap * 2 : 1024; + spv_inst *ni = realloc(m->ins, nc * sizeof(*ni)); + if (!ni) { + m->err = 1; + return 0; + } + m->ins = ni; + m->cap = nc; + } + if (at > m->count) at = m->count; + memmove(&m->ins[at + 1], &m->ins[at], (m->count - at) * sizeof(spv_inst)); + spv_inst *in = &m->ins[at]; + in->op = op; + in->n = (uint16_t)(nops + 1); + in->w = malloc((size_t)(nops ? nops : 1) * 4); + if (!in->w) m->err = 1; + else if (nops) memcpy(in->w, ops, (size_t)nops * 4); + m->count++; + return at; +} + +void spv_remove(spv_mod *m, uint32_t at) +{ + if (at >= m->count) return; + free(m->ins[at].w); + memmove(&m->ins[at], &m->ins[at + 1], (m->count - at - 1) * sizeof(spv_inst)); + m->count--; +} + +int spv_find_op(const spv_mod *m, uint16_t op, uint32_t from) +{ + for (uint32_t i = from; i < m->count; i++) + if (m->ins[i].op == op) return (int)i; + return -1; +} + +static int is_type(uint16_t op) { return op >= 19 && op <= 38; } +static int is_const(uint16_t op) { return (op >= 41 && op <= 46) || (op >= 48 && op <= 52); } + +uint32_t spv_result_id(const spv_inst *in) +{ + if (in->n < 2) return 0; + if (is_type(in->op) || in->op == SpvOpLabel || in->op == SpvOpString || in->op == SpvOpExtInstImport || in->op == 73) + return in->w[0]; + switch (in->op) { + case SpvOpName: case SpvOpMemberName: case SpvOpDecorate: case SpvOpMemberDecorate: case SpvOpEntryPoint: + case SpvOpExecutionMode: case SpvOpCapability: case SpvOpExtension: case SpvOpMemoryModel: case SpvOpStore: + case SpvOpBranch: case SpvOpBranchConditional: case SpvOpSelectionMerge: case SpvOpReturn: case SpvOpKill: + case SpvOpFunctionEnd: case SpvOpLine: case SpvOpNoLine: case SpvOpSource: case SpvOpSourceExtension: + case SpvOpDecorateId: case SpvOpDecorateString: case SpvOpMemberDecorateString: case SpvOpModuleProcessed: + case SpvOpExecutionModeId: case 246 /* LoopMerge */: case 251 /* Switch */: case 254 /* ReturnValue */: + case 255 /* Unreachable */: case 74: case 75: case 224 /* ControlBarrier */: case 225 /* MemoryBarrier */: + case SpvOpTerminateInvocation: + return 0; + default: + return in->n >= 3 ? in->w[1] : 0; + } +} + +int spv_find_def(const spv_mod *m, uint32_t id) +{ + for (uint32_t i = 0; i < m->count; i++) + if (spv_result_id(&m->ins[i]) == id) return (int)i; + return -1; +} + +uint32_t spv_types_end(const spv_mod *m) +{ + int f = spv_find_op(m, SpvOpFunction, 0); + return f < 0 ? m->count : (uint32_t)f; +} + +uint32_t spv_annotations_end(const spv_mod *m) +{ + uint32_t end = spv_types_end(m); + for (uint32_t i = 0; i < end; i++) { + uint16_t op = m->ins[i].op; + if (is_type(op) || is_const(op) || op == SpvOpVariable || op == SpvOpUndef) return i; + } + return end; +} + +static uint32_t add_global(spv_mod *m, uint16_t op, const uint32_t *ops, uint16_t n) +{ + uint32_t at = spv_types_end(m); + spv_insert(m, at, op, ops, n); + return at; +} + +uint32_t spv_type_float(spv_mod *m, uint32_t width) +{ + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpTypeFloat && m->ins[i].w[1] == width && m->ins[i].n == 3) return m->ins[i].w[0]; + uint32_t id = spv_new_id(m), ops[2] = {id, width}; + add_global(m, SpvOpTypeFloat, ops, 2); + return id; +} + +uint32_t spv_type_int(spv_mod *m, uint32_t width, uint32_t sign) +{ + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpTypeInt && m->ins[i].w[1] == width && m->ins[i].w[2] == sign) return m->ins[i].w[0]; + uint32_t id = spv_new_id(m), ops[3] = {id, width, sign}; + add_global(m, SpvOpTypeInt, ops, 3); + return id; +} + +uint32_t spv_type_bool(spv_mod *m) +{ + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpTypeBool) return m->ins[i].w[0]; + uint32_t id = spv_new_id(m); + add_global(m, SpvOpTypeBool, &id, 1); + return id; +} + +uint32_t spv_type_pointer(spv_mod *m, uint32_t storage, uint32_t pointee) +{ + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpTypePointer && m->ins[i].w[1] == storage && m->ins[i].w[2] == pointee) return m->ins[i].w[0]; + uint32_t id = spv_new_id(m), ops[3] = {id, storage, pointee}; + add_global(m, SpvOpTypePointer, ops, 3); + return id; +} + +uint32_t spv_type_array(spv_mod *m, uint32_t elem, uint32_t len_const) +{ + for (uint32_t i = 0; i < m->count; i++) { + if (m->ins[i].op == SpvOpTypeArray && m->ins[i].w[1] == elem && m->ins[i].w[2] == len_const && + spv_get_decoration(m, m->ins[i].w[0], 6 /* ArrayStride */) < 0) + return m->ins[i].w[0]; + } + uint32_t id = spv_new_id(m), ops[3] = {id, elem, len_const}; + add_global(m, SpvOpTypeArray, ops, 3); + return id; +} + +uint32_t spv_const_u32(spv_mod *m, uint32_t v) +{ + uint32_t t = spv_type_int(m, 32, 0); + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpConstant && m->ins[i].w[0] == t && m->ins[i].n == 4 && m->ins[i].w[2] == v) return m->ins[i].w[1]; + uint32_t id = spv_new_id(m), ops[3] = {t, id, v}; + add_global(m, SpvOpConstant, ops, 3); + return id; +} + +uint32_t spv_const_f32(spv_mod *m, float v) +{ + uint32_t t = spv_type_float(m, 32), bits; + memcpy(&bits, &v, 4); + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpConstant && m->ins[i].w[0] == t && m->ins[i].n == 4 && m->ins[i].w[2] == bits) return m->ins[i].w[1]; + uint32_t id = spv_new_id(m), ops[3] = {t, id, bits}; + add_global(m, SpvOpConstant, ops, 3); + return id; +} + +int64_t spv_get_decoration(const spv_mod *m, uint32_t id, uint32_t decoration) +{ + for (uint32_t i = 0; i < m->count; i++) { + const spv_inst *in = &m->ins[i]; + if (in->op == SpvOpDecorate && in->w[0] == id && in->w[1] == decoration) return in->n > 3 ? (int64_t)in->w[2] : 0; + } + return -1; +} + +void spv_remove_decoration(spv_mod *m, uint32_t id, uint32_t decoration) +{ + for (uint32_t i = 0; i < m->count;) { + const spv_inst *in = &m->ins[i]; + if (in->op == SpvOpDecorate && in->w[0] == id && in->w[1] == decoration) spv_remove(m, i); + else i++; + } +} + +int spv_has_capability(const spv_mod *m, uint32_t cap) +{ + for (uint32_t i = 0; i < m->count; i++) + if (m->ins[i].op == SpvOpCapability && m->ins[i].w[0] == cap) return 1; + return 0; +} + +void spv_remove_capability(spv_mod *m, uint32_t cap) +{ + for (uint32_t i = 0; i < m->count;) { + if (m->ins[i].op == SpvOpCapability && m->ins[i].w[0] == cap) spv_remove(m, i); + else i++; + } +} + +void spv_add_capability(spv_mod *m, uint32_t cap) +{ + if (!spv_has_capability(m, cap)) spv_insert(m, 0, SpvOpCapability, &cap, 1); +} + +int spv_execution_model(const spv_mod *m) +{ + int e = spv_find_op(m, SpvOpEntryPoint, 0); + return e < 0 ? -1 : (int)m->ins[e].w[0]; +} + +void spv_add_interface(spv_mod *m, uint32_t var) +{ + for (uint32_t i = 0; i < m->count; i++) { + spv_inst *in = &m->ins[i]; + if (in->op != SpvOpEntryPoint) continue; + uint32_t *nw = realloc(in->w, (size_t)in->n * 4); + if (!nw) { + m->err = 1; + return; + } + nw[in->n - 1] = var; + in->w = nw; + in->n++; + } +} + +uint32_t spv_array_length(const spv_mod *m, uint32_t array_type) +{ + int d = spv_find_def(m, array_type); + if (d < 0 || m->ins[d].op != SpvOpTypeArray) return 0; + int c = spv_find_def(m, m->ins[d].w[2]); + if (c < 0 || m->ins[c].op != SpvOpConstant) return 0; + return m->ins[c].w[2]; +} + +/* Number of locations a type occupies. */ +static uint32_t loc_count(const spv_mod *m, uint32_t type, int depth) +{ + int d = spv_find_def(m, type); + if (d < 0 || depth > 16) return 1; + const spv_inst *in = &m->ins[d]; + switch (in->op) { + case SpvOpTypeArray: return spv_array_length(m, type) * loc_count(m, in->w[1], depth + 1); + case 24 /* Matrix */: return in->w[2] * loc_count(m, in->w[1], depth + 1); + case SpvOpTypeStruct: { + uint32_t s = 0; + for (uint32_t k = 1; k < (uint32_t)in->n - 1; k++) s += loc_count(m, in->w[k], depth + 1); + return s; + } + case SpvOpTypeVector: { + int e = spv_find_def(m, in->w[1]); + uint32_t width = e >= 0 ? m->ins[e].w[1] : 32; + return (width == 64 && in->w[2] > 2) ? 2 : 1; + } + default: return 1; + } +} + +int spv_max_location(const spv_mod *m, uint32_t storage) +{ + int max = -1; + for (uint32_t i = 0; i < m->count; i++) { + const spv_inst *in = &m->ins[i]; + if (in->op != SpvOpVariable || in->w[2] != storage) continue; + int p = spv_find_def(m, in->w[0]); + if (p < 0) continue; + uint32_t pointee = m->ins[p].w[2]; + int64_t loc = spv_get_decoration(m, in->w[1], SpvDecorationLocation); + if (loc >= 0) { + int top = (int)loc + (int)loc_count(m, pointee, 0) - 1; + if (top > max) max = top; + continue; + } + /* A block with member locations. */ + for (uint32_t k = 0; k < m->count; k++) { + const spv_inst *md = &m->ins[k]; + if (md->op == SpvOpMemberDecorate && md->w[0] == pointee && md->w[2] == SpvDecorationLocation) { + int st = spv_find_def(m, pointee); + uint32_t mt = st >= 0 && md->w[1] + 1 < m->ins[st].n ? m->ins[st].w[1 + md->w[1]] : 0; + int top = (int)md->w[3] + (int)loc_count(m, mt, 0) - 1; + if (top > max) max = top; + } + } + } + return max; +} diff --git a/app/src/main/cpp/vkbridge/spirv_edit.h b/app/src/main/cpp/vkbridge/spirv_edit.h new file mode 100644 index 000000000..a9387b014 --- /dev/null +++ b/app/src/main/cpp/vkbridge/spirv_edit.h @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * A small SPIR-V editor for the bridge's shader emulations: parse a module into instructions, + * look things up, append/insert/remove instructions, and write it back. + */ +#ifndef VKB_SPIRV_EDIT_H +#define VKB_SPIRV_EDIT_H + +#include +#include + +/* Opcodes and enums used (from the SPIR-V spec). */ +enum { + SpvOpName = 5, SpvOpMemberName = 6, SpvOpExtension = 10, SpvOpExtInstImport = 11, SpvOpMemoryModel = 14, + SpvOpEntryPoint = 15, SpvOpExecutionMode = 16, SpvOpCapability = 17, SpvOpTypeVoid = 19, SpvOpTypeBool = 20, + SpvOpTypeInt = 21, SpvOpTypeFloat = 22, SpvOpTypeVector = 23, SpvOpTypeArray = 28, SpvOpTypeRuntimeArray = 29, + SpvOpTypeStruct = 30, SpvOpTypePointer = 32, SpvOpTypeFunction = 33, SpvOpConstantTrue = 41, + SpvOpConstantFalse = 42, SpvOpConstant = 43, SpvOpConstantComposite = 44, SpvOpFunction = 54, + SpvOpFunctionParameter = 55, SpvOpFunctionEnd = 56, SpvOpVariable = 59, SpvOpLoad = 61, SpvOpStore = 62, + SpvOpAccessChain = 65, SpvOpInBoundsAccessChain = 66, SpvOpDecorate = 71, SpvOpMemberDecorate = 72, + SpvOpCompositeExtract = 81, SpvOpFOrdLessThan = 184, SpvOpLogicalOr = 166, SpvOpSelectionMerge = 247, + SpvOpLabel = 248, SpvOpBranch = 249, SpvOpBranchConditional = 250, SpvOpReturn = 253, SpvOpKill = 252, + SpvOpTerminateInvocation = 4416, SpvOpLine = 8, SpvOpNoLine = 317, SpvOpModuleProcessed = 330, + SpvOpString = 7, SpvOpSource = 3, SpvOpSourceExtension = 4, SpvOpSourceContinued = 2, SpvOpExecutionModeId = 331, + SpvOpDecorateId = 332, SpvOpDecorateString = 5632, SpvOpMemberDecorateString = 5633, SpvOpUndef = 1, + SpvOpExtInst = 12, SpvOpIAdd = 128, SpvOpUDiv = 134, SpvOpISub = 130, +}; +enum { SpvDecorationBuiltIn = 11, SpvDecorationLocation = 30, SpvDecorationComponent = 31, SpvDecorationBlock = 2, + SpvDecorationFlat = 14, SpvDecorationPatch = 15 }; +enum { SpvBuiltInPosition = 0, SpvBuiltInPointSize = 1, SpvBuiltInClipDistance = 3, SpvBuiltInCullDistance = 4, + SpvBuiltInInstanceIndex = 43, SpvBuiltInBaseInstance = 4425 }; +enum { SpvStorageClassInput = 1, SpvStorageClassOutput = 3, SpvStorageClassPrivate = 6, SpvStorageClassFunction = 7 }; +enum { SpvCapabilityClipDistance = 32, SpvCapabilityCullDistance = 33, SpvCapabilityTessellationPointSize = 23, + SpvCapabilityGeometryPointSize = 24, SpvCapabilityDrawParameters = 4427 }; +enum { SpvExecutionModelVertex = 0, SpvExecutionModelTessellationControl = 1, SpvExecutionModelTessellationEvaluation = 2, + SpvExecutionModelGeometry = 3, SpvExecutionModelFragment = 4, SpvExecutionModelGLCompute = 5 }; + +typedef struct spv_inst { + uint16_t op; + uint16_t n; /* word count including the first word */ + uint32_t *w; /* operand words (w[0] = first operand), n - 1 of them */ +} spv_inst; + +typedef struct spv_mod { + uint32_t header[5]; + spv_inst *ins; + uint32_t count, cap; + int err; +} spv_mod; + +int spv_parse(spv_mod *m, const uint32_t *code, size_t bytes); +/* Writes the module into a malloc'd buffer; returns its size in bytes (0 on failure). */ +size_t spv_write(const spv_mod *m, uint32_t **out); +void spv_free(spv_mod *m); + +static inline uint32_t spv_version(const spv_mod *m) { return m->header[1]; } +static inline uint32_t spv_new_id(spv_mod *m) { return m->header[3]++; } + +/* Insert an instruction before index `at` (at = count appends). Operands copied. Returns index. */ +uint32_t spv_insert(spv_mod *m, uint32_t at, uint16_t op, const uint32_t *ops, uint16_t nops); +void spv_remove(spv_mod *m, uint32_t at); + +/* Index of the first instruction with this opcode (or of the defining instruction of `id`), or -1. */ +int spv_find_op(const spv_mod *m, uint16_t op, uint32_t from); +int spv_find_def(const spv_mod *m, uint32_t id); +/* The id an instruction defines (result id), or 0. */ +uint32_t spv_result_id(const spv_inst *in); + +/* Section boundaries: index where new decorations / types / function code may be inserted. */ +uint32_t spv_types_end(const spv_mod *m); /* end of the types/constants/globals section */ +uint32_t spv_annotations_end(const spv_mod *m); /* end of the decoration section */ + +/* Types and constants: found when they already exist (non-aggregate types must be unique). */ +uint32_t spv_type_float(spv_mod *m, uint32_t width); +uint32_t spv_type_int(spv_mod *m, uint32_t width, uint32_t sign); +uint32_t spv_type_bool(spv_mod *m); +uint32_t spv_type_pointer(spv_mod *m, uint32_t storage, uint32_t pointee); +uint32_t spv_type_array(spv_mod *m, uint32_t elem, uint32_t len_const); +uint32_t spv_const_u32(spv_mod *m, uint32_t v); +uint32_t spv_const_f32(spv_mod *m, float v); + +/* Decorations of an id: returns the operand (after the decoration) or -1. */ +int64_t spv_get_decoration(const spv_mod *m, uint32_t id, uint32_t decoration); +void spv_remove_decoration(spv_mod *m, uint32_t id, uint32_t decoration); +int spv_has_capability(const spv_mod *m, uint32_t cap); +void spv_remove_capability(spv_mod *m, uint32_t cap); +void spv_add_capability(spv_mod *m, uint32_t cap); +/* The execution model of the (first) entry point, or -1. */ +int spv_execution_model(const spv_mod *m); +/* Adds an interface variable to every entry point. */ +void spv_add_interface(spv_mod *m, uint32_t var); +/* Highest Location used by variables of a storage class (members included), or -1. */ +int spv_max_location(const spv_mod *m, uint32_t storage); +/* Length of an OpTypeArray (via its constant), or 0. */ +uint32_t spv_array_length(const spv_mod *m, uint32_t array_type); + +#endif diff --git a/app/src/main/cpp/vkbridge/vkb_server.h b/app/src/main/cpp/vkbridge/vkb_server.h new file mode 100644 index 000000000..bab8b1e97 --- /dev/null +++ b/app/src/main/cpp/vkbridge/vkb_server.h @@ -0,0 +1,146 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * DroidDeck Vulkan bridge - server side (bionic on the device, glibc for host tests). + * + * The server owns the real Vulkan objects. Linux programs in the session talk to it through the + * client ICD (tools/vkbridge/client) over a Unix socket; every connection is one client thread. + */ +#ifndef VKB_SERVER_H +#define VKB_SERVER_H + +#include +#include + +#include "vkb_server_iface.h" +#include "vkb_proto.h" +#include "vkb_log.h" +#include "gen/vkb_server_gen.h" + +#define VKB_MAX_TABLES 65536 +#define VKB_MAX_PDS 16 + +/* A client process (all connections that said hello with the same token). */ +#define VKB_SEQ_RING 65536 + +typedef struct vkb_srv_proc { + uint64_t token; + int pid; + int conns; + struct vkb_srv_proc *next; + /* Ordering of the process's asynchronous requests (vkb_msg_hdr.seq/barrier). */ + pthread_mutex_t olock; + pthread_cond_t ocond; + uint64_t watermark; /* every async seq <= this has run */ + uint8_t done[VKB_SEQ_RING]; /* seqs above the watermark that have run */ + int conn_closed; /* a connection ended (a seq may never arrive) */ +} vkb_srv_proc; + +typedef struct vkb_srv_conn { + int sock; + vkb_srv_proc *proc; + /* Receive buffer: messages are parsed out of it in place (srv_recv). */ + uint8_t *rb; + size_t rcap, rpos, rlen; + int fdq[2 * VKB_MAX_FDS]; /* descriptors received ahead of their message's turn */ + int fdn; + vkb_arena arena; + pthread_t thread; +} vkb_srv_conn; + +/* Startup knowledge about each physical device (keyed by deviceUUID). */ +typedef struct vkb_pd_knowledge { + uint8_t uuid[VK_UUID_SIZE]; + char name[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; + vkb_server_pd_info info; + int valid; +} vkb_pd_knowledge; + +/* A tracked device memory allocation. */ +typedef struct vkb_srv_mem { + VkDeviceMemory mem; + VkDeviceSize size; + uint32_t type; + uint32_t strategy; + void *host_ptr; /* hostptr: server's mapping of the client's memfd */ + size_t host_len; + void *mapped; /* server-side vkMapMemory pointer (for flush/invalidate) */ + void *ahb; /* AHardwareBuffer* (Android) */ + struct vkb_srv_mem *next; +} vkb_srv_mem; + +struct vkb_emu_device; + +typedef struct vkb_srv_table { + uint32_t id; + int is_device; + vkb_srv_proc *proc; + VkInstance instance; + VkDevice device; + VkPhysicalDevice physical; /* device tables */ + struct vkb_srv_table *parent; /* device -> instance */ + vkb_dispatch dt; /* what handlers call (may hold emulation wrappers) */ + vkb_dispatch real; /* the driver's own entry points */ + uint32_t api_version; + const vkb_pd_knowledge *pd; + pthread_mutex_t lock; + vkb_srv_mem *mems[256]; /* hash by handle */ + struct vkb_emu_device *emu; + struct vkb_pcache *pcache; /* server_pcache.c */ + struct vkb_dsmap *dsmap; /* server_dsmap.c */ + struct vkb_spvfix *spvfix; /* server_spvfix.c */ +} vkb_srv_table; + +/* server_main.c */ +extern PFN_vkGetInstanceProcAddr vkb_gipa; +extern vkb_dispatch vkb_global_dt; +extern int vkb_verbose; + +void vkb_log_summary(void); + +/* server_spvfix.c */ +void vkb_spvfix_device_init(vkb_srv_table *t); +void vkb_spvfix_device_destroy(vkb_srv_table *t); + +/* server_dsmap.c */ +void vkb_dsmap_device_init(vkb_srv_table *t); +void vkb_dsmap_device_destroy(vkb_srv_table *t); + +/* server_pcache.c */ +void vkb_pcache_set_dir(const char *dir); +void vkb_pcache_device_init(vkb_srv_table *t); +void vkb_pcache_device_destroy(vkb_srv_table *t); + +/* server_conn.c */ +void vkb_srv_serve(int listen_fd); +vkb_srv_table *vkb_table_get(uint32_t id); +uint32_t vkb_table_register(vkb_srv_table *t); +void vkb_table_unregister(vkb_srv_table *t); +void vkb_srv_reply_status(vkb_srv_call *c, uint32_t status); +/* The table of the call being executed on this thread (emulation wrappers use it). */ +vkb_srv_table *vkb_srv_current_table(void); +void vkb_srv_set_current_table(vkb_srv_table *t); +void vkb_proc_cleanup(vkb_srv_proc *p); + +/* server_instance.c */ +void vkb_selftest_all(void); +const vkb_pd_knowledge *vkb_pd_lookup(const vkb_dispatch *dt, VkPhysicalDevice pd); +extern vkb_pd_knowledge vkb_pds[VKB_MAX_PDS]; +extern int vkb_npds; + +/* server_memory.c */ +extern PFN_vkGetDeviceProcAddr vkb_mem_gdpa; +void vkb_mem_selftest(vkb_pd_knowledge *k, VkInstance inst, const vkb_dispatch *idt, VkPhysicalDevice pd); +const char *const *vkb_mem_required_extensions(uint32_t strategy, uint32_t *count); +void vkb_mem_track(vkb_srv_table *dev, vkb_srv_mem *m); +vkb_srv_mem *vkb_mem_find(vkb_srv_table *dev, VkDeviceMemory mem, int remove); +void vkb_mem_release(vkb_srv_table *dev, vkb_srv_mem *m); +void vkb_mem_free_all(vkb_srv_table *dev); + +/* emulation (server_emu*.c) */ +uint32_t vkb_emu_detect(const vkb_dispatch *idt, VkPhysicalDevice pd, uint32_t *missing); +void vkb_emu_device_create_info(vkb_srv_table *inst, VkPhysicalDevice pd, uint32_t emu, + VkDeviceCreateInfo *ci, vkb_arena *a); +void vkb_emu_device_init(vkb_srv_table *dev, uint32_t emu); +void vkb_emu_device_destroy(vkb_srv_table *dev); + +#endif diff --git a/app/src/main/java/com/droiddeck/launcher/MainActivity.kt b/app/src/main/java/com/droiddeck/launcher/MainActivity.kt index fdf19dd8c..e9cf26bd4 100644 --- a/app/src/main/java/com/droiddeck/launcher/MainActivity.kt +++ b/app/src/main/java/com/droiddeck/launcher/MainActivity.kt @@ -146,6 +146,8 @@ class MainActivity : ComponentActivity() { private var gameCores by mutableStateOf>(emptySet()) private var tuSysmem by mutableStateOf(false) private var zinkLazy by mutableStateOf(false) + private var vkBridge by mutableStateOf(false) + private val adrenoGpu by lazy { com.droiddeck.launcher.core.DeviceSupport.adreno() } private var noXalia by mutableStateOf(true) private var fastSync by mutableStateOf(false) private var syncFallback by mutableStateOf(true) @@ -554,6 +556,7 @@ class MainActivity : ComponentActivity() { FrontEndScreen( FrontEndState( installed = installed, ready = ready, available = available?.version, removalPending = removalPending, runtimeActionsBlocked = runtimeChangesBlocked(), + vkBridge = vkBridge, adreno = adrenoGpu, shortcutPicker = shortcutPicker, shortcutLibraryScanning = shortcutLibraryScanning, gameSyncFolder = gameSyncFolder, @@ -681,6 +684,7 @@ class MainActivity : ComponentActivity() { onInstallPackage = { id -> installPackage(id) }, onRemovePackage = { id -> removePackage(id) }, onRuntime = { onRuntimeButton() }, + onVkBridge = { on -> SessionPrefs.setVkBridge(this, on); vkBridge = on }, onFrameGenPick = { mode -> FrameGen.set(this, mode) frameGenLabel = FrameGen.label(this) @@ -1575,6 +1579,7 @@ class MainActivity : ComponentActivity() { gameCores = CpuCores.parse(SessionPrefs.gameCpus(this)).ifEmpty { CpuCores.all.toSet() } tuSysmem = SessionPrefs.tuSysmem(this) zinkLazy = SessionPrefs.zinkLazy(this) + vkBridge = SessionPrefs.vkBridge(this) noXalia = SessionPrefs.noXalia(this) fastSync = SessionPrefs.fastSync(this) syncFallback = SessionPrefs.syncFallback(this) @@ -1677,7 +1682,7 @@ class MainActivity : ComponentActivity() { // The runtime draws with Turnip, an Adreno driver: on Mali, Xclipse or PowerVR the // compositor gets no usable Vulkan device and a session is sound over a black screen. // Said before the download, not after it; the user may still go ahead. - if (installed == null && !com.droiddeck.launcher.core.DeviceSupport.graphicsAvailable()) { showNonAdreno = release; return } + if (installed == null && !com.droiddeck.launcher.core.DeviceSupport.canDraw(this)) { showNonAdreno = release; return } install(release) } @@ -1689,7 +1694,7 @@ class MainActivity : ComponentActivity() { showPhantomGate = true return false } - val warn = installed == null && !com.droiddeck.launcher.core.DeviceSupport.graphicsAvailable() + val warn = installed == null && !com.droiddeck.launcher.core.DeviceSupport.canDraw(this) if (warn && available != null) { showNonAdreno = available; return false } startActivity(intent) return true diff --git a/app/src/main/java/com/droiddeck/launcher/core/DeviceSupport.kt b/app/src/main/java/com/droiddeck/launcher/core/DeviceSupport.kt index 78e41ec8d..e2a6a30bd 100644 --- a/app/src/main/java/com/droiddeck/launcher/core/DeviceSupport.kt +++ b/app/src/main/java/com/droiddeck/launcher/core/DeviceSupport.kt @@ -17,6 +17,17 @@ object DeviceSupport { internal fun graphicsAvailable(adreno: Boolean, powerVrReady: Boolean): Boolean = adreno || powerVrReady + /** + * Whether the Linux side draws through the Vulkan bridge (tools/vkbridge, PR #517): asked for in + * Setup, and only on a GPU that is neither an Adreno nor one the system-Vulkan path (PowerVR, + * Xclipse) already handles. An Adreno keeps Turnip whatever the setting says. + */ + fun vkBridge(context: Context): Boolean = + !adreno() && !SystemVulkanDriver.isAvailable() && com.droiddeck.launcher.session.SessionPrefs.vkBridge(context) + + /** A session can draw: Adreno with Turnip, PowerVR/Xclipse on the system driver, or the bridge. */ + fun canDraw(context: Context): Boolean = graphicsAvailable() || vkBridge(context) + /** The chip as the device names it, for the card that explains the refusal. */ fun gpuName(context: Context): String { val soc = if (Build.VERSION.SDK_INT >= 31) Build.SOC_MODEL.takeIf { it.isNotBlank() && it != Build.UNKNOWN } else null diff --git a/app/src/main/java/com/droiddeck/launcher/gpu/ClockLogComponent.kt b/app/src/main/java/com/droiddeck/launcher/gpu/ClockLogComponent.kt new file mode 100644 index 000000000..4c41c564c --- /dev/null +++ b/app/src/main/java/com/droiddeck/launcher/gpu/ClockLogComponent.kt @@ -0,0 +1,122 @@ +package com.droiddeck.launcher.gpu + +import android.content.Context +import android.os.Build +import android.os.PowerManager +import android.util.Log +import com.droiddeck.launcher.core.SessionPart +import java.io.File +import java.io.FileWriter +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +/** + * Clocks and thermal state through a Mali bridge session, into the session folder + * (vkbridge-clocks.log), for telling the bridge's overhead apart from the phone holding the chip + * back: Samsung's SSRM lowers the CPU policies' scaling_max_freq when the device warms, so a + * policy whose max is below its cpuinfo_max_freq is being clamped (upstream issue #64). + * + * Every [PERIOD_MS]: each CPU policy as cur/max(hardware max) MHz, the GPU clock from the first + * Mali/MediaTek source the app may read, and Android's thermal status and headroom. Which GPU + * sources were readable is logged once at the start - SELinux refuses apps most of them, each + * vendor differently, and this is how the next run finds out which. + */ +class ClockLogComponent(private val logFile: File) : SessionPart() { + @Volatile private var running = false + private var thread: Thread? = null + + override fun start() { + running = true + thread = Thread({ run() }, "clock-log").apply { isDaemon = true; start() } + } + + override fun stop() { + running = false + thread?.interrupt() + thread = null + } + + private fun run() { + val policies = File("/sys/devices/system/cpu/cpufreq").listFiles { f -> f.name.startsWith("policy") } + ?.sortedBy { it.name.removePrefix("policy").toIntOrNull() ?: 0 } ?: emptyList() + val gpuCandidates = gpuSources() + // The /proc status files hold several numbers: listed for whether they read, not taken as the clock. + val gpu = gpuCandidates.firstOrNull { !it.startsWith("/proc/") && firstNumber(it) != null } + val power = app().getSystemService(Context.POWER_SERVICE) as? PowerManager + val time = SimpleDateFormat("HH:mm:ss", Locale.US) + try { + FileWriter(logFile, true).use { w -> + w.write("== clocks: ${Build.MANUFACTURER} ${Build.MODEL} (${Build.HARDWARE}), every ${PERIOD_MS / 1000}s\n") + w.write("cpu policies: ${policies.joinToString { p -> p.name + " " + (File(p, "related_cpus").readTextOrNull()?.trim() ?: "?") }}\n") + for (source in gpuCandidates) { + val f = File(source) + val state = when { + !f.exists() -> continue + firstNumber(source) != null -> "readable" + else -> "refused" + } + w.write("gpu source $source: $state\n") + } + w.write("gpu clock from: ${gpu ?: "nothing readable"}\n") + w.flush() + while (running && logFile.length() < MAX_BYTES) { + val line = StringBuilder(time.format(Date())) + for (p in policies) { + val cur = firstNumber(File(p, "scaling_cur_freq").path) + val max = firstNumber(File(p, "scaling_max_freq").path) + val hw = firstNumber(File(p, "cpuinfo_max_freq").path) + line.append(" ${p.name.removePrefix("policy").let { "p$it" }} ${mhz(cur)}/${mhz(max)}") + if (hw != null && max != null && max < hw) line.append("(of ${mhz(hw)})") + } + gpu?.let { line.append(" | gpu ${mhz(firstNumber(it))} MHz") } + if (power != null && Build.VERSION.SDK_INT >= 29) { + line.append(" | thermal ${power.currentThermalStatus}") + if (Build.VERSION.SDK_INT >= 30) { + val h = power.getThermalHeadroom(10) + if (!h.isNaN()) line.append(String.format(Locale.US, " headroom %.2f", h)) + } + } + w.write(line.append('\n').toString()) + w.flush() + try { Thread.sleep(PERIOD_MS) } catch (e: InterruptedException) { break } + } + } + } catch (e: Exception) { + Log.w(TAG, "clock log stopped: $e") + } + } + + companion object { + private const val TAG = "SessionService" + private const val PERIOD_MS = 2000L + private const val MAX_BYTES = 4L shl 20 + + /** Mali (Exynos, Tensor, MediaTek) and MediaTek GED clock files, plus any GPU devfreq node. */ + private fun gpuSources(): List { + val list = mutableListOf( + "/sys/kernel/ged/hal/current_freqency", "/sys/kernel/ged/hal/current_frequency", + "/proc/gpufreqv2/gpufreq_status", "/proc/gpufreq/gpufreq_var_dump", + "/sys/kernel/gpu/gpu_clock", "/sys/class/misc/mali0/device/cur_freq", + "/sys/class/misc/mali0/device/clock", + ) + File("/sys/class/devfreq").list()?.sorted()?.forEach { node -> + if (node.contains("mali", true) || node.contains("gpu", true)) list.add("/sys/class/devfreq/$node/cur_freq") + } + return list.distinct() + } + + private fun File.readTextOrNull(): String? = runCatching { readText() }.getOrNull() + + private fun firstNumber(path: String): Long? = + runCatching { Regex("\\d+").find(File(path).readText())?.value?.toLong() }.getOrNull() + + /** Hz, kHz or MHz to MHz; "?" when unread. */ + private fun mhz(raw: Long?): String = when { + raw == null -> "?" + raw > 10_000_000 -> (raw / 1_000_000).toString() + raw > 10_000 -> (raw / 1_000).toString() + else -> raw.toString() + } + } +} diff --git a/app/src/main/java/com/droiddeck/launcher/gpu/TurnipDriver.java b/app/src/main/java/com/droiddeck/launcher/gpu/TurnipDriver.java index cfa9c44b8..108cd1ec1 100644 --- a/app/src/main/java/com/droiddeck/launcher/gpu/TurnipDriver.java +++ b/app/src/main/java/com/droiddeck/launcher/gpu/TurnipDriver.java @@ -342,6 +342,13 @@ public final class TurnipDriver { if (forced.startsWith("a7")) return DRIVER_A7XX; } if (SystemVulkanDriver.isPowerVr()) return null; + // Not an Adreno (Mali, Xclipse...): Turnip cannot open a GPU without KGSL. The compositor + // runs on the phone's own driver, which has the dma-buf import it needs (the Mali bridge + // depends on it too). + if (!com.droiddeck.launcher.core.DeviceSupport.INSTANCE.adreno()) { + Log.i(TAG, "no KGSL: the compositor uses the system Vulkan driver"); + return null; + } String model = gpuModel(); Log.i(TAG, "gpu model: " + (model == null ? "unknown" : model)); if (model != null) { diff --git a/app/src/main/java/com/droiddeck/launcher/gpu/VkBridgeComponent.kt b/app/src/main/java/com/droiddeck/launcher/gpu/VkBridgeComponent.kt new file mode 100644 index 000000000..0ef770471 --- /dev/null +++ b/app/src/main/java/com/droiddeck/launcher/gpu/VkBridgeComponent.kt @@ -0,0 +1,79 @@ +package com.droiddeck.launcher.gpu + +import android.os.Process +import android.util.Log +import com.droiddeck.launcher.core.HostProcess +import com.droiddeck.launcher.core.SessionPart +import java.io.File + +/** + * The Vulkan bridge server (tools/vkbridge, app/src/main/cpp/vkbridge) for one session. + * + * On a GPU without Adreno's KGSL nothing inside the Linux runtime can reach the GPU: Turnip needs + * KGSL, and the phone's own driver is a bionic library a glibc program cannot load. The server is + * a bionic process the app starts here - executed from the native library directory like the + * DirectAudio relay - which loads the system Vulkan loader and runs the Vulkan calls the + * session's programs send it through the bridge ICD over a Unix socket. It is the app's child, so + * it dies with the app (it also asks for that with PR_SET_PDEATHSIG). + * + * Started before the guest and waited for: the server runs a self-test first (which memory + * sharing works on this GPU), and only then listens; a program that starts before the socket + * exists would find no Vulkan driver. + */ +class VkBridgeComponent(private val socket: File, private val logFile: File) : SessionPart() { + @Volatile private var pid = -1 + @Volatile private var exited = false + + override fun start() { + stop() + val binary = File(app().applicationInfo.nativeLibraryDir, BINARY) + if (!binary.isFile) { + Log.e(TAG, "server missing at $binary; the session will have no Vulkan") + return + } + socket.parentFile?.mkdirs() + // Pipeline cache kept across sessions (Mali recompiles everything in a new process otherwise). + val cacheDir = File(app().cacheDir, "vkbridge-pipelines").apply { mkdirs() } + if (VkBridgeNative.start(app(), socket, logFile, cacheDir)) { + Log.i(TAG, "server ready in the app's process at $socket") + return + } + socket.delete() + exited = false + val cmd = listOf(binary.absolutePath, "--socket", socket.absolutePath, "--log", logFile.absolutePath, + "--cache-dir", cacheDir.absolutePath) + .joinToString(" ") { it.replace("\\", "\\\\").replace(" ", "\\ ") } + val env = arrayOf("HOME=" + app().filesDir) + pid = HostProcess.start(cmd, env, app().filesDir, { status -> + exited = true + Log.w(TAG, "server exited with status $status") + runCatching { logFile.appendText("== vkbridge server exited with status $status\n") } + }, { line -> Log.i(TAG, line) }) + // The self-test takes about a second; a cold driver can take longer. + val deadline = System.currentTimeMillis() + 15_000L + while (!socket.exists() && !exited && System.currentTimeMillis() < deadline) { + try { Thread.sleep(50L) } catch (e: InterruptedException) { Thread.currentThread().interrupt(); break } + } + Log.i(TAG, if (socket.exists()) "server ready (pid $pid) at $socket" else "server NOT ready (pid $pid, exited=$exited); see $logFile") + } + + override fun stop() { + // The in-app server outlives sessions: its socket stays. + if (pid > 0) { + Process.killProcess(pid) + pid = -1 + } + if (!VkBridgeNative.serving) socket.delete() + } + + override fun suspendPid(): Int = pid + + companion object { + private const val TAG = "VkBridge" + /** The server, named as a library so Android extracts it and lets the app run it. */ + const val BINARY = "libvkbridge_server.so" + /** Inside the runtime (staged by SessionFiles). */ + const val GUEST_ICD = "/usr/local/share/vkbridge/droidbridge_icd.json" + const val GUEST_LIB = "/usr/local/lib/vkbridge/libvulkan_droidbridge.so" + } +} diff --git a/app/src/main/java/com/droiddeck/launcher/gpu/VkBridgeNative.kt b/app/src/main/java/com/droiddeck/launcher/gpu/VkBridgeNative.kt new file mode 100644 index 000000000..74dd63c58 --- /dev/null +++ b/app/src/main/java/com/droiddeck/launcher/gpu/VkBridgeNative.kt @@ -0,0 +1,65 @@ +package com.droiddeck.launcher.gpu + +import android.content.Context +import android.content.pm.ApplicationInfo +import android.util.Log +import java.io.File + +/** + * The bridge server inside the app's own process (libvkbridge_jni.so, server_main.c). + * + * Android chooses the GPU driver - Samsung's updatable one included - while the app starts up, and + * only for the app's process: the server run as a separate executable got the plain /vendor driver, + * which on the Tab S10+ lacked VK_EXT_robustness2 and more that the app itself sees. Started by the + * first bridge session and kept for the app's life; later sessions only point its log at their + * own folder. VkBridgeComponent falls back to the executable when this cannot start. + */ +object VkBridgeNative { + private const val TAG = "VkBridge" + + @Volatile private var loaded: Boolean? = null + + /** + * The packaged library, or - in a debuggable build only - files/vkbridge/dev/libvkbridge_jni.so + * when present, so a rebuilt server can be tried with `adb push` + `run-as cp` and an app + * restart instead of a new APK (the app targets SDK 28 and may load code from its files). + */ + private fun load(context: Context): Boolean { + loaded?.let { return it } + val ok = try { + val dev = File(context.filesDir, "vkbridge/dev/libvkbridge_jni.so") + val debuggable = context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0 + if (debuggable && dev.isFile) { + Log.w(TAG, "in-app server from the development override $dev") + System.load(dev.absolutePath) + } else { + System.loadLibrary("vkbridge_jni") + } + true + } catch (e: Throwable) { + Log.w(TAG, "in-app server unavailable: $e") + false + } + loaded = ok + return ok + } + + /** Whether the in-app server is serving (its socket must then be left alone). */ + @Volatile var serving = false + private set + + /** Starts the server, or points its log at [log] when it already runs; false when it cannot serve. */ + fun start(context: Context, socket: File, log: File, cacheDir: File): Boolean { + if (!load(context)) return false + val ok = try { + nativeStart(socket.absolutePath, log.absolutePath, cacheDir.absolutePath) == 1 + } catch (e: Throwable) { + Log.w(TAG, "in-app server failed to start: $e") + false + } + if (ok) serving = true + return ok + } + + @JvmStatic private external fun nativeStart(socket: String, log: String, cacheDir: String): Int +} diff --git a/app/src/main/java/com/droiddeck/launcher/runtime/BwrapSpawner.kt b/app/src/main/java/com/droiddeck/launcher/runtime/BwrapSpawner.kt index c733c66da..e5bc4e78e 100644 --- a/app/src/main/java/com/droiddeck/launcher/runtime/BwrapSpawner.kt +++ b/app/src/main/java/com/droiddeck/launcher/runtime/BwrapSpawner.kt @@ -229,6 +229,7 @@ object BwrapSpawner { * own choice of driver (VK_ICD_FILENAMES, MESA_LOADER_DRIVER_OVERRIDE) is left alone. */ private fun gpu(rootfs: String, root: File, env: MutableMap): List? { + env["VKBRIDGE_SOCKET"]?.let { sock -> if (File(sock).exists()) return bridgeGpu(rootfs, root, env, sock) } val lib = File(rootfs, "usr/lib") val driver = File(lib, "libvulkan_freedreno.so") if (!driver.isFile || !File("/dev/kgsl-3d0").exists()) return null @@ -258,6 +259,32 @@ object BwrapSpawner { return binds } + /** + * The GPU through the Mali bridge (tools/vkbridge), for a sandbox started from a bridge + * session: the bridge ICD (it needs nothing but libc) and the server's socket, at the paths + * the session uses. Unlike Turnip on KGSL it can also present to KWin's shared-memory + * windows, so desktop apps get it too. The session's own VK_DRIVER_FILES points at the + * runtime's copy of the manifest, which the sandbox cannot see; it is replaced here. + */ + private fun bridgeGpu(rootfs: String, root: File, env: MutableMap, socket: String): List? { + val driver = File(rootfs, "usr/local/lib/vkbridge/libvulkan_droidbridge.so") + if (!driver.isFile) { Log.w(TAG, "gpu: vkbridge session but no bridge ICD in the runtime"); return null } + val binds = ArrayList() + binds.add(Bind(driver.canonicalPath, "$GPU_DIR/libvulkan_droidbridge.so")) + val sockDir = File(socket).parent ?: return null + binds.add(Bind(sockDir, sockDir)) + val icd = File(root.parentFile, "vkbridge_icd.json") + icd.writeText("{\"file_format_version\": \"1.0.0\", \"ICD\": {\"library_path\": \"$GPU_DIR/libvulkan_droidbridge.so\", \"api_version\": \"1.3.247\"}}\n") + binds.add(Bind(icd.path, "$GPU_DIR/vkbridge_icd.json")) + env["VK_DRIVER_FILES"] = "$GPU_DIR/vkbridge_icd.json" + env["VK_ICD_FILENAMES"] = "$GPU_DIR/vkbridge_icd.json" + if (!env.containsKey("MESA_LOADER_DRIVER_OVERRIDE") && !env.containsKey("GALLIUM_DRIVER")) { + env["MESA_LOADER_DRIVER_OVERRIDE"] = "zink" + env["GALLIUM_DRIVER"] = "zink" + } + return binds + } + /** * What every program in the session preloads (SessionFiles writes /etc/ld.so.preload): the * session shim - SysV shared memory for X11, the network calls Android refuses - and the diff --git a/app/src/main/java/com/droiddeck/launcher/runtime/LinuxRuntime.java b/app/src/main/java/com/droiddeck/launcher/runtime/LinuxRuntime.java index 64c90f240..374c0b7b4 100644 --- a/app/src/main/java/com/droiddeck/launcher/runtime/LinuxRuntime.java +++ b/app/src/main/java/com/droiddeck/launcher/runtime/LinuxRuntime.java @@ -332,10 +332,40 @@ public final class LinuxRuntime { * may open) stands in: it appears as a render node with the sysfs entries libdrm reads, and our * Turnip build reports the same device numbers for it. */ + /** Mali's kbase device, the stand-in render node on a Mali GPU (the Mali bridge's gamescope). */ + private static final String MALI_DEVICE = "/dev/mali0"; + + /** + * The device that stands in for the GPU's render node: KGSL on an Adreno; with the Mali bridge + * on, Mali's own device - nothing inside opens it for rendering (the bridge does that on the + * Android side), but gamescope and libdrm need a render node to name before they offer + * linux-dmabuf, and the bridge ICD reports this one's numbers. Null when there is none. + */ + public static String gpuStandIn(Context context) { + if (new File(KGSL_DEVICE).exists()) return KGSL_DEVICE; + if (com.droiddeck.launcher.core.DeviceSupport.INSTANCE.vkBridge(context) && new File(MALI_DEVICE).exists()) return MALI_DEVICE; + return null; + } + + /** "major:minor" of a device node, or null. */ + public static String deviceNumbers(String path) { + try { + long dev = Os.stat(path).st_rdev; + long major = ((dev >> 8) & 0xfff) | ((dev >> 32) & ~0xfffL); + long minor = (dev & 0xff) | ((dev >> 12) & ~0xffL); + return major + ":" + minor; + } catch (ErrnoException e) { + return null; + } + } + private static void bindGpuNode(Context context, List cmd) { + String standIn = gpuStandIn(context); + if (standIn == null) return; + boolean kgsl = standIn.equals(KGSL_DEVICE); StructStat st; try { - st = Os.stat(KGSL_DEVICE); + st = Os.stat(standIn); } catch (ErrnoException e) { return; } @@ -355,7 +385,8 @@ public final class LinuxRuntime { Files.write(new File(drm, "dev").toPath(), (major + ":" + minor + "\n").getBytes(StandardCharsets.UTF_8)); Files.write(new File(device, "uevent").toPath(), - "DRIVER=kgsl-3d0\nMODALIAS=platform:kgsl-3d0\n".getBytes(StandardCharsets.UTF_8)); + (kgsl ? "DRIVER=kgsl-3d0\nMODALIAS=platform:kgsl-3d0\n" : "DRIVER=mali\nMODALIAS=platform:mali\n") + .getBytes(StandardCharsets.UTF_8)); File subsystem = new File(device, "subsystem"); if (!Files.isSymbolicLink(subsystem.toPath())) { Os.symlink("/sys/bus/platform", subsystem.getPath()); @@ -363,7 +394,7 @@ public final class LinuxRuntime { // What MangoHud names a GPU's driver by; msm_drm is how an Adreno's render node reads // on a mainline kernel, and the driver it reads the load of (bindAdrenoStats). File driver = new File(device, "driver"); - if (!Files.isSymbolicLink(driver.toPath())) { + if (kgsl && !Files.isSymbolicLink(driver.toPath())) { Os.symlink("/sys/bus/platform/drivers/msm_drm", driver.getPath()); } } catch (IOException | ErrnoException e) { @@ -371,7 +402,7 @@ public final class LinuxRuntime { } bind(cmd, new File(base, "sys").getPath() + ":/sys/dev/char"); bind(cmd, dri.getPath() + ":/dev/dri"); - bind(cmd, KGSL_DEVICE + ":/dev/dri/" + node); + bind(cmd, standIn + ":/dev/dri/" + node); bindDrmClass(base, cmd, node, major + ":" + minor); } diff --git a/app/src/main/java/com/droiddeck/launcher/session/SessionFiles.kt b/app/src/main/java/com/droiddeck/launcher/session/SessionFiles.kt index ef6455ede..60110794a 100644 --- a/app/src/main/java/com/droiddeck/launcher/session/SessionFiles.kt +++ b/app/src/main/java/com/droiddeck/launcher/session/SessionFiles.kt @@ -143,6 +143,10 @@ object SessionFiles { } + listOf("libthunkaudit.so", "libvulkan-thunk.so").map { "x86_64/$it" to "usr/local/lib/droiddeck-fex/x86_64/$it" } val optional = (arrayOf( "usr/local/bin/gamescope" to "usr/local/bin/gamescope", + // The Mali bridge's Linux side (tools/vkbridge): the ICD, its manifest and the self-test. + "usr/local/lib/vkbridge/libvulkan_droidbridge.so" to "usr/local/lib/vkbridge/libvulkan_droidbridge.so", + "usr/local/share/vkbridge/droidbridge_icd.json" to "usr/local/share/vkbridge/droidbridge_icd.json", + "usr/local/bin/droiddeck-vkbridge-smoke" to "usr/local/bin/droiddeck-vkbridge-smoke", "usr/local/lib/droiddeck/uruntime" to "usr/local/lib/droiddeck/uruntime", "usr/local/share/licenses/uruntime/LICENSE" to "usr/local/share/licenses/uruntime/LICENSE", ) + mangoapp + xclipse.map { it to it } + listOf("comet", "GalaxyCommunication.exe", "update-permissions.exe", "LICENSE", "version").map { "usr/local/lib/droiddeck-comet/$it" to "usr/local/lib/droiddeck-comet/$it" } + msitools.map { it to it } + fexPreloads).filter { (asset, _) -> diff --git a/app/src/main/java/com/droiddeck/launcher/session/SessionPrefs.kt b/app/src/main/java/com/droiddeck/launcher/session/SessionPrefs.kt index ecd2de33c..8c21aa0e4 100644 --- a/app/src/main/java/com/droiddeck/launcher/session/SessionPrefs.kt +++ b/app/src/main/java/com/droiddeck/launcher/session/SessionPrefs.kt @@ -497,6 +497,18 @@ object SessionPrefs { */ fun zinkLazy(context: Context): Boolean = prefs(context).getBoolean("zinkLazy", true) + /** + * The Mali bridge (experimental): the session's Vulkan goes through the app's bridge server to + * the phone's own driver instead of Turnip (tools/vkbridge). Only offered, and only used, on a + * GPU without Adreno's KGSL; off by default everywhere. + */ + @JvmStatic + fun vkBridge(context: Context): Boolean = prefs(context).getBoolean("vkBridge", false) + + fun setVkBridge(context: Context, on: Boolean) { + prefs(context).edit().putBoolean("vkBridge", on).apply() + } + fun setZinkLazy(context: Context, on: Boolean) { prefs(context).edit().putBoolean("zinkLazy", on).apply() } diff --git a/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt b/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt index 037151ba3..31593a702 100644 --- a/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt +++ b/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt @@ -372,6 +372,7 @@ class SessionService : Service() { val fastPathAt = guest.size val pulse = startAudio(guest, sessionDir) + startVkBridge(guest, sessionDir) guest.add("BL_WIDTH=" + size.first) guest.add("BL_HEIGHT=" + size.second) @@ -629,10 +630,13 @@ class SessionService : Service() { // import falls back to. One driver for every session: the driver's shader cache is keyed on // its build, and with one per mode every emulator compiled its shaders twice. val linuxDriverId = SessionPrefs.linuxDriver(this) - if (SystemVulkanDriver.usesDefault(linuxDriverId)) { + // Mali bridge (PR #517) on: the bridge ICD is the driver (startVkBridge). Otherwise the system + // PowerVR/Xclipse path (PR #570) or the imported/runtime Turnip, as before. + val bridge = com.droiddeck.launcher.core.DeviceSupport.vkBridge(this) + if (!bridge && SystemVulkanDriver.usesDefault(linuxDriverId)) { SystemVulkanDriver.addEnvironment(this, guest) } - LinuxVulkanDriver.resolveIcdPath(this, linuxDriverId) + (if (bridge) null else LinuxVulkanDriver.resolveIcdPath(this, linuxDriverId)) ?.let { guest.add(LinuxVulkanDriver.ENV + "=" + it) } // Turnip's own debug switches, for the runtime's driver and everything on it. The file in // Downloads holds the value verbatim ("sysmem", "sysmem,deck_emu"); with nothing there, an @@ -696,6 +700,35 @@ class SessionService : Service() { .takeIf { it.isNotEmpty() }?.let { guest.add("BL_GAME_CPUS=$it") } } + /** + * The Mali bridge (Setup's experimental switch, non-Adreno GPUs only): the server that runs the + * session's Vulkan calls on the phone's own driver, started before the guest. The session + * script points the Vulkan loader at the bridge ICD when it sees BL_VKBRIDGE and runs the + * bridge's self-test into the session log first; both sides log into the session folder. + */ + private fun startVkBridge(guest: MutableList, sessionDir: File) { + if (!com.droiddeck.launcher.core.DeviceSupport.vkBridge(this)) return + // Under the files dir, which the session binds at its own path: one string for both sides. + val socket = File(filesDir, "vkbridge/server.sock") + val bridge = com.droiddeck.launcher.gpu.VkBridgeComponent(socket, File(sessionDir, "vkbridge-server.log")) + bridge.attach(this) + components.add(bridge) + com.droiddeck.launcher.gpu.ClockLogComponent(File(sessionDir, "vkbridge-clocks.log")).let { + it.attach(this) + components.add(it) + } + guest.add("BL_VKBRIDGE=1") + guest.add("VKBRIDGE_SOCKET=" + socket.path) + guest.add("VKBRIDGE_CLIENT_LOG=" + File(sessionDir, "vkbridge-client.log").path) + // The render node gamescope sees is Mali's device standing in (LinuxRuntime.bindGpuNode): + // the ICD reports its numbers, and the session shim answers PRIME calls on it as on KGSL. + LinuxRuntime.gpuStandIn(this)?.let { node -> + guest.add("BL_DRM_STANDIN=$node") + LinuxRuntime.deviceNumbers(node)?.let { guest.add("VKBRIDGE_DRM_RENDER=$it") } + } + Log.i(TAG, "vkbridge: on (${com.droiddeck.launcher.core.DeviceSupport.gpuName(this)}), socket $socket") + } + /** PulseAudio, and the DirectAudio relay when a path needs it; returns the daemon for suspend and resume. */ private fun startAudio(guest: MutableList, sessionDir: File): PulseAudioComponent { // PulseAudio always: the client is a native Linux program and has no other way to make a diff --git a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt index 5845f8549..5fc3b2a53 100644 --- a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt +++ b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt @@ -130,6 +130,10 @@ class FrontEndState( val oscMode: String = SessionPrefs.OSC_AUTO, val controller: com.droiddeck.launcher.input.ControllerPrefs.Settings? = null, val phantomProcessStatus: PhantomProcessStatus = PhantomProcessStatus.NOT_APPLICABLE, + /** The GPU is an Adreno (Turnip); otherwise Setup offers the experimental Mali bridge. */ + val adreno: Boolean = true, + /** Setup's "Mali bridge (experimental)" (SessionPrefs.vkBridge). */ + val vkBridge: Boolean = false, val showPhantomGate: Boolean = false, val orientation: Int = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, val launcherFullscreen: Boolean = true, @@ -187,6 +191,7 @@ class FrontEndActions( val onInstallPackage: (String) -> Unit, val onRemovePackage: (String) -> Unit, val onRuntime: () -> Unit, + val onVkBridge: (Boolean) -> Unit = {}, val onFrameGenPick: (FrameGen.Mode) -> Unit, val onImportLossless: () -> Unit, val onProtons: () -> Unit, diff --git a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt index 5e82d9633..c232e16c1 100644 --- a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt +++ b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt @@ -212,9 +212,17 @@ internal fun SetupPanel( when (gpu.support) { com.droiddeck.launcher.gpu.GpuInfo.Support.TESTED -> stringResource(R.string.setup_gpu_detail, gpu.displayName(ctx), gpuName) com.droiddeck.launcher.gpu.GpuInfo.Support.UNTESTED -> stringResource(R.string.setup_gpu_untested_detail, gpu.displayName(ctx), gpu.supportText(ctx).replaceFirstChar { it.lowercase() }) - else -> stringResource(R.string.setup_gpu_unsupported_detail, gpuName) + else -> if (s.vkBridge) stringResource(R.string.setup_gpu_bridge_detail, gpuName) + else stringResource(R.string.setup_gpu_unsupported_detail, gpuName) }, divider = divider, + // Not an Adreno: the experimental Vulkan bridge is the one way to draw. + action = if (s.adreno) null else { { + SecondaryButton( + stringResource(if (s.vkBridge) R.string.setup_gpu_bridge_on else R.string.setup_gpu_bridge_off), + enabled = !s.sessionRunning, compact = true, onClick = { a.onVkBridge(!s.vkBridge) }, + ) + } }, ) } val runtimeCheck: @Composable (Boolean) -> Unit = { divider -> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0da417389..7370fd254 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2322,4 +2322,7 @@ Enable GOG achievements in Stores settings Achievements unavailable; check session logs Achievement unlocked + Mali bridge: off + Mali bridge: on + %1$s is not an Adreno. The experimental Vulkan bridge is on: the session draws through the phone\'s own driver. Expect bugs; send the session logs. diff --git a/tools/build_local.sh b/tools/build_local.sh index b13c0958b..5846e2452 100755 --- a/tools/build_local.sh +++ b/tools/build_local.sh @@ -108,6 +108,7 @@ docker run --rm --platform linux/amd64 \ aarch64-linux-gnu-strip --strip-unneeded "$d/usr/local/lib/droiddeck-xclipse/libVkLayer_droiddeck_xclipse.so" install -m644 tools/linuxfs/xclipse-layer/VkLayer_droiddeck_xclipse.json "$d/usr/local/lib/droiddeck-xclipse/" mkdir -p "$d/usr/local/bin" + tools/vkbridge/build-client-linux.sh "$d" aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc -O2 -Wall -Wextra -o "$d/usr/local/bin/droiddeck-clipboard" tools/linuxfs/clipboard/clipboard.c -ldl aarch64-linux-gnu-strip --strip-unneeded "$d/usr/local/bin/droiddeck-clipboard" for script in tools/linuxfs/overlay/usr/local/bin/droiddeck-* tools/linuxfs/overlay/usr/local/bin/steam-compatibility; do diff --git a/tools/linuxfs/overlay/usr/local/bin/droiddeck-session b/tools/linuxfs/overlay/usr/local/bin/droiddeck-session index 602f60b11..deeed96f6 100755 --- a/tools/linuxfs/overlay/usr/local/bin/droiddeck-session +++ b/tools/linuxfs/overlay/usr/local/bin/droiddeck-session @@ -138,6 +138,31 @@ if [ -n "${BL_VK_DRIVER:-}" ]; then fi unset bl_icd_lib fi +# The Mali bridge (Setup's experimental switch on a non-Adreno GPU; tools/vkbridge): the app runs a +# server on the phone's own Vulkan driver and this session draws through its ICD, which replaces +# every other driver here. Checked from inside like an imported driver, and on the first pass only +# the bridge's self-test and the driver's summary go into the log, so a black screen comes with the +# reason in the same file. +if [ "${BL_VKBRIDGE:-0}" = 1 ]; then + bl_vkb_icd=/usr/local/share/vkbridge/droidbridge_icd.json + if [ -r "$bl_vkb_icd" ] && [ -r /usr/local/lib/vkbridge/libvulkan_droidbridge.so ] && [ -S "${VKBRIDGE_SOCKET:-}" ]; then + export VK_DRIVER_FILES=$bl_vkb_icd VK_ICD_FILENAMES=$bl_vkb_icd + export VKBRIDGE_SOCKET VKBRIDGE_CLIENT_LOG + # Turnip's switches mean nothing to the bridge. + unset TU_DEBUG + if [ -z "${BL_INSIDE:-}" ]; then + step "vkbridge self-test" + timeout 60 /usr/local/bin/droiddeck-vkbridge-smoke 2>&1 | sed 's/^/== vkbridge: /' + if command -v vulkaninfo >/dev/null 2>&1; then + timeout 30 vulkaninfo --summary 2>&1 | sed -n '/^Devices:/,$p' | head -40 | sed 's/^/== vulkaninfo: /' + fi + fi + echo "== vulkan driver: Mali bridge ($bl_vkb_icd, server at $VKBRIDGE_SOCKET)" + else + echo "== vulkan driver: Mali bridge requested but NOT usable (icd $bl_vkb_icd, socket ${VKBRIDGE_SOCKET:-unset}); this GPU will show a black screen" + fi + unset bl_vkb_icd +fi # The app's gamescope build (tools/gamescope) asks for realtime-priority Vulkan queues on this # switch instead of on CAP_SYS_NICE, which proot never has; it falls back to normal priority # where the driver refuses, and the runtime's own build ignores it. On KGSL Turnip (Mesa 26.2) it diff --git a/tools/linuxfs/preload/drm.c b/tools/linuxfs/preload/drm.c index 379788372..e1c08a700 100644 --- a/tools/linuxfs/preload/drm.c +++ b/tools/linuxfs/preload/drm.c @@ -51,8 +51,10 @@ static int is_kgsl(int fd) { struct stat st; pthread_mutex_lock(&lock); if (kgsl_state == 0) { - kgsl_state = stat("/dev/kgsl-3d0", &st) == 0 ? 1 : -1; - if (kgsl_state > 0) kgsl_dev = st.st_rdev; + /* KGSL, or the device the Mali bridge's session names as its render node (BL_DRM_STANDIN). */ + const char *standin = getenv("BL_DRM_STANDIN"); + kgsl_state = stat("/dev/kgsl-3d0", &st) == 0 || (standin && *standin && stat(standin, &st) == 0) ? 1 : -1; + kgsl_dev = st.st_rdev; } pthread_mutex_unlock(&lock); return kgsl_state > 0 && fstat(fd, &st) == 0 && S_ISCHR(st.st_mode) && st.st_rdev == kgsl_dev; diff --git a/tools/vkbridge/build-client-linux.sh b/tools/vkbridge/build-client-linux.sh new file mode 100755 index 000000000..b6e63602e --- /dev/null +++ b/tools/vkbridge/build-client-linux.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# Builds the Linux side of the bridge for the runtime (glibc, aarch64): +# tools/vkbridge/build-client-linux.sh [cc] +# Produces, under the asset dir (staged into the runtime by SessionFiles): +# usr/local/lib/vkbridge/libvulkan_droidbridge.so the Vulkan ICD +# usr/local/share/vkbridge/droidbridge_icd.json its manifest +# usr/local/bin/droiddeck-vkbridge-smoke the session-start self-test +set -euo pipefail +d=$1 +cc=${2:-aarch64-linux-gnu-gcc} +strip=${STRIP:-${cc%gcc}strip} +here=$(cd "$(dirname "$0")" && pwd) +inc="-I$here/third_party/Vulkan-Headers-1.4.341/include -I$here/common -I$here/common/gen" +mkdir -p "$d/usr/local/lib/vkbridge" "$d/usr/local/share/vkbridge" "$d/usr/local/bin" +"$cc" -O2 -fPIC -shared -fvisibility=hidden -DVKB_CLIENT -Wall -Wno-unused-parameter -Wno-missing-field-initializers \ + $inc -I"$here/client" -I"$here/client/compat" -pthread \ + -Wl,--no-undefined -Wl,-soname,libvulkan_droidbridge.so \ + -o "$d/usr/local/lib/vkbridge/libvulkan_droidbridge.so" \ + "$here"/client/*.c "$here/common/vkb_wire.c" "$here/common/gen/vkb_gen_structs.c" "$here/common/gen/vkb_gen_client.c" -ldl +"$strip" --strip-unneeded "$d/usr/local/lib/vkbridge/libvulkan_droidbridge.so" +"$cc" -O2 -Wall $inc -I"$here/tests" -o "$d/usr/local/bin/droiddeck-vkbridge-smoke" "$here/tests/smoke.c" -ldl +"$strip" --strip-unneeded "$d/usr/local/bin/droiddeck-vkbridge-smoke" +cat > "$d/usr/local/share/vkbridge/droidbridge_icd.json" < +# The output is an executable named like a library (libvkbridge_server.so) so that Android +# extracts it into the native library directory, the one place an app may exec from. +set -euo pipefail +ndk=$1 +out=$2/arm64-v8a +here=$(cd "$(dirname "$0")" && pwd) +srv=$(cd "$here/../../app/src/main/cpp/vkbridge" && pwd) +cc=$(ls -d "$ndk"/toolchains/llvm/prebuilt/*/bin/aarch64-linux-android26-clang | head -1) +[ -x "$cc" ] || { echo "no NDK clang under $ndk" >&2; exit 1; } +mkdir -p "$out" +"$cc" -O2 -g0 -fPIE -pie -Wall -Wno-unused-parameter -Wno-missing-field-initializers \ + -I"$here/third_party/Vulkan-Headers-1.4.341/include" -I"$here/common" -I"$here/common/gen" -I"$srv" \ + -Wl,-z,max-page-size=16384 -Wl,--build-id=none \ + -o "$out/libvkbridge_server.so" \ + "$srv"/*.c "$here/common/vkb_wire.c" "$here/common/gen/vkb_gen_structs.c" "$here/common/gen/vkb_gen_server.c" \ + -ldl -llog -lm +"$(dirname "$cc")/llvm-strip" --strip-unneeded "$out/libvkbridge_server.so" +# The same server as a JNI library the app loads into its own process (the default): only there +# does Android hand it the driver the app gets (VkBridgeNative, server_main.c). +"$cc" -O2 -g0 -fPIC -shared -DVKB_JNI -Wall -Wno-unused-parameter -Wno-missing-field-initializers \ + -I"$here/third_party/Vulkan-Headers-1.4.341/include" -I"$here/common" -I"$here/common/gen" -I"$srv" \ + -Wl,-z,max-page-size=16384 -Wl,--build-id=none -Wl,--no-undefined -Wl,-soname,libvkbridge_jni.so \ + -o "$out/libvkbridge_jni.so" \ + "$srv"/*.c "$here/common/vkb_wire.c" "$here/common/gen/vkb_gen_structs.c" "$here/common/gen/vkb_gen_server.c" \ + -ldl -llog -lm +"$(dirname "$cc")/llvm-strip" --strip-unneeded "$out/libvkbridge_jni.so" +echo "built $out/libvkbridge_server.so and libvkbridge_jni.so" diff --git a/tools/vkbridge/client/cmdbuf.c b/tools/vkbridge/client/cmdbuf.c new file mode 100644 index 000000000..5d7e7f624 --- /dev/null +++ b/tools/vkbridge/client/cmdbuf.c @@ -0,0 +1,234 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Command buffers: vkCmd* calls are encoded into the command buffer's own stream (no round trip + * each); vkEndCommandBuffer sends the stream in one message and the server replays it. + * + * Stream entry: u32 command id, u32 payload bytes, payload (8-aligned), padded to 8. + */ +#define _GNU_SOURCE +#include "vkb_client.h" +#include "gen/vkb_client_gen.h" + +#include + +static __thread vkb_cmdbuf *tls_encoding; + +int vkb_cb_begin_is_secondary(const VkCommandBufferBeginInfo *s) +{ + (void)s; + return tls_encoding && tls_encoding->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY; +} + +vkb_enc *vkb_cmd_record_begin(VkCommandBuffer commandBuffer, uint32_t cmd) +{ + vkb_cmdbuf *cb = vkb_cb(commandBuffer); + if (!cb->recording) { + VKB_ONCE(VKB_LOG_WARN, "%s on a command buffer that is not recording (ignored; logged once)", vkb_cmd_names[cmd]); + return NULL; + } + vkb_enc *e = &cb->stream; + /* entries start 8-aligned */ + while (e->len & 7) vkb_enc_u8(e, 0); + vkb_enc_u32(e, cmd); + vkb_enc_u32(e, 0); + cb->entry = e->len; + return e; +} + +void vkb_cmd_record_end(VkCommandBuffer commandBuffer) +{ + vkb_cmdbuf *cb = vkb_cb(commandBuffer); + vkb_enc *e = &cb->stream; + if (e->oom) { + cb->broken = 1; + return; + } + if (e->nfds) { + VKB_ERR("internal: a recorded command carries a file descriptor"); + cb->broken = 1; + e->nfds = 0; + } + uint32_t n = (uint32_t)(e->len - cb->entry); + memcpy(e->buf + cb->entry - 4, &n, 4); +} + +static void stream_reset(vkb_cmdbuf *cb) +{ + if (cb->stream.cap > (8u << 20)) { + vkb_enc_free(&cb->stream); + vkb_enc_init(&cb->stream); + } else { + vkb_enc_reset(&cb->stream); + } + cb->recording = 0; + cb->broken = 0; +} + +/* ------------------------------------------------------------------ pools */ + +static vkb_cmdpool *pool_get(vkb_device *dev, VkCommandPool pool, int create) +{ + vkb_cmdpool *p = vkb_map_get(&dev->pools, (uint64_t)pool); + if (!p && create) { + p = calloc(1, sizeof(*p)); + vkb_map_put(&dev->pools, (uint64_t)pool, p); + } + return p; +} + +static void cmdbuf_free(vkb_cmdbuf *cb) +{ + vkb_enc_free(&cb->stream); + free(cb); +} + +void vkb_cmdpool_free(vkb_cmdpool *p) +{ + vkb_cmdbuf *cb = p->head; + while (cb) { + vkb_cmdbuf *n = cb->pool_next; + cmdbuf_free(cb); + cb = n; + } + free(p); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, + VkCommandBuffer *pCommandBuffers) +{ + VkResult r = vkb_wire_vkAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); + if (r != VK_SUCCESS) { + for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++) pCommandBuffers[i] = VK_NULL_HANDLE; + return r; + } + vkb_device *dev = vkb_dev(device); + pthread_mutex_lock(&dev->lock); + vkb_cmdpool *p = pool_get(dev, pAllocateInfo->commandPool, 1); + for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++) { + vkb_cmdbuf *cb = vkb_cb(pCommandBuffers[i]); + if (!cb) continue; + cb->pool = pAllocateInfo->commandPool; + cb->level = pAllocateInfo->level; + cb->pool_next = p->head; + cb->pool_prev = NULL; + if (p->head) p->head->pool_prev = cb; + p->head = cb; + } + pthread_mutex_unlock(&dev->lock); + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, + const VkCommandBuffer *pCommandBuffers) +{ + vkb_wire_vkFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); + vkb_device *dev = vkb_dev(device); + pthread_mutex_lock(&dev->lock); + vkb_cmdpool *p = pool_get(dev, commandPool, 0); + for (uint32_t i = 0; i < commandBufferCount; i++) { + vkb_cmdbuf *cb = vkb_cb(pCommandBuffers[i]); + if (!cb) continue; + if (p) { + if (cb->pool_prev) cb->pool_prev->pool_next = cb->pool_next; + else if (p->head == cb) p->head = cb->pool_next; + if (cb->pool_next) cb->pool_next->pool_prev = cb->pool_prev; + } + cmdbuf_free(cb); + } + pthread_mutex_unlock(&dev->lock); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks *pAllocator) +{ + if (!commandPool) return; + vkb_wire_vkDestroyCommandPool(device, commandPool, pAllocator); + vkb_device *dev = vkb_dev(device); + pthread_mutex_lock(&dev->lock); + vkb_cmdpool *p = vkb_map_remove(&dev->pools, (uint64_t)commandPool); + pthread_mutex_unlock(&dev->lock); + if (p) vkb_cmdpool_free(p); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) +{ + VkResult r = vkb_wire_vkResetCommandPool(device, commandPool, flags); + vkb_device *dev = vkb_dev(device); + pthread_mutex_lock(&dev->lock); + vkb_cmdpool *p = pool_get(dev, commandPool, 0); + for (vkb_cmdbuf *cb = p ? p->head : NULL; cb; cb = cb->pool_next) stream_reset(cb); + pthread_mutex_unlock(&dev->lock); + return r; +} + +/* ------------------------------------------------------------------ recording */ + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo *pBeginInfo) +{ + vkb_cmdbuf *cb = vkb_cb(commandBuffer); + stream_reset(cb); + cb->recording = 1; + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkBeginCommandBuffer); + vkb_enc_u64(e, cb->obj.remote); + tls_encoding = cb; + vkb_enc_u8(e, pBeginInfo != NULL); + if (pBeginInfo) vkb_enc_VkCommandBufferBeginInfo(e, pBeginInfo); + tls_encoding = NULL; + vkb_cmd_record_end(commandBuffer); + return cb->broken ? VK_ERROR_OUT_OF_HOST_MEMORY : VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEndCommandBuffer(VkCommandBuffer commandBuffer) +{ + vkb_cmdbuf *cb = vkb_cb(commandBuffer); + if (!cb->recording) return VK_SUCCESS; + cb->recording = 0; + if (cb->broken || cb->stream.oom) { + VKB_ERR("command buffer could not be recorded (out of memory)"); + stream_reset(cb); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkEndCommandBuffer, cb->obj.table); + vkb_enc_u64(&c.e, cb->obj.remote); + vkb_enc_blob(&c.e, cb->stream.buf ? cb->stream.buf : (const void *)"", cb->stream.len); + VkResult r = VK_ERROR_DEVICE_LOST; + if (vkb_async_results()) { + /* Replayed on the server while the app goes on; ordered before its submit. */ + r = vkb_call_exec_async(&c) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + } else if (vkb_call_exec(&c)) { + r = (VkResult)vkb_dec_u32(&c.d); + vkb_call_end(&c); + } + stream_reset(cb); + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) +{ + stream_reset(vkb_cb(commandBuffer)); + return vkb_wire_vkResetCommandBuffer(commandBuffer, flags); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, + const VkCommandBuffer *pCommandBuffers) +{ + vkb_wire_vkCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); +} + +/* Debug labels never reach the driver. */ +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT *pLabelInfo) +{ + (void)commandBuffer; + (void)pLabelInfo; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer) +{ + (void)commandBuffer; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT *pLabelInfo) +{ + (void)commandBuffer; + (void)pLabelInfo; +} diff --git a/tools/vkbridge/client/compat/X11/Xlib.h b/tools/vkbridge/client/compat/X11/Xlib.h new file mode 100644 index 000000000..f6d4f1c85 --- /dev/null +++ b/tools/vkbridge/client/compat/X11/Xlib.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * Minimal Xlib declarations for the bridge ICD: it never links libX11, it only needs the types + * vulkan_xlib.h names and looks up XGetXCBConnection at run time. */ +#ifndef VKB_COMPAT_XLIB_H +#define VKB_COMPAT_XLIB_H +typedef struct _XDisplay Display; +typedef unsigned long XID; +typedef XID Window; +typedef unsigned long VisualID; +#endif diff --git a/tools/vkbridge/client/compat/xcb/xcb.h b/tools/vkbridge/client/compat/xcb/xcb.h new file mode 100644 index 000000000..b21e9f3d5 --- /dev/null +++ b/tools/vkbridge/client/compat/xcb/xcb.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * Minimal xcb declarations for the bridge ICD: libxcb is opened at run time (dlopen), so only the + * types and the few request/reply layouts the software present path uses are declared here. */ +#ifndef VKB_COMPAT_XCB_H +#define VKB_COMPAT_XCB_H +#include +typedef struct xcb_connection_t xcb_connection_t; +typedef uint32_t xcb_window_t; +typedef uint32_t xcb_visualid_t; +typedef uint32_t xcb_drawable_t; +typedef uint32_t xcb_gcontext_t; +typedef uint32_t xcb_pixmap_t; +typedef struct { unsigned int sequence; } xcb_void_cookie_t; +typedef struct { unsigned int sequence; } xcb_get_geometry_cookie_t; +typedef struct { + uint8_t response_type; + uint8_t depth; + uint16_t sequence; + uint32_t length; + xcb_window_t root; + int16_t x, y; + uint16_t width, height, border_width; + uint8_t pad0[2]; +} xcb_get_geometry_reply_t; +typedef struct { + uint8_t response_type; + uint8_t error_code; + uint16_t sequence; + uint32_t resource_id; + uint16_t minor_code; + uint8_t major_code; + uint8_t pad0; + uint32_t pad[5]; + uint32_t full_sequence; +} xcb_generic_error_t; +#define XCB_IMAGE_FORMAT_Z_PIXMAP 2 +#endif diff --git a/tools/vkbridge/client/conn.c b/tools/vkbridge/client/conn.c new file mode 100644 index 000000000..b48fb8190 --- /dev/null +++ b/tools/vkbridge/client/conn.c @@ -0,0 +1,672 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Client transport: one Unix-socket connection per thread (the server mirrors it with one thread), + * so calls from different threads run in parallel exactly as they would on a local driver. + */ +#define _GNU_SOURCE +#include "vkb_client.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* ------------------------------------------------------------------ logging */ + +static int log_level_v = -1; +static FILE *log_file; +static pthread_mutex_t log_lock = PTHREAD_MUTEX_INITIALIZER; + +int vkb_log_level(void) +{ + if (log_level_v < 0) { + const char *d = getenv("VKBRIDGE_DEBUG"); + log_level_v = d && *d && strcmp(d, "0") ? VKB_LOG_DEBUG : VKB_LOG_WARN; + const char *v = getenv("VKBRIDGE_LOG_LEVEL"); + if (v) log_level_v = atoi(v); + const char *f = getenv("VKBRIDGE_CLIENT_LOG"); + if (f && *f) log_file = fopen(f, "ae"); + } + return log_level_v; +} + +void vkb_log(int level, const char *fmt, ...) +{ + if (level > vkb_log_level()) return; + char msg[2048]; + va_list ap; + va_start(ap, fmt); + vsnprintf(msg, sizeof(msg), fmt, ap); + va_end(ap); + static const char *const tags[] = {"error", "warning", "info", "debug"}; + char comm[32] = "?"; + FILE *cf = fopen("/proc/self/comm", "re"); + if (cf) { + if (fgets(comm, sizeof(comm), cf)) comm[strcspn(comm, "\n")] = 0; + fclose(cf); + } + pthread_mutex_lock(&log_lock); + fprintf(stderr, "vkbridge %s [%s %d]: %s\n", tags[level & 3], comm, getpid(), msg); + if (log_file) { + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + struct tm tm; + localtime_r(&ts.tv_sec, &tm); + fprintf(log_file, "%02d:%02d:%02d.%03ld vkbridge-client %s [%s %d]: %s\n", tm.tm_hour, tm.tm_min, tm.tm_sec, + ts.tv_nsec / 1000000, tags[level & 3], comm, getpid(), msg); + fflush(log_file); + } + pthread_mutex_unlock(&log_lock); +} + +/* ------------------------------------------------------------------ connection */ + +typedef struct vkb_conn { + int sock; + int dead; + uint32_t epoch; + vkb_enc enc; /* reused request buffer */ + uint8_t *in; + size_t incap; + vkb_arena arena; + int busy; +} vkb_conn; + +static uint64_t process_token; +/* The last asynchronous request's sequence number in this process (see vkb_msg_hdr). */ +static uint64_t async_seq; +static uint32_t fork_epoch; +static pthread_key_t conn_key; +static pthread_once_t conn_once = PTHREAD_ONCE_INIT; +static __thread vkb_conn *tls_conn; + +static void conn_free(vkb_conn *c) +{ + if (!c) return; + if (c->sock >= 0) close(c->sock); + vkb_enc_free(&c->enc); + free(c->in); + vkb_arena_free(&c->arena); + free(c); +} + +static void conn_thread_exit(void *p) +{ + conn_free(p); +} + +/* Asynchronous requests of the whole process wait here and are written out in one go, ahead of + * the next synchronous request any thread makes (or when the queue grows large). They carry their + * sequence numbers, so whichever connection carries them, the server runs them in order. */ +static pthread_mutex_t aq_lock = PTHREAD_MUTEX_INITIALIZER; +static uint8_t *aq_buf; +static size_t aq_len, aq_cap; +#define AQ_FLUSH (256u << 10) + +static int write_all(int sock, const void *p, size_t n) +{ + const uint8_t *b = p; + while (n) { + ssize_t r = send(sock, b, n, MSG_NOSIGNAL); + if (r < 0) { + if (errno == EINTR) continue; + return -1; + } + b += r; + n -= (size_t)r; + } + return 0; +} + +static int aq_flush_locked(vkb_conn *conn) +{ + if (!aq_len) return 0; + int r = write_all(conn->sock, aq_buf, aq_len); + aq_len = 0; + if (aq_cap > (4u << 20)) { + free(aq_buf); + aq_buf = NULL; + aq_cap = 0; + } + return r; +} + +/* The flusher: asynchronous requests do not wait for the next synchronous one forever - another + * thread may be blocked in the server on work they would start (a submit that signals what it is + * waiting for). It sends what is queued ~100 us after it was queued, batching what follows. */ +static pthread_cond_t aq_cond = PTHREAD_COND_INITIALIZER; +static int aq_flusher_started; +static uint64_t aq_first_ns; + +static uint64_t now_ns(void) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t)ts.tv_sec * 1000000000ull + (uint64_t)ts.tv_nsec; +} + +static vkb_conn *get_conn(void); + +static void *aq_flusher(void *arg) +{ + (void)arg; + vkb_conn *conn = get_conn(); + if (!conn) return NULL; + pthread_mutex_lock(&aq_lock); + for (;;) { + while (!aq_len) pthread_cond_wait(&aq_cond, &aq_lock); + uint64_t due = aq_first_ns + 100000, now = now_ns(); + if (now < due && aq_len < AQ_FLUSH / 4) { + pthread_mutex_unlock(&aq_lock); + struct timespec ts = {0, (long)(due - now)}; + nanosleep(&ts, NULL); + pthread_mutex_lock(&aq_lock); + continue; + } + if (aq_flush_locked(conn) < 0) { + conn->dead = 1; + break; + } + } + pthread_mutex_unlock(&aq_lock); + return NULL; +} + +static void aq_exit_flush(void) +{ + vkb_conn *c = tls_conn; + if (!c || c->dead) return; + pthread_mutex_lock(&aq_lock); + aq_flush_locked(c); + pthread_mutex_unlock(&aq_lock); +} + +static void atfork_child(void) +{ + aq_len = 0; + aq_flusher_started = 0; + pthread_cond_init(&aq_cond, NULL); + pthread_mutex_init(&aq_lock, NULL); + /* The child must not talk on the parent's sockets: new token, new connections. */ + fork_epoch++; + process_token = 0; + async_seq = 0; + tls_conn = NULL; /* the old one is leaked deliberately: its socket belongs to the parent too */ +} + +static void conn_init_once(void) +{ + pthread_key_create(&conn_key, conn_thread_exit); + pthread_atfork(NULL, NULL, atfork_child); + atexit(aq_exit_flush); +} + +void vkb_conn_after_fork(void) { atfork_child(); } + +static uint64_t make_token(void) +{ + uint64_t t = 0; + int fd = open("/dev/urandom", O_RDONLY | O_CLOEXEC); + if (fd >= 0) { + if (read(fd, &t, sizeof(t)) != sizeof(t)) t = 0; + close(fd); + } + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + t ^= ((uint64_t)getpid() << 32) ^ (uint64_t)ts.tv_nsec ^ (uint64_t)ts.tv_sec * 1000003u; + return t ? t : 1; +} + +static const char *socket_path(void) +{ + const char *p = getenv(VKB_DEFAULT_SOCKET_ENV); + if (p && *p) return p; + static char buf[256]; + const char *rd = getenv("XDG_RUNTIME_DIR"); + snprintf(buf, sizeof(buf), "%s/vkbridge.sock", rd && *rd ? rd : "/tmp"); + return buf; +} + +static int do_connect(vkb_conn *c) +{ + const char *path = socket_path(); + struct sockaddr_un a; + memset(&a, 0, sizeof(a)); + a.sun_family = AF_UNIX; + if (strlen(path) >= sizeof(a.sun_path)) { + VKB_ERR("socket path too long: %s", path); + return -1; + } + strcpy(a.sun_path, path); + int s = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); + if (s < 0) return -1; + if (connect(s, (struct sockaddr *)&a, sizeof(a)) < 0) { + VKB_ONCE(VKB_LOG_ERROR, "cannot reach the Vulkan bridge server at %s: %s", path, strerror(errno)); + close(s); + return -1; + } + c->sock = s; + /* Hello: protocol check and which process this thread belongs to. */ + if (!process_token) process_token = make_token(); + vkb_enc e; + vkb_enc_init(&e); + vkb_enc_u64(&e, VKB_PROTOCOL_HASH); + vkb_enc_u64(&e, process_token); + vkb_enc_u32(&e, (uint32_t)getpid()); + char comm[64] = "?"; + FILE *f = fopen("/proc/self/comm", "re"); + if (f) { + if (fgets(comm, sizeof(comm), f)) comm[strcspn(comm, "\n")] = 0; + fclose(f); + } + vkb_enc_str(&e, comm); + vkb_msg_hdr h = {VKB_MAGIC, (uint32_t)e.len, VKB_CMD_vkbHello, 0, 0, 0, 0, 0}; + int ok = vkb_send_msg(s, &h, e.buf, NULL, 0) == 0; + vkb_enc_free(&e); + int fds[VKB_MAX_FDS], nfds = 0; + vkb_msg_hdr rh; + if (ok) ok = vkb_recv_msg(s, &rh, &c->in, &c->incap, fds, &nfds) == 0 && rh.cmd == VKB_ST_OK && rh.size >= 12; + if (ok) { + uint64_t sh; + uint32_t accepted; + memcpy(&sh, c->in, 8); + memcpy(&accepted, c->in + 8, 4); + if (!accepted) { + VKB_ONCE(VKB_LOG_ERROR, "the bridge server speaks protocol %016llx, this driver %016llx; update DroidDeck's Linux side", + (unsigned long long)sh, (unsigned long long)VKB_PROTOCOL_HASH); + ok = 0; + } + } + if (!ok) { + close(s); + c->sock = -1; + return -1; + } + return 0; +} + +static vkb_conn *get_conn(void) +{ + pthread_once(&conn_once, conn_init_once); + vkb_conn *c = tls_conn; + if (c && c->epoch != fork_epoch) c = tls_conn = NULL; + if (c) return c->dead ? NULL : c; + c = calloc(1, sizeof(*c)); + if (!c) return NULL; + c->sock = -1; + c->epoch = fork_epoch; + vkb_enc_init(&c->enc); + if (do_connect(c) < 0) { + c->dead = 1; + } + tls_conn = c; + pthread_setspecific(conn_key, c); + return c->dead ? NULL : c; +} + +int vkb_connected(void) +{ + return get_conn() != NULL; +} + +void vkb_call_begin(vkb_call *c, uint32_t cmd, uint32_t table) +{ + memset(c, 0, sizeof(*c)); + c->cmd = cmd; + c->table = table; + c->conn = get_conn(); + if (c->conn && !c->conn->busy) { + c->conn->busy = 1; + c->e = c->conn->enc; + vkb_enc_reset(&c->e); + } else { + /* No connection, or a nested call: encode into a private buffer. */ + if (c->conn && c->conn->busy) VKB_ERR("internal: nested bridge call (%s)", vkb_cmd_names[cmd]); + vkb_enc_init(&c->e); + c->flags |= 0x80000000u; + } +} + +static void release_enc(vkb_call *c) +{ + if (c->flags & 0x80000000u) { + vkb_enc_free(&c->e); + } else if (c->conn) { + c->conn->enc = c->e; + c->conn->busy = 0; + /* Don't keep a huge buffer around after one big message. */ + if (c->conn->enc.cap > (16u << 20)) { + vkb_enc_free(&c->conn->enc); + vkb_enc_init(&c->conn->enc); + } + } +} + +static int trace_on(void) +{ + static int v = -1; + if (v < 0) v = getenv("VKBRIDGE_TRACE") && strcmp(getenv("VKBRIDGE_TRACE"), "0"); + return v; +} + +int vkb_call_exec(vkb_call *c) +{ + vkb_conn *conn = c->conn; + if (trace_on()) { + /* VkResult-returning calls put it first in the reply; peeked after the round trip. */ + vkb_log(VKB_LOG_ERROR, "trace: %s", vkb_cmd_names[c->cmd]); + } + if (!conn || conn->dead || (c->flags & 0x80000000u)) { + release_enc(c); + c->conn = NULL; + return 0; + } + if (c->e.oom) { + VKB_ERR("%s: request could not be encoded", vkb_cmd_names[c->cmd]); + release_enc(c); + c->conn = NULL; + return 0; + } + vkb_msg_hdr h = {VKB_MAGIC, (uint32_t)c->e.len, c->cmd, c->table, (uint32_t)c->e.nfds, c->flags & VKB_F_NOREPLY, 0, 0}; + vkb_stats_count(c->cmd, (c->flags & VKB_F_NOREPLY) != 0, c->e.len); + pthread_mutex_lock(&aq_lock); + if ((c->flags & VKB_F_NOREPLY) && !c->e.nfds) { + /* Queued: header and payload appended under the lock that also orders the seqs. */ + h.seq = ++async_seq; + h.barrier = h.seq - 1; + size_t need = aq_len + sizeof(h) + c->e.len; + if (need > aq_cap) { + size_t nc = aq_cap ? aq_cap : 65536; + while (nc < need) nc *= 2; + uint8_t *nb = realloc(aq_buf, nc); + if (!nb) { + pthread_mutex_unlock(&aq_lock); + release_enc(c); + c->conn = NULL; + return 0; + } + aq_buf = nb; + aq_cap = nc; + } + if (!aq_len) aq_first_ns = now_ns(); + memcpy(aq_buf + aq_len, &h, sizeof(h)); + memcpy(aq_buf + aq_len + sizeof(h), c->e.buf, c->e.len); + aq_len = need; + if (!aq_flusher_started) { + aq_flusher_started = 1; + pthread_t t; + pthread_attr_t a; + pthread_attr_init(&a); + pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED); + if (pthread_create(&t, &a, aq_flusher, NULL) != 0) aq_flusher_started = 0; + pthread_attr_destroy(&a); + } + pthread_cond_signal(&aq_cond); + int r = aq_len >= AQ_FLUSH ? aq_flush_locked(conn) : 0; + pthread_mutex_unlock(&aq_lock); + release_enc(c); + c->conn = NULL; + if (r < 0) { + VKB_ERR("lost the bridge server (%s)", strerror(errno)); + conn->dead = 1; + return 0; + } + return 1; + } + /* Everything queued goes first, on this connection. */ + int qr = aq_flush_locked(conn); + if (c->flags & VKB_F_NOREPLY) { + h.seq = ++async_seq; + h.barrier = h.seq - 1; + } else { + h.barrier = async_seq; + } + pthread_mutex_unlock(&aq_lock); + if (qr < 0 || vkb_send_msg(conn->sock, &h, c->e.buf, c->e.fds, c->e.nfds) < 0) { + VKB_ERR("%s: lost the bridge server (%s)", vkb_cmd_names[c->cmd], strerror(errno)); + conn->dead = 1; + release_enc(c); + c->conn = NULL; + return 0; + } + release_enc(c); + if (c->flags & VKB_F_NOREPLY) { + c->conn = NULL; + return 1; + } + int fds[VKB_MAX_FDS], nfds = 0; + vkb_msg_hdr rh; + if (vkb_recv_msg(conn->sock, &rh, &conn->in, &conn->incap, fds, &nfds) < 0) { + VKB_ERR("%s: lost the bridge server while waiting for the reply", vkb_cmd_names[c->cmd]); + conn->dead = 1; + c->conn = NULL; + return 0; + } + if (rh.cmd != VKB_ST_OK) { + static const char *const why[] = {"ok", "malformed request", "the driver lacks this command", "unknown object"}; + VKB_ERR("%s: the server refused the call (%s)", vkb_cmd_names[c->cmd], rh.cmd < 4 ? why[rh.cmd] : "?"); + for (int i = 0; i < nfds; i++) close(fds[i]); + c->conn = NULL; + return 0; + } + /* The decoder keeps fds in a per-call array. */ + static __thread int call_fds[VKB_MAX_FDS]; + memcpy(call_fds, fds, sizeof(int) * (size_t)nfds); + vkb_dec_init(&c->d, conn->in, rh.size, &conn->arena, call_fds, nfds); + return 1; +} + +void vkb_call_end(vkb_call *c) +{ + if (!c->conn) return; + if (c->d.err) VKB_ERR("%s: malformed reply", vkb_cmd_names[c->cmd]); + vkb_dec_close_untaken(&c->d); + vkb_arena_reset(&c->conn->arena); + c->conn = NULL; +} + +/* VkResult commands treated as asynchronous (ASYNC_RESULT in the generator): on unless + * VKBRIDGE_SYNC is set. */ +int vkb_async_results(void) +{ + static int v = -1; + if (v < 0) v = getenv("VKBRIDGE_SYNC") == NULL; + return v; +} + +/* Asynchronous variant: no reply is awaited (void commands without outputs). */ +int vkb_call_exec_async(vkb_call *c) +{ + if (getenv("VKBRIDGE_SYNC")) return vkb_call_exec(c) ? (vkb_call_end(c), 1) : 0; + c->flags |= VKB_F_NOREPLY; + return vkb_call_exec(c); +} + +/* VKBRIDGE_STATS=: per-command counts of round trips and async sends, logged. */ +static uint32_t stat_sync[VKB_CMD_COUNT], stat_async[VKB_CMD_COUNT]; +static uint64_t stat_bytes; +static uint64_t stat_last; +void vkb_stats_count(uint32_t cmd, int async, size_t bytes) +{ + static int period = -1; + if (period < 0) { + const char *v = getenv("VKBRIDGE_STATS"); + period = v ? atoi(v) : 0; + } + if (!period) return; + __atomic_add_fetch(async ? &stat_async[cmd] : &stat_sync[cmd], 1, __ATOMIC_RELAXED); + __atomic_add_fetch(&stat_bytes, bytes, __ATOMIC_RELAXED); + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + uint64_t now = (uint64_t)ts.tv_sec; + uint64_t last = __atomic_load_n(&stat_last, __ATOMIC_RELAXED); + if (!last) { + __atomic_store_n(&stat_last, now, __ATOMIC_RELAXED); + return; + } + if (now - last < (uint64_t)period || !__atomic_compare_exchange_n(&stat_last, &last, now, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) + return; + uint32_t tot_s = 0, tot_a = 0; + for (uint32_t i = 0; i < VKB_CMD_COUNT; i++) { + tot_s += stat_sync[i]; + tot_a += stat_async[i]; + } + vkb_log(VKB_LOG_ERROR, "stats over %us: %u round trips, %u async, %llu KB sent", period, tot_s, tot_a, + (unsigned long long)(stat_bytes >> 10)); + for (int k = 0; k < 8; k++) { + uint32_t best = 0, bi = 0; + for (uint32_t i = 0; i < VKB_CMD_COUNT; i++) + if (stat_sync[i] + stat_async[i] > best) { + best = stat_sync[i] + stat_async[i]; + bi = i; + } + if (!best) break; + vkb_log(VKB_LOG_ERROR, " %-40s %6u sync %6u async", vkb_cmd_names[bi], stat_sync[bi], stat_async[bi]); + stat_sync[bi] = stat_async[bi] = 0; + } + memset(stat_sync, 0, sizeof(stat_sync)); + memset(stat_async, 0, sizeof(stat_async)); + stat_bytes = 0; +} + +uint32_t vkb_table_of(const void *h) +{ + return h ? ((const vkb_object *)h)->table : 0; +} + +uint64_t vkb_remote(const void *h) +{ + return h ? ((const vkb_object *)h)->remote : 0; +} + +int vkb_memfd(const char *name, size_t size) +{ + int fd = (int)syscall(SYS_memfd_create, name, 1u /* MFD_CLOEXEC */); + if (fd < 0) { + /* No memfd (old kernel or a filter): an unlinked file in the runtime dir. */ + char path[256]; + const char *rd = getenv("XDG_RUNTIME_DIR"); + snprintf(path, sizeof(path), "%s/vkbridge-XXXXXX", rd && *rd ? rd : "/tmp"); + fd = mkostemp(path, O_CLOEXEC); + if (fd < 0) return -1; + unlink(path); + } + if (ftruncate(fd, (off_t)size) < 0) { + close(fd); + return -1; + } + return fd; +} + +/* ------------------------------------------------------------------ hash map */ + +void vkb_map_init(vkb_map *m) +{ + memset(m, 0, sizeof(*m)); + pthread_mutex_init(&m->lock, NULL); +} + +void vkb_map_destroy(vkb_map *m) +{ + free(m->keys); + free(m->vals); + pthread_mutex_destroy(&m->lock); + memset(m, 0, sizeof(*m)); +} + +static uint32_t hash64(uint64_t k) +{ + k ^= k >> 33; + k *= 0xff51afd7ed558ccdull; + k ^= k >> 33; + return (uint32_t)k; +} + +/* Keys are never 0 (VK_NULL_HANDLE); 0 marks an empty slot, ~0 a deleted one. */ +#define TOMB (~(uint64_t)0) + +static void map_rehash(vkb_map *m, uint32_t ncap) +{ + uint64_t *ok = m->keys; + void **ov = m->vals; + uint32_t oc = m->cap; + m->keys = calloc(ncap, sizeof(uint64_t)); + m->vals = calloc(ncap, sizeof(void *)); + m->cap = ncap; + m->count = 0; + for (uint32_t i = 0; i < oc; i++) { + if (ok[i] && ok[i] != TOMB) { + uint32_t j = hash64(ok[i]) & (ncap - 1); + while (m->keys[j]) j = (j + 1) & (ncap - 1); + m->keys[j] = ok[i]; + m->vals[j] = ov[i]; + m->count++; + } + } + free(ok); + free(ov); +} + +void vkb_map_put(vkb_map *m, uint64_t k, void *v) +{ + if (!k) return; + pthread_mutex_lock(&m->lock); + if (!m->cap || (m->count + 1) * 2 > m->cap) map_rehash(m, m->cap ? m->cap * 2 : 64); + uint32_t j = hash64(k) & (m->cap - 1); + int64_t tomb = -1; + while (m->keys[j]) { + if (m->keys[j] == k) { + m->vals[j] = v; + pthread_mutex_unlock(&m->lock); + return; + } + if (m->keys[j] == TOMB && tomb < 0) tomb = j; + j = (j + 1) & (m->cap - 1); + } + if (tomb >= 0) j = (uint32_t)tomb; + m->keys[j] = k; + m->vals[j] = v; + m->count++; + pthread_mutex_unlock(&m->lock); +} + +static int64_t map_find(vkb_map *m, uint64_t k) +{ + if (!m->cap || !k) return -1; + uint32_t j = hash64(k) & (m->cap - 1); + for (uint32_t n = 0; n < m->cap && m->keys[j]; n++) { + if (m->keys[j] == k) return j; + j = (j + 1) & (m->cap - 1); + } + return -1; +} + +void *vkb_map_get(vkb_map *m, uint64_t k) +{ + pthread_mutex_lock(&m->lock); + int64_t j = map_find(m, k); + void *v = j >= 0 ? m->vals[j] : NULL; + pthread_mutex_unlock(&m->lock); + return v; +} + +void *vkb_map_remove(vkb_map *m, uint64_t k) +{ + pthread_mutex_lock(&m->lock); + int64_t j = map_find(m, k); + void *v = NULL; + if (j >= 0) { + v = m->vals[j]; + m->keys[j] = TOMB; + m->vals[j] = NULL; + /* count keeps tombstones, so the table rehashes before it fills with them */ + } + pthread_mutex_unlock(&m->lock); + return v; +} diff --git a/tools/vkbridge/client/descriptor.c b/tools/vkbridge/client/descriptor.c new file mode 100644 index 000000000..1431ad851 --- /dev/null +++ b/tools/vkbridge/client/descriptor.c @@ -0,0 +1,652 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Descriptor update templates and private data. + * + * A template's data is laid out by the app (offsets and strides into its own structures). The + * server's copy of the template is created with packed entries instead, and every update packs + * the app's data the same way before sending it, so the server passes the blob straight on. + */ +#define _GNU_SOURCE +#include "vkb_client.h" +#include "gen/vkb_client_gen.h" + +#include + +typedef struct vkb_template { + uint32_t count; + size_t size; /* packed bytes */ + VkDescriptorUpdateTemplateEntry *app; /* the app's entries */ + size_t *packed; /* packed offset per entry */ + size_t *elem; /* element size per entry (inline: 1) */ +} vkb_template; + +static size_t elem_size(VkDescriptorType t) +{ + switch (t) { + case VK_DESCRIPTOR_TYPE_SAMPLER: + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + return sizeof(VkDescriptorImageInfo); + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: + return sizeof(VkDescriptorBufferInfo); + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + return sizeof(VkBufferView); + case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: + return 1; + default: + return 8; + } +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDescriptorUpdateTemplate *pTemplate) +{ + uint32_t n = pCreateInfo->descriptorUpdateEntryCount; + vkb_template *t = calloc(1, sizeof(*t)); + t->count = n; + t->app = calloc(n ? n : 1, sizeof(*t->app)); + t->packed = calloc(n ? n : 1, sizeof(size_t)); + t->elem = calloc(n ? n : 1, sizeof(size_t)); + VkDescriptorUpdateTemplateEntry *packed = calloc(n ? n : 1, sizeof(*packed)); + size_t off = 0; + for (uint32_t i = 0; i < n; i++) { + const VkDescriptorUpdateTemplateEntry *e = &pCreateInfo->pDescriptorUpdateEntries[i]; + t->app[i] = *e; + size_t es = elem_size(e->descriptorType); + t->elem[i] = es; + t->packed[i] = off; + packed[i] = *e; + packed[i].offset = off; + packed[i].stride = es; + off += (es * e->descriptorCount + 7) & ~(size_t)7; + } + t->size = off; + VkDescriptorUpdateTemplateCreateInfo ci = *pCreateInfo; + ci.pDescriptorUpdateEntries = packed; + VkResult r = vkb_wire_vkCreateDescriptorUpdateTemplate(device, &ci, pAllocator, pTemplate); + free(packed); + if (r != VK_SUCCESS) { + free(t->app); + free(t->packed); + free(t->elem); + free(t); + return r; + } + vkb_map_put(&vkb_dev(device)->templates, (uint64_t)*pTemplate, t); + return r; +} + +static void template_free(vkb_template *t) +{ + if (!t) return; + free(t->app); + free(t->packed); + free(t->elem); + free(t); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDescriptorUpdateTemplate(VkDevice device, VkDescriptorUpdateTemplate tmpl, + const VkAllocationCallbacks *pAllocator) +{ + if (!tmpl) return; + template_free(vkb_map_remove(&vkb_dev(device)->templates, (uint64_t)tmpl)); + vkb_wire_vkDestroyDescriptorUpdateTemplate(device, tmpl, pAllocator); +} + +static void pack(const vkb_template *t, const void *pData, uint8_t *out) +{ + const uint8_t *src = pData; + for (uint32_t i = 0; i < t->count; i++) { + const VkDescriptorUpdateTemplateEntry *e = &t->app[i]; + uint8_t *dst = out + t->packed[i]; + if (e->descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) { + memcpy(dst, src + e->offset, e->descriptorCount); + continue; + } + size_t es = t->elem[i]; + for (uint32_t j = 0; j < e->descriptorCount; j++) memcpy(dst + j * es, src + e->offset + (size_t)j * e->stride, es); + } +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet set, VkDescriptorUpdateTemplate tmpl, + const void *pData) +{ + vkb_device *dev = vkb_dev(device); + vkb_template *t = vkb_map_get(&dev->templates, (uint64_t)tmpl); + if (!t) { + VKB_ERR("vkUpdateDescriptorSetWithTemplate with an unknown template"); + return; + } + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkbDescUpdateRaw, dev->obj.table); + vkb_enc_u64(&c.e, dev->obj.remote); + vkb_enc_bytes(&c.e, &set, sizeof(set)); + vkb_enc_bytes(&c.e, &tmpl, sizeof(tmpl)); + /* Packed straight into the request. */ + vkb_enc_u8(&c.e, 1); + vkb_enc_u64(&c.e, t->size); + size_t at = vkb_enc_raw(&c.e, NULL, t->size); + if (!c.e.oom) pack(t, pData, c.e.buf + at); + vkb_call_exec_async(&c); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate tmpl, + VkPipelineLayout layout, uint32_t set, const void *pData) +{ + vkb_cmdbuf *cb = vkb_cb(commandBuffer); + vkb_template *t = vkb_map_get(&cb->device->templates, (uint64_t)tmpl); + if (!t) { + VKB_ERR("vkCmdPushDescriptorSetWithTemplateKHR with an unknown template"); + return; + } + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkbPushDescRaw); + if (!e) return; + vkb_enc_u64(e, cb->obj.remote); + vkb_enc_bytes(e, &tmpl, sizeof(tmpl)); + vkb_enc_bytes(e, &layout, sizeof(layout)); + vkb_enc_u32(e, set); + vkb_enc_u8(e, 1); + vkb_enc_u64(e, t->size); + size_t at = vkb_enc_raw(e, NULL, t->size); + if (!e->oom) pack(t, pData, e->buf + at); + vkb_cmd_record_end(commandBuffer); +} + +/* ------------------------------------------------------------------ private data (client-local) */ + +typedef struct vkb_private_slot { + vkb_map values; +} vkb_private_slot; + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreatePrivateDataSlot(VkDevice device, const VkPrivateDataSlotCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkPrivateDataSlot *pSlot) +{ + (void)device; + (void)pCreateInfo; + (void)pAllocator; + vkb_private_slot *s = calloc(1, sizeof(*s)); + if (!s) return VK_ERROR_OUT_OF_HOST_MEMORY; + vkb_map_init(&s->values); + *pSlot = (VkPrivateDataSlot)(uintptr_t)s; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot slot, const VkAllocationCallbacks *pAllocator) +{ + (void)device; + (void)pAllocator; + vkb_private_slot *s = (vkb_private_slot *)(uintptr_t)slot; + if (!s) return; + vkb_map_destroy(&s->values); + free(s); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, + VkPrivateDataSlot slot, uint64_t data) +{ + (void)device; + (void)objectType; + vkb_private_slot *s = (vkb_private_slot *)(uintptr_t)slot; + vkb_map_put(&s->values, objectHandle, (void *)(uintptr_t)data); + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, + VkPrivateDataSlot slot, uint64_t *pData) +{ + (void)device; + (void)objectType; + vkb_private_slot *s = (vkb_private_slot *)(uintptr_t)slot; + *pData = (uint64_t)(uintptr_t)vkb_map_get(&s->values, objectHandle); +} + +/* ------------------------------------------------------------------ debug utils (no-ops) */ + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetDebugUtilsObjectNameEXT(VkDevice device, const VkDebugUtilsObjectNameInfoEXT *pNameInfo) +{ + (void)device; + (void)pNameInfo; + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetDebugUtilsObjectTagEXT(VkDevice device, const VkDebugUtilsObjectTagInfoEXT *pTagInfo) +{ + (void)device; + (void)pTagInfo; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkQueueBeginDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT *pLabelInfo) +{ + (void)queue; + (void)pLabelInfo; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkQueueEndDebugUtilsLabelEXT(VkQueue queue) +{ + (void)queue; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkQueueInsertDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT *pLabelInfo) +{ + (void)queue; + (void)pLabelInfo; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT *pMessenger) +{ + (void)instance; + (void)pCreateInfo; + (void)pAllocator; + static uint64_t next = 1; + *pMessenger = (VkDebugUtilsMessengerEXT)(uintptr_t)__atomic_fetch_add(&next, 1, __ATOMIC_RELAXED); + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator) +{ + (void)instance; + (void)messenger; + (void)pAllocator; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkSubmitDebugUtilsMessageEXT(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT severity, + VkDebugUtilsMessageTypeFlagsEXT types, + const VkDebugUtilsMessengerCallbackDataEXT *pData) +{ + (void)instance; + (void)severity; + (void)types; + (void)pData; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushDescriptorSetWithTemplate2(VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo *pInfo) +{ + vkb_ep_vkCmdPushDescriptorSetWithTemplate(commandBuffer, pInfo->descriptorUpdateTemplate, pInfo->layout, pInfo->set, pInfo->pData); +} + +/* ------------------------------------------------------------------ host image copy (not offered) */ + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCopyMemoryToImage(VkDevice device, const VkCopyMemoryToImageInfo *pInfo) +{ + (void)device; + (void)pInfo; + return VK_ERROR_FEATURE_NOT_PRESENT; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCopyImageToMemory(VkDevice device, const VkCopyImageToMemoryInfo *pInfo) +{ + (void)device; + (void)pInfo; + return VK_ERROR_FEATURE_NOT_PRESENT; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCopyImageToImage(VkDevice device, const VkCopyImageToImageInfo *pInfo) +{ + (void)device; + (void)pInfo; + return VK_ERROR_FEATURE_NOT_PRESENT; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkTransitionImageLayout(VkDevice device, uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo *pTransitions) +{ + (void)device; + (void)transitionCount; + (void)pTransitions; + return VK_ERROR_FEATURE_NOT_PRESENT; +} + +/* ------------------------------------------------------------------ descriptor set batching */ + +/* + * DXVK allocates a descriptor set (or two) per draw; one round trip each was most of a frame's + * time. Sets are allocated from the server in batches per (pool, layout) and handed out here. A + * pool's reset or destruction drops what was cached for it (the reset freed those sets anyway). + * + * Where it can, the client keeps the pool's books: what each layout takes of every descriptor + * type, and what the pool has left. A batch then asks for no more than fits, and a pool that is + * full answers VK_ERROR_OUT_OF_POOL_MEMORY here, without a round trip (DXVK fills a pool every few + * hundred draws). Pools and layouts the books cannot follow (sets freed one by one, inline uniform + * blocks, mutable or variable-count descriptors) go by the driver's answers: a batch that does not + * fit falls back to what the app asked for, so the app sees the out-of-pool error when it would. + */ +#define DS_BATCH 256 +#define DS_TYPES 12 /* VK_DESCRIPTOR_TYPE_SAMPLER..INPUT_ATTACHMENT, then ACCELERATION_STRUCTURE_KHR */ + +static int ds_type_index(VkDescriptorType t) +{ + if ((uint32_t)t <= VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT) return (int)t; + if (t == VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) return 11; + return -1; +} + +typedef struct ds_cache { + VkDescriptorPool pool; + VkDescriptorSetLayout layout; + VkDescriptorSet sets[DS_BATCH]; + uint32_t n; + uint32_t batch; /* grows from 4 to the pool's max_batch while the pool keeps up */ + struct ds_cache *next; +} ds_cache; + +static pthread_mutex_t ds_lock = PTHREAD_MUTEX_INITIALIZER; +static ds_cache *ds_head; + +/* Pools the app made, with the batch they allow: a pool sized for exactly what the app will + * allocate (DXVK's sampler pool) must not lose capacity to prefetching. */ +typedef struct ds_pool { + VkDescriptorPool pool; + uint32_t max_batch; + int books; /* capacity below is kept */ + uint32_t max_sets, sets_left; + uint32_t size[DS_TYPES], left[DS_TYPES]; + struct ds_pool *next; +} ds_pool; +static ds_pool *ds_pools; + +/* Layouts with what one set of them takes; known = 0 when the books cannot follow it. */ +typedef struct ds_layout { + VkDescriptorSetLayout layout; + int known; + uint32_t count[DS_TYPES]; + struct ds_layout *next; +} ds_layout; +static ds_layout *ds_layouts; + +static ds_pool *pool_find(VkDescriptorPool pool) +{ + for (ds_pool *p = ds_pools; p; p = p->next) + if (p->pool == pool) return p; + return NULL; +} + +static ds_layout *layout_find(VkDescriptorSetLayout layout) +{ + for (ds_layout *l = ds_layouts; l; l = l->next) + if (l->layout == layout) return l; + return NULL; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *ci, + const VkAllocationCallbacks *pAllocator, VkDescriptorSetLayout *pLayout) +{ + VkResult r = vkb_wire_vkCreateDescriptorSetLayout(device, ci, pAllocator, pLayout); + if (r != VK_SUCCESS) return r; + ds_layout *l = calloc(1, sizeof(*l)); + if (!l) return r; + l->layout = *pLayout; + /* Binding flags only matter for variable counts; anything else in the chain is left alone. */ + l->known = 1; + for (const VkBaseInStructure *n = ci->pNext; n; n = n->pNext) { + if (n->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO) { + l->known = 0; + continue; + } + const VkDescriptorSetLayoutBindingFlagsCreateInfo *bf = (const void *)n; + for (uint32_t i = 0; i < bf->bindingCount; i++) + if (bf->pBindingFlags[i] & VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT) l->known = 0; + } + for (uint32_t i = 0; i < ci->bindingCount && l->known; i++) { + int t = ds_type_index(ci->pBindings[i].descriptorType); + if (t < 0) l->known = 0; + else l->count[t] += ci->pBindings[i].descriptorCount; + } + pthread_mutex_lock(&ds_lock); + l->next = ds_layouts; + ds_layouts = l; + pthread_mutex_unlock(&ds_lock); + return r; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout layout, + const VkAllocationCallbacks *pAllocator) +{ + if (!layout) return; + pthread_mutex_lock(&ds_lock); + for (ds_layout **pp = &ds_layouts; *pp; pp = &(*pp)->next) { + if ((*pp)->layout == layout) { + ds_layout *l = *pp; + *pp = l->next; + free(l); + break; + } + } + /* Sets cached for it stay allocated in their pools, but a new layout may get its handle. */ + for (ds_cache **pp = &ds_head; *pp;) { + if ((*pp)->layout == layout) { + ds_cache *c = *pp; + *pp = c->next; + free(c); + } else { + pp = &(*pp)->next; + } + } + pthread_mutex_unlock(&ds_lock); + vkb_wire_vkDestroyDescriptorSetLayout(device, layout, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *ci, + const VkAllocationCallbacks *pAllocator, VkDescriptorPool *pPool) +{ + VkResult r = vkb_wire_vkCreateDescriptorPool(device, ci, pAllocator, pPool); + if (r != VK_SUCCESS) return r; + ds_pool *p = calloc(1, sizeof(*p)); + if (!p) return r; + p->pool = *pPool; + p->max_batch = ci->maxSets >= 256 ? ci->maxSets / 8 : 1; + if (p->max_batch > DS_BATCH) p->max_batch = DS_BATCH; + p->books = !ci->pNext && !(ci->flags & VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT); + p->max_sets = p->sets_left = ci->maxSets; + for (uint32_t i = 0; i < ci->poolSizeCount && p->books; i++) { + int t = ds_type_index(ci->pPoolSizes[i].type); + if (t < 0) p->books = 0; + else p->size[t] += ci->pPoolSizes[i].descriptorCount; + } + memcpy(p->left, p->size, sizeof(p->left)); + VKB_DBG("descriptor pool: maxSets %u, %u pool sizes, prefetch up to %u%s", ci->maxSets, ci->poolSizeCount, + p->max_batch, p->books ? ", capacity tracked" : ""); + pthread_mutex_lock(&ds_lock); + p->next = ds_pools; + ds_pools = p; + pthread_mutex_unlock(&ds_lock); + return r; +} + +static ds_cache *ds_find(VkDescriptorPool pool, VkDescriptorSetLayout layout, int create) +{ + for (ds_cache *c = ds_head; c; c = c->next) + if (c->pool == pool && c->layout == layout) return c; + if (!create) return NULL; + ds_cache *c = calloc(1, sizeof(*c)); + if (!c) return NULL; + c->pool = pool; + c->layout = layout; + c->batch = 4; + c->next = ds_head; + ds_head = c; + return c; +} + +/* A reset frees the pool's sets, cached ones included; destruction also forgets the pool. The + * learned batch size survives a reset (pools are reset every frame). */ +static void ds_drop_pool(VkDescriptorPool pool, int destroy) +{ + pthread_mutex_lock(&ds_lock); + ds_cache **pp = &ds_head; + while (*pp) { + if ((*pp)->pool == pool && destroy) { + ds_cache *c = *pp; + *pp = c->next; + free(c); + } else { + if ((*pp)->pool == pool) (*pp)->n = 0; + pp = &(*pp)->next; + } + } + ds_pool *p = pool_find(pool); + if (p && !destroy) { + p->sets_left = p->max_sets; + memcpy(p->left, p->size, sizeof(p->left)); + } + pthread_mutex_unlock(&ds_lock); +} + +/* How many sets of layout l still fit in pool p by the books; UINT32_MAX when not kept. */ +static uint32_t ds_fits(const ds_pool *p, const ds_layout *l) +{ + if (!p->books || !l || !l->known) return UINT32_MAX; + uint32_t n = p->sets_left; + for (int t = 0; t < DS_TYPES; t++) + if (l->count[t] && p->left[t] / l->count[t] < n) n = p->left[t] / l->count[t]; + return n; +} + +/* Fills the cache for (pool, layout) with `want` sets; returns the driver's result. */ +static VkResult ds_refill(VkDevice device, ds_pool *p, const ds_layout *l, ds_cache *c, uint32_t want) +{ + VkDescriptorSetLayout layouts[DS_BATCH]; + for (uint32_t i = 0; i < want; i++) layouts[i] = c->layout; + VkDescriptorSetAllocateInfo ai = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, NULL, c->pool, want, layouts}; + VkResult r = vkb_wire_vkAllocateDescriptorSets(device, &ai, c->sets + c->n); + if (r != VK_SUCCESS) return r; + c->n += want; + if (ds_fits(p, l) != UINT32_MAX) { + p->sets_left -= want; + for (int t = 0; t < DS_TYPES; t++) p->left[t] -= want * l->count[t]; + } + return r; +} + +/* + * Sets the client names itself: with the pool's books kept and every layout known, whether the + * allocation fits is known here, so the sets get names (VKB_DS_TAG | n) at once and the server + * allocates the driver's sets without a reply (server_dsmap.c). All or nothing, as the spec has + * it. VK_ERROR_UNKNOWN: not for this path (a layout the books cannot follow). + */ +#define VKB_DS_TAG (1ull << 63) +#define DS_NAMED_MAX 1024 + +static VkResult ds_alloc_named(VkDevice device, ds_pool *p, const VkDescriptorSetAllocateInfo *ai, VkDescriptorSet *out) +{ + static uint64_t next_name; + uint32_t n = ai->descriptorSetCount; + if (!n || n > DS_NAMED_MAX) return VK_ERROR_UNKNOWN; + uint64_t need[DS_TYPES] = {0}; + for (uint32_t i = 0; i < n; i++) { + const ds_layout *l = layout_find(ai->pSetLayouts[i]); + if (!l || !l->known) return VK_ERROR_UNKNOWN; + for (int t = 0; t < DS_TYPES; t++) need[t] += l->count[t]; + } + if (n > p->sets_left) return VK_ERROR_OUT_OF_POOL_MEMORY; + for (int t = 0; t < DS_TYPES; t++) + if (need[t] > p->left[t]) return VK_ERROR_OUT_OF_POOL_MEMORY; + vkb_device *dev = vkb_dev(device); + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkbAllocDescSets, dev->obj.table); + vkb_enc_u64(&c.e, dev->obj.remote); + vkb_enc_bytes(&c.e, &ai->descriptorPool, sizeof(ai->descriptorPool)); + vkb_enc_u32(&c.e, n); + for (uint32_t i = 0; i < n; i++) { + out[i] = (VkDescriptorSet)(VKB_DS_TAG | __atomic_add_fetch(&next_name, 1, __ATOMIC_RELAXED)); + vkb_enc_bytes(&c.e, &ai->pSetLayouts[i], sizeof(ai->pSetLayouts[i])); + vkb_enc_u64(&c.e, (uint64_t)out[i]); + } + if (!vkb_call_exec_async(&c)) { + for (uint32_t i = 0; i < n; i++) out[i] = VK_NULL_HANDLE; + return VK_ERROR_DEVICE_LOST; + } + p->sets_left -= n; + for (int t = 0; t < DS_TYPES; t++) p->left[t] -= (uint32_t)need[t]; + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo *ai, VkDescriptorSet *out) +{ + /* Variable descriptor counts and the like are per allocation: those go straight through. */ + if (ai->pNext || getenv("VKBRIDGE_SYNC")) return vkb_wire_vkAllocateDescriptorSets(device, ai, out); + pthread_mutex_lock(&ds_lock); + ds_pool *p = pool_find(ai->descriptorPool); + if (!p || p->max_batch <= 1) { + pthread_mutex_unlock(&ds_lock); + return vkb_wire_vkAllocateDescriptorSets(device, ai, out); + } + if (p->books) { + VkResult nr = ds_alloc_named(device, p, ai, out); + if (nr != VK_ERROR_UNKNOWN) { + pthread_mutex_unlock(&ds_lock); + return nr; + } + } + VkResult r = VK_SUCCESS; + uint32_t done = 0; + for (; done < ai->descriptorSetCount; done++) { + ds_cache *c = ds_find(ai->descriptorPool, ai->pSetLayouts[done], 1); + if (!c) { + r = VK_ERROR_OUT_OF_HOST_MEMORY; + break; + } + if (c->batch > p->max_batch) c->batch = p->max_batch; + if (!c->n) { + const ds_layout *l = layout_find(c->layout); + uint32_t fits = ds_fits(p, l), want = c->batch < fits ? c->batch : fits; + if (!want) { + r = VK_ERROR_OUT_OF_POOL_MEMORY; + break; + } + r = ds_refill(device, p, l, c, want); + if ((r == VK_ERROR_OUT_OF_POOL_MEMORY || r == VK_ERROR_FRAGMENTED_POOL) && want > 1) { + /* The driver disagrees with the batch (or the books): just what was asked for. */ + c->batch = want / 2 > 4 ? want / 2 : 4; + r = ds_refill(device, p, l, c, 1); + } else if (r == VK_SUCCESS && c->batch < p->max_batch && want == c->batch) { + c->batch = c->batch * 2 > p->max_batch ? p->max_batch : c->batch * 2; + } + if (r != VK_SUCCESS) break; + } + out[done] = c->sets[--c->n]; + } + if (r != VK_SUCCESS) { + /* None allocated, as the spec has it: what was taken goes back to the cache. */ + for (uint32_t i = 0; i < done; i++) { + ds_cache *c = ds_find(ai->descriptorPool, ai->pSetLayouts[i], 0); + if (c && c->n < DS_BATCH) c->sets[c->n++] = out[i]; + } + for (uint32_t i = 0; i < ai->descriptorSetCount; i++) out[i] = VK_NULL_HANDLE; + } + pthread_mutex_unlock(&ds_lock); + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetDescriptorPool(VkDevice device, VkDescriptorPool pool, VkDescriptorPoolResetFlags flags) +{ + ds_drop_pool(pool, 0); + return vkb_wire_vkResetDescriptorPool(device, pool, flags); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool pool, const VkAllocationCallbacks *pAllocator) +{ + if (!pool) return; + ds_drop_pool(pool, 1); + pthread_mutex_lock(&ds_lock); + for (ds_pool **pp = &ds_pools; *pp; pp = &(*pp)->next) { + if ((*pp)->pool == pool) { + ds_pool *p = *pp; + *pp = p->next; + free(p); + break; + } + } + pthread_mutex_unlock(&ds_lock); + vkb_wire_vkDestroyDescriptorPool(device, pool, pAllocator); +} diff --git a/tools/vkbridge/client/emu.c b/tools/vkbridge/client/emu.c new file mode 100644 index 000000000..08918f280 --- /dev/null +++ b/tools/vkbridge/client/emu.c @@ -0,0 +1,161 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Client side of feature emulation: the app sees a feature when the GPU has it or the server + * emulates it (vkb_server_pd_info.emu), and does not see one the GPU lacks (.missing). + */ +#define _GNU_SOURCE +#include "emu.h" +#include "gen/vkb_client_gen.h" +#include "vkb_emu_formats.h" + +#include + +#define EMU(pd, f) (((pd)->info.emu & (f)) != 0) +#define MISSING(pd, f) (((pd)->info.missing & (f)) != 0 && !EMU(pd, f)) + +const VkExtensionProperties *vkb_emu_extensions(vkb_physdev *pd, uint32_t *n) +{ + static __thread VkExtensionProperties list[8]; + uint32_t c = 0; + if (EMU(pd, VKB_EMU_MAINT5)) list[c++] = (VkExtensionProperties){"VK_KHR_maintenance5", 1}; + if (EMU(pd, VKB_EMU_DIVISOR)) { + list[c++] = (VkExtensionProperties){"VK_EXT_vertex_attribute_divisor", 3}; + list[c++] = (VkExtensionProperties){"VK_KHR_vertex_attribute_divisor", 1}; + } + if (EMU(pd, VKB_EMU_DEPTH_CLIP)) list[c++] = (VkExtensionProperties){"VK_EXT_depth_clip_enable", 1}; + if (EMU(pd, VKB_EMU_ROBUSTNESS2)) list[c++] = (VkExtensionProperties){"VK_EXT_robustness2", 1}; + *n = c; + return list; +} + +void vkb_emu_patch_limits(vkb_physdev *pd, VkPhysicalDeviceProperties *p) +{ + (void)pd; + (void)p; +} + +void vkb_emu_patch_properties_chain(vkb_physdev *pd, VkBaseOutStructure *b) +{ + if (EMU(pd, VKB_EMU_ROBUSTNESS2) && b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT) { + VkPhysicalDeviceRobustness2PropertiesEXT *r = (void *)b; + r->robustStorageBufferAccessSizeAlignment = 4; + r->robustUniformBufferAccessSizeAlignment = 256; + } + if (EMU(pd, VKB_EMU_DIVISOR)) { + if (b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT) + ((VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *)b)->maxVertexAttribDivisor = UINT32_MAX; + if (b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES) { + VkPhysicalDeviceVertexAttributeDivisorProperties *p = (void *)b; + p->maxVertexAttribDivisor = UINT32_MAX; + p->supportsNonZeroFirstInstance = VK_TRUE; + } + } +} + +static void set_feature(vkb_physdev *pd, uint32_t flag, VkBool32 *f) +{ + if (EMU(pd, flag)) *f = VK_TRUE; + else if (MISSING(pd, flag)) *f = VK_FALSE; +} + +void vkb_emu_patch_features(vkb_physdev *pd, VkPhysicalDeviceFeatures *f) +{ + set_feature(pd, VKB_EMU_BCN, &f->textureCompressionBC); + set_feature(pd, VKB_EMU_CLIP_DISTANCE, &f->shaderClipDistance); + set_feature(pd, VKB_EMU_CULL_DISTANCE, &f->shaderCullDistance); +} + +void vkb_emu_patch_features_chain(vkb_physdev *pd, VkBaseOutStructure *b) +{ + switch ((int)b->sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: + if (EMU(pd, VKB_EMU_MAINT5)) ((VkPhysicalDeviceMaintenance5Features *)b)->maintenance5 = VK_TRUE; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: { + VkPhysicalDeviceVertexAttributeDivisorFeatures *d = (void *)b; + set_feature(pd, VKB_EMU_DIVISOR, &d->vertexAttributeInstanceRateDivisor); + set_feature(pd, VKB_EMU_DIVISOR, &d->vertexAttributeInstanceRateZeroDivisor); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: + /* Emulated depth clip is pipeline state (clamp = not clip): neither may be dynamic. */ + if (MISSING(pd, VKB_EMU_DEPTH_CLIP) || EMU(pd, VKB_EMU_DEPTH_CLIP)) { + VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *d3 = (void *)b; + d3->extendedDynamicState3DepthClipEnable = VK_FALSE; + if (EMU(pd, VKB_EMU_DEPTH_CLIP)) d3->extendedDynamicState3DepthClampEnable = VK_FALSE; + } + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: + if (EMU(pd, VKB_EMU_ROBUSTNESS2)) { + VkPhysicalDeviceRobustness2FeaturesEXT *r = (void *)b; + r->robustBufferAccess2 = r->robustImageAccess2 = r->nullDescriptor = VK_TRUE; + } + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: + set_feature(pd, VKB_EMU_DEPTH_CLIP, &((VkPhysicalDeviceDepthClipEnableFeaturesEXT *)b)->depthClipEnable); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: { + VkPhysicalDeviceVulkan14Features *v = (void *)b; + v->hostImageCopy = VK_FALSE; + set_feature(pd, VKB_EMU_DIVISOR, &v->vertexAttributeInstanceRateDivisor); + set_feature(pd, VKB_EMU_DIVISOR, &v->vertexAttributeInstanceRateZeroDivisor); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: + /* Host image copy hands the driver host pointers: never offered across the bridge. */ + ((VkPhysicalDeviceHostImageCopyFeatures *)b)->hostImageCopy = VK_FALSE; + break; + default: + break; + } +} + +int vkb_emu_is_emulated_format(vkb_physdev *pd, VkFormat format) +{ + return vkb_is_bc(format) && EMU(pd, VKB_EMU_BCN); +} + +int vkb_emu_format_properties(vkb_physdev *pd, VkFormat format, VkFormatProperties *fp, VkFormatProperties2 *fp2) +{ + if (!vkb_is_bc(format) || !(pd->info.missing & VKB_EMU_BCN)) return 0; + memset(fp, 0, sizeof(*fp)); + if (EMU(pd, VKB_EMU_BCN)) { + /* What the decoded image can do, limited to what a compressed texture is used for. */ + VkFormatProperties real; + vkb_wire_vkGetPhysicalDeviceFormatProperties((VkPhysicalDevice)pd, vkb_bc_view_format(format), &real); + fp->optimalTilingFeatures = real.optimalTilingFeatures & + (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT | + VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT); + } + if (fp2) { + for (VkBaseOutStructure *b = (VkBaseOutStructure *)fp2->pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3) { + VkFormatProperties3 *p3 = (void *)b; + p3->linearTilingFeatures = 0; + p3->optimalTilingFeatures = fp->optimalTilingFeatures; + p3->bufferFeatures = 0; + } else if (b->sType == VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT) { + ((VkDrmFormatModifierPropertiesListEXT *)b)->drmFormatModifierCount = 0; + } else if (b->sType == VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT) { + ((VkDrmFormatModifierPropertiesList2EXT *)b)->drmFormatModifierCount = 0; + } + } + } + return 1; +} + +VkFormat vkb_emu_real_format(vkb_physdev *pd, VkFormat format, VkImageUsageFlags *usage, VkImageCreateFlags *flags) +{ + if (!vkb_emu_is_emulated_format(pd, format)) return format; + /* As the server creates it (server_emu_bcn.c): decoded format, mutable, extended usage. */ + *flags &= ~(VkImageCreateFlags)VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT; + *flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT; + *usage |= VK_IMAGE_USAGE_STORAGE_BIT; + return vkb_bc_view_format(format); +} + +/* Image creation is rewritten on the server (it knows the decode); nothing to do here. */ +void vkb_emu_image_create_info(vkb_device *dev, VkImageCreateInfo *ci) { (void)dev; (void)ci; } +void vkb_emu_image_created(vkb_device *dev, const VkImageCreateInfo *ci, VkImage image) { (void)dev; (void)ci; (void)image; } +void vkb_emu_image_destroyed(vkb_device *dev, VkImage image) { (void)dev; (void)image; } diff --git a/tools/vkbridge/client/emu.h b/tools/vkbridge/client/emu.h new file mode 100644 index 000000000..13b1a2ad9 --- /dev/null +++ b/tools/vkbridge/client/emu.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Client side of feature emulation: reporting what the server emulates (see server_emu.c). + */ +#ifndef VKB_CLIENT_EMU_H +#define VKB_CLIENT_EMU_H + +#include "vkb_client.h" + +const VkExtensionProperties *vkb_emu_extensions(vkb_physdev *pd, uint32_t *n); +void vkb_emu_patch_limits(vkb_physdev *pd, VkPhysicalDeviceProperties *p); +void vkb_emu_patch_properties_chain(vkb_physdev *pd, VkBaseOutStructure *b); +void vkb_emu_patch_features(vkb_physdev *pd, VkPhysicalDeviceFeatures *f); +void vkb_emu_patch_features_chain(vkb_physdev *pd, VkBaseOutStructure *b); +/* 1 = handled (format is emulated). fp2 may be NULL. */ +int vkb_emu_format_properties(vkb_physdev *pd, VkFormat format, VkFormatProperties *fp, VkFormatProperties2 *fp2); +/* The format the server really uses for an emulated one (usage/flags adjusted); else format. */ +VkFormat vkb_emu_real_format(vkb_physdev *pd, VkFormat format, VkImageUsageFlags *usage, VkImageCreateFlags *flags); +int vkb_emu_is_emulated_format(vkb_physdev *pd, VkFormat format); +void vkb_emu_image_create_info(vkb_device *dev, VkImageCreateInfo *ci); +void vkb_emu_image_created(vkb_device *dev, const VkImageCreateInfo *ci, VkImage image); +void vkb_emu_image_destroyed(vkb_device *dev, VkImage image); + +#endif diff --git a/tools/vkbridge/client/icd.c b/tools/vkbridge/client/icd.c new file mode 100644 index 000000000..5eddc9c83 --- /dev/null +++ b/tools/vkbridge/client/icd.c @@ -0,0 +1,593 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Loader interface, instances, physical devices, devices and queues. + */ +#define _GNU_SOURCE +#include "vkb_client.h" +#include "gen/vkb_client_gen.h" +#include "wsi.h" + +#include +#include + +/* ------------------------------------------------------------------ proc lookup */ + +static int proc_cmp(const void *a, const void *b) +{ + return strcmp(((const vkb_proc_desc *)a)->name, ((const vkb_proc_desc *)b)->name); +} + +static vkb_proc_desc *sorted_procs; +static pthread_once_t procs_once = PTHREAD_ONCE_INIT; + +static void procs_init(void) +{ + sorted_procs = malloc(vkb_client_proc_count * sizeof(vkb_proc_desc)); + memcpy(sorted_procs, vkb_client_procs, vkb_client_proc_count * sizeof(vkb_proc_desc)); + qsort(sorted_procs, vkb_client_proc_count, sizeof(vkb_proc_desc), proc_cmp); +} + +static const vkb_proc_desc *find_proc(const char *name) +{ + pthread_once(&procs_once, procs_init); + vkb_proc_desc key = {name, NULL, 0, NULL}; + return bsearch(&key, sorted_procs, vkb_client_proc_count, sizeof(vkb_proc_desc), proc_cmp); +} + +int vkb_device_ext_enabled(const vkb_device *d, const char *name) +{ + for (uint32_t i = 0; i < d->enabled_ext_count; i++) + if (!strcmp(d->enabled_exts[i], name)) return 1; + return 0; +} + +PFN_vkVoidFunction vkb_lookup_proc(const char *name, int level_max, vkb_device *dev, vkb_instance *inst) +{ + (void)inst; + if (!name) return NULL; + const vkb_proc_desc *p = find_proc(name); + if (!p) return NULL; + if (level_max == VKB_LEVEL_DEVICE) { + if (p->level != VKB_LEVEL_DEVICE) return NULL; + if (dev && p->ext && !vkb_device_ext_enabled(dev, p->ext)) return NULL; + /* Core commands newer than the device's Vulkan version do not exist for it. */ + if (dev && p->core && p->core > dev->api_version) return NULL; + } + return p->fn; +} + +/* ------------------------------------------------------------------ loader entry points */ + +VKB_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t *pVersion) +{ + if (*pVersion > 5) *pVersion = 5; + return VK_SUCCESS; +} + +VKB_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char *pName) +{ + if (!pName) return NULL; + if (!instance) { + const vkb_proc_desc *p = find_proc(pName); + if (!p) return NULL; + if (p->level == VKB_LEVEL_GLOBAL || !strcmp(pName, "vkGetInstanceProcAddr")) return p->fn; + return NULL; + } + return vkb_lookup_proc(pName, VKB_LEVEL_DEVICE + 1, NULL, vkb_inst(instance)); +} + +VKB_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char *pName) +{ + const vkb_proc_desc *p = find_proc(pName); + if (!p || p->level != VKB_LEVEL_PHYSDEV) return NULL; + (void)instance; + return p->fn; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkb_ep_vkGetInstanceProcAddr(VkInstance instance, const char *pName) +{ + return vk_icdGetInstanceProcAddr(instance, pName); +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkb_ep_vkGetDeviceProcAddr(VkDevice device, const char *pName) +{ + return vkb_lookup_proc(pName, VKB_LEVEL_DEVICE, vkb_dev(device), NULL); +} + +/* ------------------------------------------------------------------ wrapping server objects */ + +void *vkb_wrap(VkObjectType type, const void *parent, uint64_t remote) +{ + if (!remote) return NULL; + switch (type) { + case VK_OBJECT_TYPE_PHYSICAL_DEVICE: { + vkb_instance *inst = (vkb_instance *)parent; + pthread_mutex_lock(&inst->lock); + vkb_physdev *pd = inst->pds; + while (pd && pd->obj.remote != remote) pd = pd->list_next; + if (!pd) { + pd = calloc(1, sizeof(*pd)); + pd->obj.loader.loaderMagic = ICD_LOADER_MAGIC; + pd->obj.type = type; + pd->obj.remote = remote; + pd->obj.table = inst->obj.table; + pd->instance = inst; + pthread_mutex_init(&pd->lock, NULL); + pd->list_next = inst->pds; + inst->pds = pd; + } + pthread_mutex_unlock(&inst->lock); + return pd; + } + case VK_OBJECT_TYPE_QUEUE: { + vkb_device *dev = (vkb_device *)parent; + pthread_mutex_lock(&dev->lock); + vkb_queue *q = dev->queues; + while (q && q->obj.remote != remote) q = q->next; + if (!q) { + q = calloc(1, sizeof(*q)); + q->obj.loader.loaderMagic = ICD_LOADER_MAGIC; + q->obj.type = type; + q->obj.remote = remote; + q->obj.table = dev->obj.table; + q->device = dev; + q->next = dev->queues; + dev->queues = q; + } + pthread_mutex_unlock(&dev->lock); + return q; + } + case VK_OBJECT_TYPE_COMMAND_BUFFER: { + vkb_device *dev = (vkb_device *)parent; + vkb_cmdbuf *cb = calloc(1, sizeof(*cb)); + cb->obj.loader.loaderMagic = ICD_LOADER_MAGIC; + cb->obj.type = type; + cb->obj.remote = remote; + cb->obj.table = dev->obj.table; + cb->device = dev; + vkb_enc_init(&cb->stream); + return cb; + } + default: + VKB_ERR("internal: cannot wrap object type %d", type); + return NULL; + } +} + +/* ------------------------------------------------------------------ instance */ + +static uint32_t server_instance_version(void) +{ + static uint32_t v; + if (!v) { + uint32_t sv = VK_API_VERSION_1_0; + if (vkb_wire_vkEnumerateInstanceVersion(&sv) != VK_SUCCESS) return VK_API_VERSION_1_0; + extern uint32_t vkb_max_api(void); + v = sv < vkb_max_api() ? sv : vkb_max_api(); + } + return v; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateInstanceVersion(uint32_t *pApiVersion) +{ + if (!vkb_connected()) { + *pApiVersion = VK_API_VERSION_1_0; + return VK_SUCCESS; + } + *pApiVersion = server_instance_version(); + return VK_SUCCESS; +} + +static const char *const client_instance_exts[] = { + "VK_KHR_surface", "VK_KHR_wayland_surface", "VK_KHR_xcb_surface", "VK_KHR_xlib_surface", + "VK_EXT_headless_surface", "VK_KHR_get_surface_capabilities2", "VK_EXT_swapchain_colorspace", + "VK_EXT_debug_utils", +}; + +static int bridged_ext(const char *name, int device) +{ + for (int i = 0; i < VKB_EXT_COUNT; i++) + if (vkb_exts[i].device == device && !vkb_exts[i].client && !strcmp(vkb_exts[i].name, name)) return 1; + return 0; +} + +static VkResult fill_props(const VkExtensionProperties *list, uint32_t n, uint32_t *pCount, VkExtensionProperties *out) +{ + if (!out) { + *pCount = n; + return VK_SUCCESS; + } + uint32_t c = *pCount < n ? *pCount : n; + memcpy(out, list, c * sizeof(*out)); + *pCount = c; + return c < n ? VK_INCOMPLETE : VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) +{ + if (pLayerName) return VK_ERROR_LAYER_NOT_PRESENT; + static VkExtensionProperties *list; + static uint32_t count; + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&lock); + if (!list) { + if (!vkb_connected()) { + /* No server: offer nothing, and vkCreateInstance will say the driver is incompatible. */ + pthread_mutex_unlock(&lock); + *pPropertyCount = 0; + return VK_SUCCESS; + } + uint32_t n = 0; + vkb_wire_vkEnumerateInstanceExtensionProperties(NULL, &n, NULL); + VkExtensionProperties *srv = calloc(n + 1, sizeof(*srv)); + vkb_wire_vkEnumerateInstanceExtensionProperties(NULL, &n, srv); + size_t nc = sizeof(client_instance_exts) / sizeof(client_instance_exts[0]); + list = calloc(n + nc, sizeof(*list)); + for (uint32_t i = 0; i < n; i++) + if (bridged_ext(srv[i].extensionName, 0)) list[count++] = srv[i]; + for (size_t i = 0; i < nc; i++) { + snprintf(list[count].extensionName, sizeof(list[count].extensionName), "%s", client_instance_exts[i]); + list[count].specVersion = 1; + if (!strcmp(client_instance_exts[i], "VK_KHR_surface")) list[count].specVersion = 25; + if (!strcmp(client_instance_exts[i], "VK_KHR_wayland_surface")) list[count].specVersion = 6; + if (!strcmp(client_instance_exts[i], "VK_KHR_xcb_surface")) list[count].specVersion = 6; + if (!strcmp(client_instance_exts[i], "VK_KHR_xlib_surface")) list[count].specVersion = 6; + if (!strcmp(client_instance_exts[i], "VK_EXT_swapchain_colorspace")) list[count].specVersion = 4; + if (!strcmp(client_instance_exts[i], "VK_EXT_debug_utils")) list[count].specVersion = 2; + count++; + } + free(srv); + } + pthread_mutex_unlock(&lock); + return fill_props(list, count, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateInstanceLayerProperties(uint32_t *pPropertyCount, VkLayerProperties *pProperties) +{ + (void)pProperties; + *pPropertyCount = 0; + return VK_SUCCESS; +} + +static int is_client_instance_ext(const char *n) +{ + for (size_t i = 0; i < sizeof(client_instance_exts) / sizeof(client_instance_exts[0]); i++) + if (!strcmp(client_instance_exts[i], n)) return 1; + return 0; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, + VkInstance *pInstance) +{ + (void)pAllocator; + if (!vkb_connected()) return VK_ERROR_INCOMPATIBLE_DRIVER; + vkb_instance *inst = calloc(1, sizeof(*inst)); + if (!inst) return VK_ERROR_OUT_OF_HOST_MEMORY; + inst->obj.loader.loaderMagic = ICD_LOADER_MAGIC; + inst->obj.type = VK_OBJECT_TYPE_INSTANCE; + pthread_mutex_init(&inst->lock, NULL); + + VkInstanceCreateInfo ci = *pCreateInfo; + const char **exts = calloc(ci.enabledExtensionCount + 1, sizeof(char *)); + uint32_t n = 0; + for (uint32_t i = 0; i < ci.enabledExtensionCount; i++) { + const char *e = ci.ppEnabledExtensionNames[i]; + VKB_DBG("instance extension requested: %s", e); + if (is_client_instance_ext(e)) { + if (!strcmp(e, "VK_KHR_surface")) inst->ext_surface = 1; + else if (!strcmp(e, "VK_KHR_wayland_surface")) inst->ext_wayland = 1; + else if (!strcmp(e, "VK_KHR_xcb_surface")) inst->ext_xcb = 1; + else if (!strcmp(e, "VK_KHR_xlib_surface")) inst->ext_xlib = 1; + else if (!strcmp(e, "VK_EXT_headless_surface")) inst->ext_headless = 1; + else if (!strcmp(e, "VK_KHR_get_surface_capabilities2")) inst->ext_surface_caps2 = 1; + else if (!strcmp(e, "VK_EXT_debug_utils")) inst->ext_debug_utils = 1; + continue; + } + exts[n++] = e; + } + ci.enabledExtensionCount = n; + ci.ppEnabledExtensionNames = exts; + ci.enabledLayerCount = 0; + ci.ppEnabledLayerNames = NULL; + /* The app's version goes through as asked: the device's effective version is the lower of it + * and the GPU's, which is what a driver does (and what apps compute for themselves). */ + if (ci.pApplicationInfo) { + inst->api_version = ci.pApplicationInfo->apiVersion ? ci.pApplicationInfo->apiVersion : VK_API_VERSION_1_0; + } else { + inst->api_version = VK_API_VERSION_1_0; + } + + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkCreateInstance, 0); + vkb_enc_u8(&c.e, 1); + vkb_enc_VkInstanceCreateInfo(&c.e, &ci); + vkb_enc_u8(&c.e, 1); + free(exts); + if (!vkb_call_exec(&c)) { + free(inst); + return VK_ERROR_INITIALIZATION_FAILED; + } + VkResult r = (VkResult)vkb_dec_u32(&c.d); + inst->obj.remote = vkb_dec_u64(&c.d); + inst->obj.table = vkb_dec_u32(&c.d); + vkb_call_end(&c); + if (r != VK_SUCCESS) { + free(inst); + return r; + } + VKB_INFO("instance created (Vulkan %u.%u)", VK_API_VERSION_MAJOR(inst->api_version), VK_API_VERSION_MINOR(inst->api_version)); + *pInstance = (VkInstance)inst; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) +{ + (void)pAllocator; + if (!instance) return; + vkb_instance *inst = vkb_inst(instance); + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkDestroyInstance, inst->obj.table); + vkb_enc_u64(&c.e, inst->obj.remote); + if (vkb_call_exec(&c)) vkb_call_end(&c); + vkb_physdev *pd = inst->pds; + while (pd) { + vkb_physdev *n = pd->list_next; + free(pd->exts); + pthread_mutex_destroy(&pd->lock); + free(pd); + pd = n; + } + pthread_mutex_destroy(&inst->lock); + free(inst); +} + +/* ------------------------------------------------------------------ physical devices */ + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pCount, VkPhysicalDevice *pDevices) +{ + VkResult r = vkb_wire_vkEnumeratePhysicalDevices(instance, pCount, pDevices); + if (pDevices && (r == VK_SUCCESS || r == VK_INCOMPLETE)) { + for (uint32_t i = 0; i < *pCount; i++) vkb_physdev_ready(vkb_pd(pDevices[i])); + } + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t *pCount, + VkPhysicalDeviceGroupProperties *pGroups) +{ + /* One group per device: what a single-GPU driver reports. */ + uint32_t n = 0; + VkResult r = vkb_ep_vkEnumeratePhysicalDevices(instance, &n, NULL); + if (r != VK_SUCCESS) return r; + if (!pGroups) { + *pCount = n; + return VK_SUCCESS; + } + VkPhysicalDevice *pds = calloc(n ? n : 1, sizeof(*pds)); + r = vkb_ep_vkEnumeratePhysicalDevices(instance, &n, pds); + uint32_t c = *pCount < n ? *pCount : n; + for (uint32_t i = 0; i < c; i++) { + pGroups[i].physicalDeviceCount = 1; + memset(pGroups[i].physicalDevices, 0, sizeof(pGroups[i].physicalDevices)); + pGroups[i].physicalDevices[0] = pds[i]; + pGroups[i].subsetAllocation = VK_FALSE; + } + free(pds); + *pCount = c; + return c < n ? VK_INCOMPLETE : r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, + uint32_t *pPropertyCount, VkExtensionProperties *pProperties) +{ + if (pLayerName) return VK_ERROR_LAYER_NOT_PRESENT; + vkb_physdev *pd = vkb_pd(physicalDevice); + if (!vkb_physdev_ready(pd)) { + *pPropertyCount = 0; + return VK_SUCCESS; + } + return fill_props(pd->exts, pd->next, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, + VkLayerProperties *pProperties) +{ + (void)physicalDevice; + (void)pProperties; + *pPropertyCount = 0; + return VK_SUCCESS; +} + +/* ------------------------------------------------------------------ device */ + +static const char *const client_device_exts[] = { + "VK_KHR_swapchain", "VK_KHR_incremental_present", "VK_KHR_swapchain_mutable_format", +}; + +int vkb_is_client_device_ext(const char *n) +{ + for (size_t i = 0; i < sizeof(client_device_exts) / sizeof(client_device_exts[0]); i++) + if (!strcmp(client_device_exts[i], n)) return 1; + return 0; +} + +const char *const *vkb_client_device_exts(uint32_t *n) +{ + *n = sizeof(client_device_exts) / sizeof(client_device_exts[0]); + return client_device_exts; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) +{ + (void)pAllocator; + vkb_physdev *pd = vkb_pd(physicalDevice); + if (!vkb_physdev_ready(pd)) return VK_ERROR_INITIALIZATION_FAILED; + vkb_device *dev = calloc(1, sizeof(*dev)); + if (!dev) return VK_ERROR_OUT_OF_HOST_MEMORY; + dev->obj.loader.loaderMagic = ICD_LOADER_MAGIC; + dev->obj.type = VK_OBJECT_TYPE_DEVICE; + dev->pd = pd; + dev->instance = pd->instance; + pthread_mutex_init(&dev->lock, NULL); + + VkDeviceCreateInfo ci = *pCreateInfo; + const char **server_exts = calloc(ci.enabledExtensionCount + 1, sizeof(char *)); + dev->enabled_exts = calloc(ci.enabledExtensionCount + 1, sizeof(char *)); + uint32_t n = 0; + for (uint32_t i = 0; i < ci.enabledExtensionCount; i++) { + const char *e = ci.ppEnabledExtensionNames[i]; + VKB_DBG("device extension requested: %s", e); + dev->enabled_exts[dev->enabled_ext_count++] = strdup(e); + if (!strcmp(e, "VK_KHR_swapchain")) dev->ext_swapchain = 1; + if (vkb_is_client_device_ext(e)) continue; + server_exts[n++] = e; + } + ci.enabledExtensionCount = n; + ci.ppEnabledExtensionNames = server_exts; + ci.enabledLayerCount = 0; + ci.ppEnabledLayerNames = NULL; + + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkCreateDevice, pd->obj.table); + vkb_enc_u64(&c.e, pd->obj.remote); + vkb_enc_u8(&c.e, 1); + vkb_enc_VkDeviceCreateInfo(&c.e, &ci); + vkb_enc_u8(&c.e, 1); + free(server_exts); + VkResult r; + if (!vkb_call_exec(&c)) { + r = VK_ERROR_INITIALIZATION_FAILED; + } else { + r = (VkResult)vkb_dec_u32(&c.d); + dev->obj.remote = vkb_dec_u64(&c.d); + dev->obj.table = vkb_dec_u32(&c.d); + vkb_call_end(&c); + } + if (r != VK_SUCCESS) { + for (uint32_t i = 0; i < dev->enabled_ext_count; i++) free((void *)dev->enabled_exts[i]); + free(dev->enabled_exts); + free(dev); + return r; + } + { + extern uint32_t vkb_max_api(void); + uint32_t v = pd->props.apiVersion < vkb_max_api() ? pd->props.apiVersion : vkb_max_api(); + dev->api_version = v < pd->instance->api_version ? v : pd->instance->api_version; + } + vkb_map_init(&dev->memories); + vkb_map_init(&dev->templates); + vkb_map_init(&dev->pools); + vkb_map_init(&dev->unshared); + vkb_map_init(&dev->shared_images); + vkb_memory_init_device(dev); + VKB_INFO("device created on %s", pd->props.deviceName); + *pDevice = (VkDevice)dev; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) +{ + (void)pAllocator; + if (!device) return; + vkb_device *dev = vkb_dev(device); + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkDestroyDevice, dev->obj.table); + vkb_enc_u64(&c.e, dev->obj.remote); + if (vkb_call_exec(&c)) vkb_call_end(&c); + vkb_queue *q = dev->queues; + while (q) { + vkb_queue *n = q->next; + free(q); + q = n; + } + /* Mapped memory the app never freed. */ + for (uint32_t i = 0; i < dev->memories.cap; i++) { + if (dev->memories.keys[i] && dev->memories.keys[i] != ~(uint64_t)0) { + vkb_memory *m = dev->memories.vals[i]; + extern void vkb_memory_unmap_free(vkb_memory * m); + vkb_memory_unmap_free(m); + } + } + for (uint32_t i = 0; i < dev->pools.cap; i++) { + if (dev->pools.keys[i] && dev->pools.keys[i] != ~(uint64_t)0) { + extern void vkb_cmdpool_free(vkb_cmdpool * p); + vkb_cmdpool_free(dev->pools.vals[i]); + } + } + for (uint32_t i = 0; i < dev->templates.cap; i++) + if (dev->templates.keys[i] && dev->templates.keys[i] != ~(uint64_t)0) free(dev->templates.vals[i]); + vkb_map_destroy(&dev->memories); + vkb_map_destroy(&dev->templates); + vkb_map_destroy(&dev->pools); + vkb_map_destroy(&dev->unshared); + vkb_map_destroy(&dev->shared_images); + for (uint32_t i = 0; i < dev->enabled_ext_count; i++) free((void *)dev->enabled_exts[i]); + free(dev->enabled_exts); + pthread_mutex_destroy(&dev->lock); + free(dev); +} + +static void queue_set_info(VkQueue q, uint32_t family, uint32_t index) +{ + if (!q) return; + vkb_queue *vq = (vkb_queue *)q; + vq->family = family; + vq->index = index; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) +{ + vkb_wire_vkGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue); + queue_set_info(*pQueue, queueFamilyIndex, queueIndex); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue) +{ + vkb_wire_vkGetDeviceQueue2(device, pQueueInfo, pQueue); + queue_set_info(*pQueue, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex); +} + +/* ------------------------------------------------------------------ queues and sync */ + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) +{ + return vkb_wire_vkQueueSubmit(queue, submitCount, pSubmits, fence); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 *pSubmits, VkFence fence) +{ + return vkb_wire_vkQueueSubmit2(queue, submitCount, pSubmits, fence); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueWaitIdle(VkQueue queue) +{ + return vkb_wire_vkQueueWaitIdle(queue); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkDeviceWaitIdle(VkDevice device) +{ + return vkb_wire_vkDeviceWaitIdle(device); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences, VkBool32 waitAll, + uint64_t timeout) +{ + return vkb_wire_vkWaitForFences(device, fenceCount, pFences, waitAll, timeout); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetFenceStatus(VkDevice device, VkFence fence) +{ + return vkb_wire_vkGetFenceStatus(device, fence); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo *pWaitInfo, uint64_t timeout) +{ + return vkb_wire_vkWaitSemaphores(device, pWaitInfo, timeout); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t *pValue) +{ + return vkb_wire_vkGetSemaphoreCounterValue(device, semaphore, pValue); +} diff --git a/tools/vkbridge/client/memory.c b/tools/vkbridge/client/memory.c new file mode 100644 index 000000000..903c8bc32 --- /dev/null +++ b/tools/vkbridge/client/memory.c @@ -0,0 +1,433 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Device memory on the client side: the memory-type translation of physdev.c applied to every + * allocation and requirement, and mapping of shared allocations (server_memory.c explains how + * they are shared). + */ +#define _GNU_SOURCE +#include "vkb_client.h" +#include "gen/vkb_client_gen.h" +#include "emu.h" + +#include +#include +#include +#include + +void vkb_memory_init_device(vkb_device *d) +{ + (void)d; +} + +void vkb_memory_unmap_free(vkb_memory *m) +{ + if (m->ptr) munmap(m->ptr, (size_t)m->size); + free(m); +} + +/* ------------------------------------------------------------------ resources */ + +/* Shallow copy of a pNext chain (known structures only), in one malloc'd block (*mem). */ +void *vkb_chain_clone(const void *pNext, void **mem) +{ + size_t total = 0; + for (const VkBaseInStructure *b = pNext; b; b = b->pNext) total += (vkb_struct_size(b->sType) + 15) & ~(size_t)15; + uint8_t *block = calloc(1, total ? total : 16); + *mem = block; + VkBaseOutStructure *head = NULL, *prev = NULL; + size_t off = 0; + for (const VkBaseInStructure *b = pNext; b; b = b->pNext) { + size_t sz = vkb_struct_size(b->sType); + if (!sz) continue; + VkBaseOutStructure *n = (VkBaseOutStructure *)(block + off); + memcpy(n, b, sz); + n->pNext = NULL; + off += (sz + 15) & ~(size_t)15; + if (prev) prev->pNext = n; + else head = n; + prev = n; + } + return head; +} + +static int can_share(vkb_device *dev) +{ + return dev->pd->info.strategy != VKB_MEM_NONE && dev->pd->info.buffer_handle_types; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) +{ + vkb_device *dev = vkb_dev(device); + if (!can_share(dev) || (pCreateInfo->flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)) { + VkResult r = vkb_wire_vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer); + if (r == VK_SUCCESS) vkb_map_put(&dev->unshared, (uint64_t)*pBuffer, (void *)1); + return r; + } + /* Every buffer may be bound to shared memory: say so at creation, as the spec requires. */ + VkBufferCreateInfo ci = *pCreateInfo; + VkExternalMemoryBufferCreateInfo ext = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, ci.pNext, + dev->pd->info.buffer_handle_types}; + int had = 0; + for (VkBaseOutStructure *b = (VkBaseOutStructure *)ci.pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO) had = 1; + } + VkResult r; + if (had) { + /* The app has its own external handle types: ours are added to a copy of its chain. */ + void *mem = NULL; + ci.pNext = vkb_chain_clone(ci.pNext, &mem); + for (VkBaseOutStructure *b = (VkBaseOutStructure *)ci.pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO) + ((VkExternalMemoryBufferCreateInfo *)b)->handleTypes |= dev->pd->info.buffer_handle_types; + r = vkb_wire_vkCreateBuffer(device, &ci, pAllocator, pBuffer); + free(mem); + if (r != VK_SUCCESS && r != VK_ERROR_OUT_OF_HOST_MEMORY && r != VK_ERROR_OUT_OF_DEVICE_MEMORY) { + r = vkb_wire_vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer); + if (r == VK_SUCCESS) vkb_map_put(&dev->unshared, (uint64_t)*pBuffer, (void *)1); + } + return r; + } + ci.pNext = &ext; + r = vkb_wire_vkCreateBuffer(device, &ci, pAllocator, pBuffer); + if (r != VK_SUCCESS && r != VK_ERROR_OUT_OF_HOST_MEMORY && r != VK_ERROR_OUT_OF_DEVICE_MEMORY) { + VKB_ONCE(VKB_LOG_WARN, "a buffer cannot be created shareable (%d); it gets device-only memory (logged once)", r); + r = vkb_wire_vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer); + if (r == VK_SUCCESS) vkb_map_put(&dev->unshared, (uint64_t)*pBuffer, (void *)1); + } + return r; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator) +{ + if (!buffer) return; + vkb_map_remove(&vkb_dev(device)->unshared, (uint64_t)buffer); + vkb_wire_vkDestroyBuffer(device, buffer, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkImage *pImage) +{ + vkb_device *dev = vkb_dev(device); + VkImageCreateInfo ci = *pCreateInfo; + vkb_emu_image_create_info(dev, &ci); + /* Linear images may be mapped by the app: those get the shared handle type when allowed. */ + if (can_share(dev) && ci.tiling == VK_IMAGE_TILING_LINEAR && !(ci.flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)) { + int had = 0; + for (VkBaseOutStructure *b = (VkBaseOutStructure *)ci.pNext; b; b = b->pNext) + had |= b->sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO; + if (!had) { + VkExternalMemoryImageCreateInfo ext = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, ci.pNext, + dev->pd->info.buffer_handle_types}; + VkImageCreateInfo c2 = ci; + c2.pNext = &ext; + VkResult r = vkb_wire_vkCreateImage(device, &c2, pAllocator, pImage); + if (r == VK_SUCCESS) { + vkb_map_put(&dev->shared_images, (uint64_t)*pImage, (void *)1); + vkb_emu_image_created(dev, pCreateInfo, *pImage); + return r; + } + } + } + VkResult r = vkb_wire_vkCreateImage(device, &ci, pAllocator, pImage); + if (r == VK_SUCCESS) vkb_emu_image_created(dev, pCreateInfo, *pImage); + return r; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) +{ + if (!image) return; + vkb_device *dev = vkb_dev(device); + vkb_map_remove(&dev->shared_images, (uint64_t)image); + vkb_emu_image_destroyed(dev, image); + vkb_wire_vkDestroyImage(device, image, pAllocator); +} + +/* ------------------------------------------------------------------ requirements */ + +static void fix_reqs(vkb_device *dev, VkMemoryRequirements *r, int allow_shared) +{ + r->memoryTypeBits = vkb_mem_bits_to_client(dev->pd, r->memoryTypeBits, allow_shared); +} + +static int buffer_shareable(vkb_device *dev, VkBuffer b) +{ + return can_share(dev) && !vkb_map_get(&dev->unshared, (uint64_t)b); +} + +static int image_shareable(vkb_device *dev, VkImage i) +{ + return vkb_map_get(&dev->shared_images, (uint64_t)i) != NULL; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements *pReq) +{ + vkb_wire_vkGetBufferMemoryRequirements(device, buffer, pReq); + fix_reqs(vkb_dev(device), pReq, buffer_shareable(vkb_dev(device), buffer)); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMemoryRequirementsInfo2 *pInfo, + VkMemoryRequirements2 *pReq) +{ + vkb_wire_vkGetBufferMemoryRequirements2(device, pInfo, pReq); + fix_reqs(vkb_dev(device), &pReq->memoryRequirements, buffer_shareable(vkb_dev(device), pInfo->buffer)); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements *pReq) +{ + vkb_wire_vkGetImageMemoryRequirements(device, image, pReq); + fix_reqs(vkb_dev(device), pReq, image_shareable(vkb_dev(device), image)); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo, + VkMemoryRequirements2 *pReq) +{ + vkb_wire_vkGetImageMemoryRequirements2(device, pInfo, pReq); + fix_reqs(vkb_dev(device), &pReq->memoryRequirements, image_shareable(vkb_dev(device), pInfo->image)); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceBufferMemoryRequirements(VkDevice device, const VkDeviceBufferMemoryRequirements *pInfo, + VkMemoryRequirements2 *pReq) +{ + vkb_device *dev = vkb_dev(device); + if (!can_share(dev)) { + vkb_wire_vkGetDeviceBufferMemoryRequirements(device, pInfo, pReq); + fix_reqs(dev, &pReq->memoryRequirements, 0); + return; + } + VkBufferCreateInfo ci = *pInfo->pCreateInfo; + VkExternalMemoryBufferCreateInfo ext = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, ci.pNext, + dev->pd->info.buffer_handle_types}; + int had = 0; + for (VkBaseOutStructure *b = (VkBaseOutStructure *)ci.pNext; b; b = b->pNext) + had |= b->sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO; + if (!had) ci.pNext = &ext; + VkDeviceBufferMemoryRequirements info = *pInfo; + info.pCreateInfo = &ci; + vkb_wire_vkGetDeviceBufferMemoryRequirements(device, &info, pReq); + fix_reqs(dev, &pReq->memoryRequirements, 1); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceImageMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements *pInfo, + VkMemoryRequirements2 *pReq) +{ + vkb_device *dev = vkb_dev(device); + VkImageCreateInfo ci = *pInfo->pCreateInfo; + vkb_emu_image_create_info(dev, &ci); + VkDeviceImageMemoryRequirements info = *pInfo; + info.pCreateInfo = &ci; + vkb_wire_vkGetDeviceImageMemoryRequirements(device, &info, pReq); + fix_reqs(dev, &pReq->memoryRequirements, 0); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pCount, + VkSparseImageMemoryRequirements *pReq) +{ + vkb_wire_vkGetImageSparseMemoryRequirements(device, image, pCount, pReq); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSparseMemoryRequirements2(VkDevice device, const VkImageSparseMemoryRequirementsInfo2 *pInfo, + uint32_t *pCount, VkSparseImageMemoryRequirements2 *pReq) +{ + vkb_wire_vkGetImageSparseMemoryRequirements2(device, pInfo, pCount, pReq); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceImageSparseMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements *pInfo, + uint32_t *pCount, VkSparseImageMemoryRequirements2 *pReq) +{ + vkb_wire_vkGetDeviceImageSparseMemoryRequirements(device, pInfo, pCount, pReq); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, + VkMemoryFdPropertiesKHR *pProps) +{ + VkResult r = vkb_wire_vkGetMemoryFdPropertiesKHR(device, handleType, fd, pProps); + if (r == VK_SUCCESS) pProps->memoryTypeBits = vkb_mem_bits_to_client(vkb_dev(device)->pd, pProps->memoryTypeBits, 0); + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize offset) +{ + return vkb_wire_vkBindBufferMemory(device, buffer, memory, offset); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindBufferMemory2(VkDevice device, uint32_t n, const VkBindBufferMemoryInfo *p) +{ + return vkb_wire_vkBindBufferMemory2(device, n, p); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize offset) +{ + return vkb_wire_vkBindImageMemory(device, image, memory, offset); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindImageMemory2(VkDevice device, uint32_t n, const VkBindImageMemoryInfo *p) +{ + return vkb_wire_vkBindImageMemory2(device, n, p); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, + VkSubresourceLayout *pLayout) +{ + vkb_wire_vkGetImageSubresourceLayout(device, image, pSubresource, pLayout); +} + +/* ------------------------------------------------------------------ allocation and mapping */ + +static void close_import_fds(const void *pNext) +{ + for (const VkBaseInStructure *b = pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR) { + int fd = ((const VkImportMemoryFdInfoKHR *)b)->fd; + if (fd >= 0) close(fd); + } + } +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, + const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) +{ + (void)pAllocator; + vkb_device *dev = vkb_dev(device); + vkb_physdev *pd = dev->pd; + uint32_t ct = pAllocateInfo->memoryTypeIndex; + if (ct >= pd->client_mem.memoryTypeCount) return VK_ERROR_OUT_OF_DEVICE_MEMORY; + VkMemoryAllocateInfo ai = *pAllocateInfo; + ai.memoryTypeIndex = pd->type_map[ct].server_type; + int shared = pd->type_map[ct].shared; + /* An app-imported dma-buf/opaque fd keeps its own memory; it is not one of our shared pages. */ + for (const VkBaseInStructure *b = ai.pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR) shared = 0; + uint32_t strategy = pd->info.strategy; + int memfd = -1; + void *ptr = NULL; + if (shared && strategy == VKB_MEM_HOSTPTR) { + VkDeviceSize a = pd->info.import_alignment ? pd->info.import_alignment : 4096; + ai.allocationSize = (ai.allocationSize + a - 1) & ~(a - 1); + memfd = vkb_memfd("vkbridge-memory", (size_t)ai.allocationSize); + if (memfd < 0) return VK_ERROR_OUT_OF_HOST_MEMORY; + ptr = mmap(NULL, (size_t)ai.allocationSize, PROT_READ | PROT_WRITE, MAP_SHARED, memfd, 0); + if (ptr == MAP_FAILED) { + close(memfd); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + } + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkAllocateMemory, dev->obj.table); + vkb_enc_u64(&c.e, dev->obj.remote); + vkb_enc_u8(&c.e, 1); + vkb_enc_VkMemoryAllocateInfo(&c.e, &ai); + vkb_enc_u32(&c.e, shared ? VKB_ALLOC_SHARED : VKB_ALLOC_PLAIN); + vkb_enc_fd(&c.e, memfd); + int ok = vkb_call_exec(&c); + if (memfd >= 0) close(memfd); + if (!ok) { + if (ptr) munmap(ptr, (size_t)ai.allocationSize); + return VK_ERROR_DEVICE_LOST; + } + VkResult r = (VkResult)vkb_dec_u32(&c.d); + VkDeviceMemory mem = (VkDeviceMemory)vkb_dec_u64(&c.d); + int fd = vkb_dec_fd(&c.d); + uint64_t size = vkb_dec_u64(&c.d); + vkb_call_end(&c); + if (r != VK_SUCCESS) { + if (ptr) munmap(ptr, (size_t)ai.allocationSize); + if (fd >= 0) close(fd); + return r; + } + /* The import succeeded: the fd the app handed over now belongs to the implementation, and the + * server holds its own copy. */ + close_import_fds(pAllocateInfo->pNext); + vkb_memory *m = calloc(1, sizeof(*m)); + m->client_type = ct; + m->shared = shared; + m->size = shared && strategy == VKB_MEM_HOSTPTR ? ai.allocationSize : size; + if (shared && strategy != VKB_MEM_HOSTPTR) { + if (fd < 0) { + VKB_ERR("shared allocation came back without its dma-buf"); + } else { + ptr = mmap(NULL, (size_t)m->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (ptr == MAP_FAILED) { + VKB_ERR("cannot map shared memory (%llu bytes): %s", (unsigned long long)m->size, strerror(errno)); + ptr = NULL; + } + } + } + if (fd >= 0) close(fd); + m->ptr = ptr; + vkb_map_put(&dev->memories, (uint64_t)mem, m); + *pMemory = mem; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks *pAllocator) +{ + (void)pAllocator; + if (!memory) return; + vkb_device *dev = vkb_dev(device); + vkb_memory *m = vkb_map_remove(&dev->memories, (uint64_t)memory); + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkFreeMemory, dev->obj.table); + vkb_enc_u64(&c.e, dev->obj.remote); + vkb_enc_u64(&c.e, (uint64_t)memory); + vkb_call_exec_async(&c); + if (m) vkb_memory_unmap_free(m); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, + VkMemoryMapFlags flags, void **ppData) +{ + (void)size; + (void)flags; + vkb_memory *m = vkb_map_get(&vkb_dev(device)->memories, (uint64_t)memory); + if (!m || !m->ptr) { + VKB_ONCE(VKB_LOG_WARN, "vkMapMemory on memory that is not host-visible through the bridge (logged once)"); + *ppData = NULL; + return VK_ERROR_MEMORY_MAP_FAILED; + } + *ppData = (uint8_t *)m->ptr + offset; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkUnmapMemory(VkDevice device, VkDeviceMemory memory) +{ + /* The mapping stays until vkFreeMemory: mapping again is free, and nothing else reuses it. */ + (void)device; + (void)memory; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkMapMemory2(VkDevice device, const VkMemoryMapInfo *pInfo, void **ppData) +{ + return vkb_ep_vkMapMemory(device, pInfo->memory, pInfo->offset, pInfo->size, pInfo->flags, ppData); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkUnmapMemory2(VkDevice device, const VkMemoryUnmapInfo *pInfo) +{ + (void)device; + (void)pInfo; + return VK_SUCCESS; +} + +static VkResult ranges_call(VkDevice device, uint32_t cmd, uint32_t n, const VkMappedMemoryRange *r) +{ + vkb_device *dev = vkb_dev(device); + vkb_call c; + vkb_call_begin(&c, cmd, dev->obj.table); + vkb_enc_u64(&c.e, dev->obj.remote); + vkb_enc_u32(&c.e, n); + for (uint32_t i = 0; i < n; i++) vkb_enc_VkMappedMemoryRange(&c.e, &r[i]); + if (!vkb_call_exec(&c)) return VK_ERROR_DEVICE_LOST; + VkResult res = (VkResult)vkb_dec_u32(&c.d); + vkb_call_end(&c); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkFlushMappedMemoryRanges(VkDevice device, uint32_t n, const VkMappedMemoryRange *r) +{ + return ranges_call(device, VKB_CMD_vkFlushMappedMemoryRanges, n, r); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t n, const VkMappedMemoryRange *r) +{ + return ranges_call(device, VKB_CMD_vkInvalidateMappedMemoryRanges, n, r); +} diff --git a/tools/vkbridge/client/physdev.c b/tools/vkbridge/client/physdev.c new file mode 100644 index 000000000..2f655f9b6 --- /dev/null +++ b/tools/vkbridge/client/physdev.c @@ -0,0 +1,435 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Physical device queries: what the app sees is the server's GPU, with the bridge's memory + * model, its extension list and the features the server emulates. + */ +#define _GNU_SOURCE +#include "vkb_client.h" +#include "gen/vkb_client_gen.h" +#include "emu.h" + +#include +#include + +const char *const *vkb_client_device_exts(uint32_t *n); + +/* ------------------------------------------------------------------ memory model */ + +/* + * Images and GPU-only buffers live in memory the client never maps; host-visible memory must be + * shared pages (server_memory.c), which only buffers (and the rare linear image) can use. So the + * app gets a discrete-GPU-like view: device-local types without host access, and host-visible + * types (shared) that only resources able to use them list in their memoryTypeBits. + */ +static void build_memory_model(vkb_physdev *pd) +{ + const VkPhysicalDeviceMemoryProperties *s = &pd->server_mem; + VkPhysicalDeviceMemoryProperties *c = &pd->client_mem; + memset(c, 0, sizeof(*c)); + uint32_t share = pd->info.strategy != VKB_MEM_NONE ? pd->info.shareable_types : 0; + int pure_dl = -1; + for (uint32_t t = 0; t < s->memoryTypeCount; t++) { + VkMemoryPropertyFlags f = s->memoryTypes[t].propertyFlags; + if ((f & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) && !(f & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) && + !(f & VK_MEMORY_PROPERTY_PROTECTED_BIT)) { + pure_dl = (int)t; + break; + } + } + int uma = pure_dl < 0; + /* Heaps: the server's, plus (UMA) a host heap for shared types so they are not "device local". */ + for (uint32_t h = 0; h < s->memoryHeapCount; h++) { + c->memoryHeaps[h] = s->memoryHeaps[h]; + pd->heap_map[h] = h; + } + c->memoryHeapCount = s->memoryHeapCount; + uint32_t host_heap = UINT32_MAX; + + struct cand { + VkMemoryPropertyFlags flags; + uint32_t heap, server; + uint8_t shared; + } cands[VK_MAX_MEMORY_TYPES * 2]; + uint32_t nc = 0; + if (uma) { + /* A device-local type with no host access, backed by the first device-local type. */ + for (uint32_t t = 0; t < s->memoryTypeCount; t++) { + VkMemoryPropertyFlags f = s->memoryTypes[t].propertyFlags; + if ((f & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) && !(f & VK_MEMORY_PROPERTY_PROTECTED_BIT)) { + cands[nc++] = (struct cand){VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, s->memoryTypes[t].heapIndex, t, 0}; + break; + } + } + } + for (uint32_t t = 0; t < s->memoryTypeCount && nc < VK_MAX_MEMORY_TYPES; t++) { + VkMemoryPropertyFlags f = s->memoryTypes[t].propertyFlags; + uint32_t heap = s->memoryTypes[t].heapIndex; + if (!(f & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) { + cands[nc++] = (struct cand){f, heap, t, 0}; + continue; + } + if (!(share & (1u << t))) continue; /* host-visible but not shareable: not offered */ + VkMemoryPropertyFlags cf = f; + if (!(pd->info.coherent_types & (1u << t))) cf &= ~VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; + else cf |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; /* coherent in practice (the self-test says so) */ + /* dma-heap pages come from the uncached heap: not what an app asking for cached reads wants. */ + if (pd->info.strategy == VKB_MEM_DMAHEAP) cf &= ~VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + if (uma) { + cf &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + if (host_heap == UINT32_MAX && c->memoryHeapCount < VK_MAX_MEMORY_HEAPS) { + host_heap = c->memoryHeapCount++; + c->memoryHeaps[host_heap] = s->memoryHeaps[heap]; + c->memoryHeaps[host_heap].flags &= ~VK_MEMORY_HEAP_DEVICE_LOCAL_BIT; + pd->heap_map[host_heap] = heap; + } + if (host_heap != UINT32_MAX) heap = host_heap; + } + /* Two client types with identical flags on one heap are pointless: keep the first. */ + int dup = 0; + for (uint32_t i = 0; i < nc; i++) dup |= cands[i].flags == cf && cands[i].heap == heap; + if (!dup) cands[nc++] = (struct cand){cf, heap, t, 1}; + } + /* Order: fewer property bits first, which satisfies the spec's subset ordering. */ + for (uint32_t i = 1; i < nc; i++) { + struct cand x = cands[i]; + uint32_t j = i; + while (j > 0 && __builtin_popcount(cands[j - 1].flags) > __builtin_popcount(x.flags)) { + cands[j] = cands[j - 1]; + j--; + } + cands[j] = x; + } + if (nc > VK_MAX_MEMORY_TYPES) nc = VK_MAX_MEMORY_TYPES; + c->memoryTypeCount = nc; + for (uint32_t i = 0; i < nc; i++) { + c->memoryTypes[i].propertyFlags = cands[i].flags; + c->memoryTypes[i].heapIndex = cands[i].heap; + pd->type_map[i].server_type = cands[i].server; + pd->type_map[i].shared = cands[i].shared; + } + for (uint32_t i = 0; i < nc; i++) + VKB_DBG("memory type %u: flags 0x%x heap %u -> server type %u%s", i, c->memoryTypes[i].propertyFlags, + c->memoryTypes[i].heapIndex, pd->type_map[i].server_type, pd->type_map[i].shared ? " (shared)" : ""); +} + +uint32_t vkb_mem_bits_to_client(vkb_physdev *pd, uint32_t server_bits, int allow_shared) +{ + uint32_t bits = 0; + for (uint32_t i = 0; i < pd->client_mem.memoryTypeCount; i++) { + if (!(server_bits & (1u << pd->type_map[i].server_type))) continue; + if (pd->type_map[i].shared && !allow_shared) continue; + bits |= 1u << i; + } + return bits; +} + +/* ------------------------------------------------------------------ setup */ + +/* The render node the session presents for this GPU (VKBRIDGE_DRM_RENDER="major:minor"). */ +static int drm_node(int64_t *major, int64_t *minor) +{ + const char *v = getenv("VKBRIDGE_DRM_RENDER"); + long long a, b; + if (!v || sscanf(v, "%lld:%lld", &a, &b) != 2) return 0; + if (major) *major = a; + if (minor) *minor = b; + return 1; +} + +/* VKBRIDGE_HIDE_EXTS=a,b,c: pretend the GPU lacks these (testing; imitating another driver). */ +static int hidden_ext(const char *name) +{ + const char *h = getenv("VKBRIDGE_HIDE_EXTS"); + if (!h) return 0; + size_t n = strlen(name); + for (const char *p = h; (p = strstr(p, name)); p += n) + if ((p == h || p[-1] == ',') && (p[n] == ',' || p[n] == 0)) return 1; + return 0; +} + +static int bridged_device_ext_for(vkb_physdev *pd, const char *name) +{ + /* Clip distance emulation rewrites the vertex and fragment shaders together, at pipeline + * creation: pipeline libraries and shader identifiers would split them. */ + if ((pd->info.emu & VKB_EMU_CLIP_DISTANCE) && + (!strcmp(name, "VK_EXT_graphics_pipeline_library") || !strcmp(name, "VK_EXT_shader_module_identifier"))) + return 0; + return 1; +} + +static int bridged_device_ext(const char *name) +{ + if (hidden_ext(name)) return 0; + /* The server GPU's DRM node means nothing on this side: the session's stand-in node is + * reported instead (drm_node), or the extension is hidden. VKBRIDGE_PASS_DRM=1 passes the + * server's through (host tests, where both sides share one machine). */ + if (!strcmp(name, "VK_EXT_physical_device_drm")) return getenv("VKBRIDGE_PASS_DRM") && !getenv("VKBRIDGE_DRM_RENDER"); + for (int i = 0; i < VKB_EXT_COUNT; i++) + if (vkb_exts[i].device && !vkb_exts[i].client && !strcmp(vkb_exts[i].name, name)) return 1; + return 0; +} + +int vkb_physdev_ready(vkb_physdev *pd) +{ + if (pd->ready) return pd->ready > 0; + pthread_mutex_lock(&pd->lock); + if (pd->ready) { + pthread_mutex_unlock(&pd->lock); + return pd->ready > 0; + } + vkb_call c; + vkb_call_begin(&c, VKB_CMD_vkbQueryServer, pd->obj.table); + vkb_enc_u64(&c.e, pd->obj.remote); + if (!vkb_call_exec(&c)) { + pd->ready = -1; + pthread_mutex_unlock(&pd->lock); + return 0; + } + vkb_dec_raw_into(&c.d, &pd->info, sizeof(pd->info)); + vkb_call_end(&c); + vkb_wire_vkGetPhysicalDeviceProperties((VkPhysicalDevice)pd, &pd->props); + vkb_wire_vkGetPhysicalDeviceMemoryProperties((VkPhysicalDevice)pd, &pd->server_mem); + build_memory_model(pd); + + uint32_t n = 0; + vkb_wire_vkEnumerateDeviceExtensionProperties((VkPhysicalDevice)pd, NULL, &n, NULL); + VkExtensionProperties *srv = calloc(n + 1, sizeof(*srv)); + vkb_wire_vkEnumerateDeviceExtensionProperties((VkPhysicalDevice)pd, NULL, &n, srv); + uint32_t ncl = 0; + const char *const *cl = vkb_client_device_exts(&ncl); + uint32_t nemu = 0; + const VkExtensionProperties *emu = vkb_emu_extensions(pd, &nemu); + pd->exts = calloc(n + ncl + nemu + 2, sizeof(VkExtensionProperties)); + pd->next = 0; + for (uint32_t i = 0; i < n; i++) + if (bridged_device_ext(srv[i].extensionName) && bridged_device_ext_for(pd, srv[i].extensionName)) pd->exts[pd->next++] = srv[i]; + for (uint32_t i = 0; i < nemu; i++) { + int dup = 0; + for (uint32_t j = 0; j < pd->next; j++) dup |= !strcmp(pd->exts[j].extensionName, emu[i].extensionName); + if (!dup) pd->exts[pd->next++] = emu[i]; + } + if (drm_node(NULL, NULL)) { + VkExtensionProperties *e = &pd->exts[pd->next++]; + snprintf(e->extensionName, sizeof(e->extensionName), "VK_EXT_physical_device_drm"); + e->specVersion = 1; + } + for (uint32_t i = 0; i < ncl; i++) { + VkExtensionProperties *e = &pd->exts[pd->next++]; + snprintf(e->extensionName, sizeof(e->extensionName), "%s", cl[i]); + e->specVersion = !strcmp(cl[i], "VK_KHR_swapchain") ? 70 : !strcmp(cl[i], "VK_KHR_incremental_present") ? 2 : 1; + } + free(srv); + VKB_INFO("%s: %u extensions offered, memory sharing %s, emulation 0x%x", pd->props.deviceName, pd->next, + vkb_mem_strategy_name(pd->info.strategy), pd->info.emu); + pd->ready = 1; + pthread_mutex_unlock(&pd->lock); + return 1; +} + +/* ------------------------------------------------------------------ properties */ + +uint32_t vkb_max_api(void) +{ + /* VKBRIDGE_MAX_API=1.3 imitates an older driver (testing). */ + const char *v = getenv("VKBRIDGE_MAX_API"); + unsigned ma, mi; + if (v && sscanf(v, "%u.%u", &ma, &mi) == 2) return VK_MAKE_API_VERSION(0, ma, mi, 0xfff); + return VKB_API_VERSION; +} + +static void patch_props(vkb_physdev *pd, VkPhysicalDeviceProperties *p) +{ + if (p->apiVersion > vkb_max_api()) p->apiVersion = vkb_max_api(); + (void)pd; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties *pProperties) +{ + vkb_physdev *pd = vkb_pd(physicalDevice); + if (vkb_physdev_ready(pd)) *pProperties = pd->props; + else vkb_wire_vkGetPhysicalDeviceProperties(physicalDevice, pProperties); + patch_props(pd, pProperties); + vkb_emu_patch_limits(pd, pProperties); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 *pProperties) +{ + vkb_physdev *pd = vkb_pd(physicalDevice); + vkb_wire_vkGetPhysicalDeviceProperties2(physicalDevice, pProperties); + patch_props(pd, &pProperties->properties); + vkb_emu_patch_limits(pd, &pProperties->properties); + for (VkBaseOutStructure *b = (VkBaseOutStructure *)pProperties->pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES) { + VkPhysicalDeviceDriverProperties *d = (VkPhysicalDeviceDriverProperties *)b; + size_t l = strlen(d->driverInfo); + if (l + 12 < sizeof(d->driverInfo)) strcat(d->driverInfo, " (vkbridge)"); + } + if (b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT) { + VkPhysicalDeviceDrmPropertiesEXT *d = (VkPhysicalDeviceDrmPropertiesEXT *)b; + int64_t ma, mi; + if (drm_node(&ma, &mi)) { + /* gamescope insists on a primary node; the stand-in serves as both, as with + * KGSL on an Adreno. */ + d->hasPrimary = VK_TRUE; + d->primaryMajor = ma; + d->primaryMinor = mi; + d->hasRender = VK_TRUE; + d->renderMajor = ma; + d->renderMinor = mi; + } + } + vkb_emu_patch_properties_chain(pd, b); + } +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures *pFeatures) +{ + vkb_wire_vkGetPhysicalDeviceFeatures(physicalDevice, pFeatures); + vkb_emu_patch_features(vkb_pd(physicalDevice), pFeatures); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 *pFeatures) +{ + vkb_wire_vkGetPhysicalDeviceFeatures2(physicalDevice, pFeatures); + vkb_emu_patch_features(vkb_pd(physicalDevice), &pFeatures->features); + for (VkBaseOutStructure *b = (VkBaseOutStructure *)pFeatures->pNext; b; b = b->pNext) + vkb_emu_patch_features_chain(vkb_pd(physicalDevice), b); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties *pMemoryProperties) +{ + vkb_physdev *pd = vkb_pd(physicalDevice); + if (!vkb_physdev_ready(pd)) { + memset(pMemoryProperties, 0, sizeof(*pMemoryProperties)); + return; + } + *pMemoryProperties = pd->client_mem; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2 *pMemoryProperties) +{ + vkb_physdev *pd = vkb_pd(physicalDevice); + VkPhysicalDeviceMemoryBudgetPropertiesEXT *budget = NULL; + for (VkBaseOutStructure *b = (VkBaseOutStructure *)pMemoryProperties->pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT) budget = (void *)b; + vkb_wire_vkGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties); + if (!vkb_physdev_ready(pd)) return; + pMemoryProperties->memoryProperties = pd->client_mem; + if (budget) { + VkDeviceSize b[VK_MAX_MEMORY_HEAPS], u[VK_MAX_MEMORY_HEAPS]; + memcpy(b, budget->heapBudget, sizeof(b)); + memcpy(u, budget->heapUsage, sizeof(u)); + memset(budget->heapBudget, 0, sizeof(budget->heapBudget)); + memset(budget->heapUsage, 0, sizeof(budget->heapUsage)); + for (uint32_t h = 0; h < pd->client_mem.memoryHeapCount; h++) { + budget->heapBudget[h] = b[pd->heap_map[h]]; + budget->heapUsage[h] = u[pd->heap_map[h]]; + } + } +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, + VkQueueFamilyProperties *pProps) +{ + vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, uint32_t *pCount, + VkQueueFamilyProperties2 *pProps) +{ + vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pCount, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties *pFormatProperties) +{ + if (vkb_emu_format_properties(vkb_pd(physicalDevice), format, pFormatProperties, NULL)) return; + vkb_wire_vkGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties2 *pFormatProperties) +{ + if (vkb_emu_format_properties(vkb_pd(physicalDevice), format, &pFormatProperties->formatProperties, pFormatProperties)) return; + vkb_wire_vkGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkImageType type, VkImageTiling tiling, + VkImageUsageFlags usage, VkImageCreateFlags flags, + VkImageFormatProperties *pProps) +{ + VkFormat real = vkb_emu_real_format(vkb_pd(physicalDevice), format, &usage, &flags); + return vkb_wire_vkGetPhysicalDeviceImageFormatProperties(physicalDevice, real, type, tiling, usage, flags, pProps); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2 *pInfo, + VkImageFormatProperties2 *pProps) +{ + VkPhysicalDeviceImageFormatInfo2 info = *pInfo; + info.format = vkb_emu_real_format(vkb_pd(physicalDevice), pInfo->format, &info.usage, &info.flags); + return vkb_wire_vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, &info, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkImageType type, VkSampleCountFlagBits samples, + VkImageUsageFlags usage, VkImageTiling tiling, + uint32_t *pCount, VkSparseImageFormatProperties *pProps) +{ + if (vkb_emu_is_emulated_format(vkb_pd(physicalDevice), format)) { + *pCount = 0; + return; + } + vkb_wire_vkGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pCount, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2 *pInfo, + uint32_t *pCount, VkSparseImageFormatProperties2 *pProps) +{ + if (vkb_emu_is_emulated_format(vkb_pd(physicalDevice), pInfo->format)) { + *pCount = 0; + return; + } + vkb_wire_vkGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pInfo, pCount, pProps); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t *pToolCount, + VkPhysicalDeviceToolProperties *pToolProperties) +{ + (void)physicalDevice; + (void)pToolProperties; + *pToolCount = 0; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo *pInfo, + VkExternalBufferProperties *pProps) +{ + vkb_wire_vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, pInfo, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo *pInfo, + VkExternalSemaphoreProperties *pProps) +{ + vkb_wire_vkGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pInfo, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo *pInfo, + VkExternalFenceProperties *pProps) +{ + vkb_wire_vkGetPhysicalDeviceExternalFenceProperties(physicalDevice, pInfo, pProps); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT *pProps) +{ + vkb_wire_vkGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pProps); +} diff --git a/tools/vkbridge/client/vkb_client.h b/tools/vkbridge/client/vkb_client.h new file mode 100644 index 000000000..37682316e --- /dev/null +++ b/tools/vkbridge/client/vkb_client.h @@ -0,0 +1,182 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * DroidDeck Vulkan bridge - client ICD (libvulkan_droidbridge.so, glibc). + * + * A Vulkan driver for the Vulkan loader inside the Linux session. It owns no GPU: every call is + * encoded and executed by the server (app/src/main/cpp/vkbridge) on the device's real driver. + * Command buffers are recorded locally and shipped at vkEndCommandBuffer; mapped memory is + * shared pages (see server_memory.c); presentation (WSI) is implemented here. + */ +#ifndef VKB_CLIENT_H +#define VKB_CLIENT_H + +#define VK_USE_PLATFORM_WAYLAND_KHR 1 +#define VK_USE_PLATFORM_XCB_KHR 1 +#define VK_USE_PLATFORM_XLIB_KHR 1 + +#include +#include +#include + +#include "vkb_wire.h" +#include "vkb_proto.h" +#include "vkb_log.h" +#include +#include + +#define VKB_EXPORT __attribute__((visibility("default"))) +#define VKB_API_VERSION VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) + +/* ------------------------------------------------------------------ small hash map (u64 -> ptr) */ +typedef struct vkb_map { + uint64_t *keys; + void **vals; + uint32_t cap, count; + pthread_mutex_t lock; +} vkb_map; +void vkb_map_init(vkb_map *m); +void vkb_map_destroy(vkb_map *m); +void vkb_map_put(vkb_map *m, uint64_t k, void *v); +void *vkb_map_get(vkb_map *m, uint64_t k); +void *vkb_map_remove(vkb_map *m, uint64_t k); + +/* ------------------------------------------------------------------ dispatchable objects */ +typedef struct vkb_object { + VK_LOADER_DATA loader; /* must be first: the loader keeps its dispatch pointer here */ + VkObjectType type; + uint64_t remote; /* the server's handle */ + uint32_t table; /* the server's dispatch table for calls on this object */ +} vkb_object; + +typedef struct vkb_mem_type_map { + uint32_t server_type; + uint8_t shared; +} vkb_mem_type_map; + +struct vkb_instance; + +typedef struct vkb_physdev { + vkb_object obj; + struct vkb_instance *instance; + vkb_server_pd_info info; + VkPhysicalDeviceProperties props; + VkPhysicalDeviceMemoryProperties server_mem; + VkPhysicalDeviceMemoryProperties client_mem; /* what the app sees */ + vkb_mem_type_map type_map[VK_MAX_MEMORY_TYPES]; + uint32_t heap_map[VK_MAX_MEMORY_HEAPS]; /* client heap -> server heap */ + VkExtensionProperties *exts; /* filtered device extensions */ + uint32_t next; + int ready; + pthread_mutex_t lock; + struct vkb_physdev *list_next; +} vkb_physdev; + +typedef struct vkb_instance { + vkb_object obj; + uint32_t api_version; + vkb_physdev *pds; + pthread_mutex_t lock; + uint8_t ext_surface, ext_wayland, ext_xcb, ext_xlib, ext_headless, ext_surface_caps2, ext_debug_utils; +} vkb_instance; + +struct vkb_queue; + +typedef struct vkb_device { + vkb_object obj; + vkb_physdev *pd; + vkb_instance *instance; + struct vkb_queue *queues; + pthread_mutex_t lock; + vkb_map memories; /* VkDeviceMemory -> vkb_memory* */ + vkb_map templates; /* VkDescriptorUpdateTemplate -> vkb_template* */ + vkb_map pools; /* VkCommandPool -> vkb_cmdpool* */ + vkb_map unshared; /* VkBuffer/VkImage that cannot live in shared memory -> (void*)1 */ + vkb_map shared_images; /* VkImage that may live in shared memory -> (void*)1 */ + const char **enabled_exts; + uint32_t enabled_ext_count; + uint8_t ext_swapchain; + uint32_t api_version; +} vkb_device; + +typedef struct vkb_queue { + vkb_object obj; + vkb_device *device; + uint32_t family, index, flags; + struct vkb_queue *next; +} vkb_queue; + +typedef struct vkb_cmdbuf { + vkb_object obj; + vkb_device *device; + VkCommandPool pool; + VkCommandBufferLevel level; + vkb_enc stream; + size_t entry; /* offset of the open entry's payload */ + int recording; + int broken; + struct vkb_cmdbuf *pool_next, *pool_prev; +} vkb_cmdbuf; + +typedef struct vkb_cmdpool { + vkb_cmdbuf *head; +} vkb_cmdpool; + +typedef struct vkb_memory { + void *ptr; /* client mapping (shared allocations) */ + VkDeviceSize size; + uint32_t client_type; + int shared; +} vkb_memory; + +static inline vkb_device *vkb_dev(VkDevice d) { return (vkb_device *)d; } +static inline vkb_physdev *vkb_pd(VkPhysicalDevice p) { return (vkb_physdev *)p; } +static inline vkb_instance *vkb_inst(VkInstance i) { return (vkb_instance *)i; } +static inline vkb_cmdbuf *vkb_cb(VkCommandBuffer c) { return (vkb_cmdbuf *)c; } + +/* ------------------------------------------------------------------ calls */ +typedef struct vkb_call { + vkb_enc e; + vkb_dec d; + uint32_t cmd, table, flags; + struct vkb_conn *conn; +} vkb_call; + +void vkb_call_begin(vkb_call *c, uint32_t cmd, uint32_t table); +/* Sends the request and waits for the reply. 0 = failed (the call is already released). */ +int vkb_call_exec(vkb_call *c); +void vkb_call_end(vkb_call *c); +/* Sends without waiting for a reply (void commands without outputs); ordered by vkb_msg_hdr.seq. */ +int vkb_call_exec_async(vkb_call *c); +int vkb_async_results(void); +void vkb_stats_count(uint32_t cmd, int async, size_t bytes); +uint32_t vkb_table_of(const void *dispatchable); +int vkb_connected(void); +/* Per-thread transport cleanup for fork children. */ +void vkb_conn_after_fork(void); + +/* Command streams (cmdbuf.c). */ +vkb_enc *vkb_cmd_record_begin(VkCommandBuffer cb, uint32_t cmd); +void vkb_cmd_record_end(VkCommandBuffer cb); + +/* Dispatchable objects created by the server (generated stubs call this). */ +void *vkb_wrap(VkObjectType type, const void *parent, uint64_t remote); + +/* physdev.c */ +int vkb_physdev_ready(vkb_physdev *pd); +uint32_t vkb_mem_bits_to_client(vkb_physdev *pd, uint32_t server_bits, int allow_shared); + +/* memory.c */ +void vkb_memory_init_device(vkb_device *d); + +/* icd.c */ +PFN_vkVoidFunction vkb_lookup_proc(const char *name, int level_max, vkb_device *dev, vkb_instance *inst); +int vkb_device_ext_enabled(const vkb_device *d, const char *name); + +/* memory.c */ +void *vkb_chain_clone(const void *pNext, void **mem); +int vkb_is_client_device_ext(const char *n); + +/* misc */ +int vkb_memfd(const char *name, size_t size); + +#endif diff --git a/tools/vkbridge/client/wsi.c b/tools/vkbridge/client/wsi.c new file mode 100644 index 000000000..066912895 --- /dev/null +++ b/tools/vkbridge/client/wsi.c @@ -0,0 +1,801 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Surfaces and swapchains (backend-independent part). + */ +#define _GNU_SOURCE +#include "wsi.h" +#include "gen/vkb_client_gen.h" + +#include +#include +#include +#include +#include + +const VkSurfaceFormatKHR vkb_wsi_formats[] = { + {VK_FORMAT_B8G8R8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}, + {VK_FORMAT_B8G8R8A8_UNORM, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}, + {VK_FORMAT_R8G8B8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}, + {VK_FORMAT_R8G8B8A8_UNORM, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}, +}; +const uint32_t vkb_wsi_format_count = sizeof(vkb_wsi_formats) / sizeof(vkb_wsi_formats[0]); + +#define FOURCC(a, b, c, d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) + +uint32_t vkb_drm_format(VkFormat f) +{ + switch (f) { + case VK_FORMAT_B8G8R8A8_SRGB: + case VK_FORMAT_B8G8R8A8_UNORM: return FOURCC('A', 'R', '2', '4'); + case VK_FORMAT_R8G8B8A8_SRGB: + case VK_FORMAT_R8G8B8A8_UNORM: return FOURCC('A', 'B', '2', '4'); + default: return 0; + } +} + +static vkb_surface *surf(VkSurfaceKHR s) { return (vkb_surface *)(uintptr_t)s; } +static vkb_swapchain *chain(VkSwapchainKHR s) { return (vkb_swapchain *)(uintptr_t)s; } + +/* ------------------------------------------------------------------ surfaces */ + +static VkResult new_surface(enum vkb_surface_kind kind, VkSurfaceKHR *out, vkb_surface **ps) +{ + vkb_surface *s = calloc(1, sizeof(*s)); + if (!s) return VK_ERROR_OUT_OF_HOST_MEMORY; + s->kind = kind; + *ps = s; + *out = (VkSurfaceKHR)(uintptr_t)s; + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) +{ + (void)instance; + (void)pAllocator; + if (!vkb_wl_load()) return VK_ERROR_INITIALIZATION_FAILED; + vkb_surface *s; + VkResult r = new_surface(VKB_SURF_WAYLAND, pSurface, &s); + if (r == VK_SUCCESS) { + s->wl_display = pCreateInfo->display; + s->wl_surface = pCreateInfo->surface; + } + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) +{ + (void)instance; + (void)pAllocator; + if (!vkb_xcb_load()) return VK_ERROR_INITIALIZATION_FAILED; + vkb_surface *s; + VkResult r = new_surface(VKB_SURF_XCB, pSurface, &s); + if (r == VK_SUCCESS) { + s->xcb_conn = pCreateInfo->connection; + s->xcb_window = pCreateInfo->window; + } + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) +{ + (void)instance; + (void)pAllocator; + if (!vkb_xcb_load()) return VK_ERROR_INITIALIZATION_FAILED; + void *conn = vkb_xlib_to_xcb(pCreateInfo->dpy); + if (!conn) return VK_ERROR_INITIALIZATION_FAILED; + vkb_surface *s; + VkResult r = new_surface(VKB_SURF_XCB, pSurface, &s); + if (r == VK_SUCCESS) { + s->xcb_conn = conn; + s->xcb_window = (uint32_t)pCreateInfo->window; + } + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateHeadlessSurfaceEXT(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) +{ + (void)instance; + (void)pCreateInfo; + (void)pAllocator; + vkb_surface *s; + return new_surface(VKB_SURF_HEADLESS, pSurface, &s); +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *pAllocator) +{ + (void)instance; + (void)pAllocator; + free(surf(surface)); +} + +VKAPI_ATTR VkBool32 VKAPI_CALL vkb_ep_vkGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, + struct wl_display *display) +{ + (void)physicalDevice; + (void)queueFamilyIndex; + (void)display; + return vkb_wl_load() ? VK_TRUE : VK_FALSE; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL vkb_ep_vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, + xcb_connection_t *connection, xcb_visualid_t visual_id) +{ + (void)physicalDevice; + (void)queueFamilyIndex; + (void)connection; + (void)visual_id; + return vkb_xcb_load() ? VK_TRUE : VK_FALSE; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL vkb_ep_vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, + Display *dpy, VisualID visualID) +{ + (void)physicalDevice; + (void)queueFamilyIndex; + (void)dpy; + (void)visualID; + return vkb_xcb_load() ? VK_TRUE : VK_FALSE; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, + VkSurfaceKHR surface, VkBool32 *pSupported) +{ + (void)surface; + /* Presentation is a copy or a hand-over after the queue's work: any queue that can do + * graphics or compute (or transfer) can present. */ + uint32_t n = 0; + vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &n, NULL); + VkQueueFamilyProperties *qp = calloc(n ? n : 1, sizeof(*qp)); + vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &n, qp); + *pSupported = queueFamilyIndex < n && + (qp[queueFamilyIndex].queueFlags & (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT)); + free(qp); + return VK_SUCCESS; +} + +static VkResult surface_extent(vkb_surface *s, VkExtent2D *e) +{ + switch (s->kind) { + case VKB_SURF_WAYLAND: return vkb_wl_surface_extent(s, e); + case VKB_SURF_XCB: return vkb_xcb_surface_extent(s, e); + default: + e->width = e->height = 0xFFFFFFFFu; + return VK_SUCCESS; + } +} + +static VkImageUsageFlags supported_usage(VkPhysicalDevice pd) +{ + VkImageUsageFlags u = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | + VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; + VkFormatProperties fp; + vkb_wire_vkGetPhysicalDeviceFormatProperties(pd, VK_FORMAT_B8G8R8A8_UNORM, &fp); + if (fp.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) u |= VK_IMAGE_USAGE_STORAGE_BIT; + return u; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR *c) +{ + vkb_surface *s = surf(surface); + memset(c, 0, sizeof(*c)); + VkResult r = surface_extent(s, &c->currentExtent); + if (r != VK_SUCCESS) return r; + c->minImageCount = s->kind == VKB_SURF_WAYLAND ? 3 : 2; + c->maxImageCount = 8; + c->minImageExtent = (VkExtent2D){1, 1}; + c->maxImageExtent = (VkExtent2D){16384, 16384}; + if (c->currentExtent.width != 0xFFFFFFFFu) { + c->minImageExtent = c->maxImageExtent = c->currentExtent; + if (!c->currentExtent.width || !c->currentExtent.height) c->minImageExtent = (VkExtent2D){0, 0}; + } + c->maxImageArrayLayers = 1; + c->supportedTransforms = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + c->currentTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; + c->supportedCompositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR | VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; + if (s->kind == VKB_SURF_WAYLAND) c->supportedCompositeAlpha |= VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR; + c->supportedUsageFlags = supported_usage(physicalDevice); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR *pInfo, + VkSurfaceCapabilities2KHR *pCaps) +{ + VkResult r = vkb_ep_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, pInfo->surface, &pCaps->surfaceCapabilities); + for (VkBaseOutStructure *b = (VkBaseOutStructure *)pCaps->pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR) + ((VkSurfaceProtectedCapabilitiesKHR *)b)->supportsProtected = VK_FALSE; + } + return r; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t *pCount, VkSurfaceFormatKHR *pFormats) +{ + (void)physicalDevice; + (void)surface; + if (!pFormats) { + *pCount = vkb_wsi_format_count; + return VK_SUCCESS; + } + uint32_t n = *pCount < vkb_wsi_format_count ? *pCount : vkb_wsi_format_count; + memcpy(pFormats, vkb_wsi_formats, n * sizeof(*pFormats)); + *pCount = n; + return n < vkb_wsi_format_count ? VK_INCOMPLETE : VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR *pInfo, uint32_t *pCount, + VkSurfaceFormat2KHR *pFormats) +{ + (void)physicalDevice; + (void)pInfo; + if (!pFormats) { + *pCount = vkb_wsi_format_count; + return VK_SUCCESS; + } + uint32_t n = *pCount < vkb_wsi_format_count ? *pCount : vkb_wsi_format_count; + for (uint32_t i = 0; i < n; i++) pFormats[i].surfaceFormat = vkb_wsi_formats[i]; + *pCount = n; + return n < vkb_wsi_format_count ? VK_INCOMPLETE : VK_SUCCESS; +} + +static const VkPresentModeKHR present_modes[] = {VK_PRESENT_MODE_FIFO_KHR, VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_IMMEDIATE_KHR}; + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t *pCount, VkPresentModeKHR *pModes) +{ + (void)physicalDevice; + (void)surface; + uint32_t total = 3; + if (!pModes) { + *pCount = total; + return VK_SUCCESS; + } + uint32_t n = *pCount < total ? *pCount : total; + memcpy(pModes, present_modes, n * sizeof(*pModes)); + *pCount = n; + return n < total ? VK_INCOMPLETE : VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t *pRectCount, VkRect2D *pRects) +{ + (void)physicalDevice; + if (!pRects) { + *pRectCount = 1; + return VK_SUCCESS; + } + if (*pRectCount < 1) return VK_INCOMPLETE; + VkExtent2D e; + surface_extent(surf(surface), &e); + if (e.width == 0xFFFFFFFFu) e = (VkExtent2D){16384, 16384}; + pRects[0] = (VkRect2D){{0, 0}, e}; + *pRectCount = 1; + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetDeviceGroupPresentCapabilitiesKHR(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR *pCaps) +{ + (void)device; + memset(pCaps->presentMask, 0, sizeof(pCaps->presentMask)); + pCaps->presentMask[0] = 1; + pCaps->modes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR; + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR *pModes) +{ + (void)device; + (void)surface; + *pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR; + return VK_SUCCESS; +} + +/* ------------------------------------------------------------------ swapchain images */ + +static uint32_t pick_type(vkb_device *dev, uint32_t bits, VkMemoryPropertyFlags want) +{ + const VkPhysicalDeviceMemoryProperties *mp = &dev->pd->client_mem; + for (uint32_t i = 0; i < mp->memoryTypeCount; i++) + if ((bits & (1u << i)) && (mp->memoryTypes[i].propertyFlags & want) == want) return i; + for (uint32_t i = 0; i < mp->memoryTypeCount; i++) + if (bits & (1u << i)) return i; + return UINT32_MAX; +} + +static int pd_has_ext(vkb_physdev *pd, const char *name) +{ + for (uint32_t i = 0; i < pd->next; i++) + if (!strcmp(pd->exts[i].extensionName, name)) return 1; + return 0; +} + +/* One swapchain image: exported as a linear dma-buf when `dmabuf`, else an ordinary image. */ +static VkResult create_image(vkb_swapchain *sc, vkb_swap_image *img, int dmabuf) +{ + vkb_device *dev = sc->dev; + VkDevice device = (VkDevice)dev; + const VkSwapchainCreateInfoKHR *ci = &sc->info; + VkImageCreateInfo ici = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ici.imageType = VK_IMAGE_TYPE_2D; + ici.format = ci->imageFormat; + ici.extent = (VkExtent3D){ci->imageExtent.width, ci->imageExtent.height, 1}; + ici.mipLevels = 1; + ici.arrayLayers = ci->imageArrayLayers; + ici.samples = VK_SAMPLE_COUNT_1_BIT; + ici.tiling = VK_IMAGE_TILING_OPTIMAL; + ici.usage = ci->imageUsage | (sc->copy_present || !dmabuf ? VK_IMAGE_USAGE_TRANSFER_SRC_BIT : 0); + ici.sharingMode = ci->imageSharingMode; + ici.queueFamilyIndexCount = ci->queueFamilyIndexCount; + ici.pQueueFamilyIndices = ci->pQueueFamilyIndices; + ici.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (ci->flags & VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR) ici.flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; + VkImageFormatListCreateInfo fl = {VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, NULL, sc->view_format_count, sc->view_formats}; + VkExternalMemoryImageCreateInfo ext = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, NULL, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT}; + uint64_t linear = 0; /* DRM_FORMAT_MOD_LINEAR */ + VkImageDrmFormatModifierListCreateInfoEXT mods = {VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT, NULL, 1, &linear}; + const void *chain = NULL; + if (sc->view_format_count) { + fl.pNext = chain; + chain = &fl; + } + int use_mods = 0; + if (dmabuf) { + ext.pNext = chain; + chain = &ext; + if (pd_has_ext(dev->pd, "VK_EXT_image_drm_format_modifier")) { + mods.pNext = chain; + chain = &mods; + ici.tiling = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT; + use_mods = 1; + } else { + ici.tiling = VK_IMAGE_TILING_LINEAR; + } + } + ici.pNext = chain; + VkResult r = vkb_wire_vkCreateImage(device, &ici, NULL, &img->image); + if (r != VK_SUCCESS) return r; + VkMemoryRequirements req; + vkb_ep_vkGetImageMemoryRequirements(device, img->image, &req); + uint32_t type = pick_type(dev, req.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + if (type == UINT32_MAX) return VK_ERROR_OUT_OF_DEVICE_MEMORY; + VkMemoryDedicatedAllocateInfo ded = {VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, NULL, img->image, VK_NULL_HANDLE}; + VkExportMemoryAllocateInfo exp = {VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, &ded, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT}; + VkMemoryAllocateInfo ai = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, dmabuf ? (const void *)&exp : (const void *)&ded, req.size, type}; + r = vkb_ep_vkAllocateMemory(device, &ai, NULL, &img->memory); + if (r != VK_SUCCESS) return r; + r = vkb_wire_vkBindImageMemory(device, img->image, img->memory, 0); + if (r != VK_SUCCESS) return r; + img->dmabuf_fd = -1; + if (dmabuf) { + VkMemoryGetFdInfoKHR gi = {VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR, NULL, img->memory, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT}; + r = vkb_wire_vkGetMemoryFdKHR(device, &gi, &img->dmabuf_fd); + if (r != VK_SUCCESS || img->dmabuf_fd < 0) return r != VK_SUCCESS ? r : VK_ERROR_INITIALIZATION_FAILED; + VkImageSubresource sub = {use_mods ? VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT : VK_IMAGE_ASPECT_COLOR_BIT, 0, 0}; + VkSubresourceLayout lay; + vkb_wire_vkGetImageSubresourceLayout(device, img->image, &sub, &lay); + img->stride = (uint32_t)lay.rowPitch; + img->offset = (uint32_t)lay.offset; + img->modifier = 0; + if (use_mods) { + VkImageDrmFormatModifierPropertiesEXT mp = {VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT}; + if (vkb_wire_vkGetImageDrmFormatModifierPropertiesEXT(device, img->image, &mp) == VK_SUCCESS) img->modifier = mp.drmFormatModifier; + } + } + return VK_SUCCESS; +} + +static void destroy_image(vkb_swapchain *sc, vkb_swap_image *img) +{ + VkDevice device = (VkDevice)sc->dev; + if (img->dmabuf_fd >= 0) close(img->dmabuf_fd); + if (img->image) vkb_ep_vkDestroyImage(device, img->image, NULL); + if (img->memory) vkb_ep_vkFreeMemory(device, img->memory, NULL); +} + +static VkResult create_staging(vkb_swapchain *sc) +{ + vkb_device *dev = sc->dev; + VkDevice device = (VkDevice)dev; + VkDeviceSize size = (VkDeviceSize)sc->info.imageExtent.width * sc->info.imageExtent.height * 4; + VkBufferCreateInfo bci = {VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0, size, VK_BUFFER_USAGE_TRANSFER_DST_BIT, + VK_SHARING_MODE_EXCLUSIVE, 0, NULL}; + VkResult r = vkb_ep_vkCreateBuffer(device, &bci, NULL, &sc->staging); + if (r != VK_SUCCESS) return r; + VkMemoryRequirements req; + vkb_ep_vkGetBufferMemoryRequirements(device, sc->staging, &req); + uint32_t type = pick_type(dev, req.memoryTypeBits, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT); + if (type == UINT32_MAX || !(dev->pd->client_mem.memoryTypes[type].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) + type = pick_type(dev, req.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT); + if (type == UINT32_MAX || !(dev->pd->client_mem.memoryTypes[type].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) { + VKB_ERR("swapchain: no host-visible memory to read frames back into"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + VkMemoryAllocateInfo ai = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, req.size, type}; + r = vkb_ep_vkAllocateMemory(device, &ai, NULL, &sc->staging_mem); + if (r != VK_SUCCESS) return r; + r = vkb_wire_vkBindBufferMemory(device, sc->staging, sc->staging_mem, 0); + if (r != VK_SUCCESS) return r; + void *p = NULL; + r = vkb_ep_vkMapMemory(device, sc->staging_mem, 0, VK_WHOLE_SIZE, 0, &p); + sc->staging_ptr = p; + sc->staging_size = size; + return r; +} + +static VkResult ensure_copy_cbs(vkb_swapchain *sc, uint32_t family) +{ + VkDevice device = (VkDevice)sc->dev; + if (sc->pool && sc->pool_family == family) return VK_SUCCESS; + if (sc->pool) { + vkb_ep_vkDestroyCommandPool(device, sc->pool, NULL); + sc->pool = VK_NULL_HANDLE; + } + VkCommandPoolCreateInfo pci = {VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, NULL, 0, family}; + VkResult r = vkb_wire_vkCreateCommandPool(device, &pci, NULL, &sc->pool); + if (r != VK_SUCCESS) return r; + sc->pool_family = family; + VkCommandBufferAllocateInfo cai = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL, sc->pool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, sc->count}; + r = vkb_ep_vkAllocateCommandBuffers(device, &cai, sc->copy_cbs); + if (r != VK_SUCCESS) return r; + for (uint32_t i = 0; i < sc->count; i++) { + VkCommandBuffer cb = sc->copy_cbs[i]; + VkCommandBufferBeginInfo bi = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, 0, NULL}; + vkb_ep_vkBeginCommandBuffer(cb, &bi); + VkImageMemoryBarrier b = {VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, sc->images[i].image, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; + vkb_wire_vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, NULL, 0, NULL, 1, &b); + VkBufferImageCopy region = {0, 0, 0, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {sc->info.imageExtent.width, sc->info.imageExtent.height, 1}}; + vkb_wire_vkCmdCopyImageToBuffer(cb, sc->images[i].image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, sc->staging, 1, ®ion); + b.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + b.dstAccessMask = 0; + b.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + b.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + VkMemoryBarrier hb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER, NULL, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT}; + vkb_wire_vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT | VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 1, + &hb, 0, NULL, 1, &b); + r = vkb_ep_vkEndCommandBuffer(cb); + if (r != VK_SUCCESS) return r; + } + return VK_SUCCESS; +} + +/* Waits (on the CPU) for the app's rendering into image `index`, reading it back when needed. */ +VkResult vkb_wsi_wait_rendering(vkb_swapchain *sc, VkQueue queue, uint32_t index, uint32_t nwait, const VkSemaphore *wait) +{ + VkDevice device = (VkDevice)sc->dev; + VkPipelineStageFlags *stages = alloca((nwait ? nwait : 1) * sizeof(VkPipelineStageFlags)); + for (uint32_t i = 0; i < nwait; i++) stages[i] = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; + VkSubmitInfo si = {VK_STRUCTURE_TYPE_SUBMIT_INFO, NULL, nwait, wait, stages, 0, NULL, 0, NULL}; + if (sc->copy_present) { + VkResult r = ensure_copy_cbs(sc, ((vkb_queue *)queue)->family); + if (r != VK_SUCCESS) return r; + si.commandBufferCount = 1; + si.pCommandBuffers = &sc->copy_cbs[index]; + } + VkResult r = vkb_wire_vkQueueSubmit(queue, 1, &si, sc->fence); + if (r != VK_SUCCESS) return r; + r = vkb_wire_vkWaitForFences(device, 1, &sc->fence, VK_TRUE, 10ull * 1000 * 1000 * 1000); + vkb_wire_vkResetFences(device, 1, &sc->fence); + if (r == VK_TIMEOUT) { + VKB_ERR("swapchain: a frame took more than 10 s to render"); + return VK_ERROR_DEVICE_LOST; + } + return r; +} + +/* ------------------------------------------------------------------ swapchain */ + +static void swapchain_free(vkb_swapchain *sc) +{ + VkDevice device = (VkDevice)sc->dev; + if (sc->backend && sc->backend->destroy) sc->backend->destroy(sc); + for (uint32_t i = 0; i < sc->count; i++) destroy_image(sc, &sc->images[i]); + if (sc->pool) vkb_ep_vkDestroyCommandPool(device, sc->pool, NULL); + if (sc->fence) vkb_wire_vkDestroyFence(device, sc->fence, NULL); + if (sc->staging) vkb_ep_vkDestroyBuffer(device, sc->staging, NULL); + if (sc->staging_mem) vkb_ep_vkFreeMemory(device, sc->staging_mem, NULL); + free(sc->images); + free(sc->copy_cbs); + free(sc->view_formats); + pthread_mutex_destroy(&sc->lock); + free(sc); +} + +static VkResult swapchain_build(vkb_swapchain *sc, int dmabuf) +{ + VkDevice device = (VkDevice)sc->dev; + sc->dmabuf = dmabuf; + for (uint32_t i = 0; i < sc->count; i++) { + VkResult r = create_image(sc, &sc->images[i], dmabuf); + if (r != VK_SUCCESS) return r; + sc->images[i].chain = sc; + } + if (sc->copy_present) { + VkResult r = create_staging(sc); + if (r != VK_SUCCESS) return r; + } + VkFenceCreateInfo fci = {VK_STRUCTURE_TYPE_FENCE_CREATE_INFO}; + VkResult r = vkb_wire_vkCreateFence(device, &fci, NULL, &sc->fence); + if (r != VK_SUCCESS) return r; + return sc->backend->init(sc); +} + +static void swapchain_teardown(vkb_swapchain *sc) +{ + VkDevice device = (VkDevice)sc->dev; + if (sc->backend && sc->backend->destroy) sc->backend->destroy(sc); + sc->bdata = NULL; + for (uint32_t i = 0; i < sc->count; i++) { + destroy_image(sc, &sc->images[i]); + memset(&sc->images[i], 0, sizeof(sc->images[i])); + sc->images[i].dmabuf_fd = -1; + } + if (sc->fence) vkb_wire_vkDestroyFence(device, sc->fence, NULL); + sc->fence = VK_NULL_HANDLE; + if (sc->staging) vkb_ep_vkDestroyBuffer(device, sc->staging, NULL); + if (sc->staging_mem) vkb_ep_vkFreeMemory(device, sc->staging_mem, NULL); + sc->staging = VK_NULL_HANDLE; + sc->staging_mem = VK_NULL_HANDLE; + sc->staging_ptr = NULL; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) +{ + (void)pAllocator; + vkb_device *dev = vkb_dev(device); + vkb_surface *s = surf(pCreateInfo->surface); + if (pCreateInfo->oldSwapchain) chain(pCreateInfo->oldSwapchain)->retired = 1; + vkb_swapchain *sc = calloc(1, sizeof(*sc)); + if (!sc) return VK_ERROR_OUT_OF_HOST_MEMORY; + pthread_mutex_init(&sc->lock, NULL); + sc->dev = dev; + sc->surface = s; + sc->info = *pCreateInfo; + sc->info.pNext = NULL; + sc->info.pQueueFamilyIndices = NULL; + sc->info.queueFamilyIndexCount = 0; + sc->info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + for (const VkBaseInStructure *b = pCreateInfo->pNext; b; b = b->pNext) { + if (b->sType == VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO) { + const VkImageFormatListCreateInfo *fl = (const void *)b; + sc->view_formats = calloc(fl->viewFormatCount + 1, sizeof(VkFormat)); + memcpy(sc->view_formats, fl->pViewFormats, fl->viewFormatCount * sizeof(VkFormat)); + sc->view_format_count = fl->viewFormatCount; + } + } + sc->count = pCreateInfo->minImageCount < 2 ? 2 : pCreateInfo->minImageCount; + if (s->kind == VKB_SURF_WAYLAND && sc->count < 3) sc->count = 3; + sc->images = calloc(sc->count, sizeof(vkb_swap_image)); + sc->copy_cbs = calloc(sc->count, sizeof(VkCommandBuffer)); + for (uint32_t i = 0; i < sc->count; i++) sc->images[i].dmabuf_fd = -1; + VkResult r; + switch (s->kind) { + case VKB_SURF_WAYLAND: + sc->backend = &vkb_wsi_wayland_backend; + sc->copy_present = getenv("VKBRIDGE_WSI_SHM") != NULL; + r = swapchain_build(sc, !sc->copy_present); + if (r != VK_SUCCESS && !sc->copy_present) { + VKB_WARN("Wayland: no dma-buf presentation (%d); falling back to copies through shared memory", r); + swapchain_teardown(sc); + sc->copy_present = 1; + r = swapchain_build(sc, 0); + } + break; + case VKB_SURF_XCB: + sc->backend = &vkb_wsi_x11_backend; + sc->copy_present = 1; + r = swapchain_build(sc, 0); + break; + default: + sc->backend = &vkb_wsi_headless_backend; + r = swapchain_build(sc, 0); + break; + } + if (r != VK_SUCCESS) { + VKB_ERR("swapchain creation failed: %d", r); + swapchain_free(sc); + return r; + } + VKB_INFO("swapchain %ux%u format %d, %u images, %s", sc->info.imageExtent.width, sc->info.imageExtent.height, sc->info.imageFormat, + sc->count, sc->copy_present ? "presented by copy" : sc->dmabuf ? "presented as dma-bufs" : "headless"); + *pSwapchain = (VkSwapchainKHR)(uintptr_t)sc; + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks *pAllocator) +{ + (void)pAllocator; + if (!swapchain) return; + vkb_swapchain *sc = chain(swapchain); + /* Images may still be in use by the GPU (present waits are CPU-side, so not by us). */ + vkb_wire_vkDeviceWaitIdle(device); + swapchain_free(sc); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pCount, VkImage *pImages) +{ + (void)device; + vkb_swapchain *sc = chain(swapchain); + if (!pImages) { + *pCount = sc->count; + return VK_SUCCESS; + } + uint32_t n = *pCount < sc->count ? *pCount : sc->count; + for (uint32_t i = 0; i < n; i++) pImages[i] = sc->images[i].image; + *pCount = n; + return n < sc->count ? VK_INCOMPLETE : VK_SUCCESS; +} + +/* Signals the app's semaphore/fence for an acquired image (no GPU work is involved). */ +static VkResult signal_acquire(vkb_device *dev, VkSemaphore sem, VkFence fence) +{ + VkDevice device = (VkDevice)dev; + if (sem) { + VkImportSemaphoreFdInfoKHR si = {VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR, NULL, sem, VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, -1}; + VkResult r = vkb_wire_vkImportSemaphoreFdKHR(device, &si); + if (r != VK_SUCCESS) { + /* No sync-fd import: signal it with an empty submit. */ + if (!dev->queues) return VK_ERROR_SURFACE_LOST_KHR; + VkSubmitInfo s = {VK_STRUCTURE_TYPE_SUBMIT_INFO, NULL, 0, NULL, NULL, 0, NULL, 1, &sem}; + r = vkb_wire_vkQueueSubmit((VkQueue)dev->queues, 1, &s, fence); + return r; + } + } + if (fence) { + VkImportFenceFdInfoKHR fi = {VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR, NULL, fence, VK_FENCE_IMPORT_TEMPORARY_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, -1}; + VkResult r = vkb_wire_vkImportFenceFdKHR(device, &fi); + if (r != VK_SUCCESS) { + if (!dev->queues) return VK_ERROR_SURFACE_LOST_KHR; + r = vkb_wire_vkQueueSubmit((VkQueue)dev->queues, 0, NULL, fence); + return r; + } + } + return VK_SUCCESS; +} + +static uint64_t now_ns(void) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t)ts.tv_sec * 1000000000ull + (uint64_t)ts.tv_nsec; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, + VkFence fence, uint32_t *pImageIndex) +{ + vkb_swapchain *sc = chain(swapchain); + if (sc->retired) return VK_ERROR_OUT_OF_DATE_KHR; + if (sc->status != VK_SUCCESS) return sc->status; + uint64_t deadline = timeout == UINT64_MAX ? UINT64_MAX : now_ns() + timeout; + for (;;) { + pthread_mutex_lock(&sc->lock); + for (uint32_t i = 0; i < sc->count; i++) { + if (!sc->images[i].busy && !sc->images[i].acquired) { + sc->images[i].acquired = 1; + pthread_mutex_unlock(&sc->lock); + VkResult r = signal_acquire(vkb_dev(device), semaphore, fence); + if (r != VK_SUCCESS) return r; + *pImageIndex = i; + return sc->status; + } + } + pthread_mutex_unlock(&sc->lock); + uint64_t now = now_ns(); + if (timeout == 0) return VK_NOT_READY; + if (now >= deadline) return VK_TIMEOUT; + VkResult r = sc->backend->wait_free(sc, deadline == UINT64_MAX ? UINT64_MAX : deadline - now); + if (r < 0) { + sc->status = r; + return r; + } + } +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAcquireNextImage2KHR(VkDevice device, const VkAcquireNextImageInfoKHR *pInfo, uint32_t *pImageIndex) +{ + return vkb_ep_vkAcquireNextImageKHR(device, pInfo->swapchain, pInfo->timeout, pInfo->semaphore, pInfo->fence, pImageIndex); +} + +/* VKBRIDGE_WSI_DUMP=/path/prefix: writes presented frame 60 as a PPM (debugging aid). */ +static void dump_frame(vkb_swapchain *sc, uint32_t index) +{ + /* The 60th present, or every VKBRIDGE_WSI_DUMP_EVERY-th (watching a game get somewhere). */ + static long every = -1; + if (every < 0) every = getenv("VKBRIDGE_WSI_DUMP_EVERY") ? atol(getenv("VKBRIDGE_WSI_DUMP_EVERY")) : 0; + if (every > 0 ? sc->presents % every != 0 : sc->presents != 60) return; + uint32_t w = sc->info.imageExtent.width, h = sc->info.imageExtent.height, stride = w * 4; + const uint8_t *px = NULL; + void *map = NULL; + size_t maplen = 0; + if (sc->copy_present) { + px = sc->staging_ptr; + } else if (sc->images[index].dmabuf_fd >= 0) { + stride = sc->images[index].stride; + maplen = (size_t)sc->images[index].offset + (size_t)stride * h; + map = mmap(NULL, maplen, PROT_READ, MAP_SHARED, sc->images[index].dmabuf_fd, 0); + if (map == MAP_FAILED) return; + px = (const uint8_t *)map + sc->images[index].offset; + } + if (!px) return; + char path[512]; + if (every > 0) + snprintf(path, sizeof(path), "%s-%d-%06u.ppm", getenv("VKBRIDGE_WSI_DUMP"), (int)getpid(), (unsigned)sc->presents); + else + snprintf(path, sizeof(path), "%s-%d.ppm", getenv("VKBRIDGE_WSI_DUMP"), (int)getpid()); + FILE *f = fopen(path, "wb"); + if (f) { + int bgr = sc->info.imageFormat == VK_FORMAT_B8G8R8A8_UNORM || sc->info.imageFormat == VK_FORMAT_B8G8R8A8_SRGB; + fprintf(f, "P6 %u %u 255\n", w, h); + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++) { + const uint8_t *p = px + (size_t)y * stride + x * 4; + uint8_t rgb[3] = {p[bgr ? 2 : 0], p[1], p[bgr ? 0 : 2]}; + fwrite(rgb, 1, 3, f); + } + fclose(f); + VKB_INFO("dumped frame to %s", path); + } + if (map) munmap(map, maplen); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) +{ + const VkPresentRegionsKHR *regions = NULL; + for (const VkBaseInStructure *b = pPresentInfo->pNext; b; b = b->pNext) + if (b->sType == VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR) regions = (const void *)b; + VkResult worst = VK_SUCCESS; + for (uint32_t i = 0; i < pPresentInfo->swapchainCount; i++) { + vkb_swapchain *sc = chain(pPresentInfo->pSwapchains[i]); + uint32_t index = pPresentInfo->pImageIndices[i]; + VkResult r = sc->status; + if (index >= sc->count) r = VK_ERROR_OUT_OF_DATE_KHR; + if (r >= 0) { + r = vkb_wsi_wait_rendering(sc, queue, index, i == 0 ? pPresentInfo->waitSemaphoreCount : 0, pPresentInfo->pWaitSemaphores); + } + pthread_mutex_lock(&sc->lock); + if (index < sc->count) { + sc->images[index].acquired = 0; + sc->images[index].busy = sc->dmabuf && !sc->copy_present; + } + pthread_mutex_unlock(&sc->lock); + if (r >= 0 && getenv("VKBRIDGE_WSI_DUMP")) dump_frame(sc, index); + if (r >= 0) { + r = sc->backend->present(sc, index, regions && i < regions->swapchainCount ? ®ions->pRegions[i] : NULL); + sc->presents++; + } + if (r < 0) { + pthread_mutex_lock(&sc->lock); + if (index < sc->count) sc->images[index].busy = 0; + pthread_mutex_unlock(&sc->lock); + if (r == VK_ERROR_OUT_OF_DATE_KHR || r == VK_ERROR_SURFACE_LOST_KHR) sc->status = r; + } + if (r == VK_SUCCESS && sc->status == VK_SUBOPTIMAL_KHR) r = VK_SUBOPTIMAL_KHR; + if (pPresentInfo->pResults) pPresentInfo->pResults[i] = r; + if (r < 0 && (worst >= 0 || r == VK_ERROR_DEVICE_LOST)) worst = r; + else if (worst == VK_SUCCESS && r == VK_SUBOPTIMAL_KHR) worst = r; + } + return worst; +} + +/* ------------------------------------------------------------------ headless */ + +static VkResult hl_init(vkb_swapchain *sc) { (void)sc; return VK_SUCCESS; } +static VkResult hl_present(vkb_swapchain *sc, uint32_t i, const VkPresentRegionKHR *r) { (void)sc; (void)i; (void)r; return VK_SUCCESS; } +static VkResult hl_wait(vkb_swapchain *sc, uint64_t t) { (void)sc; (void)t; return VK_TIMEOUT; } +static void hl_destroy(vkb_swapchain *sc) { (void)sc; } +const vkb_wsi_backend vkb_wsi_headless_backend = {hl_init, hl_present, hl_wait, hl_destroy}; diff --git a/tools/vkbridge/client/wsi.h b/tools/vkbridge/client/wsi.h new file mode 100644 index 000000000..c1d3bde43 --- /dev/null +++ b/tools/vkbridge/client/wsi.h @@ -0,0 +1,99 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Window-system integration implemented by the bridge client: the server's GPU has no Linux + * window systems, so swapchains are built here from ordinary images and handed to the + * compositor as dma-bufs (Wayland, zwp_linux_dmabuf_v1) or copied out through shared memory + * (Wayland wl_shm, X11 PutImage), or not shown at all (VK_EXT_headless_surface). + */ +#ifndef VKB_WSI_H +#define VKB_WSI_H + +#include "vkb_client.h" + +struct wl_display; +struct wl_surface; + +enum vkb_surface_kind { VKB_SURF_WAYLAND, VKB_SURF_XCB, VKB_SURF_HEADLESS }; + +typedef struct vkb_surface { + enum vkb_surface_kind kind; + struct wl_display *wl_display; + struct wl_surface *wl_surface; + void *xcb_conn; /* xcb_connection_t* */ + uint32_t xcb_window; + struct vkb_wl_display_info *wl_info; /* cached formats/modifiers per wl_display */ +} vkb_surface; + +typedef struct vkb_swapchain vkb_swapchain; + +typedef struct vkb_swap_image { + VkImage image; + VkDeviceMemory memory; + int busy; /* held by the compositor (or acquired by the app) */ + int acquired; + void *backend; /* backend per-image data (wl_buffer...) */ + uint32_t stride, offset; + uint64_t modifier; + int dmabuf_fd; + vkb_swapchain *chain; +} vkb_swap_image; + +typedef struct vkb_wsi_backend { + /* Called after images exist; may fail (e.g. no dma-buf support) - the generic code then + * retries with copy_present = 1. */ + VkResult (*init)(vkb_swapchain *sc); + /* The image's rendering is complete (and, with copy_present, its pixels are in sc->staging). */ + VkResult (*present)(vkb_swapchain *sc, uint32_t index, const VkPresentRegionKHR *region); + /* Wait until an image may be acquired (dispatching events); 0 timeout = poll. */ + VkResult (*wait_free)(vkb_swapchain *sc, uint64_t timeout_ns); + void (*destroy)(vkb_swapchain *sc); +} vkb_wsi_backend; + +struct vkb_swapchain { + vkb_device *dev; + vkb_surface *surface; + VkSwapchainCreateInfoKHR info; + VkFormat *view_formats; + uint32_t view_format_count; + uint32_t count; + vkb_swap_image *images; + const vkb_wsi_backend *backend; + void *bdata; + int dmabuf; /* images are exported dma-bufs */ + int copy_present; /* pixels are read back into `staging` at present */ + /* Read-back resources (copy_present). */ + VkBuffer staging; + VkDeviceMemory staging_mem; + uint8_t *staging_ptr; + VkDeviceSize staging_size; + VkCommandPool pool; + uint32_t pool_family; + VkCommandBuffer *copy_cbs; + VkFence fence; + VkResult status; /* VK_ERROR_OUT_OF_DATE_KHR / SURFACE_LOST once broken */ + pthread_mutex_t lock; + uint64_t presents; + int retired; +}; + +/* Formats every surface offers. */ +extern const VkSurfaceFormatKHR vkb_wsi_formats[]; +extern const uint32_t vkb_wsi_format_count; + +/* Wayland */ +extern const vkb_wsi_backend vkb_wsi_wayland_backend; +int vkb_wl_load(void); +VkResult vkb_wl_surface_extent(vkb_surface *s, VkExtent2D *e); +/* X11 */ +extern const vkb_wsi_backend vkb_wsi_x11_backend; +int vkb_xcb_load(void); +VkResult vkb_xcb_surface_extent(vkb_surface *s, VkExtent2D *e); +void *vkb_xlib_to_xcb(void *dpy); +/* Headless */ +extern const vkb_wsi_backend vkb_wsi_headless_backend; + +/* Helpers in wsi.c */ +uint32_t vkb_drm_format(VkFormat f); +VkResult vkb_wsi_wait_rendering(vkb_swapchain *sc, VkQueue queue, uint32_t index, uint32_t nwait, const VkSemaphore *wait); + +#endif diff --git a/tools/vkbridge/client/wsi_wayland.c b/tools/vkbridge/client/wsi_wayland.c new file mode 100644 index 000000000..4c828753a --- /dev/null +++ b/tools/vkbridge/client/wsi_wayland.c @@ -0,0 +1,558 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Wayland presentation. + * + * - dma-buf: swapchain images are linear exportable images; each becomes a wl_buffer through + * zwp_linux_dmabuf_v1 once, and a present is attach + commit (no copy). This is the path for + * gamescope (and its WSI layer, which turns X11 games' swapchains into Wayland ones). + * - wl_shm: for compositors without dma-buf (KWin compositing in software on the desktop): the + * frame is read back and copied into a shared-memory buffer. + * + * libwayland-client is opened at run time, so the driver loads in programs that never touch + * Wayland. Our objects live on a private event queue, like Mesa's WSI. + */ +#define _GNU_SOURCE +#include "wsi.h" +#include "gen/vkb_client_gen.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +/* ------------------------------------------------------------------ libwayland-client */ + +struct wl_proxy; +struct wl_event_queue; +struct wl_message { + const char *name; + const char *signature; + const struct wl_interface **types; +}; +struct wl_interface { + const char *name; + int version; + int method_count; + const struct wl_message *methods; + int event_count; + const struct wl_message *events; +}; + +static struct { + void *lib; + struct wl_proxy *(*proxy_marshal_constructor)(struct wl_proxy *, uint32_t, const struct wl_interface *, ...); + struct wl_proxy *(*proxy_marshal_constructor_versioned)(struct wl_proxy *, uint32_t, const struct wl_interface *, uint32_t, ...); + void (*proxy_marshal)(struct wl_proxy *, uint32_t, ...); + int (*proxy_add_listener)(struct wl_proxy *, void (**)(void), void *); + void (*proxy_destroy)(struct wl_proxy *); + void *(*proxy_create_wrapper)(void *); + void (*proxy_wrapper_destroy)(void *); + void (*proxy_set_queue)(struct wl_proxy *, struct wl_event_queue *); + uint32_t (*proxy_get_version)(struct wl_proxy *); + struct wl_event_queue *(*display_create_queue)(struct wl_display *); + void (*event_queue_destroy)(struct wl_event_queue *); + int (*display_roundtrip_queue)(struct wl_display *, struct wl_event_queue *); + int (*display_dispatch_queue_pending)(struct wl_display *, struct wl_event_queue *); + int (*display_prepare_read_queue)(struct wl_display *, struct wl_event_queue *); + int (*display_read_events)(struct wl_display *); + void (*display_cancel_read)(struct wl_display *); + int (*display_flush)(struct wl_display *); + int (*display_get_fd)(struct wl_display *); + int (*display_get_error)(struct wl_display *); + const struct wl_interface *registry_iface, *callback_iface, *buffer_iface, *shm_iface, *shm_pool_iface; +} wl; + +int vkb_wl_load(void) +{ + static int state; + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&lock); + if (!state) { + wl.lib = dlopen("libwayland-client.so.0", RTLD_NOW | RTLD_LOCAL); + state = -1; + if (wl.lib) { +#define L(f, n) (*(void **)&wl.f = dlsym(wl.lib, n)) + int ok = 1; + ok &= !!L(proxy_marshal_constructor, "wl_proxy_marshal_constructor"); + ok &= !!L(proxy_marshal_constructor_versioned, "wl_proxy_marshal_constructor_versioned"); + ok &= !!L(proxy_marshal, "wl_proxy_marshal"); + ok &= !!L(proxy_add_listener, "wl_proxy_add_listener"); + ok &= !!L(proxy_destroy, "wl_proxy_destroy"); + ok &= !!L(proxy_create_wrapper, "wl_proxy_create_wrapper"); + ok &= !!L(proxy_wrapper_destroy, "wl_proxy_wrapper_destroy"); + ok &= !!L(proxy_set_queue, "wl_proxy_set_queue"); + ok &= !!L(proxy_get_version, "wl_proxy_get_version"); + ok &= !!L(display_create_queue, "wl_display_create_queue"); + ok &= !!L(event_queue_destroy, "wl_event_queue_destroy"); + ok &= !!L(display_roundtrip_queue, "wl_display_roundtrip_queue"); + ok &= !!L(display_dispatch_queue_pending, "wl_display_dispatch_queue_pending"); + ok &= !!L(display_prepare_read_queue, "wl_display_prepare_read_queue"); + ok &= !!L(display_read_events, "wl_display_read_events"); + ok &= !!L(display_cancel_read, "wl_display_cancel_read"); + ok &= !!L(display_flush, "wl_display_flush"); + ok &= !!L(display_get_fd, "wl_display_get_fd"); + ok &= !!L(display_get_error, "wl_display_get_error"); + ok &= !!L(registry_iface, "wl_registry_interface"); + ok &= !!L(callback_iface, "wl_callback_interface"); + ok &= !!L(buffer_iface, "wl_buffer_interface"); + ok &= !!L(shm_iface, "wl_shm_interface"); + ok &= !!L(shm_pool_iface, "wl_shm_pool_interface"); +#undef L + if (ok) state = 1; + else VKB_ERR("libwayland-client lacks functions this driver needs"); + } else { + VKB_WARN("no libwayland-client: %s", dlerror()); + } + } + pthread_mutex_unlock(&lock); + return state > 0; +} + +/* zwp_linux_dmabuf_v1 / zwp_linux_buffer_params_v1, as wayland-scanner would emit them. */ +static const struct wl_interface params_iface; +static const struct wl_interface *dmabuf_types[8]; +static const struct wl_message dmabuf_requests[] = { + {"destroy", "", dmabuf_types + 0}, + {"create_params", "n", dmabuf_types + 6}, +}; +static const struct wl_message dmabuf_events[] = { + {"format", "u", dmabuf_types + 0}, + {"modifier", "3uuu", dmabuf_types + 0}, +}; +static const struct wl_interface dmabuf_iface = {"zwp_linux_dmabuf_v1", 3, 2, dmabuf_requests, 2, dmabuf_events}; +static const struct wl_message params_requests[] = { + {"destroy", "", dmabuf_types + 0}, + {"add", "huuuuu", dmabuf_types + 0}, + {"create", "iiuu", dmabuf_types + 0}, + {"create_immed", "2niiuu", dmabuf_types + 7}, +}; +static const struct wl_message params_events[] = { + {"created", "n", dmabuf_types + 7}, + {"failed", "", dmabuf_types + 0}, +}; +static const struct wl_interface params_iface = {"zwp_linux_buffer_params_v1", 3, 4, params_requests, 2, params_events}; + +static void init_types(void) +{ + /* types[0..5] stay NULL (no object arguments); [6] = params, [7] = wl_buffer */ + dmabuf_types[6] = ¶ms_iface; + dmabuf_types[7] = wl.buffer_iface; +} + +/* ------------------------------------------------------------------ per-swapchain state */ + +#define WL_DISPLAY_GET_REGISTRY 1 +#define WL_REGISTRY_BIND 0 +#define WL_SURFACE_ATTACH 1 +#define WL_SURFACE_DAMAGE 2 +#define WL_SURFACE_FRAME 3 +#define WL_SURFACE_COMMIT 6 +#define WL_SURFACE_DAMAGE_BUFFER 9 +#define WL_BUFFER_DESTROY 0 +#define WL_SHM_CREATE_POOL 0 +#define WL_SHM_POOL_CREATE_BUFFER 0 +#define WL_SHM_POOL_DESTROY 1 +#define DMABUF_DESTROY 0 +#define DMABUF_CREATE_PARAMS 1 +#define PARAMS_DESTROY 0 +#define PARAMS_ADD 1 +#define PARAMS_CREATE_IMMED 3 +#define WL_SHM_FORMAT_ARGB8888 0u +#define WL_SHM_FORMAT_XRGB8888 1u +#define FOURCC(a, b, c, d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) +#define DRM_XRGB8888 FOURCC('X', 'R', '2', '4') +#define DRM_ARGB8888 FOURCC('A', 'R', '2', '4') +#define DRM_XBGR8888 FOURCC('X', 'B', '2', '4') +#define DRM_ABGR8888 FOURCC('A', 'B', '2', '4') +#define MAX_FMTS 64 + +typedef struct shm_buf { + struct wl_proxy *buffer; + uint8_t *ptr; + int busy; +} shm_buf; + +typedef struct wl_state { + struct wl_display *display; + struct wl_event_queue *queue; + void *display_wrapper; + void *surface_wrapper; + struct wl_proxy *registry; + struct wl_proxy *shm; + struct wl_proxy *dmabuf; + uint32_t dmabuf_version; + uint32_t shm_formats[MAX_FMTS]; + int nshm; + struct { uint32_t format; uint64_t modifier; } dmabuf_mods[256]; + int nmods; + uint32_t dmabuf_formats[MAX_FMTS]; + int nformats; + struct wl_proxy **buffers; /* dma-buf wl_buffers, one per image */ + shm_buf *shm_bufs; + int nshm_bufs; + struct wl_proxy *shm_pool; + uint8_t *shm_map; + size_t shm_size; + uint32_t shm_stride, shm_format; + int swizzle; /* RGBA frame into an ARGB/XRGB shm buffer */ + struct wl_proxy *frame; /* pending frame callback */ + vkb_swapchain *sc; +} wl_state; + +static void registry_global(void *data, struct wl_proxy *reg, uint32_t name, const char *iface, uint32_t version) +{ + wl_state *s = data; + if (!strcmp(iface, "wl_shm") && !s->shm) { + s->shm = wl.proxy_marshal_constructor_versioned(reg, WL_REGISTRY_BIND, wl.shm_iface, 1, name, wl.shm_iface->name, 1, NULL); + } else if (!strcmp(iface, "zwp_linux_dmabuf_v1") && !s->dmabuf && version >= 2) { + uint32_t v = version < 3 ? version : 3; + s->dmabuf = wl.proxy_marshal_constructor_versioned(reg, WL_REGISTRY_BIND, &dmabuf_iface, v, name, dmabuf_iface.name, v, NULL); + s->dmabuf_version = v; + } +} + +static void registry_global_remove(void *data, struct wl_proxy *reg, uint32_t name) +{ + (void)data; + (void)reg; + (void)name; +} + +static const void *registry_listener[] = {(void *)registry_global, (void *)registry_global_remove}; + +static void shm_format(void *data, struct wl_proxy *shm, uint32_t format) +{ + (void)shm; + wl_state *s = data; + if (s->nshm < MAX_FMTS) s->shm_formats[s->nshm++] = format; +} + +static const void *shm_listener[] = {(void *)shm_format}; + +static void dmabuf_format(void *data, struct wl_proxy *d, uint32_t format) +{ + (void)d; + wl_state *s = data; + if (s->nformats < MAX_FMTS) s->dmabuf_formats[s->nformats++] = format; +} + +static void dmabuf_modifier(void *data, struct wl_proxy *d, uint32_t format, uint32_t hi, uint32_t lo) +{ + (void)d; + wl_state *s = data; + if (s->nmods < 256) { + s->dmabuf_mods[s->nmods].format = format; + s->dmabuf_mods[s->nmods].modifier = ((uint64_t)hi << 32) | lo; + s->nmods++; + } +} + +static const void *dmabuf_listener[] = {(void *)dmabuf_format, (void *)dmabuf_modifier}; + +static void buffer_release(void *data, struct wl_proxy *buffer) +{ + (void)buffer; + vkb_swap_image *img = data; + pthread_mutex_lock(&img->chain->lock); + img->busy = 0; + pthread_mutex_unlock(&img->chain->lock); +} + +static const void *buffer_listener[] = {(void *)buffer_release}; + +static void shm_buffer_release(void *data, struct wl_proxy *buffer) +{ + (void)buffer; + ((shm_buf *)data)->busy = 0; +} + +static const void *shm_buffer_listener[] = {(void *)shm_buffer_release}; + +static void frame_done(void *data, struct wl_proxy *cb, uint32_t t) +{ + (void)t; + wl_state *s = data; + if (s->frame == cb) s->frame = NULL; + wl.proxy_destroy(cb); +} + +static const void *frame_listener[] = {(void *)frame_done}; + +/* Dispatch our queue, waiting up to timeout_ns for events. -1 on a dead connection. */ +static int dispatch_timeout(wl_state *s, uint64_t timeout_ns) +{ + if (wl.display_dispatch_queue_pending(s->display, s->queue) < 0) return -1; + while (wl.display_prepare_read_queue(s->display, s->queue) != 0) { + if (wl.display_dispatch_queue_pending(s->display, s->queue) < 0) return -1; + } + if (wl.display_flush(s->display) < 0 && errno != EAGAIN) { + wl.display_cancel_read(s->display); + return -1; + } + struct pollfd p = {wl.display_get_fd(s->display), POLLIN, 0}; + int ms = timeout_ns == UINT64_MAX ? -1 : (int)((timeout_ns + 999999) / 1000000); + int r = poll(&p, 1, ms); + if (r <= 0) { + wl.display_cancel_read(s->display); + return r < 0 && errno != EINTR ? -1 : 0; + } + if (wl.display_read_events(s->display) < 0) return -1; + return wl.display_dispatch_queue_pending(s->display, s->queue) < 0 ? -1 : 1; +} + +static int has_u32(const uint32_t *a, int n, uint32_t v) +{ + for (int i = 0; i < n; i++) + if (a[i] == v) return 1; + return 0; +} + +static int dmabuf_supports(wl_state *s, uint32_t fourcc, uint64_t modifier) +{ + if (s->nmods) { + for (int i = 0; i < s->nmods; i++) { + /* DRM_FORMAT_MOD_INVALID means "implicit": treat as linear for our linear buffers. */ + if (s->dmabuf_mods[i].format == fourcc && + (s->dmabuf_mods[i].modifier == modifier || s->dmabuf_mods[i].modifier == 0x00ffffffffffffffull)) + return 1; + } + return 0; + } + return has_u32(s->dmabuf_formats, s->nformats, fourcc); +} + +/* ------------------------------------------------------------------ backend */ + +VkResult vkb_wl_surface_extent(vkb_surface *s, VkExtent2D *e) +{ + (void)s; + e->width = e->height = 0xFFFFFFFFu; + return VK_SUCCESS; +} + +static void wl_teardown(wl_state *s); + +static VkResult wl_init(vkb_swapchain *sc) +{ + vkb_surface *surface = sc->surface; + wl_state *s = calloc(1, sizeof(*s)); + sc->bdata = s; + s->sc = sc; + s->display = surface->wl_display; + init_types(); + s->queue = wl.display_create_queue(s->display); + s->display_wrapper = wl.proxy_create_wrapper(s->display); + wl.proxy_set_queue(s->display_wrapper, s->queue); + s->surface_wrapper = wl.proxy_create_wrapper(surface->wl_surface); + wl.proxy_set_queue(s->surface_wrapper, s->queue); + s->registry = wl.proxy_marshal_constructor(s->display_wrapper, WL_DISPLAY_GET_REGISTRY, wl.registry_iface, NULL); + wl.proxy_add_listener(s->registry, (void (**)(void))registry_listener, s); + if (wl.display_roundtrip_queue(s->display, s->queue) < 0) return VK_ERROR_SURFACE_LOST_KHR; + if (s->shm) wl.proxy_add_listener(s->shm, (void (**)(void))shm_listener, s); + if (s->dmabuf) wl.proxy_add_listener(s->dmabuf, (void (**)(void))dmabuf_listener, s); + if (wl.display_roundtrip_queue(s->display, s->queue) < 0) return VK_ERROR_SURFACE_LOST_KHR; + + uint32_t w = sc->info.imageExtent.width, h = sc->info.imageExtent.height; + int opaque = sc->info.compositeAlpha == VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + int rgba = sc->info.imageFormat == VK_FORMAT_R8G8B8A8_UNORM || sc->info.imageFormat == VK_FORMAT_R8G8B8A8_SRGB; + if (!sc->copy_present) { + if (!s->dmabuf) { + VKB_INFO("Wayland: the compositor has no zwp_linux_dmabuf_v1"); + return VK_ERROR_FEATURE_NOT_PRESENT; + } + uint32_t fourcc = rgba ? (opaque ? DRM_XBGR8888 : DRM_ABGR8888) : (opaque ? DRM_XRGB8888 : DRM_ARGB8888); + uint64_t mod = sc->images[0].modifier; + if (!dmabuf_supports(s, fourcc, mod)) { + uint32_t alt = rgba ? DRM_ABGR8888 : DRM_ARGB8888; + if (!dmabuf_supports(s, alt, mod)) { + VKB_INFO("Wayland: the compositor takes no %.4s dma-buf with modifier 0x%llx", (char *)&fourcc, (unsigned long long)mod); + return VK_ERROR_FORMAT_NOT_SUPPORTED; + } + fourcc = alt; + } + s->buffers = calloc(sc->count, sizeof(*s->buffers)); + for (uint32_t i = 0; i < sc->count; i++) { + vkb_swap_image *img = &sc->images[i]; + struct wl_proxy *params = wl.proxy_marshal_constructor(s->dmabuf, DMABUF_CREATE_PARAMS, ¶ms_iface, NULL); + wl.proxy_marshal(params, PARAMS_ADD, img->dmabuf_fd, 0u, img->offset, img->stride, (uint32_t)(img->modifier >> 32), + (uint32_t)(img->modifier & 0xffffffffu)); + s->buffers[i] = wl.proxy_marshal_constructor(params, PARAMS_CREATE_IMMED, wl.buffer_iface, NULL, (int32_t)w, (int32_t)h, fourcc, 0u); + wl.proxy_marshal(params, PARAMS_DESTROY); + wl.proxy_destroy(params); + wl.proxy_add_listener(s->buffers[i], (void (**)(void))buffer_listener, img); + } + if (wl.display_roundtrip_queue(s->display, s->queue) < 0 || wl.display_get_error(s->display)) { + VKB_ERR("Wayland: the compositor refused the dma-bufs"); + return VK_ERROR_SURFACE_LOST_KHR; + } + VKB_INFO("Wayland: %u dma-buf buffers %ux%u %.4s, stride %u, modifier 0x%llx", sc->count, w, h, (char *)&fourcc, + sc->images[0].stride, (unsigned long long)sc->images[0].modifier); + return VK_SUCCESS; + } + if (!s->shm) { + VKB_ERR("Wayland: the compositor offers neither dma-buf nor wl_shm"); + return VK_ERROR_SURFACE_LOST_KHR; + } + uint32_t fmt; + if (rgba && has_u32(s->shm_formats, s->nshm, opaque ? DRM_XBGR8888 : DRM_ABGR8888)) { + fmt = opaque ? DRM_XBGR8888 : DRM_ABGR8888; + } else { + fmt = opaque ? WL_SHM_FORMAT_XRGB8888 : WL_SHM_FORMAT_ARGB8888; + s->swizzle = rgba; + } + s->shm_format = fmt; + s->shm_stride = w * 4; + s->nshm_bufs = (int)sc->count + 1; + size_t one = (size_t)s->shm_stride * h; + s->shm_size = one * (size_t)s->nshm_bufs; + int fd = vkb_memfd("vkbridge-wl-shm", s->shm_size); + if (fd < 0) return VK_ERROR_OUT_OF_HOST_MEMORY; + s->shm_map = mmap(NULL, s->shm_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (s->shm_map == MAP_FAILED) { + s->shm_map = NULL; + close(fd); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + s->shm_pool = wl.proxy_marshal_constructor(s->shm, WL_SHM_CREATE_POOL, wl.shm_pool_iface, NULL, fd, (int32_t)s->shm_size); + close(fd); + s->shm_bufs = calloc((size_t)s->nshm_bufs, sizeof(shm_buf)); + for (int i = 0; i < s->nshm_bufs; i++) { + s->shm_bufs[i].ptr = s->shm_map + one * (size_t)i; + s->shm_bufs[i].buffer = wl.proxy_marshal_constructor(s->shm_pool, WL_SHM_POOL_CREATE_BUFFER, wl.buffer_iface, NULL, + (int32_t)(one * (size_t)i), (int32_t)w, (int32_t)h, (int32_t)s->shm_stride, fmt); + wl.proxy_add_listener(s->shm_bufs[i].buffer, (void (**)(void))shm_buffer_listener, &s->shm_bufs[i]); + } + VKB_INFO("Wayland: presenting %ux%u through wl_shm (format 0x%x%s)", w, h, fmt, s->swizzle ? ", swizzled" : ""); + return VK_SUCCESS; +} + +static void copy_frame(wl_state *s, const uint8_t *src, uint8_t *dst, uint32_t w, uint32_t h) +{ + size_t row = (size_t)w * 4; + if (!s->swizzle) { + memcpy(dst, src, row * h); + return; + } + for (size_t i = 0; i < (size_t)w * h; i++) { + dst[i * 4 + 0] = src[i * 4 + 2]; + dst[i * 4 + 1] = src[i * 4 + 1]; + dst[i * 4 + 2] = src[i * 4 + 0]; + dst[i * 4 + 3] = src[i * 4 + 3]; + } +} + +static VkResult wl_present(vkb_swapchain *sc, uint32_t index, const VkPresentRegionKHR *region) +{ + wl_state *s = sc->bdata; + uint32_t w = sc->info.imageExtent.width, h = sc->info.imageExtent.height; + if (wl.display_get_error(s->display)) return VK_ERROR_SURFACE_LOST_KHR; + /* FIFO: one frame per compositor frame callback (bounded, so a hidden window cannot hang + * the game forever). */ + if (sc->info.presentMode == VK_PRESENT_MODE_FIFO_KHR || sc->info.presentMode == VK_PRESENT_MODE_FIFO_RELAXED_KHR) { + struct timespec t0; + clock_gettime(CLOCK_MONOTONIC, &t0); + while (s->frame) { + if (dispatch_timeout(s, 20000000ull) < 0) return VK_ERROR_SURFACE_LOST_KHR; + struct timespec t1; + clock_gettime(CLOCK_MONOTONIC, &t1); + if ((t1.tv_sec - t0.tv_sec) * 1000 + (t1.tv_nsec - t0.tv_nsec) / 1000000 > 250) break; + } + } + struct wl_proxy *buffer; + if (!sc->copy_present) { + buffer = s->buffers[index]; + } else { + shm_buf *b = NULL; + for (int tries = 0; !b && tries < 50; tries++) { + for (int i = 0; i < s->nshm_bufs; i++) + if (!s->shm_bufs[i].busy) { + b = &s->shm_bufs[i]; + break; + } + if (!b && dispatch_timeout(s, 10000000ull) < 0) return VK_ERROR_SURFACE_LOST_KHR; + } + if (!b) return VK_SUCCESS; /* compositor holds every buffer: drop this frame */ + copy_frame(s, sc->staging_ptr, b->ptr, w, h); + b->busy = 1; + buffer = b->buffer; + } + if (sc->info.presentMode == VK_PRESENT_MODE_FIFO_KHR || sc->info.presentMode == VK_PRESENT_MODE_FIFO_RELAXED_KHR) { + if (s->frame) wl.proxy_destroy(s->frame); + s->frame = wl.proxy_marshal_constructor(s->surface_wrapper, WL_SURFACE_FRAME, wl.callback_iface, NULL); + wl.proxy_add_listener(s->frame, (void (**)(void))frame_listener, s); + } + wl.proxy_marshal(s->surface_wrapper, WL_SURFACE_ATTACH, buffer, 0, 0); + int v4 = wl.proxy_get_version(s->surface_wrapper) >= 4; + if (region && region->rectangleCount && region->pRectangles) { + for (uint32_t i = 0; i < region->rectangleCount; i++) { + const VkRectLayerKHR *r = ®ion->pRectangles[i]; + wl.proxy_marshal(s->surface_wrapper, v4 ? WL_SURFACE_DAMAGE_BUFFER : WL_SURFACE_DAMAGE, r->offset.x, r->offset.y, + (int32_t)r->extent.width, (int32_t)r->extent.height); + } + } else { + wl.proxy_marshal(s->surface_wrapper, v4 ? WL_SURFACE_DAMAGE_BUFFER : WL_SURFACE_DAMAGE, 0, 0, (int32_t)w, (int32_t)h); + } + wl.proxy_marshal(s->surface_wrapper, WL_SURFACE_COMMIT); + wl.display_flush(s->display); + if (wl.display_dispatch_queue_pending(s->display, s->queue) < 0) return VK_ERROR_SURFACE_LOST_KHR; + return VK_SUCCESS; +} + +static VkResult wl_wait_free(vkb_swapchain *sc, uint64_t timeout_ns) +{ + wl_state *s = sc->bdata; + int r = dispatch_timeout(s, timeout_ns); + if (r < 0) return VK_ERROR_SURFACE_LOST_KHR; + return r == 0 ? VK_TIMEOUT : VK_SUCCESS; +} + +static void wl_teardown(wl_state *s) +{ + if (!s) return; + vkb_swapchain *sc = s->sc; + if (s->frame) wl.proxy_destroy(s->frame); + if (s->buffers) { + for (uint32_t i = 0; i < sc->count; i++) + if (s->buffers[i]) { + wl.proxy_marshal(s->buffers[i], WL_BUFFER_DESTROY); + wl.proxy_destroy(s->buffers[i]); + } + free(s->buffers); + } + if (s->shm_bufs) { + for (int i = 0; i < s->nshm_bufs; i++) + if (s->shm_bufs[i].buffer) { + wl.proxy_marshal(s->shm_bufs[i].buffer, WL_BUFFER_DESTROY); + wl.proxy_destroy(s->shm_bufs[i].buffer); + } + free(s->shm_bufs); + } + if (s->shm_pool) { + wl.proxy_marshal(s->shm_pool, WL_SHM_POOL_DESTROY); + wl.proxy_destroy(s->shm_pool); + } + if (s->shm_map) munmap(s->shm_map, s->shm_size); + if (s->dmabuf) { + wl.proxy_marshal(s->dmabuf, DMABUF_DESTROY); + wl.proxy_destroy(s->dmabuf); + } + if (s->shm) wl.proxy_destroy(s->shm); + if (s->registry) wl.proxy_destroy(s->registry); + if (s->surface_wrapper) wl.proxy_wrapper_destroy(s->surface_wrapper); + if (s->display_wrapper) wl.proxy_wrapper_destroy(s->display_wrapper); + if (s->display) wl.display_flush(s->display); + if (s->queue) wl.event_queue_destroy(s->queue); + free(s); +} + +static void wl_destroy(vkb_swapchain *sc) +{ + wl_teardown(sc->bdata); + sc->bdata = NULL; +} + +const vkb_wsi_backend vkb_wsi_wayland_backend = {wl_init, wl_present, wl_wait_free, wl_destroy}; diff --git a/tools/vkbridge/client/wsi_x11.c b/tools/vkbridge/client/wsi_x11.c new file mode 100644 index 000000000..a9cd4222b --- /dev/null +++ b/tools/vkbridge/client/wsi_x11.c @@ -0,0 +1,162 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * X11 presentation, software path: the frame is read back and drawn with PutImage. Used only + * when nothing better exists - under gamescope its WSI layer turns X11 swapchains into Wayland + * ones before they reach this driver. libxcb (and libX11-xcb for Xlib surfaces) is opened at + * run time. + */ +#define _GNU_SOURCE +#include "wsi.h" + +#include +#include +#include + +static struct { + void *lib, *x11xcb; + xcb_get_geometry_cookie_t (*get_geometry)(xcb_connection_t *, xcb_drawable_t); + xcb_get_geometry_reply_t *(*get_geometry_reply)(xcb_connection_t *, xcb_get_geometry_cookie_t, xcb_generic_error_t **); + xcb_void_cookie_t (*put_image)(xcb_connection_t *, uint8_t, xcb_drawable_t, xcb_gcontext_t, uint16_t, uint16_t, int16_t, int16_t, + uint8_t, uint8_t, uint32_t, const uint8_t *); + xcb_void_cookie_t (*create_gc)(xcb_connection_t *, xcb_gcontext_t, xcb_drawable_t, uint32_t, const void *); + xcb_void_cookie_t (*free_gc)(xcb_connection_t *, xcb_gcontext_t); + uint32_t (*generate_id)(xcb_connection_t *); + uint32_t (*get_maximum_request_length)(xcb_connection_t *); + int (*flush)(xcb_connection_t *); + int (*connection_has_error)(xcb_connection_t *); + xcb_connection_t *(*xlib_get_xcb)(void *); +} x; + +int vkb_xcb_load(void) +{ + static int state; + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&lock); + if (!state) { + state = -1; + x.lib = dlopen("libxcb.so.1", RTLD_NOW | RTLD_LOCAL); + if (x.lib) { +#define L(f, n) (*(void **)&x.f = dlsym(x.lib, n)) + int ok = 1; + ok &= !!L(get_geometry, "xcb_get_geometry"); + ok &= !!L(get_geometry_reply, "xcb_get_geometry_reply"); + ok &= !!L(put_image, "xcb_put_image"); + ok &= !!L(create_gc, "xcb_create_gc"); + ok &= !!L(free_gc, "xcb_free_gc"); + ok &= !!L(generate_id, "xcb_generate_id"); + ok &= !!L(get_maximum_request_length, "xcb_get_maximum_request_length"); + ok &= !!L(flush, "xcb_flush"); + ok &= !!L(connection_has_error, "xcb_connection_has_error"); +#undef L + if (ok) state = 1; + } + x.x11xcb = dlopen("libX11-xcb.so.1", RTLD_NOW | RTLD_LOCAL); + if (x.x11xcb) *(void **)&x.xlib_get_xcb = dlsym(x.x11xcb, "XGetXCBConnection"); + if (state < 0) VKB_WARN("no usable libxcb: X11 presentation unavailable"); + } + pthread_mutex_unlock(&lock); + return state > 0; +} + +void *vkb_xlib_to_xcb(void *dpy) +{ + if (!vkb_xcb_load() || !x.xlib_get_xcb) return NULL; + return x.xlib_get_xcb(dpy); +} + +static int geometry(vkb_surface *s, uint32_t *w, uint32_t *h, uint8_t *depth) +{ + xcb_get_geometry_reply_t *g = x.get_geometry_reply(s->xcb_conn, x.get_geometry(s->xcb_conn, s->xcb_window), NULL); + if (!g) return 0; + *w = g->width; + *h = g->height; + if (depth) *depth = g->depth; + free(g); + return 1; +} + +VkResult vkb_xcb_surface_extent(vkb_surface *s, VkExtent2D *e) +{ + uint32_t w, h; + if (!geometry(s, &w, &h, NULL)) return VK_ERROR_SURFACE_LOST_KHR; + e->width = w; + e->height = h; + return VK_SUCCESS; +} + +typedef struct x11_state { + xcb_gcontext_t gc; + uint8_t depth; + uint8_t *swz; +} x11_state; + +static VkResult x11_init(vkb_swapchain *sc) +{ + vkb_surface *s = sc->surface; + x11_state *st = calloc(1, sizeof(*st)); + sc->bdata = st; + uint32_t w, h; + if (!geometry(s, &w, &h, &st->depth)) return VK_ERROR_SURFACE_LOST_KHR; + if (st->depth != 24 && st->depth != 32) { + VKB_ERR("X11: window depth %u is not supported by the software present path", st->depth); + return VK_ERROR_SURFACE_LOST_KHR; + } + st->gc = x.generate_id(s->xcb_conn); + x.create_gc(s->xcb_conn, st->gc, s->xcb_window, 0, NULL); + VKB_INFO("X11: presenting %ux%u by PutImage (software path)", sc->info.imageExtent.width, sc->info.imageExtent.height); + return VK_SUCCESS; +} + +static VkResult x11_present(vkb_swapchain *sc, uint32_t index, const VkPresentRegionKHR *region) +{ + (void)index; + (void)region; + vkb_surface *s = sc->surface; + x11_state *st = sc->bdata; + if (x.connection_has_error(s->xcb_conn)) return VK_ERROR_SURFACE_LOST_KHR; + uint32_t w = sc->info.imageExtent.width, h = sc->info.imageExtent.height; + const uint8_t *src = sc->staging_ptr; + int rgba = sc->info.imageFormat == VK_FORMAT_R8G8B8A8_UNORM || sc->info.imageFormat == VK_FORMAT_R8G8B8A8_SRGB; + if (rgba) { + if (!st->swz) st->swz = malloc((size_t)w * h * 4); + for (size_t i = 0; i < (size_t)w * h; i++) { + st->swz[i * 4 + 0] = src[i * 4 + 2]; + st->swz[i * 4 + 1] = src[i * 4 + 1]; + st->swz[i * 4 + 2] = src[i * 4 + 0]; + st->swz[i * 4 + 3] = src[i * 4 + 3]; + } + src = st->swz; + } + /* Split into requests that fit the server's maximum request length (in 4-byte units). */ + size_t max = (size_t)x.get_maximum_request_length(s->xcb_conn) * 4; + size_t row = (size_t)w * 4; + uint32_t rows = max > 64 + row ? (uint32_t)((max - 64) / row) : 1; + for (uint32_t y = 0; y < h; y += rows) { + uint32_t n = h - y < rows ? h - y : rows; + x.put_image(s->xcb_conn, XCB_IMAGE_FORMAT_Z_PIXMAP, s->xcb_window, st->gc, (uint16_t)w, (uint16_t)n, 0, (int16_t)y, 0, st->depth, + (uint32_t)(row * n), src + row * y); + } + x.flush(s->xcb_conn); + uint32_t cw, ch; + if (geometry(s, &cw, &ch, NULL) && (cw != w || ch != h)) sc->status = VK_SUBOPTIMAL_KHR; + return VK_SUCCESS; +} + +static VkResult x11_wait_free(vkb_swapchain *sc, uint64_t timeout_ns) +{ + (void)sc; + (void)timeout_ns; + return VK_TIMEOUT; /* images are free as soon as their present returns */ +} + +static void x11_destroy(vkb_swapchain *sc) +{ + x11_state *st = sc->bdata; + if (!st) return; + if (st->gc) x.free_gc(sc->surface->xcb_conn, st->gc); + free(st->swz); + free(st); + sc->bdata = NULL; +} + +const vkb_wsi_backend vkb_wsi_x11_backend = {x11_init, x11_present, x11_wait_free, x11_destroy}; diff --git a/tools/vkbridge/codegen/gen_vkbridge.py b/tools/vkbridge/codegen/gen_vkbridge.py new file mode 100644 index 000000000..614f0eac6 --- /dev/null +++ b/tools/vkbridge/codegen/gen_vkbridge.py @@ -0,0 +1,1387 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-3.0-or-later +""" +Generates the Vulkan bridge's wire code from the pinned Khronos registry (vk.xml 1.4.341). + +Output (into ../common/gen/): + vkb_gen.h command ids, protocol hash, dispatch table, prototypes + vkb_gen_structs.c struct encoders/decoders (both sides; client-only parts under VKB_CLIENT) + vkb_gen_client.c client RPC stubs ("wire" functions) + default entry points + name table + vkb_gen_server.c server handlers + dispatch table loaders + +Wire rules (the C runtime in common/vkb_wire.[ch] implements the primitives): + * A struct is sent as its raw bytes (8-byte aligned in the stream), followed by its "fixups": + every pointer member's pointee, in member order. Non-dispatchable handles are u64 values that + are valid on the server as they are; dispatchable handles are patched to the server's value by + the client. The decoder reads the raw bytes back and replaces every pointer member. + * pNext chains are sent element by element (u32 sType + struct), structs this generator does + not know are skipped (logged once by the runtime), terminated by VKB_CHAIN_END. + * Arrays always carry their element count explicitly; pointers carry a presence byte. + * Output structs travel as a "template" (raw + chain of sType/raw) to the server, which fills + them, and come back as raw + chain; the client copies them into the caller's memory keeping + the caller's own pNext pointers. +""" +import hashlib +import os +import re +import sys +import xml.etree.ElementTree as ET + +HERE = os.path.dirname(os.path.abspath(__file__)) +REG = os.path.join(HERE, '..', 'third_party', 'Vulkan-Headers-1.4.341', 'registry', 'vk.xml') +OUT = os.path.join(HERE, '..', 'common', 'gen') + +# -------------------------------------------------------------------------------------------- +# What is bridged. + +# Newer registries split each version into BASE/COMPUTE/GRAPHICS parts as well. +CORE_FEATURES = [f'VK_{part}VERSION_1_{minor}' for minor in range(5) for part in ('', 'BASE_', 'COMPUTE_', 'GRAPHICS_')] + +# Extensions whose name contains one of these are never bridged: platform-specific, display +# control, ray tracing, video, or designs that hand raw host pointers/callbacks to the driver. +EXT_BLOCK_SUBSTR = [ + 'video', 'ray_tracing', 'acceleration_structure', 'ray_query', 'win32', 'android', 'fuchsia', + 'metal', '_ggp', 'GGP', 'screen', 'directfb', 'macos', 'ios_', 'MVK', 'NN_', '_vi_', 'display', + 'xlib_xrandr', 'descriptor_buffer', 'shader_object', 'micromap', 'deferred_host_operations', + 'performance_query', 'device_generated_commands', 'mesh_shader', 'device_memory_report', + 'device_address_binding_report', 'pipeline_properties', 'debug_report', 'debug_marker', + 'validation', 'portability', 'direct_driver_loading', 'full_screen_exclusive', + 'pipeline_executable_properties', 'external_memory_host', 'metal_objects', + 'present_wait', 'present_id', 'display_timing', 'shared_presentable_image', + 'swapchain_maintenance1', 'surface_maintenance1', 'hdr_metadata', 'present_barrier', + 'image_compression_control_swapchain', 'surface_protected_capabilities', + 'pipeline_library_group_handles', 'opacity', 'fragment_density_map_offset', + 'external_memory_rdma', 'external_memory_sci', 'external_sci', 'cluster_culling', + 'multiview_per_view', 'shader_enqueue', 'AMDX', 'cuda', 'CUDA', 'QNX', 'optical_flow', + 'low_latency', 'memory_decompression', 'copy_memory_indirect', 'frame_boundary', + 'device_fault', 'descriptor_set_host_mapping', 'descriptor_heap', 'present_timing', + 'pipeline_binary', 'data_graph', 'host_image_copy', +] +# Structs never sent (callbacks into the app, or meaningless across processes); a pNext chain +# carrying one is sent without it. +STRUCT_BLOCK = {'VkAllocationCallbacks', 'VkDebugUtilsMessengerCreateInfoEXT', + 'VkDebugReportCallbackCreateInfoEXT', 'VkValidationFeaturesEXT', + 'VkValidationFlagsEXT', 'VkLayerSettingsCreateInfoEXT', + 'VkDirectDriverLoadingListLUNARG', 'VkExportMetalObjectCreateInfoEXT'} +EXT_AUTHORS = ('KHR', 'EXT', 'ARM', 'VALVE', 'GOOGLE', 'MESA', 'IMG') +# Implemented by the client itself (no server round trip, or not on the wire at all). +CLIENT_EXTENSIONS = { + 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_xcb_surface', + 'VK_KHR_xlib_surface', 'VK_EXT_headless_surface', 'VK_KHR_get_surface_capabilities2', + 'VK_EXT_swapchain_colorspace', 'VK_KHR_incremental_present', 'VK_EXT_debug_utils', + 'VK_KHR_swapchain_mutable_format', +} +# Extension commands handled entirely client-side (no wire code generated). +LOCAL_COMMANDS_PREFIX = ('vkCreateDebugUtilsMessengerEXT', 'vkDestroyDebugUtilsMessengerEXT', + 'vkSubmitDebugUtilsMessageEXT') + +# Commands whose client entry point is hand-written (the generated wire stub may still be used). +CLIENT_CUSTOM = { + 'vkAllocateDescriptorSets', 'vkResetDescriptorPool', 'vkDestroyDescriptorPool', 'vkCreateDescriptorPool', + 'vkCreateDescriptorSetLayout', 'vkDestroyDescriptorSetLayout', + 'vkCreateInstance', 'vkDestroyInstance', 'vkEnumerateInstanceExtensionProperties', + 'vkEnumerateInstanceLayerProperties', 'vkEnumerateInstanceVersion', 'vkGetInstanceProcAddr', + 'vkGetDeviceProcAddr', 'vkEnumeratePhysicalDevices', 'vkEnumeratePhysicalDeviceGroups', + 'vkEnumerateDeviceExtensionProperties', 'vkEnumerateDeviceLayerProperties', + 'vkGetPhysicalDeviceFeatures', 'vkGetPhysicalDeviceFeatures2', + 'vkGetPhysicalDeviceProperties', 'vkGetPhysicalDeviceProperties2', + 'vkGetPhysicalDeviceFormatProperties', 'vkGetPhysicalDeviceFormatProperties2', + 'vkGetPhysicalDeviceImageFormatProperties', 'vkGetPhysicalDeviceImageFormatProperties2', + 'vkGetPhysicalDeviceMemoryProperties', 'vkGetPhysicalDeviceMemoryProperties2', + 'vkGetPhysicalDeviceSparseImageFormatProperties', 'vkGetPhysicalDeviceSparseImageFormatProperties2', + 'vkGetPhysicalDeviceToolProperties', + 'vkCreateDevice', 'vkDestroyDevice', 'vkGetDeviceQueue', 'vkGetDeviceQueue2', + 'vkAllocateCommandBuffers', 'vkFreeCommandBuffers', 'vkDestroyCommandPool', 'vkResetCommandPool', + 'vkBeginCommandBuffer', 'vkEndCommandBuffer', 'vkResetCommandBuffer', + 'vkAllocateMemory', 'vkFreeMemory', 'vkMapMemory', 'vkUnmapMemory', 'vkMapMemory2KHR', + 'vkUnmapMemory2KHR', 'vkFlushMappedMemoryRanges', 'vkInvalidateMappedMemoryRanges', + 'vkGetBufferMemoryRequirements', 'vkGetBufferMemoryRequirements2', + 'vkGetImageMemoryRequirements', 'vkGetImageMemoryRequirements2', + 'vkGetDeviceBufferMemoryRequirements', 'vkGetDeviceImageMemoryRequirements', + 'vkGetMemoryFdPropertiesKHR', 'vkCreateBuffer', 'vkCreateImage', + 'vkCreateDescriptorUpdateTemplate', 'vkDestroyDescriptorUpdateTemplate', + 'vkUpdateDescriptorSetWithTemplate', 'vkCmdPushDescriptorSetWithTemplateKHR', + 'vkCreatePrivateDataSlot', 'vkDestroyPrivateDataSlot', 'vkSetPrivateData', 'vkGetPrivateData', + 'vkQueueSubmit', 'vkQueueSubmit2', 'vkQueueWaitIdle', 'vkDeviceWaitIdle', 'vkWaitForFences', + 'vkGetFenceStatus', 'vkWaitSemaphores', 'vkGetSemaphoreCounterValue', + 'vkGetPhysicalDeviceExternalBufferProperties', 'vkGetPhysicalDeviceQueueFamilyProperties', + 'vkGetPhysicalDeviceQueueFamilyProperties2', 'vkSetDebugUtilsObjectNameEXT', + 'vkSetDebugUtilsObjectTagEXT', 'vkQueueBeginDebugUtilsLabelEXT', 'vkQueueEndDebugUtilsLabelEXT', + 'vkQueueInsertDebugUtilsLabelEXT', 'vkCmdBeginDebugUtilsLabelEXT', 'vkCmdEndDebugUtilsLabelEXT', + 'vkCmdInsertDebugUtilsLabelEXT', 'vkCmdExecuteCommands', 'vkGetImageSubresourceLayout', + 'vkGetPhysicalDeviceMultisamplePropertiesEXT', 'vkGetDeviceImageSparseMemoryRequirements', + 'vkGetImageSparseMemoryRequirements', 'vkGetImageSparseMemoryRequirements2', + 'vkBindBufferMemory', 'vkBindBufferMemory2', 'vkBindImageMemory', 'vkBindImageMemory2', + 'vkDestroyBuffer', 'vkDestroyImage', 'vkGetPhysicalDeviceExternalSemaphoreProperties', + 'vkGetPhysicalDeviceExternalFenceProperties', } +# Commands whose server handler is hand-written (server/*.c defines vkb_sv_). +SERVER_CUSTOM = { + 'vkCreateInstance', 'vkDestroyInstance', 'vkCreateDevice', 'vkDestroyDevice', + 'vkAllocateMemory', 'vkFreeMemory', + 'vkFlushMappedMemoryRanges', 'vkInvalidateMappedMemoryRanges', 'vkEndCommandBuffer', +} + +# VkResult commands sent without waiting (VK_SUCCESS returned at once; a failure is logged by the +# server). What an app does next with their objects is ordered after them by the protocol. +ASYNC_RESULT = {'vkQueueSubmit', 'vkQueueSubmit2', 'vkResetDescriptorPool', 'vkResetCommandPool', + 'vkResetCommandBuffer', 'vkResetFences', 'vkResetEvent', 'vkSetEvent', 'vkFreeDescriptorSets', + 'vkBindBufferMemory', 'vkBindBufferMemory2', 'vkBindImageMemory', 'vkBindImageMemory2'} + +# File descriptors: (struct, member) and (command, param). +FD_MEMBERS = {('VkImportMemoryFdInfoKHR', 'fd'), ('VkImportSemaphoreFdInfoKHR', 'fd'), + ('VkImportFenceFdInfoKHR', 'fd')} +FD_PARAMS = {('vkGetMemoryFdKHR', 'pFd'), ('vkGetSemaphoreFdKHR', 'pFd'), ('vkGetFenceFdKHR', 'pFd'), + ('vkGetMemoryFdPropertiesKHR', 'fd')} + +# Pointer members whose validity depends on other members (vk.xml "noautovalidity"): +# a C condition (s = the struct) under which the pointer is read. Anything else marked +# noautovalidity is read whenever it is non-NULL. +PTR_CONDITIONS = { + ('VkWriteDescriptorSet', 'pImageInfo'): 'vkb_desc_has_image(s->descriptorType)', + ('VkWriteDescriptorSet', 'pBufferInfo'): 'vkb_desc_has_buffer(s->descriptorType)', + ('VkWriteDescriptorSet', 'pTexelBufferView'): 'vkb_desc_has_texel(s->descriptorType)', + ('VkBufferCreateInfo', 'pQueueFamilyIndices'): 's->sharingMode == VK_SHARING_MODE_CONCURRENT', + ('VkImageCreateInfo', 'pQueueFamilyIndices'): 's->sharingMode == VK_SHARING_MODE_CONCURRENT', + ('VkPhysicalDeviceImageDrmFormatModifierInfoEXT', 'pQueueFamilyIndices'): 's->sharingMode == VK_SHARING_MODE_CONCURRENT', + ('VkDescriptorSetLayoutBinding', 'pImmutableSamplers'): '(s->descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || s->descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)', + ('VkGraphicsPipelineCreateInfo', 'pTessellationState'): 'vkb_gp_has_tess(s)', + ('VkCommandBufferBeginInfo', 'pInheritanceInfo'): 'vkb_cb_begin_is_secondary(s)', + ('VkFramebufferCreateInfo', 'pAttachments'): '!(s->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT)', + ('VkImageCompressionControlEXT', 'pFixedRateFlags'): 's->flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT', +} + +# Lengths written as LaTeX in vk.xml, as C over the struct. +ALTLEN = { + ('VkShaderModuleCreateInfo', 'pCode'): ('bytes', 's->codeSize'), + ('VkPipelineMultisampleStateCreateInfo', 'pSampleMask'): ('count', '(((uint32_t)s->rasterizationSamples + 31) / 32)'), + ('VkAccelerationStructureVersionInfoKHR', 'pVersionData'): ('count', '2 * VK_UUID_SIZE'), + ('vkCmdSetSampleMaskEXT', 'pSampleMask'): ('count', '(((uint32_t)s->samples + 31) / 32)'), +} + +SCALARS = { + 'uint8_t': 1, 'int8_t': 1, 'uint16_t': 2, 'int16_t': 2, 'uint32_t': 4, 'int32_t': 4, + 'uint64_t': 8, 'int64_t': 8, 'float': 4, 'double': 8, 'size_t': 8, 'int': 4, 'char': 1, + 'VkBool32': 4, 'VkDeviceSize': 8, 'VkDeviceAddress': 8, 'VkFlags': 4, 'VkFlags64': 8, + 'VkSampleMask': 4, +} + +# -------------------------------------------------------------------------------------------- + +def api_ok(e): + a = e.get('api') + return a is None or 'vulkan' in a.split(',') + + +class Member: + def __init__(self, el, owner): + self.owner = owner + self.type = el.find('type').text + self.name = el.find('name').text + pre = (el.text or '') + tail = el.find('type').tail or '' + self.const = 'const' in pre + self.ptr = tail.count('*') + ntail = el.find('name').tail or '' + self.fixed = ntail.strip().startswith('[') + self.bitfield = ntail.strip().startswith(':') + self.len = el.get('len') + self.altlen = el.get('altlen') + self.optional = el.get('optional') + self.noauto = el.get('noautovalidity') == 'true' + self.values = el.get('values') + self.decl = ''.join(el.itertext()).strip() + # e.g. "const VkFoo* pBar" - kept for the C prototypes. + self.decl = re.sub(r'\s+', ' ', self.decl) + + +class Registry: + def __init__(self, path): + self.root = ET.parse(path).getroot() + self.types = {} + self.aliases = {} + self.handles = {} + self.structs = {} + self.funcptrs = set() + self.enums = set() + self.bitmasks = {} + self.basetypes = {} + for t in self.root.find('types'): + if t.tag != 'type' or not api_ok(t): + continue + cat = t.get('category') + name = t.get('name') or (t.find('name').text if t.find('name') is not None else None) + if name is None: + continue + if t.get('alias'): + self.aliases[name] = t.get('alias') + continue + self.types[name] = (cat, t) + if cat == 'handle': + self.handles[name] = t.find('type').text == 'VK_DEFINE_HANDLE' + elif cat in ('struct', 'union'): + self.structs[name] = t + elif cat == 'funcpointer': + self.funcptrs.add(name) + elif cat == 'enum': + self.enums.add(name) + elif cat == 'bitmask': + bt = t.find('type').text + self.bitmasks[name] = 8 if bt == 'VkFlags64' else 4 + elif cat == 'basetype': + tt = t.find('type') + self.basetypes[name] = tt.text if tt is not None else None + self.commands = {} + self.cmd_alias = {} + for c in self.root.find('commands'): + if not api_ok(c): + continue + if c.get('alias'): + self.cmd_alias[c.get('name')] = c.get('alias') + continue + proto = c.find('proto') + name = proto.find('name').text + params = [Member(p, name) for p in c.findall('param') if api_ok(p)] + self.commands[name] = {'ret': proto.find('type').text, 'params': params, 'el': c} + self.struct_members = {} + for n, t in self.structs.items(): + self.struct_members[n] = [Member(m, n) for m in t.findall('member') if api_ok(m)] + + def canon(self, name): + while name in self.aliases: + name = self.aliases[name] + return name + + def canon_cmd(self, name): + while name in self.cmd_alias: + name = self.cmd_alias[name] + return name + + +reg = Registry(REG) +# Hand-maintained name lists may use extension names that a newer registry made aliases of core. +CLIENT_CUSTOM = {reg.canon_cmd(c) for c in CLIENT_CUSTOM} +SERVER_CUSTOM = {reg.canon_cmd(c) for c in SERVER_CUSTOM} +FD_PARAMS = {(reg.canon_cmd(c), p) for c, p in FD_PARAMS} + +# -------------------------------------------------------------------------------------------- +# Which commands/structs are in. + +included_cmds = set() +cmd_aliases_included = {} # alias name -> canonical +ext_info = {} # ext name -> (type, [commands]) +cmd_origin = {} # canonical cmd -> 'core' or ext name +cmd_version = {} # canonical cmd -> core version (major, minor) that introduced it + + +def require_blocks(el): + for req in el.findall('require'): + if not api_ok(req): + continue + yield req + + +for f in reg.root.findall('feature'): + if f.get('name') not in CORE_FEATURES or not api_ok(f): + continue + for req in require_blocks(f): + ver = tuple(int(x) for x in f.get('number').split('.')) + for c in req.findall('command'): + n = reg.canon_cmd(c.get('name')) + included_cmds.add(n) + cmd_origin.setdefault(n, 'core') + if c.get('name') == n: + cmd_version[n] = min(cmd_version.get(n, ver), ver) + if c.get('name') != n: + cmd_aliases_included[c.get('name')] = n + + +def ext_allowed(e): + name = e.get('name') + if 'vulkan' not in (e.get('supported') or '').split(','): + return False + if e.get('platform') and name not in CLIENT_EXTENSIONS: + return False + if not name.startswith('VK_'): + return False + author = name.split('_')[1] + if author not in EXT_AUTHORS: + return False + if name in CLIENT_EXTENSIONS: + return True + for b in EXT_BLOCK_SUBSTR: + if b in name: + return False + return True + + +def dep_blocked(dep): + for name in re.findall(r'VK_[A-Za-z0-9_]+', dep): + if name.startswith('VK_VERSION_'): + continue + author = name.split('_')[1] + if author not in EXT_AUTHORS or any(b in name for b in EXT_BLOCK_SUBSTR): + if name not in CLIENT_EXTENSIONS: + return True + return False + + +bridged_exts = [] +for e in reg.root.find('extensions'): + if not ext_allowed(e): + continue + name = e.get('name') + cmds = [] + for req in require_blocks(e): + dep = req.get('depends') or req.get('feature') or req.get('extension') or '' + # A require block that pulls in a blocked extension's commands is skipped. + if dep_blocked(dep): + continue + for c in req.findall('command'): + cmds.append(c.get('name')) + ext_info[name] = (e.get('type'), cmds) + bridged_exts.append(name) + for cn in cmds: + n = reg.canon_cmd(cn) + included_cmds.add(n) + cmd_origin.setdefault(n, name) + if cn != n: + cmd_aliases_included[cn] = n + +# Every alias of an included command, wherever it was defined. +for a, c in reg.cmd_alias.items(): + cc = reg.canon_cmd(a) + if cc in included_cmds: + cmd_aliases_included[a] = cc + +# WSI / surface commands are client-only: no wire code. +CLIENT_ONLY_EXT = CLIENT_EXTENSIONS +client_only_cmds = set() +for en in CLIENT_ONLY_EXT: + if en in ext_info: + for cn in ext_info[en][1]: + client_only_cmds.add(reg.canon_cmd(cn)) +# The device-group WSI commands from core 1.1 too. +client_only_cmds |= {'vkGetDeviceGroupPresentCapabilitiesKHR', 'vkGetDeviceGroupSurfacePresentModesKHR', + 'vkGetPhysicalDevicePresentRectanglesKHR', 'vkAcquireNextImage2KHR'} +# Local-only (no wire): private data, debug utils. +client_only_cmds |= {'vkCreatePrivateDataSlot', 'vkDestroyPrivateDataSlot', 'vkSetPrivateData', + 'vkGetPrivateData', 'vkSetDebugUtilsObjectNameEXT', 'vkSetDebugUtilsObjectTagEXT', + 'vkQueueBeginDebugUtilsLabelEXT', 'vkQueueEndDebugUtilsLabelEXT', + 'vkQueueInsertDebugUtilsLabelEXT', 'vkCmdBeginDebugUtilsLabelEXT', + 'vkCmdEndDebugUtilsLabelEXT', 'vkCmdInsertDebugUtilsLabelEXT', + 'vkGetInstanceProcAddr', 'vkGetDeviceProcAddr', + 'vkUpdateDescriptorSetWithTemplate', 'vkCmdPushDescriptorSetWithTemplateKHR', + 'vkMapMemory', 'vkUnmapMemory', 'vkMapMemory2KHR', 'vkUnmapMemory2KHR', + 'vkEnumerateDeviceLayerProperties', 'vkCmdPushDescriptorSetWithTemplate2', + # Host image copy hands the driver raw host pointers; it is reported unsupported. + 'vkCopyMemoryToImage', 'vkCopyImageToMemory', 'vkCopyImageToImage', 'vkTransitionImageLayout'} + +client_only_cmds = {reg.canon_cmd(c) for c in client_only_cmds} +wire_cmds = sorted(c for c in included_cmds if c not in client_only_cmds) +# Server-only entries in the dispatch table (used by the server itself, never on the wire). +SERVER_DISPATCH_EXTRA = ['vkMapMemory', 'vkUnmapMemory', 'vkGetMemoryHostPointerPropertiesEXT', + 'vkUpdateDescriptorSetWithTemplate', 'vkCmdPushDescriptorSetWithTemplateKHR'] +dispatch_cmds = sorted(set(wire_cmds) | {reg.canon_cmd(c) for c in SERVER_DISPATCH_EXTRA}) +# Wire-only helpers that are not Vulkan commands (handled by hand on both sides). +EXTRA_WIRE = ['vkbHello', 'vkbQueryServer', 'vkbDescUpdateRaw', 'vkbPushDescRaw', 'vkbAllocDescSets'] + +# -------------------------------------------------------------------------------------------- +# Struct closure: every struct reachable from wire commands (params, members, pNext extenders). + +def is_dhandle(t): + t = reg.canon(t) + return reg.handles.get(t) is True + + +def is_ndhandle(t): + t = reg.canon(t) + return reg.handles.get(t) is False + + +def is_struct(t): + return reg.canon(t) in reg.structs + + +def struct_extenders(): + ext = {} + for n, t in reg.structs.items(): + se = t.get('structextends') + if se: + for b in se.split(','): + ext.setdefault(b, []).append(n) + return ext + + +EXTENDERS = struct_extenders() + +# Struct types that may appear in our builds (core or a bridged extension, incl. client ones). +avail_types = set() +for f in reg.root.findall('feature'): + if f.get('name') not in CORE_FEATURES or not api_ok(f): + continue + for req in require_blocks(f): + for t in req.findall('type'): + avail_types.add(t.get('name')) +for e in reg.root.find('extensions'): + if e.get('name') in ext_info: + for req in require_blocks(e): + dep = req.get('depends') or '' + if dep_blocked(dep): + continue + for t in req.findall('type'): + avail_types.add(t.get('name')) +avail_types = {reg.canon(t) for t in avail_types} | {t for t in avail_types} +# Base types every build has. +avail_types |= {'VkBaseInStructure', 'VkBaseOutStructure'} + +needed_structs = set() + + +def stype_of(sname): + for m in reg.struct_members[sname]: + if m.name == 'sType' and m.values: + return m.values + return None + + +def need_struct(t): + t = reg.canon(t) + if t not in reg.structs or t in needed_structs or t in STRUCT_BLOCK: + return + if t not in avail_types: + return + needed_structs.add(t) + for m in reg.struct_members[t]: + if is_struct(m.type): + need_struct(m.type) + for x in EXTENDERS.get(t, []): + if x in avail_types: + need_struct(x) + + +for c in wire_cmds: + for p in reg.commands[c]['params']: + need_struct(p.type) +# Client WSI structs that the client encodes for nothing - still needed for chain skipping. +for x in list(EXTENDERS): + pass + +problems = [] + + +def check_out_struct(t, seen=None): + t = reg.canon(t) + if t not in reg.structs: + return + seen = seen or set() + if t in seen: + return + seen.add(t) + for m in reg.struct_members[t]: + if m.name != 'pNext' and (m.ptr or is_dhandle(m.type)): + problems.append(f'out struct {t}.{m.name} has a pointer/dispatchable handle') + if is_struct(m.type): + check_out_struct(m.type, seen) + for x in EXTENDERS.get(t, []): + if x in needed_structs: + check_out_struct(x, seen) + +for c in wire_cmds: + for p in reg.commands[c]['params']: + if p.ptr and not p.const and reg.canon(p.type) in reg.structs: + check_out_struct(p.type) + +# -------------------------------------------------------------------------------------------- +# Struct classification. + +pod_cache = {} + + +def is_pod(t): + """No pointer and no dispatchable handle anywhere inside (raw copy is the whole encoding).""" + t = reg.canon(t) + if t in pod_cache: + return pod_cache[t] + if t not in reg.structs: + return True + pod_cache[t] = True + res = True + for m in reg.struct_members[t]: + if m.ptr or is_dhandle(m.type) or m.type in reg.funcptrs or m.bitfield: + res = False + elif is_struct(m.type) and not is_pod(m.type): + res = False + pod_cache[t] = res + return res + + +def has_pnext(t): + return any(m.name == 'pNext' for m in reg.struct_members[reg.canon(t)]) + + +def elem_size_expr(t): + return f'sizeof({t})' + + +def len_expr(owner, m, prefix): + """C expression for element count (or byte count, for void) of member/param m.""" + key = (owner, m.name) + if key in ALTLEN: + kind, expr = ALTLEN[key] + return kind, expr.replace('s->', prefix) + ln = m.len + if ln is None: + return None, None + parts = ln.split(',') + first = parts[0] + if first == 'null-terminated': + return 'string', None + if first.startswith('latexmath'): + problems.append(f'{owner}.{m.name}: latexmath len {ln}') + return None, None + expr = first.replace('->', '->') + # members of the same struct / params of the same command + e = re.sub(r'\b([a-zA-Z_][a-zA-Z0-9_]*)\b', lambda mm: (prefix + mm.group(1)) if mm.group(1)[0].islower() or mm.group(1)[0] == 'p' else mm.group(1), expr, count=1) + if len(parts) > 1 and parts[1] == 'null-terminated': + return 'strarray', e + return 'count', e + + +# -------------------------------------------------------------------------------------------- +# Code emission helpers. + +class W: + def __init__(self): + self.lines = [] + self.ind = 0 + + def __call__(self, s=''): + if s.startswith('}') and self.ind > 0: + self.ind -= 1 + self.lines.append((' ' * self.ind + s) if s else '') + if s.endswith('{'): + self.ind += 1 + elif s.startswith('{') and s.count('{') > s.count('}'): + self.ind += 1 + + def text(self): + return '\n'.join(self.lines) + '\n' + + +HEADER = '/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */\n' + +# Ordered list of structs (deterministic). +STRUCTS = sorted(needed_structs) +CHAIN_STRUCTS = [s for s in STRUCTS if stype_of(s) and has_pnext(s)] + + +def guard_for(t): + return None + + +# Struct encoders ----------------------------------------------------------------------------- + +sw = W() +sw(HEADER) +sw('#include "vkb_gen.h"') +sw('#include "../vkb_wire.h"') +sw('#include ') +sw() + + +def fixups(sname): + """Members needing work beyond the raw copy.""" + out = [] + for m in reg.struct_members[sname]: + if m.name == 'pNext': + out.append(('pnext', m)) + elif m.bitfield: + problems.append(f'{sname}.{m.name}: bitfield') + elif m.type in reg.funcptrs: + out.append(('funcptr', m)) + elif m.ptr: + out.append(('ptr', m)) + elif is_dhandle(m.type): + out.append(('dhandle', m)) + elif is_struct(m.type) and not is_pod(m.type): + out.append(('embed', m)) + elif (sname, m.name) in FD_MEMBERS: + out.append(('fd', m)) + return out + + +def emit_ptr_enc(w, owner, m, src, prefix, side): + """Encode pointee of pointer member/param m (expression src). side: 'in' only.""" + t = reg.canon(m.type) + cond = PTR_CONDITIONS.get((owner, m.name)) + kind, cnt = len_expr(owner, m, prefix) + guard = f'{src}' + (f' && ({cond.replace("s->", prefix)})' if cond else '') + if m.ptr == 1 and t == 'char' and kind == 'string': + w(f'vkb_enc_str(e, {guard} ? {src} : NULL);') + return + if m.ptr == 2 and t == 'char' and kind == 'strarray': + w(f'vkb_enc_strarray(e, {guard} ? {src} : NULL, {guard} ? (uint32_t)({cnt}) : 0);') + return + if m.ptr == 2: + problems.append(f'{owner}.{m.name}: double pointer') + w(f'vkb_enc_u8(e, 0); /* unsupported double pointer {m.name} */') + return + if t == 'void': + if kind == 'bytes' or (kind == 'count'): + w(f'vkb_enc_blob(e, {guard} ? (const void *){src} : NULL, {guard} ? (size_t)({cnt}) : 0);') + else: + problems.append(f'{owner}.{m.name}: void* without length') + w(f'vkb_enc_u8(e, 0); /* void* {m.name} not sent */') + return + if kind == 'bytes': + w(f'vkb_enc_blob(e, {guard} ? (const void *){src} : NULL, {guard} ? (size_t)({cnt}) : 0);') + return + n = cnt if kind == 'count' else '1' + w(f'if ({guard}) {{') + w(f'uint32_t n_ = (uint32_t)({n});') + w('vkb_enc_u8(e, 1); vkb_enc_u32(e, n_);') + if is_dhandle(t): + w(f'for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_u64(e, vkb_remote((const void *){src}[i_]));') + elif is_struct(t) and not is_pod(t): + w(f'for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_{t}(e, &{src}[i_]);') + else: + w(f'vkb_enc_raw(e, {src}, (size_t)n_ * sizeof(*{src}));') + w('} else {') + w('vkb_enc_u8(e, 0);') + w('}') + + +def emit_ptr_dec(w, owner, m, dst, side): + t = reg.canon(m.type) + kind, cnt = len_expr(owner, m, 's->') + ctype = m.type + if m.ptr == 1 and t == 'char' and kind == 'string': + w(f'{dst} = vkb_dec_str(d);') + return + if m.ptr == 2 and t == 'char' and kind == 'strarray': + w(f'{dst} = vkb_dec_strarray(d);') + return + if m.ptr == 2: + w(f'(void)vkb_dec_u8(d); {dst} = NULL;') + return + if t == 'void' or kind == 'bytes': + if t == 'void' and kind not in ('bytes', 'count'): + w(f'(void)vkb_dec_u8(d); {dst} = NULL;') + else: + w(f'{dst} = ({"const " if m.const else ""}{ctype} *)vkb_dec_blob(d, NULL);') + return + w('if (vkb_dec_u8(d)) {') + w('uint32_t n_ = vkb_dec_u32(d);') + if is_dhandle(t): + w(f'{ctype} *a_ = ({ctype} *)vkb_dec_alloc(d, (size_t)n_ * sizeof({ctype}));') + w(f'for (uint32_t i_ = 0; a_ && i_ < n_; i_++) a_[i_] = ({ctype})(uintptr_t)vkb_dec_u64(d);') + w(f'{dst} = a_;') + elif is_struct(t) and not is_pod(t): + w(f'{ctype} *a_ = ({ctype} *)vkb_dec_alloc(d, (size_t)n_ * sizeof({ctype}));') + w(f'for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_{t}(d, &a_[i_]);') + w(f'{dst} = a_;') + else: + w(f'{dst} = ({"const " if m.const else ""}{ctype} *)vkb_dec_raw_view(d, (size_t)n_ * sizeof({ctype}));') + w('} else {') + w(f'{dst} = NULL;') + w('}') + + +# Prototypes for all non-POD structs. +proto = W() +for s in STRUCTS: + if is_pod(s): + continue + proto(f'void vkb_enc_{s}(vkb_enc *e, const {s} *s);') + proto(f'void vkb_encfix_{s}(vkb_enc *e, const {s} *s, size_t raw);') + proto(f'void vkb_dec_{s}(vkb_dec *d, {s} *s);') + proto(f'void vkb_decfix_{s}(vkb_dec *d, {s} *s);') + +for s in STRUCTS: + if is_pod(s): + continue + fx = fixups(s) + # encode + sw(f'void vkb_encfix_{s}(vkb_enc *e, const {s} *s, size_t raw)') + sw('{') + sw('(void)e; (void)s; (void)raw;') + for kind, m in fx: + if kind == 'pnext': + sw('vkb_enc_chain(e, s->pNext);') + elif kind == 'funcptr': + sw(f'/* {m.name}: function pointer, never sent */') + elif kind == 'dhandle': + if m.fixed: + sw(f'for (size_t i_ = 0; i_ < sizeof(s->{m.name}) / sizeof(s->{m.name}[0]); i_++) vkb_enc_patch_u64(e, raw + offsetof({s}, {m.name}) + i_ * 8, vkb_remote((const void *)s->{m.name}[i_]));') + else: + sw(f'vkb_enc_patch_u64(e, raw + offsetof({s}, {m.name}), vkb_remote((const void *)s->{m.name}));') + elif kind == 'embed': + mt = reg.canon(m.type) + if m.fixed: + sw(f'for (size_t i_ = 0; i_ < sizeof(s->{m.name}) / sizeof(s->{m.name}[0]); i_++) vkb_encfix_{mt}(e, &s->{m.name}[i_], raw + offsetof({s}, {m.name}) + i_ * sizeof({mt}));') + else: + sw(f'vkb_encfix_{mt}(e, &s->{m.name}, raw + offsetof({s}, {m.name}));') + elif kind == 'fd': + sw(f'vkb_enc_fd(e, s->{m.name});') + elif kind == 'ptr': + if m.noauto and (s, m.name) not in PTR_CONDITIONS and m.len is None and not m.optional: + pass + emit_ptr_enc(sw, s, m, f's->{m.name}', 's->', 'in') + sw('}') + sw() + sw(f'void vkb_enc_{s}(vkb_enc *e, const {s} *s)') + sw('{') + sw(f'size_t raw = vkb_enc_raw(e, s, sizeof(*s));') + sw(f'vkb_encfix_{s}(e, s, raw);') + sw('}') + sw() + # decode + sw(f'void vkb_decfix_{s}(vkb_dec *d, {s} *s)') + sw('{') + sw('(void)d; (void)s;') + for kind, m in fx: + if kind == 'pnext': + sw('s->pNext = (void *)vkb_dec_chain(d);') + elif kind == 'funcptr': + sw(f's->{m.name} = NULL;') + elif kind == 'embed': + mt = reg.canon(m.type) + if m.fixed: + sw(f'for (size_t i_ = 0; i_ < sizeof(s->{m.name}) / sizeof(s->{m.name}[0]); i_++) vkb_decfix_{mt}(d, &s->{m.name}[i_]);') + else: + sw(f'vkb_decfix_{mt}(d, &s->{m.name});') + elif kind == 'fd': + sw(f's->{m.name} = vkb_dec_fd(d);') + elif kind == 'ptr': + emit_ptr_dec(sw, s, m, f's->{m.name}', 'in') + sw('}') + sw() + sw(f'void vkb_dec_{s}(vkb_dec *d, {s} *s)') + sw('{') + sw('vkb_dec_raw_into(d, s, sizeof(*s));') + sw(f'vkb_decfix_{s}(d, s);') + sw('}') + sw() + +# Chain dispatch. +sw('size_t vkb_struct_size(VkStructureType t)') +sw('{') +sw('switch ((int)t) {') +for s in CHAIN_STRUCTS: + sw(f'case {stype_of(s)}: return sizeof({s});') +sw('default: return 0;') +sw('}') +sw('}') +sw() +sw('void vkb_enc_chain_elem(vkb_enc *e, const VkBaseInStructure *b)') +sw('{') +sw('switch ((int)b->sType) {') +for s in CHAIN_STRUCTS: + if is_pod(s): + continue + sw(f'case {stype_of(s)}: vkb_enc_{s}(e, (const {s} *)b); return;') +sw('default: vkb_enc_raw(e, b, vkb_struct_size(b->sType)); return;') +sw('}') +sw('}') +sw() +sw('void vkb_dec_chain_elem(vkb_dec *d, VkStructureType t, void *dst)') +sw('{') +sw('switch ((int)t) {') +for s in CHAIN_STRUCTS: + if is_pod(s): + continue + sw(f'case {stype_of(s)}: vkb_dec_{s}(d, ({s} *)dst); return;') +sw('default: vkb_dec_raw_into(d, dst, vkb_struct_size(t)); return;') +sw('}') +sw('}') +sw() + +# Dispatchable-handle out conversion helpers are in the runtime; nothing else per struct. + +# -------------------------------------------------------------------------------------------- +# Commands. + +def cmd_level(c): + ps = reg.commands[c]['params'] + if not ps or not is_dhandle(ps[0].type): + return 'global' + t = reg.canon(ps[0].type) + if t in ('VkInstance', 'VkPhysicalDevice'): + return 'instance' + return 'device' + + +def objtype(t): + t = reg.canon(t) + return { + 'VkInstance': 'VK_OBJECT_TYPE_INSTANCE', 'VkPhysicalDevice': 'VK_OBJECT_TYPE_PHYSICAL_DEVICE', + 'VkDevice': 'VK_OBJECT_TYPE_DEVICE', 'VkQueue': 'VK_OBJECT_TYPE_QUEUE', + 'VkCommandBuffer': 'VK_OBJECT_TYPE_COMMAND_BUFFER', + }[t] + + +def param_class(c, p): + """in-value | in-ptr | out-ptr | inout-scalar | skip""" + t = reg.canon(p.type) + if t == 'VkAllocationCallbacks': + return 'skip' + if p.ptr == 0: + if p.fixed: + return 'in-fixed' + return 'in-value' + if p.const: + return 'in-ptr' + return 'out-ptr' + + +def scalar_size(t): + t = reg.canon(t) + if t in SCALARS: + return SCALARS[t] + if t in reg.enums: + return 4 + if t in reg.bitmasks: + return reg.bitmasks[t] + if t in reg.handles: + return 8 + if t in reg.basetypes: + bt = reg.basetypes[t] + if bt in SCALARS: + return SCALARS[bt] + return None + + +cw = W() # client +vw = W() # server +hw = W() # header + +cmd_ids = EXTRA_WIRE + wire_cmds +proto_hash = hashlib.sha256(('\n'.join(cmd_ids) + '\n'.join(STRUCTS)).encode()).hexdigest()[:16] + +hw('/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */') +hw('#ifndef VKB_GEN_H') +hw('#define VKB_GEN_H') +hw('#define VK_NO_PROTOTYPES 1') +hw('#ifdef VKB_CLIENT') +hw('#define VK_USE_PLATFORM_WAYLAND_KHR 1') +hw('#define VK_USE_PLATFORM_XCB_KHR 1') +hw('#define VK_USE_PLATFORM_XLIB_KHR 1') +hw('#endif') +hw('#include ') +hw('#include ') +hw('#include ') +hw('typedef struct vkb_enc vkb_enc;') +hw('typedef struct vkb_dec vkb_dec;') +hw(f'#define VKB_PROTOCOL_HASH 0x{proto_hash}ULL') +hw('enum vkb_cmd_id {') +for i, c in enumerate(cmd_ids): + hw(f'VKB_CMD_{c} = {i},') +hw(f'VKB_CMD_COUNT = {len(cmd_ids)}') +hw('};') +hw('extern const char *const vkb_cmd_names[VKB_CMD_COUNT];') +hw('extern const unsigned char vkb_cmd_result[VKB_CMD_COUNT]; /* returns VkResult (first in the reply) */') +hw() +hw('/* Every bridged command, by its canonical name (aliases resolve to these). */') +hw('typedef struct vkb_dispatch {') +for c in dispatch_cmds: + hw(f'PFN_{c} {c};') +hw('} vkb_dispatch;') +hw('void vkb_dispatch_load_instance(vkb_dispatch *dt, PFN_vkGetInstanceProcAddr gipa, VkInstance instance);') +hw('void vkb_dispatch_load_device(vkb_dispatch *dt, PFN_vkGetDeviceProcAddr gdpa, VkDevice device);') +hw() +hw('size_t vkb_struct_size(VkStructureType t);') +hw('void vkb_enc_chain_elem(vkb_enc *e, const VkBaseInStructure *b);') +hw('void vkb_dec_chain_elem(vkb_dec *d, VkStructureType t, void *dst);') +for l in proto.lines: + hw(l) +hw() +hw('/* Bridged extensions: name, 1 = device, client-implemented flag. */') +hw('typedef struct vkb_ext_desc { const char *name; uint8_t device; uint8_t client; } vkb_ext_desc;') +hw(f'#define VKB_EXT_COUNT {len(bridged_exts)}') +hw('extern const vkb_ext_desc vkb_exts[VKB_EXT_COUNT];') +hw() +hw('/* Client: name -> entry point (canonical names and aliases). */') +hw('typedef struct vkb_proc_desc { const char *name; PFN_vkVoidFunction fn; uint8_t level; const char *ext; uint32_t core; } vkb_proc_desc;') +hw('#define VKB_LEVEL_GLOBAL 0') +hw('#define VKB_LEVEL_INSTANCE 1') +hw('#define VKB_LEVEL_PHYSDEV 2') +hw('#define VKB_LEVEL_DEVICE 3') +hw('extern const vkb_proc_desc vkb_client_procs[];') +hw('extern const size_t vkb_client_proc_count;') +hw() + +# Name table and extension table. +names = W() +names('const char *const vkb_cmd_names[VKB_CMD_COUNT] = {') +for c in cmd_ids: + names(f'"{c}",') +names('};') +names('const unsigned char vkb_cmd_result[VKB_CMD_COUNT] = {') +for c in cmd_ids: + names(f'{1 if c in reg.commands and reg.commands[c]["ret"] == "VkResult" else 0},') +names('};') +names('const vkb_ext_desc vkb_exts[VKB_EXT_COUNT] = {') +for e in bridged_exts: + names(f'{{"{e}", {1 if ext_info[e][0] == "device" else 0}, {1 if e in CLIENT_EXTENSIONS else 0}}},') +names('};') +for l in names.lines: + sw(l) + +# Server dispatch loaders. +vw(HEADER) +vw('#include "vkb_gen.h"') +vw('#include "../vkb_wire.h"') +vw('#include "vkb_server_gen.h"') +vw('#include "../vkb_server_iface.h"') +vw('#include ') +vw() + +aliases_of = {} +for a, c in cmd_aliases_included.items(): + aliases_of.setdefault(c, []).append(a) + +vw('void vkb_dispatch_load_instance(vkb_dispatch *dt, PFN_vkGetInstanceProcAddr gipa, VkInstance instance)') +vw('{') +for c in dispatch_cmds: + vw(f'dt->{c} = (PFN_{c})gipa(instance, "{c}");') + for a in sorted(aliases_of.get(c, [])): + vw(f'if (!dt->{c}) dt->{c} = (PFN_{c})gipa(instance, "{a}");') +vw('}') +vw() +vw('void vkb_dispatch_load_device(vkb_dispatch *dt, PFN_vkGetDeviceProcAddr gdpa, VkDevice device)') +vw('{') +for c in dispatch_cmds: + if cmd_level(c) != 'device': + continue + vw('{') + vw(f'PFN_{c} f_ = (PFN_{c})gdpa(device, "{c}");') + for a in sorted(aliases_of.get(c, [])): + vw(f'if (!f_) f_ = (PFN_{c})gdpa(device, "{a}");') + # Device-level entries come only from the device: an instance-level trampoline would dispatch + # through loader data the server's objects do not carry. + vw(f'dt->{c} = f_;') + vw('}') +vw('}') +vw() + +# Server header (custom handlers' prototypes). +svh = W() +svh(HEADER) +svh('#ifndef VKB_SERVER_GEN_H') +svh('#define VKB_SERVER_GEN_H') +svh('#include "vkb_gen.h"') +svh('typedef struct vkb_srv_call vkb_srv_call;') +svh('typedef void (*vkb_srv_handler)(vkb_srv_call *c);') +svh('extern const vkb_srv_handler vkb_srv_handlers[VKB_CMD_COUNT];') +for c in wire_cmds: + svh(f'void vkb_sv_{c}(vkb_srv_call *c);') +for c in EXTRA_WIRE: + svh(f'void vkb_sv_{c}(vkb_srv_call *c);') +svh('#endif') + +# Client header. +clh = W() +clh(HEADER) +clh('#ifndef VKB_CLIENT_GEN_H') +clh('#define VKB_CLIENT_GEN_H') +clh('#include "vkb_gen.h"') + +cw(HEADER) +cw('#include "vkb_gen.h"') +cw('#include "vkb_client_gen.h"') +cw('#include "../vkb_wire.h"') +cw('#include "../../client/vkb_client.h"') +cw('#include ') +cw() + + +def c_param_decl(p): + return p.decl + + +def is_out_struct_templ(t): + t = reg.canon(t) + return is_struct(t) and has_pnext(t) + + +for c in wire_cmds: + cmd = reg.commands[c] + ret = cmd['ret'] + params = cmd['params'] + level = cmd_level(c) + is_cmdbuf = c.startswith('vkCmd') + decl = ', '.join(c_param_decl(p) for p in params) + wire_name = f'vkb_wire_{c}' + ret_c = ret + clh(f'{ret_c} {wire_name}({decl});') + + # ---------------- client wire stub + cw(f'{ret_c} {wire_name}({decl})') + cw('{') + first = params[0].name if params and is_dhandle(params[0].type) else None + if is_cmdbuf: + cw(f'vkb_enc *e = vkb_cmd_record_begin({first}, VKB_CMD_{c});') + cw('if (!e) return;') + else: + tbl = f'vkb_table_of((const void *){first})' if first else '0' + cw('vkb_call call_;') + cw(f'vkb_call_begin(&call_, VKB_CMD_{c}, {tbl});') + cw('vkb_enc *e = &call_.e;') + outs = [] + for p in params: + pc = param_class(c, p) + t = reg.canon(p.type) + if pc == 'skip': + cw(f'(void){p.name};') + continue + if (c, p.name) in FD_PARAMS: + if pc == 'in-value': + cw(f'vkb_enc_fd(e, {p.name});') + else: + cw(f'vkb_enc_u8(e, {p.name} != NULL);') + outs.append(('fd', p)) + continue + if pc == 'in-value': + if is_dhandle(t): + cw(f'vkb_enc_u64(e, vkb_remote((const void *){p.name}));') + elif is_struct(t): + if is_pod(t): + cw(f'vkb_enc_raw(e, &{p.name}, sizeof({p.name}));') + else: + cw(f'vkb_enc_{t}(e, &{p.name});') + else: + sz = scalar_size(t) + if sz is None: + problems.append(f'{c}.{p.name}: unknown scalar {t}') + sz = 8 + cw(f'vkb_enc_bytes(e, &{p.name}, sizeof({p.name}));') + elif pc == 'in-fixed': + cw(f'vkb_enc_raw(e, {p.name}, sizeof({p.type}) * {re.search(r"\[(.*)\]", p.decl).group(1)});') + elif pc == 'in-ptr': + emit_ptr_enc(cw, c, p, p.name, '', 'in') + elif pc == 'out-ptr': + kind, cnt = len_expr(c, p, '') + if t == 'void' and p.ptr == 2: + problems.append(f'{c}.{p.name}: void** out') + cw(f'vkb_enc_u8(e, 0);') + continue + if t == 'void': + # Out bytes: length is a size param (value) or a size_t* (two-call). + if kind == 'count' and cnt and not cnt.startswith('p'): + cw(f'vkb_enc_u8(e, {p.name} != NULL); vkb_enc_u64(e, (uint64_t)({cnt}));') + outs.append(('bytes', p, cnt)) + elif kind == 'count': + cw(f'vkb_enc_u8(e, {p.name} != NULL); vkb_enc_u64(e, {p.name} ? (uint64_t)*{cnt} : 0);') + outs.append(('bytes2', p, cnt)) + else: + problems.append(f'{c}.{p.name}: void* out without len') + cw('vkb_enc_u8(e, 0);') + continue + if kind == 'count': + twocall = cnt.startswith('p') and '->' not in cnt + n = f'*{cnt}' if twocall else cnt + cw(f'{{ uint32_t n_ = {p.name} ? (uint32_t)({n if not twocall else f"({cnt} ? {n} : 0)"}) : 0;') + cw(f'vkb_enc_u8(e, {p.name} != NULL); vkb_enc_u32(e, n_);') + if is_out_struct_templ(t): + cw(f'for (uint32_t i_ = 0; {p.name} && i_ < n_; i_++) vkb_enc_out_template(e, &{p.name}[i_], sizeof({t}));') + cw('}') + outs.append(('array', p, cnt, twocall)) + else: + # single out (scalar, handle, struct), or in/out scalar (counts) + cw(f'vkb_enc_u8(e, {p.name} != NULL);') + if is_out_struct_templ(t): + cw(f'if ({p.name}) vkb_enc_out_template(e, {p.name}, sizeof({t}));') + elif not is_struct(t) and not is_dhandle(t): + cw(f'if ({p.name}) vkb_enc_bytes(e, {p.name}, sizeof(*{p.name}));') + outs.append(('single', p)) + if is_cmdbuf: + cw(f'vkb_cmd_record_end({first});') + cw('}') + cw() + elif ret == 'void' and not outs and not any((c, p.name) in FD_PARAMS for p in params): + # Nothing comes back: sent without waiting (ordered by the protocol's sequence numbers). + cw('vkb_call_exec_async(&call_);') + cw('}') + cw() + elif c in ASYNC_RESULT and not outs: + cw('if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST;') + cw('if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST;') + cw('VkResult r_ = (VkResult)vkb_dec_u32(&call_.d);') + cw('vkb_call_end(&call_);') + cw('return r_;') + cw('}') + cw() + else: + cw('if (!vkb_call_exec(&call_)) {') + if ret == 'VkResult': + cw('return VK_ERROR_DEVICE_LOST;') + elif ret == 'void': + cw('return;') + else: + cw(f'return ({ret})0;') + cw('}') + cw('vkb_dec *d = &call_.d;') + cw('(void)d;') + if ret != 'void': + cw(f'{ret} r_;') + cw('vkb_dec_bytes(d, &r_, sizeof(r_));') + for o in outs: + p = o[1] + t = reg.canon(p.type) + if o[0] == 'fd': + cw(f'{{ int fd_ = vkb_dec_fd(d); if ({p.name}) *{p.name} = fd_; else if (fd_ >= 0) vkb_close_fd(fd_); }}') + elif o[0] == 'bytes': + cw(f'vkb_dec_blob_into(d, {p.name}, (size_t)({o[2]}));') + elif o[0] == 'bytes2': + cw(f'{{ uint64_t sz_ = vkb_dec_u64(d); if ({o[2]}) {{ size_t cap_ = {p.name} ? *{o[2]} : 0; *{o[2]} = (size_t)sz_; vkb_dec_blob_into(d, {p.name}, cap_); }} else vkb_dec_blob_into(d, NULL, 0); }}') + elif o[0] == 'array': + cnt, twocall = o[2], o[3] + cw('{') + cw('uint32_t rn_ = vkb_dec_u32(d);') + cw('(void)rn_;') + if twocall: + cw(f'uint32_t cap_ = ({p.name} && {cnt}) ? *{cnt} : 0;') + cw(f'if ({cnt}) *{cnt} = rn_;') + else: + cw(f'uint32_t cap_ = {p.name} ? (uint32_t)({cnt}) : 0;') + cw('uint32_t has_ = vkb_dec_u32(d);') + cw('for (uint32_t i_ = 0; i_ < has_; i_++) {') + cw('if (i_ >= cap_) { d->err = 1; break; }') + if is_dhandle(t): + cw(f'{p.name}[i_] = ({p.type})vkb_wrap({objtype(t)}, (const void *){first or 'NULL'}, vkb_dec_u64(d));') + elif is_out_struct_templ(t): + cw(f'vkb_dec_out_struct(d, &{p.name}[i_], sizeof({t}));') + else: + cw(f'vkb_dec_raw_into(d, &{p.name}[i_], sizeof({t}));') + cw('}') + cw('}') + elif o[0] == 'single': + cw(f'if (vkb_dec_u8(d)) {{') + if is_dhandle(t): + cw(f'{p.type} h_ = ({p.type})vkb_wrap({objtype(t)}, (const void *){first or 'NULL'}, vkb_dec_u64(d));') + cw(f'if ({p.name}) *{p.name} = h_;') + elif is_out_struct_templ(t): + cw(f'if ({p.name}) vkb_dec_out_struct(d, {p.name}, sizeof({t})); else d->err = 1;') + else: + cw(f'if ({p.name}) vkb_dec_raw_into(d, {p.name}, sizeof(*{p.name})); else d->err = 1;') + cw('}') + cw('vkb_call_end(&call_);') + if ret != 'void': + cw('return r_;') + cw('}') + cw() + + # ---------------- server handler + if c in SERVER_CUSTOM: + continue + vw(f'void vkb_sv_{c}(vkb_srv_call *c)') + vw('{') + vw('vkb_dec *d = &c->d;') + vw('vkb_enc *e = &c->r;') + vw('(void)e;') + call_args = [] + post = [] + for p in params: + pc = param_class(c, p) + t = reg.canon(p.type) + if pc == 'skip': + call_args.append('NULL') + continue + if (c, p.name) in FD_PARAMS: + if pc == 'in-value': + vw(f'int {p.name} = vkb_dec_fd(d);') + post.append(f'if ({p.name} >= 0) vkb_close_fd({p.name});') + call_args.append(p.name) + else: + vw(f'int {p.name}_v = -1; int *{p.name} = vkb_dec_u8(d) ? &{p.name}_v : NULL;') + call_args.append(p.name) + continue + if pc == 'in-value': + if is_dhandle(t): + vw(f'{p.type} {p.name} = ({p.type})(uintptr_t)vkb_dec_u64(d);') + elif is_struct(t): + vw(f'{p.type} {p.name};') + if is_pod(t): + vw(f'vkb_dec_raw_into(d, &{p.name}, sizeof({p.name}));') + else: + vw(f'vkb_dec_{t}(d, &{p.name});') + else: + vw(f'{p.type} {p.name};') + vw(f'vkb_dec_bytes(d, &{p.name}, sizeof({p.name}));') + call_args.append(p.name) + elif pc == 'in-fixed': + dim = re.search(r"\[(.*)\]", p.decl).group(1) + vw(f'const {p.type} *{p.name} = (const {p.type} *)vkb_dec_raw_view(d, sizeof({p.type}) * {dim});') + call_args.append(p.name) + elif pc == 'in-ptr': + vw(f'const {p.type} {"*" * p.ptr}{p.name};') + if p.ptr == 2 and t == 'char': + emit_ptr_dec(vw, c, p, p.name, 'in') + else: + # emit_ptr_dec writes with "s->" names for struct contexts; params use bare names. + tmp = W() + emit_ptr_dec(tmp, c, p, p.name, 'in') + for l in tmp.lines: + vw(l.strip()) + call_args.append(f'({p.decl.rsplit(" ", 1)[0]}){p.name}' if p.ptr == 2 else p.name) + elif pc == 'out-ptr': + kind, cnt = len_expr(c, p, '') + if t == 'void': + if kind == 'count' and cnt and not cnt.startswith('p'): + vw(f'uint8_t has_{p.name} = vkb_dec_u8(d); uint64_t n_{p.name} = vkb_dec_u64(d);') + vw(f'void *{p.name} = has_{p.name} ? vkb_dec_alloc(d, (size_t)n_{p.name}) : NULL;') + post.append(f'vkb_enc_blob(e, {p.name}, (size_t)n_{p.name});') + elif kind == 'count': + vw(f'uint8_t has_{p.name} = vkb_dec_u8(d); uint64_t n_{p.name} = vkb_dec_u64(d);') + vw(f'void *{p.name} = has_{p.name} ? vkb_dec_alloc(d, (size_t)n_{p.name}) : NULL;') + # the size param is handled as an in/out scalar (size_t*); patch it to our cap + post.append(f'vkb_enc_u64(e, {cnt} ? (uint64_t)*{cnt} : 0); vkb_enc_blob(e, {p.name}, {p.name} && {cnt} ? (size_t)*{cnt} : 0);') + vw(f'if ({cnt} && {p.name}) *{cnt} = (size_t)n_{p.name};') + call_args.append(p.name) + continue + if kind == 'count': + twocall = cnt.startswith('p') and '->' not in cnt + vw(f'uint8_t has_{p.name} = vkb_dec_u8(d); uint32_t n_{p.name} = vkb_dec_u32(d);') + vw(f'{p.type} *{p.name} = has_{p.name} ? ({p.type} *)vkb_dec_alloc_zero(d, (size_t)n_{p.name} * sizeof({p.type})) : NULL;') + if is_out_struct_templ(t): + vw(f'for (uint32_t i_ = 0; {p.name} && i_ < n_{p.name}; i_++) vkb_dec_out_template(d, &{p.name}[i_], sizeof({t}));') + if twocall: + vw(f'if ({p.name} && {cnt}) *{cnt} = n_{p.name};') + rn = f'({cnt} ? *{cnt} : 0)' + else: + rn = f'n_{p.name}' + post.append('{') + post.append(f'uint32_t rn_ = {rn};') + post.append(f'uint32_t has_ = {p.name} ? (rn_ < n_{p.name} ? rn_ : n_{p.name}) : 0;') + post.append('vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_);') + if is_dhandle(t): + post.append(f'for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_u64(e, (uint64_t)(uintptr_t){p.name}[i_]);') + elif is_out_struct_templ(t): + post.append(f'for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &{p.name}[i_], sizeof({t}));') + else: + post.append(f'for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &{p.name}[i_], sizeof({t}));') + post.append('}') + else: + vw(f'uint8_t has_{p.name} = vkb_dec_u8(d);') + vw(f'{p.type} {p.name}_v;') + vw(f'memset(&{p.name}_v, 0, sizeof({p.name}_v));') + if is_out_struct_templ(t): + vw(f'if (has_{p.name}) vkb_dec_out_template(d, &{p.name}_v, sizeof({t}));') + elif not is_struct(t) and not is_dhandle(t): + vw(f'if (has_{p.name}) vkb_dec_bytes(d, &{p.name}_v, sizeof({p.name}_v));') + vw(f'{p.type} *{p.name} = has_{p.name} ? &{p.name}_v : NULL;') + post.append(f'vkb_enc_u8(e, {p.name} != NULL);') + if is_dhandle(t): + post.append(f'if ({p.name}) vkb_enc_u64(e, (uint64_t)(uintptr_t)*{p.name});') + elif is_out_struct_templ(t): + post.append(f'if ({p.name}) vkb_enc_out_struct(e, {p.name}, sizeof({t}));') + else: + post.append(f'if ({p.name}) vkb_enc_raw(e, {p.name}, sizeof(*{p.name}));') + call_args.append(p.name) + vw('if (d->err) { vkb_srv_bad_message(c); return; }') + fn = f'c->dt->{c}' + vw(f'if (!{fn}) {{ vkb_srv_missing(c, "{c}"); return; }}') + if ret != 'void': + vw(f'{ret} r_ = {fn}({", ".join(call_args)});') + vw('vkb_enc_bytes(e, &r_, sizeof(r_));') + else: + vw(f'{fn}({", ".join(call_args)});') + # fds out after result + for p in params: + if (c, p.name) in FD_PARAMS and param_class(c, p) == 'out-ptr': + vw(f'vkb_enc_fd(e, {p.name} ? *{p.name} : -1);') + vw(f'if ({p.name} && *{p.name} >= 0) vkb_srv_close_after_send(c, *{p.name});') + for l in post: + vw(l) + vw('}') + vw() + +# Handler table. +vw('const vkb_srv_handler vkb_srv_handlers[VKB_CMD_COUNT] = {') +for c in cmd_ids: + vw(f'[VKB_CMD_{c}] = vkb_sv_{c},') +vw('};') + +# Client default entry points: everything not custom forwards to its wire stub. +cw('/* Default entry points. */') +for c in wire_cmds: + if c in CLIENT_CUSTOM: + continue + cmd = reg.commands[c] + params = cmd['params'] + decl = ', '.join(c_param_decl(p) for p in params) + args = ', '.join(p.name for p in params) + ret = cmd['ret'] + cw(f'static VKAPI_ATTR {ret} VKAPI_CALL vkb_ep_{c}({decl})') + cw('{') + cw(f'{"return " if ret != "void" else ""}vkb_wire_{c}({args});') + cw('}') + cw() + +# Prototypes of hand-written entry points (client/*.c define them). +for c in sorted(included_cmds): + if c in CLIENT_CUSTOM or c in client_only_cmds: + cmd = reg.commands[c] + decl = ', '.join(c_param_decl(p) for p in cmd['params']) + clh(f'VKAPI_ATTR {cmd["ret"]} VKAPI_CALL vkb_ep_{c}({decl});') +clh('#endif') + + +def level_of(c): + lv = cmd_level(c) + if lv == 'global': + return 'VKB_LEVEL_GLOBAL' + if lv == 'instance': + t = reg.canon(reg.commands[c]['params'][0].type) + return 'VKB_LEVEL_PHYSDEV' if t == 'VkPhysicalDevice' else 'VKB_LEVEL_INSTANCE' + return 'VKB_LEVEL_DEVICE' + + +cw('const vkb_proc_desc vkb_client_procs[] = {') +entries = [] +for c in sorted(included_cmds): + origin = cmd_origin.get(c, 'core') + entries.append((c, c, origin)) +for a, c in sorted(cmd_aliases_included.items()): + entries.append((a, c, None)) +for name, c, origin in sorted(entries): + ext = 'NULL' + # aliases come from the extension that introduced them; find by registry lookup + o = cmd_origin.get(c, 'core') if name == c else None + if name != c: + # find the extension listing this alias name + for en, (_, cl) in ext_info.items(): + if name in cl: + o = en + break + else: + o = 'core' + ext = 'NULL' if o in (None, 'core') else f'"{o}"' + core = 0 + if name == c and o == 'core' and c in cmd_version: + core = f'VK_MAKE_API_VERSION(0, {cmd_version[c][0]}, {cmd_version[c][1]}, 0)' + cw(f'{{"{name}", (PFN_vkVoidFunction)vkb_ep_{c}, {level_of(c)}, {ext}, {core}}},') +cw('};') +cw('const size_t vkb_client_proc_count = sizeof(vkb_client_procs) / sizeof(vkb_client_procs[0]);') + +hw('#endif') + +os.makedirs(OUT, exist_ok=True) +files = { + 'vkb_gen.h': hw.text(), + 'vkb_gen_structs.c': sw.text(), + 'vkb_gen_client.c': cw.text(), + 'vkb_client_gen.h': clh.text(), + 'vkb_gen_server.c': vw.text(), + 'vkb_server_gen.h': svh.text(), +} +for n, txt in files.items(): + with open(os.path.join(OUT, n), 'w') as f: + f.write(txt) + +print(f'commands: {len(included_cmds)} bridged, {len(wire_cmds)} on the wire, ' + f'{len(client_only_cmds & included_cmds)} client-only; structs: {len(STRUCTS)} ' + f'({sum(1 for s in STRUCTS if not is_pod(s))} non-POD); extensions: {len(bridged_exts)}; ' + f'protocol {proto_hash}') +if problems: + print('\n'.join(sorted(set(problems))), file=sys.stderr) diff --git a/tools/vkbridge/common/gen/vkb_client_gen.h b/tools/vkbridge/common/gen/vkb_client_gen.h new file mode 100644 index 000000000..572009749 --- /dev/null +++ b/tools/vkbridge/common/gen/vkb_client_gen.h @@ -0,0 +1,422 @@ +/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */ + +#ifndef VKB_CLIENT_GEN_H +#define VKB_CLIENT_GEN_H +#include "vkb_gen.h" +VkResult vkb_wire_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); +VkResult vkb_wire_vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets); +VkResult vkb_wire_vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory); +VkResult vkb_wire_vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); +VkResult vkb_wire_vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); +VkResult vkb_wire_vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); +VkResult vkb_wire_vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); +VkResult vkb_wire_vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); +VkResult vkb_wire_vkBindTensorMemoryARM(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM* pBindInfos); +void vkb_wire_vkCmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); +void vkb_wire_vkCmdBeginCustomResolveEXT(VkCommandBuffer commandBuffer, const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo); +void vkb_wire_vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); +void vkb_wire_vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); +void vkb_wire_vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents); +void vkb_wire_vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); +void vkb_wire_vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); +void vkb_wire_vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); +void vkb_wire_vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); +void vkb_wire_vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +void vkb_wire_vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType); +void vkb_wire_vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +void vkb_wire_vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); +void vkb_wire_vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes); +void vkb_wire_vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets); +void vkb_wire_vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); +void vkb_wire_vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter); +void vkb_wire_vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); +void vkb_wire_vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects); +void vkb_wire_vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); +void vkb_wire_vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); +void vkb_wire_vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions); +void vkb_wire_vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); +void vkb_wire_vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions); +void vkb_wire_vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +void vkb_wire_vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions); +void vkb_wire_vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); +void vkb_wire_vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions); +void vkb_wire_vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +void vkb_wire_vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags); +void vkb_wire_vkCmdCopyTensorARM(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM* pCopyTensorInfo); +void vkb_wire_vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +void vkb_wire_vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +void vkb_wire_vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); +void vkb_wire_vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance); +void vkb_wire_vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance); +void vkb_wire_vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +void vkb_wire_vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +void vkb_wire_vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +void vkb_wire_vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); +void vkb_wire_vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +void vkb_wire_vkCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride); +void vkb_wire_vkCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset); +void vkb_wire_vkCmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer); +void vkb_wire_vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query); +void vkb_wire_vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); +void vkb_wire_vkCmdEndRenderPass(VkCommandBuffer commandBuffer); +void vkb_wire_vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); +void vkb_wire_vkCmdEndRendering(VkCommandBuffer commandBuffer); +void vkb_wire_vkCmdEndRendering2KHR(VkCommandBuffer commandBuffer, const VkRenderingEndInfoKHR* pRenderingEndInfo); +void vkb_wire_vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); +void vkb_wire_vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +void vkb_wire_vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data); +void vkb_wire_vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents); +void vkb_wire_vkCmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); +void vkb_wire_vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); +void vkb_wire_vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); +void vkb_wire_vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues); +void vkb_wire_vkCmdPushConstants2(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +void vkb_wire_vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); +void vkb_wire_vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +void vkb_wire_vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); +void vkb_wire_vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +void vkb_wire_vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +void vkb_wire_vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions); +void vkb_wire_vkCmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); +void vkb_wire_vkCmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable); +void vkb_wire_vkCmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable); +void vkb_wire_vkCmdSetAttachmentFeedbackLoopEnableEXT(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask); +void vkb_wire_vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]); +void vkb_wire_vkCmdSetColorBlendAdvancedEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced); +void vkb_wire_vkCmdSetColorBlendEnableEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables); +void vkb_wire_vkCmdSetColorBlendEquationEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations); +void vkb_wire_vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables); +void vkb_wire_vkCmdSetColorWriteMaskEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks); +void vkb_wire_vkCmdSetConservativeRasterizationModeEXT(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode); +void vkb_wire_vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); +void vkb_wire_vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor); +void vkb_wire_vkCmdSetDepthBias2EXT(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT* pDepthBiasInfo); +void vkb_wire_vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +void vkb_wire_vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds); +void vkb_wire_vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); +void vkb_wire_vkCmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable); +void vkb_wire_vkCmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange); +void vkb_wire_vkCmdSetDepthClipEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable); +void vkb_wire_vkCmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne); +void vkb_wire_vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); +void vkb_wire_vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); +void vkb_wire_vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); +void vkb_wire_vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask); +void vkb_wire_vkCmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles); +void vkb_wire_vkCmdSetDiscardRectangleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable); +void vkb_wire_vkCmdSetDiscardRectangleModeEXT(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode); +void vkb_wire_vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); +void vkb_wire_vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); +void vkb_wire_vkCmdSetExtraPrimitiveOverestimationSizeEXT(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize); +void vkb_wire_vkCmdSetFragmentShadingRateKHR(VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); +void vkb_wire_vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace); +void vkb_wire_vkCmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode); +void vkb_wire_vkCmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +void vkb_wire_vkCmdSetLineStippleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable); +void vkb_wire_vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth); +void vkb_wire_vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp); +void vkb_wire_vkCmdSetLogicOpEnableEXT(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable); +void vkb_wire_vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints); +void vkb_wire_vkCmdSetPolygonModeEXT(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode); +void vkb_wire_vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); +void vkb_wire_vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); +void vkb_wire_vkCmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode); +void vkb_wire_vkCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples); +void vkb_wire_vkCmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer, uint32_t rasterizationStream); +void vkb_wire_vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +void vkb_wire_vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +void vkb_wire_vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); +void vkb_wire_vkCmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo); +void vkb_wire_vkCmdSetSampleLocationsEnableEXT(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable); +void vkb_wire_vkCmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask* pSampleMask); +void vkb_wire_vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors); +void vkb_wire_vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); +void vkb_wire_vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask); +void vkb_wire_vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); +void vkb_wire_vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference); +void vkb_wire_vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); +void vkb_wire_vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask); +void vkb_wire_vkCmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin); +void vkb_wire_vkCmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); +void vkb_wire_vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports); +void vkb_wire_vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); +void vkb_wire_vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData); +void vkb_wire_vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); +void vkb_wire_vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); +void vkb_wire_vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query); +void vkb_wire_vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +VkResult vkb_wire_vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer); +VkResult vkb_wire_vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView); +VkResult vkb_wire_vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool); +VkResult vkb_wire_vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +VkResult vkb_wire_vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool); +VkResult vkb_wire_vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout); +VkResult vkb_wire_vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +VkResult vkb_wire_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice); +VkResult vkb_wire_vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent); +VkResult vkb_wire_vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); +VkResult vkb_wire_vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer); +VkResult vkb_wire_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +VkResult vkb_wire_vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage); +VkResult vkb_wire_vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView); +VkResult vkb_wire_vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); +VkResult vkb_wire_vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache); +VkResult vkb_wire_vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout); +VkResult vkb_wire_vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool); +VkResult vkb_wire_vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); +VkResult vkb_wire_vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); +VkResult vkb_wire_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler); +VkResult vkb_wire_vkCreateSamplerYcbcrConversion(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); +VkResult vkb_wire_vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore); +VkResult vkb_wire_vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule); +VkResult vkb_wire_vkCreateTensorARM(VkDevice device, const VkTensorCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorARM* pTensor); +VkResult vkb_wire_vkCreateTensorViewARM(VkDevice device, const VkTensorViewCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorViewARM* pView); +void vkb_wire_vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyDescriptorUpdateTemplate(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyTensorARM(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks* pAllocator); +void vkb_wire_vkDestroyTensorViewARM(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks* pAllocator); +VkResult vkb_wire_vkDeviceWaitIdle(VkDevice device); +VkResult vkb_wire_vkEndCommandBuffer(VkCommandBuffer commandBuffer); +VkResult vkb_wire_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); +VkResult vkb_wire_vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); +VkResult vkb_wire_vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties); +VkResult vkb_wire_vkEnumerateInstanceVersion(uint32_t* pApiVersion); +VkResult vkb_wire_vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); +VkResult vkb_wire_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterARM* pCounters, VkPerformanceCounterDescriptionARM* pCounterDescriptions); +VkResult vkb_wire_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +VkResult vkb_wire_vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); +void vkb_wire_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +VkResult vkb_wire_vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); +void vkb_wire_vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); +VkDeviceAddress vkb_wire_vkGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +void vkb_wire_vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements); +void vkb_wire_vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +uint64_t vkb_wire_vkGetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +VkResult vkb_wire_vkGetCalibratedTimestampsKHR(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); +void vkb_wire_vkGetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); +void vkb_wire_vkGetDeviceBufferMemoryRequirements(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +void vkb_wire_vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); +void vkb_wire_vkGetDeviceImageMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +void vkb_wire_vkGetDeviceImageSparseMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +void vkb_wire_vkGetDeviceImageSubresourceLayout(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +void vkb_wire_vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes); +uint64_t vkb_wire_vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); +void vkb_wire_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue); +void vkb_wire_vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); +void vkb_wire_vkGetDeviceTensorMemoryRequirementsARM(VkDevice device, const VkDeviceTensorMemoryRequirementsARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +VkResult vkb_wire_vkGetEventStatus(VkDevice device, VkEvent event); +VkResult vkb_wire_vkGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd); +VkResult vkb_wire_vkGetFenceStatus(VkDevice device, VkFence fence); +VkResult vkb_wire_vkGetImageDrmFormatModifierPropertiesEXT(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties); +void vkb_wire_vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements); +void vkb_wire_vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +void vkb_wire_vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements); +void vkb_wire_vkGetImageSparseMemoryRequirements2(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +void vkb_wire_vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout); +void vkb_wire_vkGetImageSubresourceLayout2(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); +VkResult vkb_wire_vkGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd); +VkResult vkb_wire_vkGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); +VkResult vkb_wire_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains); +VkResult vkb_wire_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesKHR* pProperties); +void vkb_wire_vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); +void vkb_wire_vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); +void vkb_wire_vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +void vkb_wire_vkGetPhysicalDeviceExternalTensorPropertiesARM(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, VkExternalTensorPropertiesARM* pExternalTensorProperties); +void vkb_wire_vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures); +void vkb_wire_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); +void vkb_wire_vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties); +void vkb_wire_vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); +VkResult vkb_wire_vkGetPhysicalDeviceFragmentShadingRatesKHR(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); +VkResult vkb_wire_vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties); +VkResult vkb_wire_vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); +void vkb_wire_vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties); +void vkb_wire_vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +void vkb_wire_vkGetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); +void vkb_wire_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties); +void vkb_wire_vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); +void vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties); +void vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); +void vkb_wire_vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties); +void vkb_wire_vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); +VkResult vkb_wire_vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); +VkResult vkb_wire_vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData); +VkResult vkb_wire_vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags); +void vkb_wire_vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity); +void vkb_wire_vkGetRenderingAreaGranularity(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +VkResult vkb_wire_vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); +VkResult vkb_wire_vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd); +void vkb_wire_vkGetShaderModuleCreateInfoIdentifierEXT(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier); +void vkb_wire_vkGetShaderModuleIdentifierEXT(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier); +void vkb_wire_vkGetTensorMemoryRequirementsARM(VkDevice device, const VkTensorMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +VkResult vkb_wire_vkImportFenceFdKHR(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo); +VkResult vkb_wire_vkImportSemaphoreFdKHR(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); +VkResult vkb_wire_vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); +VkResult vkb_wire_vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches); +VkResult vkb_wire_vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); +VkResult vkb_wire_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); +VkResult vkb_wire_vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); +VkResult vkb_wire_vkQueueWaitIdle(VkQueue queue); +VkResult vkb_wire_vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); +VkResult vkb_wire_vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); +VkResult vkb_wire_vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); +VkResult vkb_wire_vkResetEvent(VkDevice device, VkEvent event); +VkResult vkb_wire_vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences); +void vkb_wire_vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +void vkb_wire_vkSetDeviceMemoryPriorityEXT(VkDevice device, VkDeviceMemory memory, float priority); +VkResult vkb_wire_vkSetEvent(VkDevice device, VkEvent event); +VkResult vkb_wire_vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); +void vkb_wire_vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); +void vkb_wire_vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies); +VkResult vkb_wire_vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); +VkResult vkb_wire_vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAcquireNextImage2KHR(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushDescriptorSetWithTemplate2(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCopyImageToImage(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCopyImageToMemory(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCopyMemoryToImage(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateHeadlessSurfaceEXT(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreatePrivateDataSlot(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDescriptorUpdateTemplate(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkDeviceWaitIdle(VkDevice device); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEndCommandBuffer(VkCommandBuffer commandBuffer); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumerateInstanceVersion(uint32_t* pApiVersion); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceBufferMemoryRequirements(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetDeviceGroupPresentCapabilitiesKHR(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceImageMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceImageSparseMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkb_ep_vkGetDeviceProcAddr(VkDevice device, const char* pName); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetFenceStatus(VkDevice device, VkFence fence); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSparseMemoryRequirements2(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkb_ep_vkGetInstanceProcAddr(VkInstance instance, const char* pName); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); +VKAPI_ATTR VkBool32 VKAPI_CALL vkb_ep_vkGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); +VKAPI_ATTR VkBool32 VKAPI_CALL vkb_ep_vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); +VKAPI_ATTR VkBool32 VKAPI_CALL vkb_ep_vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkMapMemory2(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkQueueBeginDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkQueueEndDebugUtilsLabelEXT(VkQueue queue); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkQueueInsertDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* pPresentInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueWaitIdle(VkQueue queue); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetDebugUtilsObjectNameEXT(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetDebugUtilsObjectTagEXT(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkSubmitDebugUtilsMessageEXT(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkTransitionImageLayout(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkUnmapMemory(VkDevice device, VkDeviceMemory memory); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkUnmapMemory2(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); +VKAPI_ATTR void VKAPI_CALL vkb_ep_vkUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); +VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); +#endif diff --git a/tools/vkbridge/common/gen/vkb_gen.h b/tools/vkbridge/common/gen/vkb_gen.h new file mode 100644 index 000000000..65fddcad8 --- /dev/null +++ b/tools/vkbridge/common/gen/vkb_gen.h @@ -0,0 +1,2608 @@ +/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */ +#ifndef VKB_GEN_H +#define VKB_GEN_H +#define VK_NO_PROTOTYPES 1 +#ifdef VKB_CLIENT +#define VK_USE_PLATFORM_WAYLAND_KHR 1 +#define VK_USE_PLATFORM_XCB_KHR 1 +#define VK_USE_PLATFORM_XLIB_KHR 1 +#endif +#include +#include +#include +typedef struct vkb_enc vkb_enc; +typedef struct vkb_dec vkb_dec; +#define VKB_PROTOCOL_HASH 0xa9af75dc848727baULL +enum vkb_cmd_id { + VKB_CMD_vkbHello = 0, + VKB_CMD_vkbQueryServer = 1, + VKB_CMD_vkbDescUpdateRaw = 2, + VKB_CMD_vkbPushDescRaw = 3, + VKB_CMD_vkbAllocDescSets = 4, + VKB_CMD_vkAllocateCommandBuffers = 5, + VKB_CMD_vkAllocateDescriptorSets = 6, + VKB_CMD_vkAllocateMemory = 7, + VKB_CMD_vkBeginCommandBuffer = 8, + VKB_CMD_vkBindBufferMemory = 9, + VKB_CMD_vkBindBufferMemory2 = 10, + VKB_CMD_vkBindImageMemory = 11, + VKB_CMD_vkBindImageMemory2 = 12, + VKB_CMD_vkBindTensorMemoryARM = 13, + VKB_CMD_vkCmdBeginConditionalRenderingEXT = 14, + VKB_CMD_vkCmdBeginCustomResolveEXT = 15, + VKB_CMD_vkCmdBeginQuery = 16, + VKB_CMD_vkCmdBeginQueryIndexedEXT = 17, + VKB_CMD_vkCmdBeginRenderPass = 18, + VKB_CMD_vkCmdBeginRenderPass2 = 19, + VKB_CMD_vkCmdBeginRendering = 20, + VKB_CMD_vkCmdBeginTransformFeedbackEXT = 21, + VKB_CMD_vkCmdBindDescriptorSets = 22, + VKB_CMD_vkCmdBindDescriptorSets2 = 23, + VKB_CMD_vkCmdBindIndexBuffer = 24, + VKB_CMD_vkCmdBindIndexBuffer2 = 25, + VKB_CMD_vkCmdBindPipeline = 26, + VKB_CMD_vkCmdBindTransformFeedbackBuffersEXT = 27, + VKB_CMD_vkCmdBindVertexBuffers = 28, + VKB_CMD_vkCmdBindVertexBuffers2 = 29, + VKB_CMD_vkCmdBlitImage = 30, + VKB_CMD_vkCmdBlitImage2 = 31, + VKB_CMD_vkCmdClearAttachments = 32, + VKB_CMD_vkCmdClearColorImage = 33, + VKB_CMD_vkCmdClearDepthStencilImage = 34, + VKB_CMD_vkCmdCopyBuffer = 35, + VKB_CMD_vkCmdCopyBuffer2 = 36, + VKB_CMD_vkCmdCopyBufferToImage = 37, + VKB_CMD_vkCmdCopyBufferToImage2 = 38, + VKB_CMD_vkCmdCopyImage = 39, + VKB_CMD_vkCmdCopyImage2 = 40, + VKB_CMD_vkCmdCopyImageToBuffer = 41, + VKB_CMD_vkCmdCopyImageToBuffer2 = 42, + VKB_CMD_vkCmdCopyQueryPoolResults = 43, + VKB_CMD_vkCmdCopyTensorARM = 44, + VKB_CMD_vkCmdDispatch = 45, + VKB_CMD_vkCmdDispatchBase = 46, + VKB_CMD_vkCmdDispatchIndirect = 47, + VKB_CMD_vkCmdDraw = 48, + VKB_CMD_vkCmdDrawIndexed = 49, + VKB_CMD_vkCmdDrawIndexedIndirect = 50, + VKB_CMD_vkCmdDrawIndexedIndirectCount = 51, + VKB_CMD_vkCmdDrawIndirect = 52, + VKB_CMD_vkCmdDrawIndirectByteCountEXT = 53, + VKB_CMD_vkCmdDrawIndirectCount = 54, + VKB_CMD_vkCmdDrawMultiEXT = 55, + VKB_CMD_vkCmdDrawMultiIndexedEXT = 56, + VKB_CMD_vkCmdEndConditionalRenderingEXT = 57, + VKB_CMD_vkCmdEndQuery = 58, + VKB_CMD_vkCmdEndQueryIndexedEXT = 59, + VKB_CMD_vkCmdEndRenderPass = 60, + VKB_CMD_vkCmdEndRenderPass2 = 61, + VKB_CMD_vkCmdEndRendering = 62, + VKB_CMD_vkCmdEndRendering2KHR = 63, + VKB_CMD_vkCmdEndTransformFeedbackEXT = 64, + VKB_CMD_vkCmdExecuteCommands = 65, + VKB_CMD_vkCmdFillBuffer = 66, + VKB_CMD_vkCmdNextSubpass = 67, + VKB_CMD_vkCmdNextSubpass2 = 68, + VKB_CMD_vkCmdPipelineBarrier = 69, + VKB_CMD_vkCmdPipelineBarrier2 = 70, + VKB_CMD_vkCmdPushConstants = 71, + VKB_CMD_vkCmdPushConstants2 = 72, + VKB_CMD_vkCmdPushDescriptorSet = 73, + VKB_CMD_vkCmdPushDescriptorSet2 = 74, + VKB_CMD_vkCmdResetEvent = 75, + VKB_CMD_vkCmdResetEvent2 = 76, + VKB_CMD_vkCmdResetQueryPool = 77, + VKB_CMD_vkCmdResolveImage = 78, + VKB_CMD_vkCmdResolveImage2 = 79, + VKB_CMD_vkCmdSetAlphaToCoverageEnableEXT = 80, + VKB_CMD_vkCmdSetAlphaToOneEnableEXT = 81, + VKB_CMD_vkCmdSetAttachmentFeedbackLoopEnableEXT = 82, + VKB_CMD_vkCmdSetBlendConstants = 83, + VKB_CMD_vkCmdSetColorBlendAdvancedEXT = 84, + VKB_CMD_vkCmdSetColorBlendEnableEXT = 85, + VKB_CMD_vkCmdSetColorBlendEquationEXT = 86, + VKB_CMD_vkCmdSetColorWriteEnableEXT = 87, + VKB_CMD_vkCmdSetColorWriteMaskEXT = 88, + VKB_CMD_vkCmdSetConservativeRasterizationModeEXT = 89, + VKB_CMD_vkCmdSetCullMode = 90, + VKB_CMD_vkCmdSetDepthBias = 91, + VKB_CMD_vkCmdSetDepthBias2EXT = 92, + VKB_CMD_vkCmdSetDepthBiasEnable = 93, + VKB_CMD_vkCmdSetDepthBounds = 94, + VKB_CMD_vkCmdSetDepthBoundsTestEnable = 95, + VKB_CMD_vkCmdSetDepthClampEnableEXT = 96, + VKB_CMD_vkCmdSetDepthClampRangeEXT = 97, + VKB_CMD_vkCmdSetDepthClipEnableEXT = 98, + VKB_CMD_vkCmdSetDepthClipNegativeOneToOneEXT = 99, + VKB_CMD_vkCmdSetDepthCompareOp = 100, + VKB_CMD_vkCmdSetDepthTestEnable = 101, + VKB_CMD_vkCmdSetDepthWriteEnable = 102, + VKB_CMD_vkCmdSetDeviceMask = 103, + VKB_CMD_vkCmdSetDiscardRectangleEXT = 104, + VKB_CMD_vkCmdSetDiscardRectangleEnableEXT = 105, + VKB_CMD_vkCmdSetDiscardRectangleModeEXT = 106, + VKB_CMD_vkCmdSetEvent = 107, + VKB_CMD_vkCmdSetEvent2 = 108, + VKB_CMD_vkCmdSetExtraPrimitiveOverestimationSizeEXT = 109, + VKB_CMD_vkCmdSetFragmentShadingRateKHR = 110, + VKB_CMD_vkCmdSetFrontFace = 111, + VKB_CMD_vkCmdSetLineRasterizationModeEXT = 112, + VKB_CMD_vkCmdSetLineStipple = 113, + VKB_CMD_vkCmdSetLineStippleEnableEXT = 114, + VKB_CMD_vkCmdSetLineWidth = 115, + VKB_CMD_vkCmdSetLogicOpEXT = 116, + VKB_CMD_vkCmdSetLogicOpEnableEXT = 117, + VKB_CMD_vkCmdSetPatchControlPointsEXT = 118, + VKB_CMD_vkCmdSetPolygonModeEXT = 119, + VKB_CMD_vkCmdSetPrimitiveRestartEnable = 120, + VKB_CMD_vkCmdSetPrimitiveTopology = 121, + VKB_CMD_vkCmdSetProvokingVertexModeEXT = 122, + VKB_CMD_vkCmdSetRasterizationSamplesEXT = 123, + VKB_CMD_vkCmdSetRasterizationStreamEXT = 124, + VKB_CMD_vkCmdSetRasterizerDiscardEnable = 125, + VKB_CMD_vkCmdSetRenderingAttachmentLocations = 126, + VKB_CMD_vkCmdSetRenderingInputAttachmentIndices = 127, + VKB_CMD_vkCmdSetSampleLocationsEXT = 128, + VKB_CMD_vkCmdSetSampleLocationsEnableEXT = 129, + VKB_CMD_vkCmdSetSampleMaskEXT = 130, + VKB_CMD_vkCmdSetScissor = 131, + VKB_CMD_vkCmdSetScissorWithCount = 132, + VKB_CMD_vkCmdSetStencilCompareMask = 133, + VKB_CMD_vkCmdSetStencilOp = 134, + VKB_CMD_vkCmdSetStencilReference = 135, + VKB_CMD_vkCmdSetStencilTestEnable = 136, + VKB_CMD_vkCmdSetStencilWriteMask = 137, + VKB_CMD_vkCmdSetTessellationDomainOriginEXT = 138, + VKB_CMD_vkCmdSetVertexInputEXT = 139, + VKB_CMD_vkCmdSetViewport = 140, + VKB_CMD_vkCmdSetViewportWithCount = 141, + VKB_CMD_vkCmdUpdateBuffer = 142, + VKB_CMD_vkCmdWaitEvents = 143, + VKB_CMD_vkCmdWaitEvents2 = 144, + VKB_CMD_vkCmdWriteTimestamp = 145, + VKB_CMD_vkCmdWriteTimestamp2 = 146, + VKB_CMD_vkCreateBuffer = 147, + VKB_CMD_vkCreateBufferView = 148, + VKB_CMD_vkCreateCommandPool = 149, + VKB_CMD_vkCreateComputePipelines = 150, + VKB_CMD_vkCreateDescriptorPool = 151, + VKB_CMD_vkCreateDescriptorSetLayout = 152, + VKB_CMD_vkCreateDescriptorUpdateTemplate = 153, + VKB_CMD_vkCreateDevice = 154, + VKB_CMD_vkCreateEvent = 155, + VKB_CMD_vkCreateFence = 156, + VKB_CMD_vkCreateFramebuffer = 157, + VKB_CMD_vkCreateGraphicsPipelines = 158, + VKB_CMD_vkCreateImage = 159, + VKB_CMD_vkCreateImageView = 160, + VKB_CMD_vkCreateInstance = 161, + VKB_CMD_vkCreatePipelineCache = 162, + VKB_CMD_vkCreatePipelineLayout = 163, + VKB_CMD_vkCreateQueryPool = 164, + VKB_CMD_vkCreateRenderPass = 165, + VKB_CMD_vkCreateRenderPass2 = 166, + VKB_CMD_vkCreateSampler = 167, + VKB_CMD_vkCreateSamplerYcbcrConversion = 168, + VKB_CMD_vkCreateSemaphore = 169, + VKB_CMD_vkCreateShaderModule = 170, + VKB_CMD_vkCreateTensorARM = 171, + VKB_CMD_vkCreateTensorViewARM = 172, + VKB_CMD_vkDestroyBuffer = 173, + VKB_CMD_vkDestroyBufferView = 174, + VKB_CMD_vkDestroyCommandPool = 175, + VKB_CMD_vkDestroyDescriptorPool = 176, + VKB_CMD_vkDestroyDescriptorSetLayout = 177, + VKB_CMD_vkDestroyDescriptorUpdateTemplate = 178, + VKB_CMD_vkDestroyDevice = 179, + VKB_CMD_vkDestroyEvent = 180, + VKB_CMD_vkDestroyFence = 181, + VKB_CMD_vkDestroyFramebuffer = 182, + VKB_CMD_vkDestroyImage = 183, + VKB_CMD_vkDestroyImageView = 184, + VKB_CMD_vkDestroyInstance = 185, + VKB_CMD_vkDestroyPipeline = 186, + VKB_CMD_vkDestroyPipelineCache = 187, + VKB_CMD_vkDestroyPipelineLayout = 188, + VKB_CMD_vkDestroyQueryPool = 189, + VKB_CMD_vkDestroyRenderPass = 190, + VKB_CMD_vkDestroySampler = 191, + VKB_CMD_vkDestroySamplerYcbcrConversion = 192, + VKB_CMD_vkDestroySemaphore = 193, + VKB_CMD_vkDestroyShaderModule = 194, + VKB_CMD_vkDestroyTensorARM = 195, + VKB_CMD_vkDestroyTensorViewARM = 196, + VKB_CMD_vkDeviceWaitIdle = 197, + VKB_CMD_vkEndCommandBuffer = 198, + VKB_CMD_vkEnumerateDeviceExtensionProperties = 199, + VKB_CMD_vkEnumerateInstanceExtensionProperties = 200, + VKB_CMD_vkEnumerateInstanceLayerProperties = 201, + VKB_CMD_vkEnumerateInstanceVersion = 202, + VKB_CMD_vkEnumeratePhysicalDeviceGroups = 203, + VKB_CMD_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM = 204, + VKB_CMD_vkEnumeratePhysicalDevices = 205, + VKB_CMD_vkFlushMappedMemoryRanges = 206, + VKB_CMD_vkFreeCommandBuffers = 207, + VKB_CMD_vkFreeDescriptorSets = 208, + VKB_CMD_vkFreeMemory = 209, + VKB_CMD_vkGetBufferDeviceAddress = 210, + VKB_CMD_vkGetBufferMemoryRequirements = 211, + VKB_CMD_vkGetBufferMemoryRequirements2 = 212, + VKB_CMD_vkGetBufferOpaqueCaptureAddress = 213, + VKB_CMD_vkGetCalibratedTimestampsKHR = 214, + VKB_CMD_vkGetDescriptorSetLayoutSupport = 215, + VKB_CMD_vkGetDeviceBufferMemoryRequirements = 216, + VKB_CMD_vkGetDeviceGroupPeerMemoryFeatures = 217, + VKB_CMD_vkGetDeviceImageMemoryRequirements = 218, + VKB_CMD_vkGetDeviceImageSparseMemoryRequirements = 219, + VKB_CMD_vkGetDeviceImageSubresourceLayout = 220, + VKB_CMD_vkGetDeviceMemoryCommitment = 221, + VKB_CMD_vkGetDeviceMemoryOpaqueCaptureAddress = 222, + VKB_CMD_vkGetDeviceQueue = 223, + VKB_CMD_vkGetDeviceQueue2 = 224, + VKB_CMD_vkGetDeviceTensorMemoryRequirementsARM = 225, + VKB_CMD_vkGetEventStatus = 226, + VKB_CMD_vkGetFenceFdKHR = 227, + VKB_CMD_vkGetFenceStatus = 228, + VKB_CMD_vkGetImageDrmFormatModifierPropertiesEXT = 229, + VKB_CMD_vkGetImageMemoryRequirements = 230, + VKB_CMD_vkGetImageMemoryRequirements2 = 231, + VKB_CMD_vkGetImageSparseMemoryRequirements = 232, + VKB_CMD_vkGetImageSparseMemoryRequirements2 = 233, + VKB_CMD_vkGetImageSubresourceLayout = 234, + VKB_CMD_vkGetImageSubresourceLayout2 = 235, + VKB_CMD_vkGetMemoryFdKHR = 236, + VKB_CMD_vkGetMemoryFdPropertiesKHR = 237, + VKB_CMD_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = 238, + VKB_CMD_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = 239, + VKB_CMD_vkGetPhysicalDeviceExternalBufferProperties = 240, + VKB_CMD_vkGetPhysicalDeviceExternalFenceProperties = 241, + VKB_CMD_vkGetPhysicalDeviceExternalSemaphoreProperties = 242, + VKB_CMD_vkGetPhysicalDeviceExternalTensorPropertiesARM = 243, + VKB_CMD_vkGetPhysicalDeviceFeatures = 244, + VKB_CMD_vkGetPhysicalDeviceFeatures2 = 245, + VKB_CMD_vkGetPhysicalDeviceFormatProperties = 246, + VKB_CMD_vkGetPhysicalDeviceFormatProperties2 = 247, + VKB_CMD_vkGetPhysicalDeviceFragmentShadingRatesKHR = 248, + VKB_CMD_vkGetPhysicalDeviceImageFormatProperties = 249, + VKB_CMD_vkGetPhysicalDeviceImageFormatProperties2 = 250, + VKB_CMD_vkGetPhysicalDeviceMemoryProperties = 251, + VKB_CMD_vkGetPhysicalDeviceMemoryProperties2 = 252, + VKB_CMD_vkGetPhysicalDeviceMultisamplePropertiesEXT = 253, + VKB_CMD_vkGetPhysicalDeviceProperties = 254, + VKB_CMD_vkGetPhysicalDeviceProperties2 = 255, + VKB_CMD_vkGetPhysicalDeviceQueueFamilyProperties = 256, + VKB_CMD_vkGetPhysicalDeviceQueueFamilyProperties2 = 257, + VKB_CMD_vkGetPhysicalDeviceSparseImageFormatProperties = 258, + VKB_CMD_vkGetPhysicalDeviceSparseImageFormatProperties2 = 259, + VKB_CMD_vkGetPhysicalDeviceToolProperties = 260, + VKB_CMD_vkGetPipelineCacheData = 261, + VKB_CMD_vkGetQueryPoolResults = 262, + VKB_CMD_vkGetRenderAreaGranularity = 263, + VKB_CMD_vkGetRenderingAreaGranularity = 264, + VKB_CMD_vkGetSemaphoreCounterValue = 265, + VKB_CMD_vkGetSemaphoreFdKHR = 266, + VKB_CMD_vkGetShaderModuleCreateInfoIdentifierEXT = 267, + VKB_CMD_vkGetShaderModuleIdentifierEXT = 268, + VKB_CMD_vkGetTensorMemoryRequirementsARM = 269, + VKB_CMD_vkImportFenceFdKHR = 270, + VKB_CMD_vkImportSemaphoreFdKHR = 271, + VKB_CMD_vkInvalidateMappedMemoryRanges = 272, + VKB_CMD_vkMergePipelineCaches = 273, + VKB_CMD_vkQueueBindSparse = 274, + VKB_CMD_vkQueueSubmit = 275, + VKB_CMD_vkQueueSubmit2 = 276, + VKB_CMD_vkQueueWaitIdle = 277, + VKB_CMD_vkResetCommandBuffer = 278, + VKB_CMD_vkResetCommandPool = 279, + VKB_CMD_vkResetDescriptorPool = 280, + VKB_CMD_vkResetEvent = 281, + VKB_CMD_vkResetFences = 282, + VKB_CMD_vkResetQueryPool = 283, + VKB_CMD_vkSetDeviceMemoryPriorityEXT = 284, + VKB_CMD_vkSetEvent = 285, + VKB_CMD_vkSignalSemaphore = 286, + VKB_CMD_vkTrimCommandPool = 287, + VKB_CMD_vkUpdateDescriptorSets = 288, + VKB_CMD_vkWaitForFences = 289, + VKB_CMD_vkWaitSemaphores = 290, + VKB_CMD_COUNT = 291 +}; +extern const char *const vkb_cmd_names[VKB_CMD_COUNT]; +extern const unsigned char vkb_cmd_result[VKB_CMD_COUNT]; /* returns VkResult (first in the reply) */ + +/* Every bridged command, by its canonical name (aliases resolve to these). */ +typedef struct vkb_dispatch { + PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; + PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; + PFN_vkAllocateMemory vkAllocateMemory; + PFN_vkBeginCommandBuffer vkBeginCommandBuffer; + PFN_vkBindBufferMemory vkBindBufferMemory; + PFN_vkBindBufferMemory2 vkBindBufferMemory2; + PFN_vkBindImageMemory vkBindImageMemory; + PFN_vkBindImageMemory2 vkBindImageMemory2; + PFN_vkBindTensorMemoryARM vkBindTensorMemoryARM; + PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; + PFN_vkCmdBeginCustomResolveEXT vkCmdBeginCustomResolveEXT; + PFN_vkCmdBeginQuery vkCmdBeginQuery; + PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; + PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; + PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; + PFN_vkCmdBeginRendering vkCmdBeginRendering; + PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; + PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; + PFN_vkCmdBindDescriptorSets2 vkCmdBindDescriptorSets2; + PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; + PFN_vkCmdBindIndexBuffer2 vkCmdBindIndexBuffer2; + PFN_vkCmdBindPipeline vkCmdBindPipeline; + PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; + PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; + PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2; + PFN_vkCmdBlitImage vkCmdBlitImage; + PFN_vkCmdBlitImage2 vkCmdBlitImage2; + PFN_vkCmdClearAttachments vkCmdClearAttachments; + PFN_vkCmdClearColorImage vkCmdClearColorImage; + PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; + PFN_vkCmdCopyBuffer vkCmdCopyBuffer; + PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2; + PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; + PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2; + PFN_vkCmdCopyImage vkCmdCopyImage; + PFN_vkCmdCopyImage2 vkCmdCopyImage2; + PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; + PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2; + PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; + PFN_vkCmdCopyTensorARM vkCmdCopyTensorARM; + PFN_vkCmdDispatch vkCmdDispatch; + PFN_vkCmdDispatchBase vkCmdDispatchBase; + PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; + PFN_vkCmdDraw vkCmdDraw; + PFN_vkCmdDrawIndexed vkCmdDrawIndexed; + PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; + PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; + PFN_vkCmdDrawIndirect vkCmdDrawIndirect; + PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; + PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; + PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT; + PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT; + PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; + PFN_vkCmdEndQuery vkCmdEndQuery; + PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; + PFN_vkCmdEndRenderPass vkCmdEndRenderPass; + PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; + PFN_vkCmdEndRendering vkCmdEndRendering; + PFN_vkCmdEndRendering2KHR vkCmdEndRendering2KHR; + PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; + PFN_vkCmdExecuteCommands vkCmdExecuteCommands; + PFN_vkCmdFillBuffer vkCmdFillBuffer; + PFN_vkCmdNextSubpass vkCmdNextSubpass; + PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; + PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; + PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2; + PFN_vkCmdPushConstants vkCmdPushConstants; + PFN_vkCmdPushConstants2 vkCmdPushConstants2; + PFN_vkCmdPushDescriptorSet vkCmdPushDescriptorSet; + PFN_vkCmdPushDescriptorSet2 vkCmdPushDescriptorSet2; + PFN_vkCmdPushDescriptorSetWithTemplate vkCmdPushDescriptorSetWithTemplate; + PFN_vkCmdResetEvent vkCmdResetEvent; + PFN_vkCmdResetEvent2 vkCmdResetEvent2; + PFN_vkCmdResetQueryPool vkCmdResetQueryPool; + PFN_vkCmdResolveImage vkCmdResolveImage; + PFN_vkCmdResolveImage2 vkCmdResolveImage2; + PFN_vkCmdSetAlphaToCoverageEnableEXT vkCmdSetAlphaToCoverageEnableEXT; + PFN_vkCmdSetAlphaToOneEnableEXT vkCmdSetAlphaToOneEnableEXT; + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT vkCmdSetAttachmentFeedbackLoopEnableEXT; + PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; + PFN_vkCmdSetColorBlendAdvancedEXT vkCmdSetColorBlendAdvancedEXT; + PFN_vkCmdSetColorBlendEnableEXT vkCmdSetColorBlendEnableEXT; + PFN_vkCmdSetColorBlendEquationEXT vkCmdSetColorBlendEquationEXT; + PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; + PFN_vkCmdSetColorWriteMaskEXT vkCmdSetColorWriteMaskEXT; + PFN_vkCmdSetConservativeRasterizationModeEXT vkCmdSetConservativeRasterizationModeEXT; + PFN_vkCmdSetCullMode vkCmdSetCullMode; + PFN_vkCmdSetDepthBias vkCmdSetDepthBias; + PFN_vkCmdSetDepthBias2EXT vkCmdSetDepthBias2EXT; + PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable; + PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; + PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable; + PFN_vkCmdSetDepthClampEnableEXT vkCmdSetDepthClampEnableEXT; + PFN_vkCmdSetDepthClampRangeEXT vkCmdSetDepthClampRangeEXT; + PFN_vkCmdSetDepthClipEnableEXT vkCmdSetDepthClipEnableEXT; + PFN_vkCmdSetDepthClipNegativeOneToOneEXT vkCmdSetDepthClipNegativeOneToOneEXT; + PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp; + PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable; + PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable; + PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; + PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; + PFN_vkCmdSetDiscardRectangleEnableEXT vkCmdSetDiscardRectangleEnableEXT; + PFN_vkCmdSetDiscardRectangleModeEXT vkCmdSetDiscardRectangleModeEXT; + PFN_vkCmdSetEvent vkCmdSetEvent; + PFN_vkCmdSetEvent2 vkCmdSetEvent2; + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT vkCmdSetExtraPrimitiveOverestimationSizeEXT; + PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; + PFN_vkCmdSetFrontFace vkCmdSetFrontFace; + PFN_vkCmdSetLineRasterizationModeEXT vkCmdSetLineRasterizationModeEXT; + PFN_vkCmdSetLineStipple vkCmdSetLineStipple; + PFN_vkCmdSetLineStippleEnableEXT vkCmdSetLineStippleEnableEXT; + PFN_vkCmdSetLineWidth vkCmdSetLineWidth; + PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT; + PFN_vkCmdSetLogicOpEnableEXT vkCmdSetLogicOpEnableEXT; + PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT; + PFN_vkCmdSetPolygonModeEXT vkCmdSetPolygonModeEXT; + PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable; + PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology; + PFN_vkCmdSetProvokingVertexModeEXT vkCmdSetProvokingVertexModeEXT; + PFN_vkCmdSetRasterizationSamplesEXT vkCmdSetRasterizationSamplesEXT; + PFN_vkCmdSetRasterizationStreamEXT vkCmdSetRasterizationStreamEXT; + PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable; + PFN_vkCmdSetRenderingAttachmentLocations vkCmdSetRenderingAttachmentLocations; + PFN_vkCmdSetRenderingInputAttachmentIndices vkCmdSetRenderingInputAttachmentIndices; + PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; + PFN_vkCmdSetSampleLocationsEnableEXT vkCmdSetSampleLocationsEnableEXT; + PFN_vkCmdSetSampleMaskEXT vkCmdSetSampleMaskEXT; + PFN_vkCmdSetScissor vkCmdSetScissor; + PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount; + PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; + PFN_vkCmdSetStencilOp vkCmdSetStencilOp; + PFN_vkCmdSetStencilReference vkCmdSetStencilReference; + PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable; + PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; + PFN_vkCmdSetTessellationDomainOriginEXT vkCmdSetTessellationDomainOriginEXT; + PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; + PFN_vkCmdSetViewport vkCmdSetViewport; + PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount; + PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; + PFN_vkCmdWaitEvents vkCmdWaitEvents; + PFN_vkCmdWaitEvents2 vkCmdWaitEvents2; + PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; + PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2; + PFN_vkCreateBuffer vkCreateBuffer; + PFN_vkCreateBufferView vkCreateBufferView; + PFN_vkCreateCommandPool vkCreateCommandPool; + PFN_vkCreateComputePipelines vkCreateComputePipelines; + PFN_vkCreateDescriptorPool vkCreateDescriptorPool; + PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; + PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; + PFN_vkCreateDevice vkCreateDevice; + PFN_vkCreateEvent vkCreateEvent; + PFN_vkCreateFence vkCreateFence; + PFN_vkCreateFramebuffer vkCreateFramebuffer; + PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; + PFN_vkCreateImage vkCreateImage; + PFN_vkCreateImageView vkCreateImageView; + PFN_vkCreateInstance vkCreateInstance; + PFN_vkCreatePipelineCache vkCreatePipelineCache; + PFN_vkCreatePipelineLayout vkCreatePipelineLayout; + PFN_vkCreateQueryPool vkCreateQueryPool; + PFN_vkCreateRenderPass vkCreateRenderPass; + PFN_vkCreateRenderPass2 vkCreateRenderPass2; + PFN_vkCreateSampler vkCreateSampler; + PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; + PFN_vkCreateSemaphore vkCreateSemaphore; + PFN_vkCreateShaderModule vkCreateShaderModule; + PFN_vkCreateTensorARM vkCreateTensorARM; + PFN_vkCreateTensorViewARM vkCreateTensorViewARM; + PFN_vkDestroyBuffer vkDestroyBuffer; + PFN_vkDestroyBufferView vkDestroyBufferView; + PFN_vkDestroyCommandPool vkDestroyCommandPool; + PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; + PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; + PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; + PFN_vkDestroyDevice vkDestroyDevice; + PFN_vkDestroyEvent vkDestroyEvent; + PFN_vkDestroyFence vkDestroyFence; + PFN_vkDestroyFramebuffer vkDestroyFramebuffer; + PFN_vkDestroyImage vkDestroyImage; + PFN_vkDestroyImageView vkDestroyImageView; + PFN_vkDestroyInstance vkDestroyInstance; + PFN_vkDestroyPipeline vkDestroyPipeline; + PFN_vkDestroyPipelineCache vkDestroyPipelineCache; + PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; + PFN_vkDestroyQueryPool vkDestroyQueryPool; + PFN_vkDestroyRenderPass vkDestroyRenderPass; + PFN_vkDestroySampler vkDestroySampler; + PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; + PFN_vkDestroySemaphore vkDestroySemaphore; + PFN_vkDestroyShaderModule vkDestroyShaderModule; + PFN_vkDestroyTensorARM vkDestroyTensorARM; + PFN_vkDestroyTensorViewARM vkDestroyTensorViewARM; + PFN_vkDeviceWaitIdle vkDeviceWaitIdle; + PFN_vkEndCommandBuffer vkEndCommandBuffer; + PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; + PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; + PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; + PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion; + PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups; + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM; + PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; + PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; + PFN_vkFreeCommandBuffers vkFreeCommandBuffers; + PFN_vkFreeDescriptorSets vkFreeDescriptorSets; + PFN_vkFreeMemory vkFreeMemory; + PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; + PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; + PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; + PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; + PFN_vkGetCalibratedTimestampsKHR vkGetCalibratedTimestampsKHR; + PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; + PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements; + PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; + PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements; + PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements; + PFN_vkGetDeviceImageSubresourceLayout vkGetDeviceImageSubresourceLayout; + PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; + PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; + PFN_vkGetDeviceQueue vkGetDeviceQueue; + PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; + PFN_vkGetDeviceTensorMemoryRequirementsARM vkGetDeviceTensorMemoryRequirementsARM; + PFN_vkGetEventStatus vkGetEventStatus; + PFN_vkGetFenceFdKHR vkGetFenceFdKHR; + PFN_vkGetFenceStatus vkGetFenceStatus; + PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; + PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; + PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; + PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; + PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; + PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; + PFN_vkGetImageSubresourceLayout2 vkGetImageSubresourceLayout2; + PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; + PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; + PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR vkGetPhysicalDeviceCalibrateableTimeDomainsKHR; + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR; + PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties; + PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties; + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM vkGetPhysicalDeviceExternalTensorPropertiesARM; + PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; + PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; + PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; + PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2; + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR; + PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; + PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2; + PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; + PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT; + PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; + PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; + PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2; + PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties; + PFN_vkGetPipelineCacheData vkGetPipelineCacheData; + PFN_vkGetQueryPoolResults vkGetQueryPoolResults; + PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; + PFN_vkGetRenderingAreaGranularity vkGetRenderingAreaGranularity; + PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; + PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; + PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT; + PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT; + PFN_vkGetTensorMemoryRequirementsARM vkGetTensorMemoryRequirementsARM; + PFN_vkImportFenceFdKHR vkImportFenceFdKHR; + PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; + PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; + PFN_vkMapMemory vkMapMemory; + PFN_vkMergePipelineCaches vkMergePipelineCaches; + PFN_vkQueueBindSparse vkQueueBindSparse; + PFN_vkQueueSubmit vkQueueSubmit; + PFN_vkQueueSubmit2 vkQueueSubmit2; + PFN_vkQueueWaitIdle vkQueueWaitIdle; + PFN_vkResetCommandBuffer vkResetCommandBuffer; + PFN_vkResetCommandPool vkResetCommandPool; + PFN_vkResetDescriptorPool vkResetDescriptorPool; + PFN_vkResetEvent vkResetEvent; + PFN_vkResetFences vkResetFences; + PFN_vkResetQueryPool vkResetQueryPool; + PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT; + PFN_vkSetEvent vkSetEvent; + PFN_vkSignalSemaphore vkSignalSemaphore; + PFN_vkTrimCommandPool vkTrimCommandPool; + PFN_vkUnmapMemory vkUnmapMemory; + PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; + PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; + PFN_vkWaitForFences vkWaitForFences; + PFN_vkWaitSemaphores vkWaitSemaphores; +} vkb_dispatch; +void vkb_dispatch_load_instance(vkb_dispatch *dt, PFN_vkGetInstanceProcAddr gipa, VkInstance instance); +void vkb_dispatch_load_device(vkb_dispatch *dt, PFN_vkGetDeviceProcAddr gdpa, VkDevice device); + +size_t vkb_struct_size(VkStructureType t); +void vkb_enc_chain_elem(vkb_enc *e, const VkBaseInStructure *b); +void vkb_dec_chain_elem(vkb_dec *d, VkStructureType t, void *dst); +void vkb_enc_VkApplicationInfo(vkb_enc *e, const VkApplicationInfo *s); +void vkb_encfix_VkApplicationInfo(vkb_enc *e, const VkApplicationInfo *s, size_t raw); +void vkb_dec_VkApplicationInfo(vkb_dec *d, VkApplicationInfo *s); +void vkb_decfix_VkApplicationInfo(vkb_dec *d, VkApplicationInfo *s); +void vkb_enc_VkAttachmentDescription2(vkb_enc *e, const VkAttachmentDescription2 *s); +void vkb_encfix_VkAttachmentDescription2(vkb_enc *e, const VkAttachmentDescription2 *s, size_t raw); +void vkb_dec_VkAttachmentDescription2(vkb_dec *d, VkAttachmentDescription2 *s); +void vkb_decfix_VkAttachmentDescription2(vkb_dec *d, VkAttachmentDescription2 *s); +void vkb_enc_VkAttachmentDescriptionStencilLayout(vkb_enc *e, const VkAttachmentDescriptionStencilLayout *s); +void vkb_encfix_VkAttachmentDescriptionStencilLayout(vkb_enc *e, const VkAttachmentDescriptionStencilLayout *s, size_t raw); +void vkb_dec_VkAttachmentDescriptionStencilLayout(vkb_dec *d, VkAttachmentDescriptionStencilLayout *s); +void vkb_decfix_VkAttachmentDescriptionStencilLayout(vkb_dec *d, VkAttachmentDescriptionStencilLayout *s); +void vkb_enc_VkAttachmentFeedbackLoopInfoEXT(vkb_enc *e, const VkAttachmentFeedbackLoopInfoEXT *s); +void vkb_encfix_VkAttachmentFeedbackLoopInfoEXT(vkb_enc *e, const VkAttachmentFeedbackLoopInfoEXT *s, size_t raw); +void vkb_dec_VkAttachmentFeedbackLoopInfoEXT(vkb_dec *d, VkAttachmentFeedbackLoopInfoEXT *s); +void vkb_decfix_VkAttachmentFeedbackLoopInfoEXT(vkb_dec *d, VkAttachmentFeedbackLoopInfoEXT *s); +void vkb_enc_VkAttachmentReference2(vkb_enc *e, const VkAttachmentReference2 *s); +void vkb_encfix_VkAttachmentReference2(vkb_enc *e, const VkAttachmentReference2 *s, size_t raw); +void vkb_dec_VkAttachmentReference2(vkb_dec *d, VkAttachmentReference2 *s); +void vkb_decfix_VkAttachmentReference2(vkb_dec *d, VkAttachmentReference2 *s); +void vkb_enc_VkAttachmentReferenceStencilLayout(vkb_enc *e, const VkAttachmentReferenceStencilLayout *s); +void vkb_encfix_VkAttachmentReferenceStencilLayout(vkb_enc *e, const VkAttachmentReferenceStencilLayout *s, size_t raw); +void vkb_dec_VkAttachmentReferenceStencilLayout(vkb_dec *d, VkAttachmentReferenceStencilLayout *s); +void vkb_decfix_VkAttachmentReferenceStencilLayout(vkb_dec *d, VkAttachmentReferenceStencilLayout *s); +void vkb_enc_VkAttachmentSampleLocationsEXT(vkb_enc *e, const VkAttachmentSampleLocationsEXT *s); +void vkb_encfix_VkAttachmentSampleLocationsEXT(vkb_enc *e, const VkAttachmentSampleLocationsEXT *s, size_t raw); +void vkb_dec_VkAttachmentSampleLocationsEXT(vkb_dec *d, VkAttachmentSampleLocationsEXT *s); +void vkb_decfix_VkAttachmentSampleLocationsEXT(vkb_dec *d, VkAttachmentSampleLocationsEXT *s); +void vkb_enc_VkBeginCustomResolveInfoEXT(vkb_enc *e, const VkBeginCustomResolveInfoEXT *s); +void vkb_encfix_VkBeginCustomResolveInfoEXT(vkb_enc *e, const VkBeginCustomResolveInfoEXT *s, size_t raw); +void vkb_dec_VkBeginCustomResolveInfoEXT(vkb_dec *d, VkBeginCustomResolveInfoEXT *s); +void vkb_decfix_VkBeginCustomResolveInfoEXT(vkb_dec *d, VkBeginCustomResolveInfoEXT *s); +void vkb_enc_VkBindBufferMemoryDeviceGroupInfo(vkb_enc *e, const VkBindBufferMemoryDeviceGroupInfo *s); +void vkb_encfix_VkBindBufferMemoryDeviceGroupInfo(vkb_enc *e, const VkBindBufferMemoryDeviceGroupInfo *s, size_t raw); +void vkb_dec_VkBindBufferMemoryDeviceGroupInfo(vkb_dec *d, VkBindBufferMemoryDeviceGroupInfo *s); +void vkb_decfix_VkBindBufferMemoryDeviceGroupInfo(vkb_dec *d, VkBindBufferMemoryDeviceGroupInfo *s); +void vkb_enc_VkBindBufferMemoryInfo(vkb_enc *e, const VkBindBufferMemoryInfo *s); +void vkb_encfix_VkBindBufferMemoryInfo(vkb_enc *e, const VkBindBufferMemoryInfo *s, size_t raw); +void vkb_dec_VkBindBufferMemoryInfo(vkb_dec *d, VkBindBufferMemoryInfo *s); +void vkb_decfix_VkBindBufferMemoryInfo(vkb_dec *d, VkBindBufferMemoryInfo *s); +void vkb_enc_VkBindDescriptorSetsInfo(vkb_enc *e, const VkBindDescriptorSetsInfo *s); +void vkb_encfix_VkBindDescriptorSetsInfo(vkb_enc *e, const VkBindDescriptorSetsInfo *s, size_t raw); +void vkb_dec_VkBindDescriptorSetsInfo(vkb_dec *d, VkBindDescriptorSetsInfo *s); +void vkb_decfix_VkBindDescriptorSetsInfo(vkb_dec *d, VkBindDescriptorSetsInfo *s); +void vkb_enc_VkBindImageMemoryDeviceGroupInfo(vkb_enc *e, const VkBindImageMemoryDeviceGroupInfo *s); +void vkb_encfix_VkBindImageMemoryDeviceGroupInfo(vkb_enc *e, const VkBindImageMemoryDeviceGroupInfo *s, size_t raw); +void vkb_dec_VkBindImageMemoryDeviceGroupInfo(vkb_dec *d, VkBindImageMemoryDeviceGroupInfo *s); +void vkb_decfix_VkBindImageMemoryDeviceGroupInfo(vkb_dec *d, VkBindImageMemoryDeviceGroupInfo *s); +void vkb_enc_VkBindImageMemoryInfo(vkb_enc *e, const VkBindImageMemoryInfo *s); +void vkb_encfix_VkBindImageMemoryInfo(vkb_enc *e, const VkBindImageMemoryInfo *s, size_t raw); +void vkb_dec_VkBindImageMemoryInfo(vkb_dec *d, VkBindImageMemoryInfo *s); +void vkb_decfix_VkBindImageMemoryInfo(vkb_dec *d, VkBindImageMemoryInfo *s); +void vkb_enc_VkBindImageMemorySwapchainInfoKHR(vkb_enc *e, const VkBindImageMemorySwapchainInfoKHR *s); +void vkb_encfix_VkBindImageMemorySwapchainInfoKHR(vkb_enc *e, const VkBindImageMemorySwapchainInfoKHR *s, size_t raw); +void vkb_dec_VkBindImageMemorySwapchainInfoKHR(vkb_dec *d, VkBindImageMemorySwapchainInfoKHR *s); +void vkb_decfix_VkBindImageMemorySwapchainInfoKHR(vkb_dec *d, VkBindImageMemorySwapchainInfoKHR *s); +void vkb_enc_VkBindImagePlaneMemoryInfo(vkb_enc *e, const VkBindImagePlaneMemoryInfo *s); +void vkb_encfix_VkBindImagePlaneMemoryInfo(vkb_enc *e, const VkBindImagePlaneMemoryInfo *s, size_t raw); +void vkb_dec_VkBindImagePlaneMemoryInfo(vkb_dec *d, VkBindImagePlaneMemoryInfo *s); +void vkb_decfix_VkBindImagePlaneMemoryInfo(vkb_dec *d, VkBindImagePlaneMemoryInfo *s); +void vkb_enc_VkBindMemoryStatus(vkb_enc *e, const VkBindMemoryStatus *s); +void vkb_encfix_VkBindMemoryStatus(vkb_enc *e, const VkBindMemoryStatus *s, size_t raw); +void vkb_dec_VkBindMemoryStatus(vkb_dec *d, VkBindMemoryStatus *s); +void vkb_decfix_VkBindMemoryStatus(vkb_dec *d, VkBindMemoryStatus *s); +void vkb_enc_VkBindSparseInfo(vkb_enc *e, const VkBindSparseInfo *s); +void vkb_encfix_VkBindSparseInfo(vkb_enc *e, const VkBindSparseInfo *s, size_t raw); +void vkb_dec_VkBindSparseInfo(vkb_dec *d, VkBindSparseInfo *s); +void vkb_decfix_VkBindSparseInfo(vkb_dec *d, VkBindSparseInfo *s); +void vkb_enc_VkBindTensorMemoryInfoARM(vkb_enc *e, const VkBindTensorMemoryInfoARM *s); +void vkb_encfix_VkBindTensorMemoryInfoARM(vkb_enc *e, const VkBindTensorMemoryInfoARM *s, size_t raw); +void vkb_dec_VkBindTensorMemoryInfoARM(vkb_dec *d, VkBindTensorMemoryInfoARM *s); +void vkb_decfix_VkBindTensorMemoryInfoARM(vkb_dec *d, VkBindTensorMemoryInfoARM *s); +void vkb_enc_VkBlitImageInfo2(vkb_enc *e, const VkBlitImageInfo2 *s); +void vkb_encfix_VkBlitImageInfo2(vkb_enc *e, const VkBlitImageInfo2 *s, size_t raw); +void vkb_dec_VkBlitImageInfo2(vkb_dec *d, VkBlitImageInfo2 *s); +void vkb_decfix_VkBlitImageInfo2(vkb_dec *d, VkBlitImageInfo2 *s); +void vkb_enc_VkBufferCopy2(vkb_enc *e, const VkBufferCopy2 *s); +void vkb_encfix_VkBufferCopy2(vkb_enc *e, const VkBufferCopy2 *s, size_t raw); +void vkb_dec_VkBufferCopy2(vkb_dec *d, VkBufferCopy2 *s); +void vkb_decfix_VkBufferCopy2(vkb_dec *d, VkBufferCopy2 *s); +void vkb_enc_VkBufferCreateInfo(vkb_enc *e, const VkBufferCreateInfo *s); +void vkb_encfix_VkBufferCreateInfo(vkb_enc *e, const VkBufferCreateInfo *s, size_t raw); +void vkb_dec_VkBufferCreateInfo(vkb_dec *d, VkBufferCreateInfo *s); +void vkb_decfix_VkBufferCreateInfo(vkb_dec *d, VkBufferCreateInfo *s); +void vkb_enc_VkBufferDeviceAddressCreateInfoEXT(vkb_enc *e, const VkBufferDeviceAddressCreateInfoEXT *s); +void vkb_encfix_VkBufferDeviceAddressCreateInfoEXT(vkb_enc *e, const VkBufferDeviceAddressCreateInfoEXT *s, size_t raw); +void vkb_dec_VkBufferDeviceAddressCreateInfoEXT(vkb_dec *d, VkBufferDeviceAddressCreateInfoEXT *s); +void vkb_decfix_VkBufferDeviceAddressCreateInfoEXT(vkb_dec *d, VkBufferDeviceAddressCreateInfoEXT *s); +void vkb_enc_VkBufferDeviceAddressInfo(vkb_enc *e, const VkBufferDeviceAddressInfo *s); +void vkb_encfix_VkBufferDeviceAddressInfo(vkb_enc *e, const VkBufferDeviceAddressInfo *s, size_t raw); +void vkb_dec_VkBufferDeviceAddressInfo(vkb_dec *d, VkBufferDeviceAddressInfo *s); +void vkb_decfix_VkBufferDeviceAddressInfo(vkb_dec *d, VkBufferDeviceAddressInfo *s); +void vkb_enc_VkBufferImageCopy2(vkb_enc *e, const VkBufferImageCopy2 *s); +void vkb_encfix_VkBufferImageCopy2(vkb_enc *e, const VkBufferImageCopy2 *s, size_t raw); +void vkb_dec_VkBufferImageCopy2(vkb_dec *d, VkBufferImageCopy2 *s); +void vkb_decfix_VkBufferImageCopy2(vkb_dec *d, VkBufferImageCopy2 *s); +void vkb_enc_VkBufferMemoryBarrier(vkb_enc *e, const VkBufferMemoryBarrier *s); +void vkb_encfix_VkBufferMemoryBarrier(vkb_enc *e, const VkBufferMemoryBarrier *s, size_t raw); +void vkb_dec_VkBufferMemoryBarrier(vkb_dec *d, VkBufferMemoryBarrier *s); +void vkb_decfix_VkBufferMemoryBarrier(vkb_dec *d, VkBufferMemoryBarrier *s); +void vkb_enc_VkBufferMemoryBarrier2(vkb_enc *e, const VkBufferMemoryBarrier2 *s); +void vkb_encfix_VkBufferMemoryBarrier2(vkb_enc *e, const VkBufferMemoryBarrier2 *s, size_t raw); +void vkb_dec_VkBufferMemoryBarrier2(vkb_dec *d, VkBufferMemoryBarrier2 *s); +void vkb_decfix_VkBufferMemoryBarrier2(vkb_dec *d, VkBufferMemoryBarrier2 *s); +void vkb_enc_VkBufferMemoryRequirementsInfo2(vkb_enc *e, const VkBufferMemoryRequirementsInfo2 *s); +void vkb_encfix_VkBufferMemoryRequirementsInfo2(vkb_enc *e, const VkBufferMemoryRequirementsInfo2 *s, size_t raw); +void vkb_dec_VkBufferMemoryRequirementsInfo2(vkb_dec *d, VkBufferMemoryRequirementsInfo2 *s); +void vkb_decfix_VkBufferMemoryRequirementsInfo2(vkb_dec *d, VkBufferMemoryRequirementsInfo2 *s); +void vkb_enc_VkBufferOpaqueCaptureAddressCreateInfo(vkb_enc *e, const VkBufferOpaqueCaptureAddressCreateInfo *s); +void vkb_encfix_VkBufferOpaqueCaptureAddressCreateInfo(vkb_enc *e, const VkBufferOpaqueCaptureAddressCreateInfo *s, size_t raw); +void vkb_dec_VkBufferOpaqueCaptureAddressCreateInfo(vkb_dec *d, VkBufferOpaqueCaptureAddressCreateInfo *s); +void vkb_decfix_VkBufferOpaqueCaptureAddressCreateInfo(vkb_dec *d, VkBufferOpaqueCaptureAddressCreateInfo *s); +void vkb_enc_VkBufferUsageFlags2CreateInfo(vkb_enc *e, const VkBufferUsageFlags2CreateInfo *s); +void vkb_encfix_VkBufferUsageFlags2CreateInfo(vkb_enc *e, const VkBufferUsageFlags2CreateInfo *s, size_t raw); +void vkb_dec_VkBufferUsageFlags2CreateInfo(vkb_dec *d, VkBufferUsageFlags2CreateInfo *s); +void vkb_decfix_VkBufferUsageFlags2CreateInfo(vkb_dec *d, VkBufferUsageFlags2CreateInfo *s); +void vkb_enc_VkBufferViewCreateInfo(vkb_enc *e, const VkBufferViewCreateInfo *s); +void vkb_encfix_VkBufferViewCreateInfo(vkb_enc *e, const VkBufferViewCreateInfo *s, size_t raw); +void vkb_dec_VkBufferViewCreateInfo(vkb_dec *d, VkBufferViewCreateInfo *s); +void vkb_decfix_VkBufferViewCreateInfo(vkb_dec *d, VkBufferViewCreateInfo *s); +void vkb_enc_VkCalibratedTimestampInfoKHR(vkb_enc *e, const VkCalibratedTimestampInfoKHR *s); +void vkb_encfix_VkCalibratedTimestampInfoKHR(vkb_enc *e, const VkCalibratedTimestampInfoKHR *s, size_t raw); +void vkb_dec_VkCalibratedTimestampInfoKHR(vkb_dec *d, VkCalibratedTimestampInfoKHR *s); +void vkb_decfix_VkCalibratedTimestampInfoKHR(vkb_dec *d, VkCalibratedTimestampInfoKHR *s); +void vkb_enc_VkCommandBufferAllocateInfo(vkb_enc *e, const VkCommandBufferAllocateInfo *s); +void vkb_encfix_VkCommandBufferAllocateInfo(vkb_enc *e, const VkCommandBufferAllocateInfo *s, size_t raw); +void vkb_dec_VkCommandBufferAllocateInfo(vkb_dec *d, VkCommandBufferAllocateInfo *s); +void vkb_decfix_VkCommandBufferAllocateInfo(vkb_dec *d, VkCommandBufferAllocateInfo *s); +void vkb_enc_VkCommandBufferBeginInfo(vkb_enc *e, const VkCommandBufferBeginInfo *s); +void vkb_encfix_VkCommandBufferBeginInfo(vkb_enc *e, const VkCommandBufferBeginInfo *s, size_t raw); +void vkb_dec_VkCommandBufferBeginInfo(vkb_dec *d, VkCommandBufferBeginInfo *s); +void vkb_decfix_VkCommandBufferBeginInfo(vkb_dec *d, VkCommandBufferBeginInfo *s); +void vkb_enc_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_enc *e, const VkCommandBufferInheritanceConditionalRenderingInfoEXT *s); +void vkb_encfix_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_enc *e, const VkCommandBufferInheritanceConditionalRenderingInfoEXT *s, size_t raw); +void vkb_dec_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_dec *d, VkCommandBufferInheritanceConditionalRenderingInfoEXT *s); +void vkb_decfix_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_dec *d, VkCommandBufferInheritanceConditionalRenderingInfoEXT *s); +void vkb_enc_VkCommandBufferInheritanceInfo(vkb_enc *e, const VkCommandBufferInheritanceInfo *s); +void vkb_encfix_VkCommandBufferInheritanceInfo(vkb_enc *e, const VkCommandBufferInheritanceInfo *s, size_t raw); +void vkb_dec_VkCommandBufferInheritanceInfo(vkb_dec *d, VkCommandBufferInheritanceInfo *s); +void vkb_decfix_VkCommandBufferInheritanceInfo(vkb_dec *d, VkCommandBufferInheritanceInfo *s); +void vkb_enc_VkCommandBufferInheritanceRenderingInfo(vkb_enc *e, const VkCommandBufferInheritanceRenderingInfo *s); +void vkb_encfix_VkCommandBufferInheritanceRenderingInfo(vkb_enc *e, const VkCommandBufferInheritanceRenderingInfo *s, size_t raw); +void vkb_dec_VkCommandBufferInheritanceRenderingInfo(vkb_dec *d, VkCommandBufferInheritanceRenderingInfo *s); +void vkb_decfix_VkCommandBufferInheritanceRenderingInfo(vkb_dec *d, VkCommandBufferInheritanceRenderingInfo *s); +void vkb_enc_VkCommandBufferSubmitInfo(vkb_enc *e, const VkCommandBufferSubmitInfo *s); +void vkb_encfix_VkCommandBufferSubmitInfo(vkb_enc *e, const VkCommandBufferSubmitInfo *s, size_t raw); +void vkb_dec_VkCommandBufferSubmitInfo(vkb_dec *d, VkCommandBufferSubmitInfo *s); +void vkb_decfix_VkCommandBufferSubmitInfo(vkb_dec *d, VkCommandBufferSubmitInfo *s); +void vkb_enc_VkCommandPoolCreateInfo(vkb_enc *e, const VkCommandPoolCreateInfo *s); +void vkb_encfix_VkCommandPoolCreateInfo(vkb_enc *e, const VkCommandPoolCreateInfo *s, size_t raw); +void vkb_dec_VkCommandPoolCreateInfo(vkb_dec *d, VkCommandPoolCreateInfo *s); +void vkb_decfix_VkCommandPoolCreateInfo(vkb_dec *d, VkCommandPoolCreateInfo *s); +void vkb_enc_VkComputePipelineCreateInfo(vkb_enc *e, const VkComputePipelineCreateInfo *s); +void vkb_encfix_VkComputePipelineCreateInfo(vkb_enc *e, const VkComputePipelineCreateInfo *s, size_t raw); +void vkb_dec_VkComputePipelineCreateInfo(vkb_dec *d, VkComputePipelineCreateInfo *s); +void vkb_decfix_VkComputePipelineCreateInfo(vkb_dec *d, VkComputePipelineCreateInfo *s); +void vkb_enc_VkConditionalRenderingBeginInfoEXT(vkb_enc *e, const VkConditionalRenderingBeginInfoEXT *s); +void vkb_encfix_VkConditionalRenderingBeginInfoEXT(vkb_enc *e, const VkConditionalRenderingBeginInfoEXT *s, size_t raw); +void vkb_dec_VkConditionalRenderingBeginInfoEXT(vkb_dec *d, VkConditionalRenderingBeginInfoEXT *s); +void vkb_decfix_VkConditionalRenderingBeginInfoEXT(vkb_dec *d, VkConditionalRenderingBeginInfoEXT *s); +void vkb_enc_VkCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkCooperativeMatrixPropertiesKHR *s); +void vkb_encfix_VkCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkCooperativeMatrixPropertiesKHR *s, size_t raw); +void vkb_dec_VkCooperativeMatrixPropertiesKHR(vkb_dec *d, VkCooperativeMatrixPropertiesKHR *s); +void vkb_decfix_VkCooperativeMatrixPropertiesKHR(vkb_dec *d, VkCooperativeMatrixPropertiesKHR *s); +void vkb_enc_VkCopyBufferInfo2(vkb_enc *e, const VkCopyBufferInfo2 *s); +void vkb_encfix_VkCopyBufferInfo2(vkb_enc *e, const VkCopyBufferInfo2 *s, size_t raw); +void vkb_dec_VkCopyBufferInfo2(vkb_dec *d, VkCopyBufferInfo2 *s); +void vkb_decfix_VkCopyBufferInfo2(vkb_dec *d, VkCopyBufferInfo2 *s); +void vkb_enc_VkCopyBufferToImageInfo2(vkb_enc *e, const VkCopyBufferToImageInfo2 *s); +void vkb_encfix_VkCopyBufferToImageInfo2(vkb_enc *e, const VkCopyBufferToImageInfo2 *s, size_t raw); +void vkb_dec_VkCopyBufferToImageInfo2(vkb_dec *d, VkCopyBufferToImageInfo2 *s); +void vkb_decfix_VkCopyBufferToImageInfo2(vkb_dec *d, VkCopyBufferToImageInfo2 *s); +void vkb_enc_VkCopyDescriptorSet(vkb_enc *e, const VkCopyDescriptorSet *s); +void vkb_encfix_VkCopyDescriptorSet(vkb_enc *e, const VkCopyDescriptorSet *s, size_t raw); +void vkb_dec_VkCopyDescriptorSet(vkb_dec *d, VkCopyDescriptorSet *s); +void vkb_decfix_VkCopyDescriptorSet(vkb_dec *d, VkCopyDescriptorSet *s); +void vkb_enc_VkCopyImageInfo2(vkb_enc *e, const VkCopyImageInfo2 *s); +void vkb_encfix_VkCopyImageInfo2(vkb_enc *e, const VkCopyImageInfo2 *s, size_t raw); +void vkb_dec_VkCopyImageInfo2(vkb_dec *d, VkCopyImageInfo2 *s); +void vkb_decfix_VkCopyImageInfo2(vkb_dec *d, VkCopyImageInfo2 *s); +void vkb_enc_VkCopyImageToBufferInfo2(vkb_enc *e, const VkCopyImageToBufferInfo2 *s); +void vkb_encfix_VkCopyImageToBufferInfo2(vkb_enc *e, const VkCopyImageToBufferInfo2 *s, size_t raw); +void vkb_dec_VkCopyImageToBufferInfo2(vkb_dec *d, VkCopyImageToBufferInfo2 *s); +void vkb_decfix_VkCopyImageToBufferInfo2(vkb_dec *d, VkCopyImageToBufferInfo2 *s); +void vkb_enc_VkCopyTensorInfoARM(vkb_enc *e, const VkCopyTensorInfoARM *s); +void vkb_encfix_VkCopyTensorInfoARM(vkb_enc *e, const VkCopyTensorInfoARM *s, size_t raw); +void vkb_dec_VkCopyTensorInfoARM(vkb_dec *d, VkCopyTensorInfoARM *s); +void vkb_decfix_VkCopyTensorInfoARM(vkb_dec *d, VkCopyTensorInfoARM *s); +void vkb_enc_VkCustomResolveCreateInfoEXT(vkb_enc *e, const VkCustomResolveCreateInfoEXT *s); +void vkb_encfix_VkCustomResolveCreateInfoEXT(vkb_enc *e, const VkCustomResolveCreateInfoEXT *s, size_t raw); +void vkb_dec_VkCustomResolveCreateInfoEXT(vkb_dec *d, VkCustomResolveCreateInfoEXT *s); +void vkb_decfix_VkCustomResolveCreateInfoEXT(vkb_dec *d, VkCustomResolveCreateInfoEXT *s); +void vkb_enc_VkDebugUtilsObjectNameInfoEXT(vkb_enc *e, const VkDebugUtilsObjectNameInfoEXT *s); +void vkb_encfix_VkDebugUtilsObjectNameInfoEXT(vkb_enc *e, const VkDebugUtilsObjectNameInfoEXT *s, size_t raw); +void vkb_dec_VkDebugUtilsObjectNameInfoEXT(vkb_dec *d, VkDebugUtilsObjectNameInfoEXT *s); +void vkb_decfix_VkDebugUtilsObjectNameInfoEXT(vkb_dec *d, VkDebugUtilsObjectNameInfoEXT *s); +void vkb_enc_VkDependencyInfo(vkb_enc *e, const VkDependencyInfo *s); +void vkb_encfix_VkDependencyInfo(vkb_enc *e, const VkDependencyInfo *s, size_t raw); +void vkb_dec_VkDependencyInfo(vkb_dec *d, VkDependencyInfo *s); +void vkb_decfix_VkDependencyInfo(vkb_dec *d, VkDependencyInfo *s); +void vkb_enc_VkDepthBiasInfoEXT(vkb_enc *e, const VkDepthBiasInfoEXT *s); +void vkb_encfix_VkDepthBiasInfoEXT(vkb_enc *e, const VkDepthBiasInfoEXT *s, size_t raw); +void vkb_dec_VkDepthBiasInfoEXT(vkb_dec *d, VkDepthBiasInfoEXT *s); +void vkb_decfix_VkDepthBiasInfoEXT(vkb_dec *d, VkDepthBiasInfoEXT *s); +void vkb_enc_VkDepthBiasRepresentationInfoEXT(vkb_enc *e, const VkDepthBiasRepresentationInfoEXT *s); +void vkb_encfix_VkDepthBiasRepresentationInfoEXT(vkb_enc *e, const VkDepthBiasRepresentationInfoEXT *s, size_t raw); +void vkb_dec_VkDepthBiasRepresentationInfoEXT(vkb_dec *d, VkDepthBiasRepresentationInfoEXT *s); +void vkb_decfix_VkDepthBiasRepresentationInfoEXT(vkb_dec *d, VkDepthBiasRepresentationInfoEXT *s); +void vkb_enc_VkDescriptorPoolCreateInfo(vkb_enc *e, const VkDescriptorPoolCreateInfo *s); +void vkb_encfix_VkDescriptorPoolCreateInfo(vkb_enc *e, const VkDescriptorPoolCreateInfo *s, size_t raw); +void vkb_dec_VkDescriptorPoolCreateInfo(vkb_dec *d, VkDescriptorPoolCreateInfo *s); +void vkb_decfix_VkDescriptorPoolCreateInfo(vkb_dec *d, VkDescriptorPoolCreateInfo *s); +void vkb_enc_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_enc *e, const VkDescriptorPoolInlineUniformBlockCreateInfo *s); +void vkb_encfix_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_enc *e, const VkDescriptorPoolInlineUniformBlockCreateInfo *s, size_t raw); +void vkb_dec_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_dec *d, VkDescriptorPoolInlineUniformBlockCreateInfo *s); +void vkb_decfix_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_dec *d, VkDescriptorPoolInlineUniformBlockCreateInfo *s); +void vkb_enc_VkDescriptorSetAllocateInfo(vkb_enc *e, const VkDescriptorSetAllocateInfo *s); +void vkb_encfix_VkDescriptorSetAllocateInfo(vkb_enc *e, const VkDescriptorSetAllocateInfo *s, size_t raw); +void vkb_dec_VkDescriptorSetAllocateInfo(vkb_dec *d, VkDescriptorSetAllocateInfo *s); +void vkb_decfix_VkDescriptorSetAllocateInfo(vkb_dec *d, VkDescriptorSetAllocateInfo *s); +void vkb_enc_VkDescriptorSetLayoutBinding(vkb_enc *e, const VkDescriptorSetLayoutBinding *s); +void vkb_encfix_VkDescriptorSetLayoutBinding(vkb_enc *e, const VkDescriptorSetLayoutBinding *s, size_t raw); +void vkb_dec_VkDescriptorSetLayoutBinding(vkb_dec *d, VkDescriptorSetLayoutBinding *s); +void vkb_decfix_VkDescriptorSetLayoutBinding(vkb_dec *d, VkDescriptorSetLayoutBinding *s); +void vkb_enc_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutBindingFlagsCreateInfo *s); +void vkb_encfix_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutBindingFlagsCreateInfo *s, size_t raw); +void vkb_dec_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_dec *d, VkDescriptorSetLayoutBindingFlagsCreateInfo *s); +void vkb_decfix_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_dec *d, VkDescriptorSetLayoutBindingFlagsCreateInfo *s); +void vkb_enc_VkDescriptorSetLayoutCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutCreateInfo *s); +void vkb_encfix_VkDescriptorSetLayoutCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutCreateInfo *s, size_t raw); +void vkb_dec_VkDescriptorSetLayoutCreateInfo(vkb_dec *d, VkDescriptorSetLayoutCreateInfo *s); +void vkb_decfix_VkDescriptorSetLayoutCreateInfo(vkb_dec *d, VkDescriptorSetLayoutCreateInfo *s); +void vkb_enc_VkDescriptorSetLayoutSupport(vkb_enc *e, const VkDescriptorSetLayoutSupport *s); +void vkb_encfix_VkDescriptorSetLayoutSupport(vkb_enc *e, const VkDescriptorSetLayoutSupport *s, size_t raw); +void vkb_dec_VkDescriptorSetLayoutSupport(vkb_dec *d, VkDescriptorSetLayoutSupport *s); +void vkb_decfix_VkDescriptorSetLayoutSupport(vkb_dec *d, VkDescriptorSetLayoutSupport *s); +void vkb_enc_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountAllocateInfo *s); +void vkb_encfix_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountAllocateInfo *s, size_t raw); +void vkb_dec_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_dec *d, VkDescriptorSetVariableDescriptorCountAllocateInfo *s); +void vkb_decfix_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_dec *d, VkDescriptorSetVariableDescriptorCountAllocateInfo *s); +void vkb_enc_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountLayoutSupport *s); +void vkb_encfix_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountLayoutSupport *s, size_t raw); +void vkb_dec_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_dec *d, VkDescriptorSetVariableDescriptorCountLayoutSupport *s); +void vkb_decfix_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_dec *d, VkDescriptorSetVariableDescriptorCountLayoutSupport *s); +void vkb_enc_VkDescriptorUpdateTemplateCreateInfo(vkb_enc *e, const VkDescriptorUpdateTemplateCreateInfo *s); +void vkb_encfix_VkDescriptorUpdateTemplateCreateInfo(vkb_enc *e, const VkDescriptorUpdateTemplateCreateInfo *s, size_t raw); +void vkb_dec_VkDescriptorUpdateTemplateCreateInfo(vkb_dec *d, VkDescriptorUpdateTemplateCreateInfo *s); +void vkb_decfix_VkDescriptorUpdateTemplateCreateInfo(vkb_dec *d, VkDescriptorUpdateTemplateCreateInfo *s); +void vkb_enc_VkDeviceBufferMemoryRequirements(vkb_enc *e, const VkDeviceBufferMemoryRequirements *s); +void vkb_encfix_VkDeviceBufferMemoryRequirements(vkb_enc *e, const VkDeviceBufferMemoryRequirements *s, size_t raw); +void vkb_dec_VkDeviceBufferMemoryRequirements(vkb_dec *d, VkDeviceBufferMemoryRequirements *s); +void vkb_decfix_VkDeviceBufferMemoryRequirements(vkb_dec *d, VkDeviceBufferMemoryRequirements *s); +void vkb_enc_VkDeviceCreateInfo(vkb_enc *e, const VkDeviceCreateInfo *s); +void vkb_encfix_VkDeviceCreateInfo(vkb_enc *e, const VkDeviceCreateInfo *s, size_t raw); +void vkb_dec_VkDeviceCreateInfo(vkb_dec *d, VkDeviceCreateInfo *s); +void vkb_decfix_VkDeviceCreateInfo(vkb_dec *d, VkDeviceCreateInfo *s); +void vkb_enc_VkDeviceGroupBindSparseInfo(vkb_enc *e, const VkDeviceGroupBindSparseInfo *s); +void vkb_encfix_VkDeviceGroupBindSparseInfo(vkb_enc *e, const VkDeviceGroupBindSparseInfo *s, size_t raw); +void vkb_dec_VkDeviceGroupBindSparseInfo(vkb_dec *d, VkDeviceGroupBindSparseInfo *s); +void vkb_decfix_VkDeviceGroupBindSparseInfo(vkb_dec *d, VkDeviceGroupBindSparseInfo *s); +void vkb_enc_VkDeviceGroupCommandBufferBeginInfo(vkb_enc *e, const VkDeviceGroupCommandBufferBeginInfo *s); +void vkb_encfix_VkDeviceGroupCommandBufferBeginInfo(vkb_enc *e, const VkDeviceGroupCommandBufferBeginInfo *s, size_t raw); +void vkb_dec_VkDeviceGroupCommandBufferBeginInfo(vkb_dec *d, VkDeviceGroupCommandBufferBeginInfo *s); +void vkb_decfix_VkDeviceGroupCommandBufferBeginInfo(vkb_dec *d, VkDeviceGroupCommandBufferBeginInfo *s); +void vkb_enc_VkDeviceGroupDeviceCreateInfo(vkb_enc *e, const VkDeviceGroupDeviceCreateInfo *s); +void vkb_encfix_VkDeviceGroupDeviceCreateInfo(vkb_enc *e, const VkDeviceGroupDeviceCreateInfo *s, size_t raw); +void vkb_dec_VkDeviceGroupDeviceCreateInfo(vkb_dec *d, VkDeviceGroupDeviceCreateInfo *s); +void vkb_decfix_VkDeviceGroupDeviceCreateInfo(vkb_dec *d, VkDeviceGroupDeviceCreateInfo *s); +void vkb_enc_VkDeviceGroupRenderPassBeginInfo(vkb_enc *e, const VkDeviceGroupRenderPassBeginInfo *s); +void vkb_encfix_VkDeviceGroupRenderPassBeginInfo(vkb_enc *e, const VkDeviceGroupRenderPassBeginInfo *s, size_t raw); +void vkb_dec_VkDeviceGroupRenderPassBeginInfo(vkb_dec *d, VkDeviceGroupRenderPassBeginInfo *s); +void vkb_decfix_VkDeviceGroupRenderPassBeginInfo(vkb_dec *d, VkDeviceGroupRenderPassBeginInfo *s); +void vkb_enc_VkDeviceGroupSubmitInfo(vkb_enc *e, const VkDeviceGroupSubmitInfo *s); +void vkb_encfix_VkDeviceGroupSubmitInfo(vkb_enc *e, const VkDeviceGroupSubmitInfo *s, size_t raw); +void vkb_dec_VkDeviceGroupSubmitInfo(vkb_dec *d, VkDeviceGroupSubmitInfo *s); +void vkb_decfix_VkDeviceGroupSubmitInfo(vkb_dec *d, VkDeviceGroupSubmitInfo *s); +void vkb_enc_VkDeviceImageMemoryRequirements(vkb_enc *e, const VkDeviceImageMemoryRequirements *s); +void vkb_encfix_VkDeviceImageMemoryRequirements(vkb_enc *e, const VkDeviceImageMemoryRequirements *s, size_t raw); +void vkb_dec_VkDeviceImageMemoryRequirements(vkb_dec *d, VkDeviceImageMemoryRequirements *s); +void vkb_decfix_VkDeviceImageMemoryRequirements(vkb_dec *d, VkDeviceImageMemoryRequirements *s); +void vkb_enc_VkDeviceImageSubresourceInfo(vkb_enc *e, const VkDeviceImageSubresourceInfo *s); +void vkb_encfix_VkDeviceImageSubresourceInfo(vkb_enc *e, const VkDeviceImageSubresourceInfo *s, size_t raw); +void vkb_dec_VkDeviceImageSubresourceInfo(vkb_dec *d, VkDeviceImageSubresourceInfo *s); +void vkb_decfix_VkDeviceImageSubresourceInfo(vkb_dec *d, VkDeviceImageSubresourceInfo *s); +void vkb_enc_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_enc *e, const VkDeviceMemoryOpaqueCaptureAddressInfo *s); +void vkb_encfix_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_enc *e, const VkDeviceMemoryOpaqueCaptureAddressInfo *s, size_t raw); +void vkb_dec_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_dec *d, VkDeviceMemoryOpaqueCaptureAddressInfo *s); +void vkb_decfix_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_dec *d, VkDeviceMemoryOpaqueCaptureAddressInfo *s); +void vkb_enc_VkDevicePrivateDataCreateInfo(vkb_enc *e, const VkDevicePrivateDataCreateInfo *s); +void vkb_encfix_VkDevicePrivateDataCreateInfo(vkb_enc *e, const VkDevicePrivateDataCreateInfo *s, size_t raw); +void vkb_dec_VkDevicePrivateDataCreateInfo(vkb_dec *d, VkDevicePrivateDataCreateInfo *s); +void vkb_decfix_VkDevicePrivateDataCreateInfo(vkb_dec *d, VkDevicePrivateDataCreateInfo *s); +void vkb_enc_VkDeviceQueueCreateInfo(vkb_enc *e, const VkDeviceQueueCreateInfo *s); +void vkb_encfix_VkDeviceQueueCreateInfo(vkb_enc *e, const VkDeviceQueueCreateInfo *s, size_t raw); +void vkb_dec_VkDeviceQueueCreateInfo(vkb_dec *d, VkDeviceQueueCreateInfo *s); +void vkb_decfix_VkDeviceQueueCreateInfo(vkb_dec *d, VkDeviceQueueCreateInfo *s); +void vkb_enc_VkDeviceQueueGlobalPriorityCreateInfo(vkb_enc *e, const VkDeviceQueueGlobalPriorityCreateInfo *s); +void vkb_encfix_VkDeviceQueueGlobalPriorityCreateInfo(vkb_enc *e, const VkDeviceQueueGlobalPriorityCreateInfo *s, size_t raw); +void vkb_dec_VkDeviceQueueGlobalPriorityCreateInfo(vkb_dec *d, VkDeviceQueueGlobalPriorityCreateInfo *s); +void vkb_decfix_VkDeviceQueueGlobalPriorityCreateInfo(vkb_dec *d, VkDeviceQueueGlobalPriorityCreateInfo *s); +void vkb_enc_VkDeviceQueueInfo2(vkb_enc *e, const VkDeviceQueueInfo2 *s); +void vkb_encfix_VkDeviceQueueInfo2(vkb_enc *e, const VkDeviceQueueInfo2 *s, size_t raw); +void vkb_dec_VkDeviceQueueInfo2(vkb_dec *d, VkDeviceQueueInfo2 *s); +void vkb_decfix_VkDeviceQueueInfo2(vkb_dec *d, VkDeviceQueueInfo2 *s); +void vkb_enc_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_enc *e, const VkDeviceQueueShaderCoreControlCreateInfoARM *s); +void vkb_encfix_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_enc *e, const VkDeviceQueueShaderCoreControlCreateInfoARM *s, size_t raw); +void vkb_dec_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_dec *d, VkDeviceQueueShaderCoreControlCreateInfoARM *s); +void vkb_decfix_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_dec *d, VkDeviceQueueShaderCoreControlCreateInfoARM *s); +void vkb_enc_VkDeviceTensorMemoryRequirementsARM(vkb_enc *e, const VkDeviceTensorMemoryRequirementsARM *s); +void vkb_encfix_VkDeviceTensorMemoryRequirementsARM(vkb_enc *e, const VkDeviceTensorMemoryRequirementsARM *s, size_t raw); +void vkb_dec_VkDeviceTensorMemoryRequirementsARM(vkb_dec *d, VkDeviceTensorMemoryRequirementsARM *s); +void vkb_decfix_VkDeviceTensorMemoryRequirementsARM(vkb_dec *d, VkDeviceTensorMemoryRequirementsARM *s); +void vkb_enc_VkDrmFormatModifierPropertiesList2EXT(vkb_enc *e, const VkDrmFormatModifierPropertiesList2EXT *s); +void vkb_encfix_VkDrmFormatModifierPropertiesList2EXT(vkb_enc *e, const VkDrmFormatModifierPropertiesList2EXT *s, size_t raw); +void vkb_dec_VkDrmFormatModifierPropertiesList2EXT(vkb_dec *d, VkDrmFormatModifierPropertiesList2EXT *s); +void vkb_decfix_VkDrmFormatModifierPropertiesList2EXT(vkb_dec *d, VkDrmFormatModifierPropertiesList2EXT *s); +void vkb_enc_VkDrmFormatModifierPropertiesListEXT(vkb_enc *e, const VkDrmFormatModifierPropertiesListEXT *s); +void vkb_encfix_VkDrmFormatModifierPropertiesListEXT(vkb_enc *e, const VkDrmFormatModifierPropertiesListEXT *s, size_t raw); +void vkb_dec_VkDrmFormatModifierPropertiesListEXT(vkb_dec *d, VkDrmFormatModifierPropertiesListEXT *s); +void vkb_decfix_VkDrmFormatModifierPropertiesListEXT(vkb_dec *d, VkDrmFormatModifierPropertiesListEXT *s); +void vkb_enc_VkEventCreateInfo(vkb_enc *e, const VkEventCreateInfo *s); +void vkb_encfix_VkEventCreateInfo(vkb_enc *e, const VkEventCreateInfo *s, size_t raw); +void vkb_dec_VkEventCreateInfo(vkb_dec *d, VkEventCreateInfo *s); +void vkb_decfix_VkEventCreateInfo(vkb_dec *d, VkEventCreateInfo *s); +void vkb_enc_VkExportFenceCreateInfo(vkb_enc *e, const VkExportFenceCreateInfo *s); +void vkb_encfix_VkExportFenceCreateInfo(vkb_enc *e, const VkExportFenceCreateInfo *s, size_t raw); +void vkb_dec_VkExportFenceCreateInfo(vkb_dec *d, VkExportFenceCreateInfo *s); +void vkb_decfix_VkExportFenceCreateInfo(vkb_dec *d, VkExportFenceCreateInfo *s); +void vkb_enc_VkExportMemoryAllocateInfo(vkb_enc *e, const VkExportMemoryAllocateInfo *s); +void vkb_encfix_VkExportMemoryAllocateInfo(vkb_enc *e, const VkExportMemoryAllocateInfo *s, size_t raw); +void vkb_dec_VkExportMemoryAllocateInfo(vkb_dec *d, VkExportMemoryAllocateInfo *s); +void vkb_decfix_VkExportMemoryAllocateInfo(vkb_dec *d, VkExportMemoryAllocateInfo *s); +void vkb_enc_VkExportSemaphoreCreateInfo(vkb_enc *e, const VkExportSemaphoreCreateInfo *s); +void vkb_encfix_VkExportSemaphoreCreateInfo(vkb_enc *e, const VkExportSemaphoreCreateInfo *s, size_t raw); +void vkb_dec_VkExportSemaphoreCreateInfo(vkb_dec *d, VkExportSemaphoreCreateInfo *s); +void vkb_decfix_VkExportSemaphoreCreateInfo(vkb_dec *d, VkExportSemaphoreCreateInfo *s); +void vkb_enc_VkExternalBufferProperties(vkb_enc *e, const VkExternalBufferProperties *s); +void vkb_encfix_VkExternalBufferProperties(vkb_enc *e, const VkExternalBufferProperties *s, size_t raw); +void vkb_dec_VkExternalBufferProperties(vkb_dec *d, VkExternalBufferProperties *s); +void vkb_decfix_VkExternalBufferProperties(vkb_dec *d, VkExternalBufferProperties *s); +void vkb_enc_VkExternalFenceProperties(vkb_enc *e, const VkExternalFenceProperties *s); +void vkb_encfix_VkExternalFenceProperties(vkb_enc *e, const VkExternalFenceProperties *s, size_t raw); +void vkb_dec_VkExternalFenceProperties(vkb_dec *d, VkExternalFenceProperties *s); +void vkb_decfix_VkExternalFenceProperties(vkb_dec *d, VkExternalFenceProperties *s); +void vkb_enc_VkExternalImageFormatProperties(vkb_enc *e, const VkExternalImageFormatProperties *s); +void vkb_encfix_VkExternalImageFormatProperties(vkb_enc *e, const VkExternalImageFormatProperties *s, size_t raw); +void vkb_dec_VkExternalImageFormatProperties(vkb_dec *d, VkExternalImageFormatProperties *s); +void vkb_decfix_VkExternalImageFormatProperties(vkb_dec *d, VkExternalImageFormatProperties *s); +void vkb_enc_VkExternalMemoryAcquireUnmodifiedEXT(vkb_enc *e, const VkExternalMemoryAcquireUnmodifiedEXT *s); +void vkb_encfix_VkExternalMemoryAcquireUnmodifiedEXT(vkb_enc *e, const VkExternalMemoryAcquireUnmodifiedEXT *s, size_t raw); +void vkb_dec_VkExternalMemoryAcquireUnmodifiedEXT(vkb_dec *d, VkExternalMemoryAcquireUnmodifiedEXT *s); +void vkb_decfix_VkExternalMemoryAcquireUnmodifiedEXT(vkb_dec *d, VkExternalMemoryAcquireUnmodifiedEXT *s); +void vkb_enc_VkExternalMemoryBufferCreateInfo(vkb_enc *e, const VkExternalMemoryBufferCreateInfo *s); +void vkb_encfix_VkExternalMemoryBufferCreateInfo(vkb_enc *e, const VkExternalMemoryBufferCreateInfo *s, size_t raw); +void vkb_dec_VkExternalMemoryBufferCreateInfo(vkb_dec *d, VkExternalMemoryBufferCreateInfo *s); +void vkb_decfix_VkExternalMemoryBufferCreateInfo(vkb_dec *d, VkExternalMemoryBufferCreateInfo *s); +void vkb_enc_VkExternalMemoryImageCreateInfo(vkb_enc *e, const VkExternalMemoryImageCreateInfo *s); +void vkb_encfix_VkExternalMemoryImageCreateInfo(vkb_enc *e, const VkExternalMemoryImageCreateInfo *s, size_t raw); +void vkb_dec_VkExternalMemoryImageCreateInfo(vkb_dec *d, VkExternalMemoryImageCreateInfo *s); +void vkb_decfix_VkExternalMemoryImageCreateInfo(vkb_dec *d, VkExternalMemoryImageCreateInfo *s); +void vkb_enc_VkExternalMemoryTensorCreateInfoARM(vkb_enc *e, const VkExternalMemoryTensorCreateInfoARM *s); +void vkb_encfix_VkExternalMemoryTensorCreateInfoARM(vkb_enc *e, const VkExternalMemoryTensorCreateInfoARM *s, size_t raw); +void vkb_dec_VkExternalMemoryTensorCreateInfoARM(vkb_dec *d, VkExternalMemoryTensorCreateInfoARM *s); +void vkb_decfix_VkExternalMemoryTensorCreateInfoARM(vkb_dec *d, VkExternalMemoryTensorCreateInfoARM *s); +void vkb_enc_VkExternalSemaphoreProperties(vkb_enc *e, const VkExternalSemaphoreProperties *s); +void vkb_encfix_VkExternalSemaphoreProperties(vkb_enc *e, const VkExternalSemaphoreProperties *s, size_t raw); +void vkb_dec_VkExternalSemaphoreProperties(vkb_dec *d, VkExternalSemaphoreProperties *s); +void vkb_decfix_VkExternalSemaphoreProperties(vkb_dec *d, VkExternalSemaphoreProperties *s); +void vkb_enc_VkExternalTensorPropertiesARM(vkb_enc *e, const VkExternalTensorPropertiesARM *s); +void vkb_encfix_VkExternalTensorPropertiesARM(vkb_enc *e, const VkExternalTensorPropertiesARM *s, size_t raw); +void vkb_dec_VkExternalTensorPropertiesARM(vkb_dec *d, VkExternalTensorPropertiesARM *s); +void vkb_decfix_VkExternalTensorPropertiesARM(vkb_dec *d, VkExternalTensorPropertiesARM *s); +void vkb_enc_VkFenceCreateInfo(vkb_enc *e, const VkFenceCreateInfo *s); +void vkb_encfix_VkFenceCreateInfo(vkb_enc *e, const VkFenceCreateInfo *s, size_t raw); +void vkb_dec_VkFenceCreateInfo(vkb_dec *d, VkFenceCreateInfo *s); +void vkb_decfix_VkFenceCreateInfo(vkb_dec *d, VkFenceCreateInfo *s); +void vkb_enc_VkFenceGetFdInfoKHR(vkb_enc *e, const VkFenceGetFdInfoKHR *s); +void vkb_encfix_VkFenceGetFdInfoKHR(vkb_enc *e, const VkFenceGetFdInfoKHR *s, size_t raw); +void vkb_dec_VkFenceGetFdInfoKHR(vkb_dec *d, VkFenceGetFdInfoKHR *s); +void vkb_decfix_VkFenceGetFdInfoKHR(vkb_dec *d, VkFenceGetFdInfoKHR *s); +void vkb_enc_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_enc *e, const VkFilterCubicImageViewImageFormatPropertiesEXT *s); +void vkb_encfix_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_enc *e, const VkFilterCubicImageViewImageFormatPropertiesEXT *s, size_t raw); +void vkb_dec_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_dec *d, VkFilterCubicImageViewImageFormatPropertiesEXT *s); +void vkb_decfix_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_dec *d, VkFilterCubicImageViewImageFormatPropertiesEXT *s); +void vkb_enc_VkFormatProperties2(vkb_enc *e, const VkFormatProperties2 *s); +void vkb_encfix_VkFormatProperties2(vkb_enc *e, const VkFormatProperties2 *s, size_t raw); +void vkb_dec_VkFormatProperties2(vkb_dec *d, VkFormatProperties2 *s); +void vkb_decfix_VkFormatProperties2(vkb_dec *d, VkFormatProperties2 *s); +void vkb_enc_VkFormatProperties3(vkb_enc *e, const VkFormatProperties3 *s); +void vkb_encfix_VkFormatProperties3(vkb_enc *e, const VkFormatProperties3 *s, size_t raw); +void vkb_dec_VkFormatProperties3(vkb_dec *d, VkFormatProperties3 *s); +void vkb_decfix_VkFormatProperties3(vkb_dec *d, VkFormatProperties3 *s); +void vkb_enc_VkFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkFragmentShadingRateAttachmentInfoKHR *s); +void vkb_encfix_VkFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkFragmentShadingRateAttachmentInfoKHR *s, size_t raw); +void vkb_dec_VkFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkFragmentShadingRateAttachmentInfoKHR *s); +void vkb_decfix_VkFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkFragmentShadingRateAttachmentInfoKHR *s); +void vkb_enc_VkFramebufferAttachmentImageInfo(vkb_enc *e, const VkFramebufferAttachmentImageInfo *s); +void vkb_encfix_VkFramebufferAttachmentImageInfo(vkb_enc *e, const VkFramebufferAttachmentImageInfo *s, size_t raw); +void vkb_dec_VkFramebufferAttachmentImageInfo(vkb_dec *d, VkFramebufferAttachmentImageInfo *s); +void vkb_decfix_VkFramebufferAttachmentImageInfo(vkb_dec *d, VkFramebufferAttachmentImageInfo *s); +void vkb_enc_VkFramebufferAttachmentsCreateInfo(vkb_enc *e, const VkFramebufferAttachmentsCreateInfo *s); +void vkb_encfix_VkFramebufferAttachmentsCreateInfo(vkb_enc *e, const VkFramebufferAttachmentsCreateInfo *s, size_t raw); +void vkb_dec_VkFramebufferAttachmentsCreateInfo(vkb_dec *d, VkFramebufferAttachmentsCreateInfo *s); +void vkb_decfix_VkFramebufferAttachmentsCreateInfo(vkb_dec *d, VkFramebufferAttachmentsCreateInfo *s); +void vkb_enc_VkFramebufferCreateInfo(vkb_enc *e, const VkFramebufferCreateInfo *s); +void vkb_encfix_VkFramebufferCreateInfo(vkb_enc *e, const VkFramebufferCreateInfo *s, size_t raw); +void vkb_dec_VkFramebufferCreateInfo(vkb_dec *d, VkFramebufferCreateInfo *s); +void vkb_decfix_VkFramebufferCreateInfo(vkb_dec *d, VkFramebufferCreateInfo *s); +void vkb_enc_VkGraphicsPipelineCreateInfo(vkb_enc *e, const VkGraphicsPipelineCreateInfo *s); +void vkb_encfix_VkGraphicsPipelineCreateInfo(vkb_enc *e, const VkGraphicsPipelineCreateInfo *s, size_t raw); +void vkb_dec_VkGraphicsPipelineCreateInfo(vkb_dec *d, VkGraphicsPipelineCreateInfo *s); +void vkb_decfix_VkGraphicsPipelineCreateInfo(vkb_dec *d, VkGraphicsPipelineCreateInfo *s); +void vkb_enc_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_enc *e, const VkGraphicsPipelineLibraryCreateInfoEXT *s); +void vkb_encfix_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_enc *e, const VkGraphicsPipelineLibraryCreateInfoEXT *s, size_t raw); +void vkb_dec_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_dec *d, VkGraphicsPipelineLibraryCreateInfoEXT *s); +void vkb_decfix_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_dec *d, VkGraphicsPipelineLibraryCreateInfoEXT *s); +void vkb_enc_VkHostImageCopyDevicePerformanceQuery(vkb_enc *e, const VkHostImageCopyDevicePerformanceQuery *s); +void vkb_encfix_VkHostImageCopyDevicePerformanceQuery(vkb_enc *e, const VkHostImageCopyDevicePerformanceQuery *s, size_t raw); +void vkb_dec_VkHostImageCopyDevicePerformanceQuery(vkb_dec *d, VkHostImageCopyDevicePerformanceQuery *s); +void vkb_decfix_VkHostImageCopyDevicePerformanceQuery(vkb_dec *d, VkHostImageCopyDevicePerformanceQuery *s); +void vkb_enc_VkImageAlignmentControlCreateInfoMESA(vkb_enc *e, const VkImageAlignmentControlCreateInfoMESA *s); +void vkb_encfix_VkImageAlignmentControlCreateInfoMESA(vkb_enc *e, const VkImageAlignmentControlCreateInfoMESA *s, size_t raw); +void vkb_dec_VkImageAlignmentControlCreateInfoMESA(vkb_dec *d, VkImageAlignmentControlCreateInfoMESA *s); +void vkb_decfix_VkImageAlignmentControlCreateInfoMESA(vkb_dec *d, VkImageAlignmentControlCreateInfoMESA *s); +void vkb_enc_VkImageBlit2(vkb_enc *e, const VkImageBlit2 *s); +void vkb_encfix_VkImageBlit2(vkb_enc *e, const VkImageBlit2 *s, size_t raw); +void vkb_dec_VkImageBlit2(vkb_dec *d, VkImageBlit2 *s); +void vkb_decfix_VkImageBlit2(vkb_dec *d, VkImageBlit2 *s); +void vkb_enc_VkImageCompressionControlEXT(vkb_enc *e, const VkImageCompressionControlEXT *s); +void vkb_encfix_VkImageCompressionControlEXT(vkb_enc *e, const VkImageCompressionControlEXT *s, size_t raw); +void vkb_dec_VkImageCompressionControlEXT(vkb_dec *d, VkImageCompressionControlEXT *s); +void vkb_decfix_VkImageCompressionControlEXT(vkb_dec *d, VkImageCompressionControlEXT *s); +void vkb_enc_VkImageCompressionPropertiesEXT(vkb_enc *e, const VkImageCompressionPropertiesEXT *s); +void vkb_encfix_VkImageCompressionPropertiesEXT(vkb_enc *e, const VkImageCompressionPropertiesEXT *s, size_t raw); +void vkb_dec_VkImageCompressionPropertiesEXT(vkb_dec *d, VkImageCompressionPropertiesEXT *s); +void vkb_decfix_VkImageCompressionPropertiesEXT(vkb_dec *d, VkImageCompressionPropertiesEXT *s); +void vkb_enc_VkImageCopy2(vkb_enc *e, const VkImageCopy2 *s); +void vkb_encfix_VkImageCopy2(vkb_enc *e, const VkImageCopy2 *s, size_t raw); +void vkb_dec_VkImageCopy2(vkb_dec *d, VkImageCopy2 *s); +void vkb_decfix_VkImageCopy2(vkb_dec *d, VkImageCopy2 *s); +void vkb_enc_VkImageCreateInfo(vkb_enc *e, const VkImageCreateInfo *s); +void vkb_encfix_VkImageCreateInfo(vkb_enc *e, const VkImageCreateInfo *s, size_t raw); +void vkb_dec_VkImageCreateInfo(vkb_dec *d, VkImageCreateInfo *s); +void vkb_decfix_VkImageCreateInfo(vkb_dec *d, VkImageCreateInfo *s); +void vkb_enc_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierExplicitCreateInfoEXT *s); +void vkb_encfix_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierExplicitCreateInfoEXT *s, size_t raw); +void vkb_dec_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierExplicitCreateInfoEXT *s); +void vkb_decfix_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierExplicitCreateInfoEXT *s); +void vkb_enc_VkImageDrmFormatModifierListCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierListCreateInfoEXT *s); +void vkb_encfix_VkImageDrmFormatModifierListCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierListCreateInfoEXT *s, size_t raw); +void vkb_dec_VkImageDrmFormatModifierListCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierListCreateInfoEXT *s); +void vkb_decfix_VkImageDrmFormatModifierListCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierListCreateInfoEXT *s); +void vkb_enc_VkImageDrmFormatModifierPropertiesEXT(vkb_enc *e, const VkImageDrmFormatModifierPropertiesEXT *s); +void vkb_encfix_VkImageDrmFormatModifierPropertiesEXT(vkb_enc *e, const VkImageDrmFormatModifierPropertiesEXT *s, size_t raw); +void vkb_dec_VkImageDrmFormatModifierPropertiesEXT(vkb_dec *d, VkImageDrmFormatModifierPropertiesEXT *s); +void vkb_decfix_VkImageDrmFormatModifierPropertiesEXT(vkb_dec *d, VkImageDrmFormatModifierPropertiesEXT *s); +void vkb_enc_VkImageFormatListCreateInfo(vkb_enc *e, const VkImageFormatListCreateInfo *s); +void vkb_encfix_VkImageFormatListCreateInfo(vkb_enc *e, const VkImageFormatListCreateInfo *s, size_t raw); +void vkb_dec_VkImageFormatListCreateInfo(vkb_dec *d, VkImageFormatListCreateInfo *s); +void vkb_decfix_VkImageFormatListCreateInfo(vkb_dec *d, VkImageFormatListCreateInfo *s); +void vkb_enc_VkImageFormatProperties2(vkb_enc *e, const VkImageFormatProperties2 *s); +void vkb_encfix_VkImageFormatProperties2(vkb_enc *e, const VkImageFormatProperties2 *s, size_t raw); +void vkb_dec_VkImageFormatProperties2(vkb_dec *d, VkImageFormatProperties2 *s); +void vkb_decfix_VkImageFormatProperties2(vkb_dec *d, VkImageFormatProperties2 *s); +void vkb_enc_VkImageMemoryBarrier(vkb_enc *e, const VkImageMemoryBarrier *s); +void vkb_encfix_VkImageMemoryBarrier(vkb_enc *e, const VkImageMemoryBarrier *s, size_t raw); +void vkb_dec_VkImageMemoryBarrier(vkb_dec *d, VkImageMemoryBarrier *s); +void vkb_decfix_VkImageMemoryBarrier(vkb_dec *d, VkImageMemoryBarrier *s); +void vkb_enc_VkImageMemoryBarrier2(vkb_enc *e, const VkImageMemoryBarrier2 *s); +void vkb_encfix_VkImageMemoryBarrier2(vkb_enc *e, const VkImageMemoryBarrier2 *s, size_t raw); +void vkb_dec_VkImageMemoryBarrier2(vkb_dec *d, VkImageMemoryBarrier2 *s); +void vkb_decfix_VkImageMemoryBarrier2(vkb_dec *d, VkImageMemoryBarrier2 *s); +void vkb_enc_VkImageMemoryRequirementsInfo2(vkb_enc *e, const VkImageMemoryRequirementsInfo2 *s); +void vkb_encfix_VkImageMemoryRequirementsInfo2(vkb_enc *e, const VkImageMemoryRequirementsInfo2 *s, size_t raw); +void vkb_dec_VkImageMemoryRequirementsInfo2(vkb_dec *d, VkImageMemoryRequirementsInfo2 *s); +void vkb_decfix_VkImageMemoryRequirementsInfo2(vkb_dec *d, VkImageMemoryRequirementsInfo2 *s); +void vkb_enc_VkImagePlaneMemoryRequirementsInfo(vkb_enc *e, const VkImagePlaneMemoryRequirementsInfo *s); +void vkb_encfix_VkImagePlaneMemoryRequirementsInfo(vkb_enc *e, const VkImagePlaneMemoryRequirementsInfo *s, size_t raw); +void vkb_dec_VkImagePlaneMemoryRequirementsInfo(vkb_dec *d, VkImagePlaneMemoryRequirementsInfo *s); +void vkb_decfix_VkImagePlaneMemoryRequirementsInfo(vkb_dec *d, VkImagePlaneMemoryRequirementsInfo *s); +void vkb_enc_VkImageResolve2(vkb_enc *e, const VkImageResolve2 *s); +void vkb_encfix_VkImageResolve2(vkb_enc *e, const VkImageResolve2 *s, size_t raw); +void vkb_dec_VkImageResolve2(vkb_dec *d, VkImageResolve2 *s); +void vkb_decfix_VkImageResolve2(vkb_dec *d, VkImageResolve2 *s); +void vkb_enc_VkImageSparseMemoryRequirementsInfo2(vkb_enc *e, const VkImageSparseMemoryRequirementsInfo2 *s); +void vkb_encfix_VkImageSparseMemoryRequirementsInfo2(vkb_enc *e, const VkImageSparseMemoryRequirementsInfo2 *s, size_t raw); +void vkb_dec_VkImageSparseMemoryRequirementsInfo2(vkb_dec *d, VkImageSparseMemoryRequirementsInfo2 *s); +void vkb_decfix_VkImageSparseMemoryRequirementsInfo2(vkb_dec *d, VkImageSparseMemoryRequirementsInfo2 *s); +void vkb_enc_VkImageStencilUsageCreateInfo(vkb_enc *e, const VkImageStencilUsageCreateInfo *s); +void vkb_encfix_VkImageStencilUsageCreateInfo(vkb_enc *e, const VkImageStencilUsageCreateInfo *s, size_t raw); +void vkb_dec_VkImageStencilUsageCreateInfo(vkb_dec *d, VkImageStencilUsageCreateInfo *s); +void vkb_decfix_VkImageStencilUsageCreateInfo(vkb_dec *d, VkImageStencilUsageCreateInfo *s); +void vkb_enc_VkImageSubresource2(vkb_enc *e, const VkImageSubresource2 *s); +void vkb_encfix_VkImageSubresource2(vkb_enc *e, const VkImageSubresource2 *s, size_t raw); +void vkb_dec_VkImageSubresource2(vkb_dec *d, VkImageSubresource2 *s); +void vkb_decfix_VkImageSubresource2(vkb_dec *d, VkImageSubresource2 *s); +void vkb_enc_VkImageSwapchainCreateInfoKHR(vkb_enc *e, const VkImageSwapchainCreateInfoKHR *s); +void vkb_encfix_VkImageSwapchainCreateInfoKHR(vkb_enc *e, const VkImageSwapchainCreateInfoKHR *s, size_t raw); +void vkb_dec_VkImageSwapchainCreateInfoKHR(vkb_dec *d, VkImageSwapchainCreateInfoKHR *s); +void vkb_decfix_VkImageSwapchainCreateInfoKHR(vkb_dec *d, VkImageSwapchainCreateInfoKHR *s); +void vkb_enc_VkImageViewASTCDecodeModeEXT(vkb_enc *e, const VkImageViewASTCDecodeModeEXT *s); +void vkb_encfix_VkImageViewASTCDecodeModeEXT(vkb_enc *e, const VkImageViewASTCDecodeModeEXT *s, size_t raw); +void vkb_dec_VkImageViewASTCDecodeModeEXT(vkb_dec *d, VkImageViewASTCDecodeModeEXT *s); +void vkb_decfix_VkImageViewASTCDecodeModeEXT(vkb_dec *d, VkImageViewASTCDecodeModeEXT *s); +void vkb_enc_VkImageViewCreateInfo(vkb_enc *e, const VkImageViewCreateInfo *s); +void vkb_encfix_VkImageViewCreateInfo(vkb_enc *e, const VkImageViewCreateInfo *s, size_t raw); +void vkb_dec_VkImageViewCreateInfo(vkb_dec *d, VkImageViewCreateInfo *s); +void vkb_decfix_VkImageViewCreateInfo(vkb_dec *d, VkImageViewCreateInfo *s); +void vkb_enc_VkImageViewMinLodCreateInfoEXT(vkb_enc *e, const VkImageViewMinLodCreateInfoEXT *s); +void vkb_encfix_VkImageViewMinLodCreateInfoEXT(vkb_enc *e, const VkImageViewMinLodCreateInfoEXT *s, size_t raw); +void vkb_dec_VkImageViewMinLodCreateInfoEXT(vkb_dec *d, VkImageViewMinLodCreateInfoEXT *s); +void vkb_decfix_VkImageViewMinLodCreateInfoEXT(vkb_dec *d, VkImageViewMinLodCreateInfoEXT *s); +void vkb_enc_VkImageViewSlicedCreateInfoEXT(vkb_enc *e, const VkImageViewSlicedCreateInfoEXT *s); +void vkb_encfix_VkImageViewSlicedCreateInfoEXT(vkb_enc *e, const VkImageViewSlicedCreateInfoEXT *s, size_t raw); +void vkb_dec_VkImageViewSlicedCreateInfoEXT(vkb_dec *d, VkImageViewSlicedCreateInfoEXT *s); +void vkb_decfix_VkImageViewSlicedCreateInfoEXT(vkb_dec *d, VkImageViewSlicedCreateInfoEXT *s); +void vkb_enc_VkImageViewUsageCreateInfo(vkb_enc *e, const VkImageViewUsageCreateInfo *s); +void vkb_encfix_VkImageViewUsageCreateInfo(vkb_enc *e, const VkImageViewUsageCreateInfo *s, size_t raw); +void vkb_dec_VkImageViewUsageCreateInfo(vkb_dec *d, VkImageViewUsageCreateInfo *s); +void vkb_decfix_VkImageViewUsageCreateInfo(vkb_dec *d, VkImageViewUsageCreateInfo *s); +void vkb_enc_VkImportFenceFdInfoKHR(vkb_enc *e, const VkImportFenceFdInfoKHR *s); +void vkb_encfix_VkImportFenceFdInfoKHR(vkb_enc *e, const VkImportFenceFdInfoKHR *s, size_t raw); +void vkb_dec_VkImportFenceFdInfoKHR(vkb_dec *d, VkImportFenceFdInfoKHR *s); +void vkb_decfix_VkImportFenceFdInfoKHR(vkb_dec *d, VkImportFenceFdInfoKHR *s); +void vkb_enc_VkImportMemoryFdInfoKHR(vkb_enc *e, const VkImportMemoryFdInfoKHR *s); +void vkb_encfix_VkImportMemoryFdInfoKHR(vkb_enc *e, const VkImportMemoryFdInfoKHR *s, size_t raw); +void vkb_dec_VkImportMemoryFdInfoKHR(vkb_dec *d, VkImportMemoryFdInfoKHR *s); +void vkb_decfix_VkImportMemoryFdInfoKHR(vkb_dec *d, VkImportMemoryFdInfoKHR *s); +void vkb_enc_VkImportSemaphoreFdInfoKHR(vkb_enc *e, const VkImportSemaphoreFdInfoKHR *s); +void vkb_encfix_VkImportSemaphoreFdInfoKHR(vkb_enc *e, const VkImportSemaphoreFdInfoKHR *s, size_t raw); +void vkb_dec_VkImportSemaphoreFdInfoKHR(vkb_dec *d, VkImportSemaphoreFdInfoKHR *s); +void vkb_decfix_VkImportSemaphoreFdInfoKHR(vkb_dec *d, VkImportSemaphoreFdInfoKHR *s); +void vkb_enc_VkInstanceCreateInfo(vkb_enc *e, const VkInstanceCreateInfo *s); +void vkb_encfix_VkInstanceCreateInfo(vkb_enc *e, const VkInstanceCreateInfo *s, size_t raw); +void vkb_dec_VkInstanceCreateInfo(vkb_dec *d, VkInstanceCreateInfo *s); +void vkb_decfix_VkInstanceCreateInfo(vkb_dec *d, VkInstanceCreateInfo *s); +void vkb_enc_VkMappedMemoryRange(vkb_enc *e, const VkMappedMemoryRange *s); +void vkb_encfix_VkMappedMemoryRange(vkb_enc *e, const VkMappedMemoryRange *s, size_t raw); +void vkb_dec_VkMappedMemoryRange(vkb_dec *d, VkMappedMemoryRange *s); +void vkb_decfix_VkMappedMemoryRange(vkb_dec *d, VkMappedMemoryRange *s); +void vkb_enc_VkMemoryAllocateFlagsInfo(vkb_enc *e, const VkMemoryAllocateFlagsInfo *s); +void vkb_encfix_VkMemoryAllocateFlagsInfo(vkb_enc *e, const VkMemoryAllocateFlagsInfo *s, size_t raw); +void vkb_dec_VkMemoryAllocateFlagsInfo(vkb_dec *d, VkMemoryAllocateFlagsInfo *s); +void vkb_decfix_VkMemoryAllocateFlagsInfo(vkb_dec *d, VkMemoryAllocateFlagsInfo *s); +void vkb_enc_VkMemoryAllocateInfo(vkb_enc *e, const VkMemoryAllocateInfo *s); +void vkb_encfix_VkMemoryAllocateInfo(vkb_enc *e, const VkMemoryAllocateInfo *s, size_t raw); +void vkb_dec_VkMemoryAllocateInfo(vkb_dec *d, VkMemoryAllocateInfo *s); +void vkb_decfix_VkMemoryAllocateInfo(vkb_dec *d, VkMemoryAllocateInfo *s); +void vkb_enc_VkMemoryBarrier(vkb_enc *e, const VkMemoryBarrier *s); +void vkb_encfix_VkMemoryBarrier(vkb_enc *e, const VkMemoryBarrier *s, size_t raw); +void vkb_dec_VkMemoryBarrier(vkb_dec *d, VkMemoryBarrier *s); +void vkb_decfix_VkMemoryBarrier(vkb_dec *d, VkMemoryBarrier *s); +void vkb_enc_VkMemoryBarrier2(vkb_enc *e, const VkMemoryBarrier2 *s); +void vkb_encfix_VkMemoryBarrier2(vkb_enc *e, const VkMemoryBarrier2 *s, size_t raw); +void vkb_dec_VkMemoryBarrier2(vkb_dec *d, VkMemoryBarrier2 *s); +void vkb_decfix_VkMemoryBarrier2(vkb_dec *d, VkMemoryBarrier2 *s); +void vkb_enc_VkMemoryBarrierAccessFlags3KHR(vkb_enc *e, const VkMemoryBarrierAccessFlags3KHR *s); +void vkb_encfix_VkMemoryBarrierAccessFlags3KHR(vkb_enc *e, const VkMemoryBarrierAccessFlags3KHR *s, size_t raw); +void vkb_dec_VkMemoryBarrierAccessFlags3KHR(vkb_dec *d, VkMemoryBarrierAccessFlags3KHR *s); +void vkb_decfix_VkMemoryBarrierAccessFlags3KHR(vkb_dec *d, VkMemoryBarrierAccessFlags3KHR *s); +void vkb_enc_VkMemoryDedicatedAllocateInfo(vkb_enc *e, const VkMemoryDedicatedAllocateInfo *s); +void vkb_encfix_VkMemoryDedicatedAllocateInfo(vkb_enc *e, const VkMemoryDedicatedAllocateInfo *s, size_t raw); +void vkb_dec_VkMemoryDedicatedAllocateInfo(vkb_dec *d, VkMemoryDedicatedAllocateInfo *s); +void vkb_decfix_VkMemoryDedicatedAllocateInfo(vkb_dec *d, VkMemoryDedicatedAllocateInfo *s); +void vkb_enc_VkMemoryDedicatedAllocateInfoTensorARM(vkb_enc *e, const VkMemoryDedicatedAllocateInfoTensorARM *s); +void vkb_encfix_VkMemoryDedicatedAllocateInfoTensorARM(vkb_enc *e, const VkMemoryDedicatedAllocateInfoTensorARM *s, size_t raw); +void vkb_dec_VkMemoryDedicatedAllocateInfoTensorARM(vkb_dec *d, VkMemoryDedicatedAllocateInfoTensorARM *s); +void vkb_decfix_VkMemoryDedicatedAllocateInfoTensorARM(vkb_dec *d, VkMemoryDedicatedAllocateInfoTensorARM *s); +void vkb_enc_VkMemoryDedicatedRequirements(vkb_enc *e, const VkMemoryDedicatedRequirements *s); +void vkb_encfix_VkMemoryDedicatedRequirements(vkb_enc *e, const VkMemoryDedicatedRequirements *s, size_t raw); +void vkb_dec_VkMemoryDedicatedRequirements(vkb_dec *d, VkMemoryDedicatedRequirements *s); +void vkb_decfix_VkMemoryDedicatedRequirements(vkb_dec *d, VkMemoryDedicatedRequirements *s); +void vkb_enc_VkMemoryFdPropertiesKHR(vkb_enc *e, const VkMemoryFdPropertiesKHR *s); +void vkb_encfix_VkMemoryFdPropertiesKHR(vkb_enc *e, const VkMemoryFdPropertiesKHR *s, size_t raw); +void vkb_dec_VkMemoryFdPropertiesKHR(vkb_dec *d, VkMemoryFdPropertiesKHR *s); +void vkb_decfix_VkMemoryFdPropertiesKHR(vkb_dec *d, VkMemoryFdPropertiesKHR *s); +void vkb_enc_VkMemoryGetFdInfoKHR(vkb_enc *e, const VkMemoryGetFdInfoKHR *s); +void vkb_encfix_VkMemoryGetFdInfoKHR(vkb_enc *e, const VkMemoryGetFdInfoKHR *s, size_t raw); +void vkb_dec_VkMemoryGetFdInfoKHR(vkb_dec *d, VkMemoryGetFdInfoKHR *s); +void vkb_decfix_VkMemoryGetFdInfoKHR(vkb_dec *d, VkMemoryGetFdInfoKHR *s); +void vkb_enc_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_enc *e, const VkMemoryOpaqueCaptureAddressAllocateInfo *s); +void vkb_encfix_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_enc *e, const VkMemoryOpaqueCaptureAddressAllocateInfo *s, size_t raw); +void vkb_dec_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_dec *d, VkMemoryOpaqueCaptureAddressAllocateInfo *s); +void vkb_decfix_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_dec *d, VkMemoryOpaqueCaptureAddressAllocateInfo *s); +void vkb_enc_VkMemoryPriorityAllocateInfoEXT(vkb_enc *e, const VkMemoryPriorityAllocateInfoEXT *s); +void vkb_encfix_VkMemoryPriorityAllocateInfoEXT(vkb_enc *e, const VkMemoryPriorityAllocateInfoEXT *s, size_t raw); +void vkb_dec_VkMemoryPriorityAllocateInfoEXT(vkb_dec *d, VkMemoryPriorityAllocateInfoEXT *s); +void vkb_decfix_VkMemoryPriorityAllocateInfoEXT(vkb_dec *d, VkMemoryPriorityAllocateInfoEXT *s); +void vkb_enc_VkMemoryRequirements2(vkb_enc *e, const VkMemoryRequirements2 *s); +void vkb_encfix_VkMemoryRequirements2(vkb_enc *e, const VkMemoryRequirements2 *s, size_t raw); +void vkb_dec_VkMemoryRequirements2(vkb_dec *d, VkMemoryRequirements2 *s); +void vkb_decfix_VkMemoryRequirements2(vkb_dec *d, VkMemoryRequirements2 *s); +void vkb_enc_VkMultisamplePropertiesEXT(vkb_enc *e, const VkMultisamplePropertiesEXT *s); +void vkb_encfix_VkMultisamplePropertiesEXT(vkb_enc *e, const VkMultisamplePropertiesEXT *s, size_t raw); +void vkb_dec_VkMultisamplePropertiesEXT(vkb_dec *d, VkMultisamplePropertiesEXT *s); +void vkb_decfix_VkMultisamplePropertiesEXT(vkb_dec *d, VkMultisamplePropertiesEXT *s); +void vkb_enc_VkMultisampledRenderToSingleSampledInfoEXT(vkb_enc *e, const VkMultisampledRenderToSingleSampledInfoEXT *s); +void vkb_encfix_VkMultisampledRenderToSingleSampledInfoEXT(vkb_enc *e, const VkMultisampledRenderToSingleSampledInfoEXT *s, size_t raw); +void vkb_dec_VkMultisampledRenderToSingleSampledInfoEXT(vkb_dec *d, VkMultisampledRenderToSingleSampledInfoEXT *s); +void vkb_decfix_VkMultisampledRenderToSingleSampledInfoEXT(vkb_dec *d, VkMultisampledRenderToSingleSampledInfoEXT *s); +void vkb_enc_VkMutableDescriptorTypeCreateInfoEXT(vkb_enc *e, const VkMutableDescriptorTypeCreateInfoEXT *s); +void vkb_encfix_VkMutableDescriptorTypeCreateInfoEXT(vkb_enc *e, const VkMutableDescriptorTypeCreateInfoEXT *s, size_t raw); +void vkb_dec_VkMutableDescriptorTypeCreateInfoEXT(vkb_dec *d, VkMutableDescriptorTypeCreateInfoEXT *s); +void vkb_decfix_VkMutableDescriptorTypeCreateInfoEXT(vkb_dec *d, VkMutableDescriptorTypeCreateInfoEXT *s); +void vkb_enc_VkMutableDescriptorTypeListEXT(vkb_enc *e, const VkMutableDescriptorTypeListEXT *s); +void vkb_encfix_VkMutableDescriptorTypeListEXT(vkb_enc *e, const VkMutableDescriptorTypeListEXT *s, size_t raw); +void vkb_dec_VkMutableDescriptorTypeListEXT(vkb_dec *d, VkMutableDescriptorTypeListEXT *s); +void vkb_decfix_VkMutableDescriptorTypeListEXT(vkb_dec *d, VkMutableDescriptorTypeListEXT *s); +void vkb_enc_VkPerformanceCounterARM(vkb_enc *e, const VkPerformanceCounterARM *s); +void vkb_encfix_VkPerformanceCounterARM(vkb_enc *e, const VkPerformanceCounterARM *s, size_t raw); +void vkb_dec_VkPerformanceCounterARM(vkb_dec *d, VkPerformanceCounterARM *s); +void vkb_decfix_VkPerformanceCounterARM(vkb_dec *d, VkPerformanceCounterARM *s); +void vkb_enc_VkPerformanceCounterDescriptionARM(vkb_enc *e, const VkPerformanceCounterDescriptionARM *s); +void vkb_encfix_VkPerformanceCounterDescriptionARM(vkb_enc *e, const VkPerformanceCounterDescriptionARM *s, size_t raw); +void vkb_dec_VkPerformanceCounterDescriptionARM(vkb_dec *d, VkPerformanceCounterDescriptionARM *s); +void vkb_decfix_VkPerformanceCounterDescriptionARM(vkb_dec *d, VkPerformanceCounterDescriptionARM *s); +void vkb_enc_VkPhysicalDevice16BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice16BitStorageFeatures *s); +void vkb_encfix_VkPhysicalDevice16BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice16BitStorageFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDevice16BitStorageFeatures(vkb_dec *d, VkPhysicalDevice16BitStorageFeatures *s); +void vkb_decfix_VkPhysicalDevice16BitStorageFeatures(vkb_dec *d, VkPhysicalDevice16BitStorageFeatures *s); +void vkb_enc_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDevice4444FormatsFeaturesEXT *s); +void vkb_encfix_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDevice4444FormatsFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDevice4444FormatsFeaturesEXT *s); +void vkb_decfix_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDevice4444FormatsFeaturesEXT *s); +void vkb_enc_VkPhysicalDevice8BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice8BitStorageFeatures *s); +void vkb_encfix_VkPhysicalDevice8BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice8BitStorageFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDevice8BitStorageFeatures(vkb_dec *d, VkPhysicalDevice8BitStorageFeatures *s); +void vkb_decfix_VkPhysicalDevice8BitStorageFeatures(vkb_dec *d, VkPhysicalDevice8BitStorageFeatures *s); +void vkb_enc_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceASTCDecodeFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceASTCDecodeFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceASTCDecodeFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceASTCDecodeFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeatures *s); +void vkb_encfix_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeatures *s); +void vkb_decfix_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeatures *s); +void vkb_enc_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceColorWriteEnableFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceColorWriteEnableFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceColorWriteEnableFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceColorWriteEnableFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceConditionalRenderingFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceConditionalRenderingFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceConditionalRenderingFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceConditionalRenderingFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_dec *d, VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_dec *d, VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomResolveFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomResolveFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomResolveFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomResolveFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthBiasControlFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthBiasControlFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthBiasControlFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthBiasControlFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClampControlFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClampControlFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClampControlFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClampControlFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_dec *d, VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_dec *d, VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipControlFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipControlFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipControlFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipControlFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipEnableFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipEnableFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipEnableFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipEnableFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceDepthStencilResolveProperties(vkb_enc *e, const VkPhysicalDeviceDepthStencilResolveProperties *s); +void vkb_encfix_VkPhysicalDeviceDepthStencilResolveProperties(vkb_enc *e, const VkPhysicalDeviceDepthStencilResolveProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDepthStencilResolveProperties(vkb_dec *d, VkPhysicalDeviceDepthStencilResolveProperties *s); +void vkb_decfix_VkPhysicalDeviceDepthStencilResolveProperties(vkb_dec *d, VkPhysicalDeviceDepthStencilResolveProperties *s); +void vkb_enc_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingFeatures *s); +void vkb_encfix_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingFeatures *s); +void vkb_decfix_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingFeatures *s); +void vkb_enc_VkPhysicalDeviceDescriptorIndexingProperties(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingProperties *s); +void vkb_encfix_VkPhysicalDeviceDescriptorIndexingProperties(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDescriptorIndexingProperties(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingProperties *s); +void vkb_decfix_VkPhysicalDeviceDescriptorIndexingProperties(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingProperties *s); +void vkb_enc_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDiscardRectanglePropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDiscardRectanglePropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_dec *d, VkPhysicalDeviceDiscardRectanglePropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_dec *d, VkPhysicalDeviceDiscardRectanglePropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceDriverProperties(vkb_enc *e, const VkPhysicalDeviceDriverProperties *s); +void vkb_encfix_VkPhysicalDeviceDriverProperties(vkb_enc *e, const VkPhysicalDeviceDriverProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDriverProperties(vkb_dec *d, VkPhysicalDeviceDriverProperties *s); +void vkb_decfix_VkPhysicalDeviceDriverProperties(vkb_dec *d, VkPhysicalDeviceDriverProperties *s); +void vkb_enc_VkPhysicalDeviceDrmPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDrmPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceDrmPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDrmPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDrmPropertiesEXT(vkb_dec *d, VkPhysicalDeviceDrmPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceDrmPropertiesEXT(vkb_dec *d, VkPhysicalDeviceDrmPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceDynamicRenderingFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingFeatures *s); +void vkb_encfix_VkPhysicalDeviceDynamicRenderingFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDynamicRenderingFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingFeatures *s); +void vkb_decfix_VkPhysicalDeviceDynamicRenderingFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingFeatures *s); +void vkb_enc_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s); +void vkb_encfix_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s); +void vkb_decfix_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s); +void vkb_enc_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceExternalBufferInfo(vkb_enc *e, const VkPhysicalDeviceExternalBufferInfo *s); +void vkb_encfix_VkPhysicalDeviceExternalBufferInfo(vkb_enc *e, const VkPhysicalDeviceExternalBufferInfo *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExternalBufferInfo(vkb_dec *d, VkPhysicalDeviceExternalBufferInfo *s); +void vkb_decfix_VkPhysicalDeviceExternalBufferInfo(vkb_dec *d, VkPhysicalDeviceExternalBufferInfo *s); +void vkb_enc_VkPhysicalDeviceExternalFenceInfo(vkb_enc *e, const VkPhysicalDeviceExternalFenceInfo *s); +void vkb_encfix_VkPhysicalDeviceExternalFenceInfo(vkb_enc *e, const VkPhysicalDeviceExternalFenceInfo *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExternalFenceInfo(vkb_dec *d, VkPhysicalDeviceExternalFenceInfo *s); +void vkb_decfix_VkPhysicalDeviceExternalFenceInfo(vkb_dec *d, VkPhysicalDeviceExternalFenceInfo *s); +void vkb_enc_VkPhysicalDeviceExternalImageFormatInfo(vkb_enc *e, const VkPhysicalDeviceExternalImageFormatInfo *s); +void vkb_encfix_VkPhysicalDeviceExternalImageFormatInfo(vkb_enc *e, const VkPhysicalDeviceExternalImageFormatInfo *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExternalImageFormatInfo(vkb_dec *d, VkPhysicalDeviceExternalImageFormatInfo *s); +void vkb_decfix_VkPhysicalDeviceExternalImageFormatInfo(vkb_dec *d, VkPhysicalDeviceExternalImageFormatInfo *s); +void vkb_enc_VkPhysicalDeviceExternalSemaphoreInfo(vkb_enc *e, const VkPhysicalDeviceExternalSemaphoreInfo *s); +void vkb_encfix_VkPhysicalDeviceExternalSemaphoreInfo(vkb_enc *e, const VkPhysicalDeviceExternalSemaphoreInfo *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExternalSemaphoreInfo(vkb_dec *d, VkPhysicalDeviceExternalSemaphoreInfo *s); +void vkb_decfix_VkPhysicalDeviceExternalSemaphoreInfo(vkb_dec *d, VkPhysicalDeviceExternalSemaphoreInfo *s); +void vkb_enc_VkPhysicalDeviceExternalTensorInfoARM(vkb_enc *e, const VkPhysicalDeviceExternalTensorInfoARM *s); +void vkb_encfix_VkPhysicalDeviceExternalTensorInfoARM(vkb_enc *e, const VkPhysicalDeviceExternalTensorInfoARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceExternalTensorInfoARM(vkb_dec *d, VkPhysicalDeviceExternalTensorInfoARM *s); +void vkb_decfix_VkPhysicalDeviceExternalTensorInfoARM(vkb_dec *d, VkPhysicalDeviceExternalTensorInfoARM *s); +void vkb_enc_VkPhysicalDeviceFeatures2(vkb_enc *e, const VkPhysicalDeviceFeatures2 *s); +void vkb_encfix_VkPhysicalDeviceFeatures2(vkb_enc *e, const VkPhysicalDeviceFeatures2 *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFeatures2(vkb_dec *d, VkPhysicalDeviceFeatures2 *s); +void vkb_decfix_VkPhysicalDeviceFeatures2(vkb_dec *d, VkPhysicalDeviceFeatures2 *s); +void vkb_enc_VkPhysicalDeviceFloatControlsProperties(vkb_enc *e, const VkPhysicalDeviceFloatControlsProperties *s); +void vkb_encfix_VkPhysicalDeviceFloatControlsProperties(vkb_enc *e, const VkPhysicalDeviceFloatControlsProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFloatControlsProperties(vkb_dec *d, VkPhysicalDeviceFloatControlsProperties *s); +void vkb_decfix_VkPhysicalDeviceFloatControlsProperties(vkb_dec *d, VkPhysicalDeviceFloatControlsProperties *s); +void vkb_enc_VkPhysicalDeviceFormatPackFeaturesARM(vkb_enc *e, const VkPhysicalDeviceFormatPackFeaturesARM *s); +void vkb_encfix_VkPhysicalDeviceFormatPackFeaturesARM(vkb_enc *e, const VkPhysicalDeviceFormatPackFeaturesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFormatPackFeaturesARM(vkb_dec *d, VkPhysicalDeviceFormatPackFeaturesARM *s); +void vkb_decfix_VkPhysicalDeviceFormatPackFeaturesARM(vkb_dec *d, VkPhysicalDeviceFormatPackFeaturesARM *s); +void vkb_enc_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s); +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s); +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s); +void vkb_enc_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s); +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s); +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s); +void vkb_enc_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceFragmentShadingRateKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateKHR *s); +void vkb_encfix_VkPhysicalDeviceFragmentShadingRateKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentShadingRateKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateKHR *s); +void vkb_decfix_VkPhysicalDeviceFragmentShadingRateKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateKHR *s); +void vkb_enc_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_enc *e, const VkPhysicalDeviceGlobalPriorityQueryFeatures *s); +void vkb_encfix_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_enc *e, const VkPhysicalDeviceGlobalPriorityQueryFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_dec *d, VkPhysicalDeviceGlobalPriorityQueryFeatures *s); +void vkb_decfix_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_dec *d, VkPhysicalDeviceGlobalPriorityQueryFeatures *s); +void vkb_enc_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceGroupProperties(vkb_enc *e, const VkPhysicalDeviceGroupProperties *s); +void vkb_encfix_VkPhysicalDeviceGroupProperties(vkb_enc *e, const VkPhysicalDeviceGroupProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceGroupProperties(vkb_dec *d, VkPhysicalDeviceGroupProperties *s); +void vkb_decfix_VkPhysicalDeviceGroupProperties(vkb_dec *d, VkPhysicalDeviceGroupProperties *s); +void vkb_enc_VkPhysicalDeviceHostImageCopyFeatures(vkb_enc *e, const VkPhysicalDeviceHostImageCopyFeatures *s); +void vkb_encfix_VkPhysicalDeviceHostImageCopyFeatures(vkb_enc *e, const VkPhysicalDeviceHostImageCopyFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceHostImageCopyFeatures(vkb_dec *d, VkPhysicalDeviceHostImageCopyFeatures *s); +void vkb_decfix_VkPhysicalDeviceHostImageCopyFeatures(vkb_dec *d, VkPhysicalDeviceHostImageCopyFeatures *s); +void vkb_enc_VkPhysicalDeviceHostImageCopyProperties(vkb_enc *e, const VkPhysicalDeviceHostImageCopyProperties *s); +void vkb_encfix_VkPhysicalDeviceHostImageCopyProperties(vkb_enc *e, const VkPhysicalDeviceHostImageCopyProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceHostImageCopyProperties(vkb_dec *d, VkPhysicalDeviceHostImageCopyProperties *s); +void vkb_decfix_VkPhysicalDeviceHostImageCopyProperties(vkb_dec *d, VkPhysicalDeviceHostImageCopyProperties *s); +void vkb_enc_VkPhysicalDeviceHostQueryResetFeatures(vkb_enc *e, const VkPhysicalDeviceHostQueryResetFeatures *s); +void vkb_encfix_VkPhysicalDeviceHostQueryResetFeatures(vkb_enc *e, const VkPhysicalDeviceHostQueryResetFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceHostQueryResetFeatures(vkb_dec *d, VkPhysicalDeviceHostQueryResetFeatures *s); +void vkb_decfix_VkPhysicalDeviceHostQueryResetFeatures(vkb_dec *d, VkPhysicalDeviceHostQueryResetFeatures *s); +void vkb_enc_VkPhysicalDeviceIDProperties(vkb_enc *e, const VkPhysicalDeviceIDProperties *s); +void vkb_encfix_VkPhysicalDeviceIDProperties(vkb_enc *e, const VkPhysicalDeviceIDProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceIDProperties(vkb_dec *d, VkPhysicalDeviceIDProperties *s); +void vkb_decfix_VkPhysicalDeviceIDProperties(vkb_dec *d, VkPhysicalDeviceIDProperties *s); +void vkb_enc_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s); +void vkb_encfix_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s); +void vkb_decfix_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s); +void vkb_enc_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s); +void vkb_encfix_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s); +void vkb_decfix_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s); +void vkb_enc_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageCompressionControlFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageCompressionControlFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageCompressionControlFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageCompressionControlFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s); +void vkb_encfix_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_dec *d, VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s); +void vkb_decfix_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_dec *d, VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s); +void vkb_enc_VkPhysicalDeviceImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceImageFormatInfo2 *s); +void vkb_encfix_VkPhysicalDeviceImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceImageFormatInfo2 *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceImageFormatInfo2 *s); +void vkb_decfix_VkPhysicalDeviceImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceImageFormatInfo2 *s); +void vkb_enc_VkPhysicalDeviceImageRobustnessFeatures(vkb_enc *e, const VkPhysicalDeviceImageRobustnessFeatures *s); +void vkb_encfix_VkPhysicalDeviceImageRobustnessFeatures(vkb_enc *e, const VkPhysicalDeviceImageRobustnessFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageRobustnessFeatures(vkb_dec *d, VkPhysicalDeviceImageRobustnessFeatures *s); +void vkb_decfix_VkPhysicalDeviceImageRobustnessFeatures(vkb_dec *d, VkPhysicalDeviceImageRobustnessFeatures *s); +void vkb_enc_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageViewImageFormatInfoEXT *s); +void vkb_encfix_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageViewImageFormatInfoEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_dec *d, VkPhysicalDeviceImageViewImageFormatInfoEXT *s); +void vkb_decfix_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_dec *d, VkPhysicalDeviceImageViewImageFormatInfoEXT *s); +void vkb_enc_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageViewMinLodFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageViewMinLodFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageViewMinLodFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageViewMinLodFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_enc *e, const VkPhysicalDeviceImagelessFramebufferFeatures *s); +void vkb_encfix_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_enc *e, const VkPhysicalDeviceImagelessFramebufferFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_dec *d, VkPhysicalDeviceImagelessFramebufferFeatures *s); +void vkb_decfix_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_dec *d, VkPhysicalDeviceImagelessFramebufferFeatures *s); +void vkb_enc_VkPhysicalDeviceIndexTypeUint8Features(vkb_enc *e, const VkPhysicalDeviceIndexTypeUint8Features *s); +void vkb_encfix_VkPhysicalDeviceIndexTypeUint8Features(vkb_enc *e, const VkPhysicalDeviceIndexTypeUint8Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceIndexTypeUint8Features(vkb_dec *d, VkPhysicalDeviceIndexTypeUint8Features *s); +void vkb_decfix_VkPhysicalDeviceIndexTypeUint8Features(vkb_dec *d, VkPhysicalDeviceIndexTypeUint8Features *s); +void vkb_enc_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockFeatures *s); +void vkb_encfix_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockFeatures *s); +void vkb_decfix_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockFeatures *s); +void vkb_enc_VkPhysicalDeviceInlineUniformBlockProperties(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockProperties *s); +void vkb_encfix_VkPhysicalDeviceInlineUniformBlockProperties(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceInlineUniformBlockProperties(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockProperties *s); +void vkb_decfix_VkPhysicalDeviceInlineUniformBlockProperties(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockProperties *s); +void vkb_enc_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesListKHR *s); +void vkb_encfix_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesListKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesListKHR *s); +void vkb_decfix_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesListKHR *s); +void vkb_enc_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyDitheringFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyDitheringFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyDitheringFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyDitheringFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceLineRasterizationFeatures(vkb_enc *e, const VkPhysicalDeviceLineRasterizationFeatures *s); +void vkb_encfix_VkPhysicalDeviceLineRasterizationFeatures(vkb_enc *e, const VkPhysicalDeviceLineRasterizationFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLineRasterizationFeatures(vkb_dec *d, VkPhysicalDeviceLineRasterizationFeatures *s); +void vkb_decfix_VkPhysicalDeviceLineRasterizationFeatures(vkb_dec *d, VkPhysicalDeviceLineRasterizationFeatures *s); +void vkb_enc_VkPhysicalDeviceLineRasterizationProperties(vkb_enc *e, const VkPhysicalDeviceLineRasterizationProperties *s); +void vkb_encfix_VkPhysicalDeviceLineRasterizationProperties(vkb_enc *e, const VkPhysicalDeviceLineRasterizationProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceLineRasterizationProperties(vkb_dec *d, VkPhysicalDeviceLineRasterizationProperties *s); +void vkb_decfix_VkPhysicalDeviceLineRasterizationProperties(vkb_dec *d, VkPhysicalDeviceLineRasterizationProperties *s); +void vkb_enc_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10FeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10FeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10FeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10FeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10PropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10PropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10PropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10PropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceMaintenance3Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance3Properties *s); +void vkb_encfix_VkPhysicalDeviceMaintenance3Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance3Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance3Properties(vkb_dec *d, VkPhysicalDeviceMaintenance3Properties *s); +void vkb_decfix_VkPhysicalDeviceMaintenance3Properties(vkb_dec *d, VkPhysicalDeviceMaintenance3Properties *s); +void vkb_enc_VkPhysicalDeviceMaintenance4Features(vkb_enc *e, const VkPhysicalDeviceMaintenance4Features *s); +void vkb_encfix_VkPhysicalDeviceMaintenance4Features(vkb_enc *e, const VkPhysicalDeviceMaintenance4Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance4Features(vkb_dec *d, VkPhysicalDeviceMaintenance4Features *s); +void vkb_decfix_VkPhysicalDeviceMaintenance4Features(vkb_dec *d, VkPhysicalDeviceMaintenance4Features *s); +void vkb_enc_VkPhysicalDeviceMaintenance4Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance4Properties *s); +void vkb_encfix_VkPhysicalDeviceMaintenance4Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance4Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance4Properties(vkb_dec *d, VkPhysicalDeviceMaintenance4Properties *s); +void vkb_decfix_VkPhysicalDeviceMaintenance4Properties(vkb_dec *d, VkPhysicalDeviceMaintenance4Properties *s); +void vkb_enc_VkPhysicalDeviceMaintenance5Features(vkb_enc *e, const VkPhysicalDeviceMaintenance5Features *s); +void vkb_encfix_VkPhysicalDeviceMaintenance5Features(vkb_enc *e, const VkPhysicalDeviceMaintenance5Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance5Features(vkb_dec *d, VkPhysicalDeviceMaintenance5Features *s); +void vkb_decfix_VkPhysicalDeviceMaintenance5Features(vkb_dec *d, VkPhysicalDeviceMaintenance5Features *s); +void vkb_enc_VkPhysicalDeviceMaintenance5Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance5Properties *s); +void vkb_encfix_VkPhysicalDeviceMaintenance5Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance5Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance5Properties(vkb_dec *d, VkPhysicalDeviceMaintenance5Properties *s); +void vkb_decfix_VkPhysicalDeviceMaintenance5Properties(vkb_dec *d, VkPhysicalDeviceMaintenance5Properties *s); +void vkb_enc_VkPhysicalDeviceMaintenance6Features(vkb_enc *e, const VkPhysicalDeviceMaintenance6Features *s); +void vkb_encfix_VkPhysicalDeviceMaintenance6Features(vkb_enc *e, const VkPhysicalDeviceMaintenance6Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance6Features(vkb_dec *d, VkPhysicalDeviceMaintenance6Features *s); +void vkb_decfix_VkPhysicalDeviceMaintenance6Features(vkb_dec *d, VkPhysicalDeviceMaintenance6Features *s); +void vkb_enc_VkPhysicalDeviceMaintenance6Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance6Properties *s); +void vkb_encfix_VkPhysicalDeviceMaintenance6Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance6Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance6Properties(vkb_dec *d, VkPhysicalDeviceMaintenance6Properties *s); +void vkb_decfix_VkPhysicalDeviceMaintenance6Properties(vkb_dec *d, VkPhysicalDeviceMaintenance6Properties *s); +void vkb_enc_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7FeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7FeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7FeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7FeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7PropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7PropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7PropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7PropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance8FeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance8FeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance8FeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance8FeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9FeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9FeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9FeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9FeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9PropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9PropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9PropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9PropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryBudgetPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryBudgetPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMemoryBudgetPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMemoryBudgetPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryPriorityFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryPriorityFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMemoryPriorityFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMemoryPriorityFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceMemoryProperties2(vkb_enc *e, const VkPhysicalDeviceMemoryProperties2 *s); +void vkb_encfix_VkPhysicalDeviceMemoryProperties2(vkb_enc *e, const VkPhysicalDeviceMemoryProperties2 *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMemoryProperties2(vkb_dec *d, VkPhysicalDeviceMemoryProperties2 *s); +void vkb_decfix_VkPhysicalDeviceMemoryProperties2(vkb_dec *d, VkPhysicalDeviceMemoryProperties2 *s); +void vkb_enc_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceMultiviewFeatures(vkb_enc *e, const VkPhysicalDeviceMultiviewFeatures *s); +void vkb_encfix_VkPhysicalDeviceMultiviewFeatures(vkb_enc *e, const VkPhysicalDeviceMultiviewFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMultiviewFeatures(vkb_dec *d, VkPhysicalDeviceMultiviewFeatures *s); +void vkb_decfix_VkPhysicalDeviceMultiviewFeatures(vkb_dec *d, VkPhysicalDeviceMultiviewFeatures *s); +void vkb_enc_VkPhysicalDeviceMultiviewProperties(vkb_enc *e, const VkPhysicalDeviceMultiviewProperties *s); +void vkb_encfix_VkPhysicalDeviceMultiviewProperties(vkb_enc *e, const VkPhysicalDeviceMultiviewProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMultiviewProperties(vkb_dec *d, VkPhysicalDeviceMultiviewProperties *s); +void vkb_decfix_VkPhysicalDeviceMultiviewProperties(vkb_dec *d, VkPhysicalDeviceMultiviewProperties *s); +void vkb_enc_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s); +void vkb_enc_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_enc *e, const VkPhysicalDevicePCIBusInfoPropertiesEXT *s); +void vkb_encfix_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_enc *e, const VkPhysicalDevicePCIBusInfoPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_dec *d, VkPhysicalDevicePCIBusInfoPropertiesEXT *s); +void vkb_decfix_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_dec *d, VkPhysicalDevicePCIBusInfoPropertiesEXT *s); +void vkb_enc_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s); +void vkb_encfix_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s); +void vkb_decfix_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s); +void vkb_enc_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s); +void vkb_encfix_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s, size_t raw); +void vkb_dec_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s); +void vkb_decfix_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s); +void vkb_enc_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s); +void vkb_encfix_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s, size_t raw); +void vkb_dec_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s); +void vkb_decfix_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s); +void vkb_enc_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_enc *e, const VkPhysicalDevicePipelineCreationCacheControlFeatures *s); +void vkb_encfix_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_enc *e, const VkPhysicalDevicePipelineCreationCacheControlFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_dec *d, VkPhysicalDevicePipelineCreationCacheControlFeatures *s); +void vkb_decfix_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_dec *d, VkPhysicalDevicePipelineCreationCacheControlFeatures *s); +void vkb_enc_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineProtectedAccessFeatures *s); +void vkb_encfix_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineProtectedAccessFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_dec *d, VkPhysicalDevicePipelineProtectedAccessFeatures *s); +void vkb_decfix_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_dec *d, VkPhysicalDevicePipelineProtectedAccessFeatures *s); +void vkb_enc_VkPhysicalDevicePipelineRobustnessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessFeatures *s); +void vkb_encfix_VkPhysicalDevicePipelineRobustnessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDevicePipelineRobustnessFeatures(vkb_dec *d, VkPhysicalDevicePipelineRobustnessFeatures *s); +void vkb_decfix_VkPhysicalDevicePipelineRobustnessFeatures(vkb_dec *d, VkPhysicalDevicePipelineRobustnessFeatures *s); +void vkb_enc_VkPhysicalDevicePipelineRobustnessProperties(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessProperties *s); +void vkb_encfix_VkPhysicalDevicePipelineRobustnessProperties(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessProperties *s, size_t raw); +void vkb_dec_VkPhysicalDevicePipelineRobustnessProperties(vkb_dec *d, VkPhysicalDevicePipelineRobustnessProperties *s); +void vkb_decfix_VkPhysicalDevicePipelineRobustnessProperties(vkb_dec *d, VkPhysicalDevicePipelineRobustnessProperties *s); +void vkb_enc_VkPhysicalDevicePointClippingProperties(vkb_enc *e, const VkPhysicalDevicePointClippingProperties *s); +void vkb_encfix_VkPhysicalDevicePointClippingProperties(vkb_enc *e, const VkPhysicalDevicePointClippingProperties *s, size_t raw); +void vkb_dec_VkPhysicalDevicePointClippingProperties(vkb_dec *d, VkPhysicalDevicePointClippingProperties *s); +void vkb_decfix_VkPhysicalDevicePointClippingProperties(vkb_dec *d, VkPhysicalDevicePointClippingProperties *s); +void vkb_enc_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_enc *e, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s); +void vkb_encfix_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_enc *e, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_dec *d, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s); +void vkb_decfix_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_dec *d, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s); +void vkb_enc_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s); +void vkb_encfix_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s); +void vkb_decfix_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s); +void vkb_enc_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s); +void vkb_encfix_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s); +void vkb_decfix_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s); +void vkb_enc_VkPhysicalDevicePrivateDataFeatures(vkb_enc *e, const VkPhysicalDevicePrivateDataFeatures *s); +void vkb_encfix_VkPhysicalDevicePrivateDataFeatures(vkb_enc *e, const VkPhysicalDevicePrivateDataFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDevicePrivateDataFeatures(vkb_dec *d, VkPhysicalDevicePrivateDataFeatures *s); +void vkb_decfix_VkPhysicalDevicePrivateDataFeatures(vkb_dec *d, VkPhysicalDevicePrivateDataFeatures *s); +void vkb_enc_VkPhysicalDeviceProperties2(vkb_enc *e, const VkPhysicalDeviceProperties2 *s); +void vkb_encfix_VkPhysicalDeviceProperties2(vkb_enc *e, const VkPhysicalDeviceProperties2 *s, size_t raw); +void vkb_dec_VkPhysicalDeviceProperties2(vkb_dec *d, VkPhysicalDeviceProperties2 *s); +void vkb_decfix_VkPhysicalDeviceProperties2(vkb_dec *d, VkPhysicalDeviceProperties2 *s); +void vkb_enc_VkPhysicalDeviceProtectedMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryFeatures *s); +void vkb_encfix_VkPhysicalDeviceProtectedMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceProtectedMemoryFeatures(vkb_dec *d, VkPhysicalDeviceProtectedMemoryFeatures *s); +void vkb_decfix_VkPhysicalDeviceProtectedMemoryFeatures(vkb_dec *d, VkPhysicalDeviceProtectedMemoryFeatures *s); +void vkb_enc_VkPhysicalDeviceProtectedMemoryProperties(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryProperties *s); +void vkb_encfix_VkPhysicalDeviceProtectedMemoryProperties(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceProtectedMemoryProperties(vkb_dec *d, VkPhysicalDeviceProtectedMemoryProperties *s); +void vkb_decfix_VkPhysicalDeviceProtectedMemoryProperties(vkb_dec *d, VkPhysicalDeviceProtectedMemoryProperties *s); +void vkb_enc_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexPropertiesEXT *s); +void vkb_enc_VkPhysicalDevicePushDescriptorProperties(vkb_enc *e, const VkPhysicalDevicePushDescriptorProperties *s); +void vkb_encfix_VkPhysicalDevicePushDescriptorProperties(vkb_enc *e, const VkPhysicalDevicePushDescriptorProperties *s, size_t raw); +void vkb_dec_VkPhysicalDevicePushDescriptorProperties(vkb_dec *d, VkPhysicalDevicePushDescriptorProperties *s); +void vkb_decfix_VkPhysicalDevicePushDescriptorProperties(vkb_dec *d, VkPhysicalDevicePushDescriptorProperties *s); +void vkb_enc_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_enc *e, const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s); +void vkb_encfix_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_enc *e, const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_dec *d, VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s); +void vkb_decfix_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_dec *d, VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s); +void vkb_enc_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedFeaturesARM *s); +void vkb_encfix_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedFeaturesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedFeaturesARM *s); +void vkb_decfix_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedFeaturesARM *s); +void vkb_enc_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedPropertiesARM *s); +void vkb_encfix_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedPropertiesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedPropertiesARM *s); +void vkb_decfix_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedPropertiesARM *s); +void vkb_enc_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2FeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2FeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2FeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2FeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2PropertiesKHR *s); +void vkb_encfix_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2PropertiesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2PropertiesKHR *s); +void vkb_decfix_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2PropertiesKHR *s); +void vkb_enc_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceSampleLocationsPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceSampleLocationsPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_dec *d, VkPhysicalDeviceSampleLocationsPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_dec *d, VkPhysicalDeviceSampleLocationsPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_enc *e, const VkPhysicalDeviceSamplerFilterMinmaxProperties *s); +void vkb_encfix_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_enc *e, const VkPhysicalDeviceSamplerFilterMinmaxProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_dec *d, VkPhysicalDeviceSamplerFilterMinmaxProperties *s); +void vkb_decfix_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_dec *d, VkPhysicalDeviceSamplerFilterMinmaxProperties *s); +void vkb_enc_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_enc *e, const VkPhysicalDeviceSamplerYcbcrConversionFeatures *s); +void vkb_encfix_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_enc *e, const VkPhysicalDeviceSamplerYcbcrConversionFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_dec *d, VkPhysicalDeviceSamplerYcbcrConversionFeatures *s); +void vkb_decfix_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_dec *d, VkPhysicalDeviceSamplerYcbcrConversionFeatures *s); +void vkb_enc_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceScalarBlockLayoutFeatures *s); +void vkb_encfix_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceScalarBlockLayoutFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_dec *d, VkPhysicalDeviceScalarBlockLayoutFeatures *s); +void vkb_decfix_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_dec *d, VkPhysicalDeviceScalarBlockLayoutFeatures *s); +void vkb_enc_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsFeaturesARM *s); +void vkb_encfix_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsFeaturesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsFeaturesARM *s); +void vkb_decfix_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsFeaturesARM *s); +void vkb_enc_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsPropertiesARM *s); +void vkb_encfix_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsPropertiesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsPropertiesARM *s); +void vkb_decfix_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsPropertiesARM *s); +void vkb_enc_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_enc *e, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s); +void vkb_encfix_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_enc *e, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_dec *d, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s); +void vkb_decfix_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_dec *d, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s); +void vkb_enc_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderAtomicInt64Features(vkb_enc *e, const VkPhysicalDeviceShaderAtomicInt64Features *s); +void vkb_encfix_VkPhysicalDeviceShaderAtomicInt64Features(vkb_enc *e, const VkPhysicalDeviceShaderAtomicInt64Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderAtomicInt64Features(vkb_dec *d, VkPhysicalDeviceShaderAtomicInt64Features *s); +void vkb_decfix_VkPhysicalDeviceShaderAtomicInt64Features(vkb_dec *d, VkPhysicalDeviceShaderAtomicInt64Features *s); +void vkb_enc_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderBfloat16FeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderBfloat16FeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderBfloat16FeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderBfloat16FeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderClockFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderClockFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderClockFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderClockFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s); +void vkb_encfix_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s); +void vkb_decfix_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s); +void vkb_enc_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s); +void vkb_encfix_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s); +void vkb_decfix_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s); +void vkb_enc_VkPhysicalDeviceShaderCorePropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCorePropertiesARM *s); +void vkb_encfix_VkPhysicalDeviceShaderCorePropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCorePropertiesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderCorePropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCorePropertiesARM *s); +void vkb_decfix_VkPhysicalDeviceShaderCorePropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCorePropertiesARM *s); +void vkb_enc_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDrawParametersFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDrawParametersFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_dec *d, VkPhysicalDeviceShaderDrawParametersFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_dec *d, VkPhysicalDeviceShaderDrawParametersFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_enc *e, const VkPhysicalDeviceShaderExpectAssumeFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_enc *e, const VkPhysicalDeviceShaderExpectAssumeFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_dec *d, VkPhysicalDeviceShaderExpectAssumeFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_dec *d, VkPhysicalDeviceShaderExpectAssumeFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderFloat16Int8Features(vkb_enc *e, const VkPhysicalDeviceShaderFloat16Int8Features *s); +void vkb_encfix_VkPhysicalDeviceShaderFloat16Int8Features(vkb_enc *e, const VkPhysicalDeviceShaderFloat16Int8Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderFloat16Int8Features(vkb_dec *d, VkPhysicalDeviceShaderFloat16Int8Features *s); +void vkb_decfix_VkPhysicalDeviceShaderFloat16Int8Features(vkb_dec *d, VkPhysicalDeviceShaderFloat16Int8Features *s); +void vkb_enc_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderFloat8FeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderFloat8FeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderFloat8FeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderFloat8FeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderFloatControls2Features(vkb_enc *e, const VkPhysicalDeviceShaderFloatControls2Features *s); +void vkb_encfix_VkPhysicalDeviceShaderFloatControls2Features(vkb_enc *e, const VkPhysicalDeviceShaderFloatControls2Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderFloatControls2Features(vkb_dec *d, VkPhysicalDeviceShaderFloatControls2Features *s); +void vkb_decfix_VkPhysicalDeviceShaderFloatControls2Features(vkb_dec *d, VkPhysicalDeviceShaderFloatControls2Features *s); +void vkb_enc_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderFmaFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderFmaFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderFmaFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderFmaFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductProperties *s); +void vkb_encfix_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductProperties *s); +void vkb_decfix_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductProperties *s); +void vkb_enc_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderQuadControlFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderQuadControlFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderQuadControlFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderQuadControlFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupRotateFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupRotateFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupRotateFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupRotateFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderTerminateInvocationFeatures *s); +void vkb_encfix_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderTerminateInvocationFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderTerminateInvocationFeatures *s); +void vkb_decfix_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderTerminateInvocationFeatures *s); +void vkb_enc_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImageFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImageFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImageFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImageFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImagePropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImagePropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImagePropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImagePropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceSparseImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceSparseImageFormatInfo2 *s); +void vkb_encfix_VkPhysicalDeviceSparseImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceSparseImageFormatInfo2 *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSparseImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceSparseImageFormatInfo2 *s); +void vkb_decfix_VkPhysicalDeviceSparseImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceSparseImageFormatInfo2 *s); +void vkb_enc_VkPhysicalDeviceSubgroupProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupProperties *s); +void vkb_encfix_VkPhysicalDeviceSubgroupProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSubgroupProperties(vkb_dec *d, VkPhysicalDeviceSubgroupProperties *s); +void vkb_decfix_VkPhysicalDeviceSubgroupProperties(vkb_dec *d, VkPhysicalDeviceSubgroupProperties *s); +void vkb_enc_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlFeatures *s); +void vkb_encfix_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlFeatures *s); +void vkb_decfix_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlFeatures *s); +void vkb_enc_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlProperties *s); +void vkb_encfix_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlProperties *s); +void vkb_decfix_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlProperties *s); +void vkb_enc_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceSynchronization2Features(vkb_enc *e, const VkPhysicalDeviceSynchronization2Features *s); +void vkb_encfix_VkPhysicalDeviceSynchronization2Features(vkb_enc *e, const VkPhysicalDeviceSynchronization2Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceSynchronization2Features(vkb_dec *d, VkPhysicalDeviceSynchronization2Features *s); +void vkb_decfix_VkPhysicalDeviceSynchronization2Features(vkb_dec *d, VkPhysicalDeviceSynchronization2Features *s); +void vkb_enc_VkPhysicalDeviceTensorFeaturesARM(vkb_enc *e, const VkPhysicalDeviceTensorFeaturesARM *s); +void vkb_encfix_VkPhysicalDeviceTensorFeaturesARM(vkb_enc *e, const VkPhysicalDeviceTensorFeaturesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTensorFeaturesARM(vkb_dec *d, VkPhysicalDeviceTensorFeaturesARM *s); +void vkb_decfix_VkPhysicalDeviceTensorFeaturesARM(vkb_dec *d, VkPhysicalDeviceTensorFeaturesARM *s); +void vkb_enc_VkPhysicalDeviceTensorPropertiesARM(vkb_enc *e, const VkPhysicalDeviceTensorPropertiesARM *s); +void vkb_encfix_VkPhysicalDeviceTensorPropertiesARM(vkb_enc *e, const VkPhysicalDeviceTensorPropertiesARM *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTensorPropertiesARM(vkb_dec *d, VkPhysicalDeviceTensorPropertiesARM *s); +void vkb_decfix_VkPhysicalDeviceTensorPropertiesARM(vkb_dec *d, VkPhysicalDeviceTensorPropertiesARM *s); +void vkb_enc_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentProperties *s); +void vkb_encfix_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentProperties *s); +void vkb_decfix_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentProperties *s); +void vkb_enc_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s); +void vkb_encfix_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s); +void vkb_decfix_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s); +void vkb_enc_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreFeatures *s); +void vkb_encfix_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreFeatures *s); +void vkb_decfix_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreFeatures *s); +void vkb_enc_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreProperties *s); +void vkb_encfix_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreProperties *s); +void vkb_decfix_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreProperties *s); +void vkb_enc_VkPhysicalDeviceToolProperties(vkb_enc *e, const VkPhysicalDeviceToolProperties *s); +void vkb_encfix_VkPhysicalDeviceToolProperties(vkb_enc *e, const VkPhysicalDeviceToolProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceToolProperties(vkb_dec *d, VkPhysicalDeviceToolProperties *s); +void vkb_decfix_VkPhysicalDeviceToolProperties(vkb_dec *d, VkPhysicalDeviceToolProperties *s); +void vkb_enc_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_dec *d, VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_dec *d, VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s); +void vkb_encfix_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_dec *d, VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s); +void vkb_decfix_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_dec *d, VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s); +void vkb_enc_VkPhysicalDeviceVariablePointersFeatures(vkb_enc *e, const VkPhysicalDeviceVariablePointersFeatures *s); +void vkb_encfix_VkPhysicalDeviceVariablePointersFeatures(vkb_enc *e, const VkPhysicalDeviceVariablePointersFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVariablePointersFeatures(vkb_dec *d, VkPhysicalDeviceVariablePointersFeatures *s); +void vkb_decfix_VkPhysicalDeviceVariablePointersFeatures(vkb_dec *d, VkPhysicalDeviceVariablePointersFeatures *s); +void vkb_enc_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorFeatures *s); +void vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorFeatures *s); +void vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorFeatures *s); +void vkb_enc_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorProperties *s); +void vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorProperties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorProperties *s); +void vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorProperties *s); +void vkb_enc_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s); +void vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s); +void vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s); +void vkb_enc_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceVulkan11Features(vkb_enc *e, const VkPhysicalDeviceVulkan11Features *s); +void vkb_encfix_VkPhysicalDeviceVulkan11Features(vkb_enc *e, const VkPhysicalDeviceVulkan11Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan11Features(vkb_dec *d, VkPhysicalDeviceVulkan11Features *s); +void vkb_decfix_VkPhysicalDeviceVulkan11Features(vkb_dec *d, VkPhysicalDeviceVulkan11Features *s); +void vkb_enc_VkPhysicalDeviceVulkan11Properties(vkb_enc *e, const VkPhysicalDeviceVulkan11Properties *s); +void vkb_encfix_VkPhysicalDeviceVulkan11Properties(vkb_enc *e, const VkPhysicalDeviceVulkan11Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan11Properties(vkb_dec *d, VkPhysicalDeviceVulkan11Properties *s); +void vkb_decfix_VkPhysicalDeviceVulkan11Properties(vkb_dec *d, VkPhysicalDeviceVulkan11Properties *s); +void vkb_enc_VkPhysicalDeviceVulkan12Features(vkb_enc *e, const VkPhysicalDeviceVulkan12Features *s); +void vkb_encfix_VkPhysicalDeviceVulkan12Features(vkb_enc *e, const VkPhysicalDeviceVulkan12Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan12Features(vkb_dec *d, VkPhysicalDeviceVulkan12Features *s); +void vkb_decfix_VkPhysicalDeviceVulkan12Features(vkb_dec *d, VkPhysicalDeviceVulkan12Features *s); +void vkb_enc_VkPhysicalDeviceVulkan12Properties(vkb_enc *e, const VkPhysicalDeviceVulkan12Properties *s); +void vkb_encfix_VkPhysicalDeviceVulkan12Properties(vkb_enc *e, const VkPhysicalDeviceVulkan12Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan12Properties(vkb_dec *d, VkPhysicalDeviceVulkan12Properties *s); +void vkb_decfix_VkPhysicalDeviceVulkan12Properties(vkb_dec *d, VkPhysicalDeviceVulkan12Properties *s); +void vkb_enc_VkPhysicalDeviceVulkan13Features(vkb_enc *e, const VkPhysicalDeviceVulkan13Features *s); +void vkb_encfix_VkPhysicalDeviceVulkan13Features(vkb_enc *e, const VkPhysicalDeviceVulkan13Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan13Features(vkb_dec *d, VkPhysicalDeviceVulkan13Features *s); +void vkb_decfix_VkPhysicalDeviceVulkan13Features(vkb_dec *d, VkPhysicalDeviceVulkan13Features *s); +void vkb_enc_VkPhysicalDeviceVulkan13Properties(vkb_enc *e, const VkPhysicalDeviceVulkan13Properties *s); +void vkb_encfix_VkPhysicalDeviceVulkan13Properties(vkb_enc *e, const VkPhysicalDeviceVulkan13Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan13Properties(vkb_dec *d, VkPhysicalDeviceVulkan13Properties *s); +void vkb_decfix_VkPhysicalDeviceVulkan13Properties(vkb_dec *d, VkPhysicalDeviceVulkan13Properties *s); +void vkb_enc_VkPhysicalDeviceVulkan14Features(vkb_enc *e, const VkPhysicalDeviceVulkan14Features *s); +void vkb_encfix_VkPhysicalDeviceVulkan14Features(vkb_enc *e, const VkPhysicalDeviceVulkan14Features *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan14Features(vkb_dec *d, VkPhysicalDeviceVulkan14Features *s); +void vkb_decfix_VkPhysicalDeviceVulkan14Features(vkb_dec *d, VkPhysicalDeviceVulkan14Features *s); +void vkb_enc_VkPhysicalDeviceVulkan14Properties(vkb_enc *e, const VkPhysicalDeviceVulkan14Properties *s); +void vkb_encfix_VkPhysicalDeviceVulkan14Properties(vkb_enc *e, const VkPhysicalDeviceVulkan14Properties *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkan14Properties(vkb_dec *d, VkPhysicalDeviceVulkan14Properties *s); +void vkb_decfix_VkPhysicalDeviceVulkan14Properties(vkb_dec *d, VkPhysicalDeviceVulkan14Properties *s); +void vkb_enc_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_enc *e, const VkPhysicalDeviceVulkanMemoryModelFeatures *s); +void vkb_encfix_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_enc *e, const VkPhysicalDeviceVulkanMemoryModelFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_dec *d, VkPhysicalDeviceVulkanMemoryModelFeatures *s); +void vkb_decfix_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_dec *d, VkPhysicalDeviceVulkanMemoryModelFeatures *s); +void vkb_enc_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s); +void vkb_encfix_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s, size_t raw); +void vkb_dec_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_dec *d, VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s); +void vkb_decfix_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_dec *d, VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s); +void vkb_enc_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s); +void vkb_encfix_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s, size_t raw); +void vkb_dec_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s); +void vkb_decfix_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s); +void vkb_enc_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s); +void vkb_encfix_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s, size_t raw); +void vkb_dec_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_dec *d, VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s); +void vkb_decfix_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_dec *d, VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s); +void vkb_enc_VkPipelineCacheCreateInfo(vkb_enc *e, const VkPipelineCacheCreateInfo *s); +void vkb_encfix_VkPipelineCacheCreateInfo(vkb_enc *e, const VkPipelineCacheCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineCacheCreateInfo(vkb_dec *d, VkPipelineCacheCreateInfo *s); +void vkb_decfix_VkPipelineCacheCreateInfo(vkb_dec *d, VkPipelineCacheCreateInfo *s); +void vkb_enc_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_enc *e, const VkPipelineColorBlendAdvancedStateCreateInfoEXT *s); +void vkb_encfix_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_enc *e, const VkPipelineColorBlendAdvancedStateCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_dec *d, VkPipelineColorBlendAdvancedStateCreateInfoEXT *s); +void vkb_decfix_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_dec *d, VkPipelineColorBlendAdvancedStateCreateInfoEXT *s); +void vkb_enc_VkPipelineColorBlendStateCreateInfo(vkb_enc *e, const VkPipelineColorBlendStateCreateInfo *s); +void vkb_encfix_VkPipelineColorBlendStateCreateInfo(vkb_enc *e, const VkPipelineColorBlendStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineColorBlendStateCreateInfo(vkb_dec *d, VkPipelineColorBlendStateCreateInfo *s); +void vkb_decfix_VkPipelineColorBlendStateCreateInfo(vkb_dec *d, VkPipelineColorBlendStateCreateInfo *s); +void vkb_enc_VkPipelineColorWriteCreateInfoEXT(vkb_enc *e, const VkPipelineColorWriteCreateInfoEXT *s); +void vkb_encfix_VkPipelineColorWriteCreateInfoEXT(vkb_enc *e, const VkPipelineColorWriteCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineColorWriteCreateInfoEXT(vkb_dec *d, VkPipelineColorWriteCreateInfoEXT *s); +void vkb_decfix_VkPipelineColorWriteCreateInfoEXT(vkb_dec *d, VkPipelineColorWriteCreateInfoEXT *s); +void vkb_enc_VkPipelineCreateFlags2CreateInfo(vkb_enc *e, const VkPipelineCreateFlags2CreateInfo *s); +void vkb_encfix_VkPipelineCreateFlags2CreateInfo(vkb_enc *e, const VkPipelineCreateFlags2CreateInfo *s, size_t raw); +void vkb_dec_VkPipelineCreateFlags2CreateInfo(vkb_dec *d, VkPipelineCreateFlags2CreateInfo *s); +void vkb_decfix_VkPipelineCreateFlags2CreateInfo(vkb_dec *d, VkPipelineCreateFlags2CreateInfo *s); +void vkb_enc_VkPipelineCreationFeedbackCreateInfo(vkb_enc *e, const VkPipelineCreationFeedbackCreateInfo *s); +void vkb_encfix_VkPipelineCreationFeedbackCreateInfo(vkb_enc *e, const VkPipelineCreationFeedbackCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineCreationFeedbackCreateInfo(vkb_dec *d, VkPipelineCreationFeedbackCreateInfo *s); +void vkb_decfix_VkPipelineCreationFeedbackCreateInfo(vkb_dec *d, VkPipelineCreationFeedbackCreateInfo *s); +void vkb_enc_VkPipelineDepthStencilStateCreateInfo(vkb_enc *e, const VkPipelineDepthStencilStateCreateInfo *s); +void vkb_encfix_VkPipelineDepthStencilStateCreateInfo(vkb_enc *e, const VkPipelineDepthStencilStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineDepthStencilStateCreateInfo(vkb_dec *d, VkPipelineDepthStencilStateCreateInfo *s); +void vkb_decfix_VkPipelineDepthStencilStateCreateInfo(vkb_dec *d, VkPipelineDepthStencilStateCreateInfo *s); +void vkb_enc_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_enc *e, const VkPipelineDiscardRectangleStateCreateInfoEXT *s); +void vkb_encfix_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_enc *e, const VkPipelineDiscardRectangleStateCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_dec *d, VkPipelineDiscardRectangleStateCreateInfoEXT *s); +void vkb_decfix_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_dec *d, VkPipelineDiscardRectangleStateCreateInfoEXT *s); +void vkb_enc_VkPipelineDynamicStateCreateInfo(vkb_enc *e, const VkPipelineDynamicStateCreateInfo *s); +void vkb_encfix_VkPipelineDynamicStateCreateInfo(vkb_enc *e, const VkPipelineDynamicStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineDynamicStateCreateInfo(vkb_dec *d, VkPipelineDynamicStateCreateInfo *s); +void vkb_decfix_VkPipelineDynamicStateCreateInfo(vkb_dec *d, VkPipelineDynamicStateCreateInfo *s); +void vkb_enc_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_enc *e, const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s); +void vkb_encfix_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_enc *e, const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s, size_t raw); +void vkb_dec_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_dec *d, VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s); +void vkb_decfix_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_dec *d, VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s); +void vkb_enc_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_enc *e, const VkPipelineFragmentShadingRateStateCreateInfoKHR *s); +void vkb_encfix_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_enc *e, const VkPipelineFragmentShadingRateStateCreateInfoKHR *s, size_t raw); +void vkb_dec_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_dec *d, VkPipelineFragmentShadingRateStateCreateInfoKHR *s); +void vkb_decfix_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_dec *d, VkPipelineFragmentShadingRateStateCreateInfoKHR *s); +void vkb_enc_VkPipelineInputAssemblyStateCreateInfo(vkb_enc *e, const VkPipelineInputAssemblyStateCreateInfo *s); +void vkb_encfix_VkPipelineInputAssemblyStateCreateInfo(vkb_enc *e, const VkPipelineInputAssemblyStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineInputAssemblyStateCreateInfo(vkb_dec *d, VkPipelineInputAssemblyStateCreateInfo *s); +void vkb_decfix_VkPipelineInputAssemblyStateCreateInfo(vkb_dec *d, VkPipelineInputAssemblyStateCreateInfo *s); +void vkb_enc_VkPipelineLayoutCreateInfo(vkb_enc *e, const VkPipelineLayoutCreateInfo *s); +void vkb_encfix_VkPipelineLayoutCreateInfo(vkb_enc *e, const VkPipelineLayoutCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineLayoutCreateInfo(vkb_dec *d, VkPipelineLayoutCreateInfo *s); +void vkb_decfix_VkPipelineLayoutCreateInfo(vkb_dec *d, VkPipelineLayoutCreateInfo *s); +void vkb_enc_VkPipelineLibraryCreateInfoKHR(vkb_enc *e, const VkPipelineLibraryCreateInfoKHR *s); +void vkb_encfix_VkPipelineLibraryCreateInfoKHR(vkb_enc *e, const VkPipelineLibraryCreateInfoKHR *s, size_t raw); +void vkb_dec_VkPipelineLibraryCreateInfoKHR(vkb_dec *d, VkPipelineLibraryCreateInfoKHR *s); +void vkb_decfix_VkPipelineLibraryCreateInfoKHR(vkb_dec *d, VkPipelineLibraryCreateInfoKHR *s); +void vkb_enc_VkPipelineMultisampleStateCreateInfo(vkb_enc *e, const VkPipelineMultisampleStateCreateInfo *s); +void vkb_encfix_VkPipelineMultisampleStateCreateInfo(vkb_enc *e, const VkPipelineMultisampleStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineMultisampleStateCreateInfo(vkb_dec *d, VkPipelineMultisampleStateCreateInfo *s); +void vkb_decfix_VkPipelineMultisampleStateCreateInfo(vkb_dec *d, VkPipelineMultisampleStateCreateInfo *s); +void vkb_enc_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationConservativeStateCreateInfoEXT *s); +void vkb_encfix_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationConservativeStateCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationConservativeStateCreateInfoEXT *s); +void vkb_decfix_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationConservativeStateCreateInfoEXT *s); +void vkb_enc_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationDepthClipStateCreateInfoEXT *s); +void vkb_encfix_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationDepthClipStateCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationDepthClipStateCreateInfoEXT *s); +void vkb_decfix_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationDepthClipStateCreateInfoEXT *s); +void vkb_enc_VkPipelineRasterizationLineStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationLineStateCreateInfo *s); +void vkb_encfix_VkPipelineRasterizationLineStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationLineStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineRasterizationLineStateCreateInfo(vkb_dec *d, VkPipelineRasterizationLineStateCreateInfo *s); +void vkb_decfix_VkPipelineRasterizationLineStateCreateInfo(vkb_dec *d, VkPipelineRasterizationLineStateCreateInfo *s); +void vkb_enc_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s); +void vkb_encfix_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s); +void vkb_decfix_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s); +void vkb_enc_VkPipelineRasterizationStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationStateCreateInfo *s); +void vkb_encfix_VkPipelineRasterizationStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineRasterizationStateCreateInfo(vkb_dec *d, VkPipelineRasterizationStateCreateInfo *s); +void vkb_decfix_VkPipelineRasterizationStateCreateInfo(vkb_dec *d, VkPipelineRasterizationStateCreateInfo *s); +void vkb_enc_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationStateStreamCreateInfoEXT *s); +void vkb_encfix_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationStateStreamCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationStateStreamCreateInfoEXT *s); +void vkb_decfix_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationStateStreamCreateInfoEXT *s); +void vkb_enc_VkPipelineRenderingCreateInfo(vkb_enc *e, const VkPipelineRenderingCreateInfo *s); +void vkb_encfix_VkPipelineRenderingCreateInfo(vkb_enc *e, const VkPipelineRenderingCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineRenderingCreateInfo(vkb_dec *d, VkPipelineRenderingCreateInfo *s); +void vkb_decfix_VkPipelineRenderingCreateInfo(vkb_dec *d, VkPipelineRenderingCreateInfo *s); +void vkb_enc_VkPipelineRobustnessCreateInfo(vkb_enc *e, const VkPipelineRobustnessCreateInfo *s); +void vkb_encfix_VkPipelineRobustnessCreateInfo(vkb_enc *e, const VkPipelineRobustnessCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineRobustnessCreateInfo(vkb_dec *d, VkPipelineRobustnessCreateInfo *s); +void vkb_decfix_VkPipelineRobustnessCreateInfo(vkb_dec *d, VkPipelineRobustnessCreateInfo *s); +void vkb_enc_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_enc *e, const VkPipelineSampleLocationsStateCreateInfoEXT *s); +void vkb_encfix_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_enc *e, const VkPipelineSampleLocationsStateCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_dec *d, VkPipelineSampleLocationsStateCreateInfoEXT *s); +void vkb_decfix_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_dec *d, VkPipelineSampleLocationsStateCreateInfoEXT *s); +void vkb_enc_VkPipelineShaderStageCreateInfo(vkb_enc *e, const VkPipelineShaderStageCreateInfo *s); +void vkb_encfix_VkPipelineShaderStageCreateInfo(vkb_enc *e, const VkPipelineShaderStageCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineShaderStageCreateInfo(vkb_dec *d, VkPipelineShaderStageCreateInfo *s); +void vkb_decfix_VkPipelineShaderStageCreateInfo(vkb_dec *d, VkPipelineShaderStageCreateInfo *s); +void vkb_enc_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_enc *e, const VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s); +void vkb_encfix_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_enc *e, const VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_dec *d, VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s); +void vkb_decfix_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_dec *d, VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s); +void vkb_enc_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_enc *e, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s); +void vkb_encfix_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_enc *e, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_dec *d, VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s); +void vkb_decfix_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_dec *d, VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s); +void vkb_enc_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_enc *e, const VkPipelineTessellationDomainOriginStateCreateInfo *s); +void vkb_encfix_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_enc *e, const VkPipelineTessellationDomainOriginStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_dec *d, VkPipelineTessellationDomainOriginStateCreateInfo *s); +void vkb_decfix_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_dec *d, VkPipelineTessellationDomainOriginStateCreateInfo *s); +void vkb_enc_VkPipelineTessellationStateCreateInfo(vkb_enc *e, const VkPipelineTessellationStateCreateInfo *s); +void vkb_encfix_VkPipelineTessellationStateCreateInfo(vkb_enc *e, const VkPipelineTessellationStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineTessellationStateCreateInfo(vkb_dec *d, VkPipelineTessellationStateCreateInfo *s); +void vkb_decfix_VkPipelineTessellationStateCreateInfo(vkb_dec *d, VkPipelineTessellationStateCreateInfo *s); +void vkb_enc_VkPipelineVertexInputDivisorStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputDivisorStateCreateInfo *s); +void vkb_encfix_VkPipelineVertexInputDivisorStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputDivisorStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineVertexInputDivisorStateCreateInfo(vkb_dec *d, VkPipelineVertexInputDivisorStateCreateInfo *s); +void vkb_decfix_VkPipelineVertexInputDivisorStateCreateInfo(vkb_dec *d, VkPipelineVertexInputDivisorStateCreateInfo *s); +void vkb_enc_VkPipelineVertexInputStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputStateCreateInfo *s); +void vkb_encfix_VkPipelineVertexInputStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineVertexInputStateCreateInfo(vkb_dec *d, VkPipelineVertexInputStateCreateInfo *s); +void vkb_decfix_VkPipelineVertexInputStateCreateInfo(vkb_dec *d, VkPipelineVertexInputStateCreateInfo *s); +void vkb_enc_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClampControlCreateInfoEXT *s); +void vkb_encfix_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClampControlCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClampControlCreateInfoEXT *s); +void vkb_decfix_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClampControlCreateInfoEXT *s); +void vkb_enc_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClipControlCreateInfoEXT *s); +void vkb_encfix_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClipControlCreateInfoEXT *s, size_t raw); +void vkb_dec_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClipControlCreateInfoEXT *s); +void vkb_decfix_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClipControlCreateInfoEXT *s); +void vkb_enc_VkPipelineViewportStateCreateInfo(vkb_enc *e, const VkPipelineViewportStateCreateInfo *s); +void vkb_encfix_VkPipelineViewportStateCreateInfo(vkb_enc *e, const VkPipelineViewportStateCreateInfo *s, size_t raw); +void vkb_dec_VkPipelineViewportStateCreateInfo(vkb_dec *d, VkPipelineViewportStateCreateInfo *s); +void vkb_decfix_VkPipelineViewportStateCreateInfo(vkb_dec *d, VkPipelineViewportStateCreateInfo *s); +void vkb_enc_VkProtectedSubmitInfo(vkb_enc *e, const VkProtectedSubmitInfo *s); +void vkb_encfix_VkProtectedSubmitInfo(vkb_enc *e, const VkProtectedSubmitInfo *s, size_t raw); +void vkb_dec_VkProtectedSubmitInfo(vkb_dec *d, VkProtectedSubmitInfo *s); +void vkb_decfix_VkProtectedSubmitInfo(vkb_dec *d, VkProtectedSubmitInfo *s); +void vkb_enc_VkPushConstantsInfo(vkb_enc *e, const VkPushConstantsInfo *s); +void vkb_encfix_VkPushConstantsInfo(vkb_enc *e, const VkPushConstantsInfo *s, size_t raw); +void vkb_dec_VkPushConstantsInfo(vkb_dec *d, VkPushConstantsInfo *s); +void vkb_decfix_VkPushConstantsInfo(vkb_dec *d, VkPushConstantsInfo *s); +void vkb_enc_VkPushDescriptorSetInfo(vkb_enc *e, const VkPushDescriptorSetInfo *s); +void vkb_encfix_VkPushDescriptorSetInfo(vkb_enc *e, const VkPushDescriptorSetInfo *s, size_t raw); +void vkb_dec_VkPushDescriptorSetInfo(vkb_dec *d, VkPushDescriptorSetInfo *s); +void vkb_decfix_VkPushDescriptorSetInfo(vkb_dec *d, VkPushDescriptorSetInfo *s); +void vkb_enc_VkQueryPoolCreateInfo(vkb_enc *e, const VkQueryPoolCreateInfo *s); +void vkb_encfix_VkQueryPoolCreateInfo(vkb_enc *e, const VkQueryPoolCreateInfo *s, size_t raw); +void vkb_dec_VkQueryPoolCreateInfo(vkb_dec *d, VkQueryPoolCreateInfo *s); +void vkb_decfix_VkQueryPoolCreateInfo(vkb_dec *d, VkQueryPoolCreateInfo *s); +void vkb_enc_VkQueueFamilyGlobalPriorityProperties(vkb_enc *e, const VkQueueFamilyGlobalPriorityProperties *s); +void vkb_encfix_VkQueueFamilyGlobalPriorityProperties(vkb_enc *e, const VkQueueFamilyGlobalPriorityProperties *s, size_t raw); +void vkb_dec_VkQueueFamilyGlobalPriorityProperties(vkb_dec *d, VkQueueFamilyGlobalPriorityProperties *s); +void vkb_decfix_VkQueueFamilyGlobalPriorityProperties(vkb_dec *d, VkQueueFamilyGlobalPriorityProperties *s); +void vkb_enc_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_enc *e, const VkQueueFamilyOwnershipTransferPropertiesKHR *s); +void vkb_encfix_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_enc *e, const VkQueueFamilyOwnershipTransferPropertiesKHR *s, size_t raw); +void vkb_dec_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_dec *d, VkQueueFamilyOwnershipTransferPropertiesKHR *s); +void vkb_decfix_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_dec *d, VkQueueFamilyOwnershipTransferPropertiesKHR *s); +void vkb_enc_VkQueueFamilyProperties2(vkb_enc *e, const VkQueueFamilyProperties2 *s); +void vkb_encfix_VkQueueFamilyProperties2(vkb_enc *e, const VkQueueFamilyProperties2 *s, size_t raw); +void vkb_dec_VkQueueFamilyProperties2(vkb_dec *d, VkQueueFamilyProperties2 *s); +void vkb_decfix_VkQueueFamilyProperties2(vkb_dec *d, VkQueueFamilyProperties2 *s); +void vkb_enc_VkRenderPassAttachmentBeginInfo(vkb_enc *e, const VkRenderPassAttachmentBeginInfo *s); +void vkb_encfix_VkRenderPassAttachmentBeginInfo(vkb_enc *e, const VkRenderPassAttachmentBeginInfo *s, size_t raw); +void vkb_dec_VkRenderPassAttachmentBeginInfo(vkb_dec *d, VkRenderPassAttachmentBeginInfo *s); +void vkb_decfix_VkRenderPassAttachmentBeginInfo(vkb_dec *d, VkRenderPassAttachmentBeginInfo *s); +void vkb_enc_VkRenderPassBeginInfo(vkb_enc *e, const VkRenderPassBeginInfo *s); +void vkb_encfix_VkRenderPassBeginInfo(vkb_enc *e, const VkRenderPassBeginInfo *s, size_t raw); +void vkb_dec_VkRenderPassBeginInfo(vkb_dec *d, VkRenderPassBeginInfo *s); +void vkb_decfix_VkRenderPassBeginInfo(vkb_dec *d, VkRenderPassBeginInfo *s); +void vkb_enc_VkRenderPassCreateInfo(vkb_enc *e, const VkRenderPassCreateInfo *s); +void vkb_encfix_VkRenderPassCreateInfo(vkb_enc *e, const VkRenderPassCreateInfo *s, size_t raw); +void vkb_dec_VkRenderPassCreateInfo(vkb_dec *d, VkRenderPassCreateInfo *s); +void vkb_decfix_VkRenderPassCreateInfo(vkb_dec *d, VkRenderPassCreateInfo *s); +void vkb_enc_VkRenderPassCreateInfo2(vkb_enc *e, const VkRenderPassCreateInfo2 *s); +void vkb_encfix_VkRenderPassCreateInfo2(vkb_enc *e, const VkRenderPassCreateInfo2 *s, size_t raw); +void vkb_dec_VkRenderPassCreateInfo2(vkb_dec *d, VkRenderPassCreateInfo2 *s); +void vkb_decfix_VkRenderPassCreateInfo2(vkb_dec *d, VkRenderPassCreateInfo2 *s); +void vkb_enc_VkRenderPassCreationControlEXT(vkb_enc *e, const VkRenderPassCreationControlEXT *s); +void vkb_encfix_VkRenderPassCreationControlEXT(vkb_enc *e, const VkRenderPassCreationControlEXT *s, size_t raw); +void vkb_dec_VkRenderPassCreationControlEXT(vkb_dec *d, VkRenderPassCreationControlEXT *s); +void vkb_decfix_VkRenderPassCreationControlEXT(vkb_dec *d, VkRenderPassCreationControlEXT *s); +void vkb_enc_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassCreationFeedbackCreateInfoEXT *s); +void vkb_encfix_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassCreationFeedbackCreateInfoEXT *s, size_t raw); +void vkb_dec_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassCreationFeedbackCreateInfoEXT *s); +void vkb_decfix_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassCreationFeedbackCreateInfoEXT *s); +void vkb_enc_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_enc *e, const VkRenderPassFragmentDensityMapCreateInfoEXT *s); +void vkb_encfix_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_enc *e, const VkRenderPassFragmentDensityMapCreateInfoEXT *s, size_t raw); +void vkb_dec_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_dec *d, VkRenderPassFragmentDensityMapCreateInfoEXT *s); +void vkb_decfix_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_dec *d, VkRenderPassFragmentDensityMapCreateInfoEXT *s); +void vkb_enc_VkRenderPassInputAttachmentAspectCreateInfo(vkb_enc *e, const VkRenderPassInputAttachmentAspectCreateInfo *s); +void vkb_encfix_VkRenderPassInputAttachmentAspectCreateInfo(vkb_enc *e, const VkRenderPassInputAttachmentAspectCreateInfo *s, size_t raw); +void vkb_dec_VkRenderPassInputAttachmentAspectCreateInfo(vkb_dec *d, VkRenderPassInputAttachmentAspectCreateInfo *s); +void vkb_decfix_VkRenderPassInputAttachmentAspectCreateInfo(vkb_dec *d, VkRenderPassInputAttachmentAspectCreateInfo *s); +void vkb_enc_VkRenderPassMultiviewCreateInfo(vkb_enc *e, const VkRenderPassMultiviewCreateInfo *s); +void vkb_encfix_VkRenderPassMultiviewCreateInfo(vkb_enc *e, const VkRenderPassMultiviewCreateInfo *s, size_t raw); +void vkb_dec_VkRenderPassMultiviewCreateInfo(vkb_dec *d, VkRenderPassMultiviewCreateInfo *s); +void vkb_decfix_VkRenderPassMultiviewCreateInfo(vkb_dec *d, VkRenderPassMultiviewCreateInfo *s); +void vkb_enc_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_enc *e, const VkRenderPassPerformanceCountersByRegionBeginInfoARM *s); +void vkb_encfix_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_enc *e, const VkRenderPassPerformanceCountersByRegionBeginInfoARM *s, size_t raw); +void vkb_dec_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_dec *d, VkRenderPassPerformanceCountersByRegionBeginInfoARM *s); +void vkb_decfix_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_dec *d, VkRenderPassPerformanceCountersByRegionBeginInfoARM *s); +void vkb_enc_VkRenderPassSampleLocationsBeginInfoEXT(vkb_enc *e, const VkRenderPassSampleLocationsBeginInfoEXT *s); +void vkb_encfix_VkRenderPassSampleLocationsBeginInfoEXT(vkb_enc *e, const VkRenderPassSampleLocationsBeginInfoEXT *s, size_t raw); +void vkb_dec_VkRenderPassSampleLocationsBeginInfoEXT(vkb_dec *d, VkRenderPassSampleLocationsBeginInfoEXT *s); +void vkb_decfix_VkRenderPassSampleLocationsBeginInfoEXT(vkb_dec *d, VkRenderPassSampleLocationsBeginInfoEXT *s); +void vkb_enc_VkRenderPassStripeBeginInfoARM(vkb_enc *e, const VkRenderPassStripeBeginInfoARM *s); +void vkb_encfix_VkRenderPassStripeBeginInfoARM(vkb_enc *e, const VkRenderPassStripeBeginInfoARM *s, size_t raw); +void vkb_dec_VkRenderPassStripeBeginInfoARM(vkb_dec *d, VkRenderPassStripeBeginInfoARM *s); +void vkb_decfix_VkRenderPassStripeBeginInfoARM(vkb_dec *d, VkRenderPassStripeBeginInfoARM *s); +void vkb_enc_VkRenderPassStripeInfoARM(vkb_enc *e, const VkRenderPassStripeInfoARM *s); +void vkb_encfix_VkRenderPassStripeInfoARM(vkb_enc *e, const VkRenderPassStripeInfoARM *s, size_t raw); +void vkb_dec_VkRenderPassStripeInfoARM(vkb_dec *d, VkRenderPassStripeInfoARM *s); +void vkb_decfix_VkRenderPassStripeInfoARM(vkb_dec *d, VkRenderPassStripeInfoARM *s); +void vkb_enc_VkRenderPassStripeSubmitInfoARM(vkb_enc *e, const VkRenderPassStripeSubmitInfoARM *s); +void vkb_encfix_VkRenderPassStripeSubmitInfoARM(vkb_enc *e, const VkRenderPassStripeSubmitInfoARM *s, size_t raw); +void vkb_dec_VkRenderPassStripeSubmitInfoARM(vkb_dec *d, VkRenderPassStripeSubmitInfoARM *s); +void vkb_decfix_VkRenderPassStripeSubmitInfoARM(vkb_dec *d, VkRenderPassStripeSubmitInfoARM *s); +void vkb_enc_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassSubpassFeedbackCreateInfoEXT *s); +void vkb_encfix_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassSubpassFeedbackCreateInfoEXT *s, size_t raw); +void vkb_dec_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassSubpassFeedbackCreateInfoEXT *s); +void vkb_decfix_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassSubpassFeedbackCreateInfoEXT *s); +void vkb_enc_VkRenderingAreaInfo(vkb_enc *e, const VkRenderingAreaInfo *s); +void vkb_encfix_VkRenderingAreaInfo(vkb_enc *e, const VkRenderingAreaInfo *s, size_t raw); +void vkb_dec_VkRenderingAreaInfo(vkb_dec *d, VkRenderingAreaInfo *s); +void vkb_decfix_VkRenderingAreaInfo(vkb_dec *d, VkRenderingAreaInfo *s); +void vkb_enc_VkRenderingAttachmentFlagsInfoKHR(vkb_enc *e, const VkRenderingAttachmentFlagsInfoKHR *s); +void vkb_encfix_VkRenderingAttachmentFlagsInfoKHR(vkb_enc *e, const VkRenderingAttachmentFlagsInfoKHR *s, size_t raw); +void vkb_dec_VkRenderingAttachmentFlagsInfoKHR(vkb_dec *d, VkRenderingAttachmentFlagsInfoKHR *s); +void vkb_decfix_VkRenderingAttachmentFlagsInfoKHR(vkb_dec *d, VkRenderingAttachmentFlagsInfoKHR *s); +void vkb_enc_VkRenderingAttachmentInfo(vkb_enc *e, const VkRenderingAttachmentInfo *s); +void vkb_encfix_VkRenderingAttachmentInfo(vkb_enc *e, const VkRenderingAttachmentInfo *s, size_t raw); +void vkb_dec_VkRenderingAttachmentInfo(vkb_dec *d, VkRenderingAttachmentInfo *s); +void vkb_decfix_VkRenderingAttachmentInfo(vkb_dec *d, VkRenderingAttachmentInfo *s); +void vkb_enc_VkRenderingAttachmentLocationInfo(vkb_enc *e, const VkRenderingAttachmentLocationInfo *s); +void vkb_encfix_VkRenderingAttachmentLocationInfo(vkb_enc *e, const VkRenderingAttachmentLocationInfo *s, size_t raw); +void vkb_dec_VkRenderingAttachmentLocationInfo(vkb_dec *d, VkRenderingAttachmentLocationInfo *s); +void vkb_decfix_VkRenderingAttachmentLocationInfo(vkb_dec *d, VkRenderingAttachmentLocationInfo *s); +void vkb_enc_VkRenderingEndInfoKHR(vkb_enc *e, const VkRenderingEndInfoKHR *s); +void vkb_encfix_VkRenderingEndInfoKHR(vkb_enc *e, const VkRenderingEndInfoKHR *s, size_t raw); +void vkb_dec_VkRenderingEndInfoKHR(vkb_dec *d, VkRenderingEndInfoKHR *s); +void vkb_decfix_VkRenderingEndInfoKHR(vkb_dec *d, VkRenderingEndInfoKHR *s); +void vkb_enc_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_enc *e, const VkRenderingFragmentDensityMapAttachmentInfoEXT *s); +void vkb_encfix_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_enc *e, const VkRenderingFragmentDensityMapAttachmentInfoEXT *s, size_t raw); +void vkb_dec_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_dec *d, VkRenderingFragmentDensityMapAttachmentInfoEXT *s); +void vkb_decfix_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_dec *d, VkRenderingFragmentDensityMapAttachmentInfoEXT *s); +void vkb_enc_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkRenderingFragmentShadingRateAttachmentInfoKHR *s); +void vkb_encfix_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkRenderingFragmentShadingRateAttachmentInfoKHR *s, size_t raw); +void vkb_dec_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkRenderingFragmentShadingRateAttachmentInfoKHR *s); +void vkb_decfix_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkRenderingFragmentShadingRateAttachmentInfoKHR *s); +void vkb_enc_VkRenderingInfo(vkb_enc *e, const VkRenderingInfo *s); +void vkb_encfix_VkRenderingInfo(vkb_enc *e, const VkRenderingInfo *s, size_t raw); +void vkb_dec_VkRenderingInfo(vkb_dec *d, VkRenderingInfo *s); +void vkb_decfix_VkRenderingInfo(vkb_dec *d, VkRenderingInfo *s); +void vkb_enc_VkRenderingInputAttachmentIndexInfo(vkb_enc *e, const VkRenderingInputAttachmentIndexInfo *s); +void vkb_encfix_VkRenderingInputAttachmentIndexInfo(vkb_enc *e, const VkRenderingInputAttachmentIndexInfo *s, size_t raw); +void vkb_dec_VkRenderingInputAttachmentIndexInfo(vkb_dec *d, VkRenderingInputAttachmentIndexInfo *s); +void vkb_decfix_VkRenderingInputAttachmentIndexInfo(vkb_dec *d, VkRenderingInputAttachmentIndexInfo *s); +void vkb_enc_VkResolveImageInfo2(vkb_enc *e, const VkResolveImageInfo2 *s); +void vkb_encfix_VkResolveImageInfo2(vkb_enc *e, const VkResolveImageInfo2 *s, size_t raw); +void vkb_dec_VkResolveImageInfo2(vkb_dec *d, VkResolveImageInfo2 *s); +void vkb_decfix_VkResolveImageInfo2(vkb_dec *d, VkResolveImageInfo2 *s); +void vkb_enc_VkResolveImageModeInfoKHR(vkb_enc *e, const VkResolveImageModeInfoKHR *s); +void vkb_encfix_VkResolveImageModeInfoKHR(vkb_enc *e, const VkResolveImageModeInfoKHR *s, size_t raw); +void vkb_dec_VkResolveImageModeInfoKHR(vkb_dec *d, VkResolveImageModeInfoKHR *s); +void vkb_decfix_VkResolveImageModeInfoKHR(vkb_dec *d, VkResolveImageModeInfoKHR *s); +void vkb_enc_VkSampleLocationsInfoEXT(vkb_enc *e, const VkSampleLocationsInfoEXT *s); +void vkb_encfix_VkSampleLocationsInfoEXT(vkb_enc *e, const VkSampleLocationsInfoEXT *s, size_t raw); +void vkb_dec_VkSampleLocationsInfoEXT(vkb_dec *d, VkSampleLocationsInfoEXT *s); +void vkb_decfix_VkSampleLocationsInfoEXT(vkb_dec *d, VkSampleLocationsInfoEXT *s); +void vkb_enc_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_enc *e, const VkSamplerBorderColorComponentMappingCreateInfoEXT *s); +void vkb_encfix_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_enc *e, const VkSamplerBorderColorComponentMappingCreateInfoEXT *s, size_t raw); +void vkb_dec_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_dec *d, VkSamplerBorderColorComponentMappingCreateInfoEXT *s); +void vkb_decfix_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_dec *d, VkSamplerBorderColorComponentMappingCreateInfoEXT *s); +void vkb_enc_VkSamplerCreateInfo(vkb_enc *e, const VkSamplerCreateInfo *s); +void vkb_encfix_VkSamplerCreateInfo(vkb_enc *e, const VkSamplerCreateInfo *s, size_t raw); +void vkb_dec_VkSamplerCreateInfo(vkb_dec *d, VkSamplerCreateInfo *s); +void vkb_decfix_VkSamplerCreateInfo(vkb_dec *d, VkSamplerCreateInfo *s); +void vkb_enc_VkSamplerCustomBorderColorCreateInfoEXT(vkb_enc *e, const VkSamplerCustomBorderColorCreateInfoEXT *s); +void vkb_encfix_VkSamplerCustomBorderColorCreateInfoEXT(vkb_enc *e, const VkSamplerCustomBorderColorCreateInfoEXT *s, size_t raw); +void vkb_dec_VkSamplerCustomBorderColorCreateInfoEXT(vkb_dec *d, VkSamplerCustomBorderColorCreateInfoEXT *s); +void vkb_decfix_VkSamplerCustomBorderColorCreateInfoEXT(vkb_dec *d, VkSamplerCustomBorderColorCreateInfoEXT *s); +void vkb_enc_VkSamplerReductionModeCreateInfo(vkb_enc *e, const VkSamplerReductionModeCreateInfo *s); +void vkb_encfix_VkSamplerReductionModeCreateInfo(vkb_enc *e, const VkSamplerReductionModeCreateInfo *s, size_t raw); +void vkb_dec_VkSamplerReductionModeCreateInfo(vkb_dec *d, VkSamplerReductionModeCreateInfo *s); +void vkb_decfix_VkSamplerReductionModeCreateInfo(vkb_dec *d, VkSamplerReductionModeCreateInfo *s); +void vkb_enc_VkSamplerYcbcrConversionCreateInfo(vkb_enc *e, const VkSamplerYcbcrConversionCreateInfo *s); +void vkb_encfix_VkSamplerYcbcrConversionCreateInfo(vkb_enc *e, const VkSamplerYcbcrConversionCreateInfo *s, size_t raw); +void vkb_dec_VkSamplerYcbcrConversionCreateInfo(vkb_dec *d, VkSamplerYcbcrConversionCreateInfo *s); +void vkb_decfix_VkSamplerYcbcrConversionCreateInfo(vkb_dec *d, VkSamplerYcbcrConversionCreateInfo *s); +void vkb_enc_VkSamplerYcbcrConversionImageFormatProperties(vkb_enc *e, const VkSamplerYcbcrConversionImageFormatProperties *s); +void vkb_encfix_VkSamplerYcbcrConversionImageFormatProperties(vkb_enc *e, const VkSamplerYcbcrConversionImageFormatProperties *s, size_t raw); +void vkb_dec_VkSamplerYcbcrConversionImageFormatProperties(vkb_dec *d, VkSamplerYcbcrConversionImageFormatProperties *s); +void vkb_decfix_VkSamplerYcbcrConversionImageFormatProperties(vkb_dec *d, VkSamplerYcbcrConversionImageFormatProperties *s); +void vkb_enc_VkSamplerYcbcrConversionInfo(vkb_enc *e, const VkSamplerYcbcrConversionInfo *s); +void vkb_encfix_VkSamplerYcbcrConversionInfo(vkb_enc *e, const VkSamplerYcbcrConversionInfo *s, size_t raw); +void vkb_dec_VkSamplerYcbcrConversionInfo(vkb_dec *d, VkSamplerYcbcrConversionInfo *s); +void vkb_decfix_VkSamplerYcbcrConversionInfo(vkb_dec *d, VkSamplerYcbcrConversionInfo *s); +void vkb_enc_VkSemaphoreCreateInfo(vkb_enc *e, const VkSemaphoreCreateInfo *s); +void vkb_encfix_VkSemaphoreCreateInfo(vkb_enc *e, const VkSemaphoreCreateInfo *s, size_t raw); +void vkb_dec_VkSemaphoreCreateInfo(vkb_dec *d, VkSemaphoreCreateInfo *s); +void vkb_decfix_VkSemaphoreCreateInfo(vkb_dec *d, VkSemaphoreCreateInfo *s); +void vkb_enc_VkSemaphoreGetFdInfoKHR(vkb_enc *e, const VkSemaphoreGetFdInfoKHR *s); +void vkb_encfix_VkSemaphoreGetFdInfoKHR(vkb_enc *e, const VkSemaphoreGetFdInfoKHR *s, size_t raw); +void vkb_dec_VkSemaphoreGetFdInfoKHR(vkb_dec *d, VkSemaphoreGetFdInfoKHR *s); +void vkb_decfix_VkSemaphoreGetFdInfoKHR(vkb_dec *d, VkSemaphoreGetFdInfoKHR *s); +void vkb_enc_VkSemaphoreSignalInfo(vkb_enc *e, const VkSemaphoreSignalInfo *s); +void vkb_encfix_VkSemaphoreSignalInfo(vkb_enc *e, const VkSemaphoreSignalInfo *s, size_t raw); +void vkb_dec_VkSemaphoreSignalInfo(vkb_dec *d, VkSemaphoreSignalInfo *s); +void vkb_decfix_VkSemaphoreSignalInfo(vkb_dec *d, VkSemaphoreSignalInfo *s); +void vkb_enc_VkSemaphoreSubmitInfo(vkb_enc *e, const VkSemaphoreSubmitInfo *s); +void vkb_encfix_VkSemaphoreSubmitInfo(vkb_enc *e, const VkSemaphoreSubmitInfo *s, size_t raw); +void vkb_dec_VkSemaphoreSubmitInfo(vkb_dec *d, VkSemaphoreSubmitInfo *s); +void vkb_decfix_VkSemaphoreSubmitInfo(vkb_dec *d, VkSemaphoreSubmitInfo *s); +void vkb_enc_VkSemaphoreTypeCreateInfo(vkb_enc *e, const VkSemaphoreTypeCreateInfo *s); +void vkb_encfix_VkSemaphoreTypeCreateInfo(vkb_enc *e, const VkSemaphoreTypeCreateInfo *s, size_t raw); +void vkb_dec_VkSemaphoreTypeCreateInfo(vkb_dec *d, VkSemaphoreTypeCreateInfo *s); +void vkb_decfix_VkSemaphoreTypeCreateInfo(vkb_dec *d, VkSemaphoreTypeCreateInfo *s); +void vkb_enc_VkSemaphoreWaitInfo(vkb_enc *e, const VkSemaphoreWaitInfo *s); +void vkb_encfix_VkSemaphoreWaitInfo(vkb_enc *e, const VkSemaphoreWaitInfo *s, size_t raw); +void vkb_dec_VkSemaphoreWaitInfo(vkb_dec *d, VkSemaphoreWaitInfo *s); +void vkb_decfix_VkSemaphoreWaitInfo(vkb_dec *d, VkSemaphoreWaitInfo *s); +void vkb_enc_VkShaderModuleCreateInfo(vkb_enc *e, const VkShaderModuleCreateInfo *s); +void vkb_encfix_VkShaderModuleCreateInfo(vkb_enc *e, const VkShaderModuleCreateInfo *s, size_t raw); +void vkb_dec_VkShaderModuleCreateInfo(vkb_dec *d, VkShaderModuleCreateInfo *s); +void vkb_decfix_VkShaderModuleCreateInfo(vkb_dec *d, VkShaderModuleCreateInfo *s); +void vkb_enc_VkShaderModuleIdentifierEXT(vkb_enc *e, const VkShaderModuleIdentifierEXT *s); +void vkb_encfix_VkShaderModuleIdentifierEXT(vkb_enc *e, const VkShaderModuleIdentifierEXT *s, size_t raw); +void vkb_dec_VkShaderModuleIdentifierEXT(vkb_dec *d, VkShaderModuleIdentifierEXT *s); +void vkb_decfix_VkShaderModuleIdentifierEXT(vkb_dec *d, VkShaderModuleIdentifierEXT *s); +void vkb_enc_VkSparseBufferMemoryBindInfo(vkb_enc *e, const VkSparseBufferMemoryBindInfo *s); +void vkb_encfix_VkSparseBufferMemoryBindInfo(vkb_enc *e, const VkSparseBufferMemoryBindInfo *s, size_t raw); +void vkb_dec_VkSparseBufferMemoryBindInfo(vkb_dec *d, VkSparseBufferMemoryBindInfo *s); +void vkb_decfix_VkSparseBufferMemoryBindInfo(vkb_dec *d, VkSparseBufferMemoryBindInfo *s); +void vkb_enc_VkSparseImageFormatProperties2(vkb_enc *e, const VkSparseImageFormatProperties2 *s); +void vkb_encfix_VkSparseImageFormatProperties2(vkb_enc *e, const VkSparseImageFormatProperties2 *s, size_t raw); +void vkb_dec_VkSparseImageFormatProperties2(vkb_dec *d, VkSparseImageFormatProperties2 *s); +void vkb_decfix_VkSparseImageFormatProperties2(vkb_dec *d, VkSparseImageFormatProperties2 *s); +void vkb_enc_VkSparseImageMemoryBindInfo(vkb_enc *e, const VkSparseImageMemoryBindInfo *s); +void vkb_encfix_VkSparseImageMemoryBindInfo(vkb_enc *e, const VkSparseImageMemoryBindInfo *s, size_t raw); +void vkb_dec_VkSparseImageMemoryBindInfo(vkb_dec *d, VkSparseImageMemoryBindInfo *s); +void vkb_decfix_VkSparseImageMemoryBindInfo(vkb_dec *d, VkSparseImageMemoryBindInfo *s); +void vkb_enc_VkSparseImageMemoryRequirements2(vkb_enc *e, const VkSparseImageMemoryRequirements2 *s); +void vkb_encfix_VkSparseImageMemoryRequirements2(vkb_enc *e, const VkSparseImageMemoryRequirements2 *s, size_t raw); +void vkb_dec_VkSparseImageMemoryRequirements2(vkb_dec *d, VkSparseImageMemoryRequirements2 *s); +void vkb_decfix_VkSparseImageMemoryRequirements2(vkb_dec *d, VkSparseImageMemoryRequirements2 *s); +void vkb_enc_VkSparseImageOpaqueMemoryBindInfo(vkb_enc *e, const VkSparseImageOpaqueMemoryBindInfo *s); +void vkb_encfix_VkSparseImageOpaqueMemoryBindInfo(vkb_enc *e, const VkSparseImageOpaqueMemoryBindInfo *s, size_t raw); +void vkb_dec_VkSparseImageOpaqueMemoryBindInfo(vkb_dec *d, VkSparseImageOpaqueMemoryBindInfo *s); +void vkb_decfix_VkSparseImageOpaqueMemoryBindInfo(vkb_dec *d, VkSparseImageOpaqueMemoryBindInfo *s); +void vkb_enc_VkSpecializationInfo(vkb_enc *e, const VkSpecializationInfo *s); +void vkb_encfix_VkSpecializationInfo(vkb_enc *e, const VkSpecializationInfo *s, size_t raw); +void vkb_dec_VkSpecializationInfo(vkb_dec *d, VkSpecializationInfo *s); +void vkb_decfix_VkSpecializationInfo(vkb_dec *d, VkSpecializationInfo *s); +void vkb_enc_VkSubmitInfo(vkb_enc *e, const VkSubmitInfo *s); +void vkb_encfix_VkSubmitInfo(vkb_enc *e, const VkSubmitInfo *s, size_t raw); +void vkb_dec_VkSubmitInfo(vkb_dec *d, VkSubmitInfo *s); +void vkb_decfix_VkSubmitInfo(vkb_dec *d, VkSubmitInfo *s); +void vkb_enc_VkSubmitInfo2(vkb_enc *e, const VkSubmitInfo2 *s); +void vkb_encfix_VkSubmitInfo2(vkb_enc *e, const VkSubmitInfo2 *s, size_t raw); +void vkb_dec_VkSubmitInfo2(vkb_dec *d, VkSubmitInfo2 *s); +void vkb_decfix_VkSubmitInfo2(vkb_dec *d, VkSubmitInfo2 *s); +void vkb_enc_VkSubpassBeginInfo(vkb_enc *e, const VkSubpassBeginInfo *s); +void vkb_encfix_VkSubpassBeginInfo(vkb_enc *e, const VkSubpassBeginInfo *s, size_t raw); +void vkb_dec_VkSubpassBeginInfo(vkb_dec *d, VkSubpassBeginInfo *s); +void vkb_decfix_VkSubpassBeginInfo(vkb_dec *d, VkSubpassBeginInfo *s); +void vkb_enc_VkSubpassDependency2(vkb_enc *e, const VkSubpassDependency2 *s); +void vkb_encfix_VkSubpassDependency2(vkb_enc *e, const VkSubpassDependency2 *s, size_t raw); +void vkb_dec_VkSubpassDependency2(vkb_dec *d, VkSubpassDependency2 *s); +void vkb_decfix_VkSubpassDependency2(vkb_dec *d, VkSubpassDependency2 *s); +void vkb_enc_VkSubpassDescription(vkb_enc *e, const VkSubpassDescription *s); +void vkb_encfix_VkSubpassDescription(vkb_enc *e, const VkSubpassDescription *s, size_t raw); +void vkb_dec_VkSubpassDescription(vkb_dec *d, VkSubpassDescription *s); +void vkb_decfix_VkSubpassDescription(vkb_dec *d, VkSubpassDescription *s); +void vkb_enc_VkSubpassDescription2(vkb_enc *e, const VkSubpassDescription2 *s); +void vkb_encfix_VkSubpassDescription2(vkb_enc *e, const VkSubpassDescription2 *s, size_t raw); +void vkb_dec_VkSubpassDescription2(vkb_dec *d, VkSubpassDescription2 *s); +void vkb_decfix_VkSubpassDescription2(vkb_dec *d, VkSubpassDescription2 *s); +void vkb_enc_VkSubpassDescriptionDepthStencilResolve(vkb_enc *e, const VkSubpassDescriptionDepthStencilResolve *s); +void vkb_encfix_VkSubpassDescriptionDepthStencilResolve(vkb_enc *e, const VkSubpassDescriptionDepthStencilResolve *s, size_t raw); +void vkb_dec_VkSubpassDescriptionDepthStencilResolve(vkb_dec *d, VkSubpassDescriptionDepthStencilResolve *s); +void vkb_decfix_VkSubpassDescriptionDepthStencilResolve(vkb_dec *d, VkSubpassDescriptionDepthStencilResolve *s); +void vkb_enc_VkSubpassEndInfo(vkb_enc *e, const VkSubpassEndInfo *s); +void vkb_encfix_VkSubpassEndInfo(vkb_enc *e, const VkSubpassEndInfo *s, size_t raw); +void vkb_dec_VkSubpassEndInfo(vkb_dec *d, VkSubpassEndInfo *s); +void vkb_decfix_VkSubpassEndInfo(vkb_dec *d, VkSubpassEndInfo *s); +void vkb_enc_VkSubpassResolvePerformanceQueryEXT(vkb_enc *e, const VkSubpassResolvePerformanceQueryEXT *s); +void vkb_encfix_VkSubpassResolvePerformanceQueryEXT(vkb_enc *e, const VkSubpassResolvePerformanceQueryEXT *s, size_t raw); +void vkb_dec_VkSubpassResolvePerformanceQueryEXT(vkb_dec *d, VkSubpassResolvePerformanceQueryEXT *s); +void vkb_decfix_VkSubpassResolvePerformanceQueryEXT(vkb_dec *d, VkSubpassResolvePerformanceQueryEXT *s); +void vkb_enc_VkSubpassSampleLocationsEXT(vkb_enc *e, const VkSubpassSampleLocationsEXT *s); +void vkb_encfix_VkSubpassSampleLocationsEXT(vkb_enc *e, const VkSubpassSampleLocationsEXT *s, size_t raw); +void vkb_dec_VkSubpassSampleLocationsEXT(vkb_dec *d, VkSubpassSampleLocationsEXT *s); +void vkb_decfix_VkSubpassSampleLocationsEXT(vkb_dec *d, VkSubpassSampleLocationsEXT *s); +void vkb_enc_VkSubresourceHostMemcpySize(vkb_enc *e, const VkSubresourceHostMemcpySize *s); +void vkb_encfix_VkSubresourceHostMemcpySize(vkb_enc *e, const VkSubresourceHostMemcpySize *s, size_t raw); +void vkb_dec_VkSubresourceHostMemcpySize(vkb_dec *d, VkSubresourceHostMemcpySize *s); +void vkb_decfix_VkSubresourceHostMemcpySize(vkb_dec *d, VkSubresourceHostMemcpySize *s); +void vkb_enc_VkSubresourceLayout2(vkb_enc *e, const VkSubresourceLayout2 *s); +void vkb_encfix_VkSubresourceLayout2(vkb_enc *e, const VkSubresourceLayout2 *s, size_t raw); +void vkb_dec_VkSubresourceLayout2(vkb_dec *d, VkSubresourceLayout2 *s); +void vkb_decfix_VkSubresourceLayout2(vkb_dec *d, VkSubresourceLayout2 *s); +void vkb_enc_VkTensorCopyARM(vkb_enc *e, const VkTensorCopyARM *s); +void vkb_encfix_VkTensorCopyARM(vkb_enc *e, const VkTensorCopyARM *s, size_t raw); +void vkb_dec_VkTensorCopyARM(vkb_dec *d, VkTensorCopyARM *s); +void vkb_decfix_VkTensorCopyARM(vkb_dec *d, VkTensorCopyARM *s); +void vkb_enc_VkTensorCreateInfoARM(vkb_enc *e, const VkTensorCreateInfoARM *s); +void vkb_encfix_VkTensorCreateInfoARM(vkb_enc *e, const VkTensorCreateInfoARM *s, size_t raw); +void vkb_dec_VkTensorCreateInfoARM(vkb_dec *d, VkTensorCreateInfoARM *s); +void vkb_decfix_VkTensorCreateInfoARM(vkb_dec *d, VkTensorCreateInfoARM *s); +void vkb_enc_VkTensorDependencyInfoARM(vkb_enc *e, const VkTensorDependencyInfoARM *s); +void vkb_encfix_VkTensorDependencyInfoARM(vkb_enc *e, const VkTensorDependencyInfoARM *s, size_t raw); +void vkb_dec_VkTensorDependencyInfoARM(vkb_dec *d, VkTensorDependencyInfoARM *s); +void vkb_decfix_VkTensorDependencyInfoARM(vkb_dec *d, VkTensorDependencyInfoARM *s); +void vkb_enc_VkTensorDescriptionARM(vkb_enc *e, const VkTensorDescriptionARM *s); +void vkb_encfix_VkTensorDescriptionARM(vkb_enc *e, const VkTensorDescriptionARM *s, size_t raw); +void vkb_dec_VkTensorDescriptionARM(vkb_dec *d, VkTensorDescriptionARM *s); +void vkb_decfix_VkTensorDescriptionARM(vkb_dec *d, VkTensorDescriptionARM *s); +void vkb_enc_VkTensorFormatPropertiesARM(vkb_enc *e, const VkTensorFormatPropertiesARM *s); +void vkb_encfix_VkTensorFormatPropertiesARM(vkb_enc *e, const VkTensorFormatPropertiesARM *s, size_t raw); +void vkb_dec_VkTensorFormatPropertiesARM(vkb_dec *d, VkTensorFormatPropertiesARM *s); +void vkb_decfix_VkTensorFormatPropertiesARM(vkb_dec *d, VkTensorFormatPropertiesARM *s); +void vkb_enc_VkTensorMemoryBarrierARM(vkb_enc *e, const VkTensorMemoryBarrierARM *s); +void vkb_encfix_VkTensorMemoryBarrierARM(vkb_enc *e, const VkTensorMemoryBarrierARM *s, size_t raw); +void vkb_dec_VkTensorMemoryBarrierARM(vkb_dec *d, VkTensorMemoryBarrierARM *s); +void vkb_decfix_VkTensorMemoryBarrierARM(vkb_dec *d, VkTensorMemoryBarrierARM *s); +void vkb_enc_VkTensorMemoryRequirementsInfoARM(vkb_enc *e, const VkTensorMemoryRequirementsInfoARM *s); +void vkb_encfix_VkTensorMemoryRequirementsInfoARM(vkb_enc *e, const VkTensorMemoryRequirementsInfoARM *s, size_t raw); +void vkb_dec_VkTensorMemoryRequirementsInfoARM(vkb_dec *d, VkTensorMemoryRequirementsInfoARM *s); +void vkb_decfix_VkTensorMemoryRequirementsInfoARM(vkb_dec *d, VkTensorMemoryRequirementsInfoARM *s); +void vkb_enc_VkTensorViewCreateInfoARM(vkb_enc *e, const VkTensorViewCreateInfoARM *s); +void vkb_encfix_VkTensorViewCreateInfoARM(vkb_enc *e, const VkTensorViewCreateInfoARM *s, size_t raw); +void vkb_dec_VkTensorViewCreateInfoARM(vkb_dec *d, VkTensorViewCreateInfoARM *s); +void vkb_decfix_VkTensorViewCreateInfoARM(vkb_dec *d, VkTensorViewCreateInfoARM *s); +void vkb_enc_VkTimelineSemaphoreSubmitInfo(vkb_enc *e, const VkTimelineSemaphoreSubmitInfo *s); +void vkb_encfix_VkTimelineSemaphoreSubmitInfo(vkb_enc *e, const VkTimelineSemaphoreSubmitInfo *s, size_t raw); +void vkb_dec_VkTimelineSemaphoreSubmitInfo(vkb_dec *d, VkTimelineSemaphoreSubmitInfo *s); +void vkb_decfix_VkTimelineSemaphoreSubmitInfo(vkb_dec *d, VkTimelineSemaphoreSubmitInfo *s); +void vkb_enc_VkVertexInputAttributeDescription2EXT(vkb_enc *e, const VkVertexInputAttributeDescription2EXT *s); +void vkb_encfix_VkVertexInputAttributeDescription2EXT(vkb_enc *e, const VkVertexInputAttributeDescription2EXT *s, size_t raw); +void vkb_dec_VkVertexInputAttributeDescription2EXT(vkb_dec *d, VkVertexInputAttributeDescription2EXT *s); +void vkb_decfix_VkVertexInputAttributeDescription2EXT(vkb_dec *d, VkVertexInputAttributeDescription2EXT *s); +void vkb_enc_VkVertexInputBindingDescription2EXT(vkb_enc *e, const VkVertexInputBindingDescription2EXT *s); +void vkb_encfix_VkVertexInputBindingDescription2EXT(vkb_enc *e, const VkVertexInputBindingDescription2EXT *s, size_t raw); +void vkb_dec_VkVertexInputBindingDescription2EXT(vkb_dec *d, VkVertexInputBindingDescription2EXT *s); +void vkb_decfix_VkVertexInputBindingDescription2EXT(vkb_dec *d, VkVertexInputBindingDescription2EXT *s); +void vkb_enc_VkWriteDescriptorSet(vkb_enc *e, const VkWriteDescriptorSet *s); +void vkb_encfix_VkWriteDescriptorSet(vkb_enc *e, const VkWriteDescriptorSet *s, size_t raw); +void vkb_dec_VkWriteDescriptorSet(vkb_dec *d, VkWriteDescriptorSet *s); +void vkb_decfix_VkWriteDescriptorSet(vkb_dec *d, VkWriteDescriptorSet *s); +void vkb_enc_VkWriteDescriptorSetInlineUniformBlock(vkb_enc *e, const VkWriteDescriptorSetInlineUniformBlock *s); +void vkb_encfix_VkWriteDescriptorSetInlineUniformBlock(vkb_enc *e, const VkWriteDescriptorSetInlineUniformBlock *s, size_t raw); +void vkb_dec_VkWriteDescriptorSetInlineUniformBlock(vkb_dec *d, VkWriteDescriptorSetInlineUniformBlock *s); +void vkb_decfix_VkWriteDescriptorSetInlineUniformBlock(vkb_dec *d, VkWriteDescriptorSetInlineUniformBlock *s); +void vkb_enc_VkWriteDescriptorSetTensorARM(vkb_enc *e, const VkWriteDescriptorSetTensorARM *s); +void vkb_encfix_VkWriteDescriptorSetTensorARM(vkb_enc *e, const VkWriteDescriptorSetTensorARM *s, size_t raw); +void vkb_dec_VkWriteDescriptorSetTensorARM(vkb_dec *d, VkWriteDescriptorSetTensorARM *s); +void vkb_decfix_VkWriteDescriptorSetTensorARM(vkb_dec *d, VkWriteDescriptorSetTensorARM *s); + +/* Bridged extensions: name, 1 = device, client-implemented flag. */ +typedef struct vkb_ext_desc { const char *name; uint8_t device; uint8_t client; } vkb_ext_desc; +#define VKB_EXT_COUNT 225 +extern const vkb_ext_desc vkb_exts[VKB_EXT_COUNT]; + +/* Client: name -> entry point (canonical names and aliases). */ +typedef struct vkb_proc_desc { const char *name; PFN_vkVoidFunction fn; uint8_t level; const char *ext; uint32_t core; } vkb_proc_desc; +#define VKB_LEVEL_GLOBAL 0 +#define VKB_LEVEL_INSTANCE 1 +#define VKB_LEVEL_PHYSDEV 2 +#define VKB_LEVEL_DEVICE 3 +extern const vkb_proc_desc vkb_client_procs[]; +extern const size_t vkb_client_proc_count; + +#endif diff --git a/tools/vkbridge/common/gen/vkb_gen_client.c b/tools/vkbridge/common/gen/vkb_gen_client.c new file mode 100644 index 000000000..8a9468f68 --- /dev/null +++ b/tools/vkbridge/common/gen/vkb_gen_client.c @@ -0,0 +1,7019 @@ +/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */ + +#include "vkb_gen.h" +#include "vkb_client_gen.h" +#include "../vkb_wire.h" +#include "../../client/vkb_client.h" +#include + +VkResult vkb_wire_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkAllocateCommandBuffers, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pAllocateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCommandBufferAllocateInfo(e, &pAllocateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + { uint32_t n_ = pCommandBuffers ? (uint32_t)(pAllocateInfo->commandBufferCount) : 0; + vkb_enc_u8(e, pCommandBuffers != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = pCommandBuffers ? (uint32_t)(pAllocateInfo->commandBufferCount) : 0; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + pCommandBuffers[i_] = (VkCommandBuffer)vkb_wrap(VK_OBJECT_TYPE_COMMAND_BUFFER, (const void *)device, vkb_dec_u64(d)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkAllocateDescriptorSets, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pAllocateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDescriptorSetAllocateInfo(e, &pAllocateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + { uint32_t n_ = pDescriptorSets ? (uint32_t)(pAllocateInfo->descriptorSetCount) : 0; + vkb_enc_u8(e, pDescriptorSets != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = pDescriptorSets ? (uint32_t)(pAllocateInfo->descriptorSetCount) : 0; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pDescriptorSets[i_], sizeof(VkDescriptorSet)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkAllocateMemory, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pAllocateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMemoryAllocateInfo(e, &pAllocateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pMemory != NULL); + if (pMemory) vkb_enc_bytes(e, pMemory, sizeof(*pMemory)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pMemory) vkb_dec_raw_into(d, pMemory, sizeof(*pMemory)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkBeginCommandBuffer, vkb_table_of((const void *)commandBuffer)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pBeginInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCommandBufferBeginInfo(e, &pBeginInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkBindBufferMemory, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &memory, sizeof(memory)); + vkb_enc_bytes(e, &memoryOffset, sizeof(memoryOffset)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkBindBufferMemory2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &bindInfoCount, sizeof(bindInfoCount)); + if (pBindInfos) { + uint32_t n_ = (uint32_t)(bindInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBindBufferMemoryInfo(e, &pBindInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkBindImageMemory, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + vkb_enc_bytes(e, &memory, sizeof(memory)); + vkb_enc_bytes(e, &memoryOffset, sizeof(memoryOffset)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkBindImageMemory2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &bindInfoCount, sizeof(bindInfoCount)); + if (pBindInfos) { + uint32_t n_ = (uint32_t)(bindInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBindImageMemoryInfo(e, &pBindInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkBindTensorMemoryARM(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM* pBindInfos) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkBindTensorMemoryARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &bindInfoCount, sizeof(bindInfoCount)); + if (pBindInfos) { + uint32_t n_ = (uint32_t)(bindInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBindTensorMemoryInfoARM(e, &pBindInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkCmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginConditionalRenderingEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pConditionalRenderingBegin) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkConditionalRenderingBeginInfoEXT(e, &pConditionalRenderingBegin[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginCustomResolveEXT(VkCommandBuffer commandBuffer, const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginCustomResolveEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pBeginCustomResolveInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBeginCustomResolveInfoEXT(e, &pBeginCustomResolveInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginQuery); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &query, sizeof(query)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginQueryIndexedEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &query, sizeof(query)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + vkb_enc_bytes(e, &index, sizeof(index)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginRenderPass); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pRenderPassBegin) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderPassBeginInfo(e, &pRenderPassBegin[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &contents, sizeof(contents)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginRenderPass2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pRenderPassBegin) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderPassBeginInfo(e, &pRenderPassBegin[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (pSubpassBeginInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassBeginInfo(e, &pSubpassBeginInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginRendering); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pRenderingInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingInfo(e, &pRenderingInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBeginTransformFeedbackEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstCounterBuffer, sizeof(firstCounterBuffer)); + vkb_enc_bytes(e, &counterBufferCount, sizeof(counterBufferCount)); + if (pCounterBuffers) { + uint32_t n_ = (uint32_t)(counterBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pCounterBuffers, (size_t)n_ * sizeof(*pCounterBuffers)); + } else { + vkb_enc_u8(e, 0); + } + if (pCounterBufferOffsets) { + uint32_t n_ = (uint32_t)(counterBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pCounterBufferOffsets, (size_t)n_ * sizeof(*pCounterBufferOffsets)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindDescriptorSets); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &pipelineBindPoint, sizeof(pipelineBindPoint)); + vkb_enc_bytes(e, &layout, sizeof(layout)); + vkb_enc_bytes(e, &firstSet, sizeof(firstSet)); + vkb_enc_bytes(e, &descriptorSetCount, sizeof(descriptorSetCount)); + if (pDescriptorSets) { + uint32_t n_ = (uint32_t)(descriptorSetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pDescriptorSets, (size_t)n_ * sizeof(*pDescriptorSets)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &dynamicOffsetCount, sizeof(dynamicOffsetCount)); + if (pDynamicOffsets) { + uint32_t n_ = (uint32_t)(dynamicOffsetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pDynamicOffsets, (size_t)n_ * sizeof(*pDynamicOffsets)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindDescriptorSets2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pBindDescriptorSetsInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBindDescriptorSetsInfo(e, &pBindDescriptorSetsInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindIndexBuffer); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &indexType, sizeof(indexType)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindIndexBuffer2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &size, sizeof(size)); + vkb_enc_bytes(e, &indexType, sizeof(indexType)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindPipeline); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &pipelineBindPoint, sizeof(pipelineBindPoint)); + vkb_enc_bytes(e, &pipeline, sizeof(pipeline)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindTransformFeedbackBuffersEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstBinding, sizeof(firstBinding)); + vkb_enc_bytes(e, &bindingCount, sizeof(bindingCount)); + if (pBuffers) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pBuffers, (size_t)n_ * sizeof(*pBuffers)); + } else { + vkb_enc_u8(e, 0); + } + if (pOffsets) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pOffsets, (size_t)n_ * sizeof(*pOffsets)); + } else { + vkb_enc_u8(e, 0); + } + if (pSizes) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pSizes, (size_t)n_ * sizeof(*pSizes)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindVertexBuffers); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstBinding, sizeof(firstBinding)); + vkb_enc_bytes(e, &bindingCount, sizeof(bindingCount)); + if (pBuffers) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pBuffers, (size_t)n_ * sizeof(*pBuffers)); + } else { + vkb_enc_u8(e, 0); + } + if (pOffsets) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pOffsets, (size_t)n_ * sizeof(*pOffsets)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBindVertexBuffers2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstBinding, sizeof(firstBinding)); + vkb_enc_bytes(e, &bindingCount, sizeof(bindingCount)); + if (pBuffers) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pBuffers, (size_t)n_ * sizeof(*pBuffers)); + } else { + vkb_enc_u8(e, 0); + } + if (pOffsets) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pOffsets, (size_t)n_ * sizeof(*pOffsets)); + } else { + vkb_enc_u8(e, 0); + } + if (pSizes) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pSizes, (size_t)n_ * sizeof(*pSizes)); + } else { + vkb_enc_u8(e, 0); + } + if (pStrides) { + uint32_t n_ = (uint32_t)(bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pStrides, (size_t)n_ * sizeof(*pStrides)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBlitImage); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcImage, sizeof(srcImage)); + vkb_enc_bytes(e, &srcImageLayout, sizeof(srcImageLayout)); + vkb_enc_bytes(e, &dstImage, sizeof(dstImage)); + vkb_enc_bytes(e, &dstImageLayout, sizeof(dstImageLayout)); + vkb_enc_bytes(e, ®ionCount, sizeof(regionCount)); + if (pRegions) { + uint32_t n_ = (uint32_t)(regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRegions, (size_t)n_ * sizeof(*pRegions)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &filter, sizeof(filter)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdBlitImage2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pBlitImageInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBlitImageInfo2(e, &pBlitImageInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdClearAttachments); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &attachmentCount, sizeof(attachmentCount)); + if (pAttachments) { + uint32_t n_ = (uint32_t)(attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pAttachments, (size_t)n_ * sizeof(*pAttachments)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &rectCount, sizeof(rectCount)); + if (pRects) { + uint32_t n_ = (uint32_t)(rectCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRects, (size_t)n_ * sizeof(*pRects)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdClearColorImage); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &image, sizeof(image)); + vkb_enc_bytes(e, &imageLayout, sizeof(imageLayout)); + if (pColor) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pColor, (size_t)n_ * sizeof(*pColor)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &rangeCount, sizeof(rangeCount)); + if (pRanges) { + uint32_t n_ = (uint32_t)(rangeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRanges, (size_t)n_ * sizeof(*pRanges)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdClearDepthStencilImage); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &image, sizeof(image)); + vkb_enc_bytes(e, &imageLayout, sizeof(imageLayout)); + if (pDepthStencil) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pDepthStencil, (size_t)n_ * sizeof(*pDepthStencil)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &rangeCount, sizeof(rangeCount)); + if (pRanges) { + uint32_t n_ = (uint32_t)(rangeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRanges, (size_t)n_ * sizeof(*pRanges)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyBuffer); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcBuffer, sizeof(srcBuffer)); + vkb_enc_bytes(e, &dstBuffer, sizeof(dstBuffer)); + vkb_enc_bytes(e, ®ionCount, sizeof(regionCount)); + if (pRegions) { + uint32_t n_ = (uint32_t)(regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRegions, (size_t)n_ * sizeof(*pRegions)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyBuffer2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pCopyBufferInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCopyBufferInfo2(e, &pCopyBufferInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyBufferToImage); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcBuffer, sizeof(srcBuffer)); + vkb_enc_bytes(e, &dstImage, sizeof(dstImage)); + vkb_enc_bytes(e, &dstImageLayout, sizeof(dstImageLayout)); + vkb_enc_bytes(e, ®ionCount, sizeof(regionCount)); + if (pRegions) { + uint32_t n_ = (uint32_t)(regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRegions, (size_t)n_ * sizeof(*pRegions)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyBufferToImage2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pCopyBufferToImageInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCopyBufferToImageInfo2(e, &pCopyBufferToImageInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyImage); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcImage, sizeof(srcImage)); + vkb_enc_bytes(e, &srcImageLayout, sizeof(srcImageLayout)); + vkb_enc_bytes(e, &dstImage, sizeof(dstImage)); + vkb_enc_bytes(e, &dstImageLayout, sizeof(dstImageLayout)); + vkb_enc_bytes(e, ®ionCount, sizeof(regionCount)); + if (pRegions) { + uint32_t n_ = (uint32_t)(regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRegions, (size_t)n_ * sizeof(*pRegions)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyImage2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pCopyImageInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCopyImageInfo2(e, &pCopyImageInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyImageToBuffer); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcImage, sizeof(srcImage)); + vkb_enc_bytes(e, &srcImageLayout, sizeof(srcImageLayout)); + vkb_enc_bytes(e, &dstBuffer, sizeof(dstBuffer)); + vkb_enc_bytes(e, ®ionCount, sizeof(regionCount)); + if (pRegions) { + uint32_t n_ = (uint32_t)(regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRegions, (size_t)n_ * sizeof(*pRegions)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyImageToBuffer2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pCopyImageToBufferInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCopyImageToBufferInfo2(e, &pCopyImageToBufferInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyQueryPoolResults); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &firstQuery, sizeof(firstQuery)); + vkb_enc_bytes(e, &queryCount, sizeof(queryCount)); + vkb_enc_bytes(e, &dstBuffer, sizeof(dstBuffer)); + vkb_enc_bytes(e, &dstOffset, sizeof(dstOffset)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdCopyTensorARM(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM* pCopyTensorInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdCopyTensorARM); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pCopyTensorInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCopyTensorInfoARM(e, &pCopyTensorInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDispatch); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &groupCountX, sizeof(groupCountX)); + vkb_enc_bytes(e, &groupCountY, sizeof(groupCountY)); + vkb_enc_bytes(e, &groupCountZ, sizeof(groupCountZ)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDispatchBase); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &baseGroupX, sizeof(baseGroupX)); + vkb_enc_bytes(e, &baseGroupY, sizeof(baseGroupY)); + vkb_enc_bytes(e, &baseGroupZ, sizeof(baseGroupZ)); + vkb_enc_bytes(e, &groupCountX, sizeof(groupCountX)); + vkb_enc_bytes(e, &groupCountY, sizeof(groupCountY)); + vkb_enc_bytes(e, &groupCountZ, sizeof(groupCountZ)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDispatchIndirect); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDraw); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &vertexCount, sizeof(vertexCount)); + vkb_enc_bytes(e, &instanceCount, sizeof(instanceCount)); + vkb_enc_bytes(e, &firstVertex, sizeof(firstVertex)); + vkb_enc_bytes(e, &firstInstance, sizeof(firstInstance)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawIndexed); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &indexCount, sizeof(indexCount)); + vkb_enc_bytes(e, &instanceCount, sizeof(instanceCount)); + vkb_enc_bytes(e, &firstIndex, sizeof(firstIndex)); + vkb_enc_bytes(e, &vertexOffset, sizeof(vertexOffset)); + vkb_enc_bytes(e, &firstInstance, sizeof(firstInstance)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawIndexedIndirect); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &drawCount, sizeof(drawCount)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawIndexedIndirectCount); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &countBuffer, sizeof(countBuffer)); + vkb_enc_bytes(e, &countBufferOffset, sizeof(countBufferOffset)); + vkb_enc_bytes(e, &maxDrawCount, sizeof(maxDrawCount)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawIndirect); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &drawCount, sizeof(drawCount)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawIndirectByteCountEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &instanceCount, sizeof(instanceCount)); + vkb_enc_bytes(e, &firstInstance, sizeof(firstInstance)); + vkb_enc_bytes(e, &counterBuffer, sizeof(counterBuffer)); + vkb_enc_bytes(e, &counterBufferOffset, sizeof(counterBufferOffset)); + vkb_enc_bytes(e, &counterOffset, sizeof(counterOffset)); + vkb_enc_bytes(e, &vertexStride, sizeof(vertexStride)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawIndirectCount); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &countBuffer, sizeof(countBuffer)); + vkb_enc_bytes(e, &countBufferOffset, sizeof(countBufferOffset)); + vkb_enc_bytes(e, &maxDrawCount, sizeof(maxDrawCount)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawMultiEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &drawCount, sizeof(drawCount)); + if (pVertexInfo) { + uint32_t n_ = (uint32_t)(drawCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pVertexInfo, (size_t)n_ * sizeof(*pVertexInfo)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &instanceCount, sizeof(instanceCount)); + vkb_enc_bytes(e, &firstInstance, sizeof(firstInstance)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdDrawMultiIndexedEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &drawCount, sizeof(drawCount)); + if (pIndexInfo) { + uint32_t n_ = (uint32_t)(drawCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pIndexInfo, (size_t)n_ * sizeof(*pIndexInfo)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &instanceCount, sizeof(instanceCount)); + vkb_enc_bytes(e, &firstInstance, sizeof(firstInstance)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + if (pVertexOffset) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pVertexOffset, (size_t)n_ * sizeof(*pVertexOffset)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndConditionalRenderingEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndQuery); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &query, sizeof(query)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndQueryIndexedEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &query, sizeof(query)); + vkb_enc_bytes(e, &index, sizeof(index)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndRenderPass(VkCommandBuffer commandBuffer) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndRenderPass); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndRenderPass2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pSubpassEndInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassEndInfo(e, &pSubpassEndInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndRendering(VkCommandBuffer commandBuffer) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndRendering); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndRendering2KHR(VkCommandBuffer commandBuffer, const VkRenderingEndInfoKHR* pRenderingEndInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndRendering2KHR); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pRenderingEndInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingEndInfoKHR(e, &pRenderingEndInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdEndTransformFeedbackEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstCounterBuffer, sizeof(firstCounterBuffer)); + vkb_enc_bytes(e, &counterBufferCount, sizeof(counterBufferCount)); + if (pCounterBuffers) { + uint32_t n_ = (uint32_t)(counterBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pCounterBuffers, (size_t)n_ * sizeof(*pCounterBuffers)); + } else { + vkb_enc_u8(e, 0); + } + if (pCounterBufferOffsets) { + uint32_t n_ = (uint32_t)(counterBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pCounterBufferOffsets, (size_t)n_ * sizeof(*pCounterBufferOffsets)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdExecuteCommands); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &commandBufferCount, sizeof(commandBufferCount)); + if (pCommandBuffers) { + uint32_t n_ = (uint32_t)(commandBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_u64(e, vkb_remote((const void *)pCommandBuffers[i_])); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdFillBuffer); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &dstBuffer, sizeof(dstBuffer)); + vkb_enc_bytes(e, &dstOffset, sizeof(dstOffset)); + vkb_enc_bytes(e, &size, sizeof(size)); + vkb_enc_bytes(e, &data, sizeof(data)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdNextSubpass); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &contents, sizeof(contents)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdNextSubpass2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pSubpassBeginInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassBeginInfo(e, &pSubpassBeginInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (pSubpassEndInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassEndInfo(e, &pSubpassEndInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdPipelineBarrier); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcStageMask, sizeof(srcStageMask)); + vkb_enc_bytes(e, &dstStageMask, sizeof(dstStageMask)); + vkb_enc_bytes(e, &dependencyFlags, sizeof(dependencyFlags)); + vkb_enc_bytes(e, &memoryBarrierCount, sizeof(memoryBarrierCount)); + if (pMemoryBarriers) { + uint32_t n_ = (uint32_t)(memoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMemoryBarrier(e, &pMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &bufferMemoryBarrierCount, sizeof(bufferMemoryBarrierCount)); + if (pBufferMemoryBarriers) { + uint32_t n_ = (uint32_t)(bufferMemoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferMemoryBarrier(e, &pBufferMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &imageMemoryBarrierCount, sizeof(imageMemoryBarrierCount)); + if (pImageMemoryBarriers) { + uint32_t n_ = (uint32_t)(imageMemoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageMemoryBarrier(e, &pImageMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdPipelineBarrier2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pDependencyInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDependencyInfo(e, &pDependencyInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdPushConstants); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &layout, sizeof(layout)); + vkb_enc_bytes(e, &stageFlags, sizeof(stageFlags)); + vkb_enc_bytes(e, &offset, sizeof(offset)); + vkb_enc_bytes(e, &size, sizeof(size)); + vkb_enc_blob(e, pValues ? (const void *)pValues : NULL, pValues ? (size_t)(size) : 0); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdPushConstants2(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdPushConstants2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pPushConstantsInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPushConstantsInfo(e, &pPushConstantsInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdPushDescriptorSet); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &pipelineBindPoint, sizeof(pipelineBindPoint)); + vkb_enc_bytes(e, &layout, sizeof(layout)); + vkb_enc_bytes(e, &set, sizeof(set)); + vkb_enc_bytes(e, &descriptorWriteCount, sizeof(descriptorWriteCount)); + if (pDescriptorWrites) { + uint32_t n_ = (uint32_t)(descriptorWriteCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkWriteDescriptorSet(e, &pDescriptorWrites[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdPushDescriptorSet2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pPushDescriptorSetInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPushDescriptorSetInfo(e, &pPushDescriptorSetInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdResetEvent); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &event, sizeof(event)); + vkb_enc_bytes(e, &stageMask, sizeof(stageMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdResetEvent2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &event, sizeof(event)); + vkb_enc_bytes(e, &stageMask, sizeof(stageMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdResetQueryPool); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &firstQuery, sizeof(firstQuery)); + vkb_enc_bytes(e, &queryCount, sizeof(queryCount)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdResolveImage); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &srcImage, sizeof(srcImage)); + vkb_enc_bytes(e, &srcImageLayout, sizeof(srcImageLayout)); + vkb_enc_bytes(e, &dstImage, sizeof(dstImage)); + vkb_enc_bytes(e, &dstImageLayout, sizeof(dstImageLayout)); + vkb_enc_bytes(e, ®ionCount, sizeof(regionCount)); + if (pRegions) { + uint32_t n_ = (uint32_t)(regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pRegions, (size_t)n_ * sizeof(*pRegions)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdResolveImage2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pResolveImageInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkResolveImageInfo2(e, &pResolveImageInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetAlphaToCoverageEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &alphaToCoverageEnable, sizeof(alphaToCoverageEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetAlphaToOneEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &alphaToOneEnable, sizeof(alphaToOneEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetAttachmentFeedbackLoopEnableEXT(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetAttachmentFeedbackLoopEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &aspectMask, sizeof(aspectMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetBlendConstants); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_raw(e, blendConstants, sizeof(float) * 4); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetColorBlendAdvancedEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetColorBlendAdvancedEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstAttachment, sizeof(firstAttachment)); + vkb_enc_bytes(e, &attachmentCount, sizeof(attachmentCount)); + if (pColorBlendAdvanced) { + uint32_t n_ = (uint32_t)(attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pColorBlendAdvanced, (size_t)n_ * sizeof(*pColorBlendAdvanced)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetColorBlendEnableEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetColorBlendEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstAttachment, sizeof(firstAttachment)); + vkb_enc_bytes(e, &attachmentCount, sizeof(attachmentCount)); + if (pColorBlendEnables) { + uint32_t n_ = (uint32_t)(attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pColorBlendEnables, (size_t)n_ * sizeof(*pColorBlendEnables)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetColorBlendEquationEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetColorBlendEquationEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstAttachment, sizeof(firstAttachment)); + vkb_enc_bytes(e, &attachmentCount, sizeof(attachmentCount)); + if (pColorBlendEquations) { + uint32_t n_ = (uint32_t)(attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pColorBlendEquations, (size_t)n_ * sizeof(*pColorBlendEquations)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetColorWriteEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &attachmentCount, sizeof(attachmentCount)); + if (pColorWriteEnables) { + uint32_t n_ = (uint32_t)(attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pColorWriteEnables, (size_t)n_ * sizeof(*pColorWriteEnables)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetColorWriteMaskEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetColorWriteMaskEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstAttachment, sizeof(firstAttachment)); + vkb_enc_bytes(e, &attachmentCount, sizeof(attachmentCount)); + if (pColorWriteMasks) { + uint32_t n_ = (uint32_t)(attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pColorWriteMasks, (size_t)n_ * sizeof(*pColorWriteMasks)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetConservativeRasterizationModeEXT(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetConservativeRasterizationModeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &conservativeRasterizationMode, sizeof(conservativeRasterizationMode)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetCullMode); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &cullMode, sizeof(cullMode)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthBias); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthBiasConstantFactor, sizeof(depthBiasConstantFactor)); + vkb_enc_bytes(e, &depthBiasClamp, sizeof(depthBiasClamp)); + vkb_enc_bytes(e, &depthBiasSlopeFactor, sizeof(depthBiasSlopeFactor)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthBias2EXT(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT* pDepthBiasInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthBias2EXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pDepthBiasInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDepthBiasInfoEXT(e, &pDepthBiasInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthBiasEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthBiasEnable, sizeof(depthBiasEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthBounds); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &minDepthBounds, sizeof(minDepthBounds)); + vkb_enc_bytes(e, &maxDepthBounds, sizeof(maxDepthBounds)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthBoundsTestEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthBoundsTestEnable, sizeof(depthBoundsTestEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthClampEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthClampEnable, sizeof(depthClampEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthClampRangeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthClampMode, sizeof(depthClampMode)); + if (pDepthClampRange) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pDepthClampRange, (size_t)n_ * sizeof(*pDepthClampRange)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthClipEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthClipEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthClipEnable, sizeof(depthClipEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthClipNegativeOneToOneEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &negativeOneToOne, sizeof(negativeOneToOne)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthCompareOp); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthCompareOp, sizeof(depthCompareOp)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthTestEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthTestEnable, sizeof(depthTestEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDepthWriteEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &depthWriteEnable, sizeof(depthWriteEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDeviceMask); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &deviceMask, sizeof(deviceMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDiscardRectangleEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstDiscardRectangle, sizeof(firstDiscardRectangle)); + vkb_enc_bytes(e, &discardRectangleCount, sizeof(discardRectangleCount)); + if (pDiscardRectangles) { + uint32_t n_ = (uint32_t)(discardRectangleCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pDiscardRectangles, (size_t)n_ * sizeof(*pDiscardRectangles)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDiscardRectangleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDiscardRectangleEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &discardRectangleEnable, sizeof(discardRectangleEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetDiscardRectangleModeEXT(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetDiscardRectangleModeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &discardRectangleMode, sizeof(discardRectangleMode)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetEvent); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &event, sizeof(event)); + vkb_enc_bytes(e, &stageMask, sizeof(stageMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetEvent2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &event, sizeof(event)); + if (pDependencyInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDependencyInfo(e, &pDependencyInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetExtraPrimitiveOverestimationSizeEXT(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetExtraPrimitiveOverestimationSizeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &extraPrimitiveOverestimationSize, sizeof(extraPrimitiveOverestimationSize)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetFragmentShadingRateKHR(VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetFragmentShadingRateKHR); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pFragmentSize) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pFragmentSize, (size_t)n_ * sizeof(*pFragmentSize)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_raw(e, combinerOps, sizeof(VkFragmentShadingRateCombinerOpKHR) * 2); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetFrontFace); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &frontFace, sizeof(frontFace)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetLineRasterizationModeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &lineRasterizationMode, sizeof(lineRasterizationMode)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetLineStipple); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &lineStippleFactor, sizeof(lineStippleFactor)); + vkb_enc_bytes(e, &lineStipplePattern, sizeof(lineStipplePattern)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetLineStippleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetLineStippleEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &stippledLineEnable, sizeof(stippledLineEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetLineWidth); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &lineWidth, sizeof(lineWidth)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetLogicOpEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &logicOp, sizeof(logicOp)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetLogicOpEnableEXT(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetLogicOpEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &logicOpEnable, sizeof(logicOpEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetPatchControlPointsEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &patchControlPoints, sizeof(patchControlPoints)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetPolygonModeEXT(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetPolygonModeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &polygonMode, sizeof(polygonMode)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetPrimitiveRestartEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &primitiveRestartEnable, sizeof(primitiveRestartEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetPrimitiveTopology); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &primitiveTopology, sizeof(primitiveTopology)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetProvokingVertexModeEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &provokingVertexMode, sizeof(provokingVertexMode)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetRasterizationSamplesEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &rasterizationSamples, sizeof(rasterizationSamples)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer, uint32_t rasterizationStream) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetRasterizationStreamEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &rasterizationStream, sizeof(rasterizationStream)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetRasterizerDiscardEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &rasterizerDiscardEnable, sizeof(rasterizerDiscardEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetRenderingAttachmentLocations); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pLocationInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingAttachmentLocationInfo(e, &pLocationInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetRenderingInputAttachmentIndices); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pInputAttachmentIndexInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingInputAttachmentIndexInfo(e, &pInputAttachmentIndexInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetSampleLocationsEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (pSampleLocationsInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSampleLocationsInfoEXT(e, &pSampleLocationsInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetSampleLocationsEnableEXT(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetSampleLocationsEnableEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &sampleLocationsEnable, sizeof(sampleLocationsEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask* pSampleMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetSampleMaskEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &samples, sizeof(samples)); + if (pSampleMask) { + uint32_t n_ = (uint32_t)((((uint32_t)samples + 31) / 32)); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pSampleMask, (size_t)n_ * sizeof(*pSampleMask)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetScissor); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstScissor, sizeof(firstScissor)); + vkb_enc_bytes(e, &scissorCount, sizeof(scissorCount)); + if (pScissors) { + uint32_t n_ = (uint32_t)(scissorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pScissors, (size_t)n_ * sizeof(*pScissors)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetScissorWithCount); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &scissorCount, sizeof(scissorCount)); + if (pScissors) { + uint32_t n_ = (uint32_t)(scissorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pScissors, (size_t)n_ * sizeof(*pScissors)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetStencilCompareMask); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &faceMask, sizeof(faceMask)); + vkb_enc_bytes(e, &compareMask, sizeof(compareMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetStencilOp); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &faceMask, sizeof(faceMask)); + vkb_enc_bytes(e, &failOp, sizeof(failOp)); + vkb_enc_bytes(e, &passOp, sizeof(passOp)); + vkb_enc_bytes(e, &depthFailOp, sizeof(depthFailOp)); + vkb_enc_bytes(e, &compareOp, sizeof(compareOp)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetStencilReference); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &faceMask, sizeof(faceMask)); + vkb_enc_bytes(e, &reference, sizeof(reference)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetStencilTestEnable); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &stencilTestEnable, sizeof(stencilTestEnable)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetStencilWriteMask); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &faceMask, sizeof(faceMask)); + vkb_enc_bytes(e, &writeMask, sizeof(writeMask)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetTessellationDomainOriginEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &domainOrigin, sizeof(domainOrigin)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetVertexInputEXT); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &vertexBindingDescriptionCount, sizeof(vertexBindingDescriptionCount)); + if (pVertexBindingDescriptions) { + uint32_t n_ = (uint32_t)(vertexBindingDescriptionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkVertexInputBindingDescription2EXT(e, &pVertexBindingDescriptions[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &vertexAttributeDescriptionCount, sizeof(vertexAttributeDescriptionCount)); + if (pVertexAttributeDescriptions) { + uint32_t n_ = (uint32_t)(vertexAttributeDescriptionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkVertexInputAttributeDescription2EXT(e, &pVertexAttributeDescriptions[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetViewport); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &firstViewport, sizeof(firstViewport)); + vkb_enc_bytes(e, &viewportCount, sizeof(viewportCount)); + if (pViewports) { + uint32_t n_ = (uint32_t)(viewportCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pViewports, (size_t)n_ * sizeof(*pViewports)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdSetViewportWithCount); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &viewportCount, sizeof(viewportCount)); + if (pViewports) { + uint32_t n_ = (uint32_t)(viewportCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pViewports, (size_t)n_ * sizeof(*pViewports)); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdUpdateBuffer); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &dstBuffer, sizeof(dstBuffer)); + vkb_enc_bytes(e, &dstOffset, sizeof(dstOffset)); + vkb_enc_bytes(e, &dataSize, sizeof(dataSize)); + vkb_enc_blob(e, pData ? (const void *)pData : NULL, pData ? (size_t)(dataSize) : 0); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdWaitEvents); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &eventCount, sizeof(eventCount)); + if (pEvents) { + uint32_t n_ = (uint32_t)(eventCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pEvents, (size_t)n_ * sizeof(*pEvents)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &srcStageMask, sizeof(srcStageMask)); + vkb_enc_bytes(e, &dstStageMask, sizeof(dstStageMask)); + vkb_enc_bytes(e, &memoryBarrierCount, sizeof(memoryBarrierCount)); + if (pMemoryBarriers) { + uint32_t n_ = (uint32_t)(memoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMemoryBarrier(e, &pMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &bufferMemoryBarrierCount, sizeof(bufferMemoryBarrierCount)); + if (pBufferMemoryBarriers) { + uint32_t n_ = (uint32_t)(bufferMemoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferMemoryBarrier(e, &pBufferMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &imageMemoryBarrierCount, sizeof(imageMemoryBarrierCount)); + if (pImageMemoryBarriers) { + uint32_t n_ = (uint32_t)(imageMemoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageMemoryBarrier(e, &pImageMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdWaitEvents2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &eventCount, sizeof(eventCount)); + if (pEvents) { + uint32_t n_ = (uint32_t)(eventCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pEvents, (size_t)n_ * sizeof(*pEvents)); + } else { + vkb_enc_u8(e, 0); + } + if (pDependencyInfos) { + uint32_t n_ = (uint32_t)(eventCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDependencyInfo(e, &pDependencyInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdWriteTimestamp); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &pipelineStage, sizeof(pipelineStage)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &query, sizeof(query)); + vkb_cmd_record_end(commandBuffer); +} + +void vkb_wire_vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query) +{ + vkb_enc *e = vkb_cmd_record_begin(commandBuffer, VKB_CMD_vkCmdWriteTimestamp2); + if (!e) return; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &stage, sizeof(stage)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &query, sizeof(query)); + vkb_cmd_record_end(commandBuffer); +} + +VkResult vkb_wire_vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateBuffer, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pBuffer != NULL); + if (pBuffer) vkb_enc_bytes(e, pBuffer, sizeof(*pBuffer)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pBuffer) vkb_dec_raw_into(d, pBuffer, sizeof(*pBuffer)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateBufferView, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferViewCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pView != NULL); + if (pView) vkb_enc_bytes(e, pView, sizeof(*pView)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pView) vkb_dec_raw_into(d, pView, sizeof(*pView)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateCommandPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCommandPoolCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pCommandPool != NULL); + if (pCommandPool) vkb_enc_bytes(e, pCommandPool, sizeof(*pCommandPool)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pCommandPool) vkb_dec_raw_into(d, pCommandPool, sizeof(*pCommandPool)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateComputePipelines, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &pipelineCache, sizeof(pipelineCache)); + vkb_enc_bytes(e, &createInfoCount, sizeof(createInfoCount)); + if (pCreateInfos) { + uint32_t n_ = (uint32_t)(createInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkComputePipelineCreateInfo(e, &pCreateInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + { uint32_t n_ = pPipelines ? (uint32_t)(createInfoCount) : 0; + vkb_enc_u8(e, pPipelines != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = pPipelines ? (uint32_t)(createInfoCount) : 0; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pPipelines[i_], sizeof(VkPipeline)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateDescriptorPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDescriptorPoolCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pDescriptorPool != NULL); + if (pDescriptorPool) vkb_enc_bytes(e, pDescriptorPool, sizeof(*pDescriptorPool)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pDescriptorPool) vkb_dec_raw_into(d, pDescriptorPool, sizeof(*pDescriptorPool)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateDescriptorSetLayout, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDescriptorSetLayoutCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pSetLayout != NULL); + if (pSetLayout) vkb_enc_bytes(e, pSetLayout, sizeof(*pSetLayout)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pSetLayout) vkb_dec_raw_into(d, pSetLayout, sizeof(*pSetLayout)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateDescriptorUpdateTemplate, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDescriptorUpdateTemplateCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pDescriptorUpdateTemplate != NULL); + if (pDescriptorUpdateTemplate) vkb_enc_bytes(e, pDescriptorUpdateTemplate, sizeof(*pDescriptorUpdateTemplate)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pDescriptorUpdateTemplate) vkb_dec_raw_into(d, pDescriptorUpdateTemplate, sizeof(*pDescriptorUpdateTemplate)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateDevice, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pDevice != NULL); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + VkDevice h_ = (VkDevice)vkb_wrap(VK_OBJECT_TYPE_DEVICE, (const void *)physicalDevice, vkb_dec_u64(d)); + if (pDevice) *pDevice = h_; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateEvent, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkEventCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pEvent != NULL); + if (pEvent) vkb_enc_bytes(e, pEvent, sizeof(*pEvent)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pEvent) vkb_dec_raw_into(d, pEvent, sizeof(*pEvent)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateFence, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkFenceCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pFence != NULL); + if (pFence) vkb_enc_bytes(e, pFence, sizeof(*pFence)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pFence) vkb_dec_raw_into(d, pFence, sizeof(*pFence)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateFramebuffer, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkFramebufferCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pFramebuffer != NULL); + if (pFramebuffer) vkb_enc_bytes(e, pFramebuffer, sizeof(*pFramebuffer)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pFramebuffer) vkb_dec_raw_into(d, pFramebuffer, sizeof(*pFramebuffer)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateGraphicsPipelines, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &pipelineCache, sizeof(pipelineCache)); + vkb_enc_bytes(e, &createInfoCount, sizeof(createInfoCount)); + if (pCreateInfos) { + uint32_t n_ = (uint32_t)(createInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkGraphicsPipelineCreateInfo(e, &pCreateInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + { uint32_t n_ = pPipelines ? (uint32_t)(createInfoCount) : 0; + vkb_enc_u8(e, pPipelines != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = pPipelines ? (uint32_t)(createInfoCount) : 0; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pPipelines[i_], sizeof(VkPipeline)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateImage, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pImage != NULL); + if (pImage) vkb_enc_bytes(e, pImage, sizeof(*pImage)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pImage) vkb_dec_raw_into(d, pImage, sizeof(*pImage)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateImageView, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageViewCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pView != NULL); + if (pView) vkb_enc_bytes(e, pView, sizeof(*pView)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pView) vkb_dec_raw_into(d, pView, sizeof(*pView)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateInstance, 0); + vkb_enc *e = &call_.e; + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkInstanceCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pInstance != NULL); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + VkInstance h_ = (VkInstance)vkb_wrap(VK_OBJECT_TYPE_INSTANCE, (const void *)NULL, vkb_dec_u64(d)); + if (pInstance) *pInstance = h_; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreatePipelineCache, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineCacheCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pPipelineCache != NULL); + if (pPipelineCache) vkb_enc_bytes(e, pPipelineCache, sizeof(*pPipelineCache)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPipelineCache) vkb_dec_raw_into(d, pPipelineCache, sizeof(*pPipelineCache)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreatePipelineLayout, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineLayoutCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pPipelineLayout != NULL); + if (pPipelineLayout) vkb_enc_bytes(e, pPipelineLayout, sizeof(*pPipelineLayout)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPipelineLayout) vkb_dec_raw_into(d, pPipelineLayout, sizeof(*pPipelineLayout)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateQueryPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkQueryPoolCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pQueryPool != NULL); + if (pQueryPool) vkb_enc_bytes(e, pQueryPool, sizeof(*pQueryPool)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pQueryPool) vkb_dec_raw_into(d, pQueryPool, sizeof(*pQueryPool)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateRenderPass, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderPassCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pRenderPass != NULL); + if (pRenderPass) vkb_enc_bytes(e, pRenderPass, sizeof(*pRenderPass)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pRenderPass) vkb_dec_raw_into(d, pRenderPass, sizeof(*pRenderPass)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateRenderPass2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderPassCreateInfo2(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pRenderPass != NULL); + if (pRenderPass) vkb_enc_bytes(e, pRenderPass, sizeof(*pRenderPass)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pRenderPass) vkb_dec_raw_into(d, pRenderPass, sizeof(*pRenderPass)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateSampler, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSamplerCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pSampler != NULL); + if (pSampler) vkb_enc_bytes(e, pSampler, sizeof(*pSampler)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pSampler) vkb_dec_raw_into(d, pSampler, sizeof(*pSampler)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateSamplerYcbcrConversion(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateSamplerYcbcrConversion, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSamplerYcbcrConversionCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pYcbcrConversion != NULL); + if (pYcbcrConversion) vkb_enc_bytes(e, pYcbcrConversion, sizeof(*pYcbcrConversion)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pYcbcrConversion) vkb_dec_raw_into(d, pYcbcrConversion, sizeof(*pYcbcrConversion)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateSemaphore, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pSemaphore != NULL); + if (pSemaphore) vkb_enc_bytes(e, pSemaphore, sizeof(*pSemaphore)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pSemaphore) vkb_dec_raw_into(d, pSemaphore, sizeof(*pSemaphore)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateShaderModule, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkShaderModuleCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pShaderModule != NULL); + if (pShaderModule) vkb_enc_bytes(e, pShaderModule, sizeof(*pShaderModule)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pShaderModule) vkb_dec_raw_into(d, pShaderModule, sizeof(*pShaderModule)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateTensorARM(VkDevice device, const VkTensorCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorARM* pTensor) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateTensorARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorCreateInfoARM(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pTensor != NULL); + if (pTensor) vkb_enc_bytes(e, pTensor, sizeof(*pTensor)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pTensor) vkb_dec_raw_into(d, pTensor, sizeof(*pTensor)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkCreateTensorViewARM(VkDevice device, const VkTensorViewCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorViewARM* pView) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkCreateTensorViewARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorViewCreateInfoARM(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + (void)pAllocator; + vkb_enc_u8(e, pView != NULL); + if (pView) vkb_enc_bytes(e, pView, sizeof(*pView)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pView) vkb_dec_raw_into(d, pView, sizeof(*pView)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyBuffer, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyBufferView, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &bufferView, sizeof(bufferView)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyCommandPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &commandPool, sizeof(commandPool)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyDescriptorPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &descriptorPool, sizeof(descriptorPool)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyDescriptorSetLayout, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &descriptorSetLayout, sizeof(descriptorSetLayout)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyDescriptorUpdateTemplate(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyDescriptorUpdateTemplate, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &descriptorUpdateTemplate, sizeof(descriptorUpdateTemplate)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyDevice, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyEvent, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &event, sizeof(event)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyFence, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &fence, sizeof(fence)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyFramebuffer, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &framebuffer, sizeof(framebuffer)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyImage, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyImageView, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &imageView, sizeof(imageView)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyInstance, vkb_table_of((const void *)instance)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)instance)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyPipeline, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &pipeline, sizeof(pipeline)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyPipelineCache, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &pipelineCache, sizeof(pipelineCache)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyPipelineLayout, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &pipelineLayout, sizeof(pipelineLayout)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyQueryPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyRenderPass, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &renderPass, sizeof(renderPass)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroySampler, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &sampler, sizeof(sampler)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroySamplerYcbcrConversion, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &ycbcrConversion, sizeof(ycbcrConversion)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroySemaphore, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &semaphore, sizeof(semaphore)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyShaderModule, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &shaderModule, sizeof(shaderModule)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyTensorARM(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyTensorARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &tensor, sizeof(tensor)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkDestroyTensorViewARM(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDestroyTensorViewARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &tensorView, sizeof(tensorView)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +VkResult vkb_wire_vkDeviceWaitIdle(VkDevice device) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkDeviceWaitIdle, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEndCommandBuffer(VkCommandBuffer commandBuffer) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEndCommandBuffer, vkb_table_of((const void *)commandBuffer)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumerateDeviceExtensionProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_str(e, pLayerName ? pLayerName : NULL); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_bytes(e, pPropertyCount, sizeof(*pPropertyCount)); + { uint32_t n_ = pProperties ? (uint32_t)((pPropertyCount ? *pPropertyCount : 0)) : 0; + vkb_enc_u8(e, pProperties != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPropertyCount) vkb_dec_raw_into(d, pPropertyCount, sizeof(*pPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pProperties && pPropertyCount) ? *pPropertyCount : 0; + if (pPropertyCount) *pPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pProperties[i_], sizeof(VkExtensionProperties)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumerateInstanceExtensionProperties, 0); + vkb_enc *e = &call_.e; + vkb_enc_str(e, pLayerName ? pLayerName : NULL); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_bytes(e, pPropertyCount, sizeof(*pPropertyCount)); + { uint32_t n_ = pProperties ? (uint32_t)((pPropertyCount ? *pPropertyCount : 0)) : 0; + vkb_enc_u8(e, pProperties != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPropertyCount) vkb_dec_raw_into(d, pPropertyCount, sizeof(*pPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pProperties && pPropertyCount) ? *pPropertyCount : 0; + if (pPropertyCount) *pPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pProperties[i_], sizeof(VkExtensionProperties)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumerateInstanceLayerProperties, 0); + vkb_enc *e = &call_.e; + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_bytes(e, pPropertyCount, sizeof(*pPropertyCount)); + { uint32_t n_ = pProperties ? (uint32_t)((pPropertyCount ? *pPropertyCount : 0)) : 0; + vkb_enc_u8(e, pProperties != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPropertyCount) vkb_dec_raw_into(d, pPropertyCount, sizeof(*pPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pProperties && pPropertyCount) ? *pPropertyCount : 0; + if (pPropertyCount) *pPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pProperties[i_], sizeof(VkLayerProperties)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumerateInstanceVersion(uint32_t* pApiVersion) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumerateInstanceVersion, 0); + vkb_enc *e = &call_.e; + vkb_enc_u8(e, pApiVersion != NULL); + if (pApiVersion) vkb_enc_bytes(e, pApiVersion, sizeof(*pApiVersion)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pApiVersion) vkb_dec_raw_into(d, pApiVersion, sizeof(*pApiVersion)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumeratePhysicalDeviceGroups, vkb_table_of((const void *)instance)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)instance)); + vkb_enc_u8(e, pPhysicalDeviceGroupCount != NULL); + if (pPhysicalDeviceGroupCount) vkb_enc_bytes(e, pPhysicalDeviceGroupCount, sizeof(*pPhysicalDeviceGroupCount)); + { uint32_t n_ = pPhysicalDeviceGroupProperties ? (uint32_t)((pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0)) : 0; + vkb_enc_u8(e, pPhysicalDeviceGroupProperties != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pPhysicalDeviceGroupProperties && i_ < n_; i_++) vkb_enc_out_template(e, &pPhysicalDeviceGroupProperties[i_], sizeof(VkPhysicalDeviceGroupProperties)); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPhysicalDeviceGroupCount) vkb_dec_raw_into(d, pPhysicalDeviceGroupCount, sizeof(*pPhysicalDeviceGroupCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pPhysicalDeviceGroupProperties && pPhysicalDeviceGroupCount) ? *pPhysicalDeviceGroupCount : 0; + if (pPhysicalDeviceGroupCount) *pPhysicalDeviceGroupCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pPhysicalDeviceGroupProperties[i_], sizeof(VkPhysicalDeviceGroupProperties)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterARM* pCounters, VkPerformanceCounterDescriptionARM* pCounterDescriptions) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_bytes(e, &queueFamilyIndex, sizeof(queueFamilyIndex)); + vkb_enc_u8(e, pCounterCount != NULL); + if (pCounterCount) vkb_enc_bytes(e, pCounterCount, sizeof(*pCounterCount)); + { uint32_t n_ = pCounters ? (uint32_t)((pCounterCount ? *pCounterCount : 0)) : 0; + vkb_enc_u8(e, pCounters != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pCounters && i_ < n_; i_++) vkb_enc_out_template(e, &pCounters[i_], sizeof(VkPerformanceCounterARM)); + } + { uint32_t n_ = pCounterDescriptions ? (uint32_t)((pCounterCount ? *pCounterCount : 0)) : 0; + vkb_enc_u8(e, pCounterDescriptions != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pCounterDescriptions && i_ < n_; i_++) vkb_enc_out_template(e, &pCounterDescriptions[i_], sizeof(VkPerformanceCounterDescriptionARM)); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pCounterCount) vkb_dec_raw_into(d, pCounterCount, sizeof(*pCounterCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pCounters && pCounterCount) ? *pCounterCount : 0; + if (pCounterCount) *pCounterCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pCounters[i_], sizeof(VkPerformanceCounterARM)); + } + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pCounterDescriptions && pCounterCount) ? *pCounterCount : 0; + if (pCounterCount) *pCounterCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pCounterDescriptions[i_], sizeof(VkPerformanceCounterDescriptionARM)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkEnumeratePhysicalDevices, vkb_table_of((const void *)instance)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)instance)); + vkb_enc_u8(e, pPhysicalDeviceCount != NULL); + if (pPhysicalDeviceCount) vkb_enc_bytes(e, pPhysicalDeviceCount, sizeof(*pPhysicalDeviceCount)); + { uint32_t n_ = pPhysicalDevices ? (uint32_t)((pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0)) : 0; + vkb_enc_u8(e, pPhysicalDevices != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPhysicalDeviceCount) vkb_dec_raw_into(d, pPhysicalDeviceCount, sizeof(*pPhysicalDeviceCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pPhysicalDevices && pPhysicalDeviceCount) ? *pPhysicalDeviceCount : 0; + if (pPhysicalDeviceCount) *pPhysicalDeviceCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + pPhysicalDevices[i_] = (VkPhysicalDevice)vkb_wrap(VK_OBJECT_TYPE_PHYSICAL_DEVICE, (const void *)instance, vkb_dec_u64(d)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkFlushMappedMemoryRanges, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &memoryRangeCount, sizeof(memoryRangeCount)); + if (pMemoryRanges) { + uint32_t n_ = (uint32_t)(memoryRangeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMappedMemoryRange(e, &pMemoryRanges[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkFreeCommandBuffers, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &commandPool, sizeof(commandPool)); + vkb_enc_bytes(e, &commandBufferCount, sizeof(commandBufferCount)); + if (pCommandBuffers) { + uint32_t n_ = (uint32_t)(commandBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_u64(e, vkb_remote((const void *)pCommandBuffers[i_])); + } else { + vkb_enc_u8(e, 0); + } + vkb_call_exec_async(&call_); +} + +VkResult vkb_wire_vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkFreeDescriptorSets, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &descriptorPool, sizeof(descriptorPool)); + vkb_enc_bytes(e, &descriptorSetCount, sizeof(descriptorSetCount)); + if (pDescriptorSets) { + uint32_t n_ = (uint32_t)(descriptorSetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pDescriptorSets, (size_t)n_ * sizeof(*pDescriptorSets)); + } else { + vkb_enc_u8(e, 0); + } + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkFreeMemory, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &memory, sizeof(memory)); + (void)pAllocator; + vkb_call_exec_async(&call_); +} + +VkDeviceAddress vkb_wire_vkGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetBufferDeviceAddress, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferDeviceAddressInfo(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return (VkDeviceAddress)0; + } + vkb_dec *d = &call_.d; + (void)d; + VkDeviceAddress r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetBufferMemoryRequirements, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &buffer, sizeof(buffer)); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_raw_into(d, pMemoryRequirements, sizeof(*pMemoryRequirements)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetBufferMemoryRequirements2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferMemoryRequirementsInfo2(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_template(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_out_struct(d, pMemoryRequirements, sizeof(VkMemoryRequirements2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +uint64_t vkb_wire_vkGetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetBufferOpaqueCaptureAddress, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferDeviceAddressInfo(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return (uint64_t)0; + } + vkb_dec *d = &call_.d; + (void)d; + uint64_t r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetCalibratedTimestampsKHR(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetCalibratedTimestampsKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, ×tampCount, sizeof(timestampCount)); + if (pTimestampInfos) { + uint32_t n_ = (uint32_t)(timestampCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCalibratedTimestampInfoKHR(e, &pTimestampInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + { uint32_t n_ = pTimestamps ? (uint32_t)(timestampCount) : 0; + vkb_enc_u8(e, pTimestamps != NULL); vkb_enc_u32(e, n_); + } + vkb_enc_u8(e, pMaxDeviation != NULL); + if (pMaxDeviation) vkb_enc_bytes(e, pMaxDeviation, sizeof(*pMaxDeviation)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = pTimestamps ? (uint32_t)(timestampCount) : 0; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pTimestamps[i_], sizeof(uint64_t)); + } + } + if (vkb_dec_u8(d)) { + if (pMaxDeviation) vkb_dec_raw_into(d, pMaxDeviation, sizeof(*pMaxDeviation)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDescriptorSetLayoutSupport, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDescriptorSetLayoutCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pSupport != NULL); + if (pSupport) vkb_enc_out_template(e, pSupport, sizeof(VkDescriptorSetLayoutSupport)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pSupport) vkb_dec_out_struct(d, pSupport, sizeof(VkDescriptorSetLayoutSupport)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceBufferMemoryRequirements(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceBufferMemoryRequirements, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceBufferMemoryRequirements(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_template(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_out_struct(d, pMemoryRequirements, sizeof(VkMemoryRequirements2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceGroupPeerMemoryFeatures, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &heapIndex, sizeof(heapIndex)); + vkb_enc_bytes(e, &localDeviceIndex, sizeof(localDeviceIndex)); + vkb_enc_bytes(e, &remoteDeviceIndex, sizeof(remoteDeviceIndex)); + vkb_enc_u8(e, pPeerMemoryFeatures != NULL); + if (pPeerMemoryFeatures) vkb_enc_bytes(e, pPeerMemoryFeatures, sizeof(*pPeerMemoryFeatures)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pPeerMemoryFeatures) vkb_dec_raw_into(d, pPeerMemoryFeatures, sizeof(*pPeerMemoryFeatures)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceImageMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceImageMemoryRequirements, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceImageMemoryRequirements(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_template(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_out_struct(d, pMemoryRequirements, sizeof(VkMemoryRequirements2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceImageSparseMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceImageSparseMemoryRequirements, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceImageMemoryRequirements(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pSparseMemoryRequirementCount != NULL); + if (pSparseMemoryRequirementCount) vkb_enc_bytes(e, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); + { uint32_t n_ = pSparseMemoryRequirements ? (uint32_t)((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)) : 0; + vkb_enc_u8(e, pSparseMemoryRequirements != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pSparseMemoryRequirements && i_ < n_; i_++) vkb_enc_out_template(e, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pSparseMemoryRequirementCount) vkb_dec_raw_into(d, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pSparseMemoryRequirements && pSparseMemoryRequirementCount) ? *pSparseMemoryRequirementCount : 0; + if (pSparseMemoryRequirementCount) *pSparseMemoryRequirementCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + } + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceImageSubresourceLayout(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceImageSubresourceLayout, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceImageSubresourceInfo(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pLayout != NULL); + if (pLayout) vkb_enc_out_template(e, pLayout, sizeof(VkSubresourceLayout2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pLayout) vkb_dec_out_struct(d, pLayout, sizeof(VkSubresourceLayout2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceMemoryCommitment, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &memory, sizeof(memory)); + vkb_enc_u8(e, pCommittedMemoryInBytes != NULL); + if (pCommittedMemoryInBytes) vkb_enc_bytes(e, pCommittedMemoryInBytes, sizeof(*pCommittedMemoryInBytes)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pCommittedMemoryInBytes) vkb_dec_raw_into(d, pCommittedMemoryInBytes, sizeof(*pCommittedMemoryInBytes)); else d->err = 1; + } + vkb_call_end(&call_); +} + +uint64_t vkb_wire_vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceMemoryOpaqueCaptureAddress, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceMemoryOpaqueCaptureAddressInfo(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return (uint64_t)0; + } + vkb_dec *d = &call_.d; + (void)d; + uint64_t r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceQueue, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &queueFamilyIndex, sizeof(queueFamilyIndex)); + vkb_enc_bytes(e, &queueIndex, sizeof(queueIndex)); + vkb_enc_u8(e, pQueue != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + VkQueue h_ = (VkQueue)vkb_wrap(VK_OBJECT_TYPE_QUEUE, (const void *)device, vkb_dec_u64(d)); + if (pQueue) *pQueue = h_; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceQueue2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pQueueInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceQueueInfo2(e, &pQueueInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pQueue != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + VkQueue h_ = (VkQueue)vkb_wrap(VK_OBJECT_TYPE_QUEUE, (const void *)device, vkb_dec_u64(d)); + if (pQueue) *pQueue = h_; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetDeviceTensorMemoryRequirementsARM(VkDevice device, const VkDeviceTensorMemoryRequirementsARM* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetDeviceTensorMemoryRequirementsARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceTensorMemoryRequirementsARM(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_template(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_out_struct(d, pMemoryRequirements, sizeof(VkMemoryRequirements2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +VkResult vkb_wire_vkGetEventStatus(VkDevice device, VkEvent event) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetEventStatus, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &event, sizeof(event)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetFenceFdKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pGetFdInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkFenceGetFdInfoKHR(e, &pGetFdInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pFd != NULL); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { int fd_ = vkb_dec_fd(d); if (pFd) *pFd = fd_; else if (fd_ >= 0) vkb_close_fd(fd_); } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetFenceStatus(VkDevice device, VkFence fence) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetFenceStatus, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &fence, sizeof(fence)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetImageDrmFormatModifierPropertiesEXT(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageDrmFormatModifierPropertiesEXT, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + vkb_enc_u8(e, pProperties != NULL); + if (pProperties) vkb_enc_out_template(e, pProperties, sizeof(VkImageDrmFormatModifierPropertiesEXT)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pProperties) vkb_dec_out_struct(d, pProperties, sizeof(VkImageDrmFormatModifierPropertiesEXT)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageMemoryRequirements, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_raw_into(d, pMemoryRequirements, sizeof(*pMemoryRequirements)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageMemoryRequirements2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageMemoryRequirementsInfo2(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_template(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_out_struct(d, pMemoryRequirements, sizeof(VkMemoryRequirements2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageSparseMemoryRequirements, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + vkb_enc_u8(e, pSparseMemoryRequirementCount != NULL); + if (pSparseMemoryRequirementCount) vkb_enc_bytes(e, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); + { uint32_t n_ = pSparseMemoryRequirements ? (uint32_t)((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)) : 0; + vkb_enc_u8(e, pSparseMemoryRequirements != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pSparseMemoryRequirementCount) vkb_dec_raw_into(d, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pSparseMemoryRequirements && pSparseMemoryRequirementCount) ? *pSparseMemoryRequirementCount : 0; + if (pSparseMemoryRequirementCount) *pSparseMemoryRequirementCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements)); + } + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetImageSparseMemoryRequirements2(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageSparseMemoryRequirements2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageSparseMemoryRequirementsInfo2(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pSparseMemoryRequirementCount != NULL); + if (pSparseMemoryRequirementCount) vkb_enc_bytes(e, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); + { uint32_t n_ = pSparseMemoryRequirements ? (uint32_t)((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)) : 0; + vkb_enc_u8(e, pSparseMemoryRequirements != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pSparseMemoryRequirements && i_ < n_; i_++) vkb_enc_out_template(e, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pSparseMemoryRequirementCount) vkb_dec_raw_into(d, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pSparseMemoryRequirements && pSparseMemoryRequirementCount) ? *pSparseMemoryRequirementCount : 0; + if (pSparseMemoryRequirementCount) *pSparseMemoryRequirementCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + } + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageSubresourceLayout, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + if (pSubresource) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pSubresource, (size_t)n_ * sizeof(*pSubresource)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pLayout != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pLayout) vkb_dec_raw_into(d, pLayout, sizeof(*pLayout)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetImageSubresourceLayout2(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetImageSubresourceLayout2, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &image, sizeof(image)); + if (pSubresource) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageSubresource2(e, &pSubresource[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pLayout != NULL); + if (pLayout) vkb_enc_out_template(e, pLayout, sizeof(VkSubresourceLayout2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pLayout) vkb_dec_out_struct(d, pLayout, sizeof(VkSubresourceLayout2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +VkResult vkb_wire_vkGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetMemoryFdKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pGetFdInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMemoryGetFdInfoKHR(e, &pGetFdInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pFd != NULL); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { int fd_ = vkb_dec_fd(d); if (pFd) *pFd = fd_; else if (fd_ >= 0) vkb_close_fd(fd_); } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetMemoryFdPropertiesKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &handleType, sizeof(handleType)); + vkb_enc_fd(e, fd); + vkb_enc_u8(e, pMemoryFdProperties != NULL); + if (pMemoryFdProperties) vkb_enc_out_template(e, pMemoryFdProperties, sizeof(VkMemoryFdPropertiesKHR)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pMemoryFdProperties) vkb_dec_out_struct(d, pMemoryFdProperties, sizeof(VkMemoryFdPropertiesKHR)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pTimeDomainCount != NULL); + if (pTimeDomainCount) vkb_enc_bytes(e, pTimeDomainCount, sizeof(*pTimeDomainCount)); + { uint32_t n_ = pTimeDomains ? (uint32_t)((pTimeDomainCount ? *pTimeDomainCount : 0)) : 0; + vkb_enc_u8(e, pTimeDomains != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pTimeDomainCount) vkb_dec_raw_into(d, pTimeDomainCount, sizeof(*pTimeDomainCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pTimeDomains && pTimeDomainCount) ? *pTimeDomainCount : 0; + if (pTimeDomainCount) *pTimeDomainCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pTimeDomains[i_], sizeof(VkTimeDomainKHR)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesKHR* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_bytes(e, pPropertyCount, sizeof(*pPropertyCount)); + { uint32_t n_ = pProperties ? (uint32_t)((pPropertyCount ? *pPropertyCount : 0)) : 0; + vkb_enc_u8(e, pProperties != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pProperties && i_ < n_; i_++) vkb_enc_out_template(e, &pProperties[i_], sizeof(VkCooperativeMatrixPropertiesKHR)); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pPropertyCount) vkb_dec_raw_into(d, pPropertyCount, sizeof(*pPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pProperties && pPropertyCount) ? *pPropertyCount : 0; + if (pPropertyCount) *pPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pProperties[i_], sizeof(VkCooperativeMatrixPropertiesKHR)); + } + } + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceExternalBufferProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pExternalBufferInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceExternalBufferInfo(e, &pExternalBufferInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pExternalBufferProperties != NULL); + if (pExternalBufferProperties) vkb_enc_out_template(e, pExternalBufferProperties, sizeof(VkExternalBufferProperties)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pExternalBufferProperties) vkb_dec_out_struct(d, pExternalBufferProperties, sizeof(VkExternalBufferProperties)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceExternalFenceProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pExternalFenceInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceExternalFenceInfo(e, &pExternalFenceInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pExternalFenceProperties != NULL); + if (pExternalFenceProperties) vkb_enc_out_template(e, pExternalFenceProperties, sizeof(VkExternalFenceProperties)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pExternalFenceProperties) vkb_dec_out_struct(d, pExternalFenceProperties, sizeof(VkExternalFenceProperties)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceExternalSemaphoreProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pExternalSemaphoreInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceExternalSemaphoreInfo(e, &pExternalSemaphoreInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pExternalSemaphoreProperties != NULL); + if (pExternalSemaphoreProperties) vkb_enc_out_template(e, pExternalSemaphoreProperties, sizeof(VkExternalSemaphoreProperties)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pExternalSemaphoreProperties) vkb_dec_out_struct(d, pExternalSemaphoreProperties, sizeof(VkExternalSemaphoreProperties)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceExternalTensorPropertiesARM(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, VkExternalTensorPropertiesARM* pExternalTensorProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceExternalTensorPropertiesARM, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pExternalTensorInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceExternalTensorInfoARM(e, &pExternalTensorInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pExternalTensorProperties != NULL); + if (pExternalTensorProperties) vkb_enc_out_template(e, pExternalTensorProperties, sizeof(VkExternalTensorPropertiesARM)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pExternalTensorProperties) vkb_dec_out_struct(d, pExternalTensorProperties, sizeof(VkExternalTensorPropertiesARM)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceFeatures, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pFeatures != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pFeatures) vkb_dec_raw_into(d, pFeatures, sizeof(*pFeatures)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceFeatures2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pFeatures != NULL); + if (pFeatures) vkb_enc_out_template(e, pFeatures, sizeof(VkPhysicalDeviceFeatures2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pFeatures) vkb_dec_out_struct(d, pFeatures, sizeof(VkPhysicalDeviceFeatures2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceFormatProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_bytes(e, &format, sizeof(format)); + vkb_enc_u8(e, pFormatProperties != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pFormatProperties) vkb_dec_raw_into(d, pFormatProperties, sizeof(*pFormatProperties)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceFormatProperties2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_bytes(e, &format, sizeof(format)); + vkb_enc_u8(e, pFormatProperties != NULL); + if (pFormatProperties) vkb_enc_out_template(e, pFormatProperties, sizeof(VkFormatProperties2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pFormatProperties) vkb_dec_out_struct(d, pFormatProperties, sizeof(VkFormatProperties2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +VkResult vkb_wire_vkGetPhysicalDeviceFragmentShadingRatesKHR(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceFragmentShadingRatesKHR, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pFragmentShadingRateCount != NULL); + if (pFragmentShadingRateCount) vkb_enc_bytes(e, pFragmentShadingRateCount, sizeof(*pFragmentShadingRateCount)); + { uint32_t n_ = pFragmentShadingRates ? (uint32_t)((pFragmentShadingRateCount ? *pFragmentShadingRateCount : 0)) : 0; + vkb_enc_u8(e, pFragmentShadingRates != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pFragmentShadingRates && i_ < n_; i_++) vkb_enc_out_template(e, &pFragmentShadingRates[i_], sizeof(VkPhysicalDeviceFragmentShadingRateKHR)); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pFragmentShadingRateCount) vkb_dec_raw_into(d, pFragmentShadingRateCount, sizeof(*pFragmentShadingRateCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pFragmentShadingRates && pFragmentShadingRateCount) ? *pFragmentShadingRateCount : 0; + if (pFragmentShadingRateCount) *pFragmentShadingRateCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pFragmentShadingRates[i_], sizeof(VkPhysicalDeviceFragmentShadingRateKHR)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceImageFormatProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_bytes(e, &format, sizeof(format)); + vkb_enc_bytes(e, &type, sizeof(type)); + vkb_enc_bytes(e, &tiling, sizeof(tiling)); + vkb_enc_bytes(e, &usage, sizeof(usage)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + vkb_enc_u8(e, pImageFormatProperties != NULL); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pImageFormatProperties) vkb_dec_raw_into(d, pImageFormatProperties, sizeof(*pImageFormatProperties)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceImageFormatProperties2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pImageFormatInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceImageFormatInfo2(e, &pImageFormatInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pImageFormatProperties != NULL); + if (pImageFormatProperties) vkb_enc_out_template(e, pImageFormatProperties, sizeof(VkImageFormatProperties2)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pImageFormatProperties) vkb_dec_out_struct(d, pImageFormatProperties, sizeof(VkImageFormatProperties2)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceMemoryProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pMemoryProperties != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryProperties) vkb_dec_raw_into(d, pMemoryProperties, sizeof(*pMemoryProperties)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceMemoryProperties2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pMemoryProperties != NULL); + if (pMemoryProperties) vkb_enc_out_template(e, pMemoryProperties, sizeof(VkPhysicalDeviceMemoryProperties2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryProperties) vkb_dec_out_struct(d, pMemoryProperties, sizeof(VkPhysicalDeviceMemoryProperties2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceMultisamplePropertiesEXT, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_bytes(e, &samples, sizeof(samples)); + vkb_enc_u8(e, pMultisampleProperties != NULL); + if (pMultisampleProperties) vkb_enc_out_template(e, pMultisampleProperties, sizeof(VkMultisamplePropertiesEXT)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMultisampleProperties) vkb_dec_out_struct(d, pMultisampleProperties, sizeof(VkMultisamplePropertiesEXT)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pProperties != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pProperties) vkb_dec_raw_into(d, pProperties, sizeof(*pProperties)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceProperties2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pProperties != NULL); + if (pProperties) vkb_enc_out_template(e, pProperties, sizeof(VkPhysicalDeviceProperties2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pProperties) vkb_dec_out_struct(d, pProperties, sizeof(VkPhysicalDeviceProperties2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceQueueFamilyProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pQueueFamilyPropertyCount != NULL); + if (pQueueFamilyPropertyCount) vkb_enc_bytes(e, pQueueFamilyPropertyCount, sizeof(*pQueueFamilyPropertyCount)); + { uint32_t n_ = pQueueFamilyProperties ? (uint32_t)((pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0)) : 0; + vkb_enc_u8(e, pQueueFamilyProperties != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pQueueFamilyPropertyCount) vkb_dec_raw_into(d, pQueueFamilyPropertyCount, sizeof(*pQueueFamilyPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pQueueFamilyProperties && pQueueFamilyPropertyCount) ? *pQueueFamilyPropertyCount : 0; + if (pQueueFamilyPropertyCount) *pQueueFamilyPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pQueueFamilyProperties[i_], sizeof(VkQueueFamilyProperties)); + } + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceQueueFamilyProperties2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pQueueFamilyPropertyCount != NULL); + if (pQueueFamilyPropertyCount) vkb_enc_bytes(e, pQueueFamilyPropertyCount, sizeof(*pQueueFamilyPropertyCount)); + { uint32_t n_ = pQueueFamilyProperties ? (uint32_t)((pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0)) : 0; + vkb_enc_u8(e, pQueueFamilyProperties != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pQueueFamilyProperties && i_ < n_; i_++) vkb_enc_out_template(e, &pQueueFamilyProperties[i_], sizeof(VkQueueFamilyProperties2)); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pQueueFamilyPropertyCount) vkb_dec_raw_into(d, pQueueFamilyPropertyCount, sizeof(*pQueueFamilyPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pQueueFamilyProperties && pQueueFamilyPropertyCount) ? *pQueueFamilyPropertyCount : 0; + if (pQueueFamilyPropertyCount) *pQueueFamilyPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pQueueFamilyProperties[i_], sizeof(VkQueueFamilyProperties2)); + } + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceSparseImageFormatProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_bytes(e, &format, sizeof(format)); + vkb_enc_bytes(e, &type, sizeof(type)); + vkb_enc_bytes(e, &samples, sizeof(samples)); + vkb_enc_bytes(e, &usage, sizeof(usage)); + vkb_enc_bytes(e, &tiling, sizeof(tiling)); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_bytes(e, pPropertyCount, sizeof(*pPropertyCount)); + { uint32_t n_ = pProperties ? (uint32_t)((pPropertyCount ? *pPropertyCount : 0)) : 0; + vkb_enc_u8(e, pProperties != NULL); vkb_enc_u32(e, n_); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pPropertyCount) vkb_dec_raw_into(d, pPropertyCount, sizeof(*pPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pProperties && pPropertyCount) ? *pPropertyCount : 0; + if (pPropertyCount) *pPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_raw_into(d, &pProperties[i_], sizeof(VkSparseImageFormatProperties)); + } + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceSparseImageFormatProperties2, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + if (pFormatInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceSparseImageFormatInfo2(e, &pFormatInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_bytes(e, pPropertyCount, sizeof(*pPropertyCount)); + { uint32_t n_ = pProperties ? (uint32_t)((pPropertyCount ? *pPropertyCount : 0)) : 0; + vkb_enc_u8(e, pProperties != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pProperties && i_ < n_; i_++) vkb_enc_out_template(e, &pProperties[i_], sizeof(VkSparseImageFormatProperties2)); + } + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pPropertyCount) vkb_dec_raw_into(d, pPropertyCount, sizeof(*pPropertyCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pProperties && pPropertyCount) ? *pPropertyCount : 0; + if (pPropertyCount) *pPropertyCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pProperties[i_], sizeof(VkSparseImageFormatProperties2)); + } + } + vkb_call_end(&call_); +} + +VkResult vkb_wire_vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPhysicalDeviceToolProperties, vkb_table_of((const void *)physicalDevice)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)physicalDevice)); + vkb_enc_u8(e, pToolCount != NULL); + if (pToolCount) vkb_enc_bytes(e, pToolCount, sizeof(*pToolCount)); + { uint32_t n_ = pToolProperties ? (uint32_t)((pToolCount ? *pToolCount : 0)) : 0; + vkb_enc_u8(e, pToolProperties != NULL); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; pToolProperties && i_ < n_; i_++) vkb_enc_out_template(e, &pToolProperties[i_], sizeof(VkPhysicalDeviceToolProperties)); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pToolCount) vkb_dec_raw_into(d, pToolCount, sizeof(*pToolCount)); else d->err = 1; + } + { + uint32_t rn_ = vkb_dec_u32(d); + (void)rn_; + uint32_t cap_ = (pToolProperties && pToolCount) ? *pToolCount : 0; + if (pToolCount) *pToolCount = rn_; + uint32_t has_ = vkb_dec_u32(d); + for (uint32_t i_ = 0; i_ < has_; i_++) { + if (i_ >= cap_) { d->err = 1; break; } + vkb_dec_out_struct(d, &pToolProperties[i_], sizeof(VkPhysicalDeviceToolProperties)); + } + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetPipelineCacheData, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &pipelineCache, sizeof(pipelineCache)); + vkb_enc_u8(e, pDataSize != NULL); + if (pDataSize) vkb_enc_bytes(e, pDataSize, sizeof(*pDataSize)); + vkb_enc_u8(e, pData != NULL); vkb_enc_u64(e, pData ? (uint64_t)*pDataSize : 0); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pDataSize) vkb_dec_raw_into(d, pDataSize, sizeof(*pDataSize)); else d->err = 1; + } + { uint64_t sz_ = vkb_dec_u64(d); if (pDataSize) { size_t cap_ = pData ? *pDataSize : 0; *pDataSize = (size_t)sz_; vkb_dec_blob_into(d, pData, cap_); } else vkb_dec_blob_into(d, NULL, 0); } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetQueryPoolResults, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &firstQuery, sizeof(firstQuery)); + vkb_enc_bytes(e, &queryCount, sizeof(queryCount)); + vkb_enc_bytes(e, &dataSize, sizeof(dataSize)); + vkb_enc_u8(e, pData != NULL); vkb_enc_u64(e, (uint64_t)(dataSize)); + vkb_enc_bytes(e, &stride, sizeof(stride)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_dec_blob_into(d, pData, (size_t)(dataSize)); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetRenderAreaGranularity, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &renderPass, sizeof(renderPass)); + vkb_enc_u8(e, pGranularity != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pGranularity) vkb_dec_raw_into(d, pGranularity, sizeof(*pGranularity)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetRenderingAreaGranularity(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetRenderingAreaGranularity, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pRenderingAreaInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingAreaInfo(e, &pRenderingAreaInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pGranularity != NULL); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pGranularity) vkb_dec_raw_into(d, pGranularity, sizeof(*pGranularity)); else d->err = 1; + } + vkb_call_end(&call_); +} + +VkResult vkb_wire_vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t* pValue) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetSemaphoreCounterValue, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &semaphore, sizeof(semaphore)); + vkb_enc_u8(e, pValue != NULL); + if (pValue) vkb_enc_bytes(e, pValue, sizeof(*pValue)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + if (vkb_dec_u8(d)) { + if (pValue) vkb_dec_raw_into(d, pValue, sizeof(*pValue)); else d->err = 1; + } + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetSemaphoreFdKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pGetFdInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreGetFdInfoKHR(e, &pGetFdInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pFd != NULL); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + { int fd_ = vkb_dec_fd(d); if (pFd) *pFd = fd_; else if (fd_ >= 0) vkb_close_fd(fd_); } + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkGetShaderModuleCreateInfoIdentifierEXT(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetShaderModuleCreateInfoIdentifierEXT, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkShaderModuleCreateInfo(e, &pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pIdentifier != NULL); + if (pIdentifier) vkb_enc_out_template(e, pIdentifier, sizeof(VkShaderModuleIdentifierEXT)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pIdentifier) vkb_dec_out_struct(d, pIdentifier, sizeof(VkShaderModuleIdentifierEXT)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetShaderModuleIdentifierEXT(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetShaderModuleIdentifierEXT, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &shaderModule, sizeof(shaderModule)); + vkb_enc_u8(e, pIdentifier != NULL); + if (pIdentifier) vkb_enc_out_template(e, pIdentifier, sizeof(VkShaderModuleIdentifierEXT)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pIdentifier) vkb_dec_out_struct(d, pIdentifier, sizeof(VkShaderModuleIdentifierEXT)); else d->err = 1; + } + vkb_call_end(&call_); +} + +void vkb_wire_vkGetTensorMemoryRequirementsARM(VkDevice device, const VkTensorMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkGetTensorMemoryRequirementsARM, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorMemoryRequirementsInfoARM(e, &pInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_template(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); + if (!vkb_call_exec(&call_)) { + return; + } + vkb_dec *d = &call_.d; + (void)d; + if (vkb_dec_u8(d)) { + if (pMemoryRequirements) vkb_dec_out_struct(d, pMemoryRequirements, sizeof(VkMemoryRequirements2)); else d->err = 1; + } + vkb_call_end(&call_); +} + +VkResult vkb_wire_vkImportFenceFdKHR(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkImportFenceFdKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pImportFenceFdInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImportFenceFdInfoKHR(e, &pImportFenceFdInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkImportSemaphoreFdKHR(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkImportSemaphoreFdKHR, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pImportSemaphoreFdInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImportSemaphoreFdInfoKHR(e, &pImportSemaphoreFdInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkInvalidateMappedMemoryRanges, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &memoryRangeCount, sizeof(memoryRangeCount)); + if (pMemoryRanges) { + uint32_t n_ = (uint32_t)(memoryRangeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMappedMemoryRange(e, &pMemoryRanges[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkMergePipelineCaches, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &dstCache, sizeof(dstCache)); + vkb_enc_bytes(e, &srcCacheCount, sizeof(srcCacheCount)); + if (pSrcCaches) { + uint32_t n_ = (uint32_t)(srcCacheCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pSrcCaches, (size_t)n_ * sizeof(*pSrcCaches)); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkQueueBindSparse, vkb_table_of((const void *)queue)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)queue)); + vkb_enc_bytes(e, &bindInfoCount, sizeof(bindInfoCount)); + if (pBindInfo) { + uint32_t n_ = (uint32_t)(bindInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBindSparseInfo(e, &pBindInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &fence, sizeof(fence)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkQueueSubmit, vkb_table_of((const void *)queue)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)queue)); + vkb_enc_bytes(e, &submitCount, sizeof(submitCount)); + if (pSubmits) { + uint32_t n_ = (uint32_t)(submitCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubmitInfo(e, &pSubmits[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &fence, sizeof(fence)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkQueueSubmit2, vkb_table_of((const void *)queue)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)queue)); + vkb_enc_bytes(e, &submitCount, sizeof(submitCount)); + if (pSubmits) { + uint32_t n_ = (uint32_t)(submitCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubmitInfo2(e, &pSubmits[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &fence, sizeof(fence)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkQueueWaitIdle(VkQueue queue) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkQueueWaitIdle, vkb_table_of((const void *)queue)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)queue)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkResetCommandBuffer, vkb_table_of((const void *)commandBuffer)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)commandBuffer)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkResetCommandPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &commandPool, sizeof(commandPool)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkResetDescriptorPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &descriptorPool, sizeof(descriptorPool)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkResetEvent(VkDevice device, VkEvent event) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkResetEvent, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &event, sizeof(event)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkResetFences, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &fenceCount, sizeof(fenceCount)); + if (pFences) { + uint32_t n_ = (uint32_t)(fenceCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pFences, (size_t)n_ * sizeof(*pFences)); + } else { + vkb_enc_u8(e, 0); + } + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkResetQueryPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &queryPool, sizeof(queryPool)); + vkb_enc_bytes(e, &firstQuery, sizeof(firstQuery)); + vkb_enc_bytes(e, &queryCount, sizeof(queryCount)); + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkSetDeviceMemoryPriorityEXT(VkDevice device, VkDeviceMemory memory, float priority) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkSetDeviceMemoryPriorityEXT, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &memory, sizeof(memory)); + vkb_enc_bytes(e, &priority, sizeof(priority)); + vkb_call_exec_async(&call_); +} + +VkResult vkb_wire_vkSetEvent(VkDevice device, VkEvent event) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkSetEvent, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &event, sizeof(event)); + if (vkb_async_results()) return vkb_call_exec_async(&call_) ? VK_SUCCESS : VK_ERROR_DEVICE_LOST; + if (!vkb_call_exec(&call_)) return VK_ERROR_DEVICE_LOST; + VkResult r_ = (VkResult)vkb_dec_u32(&call_.d); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkSignalSemaphore, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pSignalInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreSignalInfo(e, &pSignalInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +void vkb_wire_vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkTrimCommandPool, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &commandPool, sizeof(commandPool)); + vkb_enc_bytes(e, &flags, sizeof(flags)); + vkb_call_exec_async(&call_); +} + +void vkb_wire_vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkUpdateDescriptorSets, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &descriptorWriteCount, sizeof(descriptorWriteCount)); + if (pDescriptorWrites) { + uint32_t n_ = (uint32_t)(descriptorWriteCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkWriteDescriptorSet(e, &pDescriptorWrites[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &descriptorCopyCount, sizeof(descriptorCopyCount)); + if (pDescriptorCopies) { + uint32_t n_ = (uint32_t)(descriptorCopyCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCopyDescriptorSet(e, &pDescriptorCopies[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_call_exec_async(&call_); +} + +VkResult vkb_wire_vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkWaitForFences, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + vkb_enc_bytes(e, &fenceCount, sizeof(fenceCount)); + if (pFences) { + uint32_t n_ = (uint32_t)(fenceCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, pFences, (size_t)n_ * sizeof(*pFences)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &waitAll, sizeof(waitAll)); + vkb_enc_bytes(e, &timeout, sizeof(timeout)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +VkResult vkb_wire_vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout) +{ + vkb_call call_; + vkb_call_begin(&call_, VKB_CMD_vkWaitSemaphores, vkb_table_of((const void *)device)); + vkb_enc *e = &call_.e; + vkb_enc_u64(e, vkb_remote((const void *)device)); + if (pWaitInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreWaitInfo(e, &pWaitInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_bytes(e, &timeout, sizeof(timeout)); + if (!vkb_call_exec(&call_)) { + return VK_ERROR_DEVICE_LOST; + } + vkb_dec *d = &call_.d; + (void)d; + VkResult r_; + vkb_dec_bytes(d, &r_, sizeof(r_)); + vkb_call_end(&call_); + return r_; +} + +/* Default entry points. */ +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkBindTensorMemoryARM(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM* pBindInfos) +{ + return vkb_wire_vkBindTensorMemoryARM(device, bindInfoCount, pBindInfos); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) +{ + vkb_wire_vkCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginCustomResolveEXT(VkCommandBuffer commandBuffer, const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo) +{ + vkb_wire_vkCmdBeginCustomResolveEXT(commandBuffer, pBeginCustomResolveInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags) +{ + vkb_wire_vkCmdBeginQuery(commandBuffer, queryPool, query, flags); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index) +{ + vkb_wire_vkCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) +{ + vkb_wire_vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo) +{ + vkb_wire_vkCmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo) +{ + vkb_wire_vkCmdBeginRendering(commandBuffer, pRenderingInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) +{ + vkb_wire_vkCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) +{ + vkb_wire_vkCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) +{ + vkb_wire_vkCmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) +{ + vkb_wire_vkCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType) +{ + vkb_wire_vkCmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) +{ + vkb_wire_vkCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes) +{ + vkb_wire_vkCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) +{ + vkb_wire_vkCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) +{ + vkb_wire_vkCmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) +{ + vkb_wire_vkCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo) +{ + vkb_wire_vkCmdBlitImage2(commandBuffer, pBlitImageInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) +{ + vkb_wire_vkCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) +{ + vkb_wire_vkCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) +{ + vkb_wire_vkCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) +{ + vkb_wire_vkCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo) +{ + vkb_wire_vkCmdCopyBuffer2(commandBuffer, pCopyBufferInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) +{ + vkb_wire_vkCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) +{ + vkb_wire_vkCmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) +{ + vkb_wire_vkCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo) +{ + vkb_wire_vkCmdCopyImage2(commandBuffer, pCopyImageInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) +{ + vkb_wire_vkCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) +{ + vkb_wire_vkCmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) +{ + vkb_wire_vkCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdCopyTensorARM(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM* pCopyTensorInfo) +{ + vkb_wire_vkCmdCopyTensorARM(commandBuffer, pCopyTensorInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) +{ + vkb_wire_vkCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) +{ + vkb_wire_vkCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) +{ + vkb_wire_vkCmdDispatchIndirect(commandBuffer, buffer, offset); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) +{ + vkb_wire_vkCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) +{ + vkb_wire_vkCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) +{ + vkb_wire_vkCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) +{ + vkb_wire_vkCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) +{ + vkb_wire_vkCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride) +{ + vkb_wire_vkCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) +{ + vkb_wire_vkCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) +{ + vkb_wire_vkCmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) +{ + vkb_wire_vkCmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer) +{ + vkb_wire_vkCmdEndConditionalRenderingEXT(commandBuffer); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query) +{ + vkb_wire_vkCmdEndQuery(commandBuffer, queryPool, query); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index) +{ + vkb_wire_vkCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndRenderPass(VkCommandBuffer commandBuffer) +{ + vkb_wire_vkCmdEndRenderPass(commandBuffer); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo) +{ + vkb_wire_vkCmdEndRenderPass2(commandBuffer, pSubpassEndInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndRendering(VkCommandBuffer commandBuffer) +{ + vkb_wire_vkCmdEndRendering(commandBuffer); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndRendering2KHR(VkCommandBuffer commandBuffer, const VkRenderingEndInfoKHR* pRenderingEndInfo) +{ + vkb_wire_vkCmdEndRendering2KHR(commandBuffer, pRenderingEndInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) +{ + vkb_wire_vkCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data) +{ + vkb_wire_vkCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) +{ + vkb_wire_vkCmdNextSubpass(commandBuffer, contents); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo) +{ + vkb_wire_vkCmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) +{ + vkb_wire_vkCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo) +{ + vkb_wire_vkCmdPipelineBarrier2(commandBuffer, pDependencyInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues) +{ + vkb_wire_vkCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushConstants2(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo) +{ + vkb_wire_vkCmdPushConstants2(commandBuffer, pPushConstantsInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) +{ + vkb_wire_vkCmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) +{ + vkb_wire_vkCmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) +{ + vkb_wire_vkCmdResetEvent(commandBuffer, event, stageMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask) +{ + vkb_wire_vkCmdResetEvent2(commandBuffer, event, stageMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) +{ + vkb_wire_vkCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) +{ + vkb_wire_vkCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo) +{ + vkb_wire_vkCmdResolveImage2(commandBuffer, pResolveImageInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable) +{ + vkb_wire_vkCmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable) +{ + vkb_wire_vkCmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetAttachmentFeedbackLoopEnableEXT(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask) +{ + vkb_wire_vkCmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) +{ + vkb_wire_vkCmdSetBlendConstants(commandBuffer, blendConstants); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetColorBlendAdvancedEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced) +{ + vkb_wire_vkCmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetColorBlendEnableEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables) +{ + vkb_wire_vkCmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetColorBlendEquationEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations) +{ + vkb_wire_vkCmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables) +{ + vkb_wire_vkCmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetColorWriteMaskEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks) +{ + vkb_wire_vkCmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetConservativeRasterizationModeEXT(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode) +{ + vkb_wire_vkCmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) +{ + vkb_wire_vkCmdSetCullMode(commandBuffer, cullMode); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) +{ + vkb_wire_vkCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthBias2EXT(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT* pDepthBiasInfo) +{ + vkb_wire_vkCmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) +{ + vkb_wire_vkCmdSetDepthBiasEnable(commandBuffer, depthBiasEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) +{ + vkb_wire_vkCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) +{ + vkb_wire_vkCmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable) +{ + vkb_wire_vkCmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange) +{ + vkb_wire_vkCmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthClipEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable) +{ + vkb_wire_vkCmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne) +{ + vkb_wire_vkCmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) +{ + vkb_wire_vkCmdSetDepthCompareOp(commandBuffer, depthCompareOp); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) +{ + vkb_wire_vkCmdSetDepthTestEnable(commandBuffer, depthTestEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) +{ + vkb_wire_vkCmdSetDepthWriteEnable(commandBuffer, depthWriteEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask) +{ + vkb_wire_vkCmdSetDeviceMask(commandBuffer, deviceMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles) +{ + vkb_wire_vkCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDiscardRectangleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable) +{ + vkb_wire_vkCmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetDiscardRectangleModeEXT(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode) +{ + vkb_wire_vkCmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) +{ + vkb_wire_vkCmdSetEvent(commandBuffer, event, stageMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo) +{ + vkb_wire_vkCmdSetEvent2(commandBuffer, event, pDependencyInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetExtraPrimitiveOverestimationSizeEXT(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize) +{ + vkb_wire_vkCmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetFragmentShadingRateKHR(VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) +{ + vkb_wire_vkCmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace) +{ + vkb_wire_vkCmdSetFrontFace(commandBuffer, frontFace); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode) +{ + vkb_wire_vkCmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern) +{ + vkb_wire_vkCmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetLineStippleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable) +{ + vkb_wire_vkCmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) +{ + vkb_wire_vkCmdSetLineWidth(commandBuffer, lineWidth); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp) +{ + vkb_wire_vkCmdSetLogicOpEXT(commandBuffer, logicOp); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetLogicOpEnableEXT(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable) +{ + vkb_wire_vkCmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints) +{ + vkb_wire_vkCmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetPolygonModeEXT(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode) +{ + vkb_wire_vkCmdSetPolygonModeEXT(commandBuffer, polygonMode); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) +{ + vkb_wire_vkCmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) +{ + vkb_wire_vkCmdSetPrimitiveTopology(commandBuffer, primitiveTopology); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode) +{ + vkb_wire_vkCmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples) +{ + vkb_wire_vkCmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer, uint32_t rasterizationStream) +{ + vkb_wire_vkCmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) +{ + vkb_wire_vkCmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo) +{ + vkb_wire_vkCmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) +{ + vkb_wire_vkCmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) +{ + vkb_wire_vkCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetSampleLocationsEnableEXT(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable) +{ + vkb_wire_vkCmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask* pSampleMask) +{ + vkb_wire_vkCmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors) +{ + vkb_wire_vkCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors) +{ + vkb_wire_vkCmdSetScissorWithCount(commandBuffer, scissorCount, pScissors); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask) +{ + vkb_wire_vkCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp) +{ + vkb_wire_vkCmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) +{ + vkb_wire_vkCmdSetStencilReference(commandBuffer, faceMask, reference); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) +{ + vkb_wire_vkCmdSetStencilTestEnable(commandBuffer, stencilTestEnable); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) +{ + vkb_wire_vkCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin) +{ + vkb_wire_vkCmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) +{ + vkb_wire_vkCmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports) +{ + vkb_wire_vkCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports) +{ + vkb_wire_vkCmdSetViewportWithCount(commandBuffer, viewportCount, pViewports); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) +{ + vkb_wire_vkCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) +{ + vkb_wire_vkCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos) +{ + vkb_wire_vkCmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query) +{ + vkb_wire_vkCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query) +{ + vkb_wire_vkCmdWriteTimestamp2(commandBuffer, stage, queryPool, query); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) +{ + return vkb_wire_vkCreateBufferView(device, pCreateInfo, pAllocator, pView); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) +{ + return vkb_wire_vkCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) +{ + return vkb_wire_vkCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) +{ + return vkb_wire_vkCreateEvent(device, pCreateInfo, pAllocator, pEvent); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) +{ + return vkb_wire_vkCreateFence(device, pCreateInfo, pAllocator, pFence); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) +{ + return vkb_wire_vkCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) +{ + return vkb_wire_vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) +{ + return vkb_wire_vkCreateImageView(device, pCreateInfo, pAllocator, pView); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) +{ + return vkb_wire_vkCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) +{ + return vkb_wire_vkCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) +{ + return vkb_wire_vkCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) +{ + return vkb_wire_vkCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) +{ + return vkb_wire_vkCreateRenderPass2(device, pCreateInfo, pAllocator, pRenderPass); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) +{ + return vkb_wire_vkCreateSampler(device, pCreateInfo, pAllocator, pSampler); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateSamplerYcbcrConversion(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) +{ + return vkb_wire_vkCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) +{ + return vkb_wire_vkCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) +{ + return vkb_wire_vkCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateTensorARM(VkDevice device, const VkTensorCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorARM* pTensor) +{ + return vkb_wire_vkCreateTensorARM(device, pCreateInfo, pAllocator, pTensor); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkCreateTensorViewARM(VkDevice device, const VkTensorViewCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorViewARM* pView) +{ + return vkb_wire_vkCreateTensorViewARM(device, pCreateInfo, pAllocator, pView); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyBufferView(device, bufferView, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyEvent(device, event, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyFence(device, fence, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyFramebuffer(device, framebuffer, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyImageView(device, imageView, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyPipeline(device, pipeline, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyPipelineCache(device, pipelineCache, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyPipelineLayout(device, pipelineLayout, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyQueryPool(device, queryPool, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyRenderPass(device, renderPass, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroySampler(device, sampler, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroySemaphore(device, semaphore, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyShaderModule(device, shaderModule, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyTensorARM(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyTensorARM(device, tensor, pAllocator); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkDestroyTensorViewARM(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks* pAllocator) +{ + vkb_wire_vkDestroyTensorViewARM(device, tensorView, pAllocator); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterARM* pCounters, VkPerformanceCounterDescriptionARM* pCounterDescriptions) +{ + return vkb_wire_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) +{ + return vkb_wire_vkFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets); +} + +static VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkb_ep_vkGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo) +{ + return vkb_wire_vkGetBufferDeviceAddress(device, pInfo); +} + +static VKAPI_ATTR uint64_t VKAPI_CALL vkb_ep_vkGetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo) +{ + return vkb_wire_vkGetBufferOpaqueCaptureAddress(device, pInfo); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetCalibratedTimestampsKHR(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation) +{ + return vkb_wire_vkGetCalibratedTimestampsKHR(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) +{ + vkb_wire_vkGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) +{ + vkb_wire_vkGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceImageSubresourceLayout(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout) +{ + vkb_wire_vkGetDeviceImageSubresourceLayout(device, pInfo, pLayout); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) +{ + vkb_wire_vkGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); +} + +static VKAPI_ATTR uint64_t VKAPI_CALL vkb_ep_vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) +{ + return vkb_wire_vkGetDeviceMemoryOpaqueCaptureAddress(device, pInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetDeviceTensorMemoryRequirementsARM(VkDevice device, const VkDeviceTensorMemoryRequirementsARM* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_wire_vkGetDeviceTensorMemoryRequirementsARM(device, pInfo, pMemoryRequirements); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetEventStatus(VkDevice device, VkEvent event) +{ + return vkb_wire_vkGetEventStatus(device, event); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) +{ + return vkb_wire_vkGetFenceFdKHR(device, pGetFdInfo, pFd); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetImageDrmFormatModifierPropertiesEXT(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) +{ + return vkb_wire_vkGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetImageSubresourceLayout2(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout) +{ + vkb_wire_vkGetImageSubresourceLayout2(device, image, pSubresource, pLayout); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) +{ + return vkb_wire_vkGetMemoryFdKHR(device, pGetFdInfo, pFd); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains) +{ + return vkb_wire_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(physicalDevice, pTimeDomainCount, pTimeDomains); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesKHR* pProperties) +{ + return vkb_wire_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(physicalDevice, pPropertyCount, pProperties); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetPhysicalDeviceExternalTensorPropertiesARM(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, VkExternalTensorPropertiesARM* pExternalTensorProperties) +{ + vkb_wire_vkGetPhysicalDeviceExternalTensorPropertiesARM(physicalDevice, pExternalTensorInfo, pExternalTensorProperties); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPhysicalDeviceFragmentShadingRatesKHR(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) +{ + return vkb_wire_vkGetPhysicalDeviceFragmentShadingRatesKHR(physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) +{ + return vkb_wire_vkGetPipelineCacheData(device, pipelineCache, pDataSize, pData); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) +{ + return vkb_wire_vkGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) +{ + vkb_wire_vkGetRenderAreaGranularity(device, renderPass, pGranularity); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetRenderingAreaGranularity(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity) +{ + vkb_wire_vkGetRenderingAreaGranularity(device, pRenderingAreaInfo, pGranularity); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) +{ + return vkb_wire_vkGetSemaphoreFdKHR(device, pGetFdInfo, pFd); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetShaderModuleCreateInfoIdentifierEXT(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier) +{ + vkb_wire_vkGetShaderModuleCreateInfoIdentifierEXT(device, pCreateInfo, pIdentifier); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetShaderModuleIdentifierEXT(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier) +{ + vkb_wire_vkGetShaderModuleIdentifierEXT(device, shaderModule, pIdentifier); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkGetTensorMemoryRequirementsARM(VkDevice device, const VkTensorMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements) +{ + vkb_wire_vkGetTensorMemoryRequirementsARM(device, pInfo, pMemoryRequirements); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkImportFenceFdKHR(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) +{ + return vkb_wire_vkImportFenceFdKHR(device, pImportFenceFdInfo); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkImportSemaphoreFdKHR(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) +{ + return vkb_wire_vkImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) +{ + return vkb_wire_vkMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) +{ + return vkb_wire_vkQueueBindSparse(queue, bindInfoCount, pBindInfo, fence); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetEvent(VkDevice device, VkEvent event) +{ + return vkb_wire_vkResetEvent(device, event); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) +{ + return vkb_wire_vkResetFences(device, fenceCount, pFences); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) +{ + vkb_wire_vkResetQueryPool(device, queryPool, firstQuery, queryCount); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkSetDeviceMemoryPriorityEXT(VkDevice device, VkDeviceMemory memory, float priority) +{ + vkb_wire_vkSetDeviceMemoryPriorityEXT(device, memory, priority); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSetEvent(VkDevice device, VkEvent event) +{ + return vkb_wire_vkSetEvent(device, event); +} + +static VKAPI_ATTR VkResult VKAPI_CALL vkb_ep_vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo) +{ + return vkb_wire_vkSignalSemaphore(device, pSignalInfo); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags) +{ + vkb_wire_vkTrimCommandPool(device, commandPool, flags); +} + +static VKAPI_ATTR void VKAPI_CALL vkb_ep_vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) +{ + vkb_wire_vkUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); +} + +const vkb_proc_desc vkb_client_procs[] = { + {"vkAcquireNextImage2KHR", (PFN_vkVoidFunction)vkb_ep_vkAcquireNextImage2KHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkAcquireNextImageKHR", (PFN_vkVoidFunction)vkb_ep_vkAcquireNextImageKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkAllocateCommandBuffers", (PFN_vkVoidFunction)vkb_ep_vkAllocateCommandBuffers, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkAllocateDescriptorSets", (PFN_vkVoidFunction)vkb_ep_vkAllocateDescriptorSets, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkAllocateMemory", (PFN_vkVoidFunction)vkb_ep_vkAllocateMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkBeginCommandBuffer", (PFN_vkVoidFunction)vkb_ep_vkBeginCommandBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkBindBufferMemory", (PFN_vkVoidFunction)vkb_ep_vkBindBufferMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkBindBufferMemory2", (PFN_vkVoidFunction)vkb_ep_vkBindBufferMemory2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkBindBufferMemory2KHR", (PFN_vkVoidFunction)vkb_ep_vkBindBufferMemory2, VKB_LEVEL_DEVICE, "VK_KHR_bind_memory2", 0}, + {"vkBindImageMemory", (PFN_vkVoidFunction)vkb_ep_vkBindImageMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkBindImageMemory2", (PFN_vkVoidFunction)vkb_ep_vkBindImageMemory2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkBindImageMemory2KHR", (PFN_vkVoidFunction)vkb_ep_vkBindImageMemory2, VKB_LEVEL_DEVICE, "VK_KHR_bind_memory2", 0}, + {"vkBindTensorMemoryARM", (PFN_vkVoidFunction)vkb_ep_vkBindTensorMemoryARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkCmdBeginConditionalRenderingEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginConditionalRenderingEXT, VKB_LEVEL_DEVICE, "VK_EXT_conditional_rendering", 0}, + {"vkCmdBeginCustomResolveEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginCustomResolveEXT, VKB_LEVEL_DEVICE, "VK_EXT_custom_resolve", 0}, + {"vkCmdBeginDebugUtilsLabelEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginDebugUtilsLabelEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkCmdBeginQuery", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginQuery, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBeginQueryIndexedEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginQueryIndexedEXT, VKB_LEVEL_DEVICE, "VK_EXT_transform_feedback", 0}, + {"vkCmdBeginRenderPass", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginRenderPass, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBeginRenderPass2", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginRenderPass2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkCmdBeginRenderPass2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginRenderPass2, VKB_LEVEL_DEVICE, "VK_KHR_create_renderpass2", 0}, + {"vkCmdBeginRendering", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginRendering, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdBeginRenderingKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginRendering, VKB_LEVEL_DEVICE, "VK_KHR_dynamic_rendering", 0}, + {"vkCmdBeginTransformFeedbackEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBeginTransformFeedbackEXT, VKB_LEVEL_DEVICE, "VK_EXT_transform_feedback", 0}, + {"vkCmdBindDescriptorSets", (PFN_vkVoidFunction)vkb_ep_vkCmdBindDescriptorSets, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBindDescriptorSets2", (PFN_vkVoidFunction)vkb_ep_vkCmdBindDescriptorSets2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdBindDescriptorSets2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdBindDescriptorSets2, VKB_LEVEL_DEVICE, "VK_KHR_maintenance6", 0}, + {"vkCmdBindIndexBuffer", (PFN_vkVoidFunction)vkb_ep_vkCmdBindIndexBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBindIndexBuffer2", (PFN_vkVoidFunction)vkb_ep_vkCmdBindIndexBuffer2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdBindIndexBuffer2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdBindIndexBuffer2, VKB_LEVEL_DEVICE, "VK_KHR_maintenance5", 0}, + {"vkCmdBindPipeline", (PFN_vkVoidFunction)vkb_ep_vkCmdBindPipeline, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBindTransformFeedbackBuffersEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBindTransformFeedbackBuffersEXT, VKB_LEVEL_DEVICE, "VK_EXT_transform_feedback", 0}, + {"vkCmdBindVertexBuffers", (PFN_vkVoidFunction)vkb_ep_vkCmdBindVertexBuffers, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBindVertexBuffers2", (PFN_vkVoidFunction)vkb_ep_vkCmdBindVertexBuffers2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdBindVertexBuffers2EXT", (PFN_vkVoidFunction)vkb_ep_vkCmdBindVertexBuffers2, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdBlitImage", (PFN_vkVoidFunction)vkb_ep_vkCmdBlitImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdBlitImage2", (PFN_vkVoidFunction)vkb_ep_vkCmdBlitImage2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdBlitImage2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdBlitImage2, VKB_LEVEL_DEVICE, "VK_KHR_copy_commands2", 0}, + {"vkCmdClearAttachments", (PFN_vkVoidFunction)vkb_ep_vkCmdClearAttachments, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdClearColorImage", (PFN_vkVoidFunction)vkb_ep_vkCmdClearColorImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdClearDepthStencilImage", (PFN_vkVoidFunction)vkb_ep_vkCmdClearDepthStencilImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdCopyBuffer", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdCopyBuffer2", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyBuffer2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdCopyBuffer2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyBuffer2, VKB_LEVEL_DEVICE, "VK_KHR_copy_commands2", 0}, + {"vkCmdCopyBufferToImage", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyBufferToImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdCopyBufferToImage2", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyBufferToImage2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdCopyBufferToImage2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyBufferToImage2, VKB_LEVEL_DEVICE, "VK_KHR_copy_commands2", 0}, + {"vkCmdCopyImage", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdCopyImage2", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyImage2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdCopyImage2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyImage2, VKB_LEVEL_DEVICE, "VK_KHR_copy_commands2", 0}, + {"vkCmdCopyImageToBuffer", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyImageToBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdCopyImageToBuffer2", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyImageToBuffer2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdCopyImageToBuffer2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyImageToBuffer2, VKB_LEVEL_DEVICE, "VK_KHR_copy_commands2", 0}, + {"vkCmdCopyQueryPoolResults", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyQueryPoolResults, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdCopyTensorARM", (PFN_vkVoidFunction)vkb_ep_vkCmdCopyTensorARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkCmdDispatch", (PFN_vkVoidFunction)vkb_ep_vkCmdDispatch, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdDispatchBase", (PFN_vkVoidFunction)vkb_ep_vkCmdDispatchBase, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkCmdDispatchBaseKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdDispatchBase, VKB_LEVEL_DEVICE, "VK_KHR_device_group", 0}, + {"vkCmdDispatchIndirect", (PFN_vkVoidFunction)vkb_ep_vkCmdDispatchIndirect, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdDraw", (PFN_vkVoidFunction)vkb_ep_vkCmdDraw, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdDrawIndexed", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndexed, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdDrawIndexedIndirect", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndexedIndirect, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdDrawIndexedIndirectCount", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndexedIndirectCount, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkCmdDrawIndexedIndirectCountAMD", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndexedIndirectCount, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkCmdDrawIndexedIndirectCountKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndexedIndirectCount, VKB_LEVEL_DEVICE, "VK_KHR_draw_indirect_count", 0}, + {"vkCmdDrawIndirect", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndirect, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdDrawIndirectByteCountEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndirectByteCountEXT, VKB_LEVEL_DEVICE, "VK_EXT_transform_feedback", 0}, + {"vkCmdDrawIndirectCount", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndirectCount, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkCmdDrawIndirectCountAMD", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndirectCount, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkCmdDrawIndirectCountKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawIndirectCount, VKB_LEVEL_DEVICE, "VK_KHR_draw_indirect_count", 0}, + {"vkCmdDrawMultiEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawMultiEXT, VKB_LEVEL_DEVICE, "VK_EXT_multi_draw", 0}, + {"vkCmdDrawMultiIndexedEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdDrawMultiIndexedEXT, VKB_LEVEL_DEVICE, "VK_EXT_multi_draw", 0}, + {"vkCmdEndConditionalRenderingEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdEndConditionalRenderingEXT, VKB_LEVEL_DEVICE, "VK_EXT_conditional_rendering", 0}, + {"vkCmdEndDebugUtilsLabelEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdEndDebugUtilsLabelEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkCmdEndQuery", (PFN_vkVoidFunction)vkb_ep_vkCmdEndQuery, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdEndQueryIndexedEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdEndQueryIndexedEXT, VKB_LEVEL_DEVICE, "VK_EXT_transform_feedback", 0}, + {"vkCmdEndRenderPass", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRenderPass, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdEndRenderPass2", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRenderPass2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkCmdEndRenderPass2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRenderPass2, VKB_LEVEL_DEVICE, "VK_KHR_create_renderpass2", 0}, + {"vkCmdEndRendering", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRendering, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdEndRendering2EXT", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRendering2KHR, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkCmdEndRendering2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRendering2KHR, VKB_LEVEL_DEVICE, "VK_KHR_maintenance10", 0}, + {"vkCmdEndRenderingKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdEndRendering, VKB_LEVEL_DEVICE, "VK_KHR_dynamic_rendering", 0}, + {"vkCmdEndTransformFeedbackEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdEndTransformFeedbackEXT, VKB_LEVEL_DEVICE, "VK_EXT_transform_feedback", 0}, + {"vkCmdExecuteCommands", (PFN_vkVoidFunction)vkb_ep_vkCmdExecuteCommands, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdFillBuffer", (PFN_vkVoidFunction)vkb_ep_vkCmdFillBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdInsertDebugUtilsLabelEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdInsertDebugUtilsLabelEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkCmdNextSubpass", (PFN_vkVoidFunction)vkb_ep_vkCmdNextSubpass, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdNextSubpass2", (PFN_vkVoidFunction)vkb_ep_vkCmdNextSubpass2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkCmdNextSubpass2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdNextSubpass2, VKB_LEVEL_DEVICE, "VK_KHR_create_renderpass2", 0}, + {"vkCmdPipelineBarrier", (PFN_vkVoidFunction)vkb_ep_vkCmdPipelineBarrier, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdPipelineBarrier2", (PFN_vkVoidFunction)vkb_ep_vkCmdPipelineBarrier2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdPipelineBarrier2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdPipelineBarrier2, VKB_LEVEL_DEVICE, "VK_KHR_synchronization2", 0}, + {"vkCmdPushConstants", (PFN_vkVoidFunction)vkb_ep_vkCmdPushConstants, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdPushConstants2", (PFN_vkVoidFunction)vkb_ep_vkCmdPushConstants2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdPushConstants2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdPushConstants2, VKB_LEVEL_DEVICE, "VK_KHR_maintenance6", 0}, + {"vkCmdPushDescriptorSet", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSet, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdPushDescriptorSet2", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSet2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdPushDescriptorSet2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSet2, VKB_LEVEL_DEVICE, "VK_KHR_maintenance6", 0}, + {"vkCmdPushDescriptorSetKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSet, VKB_LEVEL_DEVICE, "VK_KHR_push_descriptor", 0}, + {"vkCmdPushDescriptorSetWithTemplate", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSetWithTemplate, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdPushDescriptorSetWithTemplate2", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSetWithTemplate2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdPushDescriptorSetWithTemplate2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSetWithTemplate2, VKB_LEVEL_DEVICE, "VK_KHR_maintenance6", 0}, + {"vkCmdPushDescriptorSetWithTemplateKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdPushDescriptorSetWithTemplate, VKB_LEVEL_DEVICE, "VK_KHR_push_descriptor", 0}, + {"vkCmdResetEvent", (PFN_vkVoidFunction)vkb_ep_vkCmdResetEvent, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdResetEvent2", (PFN_vkVoidFunction)vkb_ep_vkCmdResetEvent2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdResetEvent2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdResetEvent2, VKB_LEVEL_DEVICE, "VK_KHR_synchronization2", 0}, + {"vkCmdResetQueryPool", (PFN_vkVoidFunction)vkb_ep_vkCmdResetQueryPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdResolveImage", (PFN_vkVoidFunction)vkb_ep_vkCmdResolveImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdResolveImage2", (PFN_vkVoidFunction)vkb_ep_vkCmdResolveImage2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdResolveImage2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdResolveImage2, VKB_LEVEL_DEVICE, "VK_KHR_copy_commands2", 0}, + {"vkCmdSetAlphaToCoverageEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetAlphaToCoverageEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetAlphaToOneEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetAlphaToOneEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetAttachmentFeedbackLoopEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetAttachmentFeedbackLoopEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_attachment_feedback_loop_dynamic_state", 0}, + {"vkCmdSetBlendConstants", (PFN_vkVoidFunction)vkb_ep_vkCmdSetBlendConstants, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetColorBlendAdvancedEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetColorBlendAdvancedEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetColorBlendEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetColorBlendEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetColorBlendEquationEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetColorBlendEquationEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetColorWriteEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetColorWriteEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_color_write_enable", 0}, + {"vkCmdSetColorWriteMaskEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetColorWriteMaskEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetConservativeRasterizationModeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetConservativeRasterizationModeEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetCullMode", (PFN_vkVoidFunction)vkb_ep_vkCmdSetCullMode, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetCullModeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetCullMode, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetDepthBias", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBias, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetDepthBias2EXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBias2EXT, VKB_LEVEL_DEVICE, "VK_EXT_depth_bias_control", 0}, + {"vkCmdSetDepthBiasEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBiasEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetDepthBiasEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBiasEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state2", 0}, + {"vkCmdSetDepthBounds", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBounds, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetDepthBoundsTestEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBoundsTestEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetDepthBoundsTestEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthBoundsTestEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetDepthClampEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthClampEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetDepthClampRangeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthClampRangeEXT, VKB_LEVEL_DEVICE, "VK_EXT_depth_clamp_control", 0}, + {"vkCmdSetDepthClipEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthClipEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetDepthClipNegativeOneToOneEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthClipNegativeOneToOneEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetDepthCompareOp", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthCompareOp, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetDepthCompareOpEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthCompareOp, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetDepthTestEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthTestEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetDepthTestEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthTestEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetDepthWriteEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthWriteEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetDepthWriteEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDepthWriteEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetDeviceMask", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDeviceMask, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkCmdSetDeviceMaskKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDeviceMask, VKB_LEVEL_DEVICE, "VK_KHR_device_group", 0}, + {"vkCmdSetDiscardRectangleEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDiscardRectangleEXT, VKB_LEVEL_DEVICE, "VK_EXT_discard_rectangles", 0}, + {"vkCmdSetDiscardRectangleEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDiscardRectangleEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_discard_rectangles", 0}, + {"vkCmdSetDiscardRectangleModeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetDiscardRectangleModeEXT, VKB_LEVEL_DEVICE, "VK_EXT_discard_rectangles", 0}, + {"vkCmdSetEvent", (PFN_vkVoidFunction)vkb_ep_vkCmdSetEvent, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetEvent2", (PFN_vkVoidFunction)vkb_ep_vkCmdSetEvent2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetEvent2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdSetEvent2, VKB_LEVEL_DEVICE, "VK_KHR_synchronization2", 0}, + {"vkCmdSetExtraPrimitiveOverestimationSizeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetExtraPrimitiveOverestimationSizeEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetFragmentShadingRateKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdSetFragmentShadingRateKHR, VKB_LEVEL_DEVICE, "VK_KHR_fragment_shading_rate", 0}, + {"vkCmdSetFrontFace", (PFN_vkVoidFunction)vkb_ep_vkCmdSetFrontFace, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetFrontFaceEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetFrontFace, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetLineRasterizationModeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLineRasterizationModeEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetLineStipple", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLineStipple, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdSetLineStippleEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLineStipple, VKB_LEVEL_DEVICE, "VK_EXT_line_rasterization", 0}, + {"vkCmdSetLineStippleEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLineStippleEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetLineStippleKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLineStipple, VKB_LEVEL_DEVICE, "VK_KHR_line_rasterization", 0}, + {"vkCmdSetLineWidth", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLineWidth, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetLogicOpEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLogicOpEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state2", 0}, + {"vkCmdSetLogicOpEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetLogicOpEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetPatchControlPointsEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetPatchControlPointsEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state2", 0}, + {"vkCmdSetPolygonModeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetPolygonModeEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetPrimitiveRestartEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetPrimitiveRestartEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetPrimitiveRestartEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetPrimitiveRestartEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state2", 0}, + {"vkCmdSetPrimitiveTopology", (PFN_vkVoidFunction)vkb_ep_vkCmdSetPrimitiveTopology, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetPrimitiveTopologyEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetPrimitiveTopology, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetProvokingVertexModeEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetProvokingVertexModeEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetRasterizationSamplesEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRasterizationSamplesEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetRasterizationStreamEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRasterizationStreamEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetRasterizerDiscardEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRasterizerDiscardEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetRasterizerDiscardEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRasterizerDiscardEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state2", 0}, + {"vkCmdSetRenderingAttachmentLocations", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRenderingAttachmentLocations, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdSetRenderingAttachmentLocationsKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRenderingAttachmentLocations, VKB_LEVEL_DEVICE, "VK_KHR_dynamic_rendering_local_read", 0}, + {"vkCmdSetRenderingInputAttachmentIndices", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRenderingInputAttachmentIndices, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCmdSetRenderingInputAttachmentIndicesKHR", (PFN_vkVoidFunction)vkb_ep_vkCmdSetRenderingInputAttachmentIndices, VKB_LEVEL_DEVICE, "VK_KHR_dynamic_rendering_local_read", 0}, + {"vkCmdSetSampleLocationsEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetSampleLocationsEXT, VKB_LEVEL_DEVICE, "VK_EXT_sample_locations", 0}, + {"vkCmdSetSampleLocationsEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetSampleLocationsEnableEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetSampleMaskEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetSampleMaskEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetScissor", (PFN_vkVoidFunction)vkb_ep_vkCmdSetScissor, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetScissorWithCount", (PFN_vkVoidFunction)vkb_ep_vkCmdSetScissorWithCount, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetScissorWithCountEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetScissorWithCount, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetStencilCompareMask", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilCompareMask, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetStencilOp", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilOp, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetStencilOpEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilOp, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetStencilReference", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilReference, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetStencilTestEnable", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilTestEnable, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetStencilTestEnableEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilTestEnable, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdSetStencilWriteMask", (PFN_vkVoidFunction)vkb_ep_vkCmdSetStencilWriteMask, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetTessellationDomainOriginEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetTessellationDomainOriginEXT, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state3", 0}, + {"vkCmdSetVertexInputEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetVertexInputEXT, VKB_LEVEL_DEVICE, "VK_EXT_vertex_input_dynamic_state", 0}, + {"vkCmdSetViewport", (PFN_vkVoidFunction)vkb_ep_vkCmdSetViewport, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdSetViewportWithCount", (PFN_vkVoidFunction)vkb_ep_vkCmdSetViewportWithCount, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdSetViewportWithCountEXT", (PFN_vkVoidFunction)vkb_ep_vkCmdSetViewportWithCount, VKB_LEVEL_DEVICE, "VK_EXT_extended_dynamic_state", 0}, + {"vkCmdUpdateBuffer", (PFN_vkVoidFunction)vkb_ep_vkCmdUpdateBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdWaitEvents", (PFN_vkVoidFunction)vkb_ep_vkCmdWaitEvents, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdWaitEvents2", (PFN_vkVoidFunction)vkb_ep_vkCmdWaitEvents2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdWaitEvents2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdWaitEvents2, VKB_LEVEL_DEVICE, "VK_KHR_synchronization2", 0}, + {"vkCmdWriteTimestamp", (PFN_vkVoidFunction)vkb_ep_vkCmdWriteTimestamp, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCmdWriteTimestamp2", (PFN_vkVoidFunction)vkb_ep_vkCmdWriteTimestamp2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCmdWriteTimestamp2KHR", (PFN_vkVoidFunction)vkb_ep_vkCmdWriteTimestamp2, VKB_LEVEL_DEVICE, "VK_KHR_synchronization2", 0}, + {"vkCopyImageToImage", (PFN_vkVoidFunction)vkb_ep_vkCopyImageToImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCopyImageToImageEXT", (PFN_vkVoidFunction)vkb_ep_vkCopyImageToImage, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkCopyImageToMemory", (PFN_vkVoidFunction)vkb_ep_vkCopyImageToMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCopyImageToMemoryEXT", (PFN_vkVoidFunction)vkb_ep_vkCopyImageToMemory, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkCopyMemoryToImage", (PFN_vkVoidFunction)vkb_ep_vkCopyMemoryToImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkCopyMemoryToImageEXT", (PFN_vkVoidFunction)vkb_ep_vkCopyMemoryToImage, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkCreateBuffer", (PFN_vkVoidFunction)vkb_ep_vkCreateBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateBufferView", (PFN_vkVoidFunction)vkb_ep_vkCreateBufferView, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateCommandPool", (PFN_vkVoidFunction)vkb_ep_vkCreateCommandPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateComputePipelines", (PFN_vkVoidFunction)vkb_ep_vkCreateComputePipelines, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateDebugUtilsMessengerEXT", (PFN_vkVoidFunction)vkb_ep_vkCreateDebugUtilsMessengerEXT, VKB_LEVEL_INSTANCE, "VK_EXT_debug_utils", 0}, + {"vkCreateDescriptorPool", (PFN_vkVoidFunction)vkb_ep_vkCreateDescriptorPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateDescriptorSetLayout", (PFN_vkVoidFunction)vkb_ep_vkCreateDescriptorSetLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateDescriptorUpdateTemplate", (PFN_vkVoidFunction)vkb_ep_vkCreateDescriptorUpdateTemplate, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkCreateDescriptorUpdateTemplateKHR", (PFN_vkVoidFunction)vkb_ep_vkCreateDescriptorUpdateTemplate, VKB_LEVEL_DEVICE, "VK_KHR_descriptor_update_template", 0}, + {"vkCreateDevice", (PFN_vkVoidFunction)vkb_ep_vkCreateDevice, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateEvent", (PFN_vkVoidFunction)vkb_ep_vkCreateEvent, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateFence", (PFN_vkVoidFunction)vkb_ep_vkCreateFence, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateFramebuffer", (PFN_vkVoidFunction)vkb_ep_vkCreateFramebuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateGraphicsPipelines", (PFN_vkVoidFunction)vkb_ep_vkCreateGraphicsPipelines, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateHeadlessSurfaceEXT", (PFN_vkVoidFunction)vkb_ep_vkCreateHeadlessSurfaceEXT, VKB_LEVEL_INSTANCE, "VK_EXT_headless_surface", 0}, + {"vkCreateImage", (PFN_vkVoidFunction)vkb_ep_vkCreateImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateImageView", (PFN_vkVoidFunction)vkb_ep_vkCreateImageView, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateInstance", (PFN_vkVoidFunction)vkb_ep_vkCreateInstance, VKB_LEVEL_GLOBAL, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreatePipelineCache", (PFN_vkVoidFunction)vkb_ep_vkCreatePipelineCache, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreatePipelineLayout", (PFN_vkVoidFunction)vkb_ep_vkCreatePipelineLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreatePrivateDataSlot", (PFN_vkVoidFunction)vkb_ep_vkCreatePrivateDataSlot, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkCreatePrivateDataSlotEXT", (PFN_vkVoidFunction)vkb_ep_vkCreatePrivateDataSlot, VKB_LEVEL_DEVICE, "VK_EXT_private_data", 0}, + {"vkCreateQueryPool", (PFN_vkVoidFunction)vkb_ep_vkCreateQueryPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateRenderPass", (PFN_vkVoidFunction)vkb_ep_vkCreateRenderPass, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateRenderPass2", (PFN_vkVoidFunction)vkb_ep_vkCreateRenderPass2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkCreateRenderPass2KHR", (PFN_vkVoidFunction)vkb_ep_vkCreateRenderPass2, VKB_LEVEL_DEVICE, "VK_KHR_create_renderpass2", 0}, + {"vkCreateSampler", (PFN_vkVoidFunction)vkb_ep_vkCreateSampler, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateSamplerYcbcrConversion", (PFN_vkVoidFunction)vkb_ep_vkCreateSamplerYcbcrConversion, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkCreateSamplerYcbcrConversionKHR", (PFN_vkVoidFunction)vkb_ep_vkCreateSamplerYcbcrConversion, VKB_LEVEL_DEVICE, "VK_KHR_sampler_ycbcr_conversion", 0}, + {"vkCreateSemaphore", (PFN_vkVoidFunction)vkb_ep_vkCreateSemaphore, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateShaderModule", (PFN_vkVoidFunction)vkb_ep_vkCreateShaderModule, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkCreateSwapchainKHR", (PFN_vkVoidFunction)vkb_ep_vkCreateSwapchainKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkCreateTensorARM", (PFN_vkVoidFunction)vkb_ep_vkCreateTensorARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkCreateTensorViewARM", (PFN_vkVoidFunction)vkb_ep_vkCreateTensorViewARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkCreateWaylandSurfaceKHR", (PFN_vkVoidFunction)vkb_ep_vkCreateWaylandSurfaceKHR, VKB_LEVEL_INSTANCE, "VK_KHR_wayland_surface", 0}, + {"vkCreateXcbSurfaceKHR", (PFN_vkVoidFunction)vkb_ep_vkCreateXcbSurfaceKHR, VKB_LEVEL_INSTANCE, "VK_KHR_xcb_surface", 0}, + {"vkCreateXlibSurfaceKHR", (PFN_vkVoidFunction)vkb_ep_vkCreateXlibSurfaceKHR, VKB_LEVEL_INSTANCE, "VK_KHR_xlib_surface", 0}, + {"vkDestroyBuffer", (PFN_vkVoidFunction)vkb_ep_vkDestroyBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyBufferView", (PFN_vkVoidFunction)vkb_ep_vkDestroyBufferView, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyCommandPool", (PFN_vkVoidFunction)vkb_ep_vkDestroyCommandPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyDebugUtilsMessengerEXT", (PFN_vkVoidFunction)vkb_ep_vkDestroyDebugUtilsMessengerEXT, VKB_LEVEL_INSTANCE, "VK_EXT_debug_utils", 0}, + {"vkDestroyDescriptorPool", (PFN_vkVoidFunction)vkb_ep_vkDestroyDescriptorPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyDescriptorSetLayout", (PFN_vkVoidFunction)vkb_ep_vkDestroyDescriptorSetLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyDescriptorUpdateTemplate", (PFN_vkVoidFunction)vkb_ep_vkDestroyDescriptorUpdateTemplate, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkDestroyDescriptorUpdateTemplateKHR", (PFN_vkVoidFunction)vkb_ep_vkDestroyDescriptorUpdateTemplate, VKB_LEVEL_DEVICE, "VK_KHR_descriptor_update_template", 0}, + {"vkDestroyDevice", (PFN_vkVoidFunction)vkb_ep_vkDestroyDevice, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyEvent", (PFN_vkVoidFunction)vkb_ep_vkDestroyEvent, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyFence", (PFN_vkVoidFunction)vkb_ep_vkDestroyFence, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyFramebuffer", (PFN_vkVoidFunction)vkb_ep_vkDestroyFramebuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyImage", (PFN_vkVoidFunction)vkb_ep_vkDestroyImage, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyImageView", (PFN_vkVoidFunction)vkb_ep_vkDestroyImageView, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyInstance", (PFN_vkVoidFunction)vkb_ep_vkDestroyInstance, VKB_LEVEL_INSTANCE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyPipeline", (PFN_vkVoidFunction)vkb_ep_vkDestroyPipeline, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyPipelineCache", (PFN_vkVoidFunction)vkb_ep_vkDestroyPipelineCache, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyPipelineLayout", (PFN_vkVoidFunction)vkb_ep_vkDestroyPipelineLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyPrivateDataSlot", (PFN_vkVoidFunction)vkb_ep_vkDestroyPrivateDataSlot, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkDestroyPrivateDataSlotEXT", (PFN_vkVoidFunction)vkb_ep_vkDestroyPrivateDataSlot, VKB_LEVEL_DEVICE, "VK_EXT_private_data", 0}, + {"vkDestroyQueryPool", (PFN_vkVoidFunction)vkb_ep_vkDestroyQueryPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyRenderPass", (PFN_vkVoidFunction)vkb_ep_vkDestroyRenderPass, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroySampler", (PFN_vkVoidFunction)vkb_ep_vkDestroySampler, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroySamplerYcbcrConversion", (PFN_vkVoidFunction)vkb_ep_vkDestroySamplerYcbcrConversion, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkDestroySamplerYcbcrConversionKHR", (PFN_vkVoidFunction)vkb_ep_vkDestroySamplerYcbcrConversion, VKB_LEVEL_DEVICE, "VK_KHR_sampler_ycbcr_conversion", 0}, + {"vkDestroySemaphore", (PFN_vkVoidFunction)vkb_ep_vkDestroySemaphore, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroyShaderModule", (PFN_vkVoidFunction)vkb_ep_vkDestroyShaderModule, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkDestroySurfaceKHR", (PFN_vkVoidFunction)vkb_ep_vkDestroySurfaceKHR, VKB_LEVEL_INSTANCE, "VK_KHR_surface", 0}, + {"vkDestroySwapchainKHR", (PFN_vkVoidFunction)vkb_ep_vkDestroySwapchainKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkDestroyTensorARM", (PFN_vkVoidFunction)vkb_ep_vkDestroyTensorARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkDestroyTensorViewARM", (PFN_vkVoidFunction)vkb_ep_vkDestroyTensorViewARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkDeviceWaitIdle", (PFN_vkVoidFunction)vkb_ep_vkDeviceWaitIdle, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkEndCommandBuffer", (PFN_vkVoidFunction)vkb_ep_vkEndCommandBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkEnumerateDeviceExtensionProperties", (PFN_vkVoidFunction)vkb_ep_vkEnumerateDeviceExtensionProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkEnumerateDeviceLayerProperties", (PFN_vkVoidFunction)vkb_ep_vkEnumerateDeviceLayerProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkEnumerateInstanceExtensionProperties", (PFN_vkVoidFunction)vkb_ep_vkEnumerateInstanceExtensionProperties, VKB_LEVEL_GLOBAL, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkEnumerateInstanceLayerProperties", (PFN_vkVoidFunction)vkb_ep_vkEnumerateInstanceLayerProperties, VKB_LEVEL_GLOBAL, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkEnumerateInstanceVersion", (PFN_vkVoidFunction)vkb_ep_vkEnumerateInstanceVersion, VKB_LEVEL_GLOBAL, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkEnumeratePhysicalDeviceGroups", (PFN_vkVoidFunction)vkb_ep_vkEnumeratePhysicalDeviceGroups, VKB_LEVEL_INSTANCE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkEnumeratePhysicalDeviceGroupsKHR", (PFN_vkVoidFunction)vkb_ep_vkEnumeratePhysicalDeviceGroups, VKB_LEVEL_INSTANCE, "VK_KHR_device_group_creation", 0}, + {"vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", (PFN_vkVoidFunction)vkb_ep_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, VKB_LEVEL_PHYSDEV, "VK_ARM_performance_counters_by_region", 0}, + {"vkEnumeratePhysicalDevices", (PFN_vkVoidFunction)vkb_ep_vkEnumeratePhysicalDevices, VKB_LEVEL_INSTANCE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkFlushMappedMemoryRanges", (PFN_vkVoidFunction)vkb_ep_vkFlushMappedMemoryRanges, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkFreeCommandBuffers", (PFN_vkVoidFunction)vkb_ep_vkFreeCommandBuffers, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkFreeDescriptorSets", (PFN_vkVoidFunction)vkb_ep_vkFreeDescriptorSets, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkFreeMemory", (PFN_vkVoidFunction)vkb_ep_vkFreeMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetBufferDeviceAddress", (PFN_vkVoidFunction)vkb_ep_vkGetBufferDeviceAddress, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkGetBufferDeviceAddressEXT", (PFN_vkVoidFunction)vkb_ep_vkGetBufferDeviceAddress, VKB_LEVEL_DEVICE, "VK_EXT_buffer_device_address", 0}, + {"vkGetBufferDeviceAddressKHR", (PFN_vkVoidFunction)vkb_ep_vkGetBufferDeviceAddress, VKB_LEVEL_DEVICE, "VK_KHR_buffer_device_address", 0}, + {"vkGetBufferMemoryRequirements", (PFN_vkVoidFunction)vkb_ep_vkGetBufferMemoryRequirements, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetBufferMemoryRequirements2", (PFN_vkVoidFunction)vkb_ep_vkGetBufferMemoryRequirements2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetBufferMemoryRequirements2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetBufferMemoryRequirements2, VKB_LEVEL_DEVICE, "VK_KHR_get_memory_requirements2", 0}, + {"vkGetBufferOpaqueCaptureAddress", (PFN_vkVoidFunction)vkb_ep_vkGetBufferOpaqueCaptureAddress, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkGetBufferOpaqueCaptureAddressKHR", (PFN_vkVoidFunction)vkb_ep_vkGetBufferOpaqueCaptureAddress, VKB_LEVEL_DEVICE, "VK_KHR_buffer_device_address", 0}, + {"vkGetCalibratedTimestampsEXT", (PFN_vkVoidFunction)vkb_ep_vkGetCalibratedTimestampsKHR, VKB_LEVEL_DEVICE, "VK_EXT_calibrated_timestamps", 0}, + {"vkGetCalibratedTimestampsKHR", (PFN_vkVoidFunction)vkb_ep_vkGetCalibratedTimestampsKHR, VKB_LEVEL_DEVICE, "VK_EXT_calibrated_timestamps", 0}, + {"vkGetDescriptorSetLayoutSupport", (PFN_vkVoidFunction)vkb_ep_vkGetDescriptorSetLayoutSupport, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetDescriptorSetLayoutSupportKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDescriptorSetLayoutSupport, VKB_LEVEL_DEVICE, "VK_KHR_maintenance3", 0}, + {"vkGetDeviceBufferMemoryRequirements", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceBufferMemoryRequirements, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkGetDeviceBufferMemoryRequirementsKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceBufferMemoryRequirements, VKB_LEVEL_DEVICE, "VK_KHR_maintenance4", 0}, + {"vkGetDeviceGroupPeerMemoryFeatures", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceGroupPeerMemoryFeatures, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetDeviceGroupPeerMemoryFeaturesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceGroupPeerMemoryFeatures, VKB_LEVEL_DEVICE, "VK_KHR_device_group", 0}, + {"vkGetDeviceGroupPresentCapabilitiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceGroupPresentCapabilitiesKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkGetDeviceGroupSurfacePresentModesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceGroupSurfacePresentModesKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkGetDeviceImageMemoryRequirements", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceImageMemoryRequirements, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkGetDeviceImageMemoryRequirementsKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceImageMemoryRequirements, VKB_LEVEL_DEVICE, "VK_KHR_maintenance4", 0}, + {"vkGetDeviceImageSparseMemoryRequirements", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceImageSparseMemoryRequirements, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkGetDeviceImageSparseMemoryRequirementsKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceImageSparseMemoryRequirements, VKB_LEVEL_DEVICE, "VK_KHR_maintenance4", 0}, + {"vkGetDeviceImageSubresourceLayout", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceImageSubresourceLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkGetDeviceImageSubresourceLayoutKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceImageSubresourceLayout, VKB_LEVEL_DEVICE, "VK_KHR_maintenance5", 0}, + {"vkGetDeviceMemoryCommitment", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceMemoryCommitment, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetDeviceMemoryOpaqueCaptureAddress", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceMemoryOpaqueCaptureAddress, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkGetDeviceMemoryOpaqueCaptureAddressKHR", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceMemoryOpaqueCaptureAddress, VKB_LEVEL_DEVICE, "VK_KHR_buffer_device_address", 0}, + {"vkGetDeviceProcAddr", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceProcAddr, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetDeviceQueue", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceQueue, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetDeviceQueue2", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceQueue2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetDeviceTensorMemoryRequirementsARM", (PFN_vkVoidFunction)vkb_ep_vkGetDeviceTensorMemoryRequirementsARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkGetEventStatus", (PFN_vkVoidFunction)vkb_ep_vkGetEventStatus, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetFenceFdKHR", (PFN_vkVoidFunction)vkb_ep_vkGetFenceFdKHR, VKB_LEVEL_DEVICE, "VK_KHR_external_fence_fd", 0}, + {"vkGetFenceStatus", (PFN_vkVoidFunction)vkb_ep_vkGetFenceStatus, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetImageDrmFormatModifierPropertiesEXT", (PFN_vkVoidFunction)vkb_ep_vkGetImageDrmFormatModifierPropertiesEXT, VKB_LEVEL_DEVICE, "VK_EXT_image_drm_format_modifier", 0}, + {"vkGetImageMemoryRequirements", (PFN_vkVoidFunction)vkb_ep_vkGetImageMemoryRequirements, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetImageMemoryRequirements2", (PFN_vkVoidFunction)vkb_ep_vkGetImageMemoryRequirements2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetImageMemoryRequirements2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetImageMemoryRequirements2, VKB_LEVEL_DEVICE, "VK_KHR_get_memory_requirements2", 0}, + {"vkGetImageSparseMemoryRequirements", (PFN_vkVoidFunction)vkb_ep_vkGetImageSparseMemoryRequirements, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetImageSparseMemoryRequirements2", (PFN_vkVoidFunction)vkb_ep_vkGetImageSparseMemoryRequirements2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetImageSparseMemoryRequirements2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetImageSparseMemoryRequirements2, VKB_LEVEL_DEVICE, "VK_KHR_get_memory_requirements2", 0}, + {"vkGetImageSubresourceLayout", (PFN_vkVoidFunction)vkb_ep_vkGetImageSubresourceLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetImageSubresourceLayout2", (PFN_vkVoidFunction)vkb_ep_vkGetImageSubresourceLayout2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkGetImageSubresourceLayout2EXT", (PFN_vkVoidFunction)vkb_ep_vkGetImageSubresourceLayout2, VKB_LEVEL_DEVICE, "VK_EXT_image_compression_control", 0}, + {"vkGetImageSubresourceLayout2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetImageSubresourceLayout2, VKB_LEVEL_DEVICE, "VK_KHR_maintenance5", 0}, + {"vkGetInstanceProcAddr", (PFN_vkVoidFunction)vkb_ep_vkGetInstanceProcAddr, VKB_LEVEL_INSTANCE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetMemoryFdKHR", (PFN_vkVoidFunction)vkb_ep_vkGetMemoryFdKHR, VKB_LEVEL_DEVICE, "VK_KHR_external_memory_fd", 0}, + {"vkGetMemoryFdPropertiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetMemoryFdPropertiesKHR, VKB_LEVEL_DEVICE, "VK_KHR_external_memory_fd", 0}, + {"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, VKB_LEVEL_PHYSDEV, "VK_EXT_calibrated_timestamps", 0}, + {"vkGetPhysicalDeviceCalibrateableTimeDomainsKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, VKB_LEVEL_PHYSDEV, "VK_EXT_calibrated_timestamps", 0}, + {"vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_cooperative_matrix", 0}, + {"vkGetPhysicalDeviceExternalBufferProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalBufferProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceExternalBufferPropertiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalBufferProperties, VKB_LEVEL_PHYSDEV, "VK_KHR_external_memory_capabilities", 0}, + {"vkGetPhysicalDeviceExternalFenceProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalFenceProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceExternalFencePropertiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalFenceProperties, VKB_LEVEL_PHYSDEV, "VK_KHR_external_fence_capabilities", 0}, + {"vkGetPhysicalDeviceExternalSemaphoreProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalSemaphoreProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalSemaphoreProperties, VKB_LEVEL_PHYSDEV, "VK_KHR_external_semaphore_capabilities", 0}, + {"vkGetPhysicalDeviceExternalTensorPropertiesARM", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceExternalTensorPropertiesARM, VKB_LEVEL_PHYSDEV, "VK_ARM_tensors", 0}, + {"vkGetPhysicalDeviceFeatures", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFeatures, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceFeatures2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFeatures2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceFeatures2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFeatures2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceFormatProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFormatProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceFormatProperties2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFormatProperties2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceFormatProperties2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFormatProperties2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceFragmentShadingRatesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceFragmentShadingRatesKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_fragment_shading_rate", 0}, + {"vkGetPhysicalDeviceImageFormatProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceImageFormatProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceImageFormatProperties2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceImageFormatProperties2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceImageFormatProperties2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceImageFormatProperties2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceMemoryProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceMemoryProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceMemoryProperties2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceMemoryProperties2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceMemoryProperties2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceMemoryProperties2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceMultisamplePropertiesEXT", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceMultisamplePropertiesEXT, VKB_LEVEL_PHYSDEV, "VK_EXT_sample_locations", 0}, + {"vkGetPhysicalDevicePresentRectanglesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDevicePresentRectanglesKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_swapchain", 0}, + {"vkGetPhysicalDeviceProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceProperties2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceProperties2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceProperties2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceProperties2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceQueueFamilyProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceQueueFamilyProperties2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceQueueFamilyProperties2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceQueueFamilyProperties2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceSparseImageFormatProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPhysicalDeviceSparseImageFormatProperties2", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties2, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkGetPhysicalDeviceSparseImageFormatProperties2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSparseImageFormatProperties2, VKB_LEVEL_PHYSDEV, "VK_KHR_get_physical_device_properties2", 0}, + {"vkGetPhysicalDeviceSurfaceCapabilities2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSurfaceCapabilities2KHR, VKB_LEVEL_PHYSDEV, "VK_KHR_get_surface_capabilities2", 0}, + {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSurfaceCapabilitiesKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_surface", 0}, + {"vkGetPhysicalDeviceSurfaceFormats2KHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSurfaceFormats2KHR, VKB_LEVEL_PHYSDEV, "VK_KHR_get_surface_capabilities2", 0}, + {"vkGetPhysicalDeviceSurfaceFormatsKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSurfaceFormatsKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_surface", 0}, + {"vkGetPhysicalDeviceSurfacePresentModesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSurfacePresentModesKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_surface", 0}, + {"vkGetPhysicalDeviceSurfaceSupportKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceSurfaceSupportKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_surface", 0}, + {"vkGetPhysicalDeviceToolProperties", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceToolProperties, VKB_LEVEL_PHYSDEV, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkGetPhysicalDeviceToolPropertiesEXT", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceToolProperties, VKB_LEVEL_PHYSDEV, "VK_EXT_tooling_info", 0}, + {"vkGetPhysicalDeviceWaylandPresentationSupportKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceWaylandPresentationSupportKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_wayland_surface", 0}, + {"vkGetPhysicalDeviceXcbPresentationSupportKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceXcbPresentationSupportKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_xcb_surface", 0}, + {"vkGetPhysicalDeviceXlibPresentationSupportKHR", (PFN_vkVoidFunction)vkb_ep_vkGetPhysicalDeviceXlibPresentationSupportKHR, VKB_LEVEL_PHYSDEV, "VK_KHR_xlib_surface", 0}, + {"vkGetPipelineCacheData", (PFN_vkVoidFunction)vkb_ep_vkGetPipelineCacheData, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetPrivateData", (PFN_vkVoidFunction)vkb_ep_vkGetPrivateData, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkGetPrivateDataEXT", (PFN_vkVoidFunction)vkb_ep_vkGetPrivateData, VKB_LEVEL_DEVICE, "VK_EXT_private_data", 0}, + {"vkGetQueryPoolResults", (PFN_vkVoidFunction)vkb_ep_vkGetQueryPoolResults, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetRenderAreaGranularity", (PFN_vkVoidFunction)vkb_ep_vkGetRenderAreaGranularity, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkGetRenderingAreaGranularity", (PFN_vkVoidFunction)vkb_ep_vkGetRenderingAreaGranularity, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkGetRenderingAreaGranularityKHR", (PFN_vkVoidFunction)vkb_ep_vkGetRenderingAreaGranularity, VKB_LEVEL_DEVICE, "VK_KHR_maintenance5", 0}, + {"vkGetSemaphoreCounterValue", (PFN_vkVoidFunction)vkb_ep_vkGetSemaphoreCounterValue, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkGetSemaphoreCounterValueKHR", (PFN_vkVoidFunction)vkb_ep_vkGetSemaphoreCounterValue, VKB_LEVEL_DEVICE, "VK_KHR_timeline_semaphore", 0}, + {"vkGetSemaphoreFdKHR", (PFN_vkVoidFunction)vkb_ep_vkGetSemaphoreFdKHR, VKB_LEVEL_DEVICE, "VK_KHR_external_semaphore_fd", 0}, + {"vkGetShaderModuleCreateInfoIdentifierEXT", (PFN_vkVoidFunction)vkb_ep_vkGetShaderModuleCreateInfoIdentifierEXT, VKB_LEVEL_DEVICE, "VK_EXT_shader_module_identifier", 0}, + {"vkGetShaderModuleIdentifierEXT", (PFN_vkVoidFunction)vkb_ep_vkGetShaderModuleIdentifierEXT, VKB_LEVEL_DEVICE, "VK_EXT_shader_module_identifier", 0}, + {"vkGetSwapchainImagesKHR", (PFN_vkVoidFunction)vkb_ep_vkGetSwapchainImagesKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkGetTensorMemoryRequirementsARM", (PFN_vkVoidFunction)vkb_ep_vkGetTensorMemoryRequirementsARM, VKB_LEVEL_DEVICE, "VK_ARM_tensors", 0}, + {"vkImportFenceFdKHR", (PFN_vkVoidFunction)vkb_ep_vkImportFenceFdKHR, VKB_LEVEL_DEVICE, "VK_KHR_external_fence_fd", 0}, + {"vkImportSemaphoreFdKHR", (PFN_vkVoidFunction)vkb_ep_vkImportSemaphoreFdKHR, VKB_LEVEL_DEVICE, "VK_KHR_external_semaphore_fd", 0}, + {"vkInvalidateMappedMemoryRanges", (PFN_vkVoidFunction)vkb_ep_vkInvalidateMappedMemoryRanges, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkMapMemory", (PFN_vkVoidFunction)vkb_ep_vkMapMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkMapMemory2", (PFN_vkVoidFunction)vkb_ep_vkMapMemory2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkMapMemory2KHR", (PFN_vkVoidFunction)vkb_ep_vkMapMemory2, VKB_LEVEL_DEVICE, "VK_KHR_map_memory2", 0}, + {"vkMergePipelineCaches", (PFN_vkVoidFunction)vkb_ep_vkMergePipelineCaches, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkQueueBeginDebugUtilsLabelEXT", (PFN_vkVoidFunction)vkb_ep_vkQueueBeginDebugUtilsLabelEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkQueueBindSparse", (PFN_vkVoidFunction)vkb_ep_vkQueueBindSparse, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkQueueEndDebugUtilsLabelEXT", (PFN_vkVoidFunction)vkb_ep_vkQueueEndDebugUtilsLabelEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkQueueInsertDebugUtilsLabelEXT", (PFN_vkVoidFunction)vkb_ep_vkQueueInsertDebugUtilsLabelEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkQueuePresentKHR", (PFN_vkVoidFunction)vkb_ep_vkQueuePresentKHR, VKB_LEVEL_DEVICE, "VK_KHR_swapchain", 0}, + {"vkQueueSubmit", (PFN_vkVoidFunction)vkb_ep_vkQueueSubmit, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkQueueSubmit2", (PFN_vkVoidFunction)vkb_ep_vkQueueSubmit2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkQueueSubmit2KHR", (PFN_vkVoidFunction)vkb_ep_vkQueueSubmit2, VKB_LEVEL_DEVICE, "VK_KHR_synchronization2", 0}, + {"vkQueueWaitIdle", (PFN_vkVoidFunction)vkb_ep_vkQueueWaitIdle, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkResetCommandBuffer", (PFN_vkVoidFunction)vkb_ep_vkResetCommandBuffer, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkResetCommandPool", (PFN_vkVoidFunction)vkb_ep_vkResetCommandPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkResetDescriptorPool", (PFN_vkVoidFunction)vkb_ep_vkResetDescriptorPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkResetEvent", (PFN_vkVoidFunction)vkb_ep_vkResetEvent, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkResetFences", (PFN_vkVoidFunction)vkb_ep_vkResetFences, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkResetQueryPool", (PFN_vkVoidFunction)vkb_ep_vkResetQueryPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkResetQueryPoolEXT", (PFN_vkVoidFunction)vkb_ep_vkResetQueryPool, VKB_LEVEL_DEVICE, "VK_EXT_host_query_reset", 0}, + {"vkSetDebugUtilsObjectNameEXT", (PFN_vkVoidFunction)vkb_ep_vkSetDebugUtilsObjectNameEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkSetDebugUtilsObjectTagEXT", (PFN_vkVoidFunction)vkb_ep_vkSetDebugUtilsObjectTagEXT, VKB_LEVEL_DEVICE, "VK_EXT_debug_utils", 0}, + {"vkSetDeviceMemoryPriorityEXT", (PFN_vkVoidFunction)vkb_ep_vkSetDeviceMemoryPriorityEXT, VKB_LEVEL_DEVICE, "VK_EXT_pageable_device_local_memory", 0}, + {"vkSetEvent", (PFN_vkVoidFunction)vkb_ep_vkSetEvent, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkSetPrivateData", (PFN_vkVoidFunction)vkb_ep_vkSetPrivateData, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 3, 0)}, + {"vkSetPrivateDataEXT", (PFN_vkVoidFunction)vkb_ep_vkSetPrivateData, VKB_LEVEL_DEVICE, "VK_EXT_private_data", 0}, + {"vkSignalSemaphore", (PFN_vkVoidFunction)vkb_ep_vkSignalSemaphore, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkSignalSemaphoreKHR", (PFN_vkVoidFunction)vkb_ep_vkSignalSemaphore, VKB_LEVEL_DEVICE, "VK_KHR_timeline_semaphore", 0}, + {"vkSubmitDebugUtilsMessageEXT", (PFN_vkVoidFunction)vkb_ep_vkSubmitDebugUtilsMessageEXT, VKB_LEVEL_INSTANCE, "VK_EXT_debug_utils", 0}, + {"vkTransitionImageLayout", (PFN_vkVoidFunction)vkb_ep_vkTransitionImageLayout, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkTransitionImageLayoutEXT", (PFN_vkVoidFunction)vkb_ep_vkTransitionImageLayout, VKB_LEVEL_DEVICE, NULL, 0}, + {"vkTrimCommandPool", (PFN_vkVoidFunction)vkb_ep_vkTrimCommandPool, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkTrimCommandPoolKHR", (PFN_vkVoidFunction)vkb_ep_vkTrimCommandPool, VKB_LEVEL_DEVICE, "VK_KHR_maintenance1", 0}, + {"vkUnmapMemory", (PFN_vkVoidFunction)vkb_ep_vkUnmapMemory, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkUnmapMemory2", (PFN_vkVoidFunction)vkb_ep_vkUnmapMemory2, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 4, 0)}, + {"vkUnmapMemory2KHR", (PFN_vkVoidFunction)vkb_ep_vkUnmapMemory2, VKB_LEVEL_DEVICE, "VK_KHR_map_memory2", 0}, + {"vkUpdateDescriptorSetWithTemplate", (PFN_vkVoidFunction)vkb_ep_vkUpdateDescriptorSetWithTemplate, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 1, 0)}, + {"vkUpdateDescriptorSetWithTemplateKHR", (PFN_vkVoidFunction)vkb_ep_vkUpdateDescriptorSetWithTemplate, VKB_LEVEL_DEVICE, "VK_KHR_descriptor_update_template", 0}, + {"vkUpdateDescriptorSets", (PFN_vkVoidFunction)vkb_ep_vkUpdateDescriptorSets, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkWaitForFences", (PFN_vkVoidFunction)vkb_ep_vkWaitForFences, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 0, 0)}, + {"vkWaitSemaphores", (PFN_vkVoidFunction)vkb_ep_vkWaitSemaphores, VKB_LEVEL_DEVICE, NULL, VK_MAKE_API_VERSION(0, 1, 2, 0)}, + {"vkWaitSemaphoresKHR", (PFN_vkVoidFunction)vkb_ep_vkWaitSemaphores, VKB_LEVEL_DEVICE, "VK_KHR_timeline_semaphore", 0}, +}; +const size_t vkb_client_proc_count = sizeof(vkb_client_procs) / sizeof(vkb_client_procs[0]); diff --git a/tools/vkbridge/common/gen/vkb_gen_server.c b/tools/vkbridge/common/gen/vkb_gen_server.c new file mode 100644 index 000000000..a03a15dca --- /dev/null +++ b/tools/vkbridge/common/gen/vkb_gen_server.c @@ -0,0 +1,7718 @@ +/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */ + +#include "vkb_gen.h" +#include "../vkb_wire.h" +#include "vkb_server_gen.h" +#include "../vkb_server_iface.h" +#include + +void vkb_dispatch_load_instance(vkb_dispatch *dt, PFN_vkGetInstanceProcAddr gipa, VkInstance instance) +{ + dt->vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)gipa(instance, "vkAllocateCommandBuffers"); + dt->vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)gipa(instance, "vkAllocateDescriptorSets"); + dt->vkAllocateMemory = (PFN_vkAllocateMemory)gipa(instance, "vkAllocateMemory"); + dt->vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)gipa(instance, "vkBeginCommandBuffer"); + dt->vkBindBufferMemory = (PFN_vkBindBufferMemory)gipa(instance, "vkBindBufferMemory"); + dt->vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)gipa(instance, "vkBindBufferMemory2"); + if (!dt->vkBindBufferMemory2) dt->vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)gipa(instance, "vkBindBufferMemory2KHR"); + dt->vkBindImageMemory = (PFN_vkBindImageMemory)gipa(instance, "vkBindImageMemory"); + dt->vkBindImageMemory2 = (PFN_vkBindImageMemory2)gipa(instance, "vkBindImageMemory2"); + if (!dt->vkBindImageMemory2) dt->vkBindImageMemory2 = (PFN_vkBindImageMemory2)gipa(instance, "vkBindImageMemory2KHR"); + dt->vkBindTensorMemoryARM = (PFN_vkBindTensorMemoryARM)gipa(instance, "vkBindTensorMemoryARM"); + dt->vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)gipa(instance, "vkCmdBeginConditionalRenderingEXT"); + dt->vkCmdBeginCustomResolveEXT = (PFN_vkCmdBeginCustomResolveEXT)gipa(instance, "vkCmdBeginCustomResolveEXT"); + dt->vkCmdBeginQuery = (PFN_vkCmdBeginQuery)gipa(instance, "vkCmdBeginQuery"); + dt->vkCmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)gipa(instance, "vkCmdBeginQueryIndexedEXT"); + dt->vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)gipa(instance, "vkCmdBeginRenderPass"); + dt->vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)gipa(instance, "vkCmdBeginRenderPass2"); + if (!dt->vkCmdBeginRenderPass2) dt->vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)gipa(instance, "vkCmdBeginRenderPass2KHR"); + dt->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)gipa(instance, "vkCmdBeginRendering"); + if (!dt->vkCmdBeginRendering) dt->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)gipa(instance, "vkCmdBeginRenderingKHR"); + dt->vkCmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)gipa(instance, "vkCmdBeginTransformFeedbackEXT"); + dt->vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)gipa(instance, "vkCmdBindDescriptorSets"); + dt->vkCmdBindDescriptorSets2 = (PFN_vkCmdBindDescriptorSets2)gipa(instance, "vkCmdBindDescriptorSets2"); + if (!dt->vkCmdBindDescriptorSets2) dt->vkCmdBindDescriptorSets2 = (PFN_vkCmdBindDescriptorSets2)gipa(instance, "vkCmdBindDescriptorSets2KHR"); + dt->vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)gipa(instance, "vkCmdBindIndexBuffer"); + dt->vkCmdBindIndexBuffer2 = (PFN_vkCmdBindIndexBuffer2)gipa(instance, "vkCmdBindIndexBuffer2"); + if (!dt->vkCmdBindIndexBuffer2) dt->vkCmdBindIndexBuffer2 = (PFN_vkCmdBindIndexBuffer2)gipa(instance, "vkCmdBindIndexBuffer2KHR"); + dt->vkCmdBindPipeline = (PFN_vkCmdBindPipeline)gipa(instance, "vkCmdBindPipeline"); + dt->vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)gipa(instance, "vkCmdBindTransformFeedbackBuffersEXT"); + dt->vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)gipa(instance, "vkCmdBindVertexBuffers"); + dt->vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)gipa(instance, "vkCmdBindVertexBuffers2"); + if (!dt->vkCmdBindVertexBuffers2) dt->vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)gipa(instance, "vkCmdBindVertexBuffers2EXT"); + dt->vkCmdBlitImage = (PFN_vkCmdBlitImage)gipa(instance, "vkCmdBlitImage"); + dt->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)gipa(instance, "vkCmdBlitImage2"); + if (!dt->vkCmdBlitImage2) dt->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)gipa(instance, "vkCmdBlitImage2KHR"); + dt->vkCmdClearAttachments = (PFN_vkCmdClearAttachments)gipa(instance, "vkCmdClearAttachments"); + dt->vkCmdClearColorImage = (PFN_vkCmdClearColorImage)gipa(instance, "vkCmdClearColorImage"); + dt->vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)gipa(instance, "vkCmdClearDepthStencilImage"); + dt->vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)gipa(instance, "vkCmdCopyBuffer"); + dt->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)gipa(instance, "vkCmdCopyBuffer2"); + if (!dt->vkCmdCopyBuffer2) dt->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)gipa(instance, "vkCmdCopyBuffer2KHR"); + dt->vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)gipa(instance, "vkCmdCopyBufferToImage"); + dt->vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)gipa(instance, "vkCmdCopyBufferToImage2"); + if (!dt->vkCmdCopyBufferToImage2) dt->vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)gipa(instance, "vkCmdCopyBufferToImage2KHR"); + dt->vkCmdCopyImage = (PFN_vkCmdCopyImage)gipa(instance, "vkCmdCopyImage"); + dt->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)gipa(instance, "vkCmdCopyImage2"); + if (!dt->vkCmdCopyImage2) dt->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)gipa(instance, "vkCmdCopyImage2KHR"); + dt->vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)gipa(instance, "vkCmdCopyImageToBuffer"); + dt->vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)gipa(instance, "vkCmdCopyImageToBuffer2"); + if (!dt->vkCmdCopyImageToBuffer2) dt->vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)gipa(instance, "vkCmdCopyImageToBuffer2KHR"); + dt->vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)gipa(instance, "vkCmdCopyQueryPoolResults"); + dt->vkCmdCopyTensorARM = (PFN_vkCmdCopyTensorARM)gipa(instance, "vkCmdCopyTensorARM"); + dt->vkCmdDispatch = (PFN_vkCmdDispatch)gipa(instance, "vkCmdDispatch"); + dt->vkCmdDispatchBase = (PFN_vkCmdDispatchBase)gipa(instance, "vkCmdDispatchBase"); + if (!dt->vkCmdDispatchBase) dt->vkCmdDispatchBase = (PFN_vkCmdDispatchBase)gipa(instance, "vkCmdDispatchBaseKHR"); + dt->vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)gipa(instance, "vkCmdDispatchIndirect"); + dt->vkCmdDraw = (PFN_vkCmdDraw)gipa(instance, "vkCmdDraw"); + dt->vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)gipa(instance, "vkCmdDrawIndexed"); + dt->vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)gipa(instance, "vkCmdDrawIndexedIndirect"); + dt->vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)gipa(instance, "vkCmdDrawIndexedIndirectCount"); + if (!dt->vkCmdDrawIndexedIndirectCount) dt->vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)gipa(instance, "vkCmdDrawIndexedIndirectCountAMD"); + if (!dt->vkCmdDrawIndexedIndirectCount) dt->vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)gipa(instance, "vkCmdDrawIndexedIndirectCountKHR"); + dt->vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)gipa(instance, "vkCmdDrawIndirect"); + dt->vkCmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)gipa(instance, "vkCmdDrawIndirectByteCountEXT"); + dt->vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)gipa(instance, "vkCmdDrawIndirectCount"); + if (!dt->vkCmdDrawIndirectCount) dt->vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)gipa(instance, "vkCmdDrawIndirectCountAMD"); + if (!dt->vkCmdDrawIndirectCount) dt->vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)gipa(instance, "vkCmdDrawIndirectCountKHR"); + dt->vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)gipa(instance, "vkCmdDrawMultiEXT"); + dt->vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)gipa(instance, "vkCmdDrawMultiIndexedEXT"); + dt->vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)gipa(instance, "vkCmdEndConditionalRenderingEXT"); + dt->vkCmdEndQuery = (PFN_vkCmdEndQuery)gipa(instance, "vkCmdEndQuery"); + dt->vkCmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)gipa(instance, "vkCmdEndQueryIndexedEXT"); + dt->vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)gipa(instance, "vkCmdEndRenderPass"); + dt->vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)gipa(instance, "vkCmdEndRenderPass2"); + if (!dt->vkCmdEndRenderPass2) dt->vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)gipa(instance, "vkCmdEndRenderPass2KHR"); + dt->vkCmdEndRendering = (PFN_vkCmdEndRendering)gipa(instance, "vkCmdEndRendering"); + if (!dt->vkCmdEndRendering) dt->vkCmdEndRendering = (PFN_vkCmdEndRendering)gipa(instance, "vkCmdEndRenderingKHR"); + dt->vkCmdEndRendering2KHR = (PFN_vkCmdEndRendering2KHR)gipa(instance, "vkCmdEndRendering2KHR"); + if (!dt->vkCmdEndRendering2KHR) dt->vkCmdEndRendering2KHR = (PFN_vkCmdEndRendering2KHR)gipa(instance, "vkCmdEndRendering2EXT"); + dt->vkCmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)gipa(instance, "vkCmdEndTransformFeedbackEXT"); + dt->vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)gipa(instance, "vkCmdExecuteCommands"); + dt->vkCmdFillBuffer = (PFN_vkCmdFillBuffer)gipa(instance, "vkCmdFillBuffer"); + dt->vkCmdNextSubpass = (PFN_vkCmdNextSubpass)gipa(instance, "vkCmdNextSubpass"); + dt->vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)gipa(instance, "vkCmdNextSubpass2"); + if (!dt->vkCmdNextSubpass2) dt->vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)gipa(instance, "vkCmdNextSubpass2KHR"); + dt->vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)gipa(instance, "vkCmdPipelineBarrier"); + dt->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)gipa(instance, "vkCmdPipelineBarrier2"); + if (!dt->vkCmdPipelineBarrier2) dt->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)gipa(instance, "vkCmdPipelineBarrier2KHR"); + dt->vkCmdPushConstants = (PFN_vkCmdPushConstants)gipa(instance, "vkCmdPushConstants"); + dt->vkCmdPushConstants2 = (PFN_vkCmdPushConstants2)gipa(instance, "vkCmdPushConstants2"); + if (!dt->vkCmdPushConstants2) dt->vkCmdPushConstants2 = (PFN_vkCmdPushConstants2)gipa(instance, "vkCmdPushConstants2KHR"); + dt->vkCmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSet)gipa(instance, "vkCmdPushDescriptorSet"); + if (!dt->vkCmdPushDescriptorSet) dt->vkCmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSet)gipa(instance, "vkCmdPushDescriptorSetKHR"); + dt->vkCmdPushDescriptorSet2 = (PFN_vkCmdPushDescriptorSet2)gipa(instance, "vkCmdPushDescriptorSet2"); + if (!dt->vkCmdPushDescriptorSet2) dt->vkCmdPushDescriptorSet2 = (PFN_vkCmdPushDescriptorSet2)gipa(instance, "vkCmdPushDescriptorSet2KHR"); + dt->vkCmdPushDescriptorSetWithTemplate = (PFN_vkCmdPushDescriptorSetWithTemplate)gipa(instance, "vkCmdPushDescriptorSetWithTemplate"); + if (!dt->vkCmdPushDescriptorSetWithTemplate) dt->vkCmdPushDescriptorSetWithTemplate = (PFN_vkCmdPushDescriptorSetWithTemplate)gipa(instance, "vkCmdPushDescriptorSetWithTemplateKHR"); + dt->vkCmdResetEvent = (PFN_vkCmdResetEvent)gipa(instance, "vkCmdResetEvent"); + dt->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)gipa(instance, "vkCmdResetEvent2"); + if (!dt->vkCmdResetEvent2) dt->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)gipa(instance, "vkCmdResetEvent2KHR"); + dt->vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)gipa(instance, "vkCmdResetQueryPool"); + dt->vkCmdResolveImage = (PFN_vkCmdResolveImage)gipa(instance, "vkCmdResolveImage"); + dt->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)gipa(instance, "vkCmdResolveImage2"); + if (!dt->vkCmdResolveImage2) dt->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)gipa(instance, "vkCmdResolveImage2KHR"); + dt->vkCmdSetAlphaToCoverageEnableEXT = (PFN_vkCmdSetAlphaToCoverageEnableEXT)gipa(instance, "vkCmdSetAlphaToCoverageEnableEXT"); + dt->vkCmdSetAlphaToOneEnableEXT = (PFN_vkCmdSetAlphaToOneEnableEXT)gipa(instance, "vkCmdSetAlphaToOneEnableEXT"); + dt->vkCmdSetAttachmentFeedbackLoopEnableEXT = (PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)gipa(instance, "vkCmdSetAttachmentFeedbackLoopEnableEXT"); + dt->vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)gipa(instance, "vkCmdSetBlendConstants"); + dt->vkCmdSetColorBlendAdvancedEXT = (PFN_vkCmdSetColorBlendAdvancedEXT)gipa(instance, "vkCmdSetColorBlendAdvancedEXT"); + dt->vkCmdSetColorBlendEnableEXT = (PFN_vkCmdSetColorBlendEnableEXT)gipa(instance, "vkCmdSetColorBlendEnableEXT"); + dt->vkCmdSetColorBlendEquationEXT = (PFN_vkCmdSetColorBlendEquationEXT)gipa(instance, "vkCmdSetColorBlendEquationEXT"); + dt->vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)gipa(instance, "vkCmdSetColorWriteEnableEXT"); + dt->vkCmdSetColorWriteMaskEXT = (PFN_vkCmdSetColorWriteMaskEXT)gipa(instance, "vkCmdSetColorWriteMaskEXT"); + dt->vkCmdSetConservativeRasterizationModeEXT = (PFN_vkCmdSetConservativeRasterizationModeEXT)gipa(instance, "vkCmdSetConservativeRasterizationModeEXT"); + dt->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)gipa(instance, "vkCmdSetCullMode"); + if (!dt->vkCmdSetCullMode) dt->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)gipa(instance, "vkCmdSetCullModeEXT"); + dt->vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)gipa(instance, "vkCmdSetDepthBias"); + dt->vkCmdSetDepthBias2EXT = (PFN_vkCmdSetDepthBias2EXT)gipa(instance, "vkCmdSetDepthBias2EXT"); + dt->vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)gipa(instance, "vkCmdSetDepthBiasEnable"); + if (!dt->vkCmdSetDepthBiasEnable) dt->vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)gipa(instance, "vkCmdSetDepthBiasEnableEXT"); + dt->vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)gipa(instance, "vkCmdSetDepthBounds"); + dt->vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)gipa(instance, "vkCmdSetDepthBoundsTestEnable"); + if (!dt->vkCmdSetDepthBoundsTestEnable) dt->vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)gipa(instance, "vkCmdSetDepthBoundsTestEnableEXT"); + dt->vkCmdSetDepthClampEnableEXT = (PFN_vkCmdSetDepthClampEnableEXT)gipa(instance, "vkCmdSetDepthClampEnableEXT"); + dt->vkCmdSetDepthClampRangeEXT = (PFN_vkCmdSetDepthClampRangeEXT)gipa(instance, "vkCmdSetDepthClampRangeEXT"); + dt->vkCmdSetDepthClipEnableEXT = (PFN_vkCmdSetDepthClipEnableEXT)gipa(instance, "vkCmdSetDepthClipEnableEXT"); + dt->vkCmdSetDepthClipNegativeOneToOneEXT = (PFN_vkCmdSetDepthClipNegativeOneToOneEXT)gipa(instance, "vkCmdSetDepthClipNegativeOneToOneEXT"); + dt->vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)gipa(instance, "vkCmdSetDepthCompareOp"); + if (!dt->vkCmdSetDepthCompareOp) dt->vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)gipa(instance, "vkCmdSetDepthCompareOpEXT"); + dt->vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)gipa(instance, "vkCmdSetDepthTestEnable"); + if (!dt->vkCmdSetDepthTestEnable) dt->vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)gipa(instance, "vkCmdSetDepthTestEnableEXT"); + dt->vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)gipa(instance, "vkCmdSetDepthWriteEnable"); + if (!dt->vkCmdSetDepthWriteEnable) dt->vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)gipa(instance, "vkCmdSetDepthWriteEnableEXT"); + dt->vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)gipa(instance, "vkCmdSetDeviceMask"); + if (!dt->vkCmdSetDeviceMask) dt->vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)gipa(instance, "vkCmdSetDeviceMaskKHR"); + dt->vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)gipa(instance, "vkCmdSetDiscardRectangleEXT"); + dt->vkCmdSetDiscardRectangleEnableEXT = (PFN_vkCmdSetDiscardRectangleEnableEXT)gipa(instance, "vkCmdSetDiscardRectangleEnableEXT"); + dt->vkCmdSetDiscardRectangleModeEXT = (PFN_vkCmdSetDiscardRectangleModeEXT)gipa(instance, "vkCmdSetDiscardRectangleModeEXT"); + dt->vkCmdSetEvent = (PFN_vkCmdSetEvent)gipa(instance, "vkCmdSetEvent"); + dt->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)gipa(instance, "vkCmdSetEvent2"); + if (!dt->vkCmdSetEvent2) dt->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)gipa(instance, "vkCmdSetEvent2KHR"); + dt->vkCmdSetExtraPrimitiveOverestimationSizeEXT = (PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)gipa(instance, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); + dt->vkCmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)gipa(instance, "vkCmdSetFragmentShadingRateKHR"); + dt->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)gipa(instance, "vkCmdSetFrontFace"); + if (!dt->vkCmdSetFrontFace) dt->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)gipa(instance, "vkCmdSetFrontFaceEXT"); + dt->vkCmdSetLineRasterizationModeEXT = (PFN_vkCmdSetLineRasterizationModeEXT)gipa(instance, "vkCmdSetLineRasterizationModeEXT"); + dt->vkCmdSetLineStipple = (PFN_vkCmdSetLineStipple)gipa(instance, "vkCmdSetLineStipple"); + if (!dt->vkCmdSetLineStipple) dt->vkCmdSetLineStipple = (PFN_vkCmdSetLineStipple)gipa(instance, "vkCmdSetLineStippleEXT"); + if (!dt->vkCmdSetLineStipple) dt->vkCmdSetLineStipple = (PFN_vkCmdSetLineStipple)gipa(instance, "vkCmdSetLineStippleKHR"); + dt->vkCmdSetLineStippleEnableEXT = (PFN_vkCmdSetLineStippleEnableEXT)gipa(instance, "vkCmdSetLineStippleEnableEXT"); + dt->vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)gipa(instance, "vkCmdSetLineWidth"); + dt->vkCmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT)gipa(instance, "vkCmdSetLogicOpEXT"); + dt->vkCmdSetLogicOpEnableEXT = (PFN_vkCmdSetLogicOpEnableEXT)gipa(instance, "vkCmdSetLogicOpEnableEXT"); + dt->vkCmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT)gipa(instance, "vkCmdSetPatchControlPointsEXT"); + dt->vkCmdSetPolygonModeEXT = (PFN_vkCmdSetPolygonModeEXT)gipa(instance, "vkCmdSetPolygonModeEXT"); + dt->vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)gipa(instance, "vkCmdSetPrimitiveRestartEnable"); + if (!dt->vkCmdSetPrimitiveRestartEnable) dt->vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)gipa(instance, "vkCmdSetPrimitiveRestartEnableEXT"); + dt->vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)gipa(instance, "vkCmdSetPrimitiveTopology"); + if (!dt->vkCmdSetPrimitiveTopology) dt->vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)gipa(instance, "vkCmdSetPrimitiveTopologyEXT"); + dt->vkCmdSetProvokingVertexModeEXT = (PFN_vkCmdSetProvokingVertexModeEXT)gipa(instance, "vkCmdSetProvokingVertexModeEXT"); + dt->vkCmdSetRasterizationSamplesEXT = (PFN_vkCmdSetRasterizationSamplesEXT)gipa(instance, "vkCmdSetRasterizationSamplesEXT"); + dt->vkCmdSetRasterizationStreamEXT = (PFN_vkCmdSetRasterizationStreamEXT)gipa(instance, "vkCmdSetRasterizationStreamEXT"); + dt->vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)gipa(instance, "vkCmdSetRasterizerDiscardEnable"); + if (!dt->vkCmdSetRasterizerDiscardEnable) dt->vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)gipa(instance, "vkCmdSetRasterizerDiscardEnableEXT"); + dt->vkCmdSetRenderingAttachmentLocations = (PFN_vkCmdSetRenderingAttachmentLocations)gipa(instance, "vkCmdSetRenderingAttachmentLocations"); + if (!dt->vkCmdSetRenderingAttachmentLocations) dt->vkCmdSetRenderingAttachmentLocations = (PFN_vkCmdSetRenderingAttachmentLocations)gipa(instance, "vkCmdSetRenderingAttachmentLocationsKHR"); + dt->vkCmdSetRenderingInputAttachmentIndices = (PFN_vkCmdSetRenderingInputAttachmentIndices)gipa(instance, "vkCmdSetRenderingInputAttachmentIndices"); + if (!dt->vkCmdSetRenderingInputAttachmentIndices) dt->vkCmdSetRenderingInputAttachmentIndices = (PFN_vkCmdSetRenderingInputAttachmentIndices)gipa(instance, "vkCmdSetRenderingInputAttachmentIndicesKHR"); + dt->vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)gipa(instance, "vkCmdSetSampleLocationsEXT"); + dt->vkCmdSetSampleLocationsEnableEXT = (PFN_vkCmdSetSampleLocationsEnableEXT)gipa(instance, "vkCmdSetSampleLocationsEnableEXT"); + dt->vkCmdSetSampleMaskEXT = (PFN_vkCmdSetSampleMaskEXT)gipa(instance, "vkCmdSetSampleMaskEXT"); + dt->vkCmdSetScissor = (PFN_vkCmdSetScissor)gipa(instance, "vkCmdSetScissor"); + dt->vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)gipa(instance, "vkCmdSetScissorWithCount"); + if (!dt->vkCmdSetScissorWithCount) dt->vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)gipa(instance, "vkCmdSetScissorWithCountEXT"); + dt->vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)gipa(instance, "vkCmdSetStencilCompareMask"); + dt->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)gipa(instance, "vkCmdSetStencilOp"); + if (!dt->vkCmdSetStencilOp) dt->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)gipa(instance, "vkCmdSetStencilOpEXT"); + dt->vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference)gipa(instance, "vkCmdSetStencilReference"); + dt->vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)gipa(instance, "vkCmdSetStencilTestEnable"); + if (!dt->vkCmdSetStencilTestEnable) dt->vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)gipa(instance, "vkCmdSetStencilTestEnableEXT"); + dt->vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)gipa(instance, "vkCmdSetStencilWriteMask"); + dt->vkCmdSetTessellationDomainOriginEXT = (PFN_vkCmdSetTessellationDomainOriginEXT)gipa(instance, "vkCmdSetTessellationDomainOriginEXT"); + dt->vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)gipa(instance, "vkCmdSetVertexInputEXT"); + dt->vkCmdSetViewport = (PFN_vkCmdSetViewport)gipa(instance, "vkCmdSetViewport"); + dt->vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)gipa(instance, "vkCmdSetViewportWithCount"); + if (!dt->vkCmdSetViewportWithCount) dt->vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)gipa(instance, "vkCmdSetViewportWithCountEXT"); + dt->vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)gipa(instance, "vkCmdUpdateBuffer"); + dt->vkCmdWaitEvents = (PFN_vkCmdWaitEvents)gipa(instance, "vkCmdWaitEvents"); + dt->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)gipa(instance, "vkCmdWaitEvents2"); + if (!dt->vkCmdWaitEvents2) dt->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)gipa(instance, "vkCmdWaitEvents2KHR"); + dt->vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)gipa(instance, "vkCmdWriteTimestamp"); + dt->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)gipa(instance, "vkCmdWriteTimestamp2"); + if (!dt->vkCmdWriteTimestamp2) dt->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)gipa(instance, "vkCmdWriteTimestamp2KHR"); + dt->vkCreateBuffer = (PFN_vkCreateBuffer)gipa(instance, "vkCreateBuffer"); + dt->vkCreateBufferView = (PFN_vkCreateBufferView)gipa(instance, "vkCreateBufferView"); + dt->vkCreateCommandPool = (PFN_vkCreateCommandPool)gipa(instance, "vkCreateCommandPool"); + dt->vkCreateComputePipelines = (PFN_vkCreateComputePipelines)gipa(instance, "vkCreateComputePipelines"); + dt->vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)gipa(instance, "vkCreateDescriptorPool"); + dt->vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)gipa(instance, "vkCreateDescriptorSetLayout"); + dt->vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)gipa(instance, "vkCreateDescriptorUpdateTemplate"); + if (!dt->vkCreateDescriptorUpdateTemplate) dt->vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)gipa(instance, "vkCreateDescriptorUpdateTemplateKHR"); + dt->vkCreateDevice = (PFN_vkCreateDevice)gipa(instance, "vkCreateDevice"); + dt->vkCreateEvent = (PFN_vkCreateEvent)gipa(instance, "vkCreateEvent"); + dt->vkCreateFence = (PFN_vkCreateFence)gipa(instance, "vkCreateFence"); + dt->vkCreateFramebuffer = (PFN_vkCreateFramebuffer)gipa(instance, "vkCreateFramebuffer"); + dt->vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)gipa(instance, "vkCreateGraphicsPipelines"); + dt->vkCreateImage = (PFN_vkCreateImage)gipa(instance, "vkCreateImage"); + dt->vkCreateImageView = (PFN_vkCreateImageView)gipa(instance, "vkCreateImageView"); + dt->vkCreateInstance = (PFN_vkCreateInstance)gipa(instance, "vkCreateInstance"); + dt->vkCreatePipelineCache = (PFN_vkCreatePipelineCache)gipa(instance, "vkCreatePipelineCache"); + dt->vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)gipa(instance, "vkCreatePipelineLayout"); + dt->vkCreateQueryPool = (PFN_vkCreateQueryPool)gipa(instance, "vkCreateQueryPool"); + dt->vkCreateRenderPass = (PFN_vkCreateRenderPass)gipa(instance, "vkCreateRenderPass"); + dt->vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)gipa(instance, "vkCreateRenderPass2"); + if (!dt->vkCreateRenderPass2) dt->vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)gipa(instance, "vkCreateRenderPass2KHR"); + dt->vkCreateSampler = (PFN_vkCreateSampler)gipa(instance, "vkCreateSampler"); + dt->vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)gipa(instance, "vkCreateSamplerYcbcrConversion"); + if (!dt->vkCreateSamplerYcbcrConversion) dt->vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)gipa(instance, "vkCreateSamplerYcbcrConversionKHR"); + dt->vkCreateSemaphore = (PFN_vkCreateSemaphore)gipa(instance, "vkCreateSemaphore"); + dt->vkCreateShaderModule = (PFN_vkCreateShaderModule)gipa(instance, "vkCreateShaderModule"); + dt->vkCreateTensorARM = (PFN_vkCreateTensorARM)gipa(instance, "vkCreateTensorARM"); + dt->vkCreateTensorViewARM = (PFN_vkCreateTensorViewARM)gipa(instance, "vkCreateTensorViewARM"); + dt->vkDestroyBuffer = (PFN_vkDestroyBuffer)gipa(instance, "vkDestroyBuffer"); + dt->vkDestroyBufferView = (PFN_vkDestroyBufferView)gipa(instance, "vkDestroyBufferView"); + dt->vkDestroyCommandPool = (PFN_vkDestroyCommandPool)gipa(instance, "vkDestroyCommandPool"); + dt->vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)gipa(instance, "vkDestroyDescriptorPool"); + dt->vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)gipa(instance, "vkDestroyDescriptorSetLayout"); + dt->vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)gipa(instance, "vkDestroyDescriptorUpdateTemplate"); + if (!dt->vkDestroyDescriptorUpdateTemplate) dt->vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)gipa(instance, "vkDestroyDescriptorUpdateTemplateKHR"); + dt->vkDestroyDevice = (PFN_vkDestroyDevice)gipa(instance, "vkDestroyDevice"); + dt->vkDestroyEvent = (PFN_vkDestroyEvent)gipa(instance, "vkDestroyEvent"); + dt->vkDestroyFence = (PFN_vkDestroyFence)gipa(instance, "vkDestroyFence"); + dt->vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)gipa(instance, "vkDestroyFramebuffer"); + dt->vkDestroyImage = (PFN_vkDestroyImage)gipa(instance, "vkDestroyImage"); + dt->vkDestroyImageView = (PFN_vkDestroyImageView)gipa(instance, "vkDestroyImageView"); + dt->vkDestroyInstance = (PFN_vkDestroyInstance)gipa(instance, "vkDestroyInstance"); + dt->vkDestroyPipeline = (PFN_vkDestroyPipeline)gipa(instance, "vkDestroyPipeline"); + dt->vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)gipa(instance, "vkDestroyPipelineCache"); + dt->vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)gipa(instance, "vkDestroyPipelineLayout"); + dt->vkDestroyQueryPool = (PFN_vkDestroyQueryPool)gipa(instance, "vkDestroyQueryPool"); + dt->vkDestroyRenderPass = (PFN_vkDestroyRenderPass)gipa(instance, "vkDestroyRenderPass"); + dt->vkDestroySampler = (PFN_vkDestroySampler)gipa(instance, "vkDestroySampler"); + dt->vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)gipa(instance, "vkDestroySamplerYcbcrConversion"); + if (!dt->vkDestroySamplerYcbcrConversion) dt->vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)gipa(instance, "vkDestroySamplerYcbcrConversionKHR"); + dt->vkDestroySemaphore = (PFN_vkDestroySemaphore)gipa(instance, "vkDestroySemaphore"); + dt->vkDestroyShaderModule = (PFN_vkDestroyShaderModule)gipa(instance, "vkDestroyShaderModule"); + dt->vkDestroyTensorARM = (PFN_vkDestroyTensorARM)gipa(instance, "vkDestroyTensorARM"); + dt->vkDestroyTensorViewARM = (PFN_vkDestroyTensorViewARM)gipa(instance, "vkDestroyTensorViewARM"); + dt->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)gipa(instance, "vkDeviceWaitIdle"); + dt->vkEndCommandBuffer = (PFN_vkEndCommandBuffer)gipa(instance, "vkEndCommandBuffer"); + dt->vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)gipa(instance, "vkEnumerateDeviceExtensionProperties"); + dt->vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)gipa(instance, "vkEnumerateInstanceExtensionProperties"); + dt->vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)gipa(instance, "vkEnumerateInstanceLayerProperties"); + dt->vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)gipa(instance, "vkEnumerateInstanceVersion"); + dt->vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)gipa(instance, "vkEnumeratePhysicalDeviceGroups"); + if (!dt->vkEnumeratePhysicalDeviceGroups) dt->vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)gipa(instance, "vkEnumeratePhysicalDeviceGroupsKHR"); + dt->vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM = (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM)gipa(instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM"); + dt->vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)gipa(instance, "vkEnumeratePhysicalDevices"); + dt->vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)gipa(instance, "vkFlushMappedMemoryRanges"); + dt->vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)gipa(instance, "vkFreeCommandBuffers"); + dt->vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)gipa(instance, "vkFreeDescriptorSets"); + dt->vkFreeMemory = (PFN_vkFreeMemory)gipa(instance, "vkFreeMemory"); + dt->vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)gipa(instance, "vkGetBufferDeviceAddress"); + if (!dt->vkGetBufferDeviceAddress) dt->vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)gipa(instance, "vkGetBufferDeviceAddressEXT"); + if (!dt->vkGetBufferDeviceAddress) dt->vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)gipa(instance, "vkGetBufferDeviceAddressKHR"); + dt->vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)gipa(instance, "vkGetBufferMemoryRequirements"); + dt->vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)gipa(instance, "vkGetBufferMemoryRequirements2"); + if (!dt->vkGetBufferMemoryRequirements2) dt->vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)gipa(instance, "vkGetBufferMemoryRequirements2KHR"); + dt->vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)gipa(instance, "vkGetBufferOpaqueCaptureAddress"); + if (!dt->vkGetBufferOpaqueCaptureAddress) dt->vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)gipa(instance, "vkGetBufferOpaqueCaptureAddressKHR"); + dt->vkGetCalibratedTimestampsKHR = (PFN_vkGetCalibratedTimestampsKHR)gipa(instance, "vkGetCalibratedTimestampsKHR"); + if (!dt->vkGetCalibratedTimestampsKHR) dt->vkGetCalibratedTimestampsKHR = (PFN_vkGetCalibratedTimestampsKHR)gipa(instance, "vkGetCalibratedTimestampsEXT"); + dt->vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)gipa(instance, "vkGetDescriptorSetLayoutSupport"); + if (!dt->vkGetDescriptorSetLayoutSupport) dt->vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)gipa(instance, "vkGetDescriptorSetLayoutSupportKHR"); + dt->vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)gipa(instance, "vkGetDeviceBufferMemoryRequirements"); + if (!dt->vkGetDeviceBufferMemoryRequirements) dt->vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)gipa(instance, "vkGetDeviceBufferMemoryRequirementsKHR"); + dt->vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)gipa(instance, "vkGetDeviceGroupPeerMemoryFeatures"); + if (!dt->vkGetDeviceGroupPeerMemoryFeatures) dt->vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)gipa(instance, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); + dt->vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)gipa(instance, "vkGetDeviceImageMemoryRequirements"); + if (!dt->vkGetDeviceImageMemoryRequirements) dt->vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)gipa(instance, "vkGetDeviceImageMemoryRequirementsKHR"); + dt->vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)gipa(instance, "vkGetDeviceImageSparseMemoryRequirements"); + if (!dt->vkGetDeviceImageSparseMemoryRequirements) dt->vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)gipa(instance, "vkGetDeviceImageSparseMemoryRequirementsKHR"); + dt->vkGetDeviceImageSubresourceLayout = (PFN_vkGetDeviceImageSubresourceLayout)gipa(instance, "vkGetDeviceImageSubresourceLayout"); + if (!dt->vkGetDeviceImageSubresourceLayout) dt->vkGetDeviceImageSubresourceLayout = (PFN_vkGetDeviceImageSubresourceLayout)gipa(instance, "vkGetDeviceImageSubresourceLayoutKHR"); + dt->vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)gipa(instance, "vkGetDeviceMemoryCommitment"); + dt->vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)gipa(instance, "vkGetDeviceMemoryOpaqueCaptureAddress"); + if (!dt->vkGetDeviceMemoryOpaqueCaptureAddress) dt->vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)gipa(instance, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); + dt->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)gipa(instance, "vkGetDeviceQueue"); + dt->vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)gipa(instance, "vkGetDeviceQueue2"); + dt->vkGetDeviceTensorMemoryRequirementsARM = (PFN_vkGetDeviceTensorMemoryRequirementsARM)gipa(instance, "vkGetDeviceTensorMemoryRequirementsARM"); + dt->vkGetEventStatus = (PFN_vkGetEventStatus)gipa(instance, "vkGetEventStatus"); + dt->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)gipa(instance, "vkGetFenceFdKHR"); + dt->vkGetFenceStatus = (PFN_vkGetFenceStatus)gipa(instance, "vkGetFenceStatus"); + dt->vkGetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)gipa(instance, "vkGetImageDrmFormatModifierPropertiesEXT"); + dt->vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)gipa(instance, "vkGetImageMemoryRequirements"); + dt->vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)gipa(instance, "vkGetImageMemoryRequirements2"); + if (!dt->vkGetImageMemoryRequirements2) dt->vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)gipa(instance, "vkGetImageMemoryRequirements2KHR"); + dt->vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)gipa(instance, "vkGetImageSparseMemoryRequirements"); + dt->vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)gipa(instance, "vkGetImageSparseMemoryRequirements2"); + if (!dt->vkGetImageSparseMemoryRequirements2) dt->vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)gipa(instance, "vkGetImageSparseMemoryRequirements2KHR"); + dt->vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)gipa(instance, "vkGetImageSubresourceLayout"); + dt->vkGetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)gipa(instance, "vkGetImageSubresourceLayout2"); + if (!dt->vkGetImageSubresourceLayout2) dt->vkGetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)gipa(instance, "vkGetImageSubresourceLayout2EXT"); + if (!dt->vkGetImageSubresourceLayout2) dt->vkGetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)gipa(instance, "vkGetImageSubresourceLayout2KHR"); + dt->vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)gipa(instance, "vkGetMemoryFdKHR"); + dt->vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)gipa(instance, "vkGetMemoryFdPropertiesKHR"); + dt->vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)gipa(instance, "vkGetMemoryHostPointerPropertiesEXT"); + dt->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)gipa(instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR"); + if (!dt->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR) dt->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)gipa(instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); + dt->vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR)gipa(instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR"); + dt->vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)gipa(instance, "vkGetPhysicalDeviceExternalBufferProperties"); + if (!dt->vkGetPhysicalDeviceExternalBufferProperties) dt->vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)gipa(instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + dt->vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)gipa(instance, "vkGetPhysicalDeviceExternalFenceProperties"); + if (!dt->vkGetPhysicalDeviceExternalFenceProperties) dt->vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)gipa(instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR"); + dt->vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)gipa(instance, "vkGetPhysicalDeviceExternalSemaphoreProperties"); + if (!dt->vkGetPhysicalDeviceExternalSemaphoreProperties) dt->vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)gipa(instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + dt->vkGetPhysicalDeviceExternalTensorPropertiesARM = (PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)gipa(instance, "vkGetPhysicalDeviceExternalTensorPropertiesARM"); + dt->vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)gipa(instance, "vkGetPhysicalDeviceFeatures"); + dt->vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)gipa(instance, "vkGetPhysicalDeviceFeatures2"); + if (!dt->vkGetPhysicalDeviceFeatures2) dt->vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)gipa(instance, "vkGetPhysicalDeviceFeatures2KHR"); + dt->vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)gipa(instance, "vkGetPhysicalDeviceFormatProperties"); + dt->vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)gipa(instance, "vkGetPhysicalDeviceFormatProperties2"); + if (!dt->vkGetPhysicalDeviceFormatProperties2) dt->vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)gipa(instance, "vkGetPhysicalDeviceFormatProperties2KHR"); + dt->vkGetPhysicalDeviceFragmentShadingRatesKHR = (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)gipa(instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); + dt->vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)gipa(instance, "vkGetPhysicalDeviceImageFormatProperties"); + dt->vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)gipa(instance, "vkGetPhysicalDeviceImageFormatProperties2"); + if (!dt->vkGetPhysicalDeviceImageFormatProperties2) dt->vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)gipa(instance, "vkGetPhysicalDeviceImageFormatProperties2KHR"); + dt->vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)gipa(instance, "vkGetPhysicalDeviceMemoryProperties"); + dt->vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)gipa(instance, "vkGetPhysicalDeviceMemoryProperties2"); + if (!dt->vkGetPhysicalDeviceMemoryProperties2) dt->vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)gipa(instance, "vkGetPhysicalDeviceMemoryProperties2KHR"); + dt->vkGetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)gipa(instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); + dt->vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)gipa(instance, "vkGetPhysicalDeviceProperties"); + dt->vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)gipa(instance, "vkGetPhysicalDeviceProperties2"); + if (!dt->vkGetPhysicalDeviceProperties2) dt->vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)gipa(instance, "vkGetPhysicalDeviceProperties2KHR"); + dt->vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)gipa(instance, "vkGetPhysicalDeviceQueueFamilyProperties"); + dt->vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)gipa(instance, "vkGetPhysicalDeviceQueueFamilyProperties2"); + if (!dt->vkGetPhysicalDeviceQueueFamilyProperties2) dt->vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)gipa(instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + dt->vkGetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)gipa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"); + dt->vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)gipa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties2"); + if (!dt->vkGetPhysicalDeviceSparseImageFormatProperties2) dt->vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)gipa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + dt->vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)gipa(instance, "vkGetPhysicalDeviceToolProperties"); + if (!dt->vkGetPhysicalDeviceToolProperties) dt->vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)gipa(instance, "vkGetPhysicalDeviceToolPropertiesEXT"); + dt->vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)gipa(instance, "vkGetPipelineCacheData"); + dt->vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)gipa(instance, "vkGetQueryPoolResults"); + dt->vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)gipa(instance, "vkGetRenderAreaGranularity"); + dt->vkGetRenderingAreaGranularity = (PFN_vkGetRenderingAreaGranularity)gipa(instance, "vkGetRenderingAreaGranularity"); + if (!dt->vkGetRenderingAreaGranularity) dt->vkGetRenderingAreaGranularity = (PFN_vkGetRenderingAreaGranularity)gipa(instance, "vkGetRenderingAreaGranularityKHR"); + dt->vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)gipa(instance, "vkGetSemaphoreCounterValue"); + if (!dt->vkGetSemaphoreCounterValue) dt->vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)gipa(instance, "vkGetSemaphoreCounterValueKHR"); + dt->vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)gipa(instance, "vkGetSemaphoreFdKHR"); + dt->vkGetShaderModuleCreateInfoIdentifierEXT = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT)gipa(instance, "vkGetShaderModuleCreateInfoIdentifierEXT"); + dt->vkGetShaderModuleIdentifierEXT = (PFN_vkGetShaderModuleIdentifierEXT)gipa(instance, "vkGetShaderModuleIdentifierEXT"); + dt->vkGetTensorMemoryRequirementsARM = (PFN_vkGetTensorMemoryRequirementsARM)gipa(instance, "vkGetTensorMemoryRequirementsARM"); + dt->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)gipa(instance, "vkImportFenceFdKHR"); + dt->vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)gipa(instance, "vkImportSemaphoreFdKHR"); + dt->vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)gipa(instance, "vkInvalidateMappedMemoryRanges"); + dt->vkMapMemory = (PFN_vkMapMemory)gipa(instance, "vkMapMemory"); + dt->vkMergePipelineCaches = (PFN_vkMergePipelineCaches)gipa(instance, "vkMergePipelineCaches"); + dt->vkQueueBindSparse = (PFN_vkQueueBindSparse)gipa(instance, "vkQueueBindSparse"); + dt->vkQueueSubmit = (PFN_vkQueueSubmit)gipa(instance, "vkQueueSubmit"); + dt->vkQueueSubmit2 = (PFN_vkQueueSubmit2)gipa(instance, "vkQueueSubmit2"); + if (!dt->vkQueueSubmit2) dt->vkQueueSubmit2 = (PFN_vkQueueSubmit2)gipa(instance, "vkQueueSubmit2KHR"); + dt->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)gipa(instance, "vkQueueWaitIdle"); + dt->vkResetCommandBuffer = (PFN_vkResetCommandBuffer)gipa(instance, "vkResetCommandBuffer"); + dt->vkResetCommandPool = (PFN_vkResetCommandPool)gipa(instance, "vkResetCommandPool"); + dt->vkResetDescriptorPool = (PFN_vkResetDescriptorPool)gipa(instance, "vkResetDescriptorPool"); + dt->vkResetEvent = (PFN_vkResetEvent)gipa(instance, "vkResetEvent"); + dt->vkResetFences = (PFN_vkResetFences)gipa(instance, "vkResetFences"); + dt->vkResetQueryPool = (PFN_vkResetQueryPool)gipa(instance, "vkResetQueryPool"); + if (!dt->vkResetQueryPool) dt->vkResetQueryPool = (PFN_vkResetQueryPool)gipa(instance, "vkResetQueryPoolEXT"); + dt->vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)gipa(instance, "vkSetDeviceMemoryPriorityEXT"); + dt->vkSetEvent = (PFN_vkSetEvent)gipa(instance, "vkSetEvent"); + dt->vkSignalSemaphore = (PFN_vkSignalSemaphore)gipa(instance, "vkSignalSemaphore"); + if (!dt->vkSignalSemaphore) dt->vkSignalSemaphore = (PFN_vkSignalSemaphore)gipa(instance, "vkSignalSemaphoreKHR"); + dt->vkTrimCommandPool = (PFN_vkTrimCommandPool)gipa(instance, "vkTrimCommandPool"); + if (!dt->vkTrimCommandPool) dt->vkTrimCommandPool = (PFN_vkTrimCommandPool)gipa(instance, "vkTrimCommandPoolKHR"); + dt->vkUnmapMemory = (PFN_vkUnmapMemory)gipa(instance, "vkUnmapMemory"); + dt->vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)gipa(instance, "vkUpdateDescriptorSetWithTemplate"); + if (!dt->vkUpdateDescriptorSetWithTemplate) dt->vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)gipa(instance, "vkUpdateDescriptorSetWithTemplateKHR"); + dt->vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)gipa(instance, "vkUpdateDescriptorSets"); + dt->vkWaitForFences = (PFN_vkWaitForFences)gipa(instance, "vkWaitForFences"); + dt->vkWaitSemaphores = (PFN_vkWaitSemaphores)gipa(instance, "vkWaitSemaphores"); + if (!dt->vkWaitSemaphores) dt->vkWaitSemaphores = (PFN_vkWaitSemaphores)gipa(instance, "vkWaitSemaphoresKHR"); +} + +void vkb_dispatch_load_device(vkb_dispatch *dt, PFN_vkGetDeviceProcAddr gdpa, VkDevice device) +{ + { + PFN_vkAllocateCommandBuffers f_ = (PFN_vkAllocateCommandBuffers)gdpa(device, "vkAllocateCommandBuffers"); + dt->vkAllocateCommandBuffers = f_; + } + { + PFN_vkAllocateDescriptorSets f_ = (PFN_vkAllocateDescriptorSets)gdpa(device, "vkAllocateDescriptorSets"); + dt->vkAllocateDescriptorSets = f_; + } + { + PFN_vkAllocateMemory f_ = (PFN_vkAllocateMemory)gdpa(device, "vkAllocateMemory"); + dt->vkAllocateMemory = f_; + } + { + PFN_vkBeginCommandBuffer f_ = (PFN_vkBeginCommandBuffer)gdpa(device, "vkBeginCommandBuffer"); + dt->vkBeginCommandBuffer = f_; + } + { + PFN_vkBindBufferMemory f_ = (PFN_vkBindBufferMemory)gdpa(device, "vkBindBufferMemory"); + dt->vkBindBufferMemory = f_; + } + { + PFN_vkBindBufferMemory2 f_ = (PFN_vkBindBufferMemory2)gdpa(device, "vkBindBufferMemory2"); + if (!f_) f_ = (PFN_vkBindBufferMemory2)gdpa(device, "vkBindBufferMemory2KHR"); + dt->vkBindBufferMemory2 = f_; + } + { + PFN_vkBindImageMemory f_ = (PFN_vkBindImageMemory)gdpa(device, "vkBindImageMemory"); + dt->vkBindImageMemory = f_; + } + { + PFN_vkBindImageMemory2 f_ = (PFN_vkBindImageMemory2)gdpa(device, "vkBindImageMemory2"); + if (!f_) f_ = (PFN_vkBindImageMemory2)gdpa(device, "vkBindImageMemory2KHR"); + dt->vkBindImageMemory2 = f_; + } + { + PFN_vkBindTensorMemoryARM f_ = (PFN_vkBindTensorMemoryARM)gdpa(device, "vkBindTensorMemoryARM"); + dt->vkBindTensorMemoryARM = f_; + } + { + PFN_vkCmdBeginConditionalRenderingEXT f_ = (PFN_vkCmdBeginConditionalRenderingEXT)gdpa(device, "vkCmdBeginConditionalRenderingEXT"); + dt->vkCmdBeginConditionalRenderingEXT = f_; + } + { + PFN_vkCmdBeginCustomResolveEXT f_ = (PFN_vkCmdBeginCustomResolveEXT)gdpa(device, "vkCmdBeginCustomResolveEXT"); + dt->vkCmdBeginCustomResolveEXT = f_; + } + { + PFN_vkCmdBeginQuery f_ = (PFN_vkCmdBeginQuery)gdpa(device, "vkCmdBeginQuery"); + dt->vkCmdBeginQuery = f_; + } + { + PFN_vkCmdBeginQueryIndexedEXT f_ = (PFN_vkCmdBeginQueryIndexedEXT)gdpa(device, "vkCmdBeginQueryIndexedEXT"); + dt->vkCmdBeginQueryIndexedEXT = f_; + } + { + PFN_vkCmdBeginRenderPass f_ = (PFN_vkCmdBeginRenderPass)gdpa(device, "vkCmdBeginRenderPass"); + dt->vkCmdBeginRenderPass = f_; + } + { + PFN_vkCmdBeginRenderPass2 f_ = (PFN_vkCmdBeginRenderPass2)gdpa(device, "vkCmdBeginRenderPass2"); + if (!f_) f_ = (PFN_vkCmdBeginRenderPass2)gdpa(device, "vkCmdBeginRenderPass2KHR"); + dt->vkCmdBeginRenderPass2 = f_; + } + { + PFN_vkCmdBeginRendering f_ = (PFN_vkCmdBeginRendering)gdpa(device, "vkCmdBeginRendering"); + if (!f_) f_ = (PFN_vkCmdBeginRendering)gdpa(device, "vkCmdBeginRenderingKHR"); + dt->vkCmdBeginRendering = f_; + } + { + PFN_vkCmdBeginTransformFeedbackEXT f_ = (PFN_vkCmdBeginTransformFeedbackEXT)gdpa(device, "vkCmdBeginTransformFeedbackEXT"); + dt->vkCmdBeginTransformFeedbackEXT = f_; + } + { + PFN_vkCmdBindDescriptorSets f_ = (PFN_vkCmdBindDescriptorSets)gdpa(device, "vkCmdBindDescriptorSets"); + dt->vkCmdBindDescriptorSets = f_; + } + { + PFN_vkCmdBindDescriptorSets2 f_ = (PFN_vkCmdBindDescriptorSets2)gdpa(device, "vkCmdBindDescriptorSets2"); + if (!f_) f_ = (PFN_vkCmdBindDescriptorSets2)gdpa(device, "vkCmdBindDescriptorSets2KHR"); + dt->vkCmdBindDescriptorSets2 = f_; + } + { + PFN_vkCmdBindIndexBuffer f_ = (PFN_vkCmdBindIndexBuffer)gdpa(device, "vkCmdBindIndexBuffer"); + dt->vkCmdBindIndexBuffer = f_; + } + { + PFN_vkCmdBindIndexBuffer2 f_ = (PFN_vkCmdBindIndexBuffer2)gdpa(device, "vkCmdBindIndexBuffer2"); + if (!f_) f_ = (PFN_vkCmdBindIndexBuffer2)gdpa(device, "vkCmdBindIndexBuffer2KHR"); + dt->vkCmdBindIndexBuffer2 = f_; + } + { + PFN_vkCmdBindPipeline f_ = (PFN_vkCmdBindPipeline)gdpa(device, "vkCmdBindPipeline"); + dt->vkCmdBindPipeline = f_; + } + { + PFN_vkCmdBindTransformFeedbackBuffersEXT f_ = (PFN_vkCmdBindTransformFeedbackBuffersEXT)gdpa(device, "vkCmdBindTransformFeedbackBuffersEXT"); + dt->vkCmdBindTransformFeedbackBuffersEXT = f_; + } + { + PFN_vkCmdBindVertexBuffers f_ = (PFN_vkCmdBindVertexBuffers)gdpa(device, "vkCmdBindVertexBuffers"); + dt->vkCmdBindVertexBuffers = f_; + } + { + PFN_vkCmdBindVertexBuffers2 f_ = (PFN_vkCmdBindVertexBuffers2)gdpa(device, "vkCmdBindVertexBuffers2"); + if (!f_) f_ = (PFN_vkCmdBindVertexBuffers2)gdpa(device, "vkCmdBindVertexBuffers2EXT"); + dt->vkCmdBindVertexBuffers2 = f_; + } + { + PFN_vkCmdBlitImage f_ = (PFN_vkCmdBlitImage)gdpa(device, "vkCmdBlitImage"); + dt->vkCmdBlitImage = f_; + } + { + PFN_vkCmdBlitImage2 f_ = (PFN_vkCmdBlitImage2)gdpa(device, "vkCmdBlitImage2"); + if (!f_) f_ = (PFN_vkCmdBlitImage2)gdpa(device, "vkCmdBlitImage2KHR"); + dt->vkCmdBlitImage2 = f_; + } + { + PFN_vkCmdClearAttachments f_ = (PFN_vkCmdClearAttachments)gdpa(device, "vkCmdClearAttachments"); + dt->vkCmdClearAttachments = f_; + } + { + PFN_vkCmdClearColorImage f_ = (PFN_vkCmdClearColorImage)gdpa(device, "vkCmdClearColorImage"); + dt->vkCmdClearColorImage = f_; + } + { + PFN_vkCmdClearDepthStencilImage f_ = (PFN_vkCmdClearDepthStencilImage)gdpa(device, "vkCmdClearDepthStencilImage"); + dt->vkCmdClearDepthStencilImage = f_; + } + { + PFN_vkCmdCopyBuffer f_ = (PFN_vkCmdCopyBuffer)gdpa(device, "vkCmdCopyBuffer"); + dt->vkCmdCopyBuffer = f_; + } + { + PFN_vkCmdCopyBuffer2 f_ = (PFN_vkCmdCopyBuffer2)gdpa(device, "vkCmdCopyBuffer2"); + if (!f_) f_ = (PFN_vkCmdCopyBuffer2)gdpa(device, "vkCmdCopyBuffer2KHR"); + dt->vkCmdCopyBuffer2 = f_; + } + { + PFN_vkCmdCopyBufferToImage f_ = (PFN_vkCmdCopyBufferToImage)gdpa(device, "vkCmdCopyBufferToImage"); + dt->vkCmdCopyBufferToImage = f_; + } + { + PFN_vkCmdCopyBufferToImage2 f_ = (PFN_vkCmdCopyBufferToImage2)gdpa(device, "vkCmdCopyBufferToImage2"); + if (!f_) f_ = (PFN_vkCmdCopyBufferToImage2)gdpa(device, "vkCmdCopyBufferToImage2KHR"); + dt->vkCmdCopyBufferToImage2 = f_; + } + { + PFN_vkCmdCopyImage f_ = (PFN_vkCmdCopyImage)gdpa(device, "vkCmdCopyImage"); + dt->vkCmdCopyImage = f_; + } + { + PFN_vkCmdCopyImage2 f_ = (PFN_vkCmdCopyImage2)gdpa(device, "vkCmdCopyImage2"); + if (!f_) f_ = (PFN_vkCmdCopyImage2)gdpa(device, "vkCmdCopyImage2KHR"); + dt->vkCmdCopyImage2 = f_; + } + { + PFN_vkCmdCopyImageToBuffer f_ = (PFN_vkCmdCopyImageToBuffer)gdpa(device, "vkCmdCopyImageToBuffer"); + dt->vkCmdCopyImageToBuffer = f_; + } + { + PFN_vkCmdCopyImageToBuffer2 f_ = (PFN_vkCmdCopyImageToBuffer2)gdpa(device, "vkCmdCopyImageToBuffer2"); + if (!f_) f_ = (PFN_vkCmdCopyImageToBuffer2)gdpa(device, "vkCmdCopyImageToBuffer2KHR"); + dt->vkCmdCopyImageToBuffer2 = f_; + } + { + PFN_vkCmdCopyQueryPoolResults f_ = (PFN_vkCmdCopyQueryPoolResults)gdpa(device, "vkCmdCopyQueryPoolResults"); + dt->vkCmdCopyQueryPoolResults = f_; + } + { + PFN_vkCmdCopyTensorARM f_ = (PFN_vkCmdCopyTensorARM)gdpa(device, "vkCmdCopyTensorARM"); + dt->vkCmdCopyTensorARM = f_; + } + { + PFN_vkCmdDispatch f_ = (PFN_vkCmdDispatch)gdpa(device, "vkCmdDispatch"); + dt->vkCmdDispatch = f_; + } + { + PFN_vkCmdDispatchBase f_ = (PFN_vkCmdDispatchBase)gdpa(device, "vkCmdDispatchBase"); + if (!f_) f_ = (PFN_vkCmdDispatchBase)gdpa(device, "vkCmdDispatchBaseKHR"); + dt->vkCmdDispatchBase = f_; + } + { + PFN_vkCmdDispatchIndirect f_ = (PFN_vkCmdDispatchIndirect)gdpa(device, "vkCmdDispatchIndirect"); + dt->vkCmdDispatchIndirect = f_; + } + { + PFN_vkCmdDraw f_ = (PFN_vkCmdDraw)gdpa(device, "vkCmdDraw"); + dt->vkCmdDraw = f_; + } + { + PFN_vkCmdDrawIndexed f_ = (PFN_vkCmdDrawIndexed)gdpa(device, "vkCmdDrawIndexed"); + dt->vkCmdDrawIndexed = f_; + } + { + PFN_vkCmdDrawIndexedIndirect f_ = (PFN_vkCmdDrawIndexedIndirect)gdpa(device, "vkCmdDrawIndexedIndirect"); + dt->vkCmdDrawIndexedIndirect = f_; + } + { + PFN_vkCmdDrawIndexedIndirectCount f_ = (PFN_vkCmdDrawIndexedIndirectCount)gdpa(device, "vkCmdDrawIndexedIndirectCount"); + if (!f_) f_ = (PFN_vkCmdDrawIndexedIndirectCount)gdpa(device, "vkCmdDrawIndexedIndirectCountAMD"); + if (!f_) f_ = (PFN_vkCmdDrawIndexedIndirectCount)gdpa(device, "vkCmdDrawIndexedIndirectCountKHR"); + dt->vkCmdDrawIndexedIndirectCount = f_; + } + { + PFN_vkCmdDrawIndirect f_ = (PFN_vkCmdDrawIndirect)gdpa(device, "vkCmdDrawIndirect"); + dt->vkCmdDrawIndirect = f_; + } + { + PFN_vkCmdDrawIndirectByteCountEXT f_ = (PFN_vkCmdDrawIndirectByteCountEXT)gdpa(device, "vkCmdDrawIndirectByteCountEXT"); + dt->vkCmdDrawIndirectByteCountEXT = f_; + } + { + PFN_vkCmdDrawIndirectCount f_ = (PFN_vkCmdDrawIndirectCount)gdpa(device, "vkCmdDrawIndirectCount"); + if (!f_) f_ = (PFN_vkCmdDrawIndirectCount)gdpa(device, "vkCmdDrawIndirectCountAMD"); + if (!f_) f_ = (PFN_vkCmdDrawIndirectCount)gdpa(device, "vkCmdDrawIndirectCountKHR"); + dt->vkCmdDrawIndirectCount = f_; + } + { + PFN_vkCmdDrawMultiEXT f_ = (PFN_vkCmdDrawMultiEXT)gdpa(device, "vkCmdDrawMultiEXT"); + dt->vkCmdDrawMultiEXT = f_; + } + { + PFN_vkCmdDrawMultiIndexedEXT f_ = (PFN_vkCmdDrawMultiIndexedEXT)gdpa(device, "vkCmdDrawMultiIndexedEXT"); + dt->vkCmdDrawMultiIndexedEXT = f_; + } + { + PFN_vkCmdEndConditionalRenderingEXT f_ = (PFN_vkCmdEndConditionalRenderingEXT)gdpa(device, "vkCmdEndConditionalRenderingEXT"); + dt->vkCmdEndConditionalRenderingEXT = f_; + } + { + PFN_vkCmdEndQuery f_ = (PFN_vkCmdEndQuery)gdpa(device, "vkCmdEndQuery"); + dt->vkCmdEndQuery = f_; + } + { + PFN_vkCmdEndQueryIndexedEXT f_ = (PFN_vkCmdEndQueryIndexedEXT)gdpa(device, "vkCmdEndQueryIndexedEXT"); + dt->vkCmdEndQueryIndexedEXT = f_; + } + { + PFN_vkCmdEndRenderPass f_ = (PFN_vkCmdEndRenderPass)gdpa(device, "vkCmdEndRenderPass"); + dt->vkCmdEndRenderPass = f_; + } + { + PFN_vkCmdEndRenderPass2 f_ = (PFN_vkCmdEndRenderPass2)gdpa(device, "vkCmdEndRenderPass2"); + if (!f_) f_ = (PFN_vkCmdEndRenderPass2)gdpa(device, "vkCmdEndRenderPass2KHR"); + dt->vkCmdEndRenderPass2 = f_; + } + { + PFN_vkCmdEndRendering f_ = (PFN_vkCmdEndRendering)gdpa(device, "vkCmdEndRendering"); + if (!f_) f_ = (PFN_vkCmdEndRendering)gdpa(device, "vkCmdEndRenderingKHR"); + dt->vkCmdEndRendering = f_; + } + { + PFN_vkCmdEndRendering2KHR f_ = (PFN_vkCmdEndRendering2KHR)gdpa(device, "vkCmdEndRendering2KHR"); + if (!f_) f_ = (PFN_vkCmdEndRendering2KHR)gdpa(device, "vkCmdEndRendering2EXT"); + dt->vkCmdEndRendering2KHR = f_; + } + { + PFN_vkCmdEndTransformFeedbackEXT f_ = (PFN_vkCmdEndTransformFeedbackEXT)gdpa(device, "vkCmdEndTransformFeedbackEXT"); + dt->vkCmdEndTransformFeedbackEXT = f_; + } + { + PFN_vkCmdExecuteCommands f_ = (PFN_vkCmdExecuteCommands)gdpa(device, "vkCmdExecuteCommands"); + dt->vkCmdExecuteCommands = f_; + } + { + PFN_vkCmdFillBuffer f_ = (PFN_vkCmdFillBuffer)gdpa(device, "vkCmdFillBuffer"); + dt->vkCmdFillBuffer = f_; + } + { + PFN_vkCmdNextSubpass f_ = (PFN_vkCmdNextSubpass)gdpa(device, "vkCmdNextSubpass"); + dt->vkCmdNextSubpass = f_; + } + { + PFN_vkCmdNextSubpass2 f_ = (PFN_vkCmdNextSubpass2)gdpa(device, "vkCmdNextSubpass2"); + if (!f_) f_ = (PFN_vkCmdNextSubpass2)gdpa(device, "vkCmdNextSubpass2KHR"); + dt->vkCmdNextSubpass2 = f_; + } + { + PFN_vkCmdPipelineBarrier f_ = (PFN_vkCmdPipelineBarrier)gdpa(device, "vkCmdPipelineBarrier"); + dt->vkCmdPipelineBarrier = f_; + } + { + PFN_vkCmdPipelineBarrier2 f_ = (PFN_vkCmdPipelineBarrier2)gdpa(device, "vkCmdPipelineBarrier2"); + if (!f_) f_ = (PFN_vkCmdPipelineBarrier2)gdpa(device, "vkCmdPipelineBarrier2KHR"); + dt->vkCmdPipelineBarrier2 = f_; + } + { + PFN_vkCmdPushConstants f_ = (PFN_vkCmdPushConstants)gdpa(device, "vkCmdPushConstants"); + dt->vkCmdPushConstants = f_; + } + { + PFN_vkCmdPushConstants2 f_ = (PFN_vkCmdPushConstants2)gdpa(device, "vkCmdPushConstants2"); + if (!f_) f_ = (PFN_vkCmdPushConstants2)gdpa(device, "vkCmdPushConstants2KHR"); + dt->vkCmdPushConstants2 = f_; + } + { + PFN_vkCmdPushDescriptorSet f_ = (PFN_vkCmdPushDescriptorSet)gdpa(device, "vkCmdPushDescriptorSet"); + if (!f_) f_ = (PFN_vkCmdPushDescriptorSet)gdpa(device, "vkCmdPushDescriptorSetKHR"); + dt->vkCmdPushDescriptorSet = f_; + } + { + PFN_vkCmdPushDescriptorSet2 f_ = (PFN_vkCmdPushDescriptorSet2)gdpa(device, "vkCmdPushDescriptorSet2"); + if (!f_) f_ = (PFN_vkCmdPushDescriptorSet2)gdpa(device, "vkCmdPushDescriptorSet2KHR"); + dt->vkCmdPushDescriptorSet2 = f_; + } + { + PFN_vkCmdPushDescriptorSetWithTemplate f_ = (PFN_vkCmdPushDescriptorSetWithTemplate)gdpa(device, "vkCmdPushDescriptorSetWithTemplate"); + if (!f_) f_ = (PFN_vkCmdPushDescriptorSetWithTemplate)gdpa(device, "vkCmdPushDescriptorSetWithTemplateKHR"); + dt->vkCmdPushDescriptorSetWithTemplate = f_; + } + { + PFN_vkCmdResetEvent f_ = (PFN_vkCmdResetEvent)gdpa(device, "vkCmdResetEvent"); + dt->vkCmdResetEvent = f_; + } + { + PFN_vkCmdResetEvent2 f_ = (PFN_vkCmdResetEvent2)gdpa(device, "vkCmdResetEvent2"); + if (!f_) f_ = (PFN_vkCmdResetEvent2)gdpa(device, "vkCmdResetEvent2KHR"); + dt->vkCmdResetEvent2 = f_; + } + { + PFN_vkCmdResetQueryPool f_ = (PFN_vkCmdResetQueryPool)gdpa(device, "vkCmdResetQueryPool"); + dt->vkCmdResetQueryPool = f_; + } + { + PFN_vkCmdResolveImage f_ = (PFN_vkCmdResolveImage)gdpa(device, "vkCmdResolveImage"); + dt->vkCmdResolveImage = f_; + } + { + PFN_vkCmdResolveImage2 f_ = (PFN_vkCmdResolveImage2)gdpa(device, "vkCmdResolveImage2"); + if (!f_) f_ = (PFN_vkCmdResolveImage2)gdpa(device, "vkCmdResolveImage2KHR"); + dt->vkCmdResolveImage2 = f_; + } + { + PFN_vkCmdSetAlphaToCoverageEnableEXT f_ = (PFN_vkCmdSetAlphaToCoverageEnableEXT)gdpa(device, "vkCmdSetAlphaToCoverageEnableEXT"); + dt->vkCmdSetAlphaToCoverageEnableEXT = f_; + } + { + PFN_vkCmdSetAlphaToOneEnableEXT f_ = (PFN_vkCmdSetAlphaToOneEnableEXT)gdpa(device, "vkCmdSetAlphaToOneEnableEXT"); + dt->vkCmdSetAlphaToOneEnableEXT = f_; + } + { + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT f_ = (PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)gdpa(device, "vkCmdSetAttachmentFeedbackLoopEnableEXT"); + dt->vkCmdSetAttachmentFeedbackLoopEnableEXT = f_; + } + { + PFN_vkCmdSetBlendConstants f_ = (PFN_vkCmdSetBlendConstants)gdpa(device, "vkCmdSetBlendConstants"); + dt->vkCmdSetBlendConstants = f_; + } + { + PFN_vkCmdSetColorBlendAdvancedEXT f_ = (PFN_vkCmdSetColorBlendAdvancedEXT)gdpa(device, "vkCmdSetColorBlendAdvancedEXT"); + dt->vkCmdSetColorBlendAdvancedEXT = f_; + } + { + PFN_vkCmdSetColorBlendEnableEXT f_ = (PFN_vkCmdSetColorBlendEnableEXT)gdpa(device, "vkCmdSetColorBlendEnableEXT"); + dt->vkCmdSetColorBlendEnableEXT = f_; + } + { + PFN_vkCmdSetColorBlendEquationEXT f_ = (PFN_vkCmdSetColorBlendEquationEXT)gdpa(device, "vkCmdSetColorBlendEquationEXT"); + dt->vkCmdSetColorBlendEquationEXT = f_; + } + { + PFN_vkCmdSetColorWriteEnableEXT f_ = (PFN_vkCmdSetColorWriteEnableEXT)gdpa(device, "vkCmdSetColorWriteEnableEXT"); + dt->vkCmdSetColorWriteEnableEXT = f_; + } + { + PFN_vkCmdSetColorWriteMaskEXT f_ = (PFN_vkCmdSetColorWriteMaskEXT)gdpa(device, "vkCmdSetColorWriteMaskEXT"); + dt->vkCmdSetColorWriteMaskEXT = f_; + } + { + PFN_vkCmdSetConservativeRasterizationModeEXT f_ = (PFN_vkCmdSetConservativeRasterizationModeEXT)gdpa(device, "vkCmdSetConservativeRasterizationModeEXT"); + dt->vkCmdSetConservativeRasterizationModeEXT = f_; + } + { + PFN_vkCmdSetCullMode f_ = (PFN_vkCmdSetCullMode)gdpa(device, "vkCmdSetCullMode"); + if (!f_) f_ = (PFN_vkCmdSetCullMode)gdpa(device, "vkCmdSetCullModeEXT"); + dt->vkCmdSetCullMode = f_; + } + { + PFN_vkCmdSetDepthBias f_ = (PFN_vkCmdSetDepthBias)gdpa(device, "vkCmdSetDepthBias"); + dt->vkCmdSetDepthBias = f_; + } + { + PFN_vkCmdSetDepthBias2EXT f_ = (PFN_vkCmdSetDepthBias2EXT)gdpa(device, "vkCmdSetDepthBias2EXT"); + dt->vkCmdSetDepthBias2EXT = f_; + } + { + PFN_vkCmdSetDepthBiasEnable f_ = (PFN_vkCmdSetDepthBiasEnable)gdpa(device, "vkCmdSetDepthBiasEnable"); + if (!f_) f_ = (PFN_vkCmdSetDepthBiasEnable)gdpa(device, "vkCmdSetDepthBiasEnableEXT"); + dt->vkCmdSetDepthBiasEnable = f_; + } + { + PFN_vkCmdSetDepthBounds f_ = (PFN_vkCmdSetDepthBounds)gdpa(device, "vkCmdSetDepthBounds"); + dt->vkCmdSetDepthBounds = f_; + } + { + PFN_vkCmdSetDepthBoundsTestEnable f_ = (PFN_vkCmdSetDepthBoundsTestEnable)gdpa(device, "vkCmdSetDepthBoundsTestEnable"); + if (!f_) f_ = (PFN_vkCmdSetDepthBoundsTestEnable)gdpa(device, "vkCmdSetDepthBoundsTestEnableEXT"); + dt->vkCmdSetDepthBoundsTestEnable = f_; + } + { + PFN_vkCmdSetDepthClampEnableEXT f_ = (PFN_vkCmdSetDepthClampEnableEXT)gdpa(device, "vkCmdSetDepthClampEnableEXT"); + dt->vkCmdSetDepthClampEnableEXT = f_; + } + { + PFN_vkCmdSetDepthClampRangeEXT f_ = (PFN_vkCmdSetDepthClampRangeEXT)gdpa(device, "vkCmdSetDepthClampRangeEXT"); + dt->vkCmdSetDepthClampRangeEXT = f_; + } + { + PFN_vkCmdSetDepthClipEnableEXT f_ = (PFN_vkCmdSetDepthClipEnableEXT)gdpa(device, "vkCmdSetDepthClipEnableEXT"); + dt->vkCmdSetDepthClipEnableEXT = f_; + } + { + PFN_vkCmdSetDepthClipNegativeOneToOneEXT f_ = (PFN_vkCmdSetDepthClipNegativeOneToOneEXT)gdpa(device, "vkCmdSetDepthClipNegativeOneToOneEXT"); + dt->vkCmdSetDepthClipNegativeOneToOneEXT = f_; + } + { + PFN_vkCmdSetDepthCompareOp f_ = (PFN_vkCmdSetDepthCompareOp)gdpa(device, "vkCmdSetDepthCompareOp"); + if (!f_) f_ = (PFN_vkCmdSetDepthCompareOp)gdpa(device, "vkCmdSetDepthCompareOpEXT"); + dt->vkCmdSetDepthCompareOp = f_; + } + { + PFN_vkCmdSetDepthTestEnable f_ = (PFN_vkCmdSetDepthTestEnable)gdpa(device, "vkCmdSetDepthTestEnable"); + if (!f_) f_ = (PFN_vkCmdSetDepthTestEnable)gdpa(device, "vkCmdSetDepthTestEnableEXT"); + dt->vkCmdSetDepthTestEnable = f_; + } + { + PFN_vkCmdSetDepthWriteEnable f_ = (PFN_vkCmdSetDepthWriteEnable)gdpa(device, "vkCmdSetDepthWriteEnable"); + if (!f_) f_ = (PFN_vkCmdSetDepthWriteEnable)gdpa(device, "vkCmdSetDepthWriteEnableEXT"); + dt->vkCmdSetDepthWriteEnable = f_; + } + { + PFN_vkCmdSetDeviceMask f_ = (PFN_vkCmdSetDeviceMask)gdpa(device, "vkCmdSetDeviceMask"); + if (!f_) f_ = (PFN_vkCmdSetDeviceMask)gdpa(device, "vkCmdSetDeviceMaskKHR"); + dt->vkCmdSetDeviceMask = f_; + } + { + PFN_vkCmdSetDiscardRectangleEXT f_ = (PFN_vkCmdSetDiscardRectangleEXT)gdpa(device, "vkCmdSetDiscardRectangleEXT"); + dt->vkCmdSetDiscardRectangleEXT = f_; + } + { + PFN_vkCmdSetDiscardRectangleEnableEXT f_ = (PFN_vkCmdSetDiscardRectangleEnableEXT)gdpa(device, "vkCmdSetDiscardRectangleEnableEXT"); + dt->vkCmdSetDiscardRectangleEnableEXT = f_; + } + { + PFN_vkCmdSetDiscardRectangleModeEXT f_ = (PFN_vkCmdSetDiscardRectangleModeEXT)gdpa(device, "vkCmdSetDiscardRectangleModeEXT"); + dt->vkCmdSetDiscardRectangleModeEXT = f_; + } + { + PFN_vkCmdSetEvent f_ = (PFN_vkCmdSetEvent)gdpa(device, "vkCmdSetEvent"); + dt->vkCmdSetEvent = f_; + } + { + PFN_vkCmdSetEvent2 f_ = (PFN_vkCmdSetEvent2)gdpa(device, "vkCmdSetEvent2"); + if (!f_) f_ = (PFN_vkCmdSetEvent2)gdpa(device, "vkCmdSetEvent2KHR"); + dt->vkCmdSetEvent2 = f_; + } + { + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT f_ = (PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)gdpa(device, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); + dt->vkCmdSetExtraPrimitiveOverestimationSizeEXT = f_; + } + { + PFN_vkCmdSetFragmentShadingRateKHR f_ = (PFN_vkCmdSetFragmentShadingRateKHR)gdpa(device, "vkCmdSetFragmentShadingRateKHR"); + dt->vkCmdSetFragmentShadingRateKHR = f_; + } + { + PFN_vkCmdSetFrontFace f_ = (PFN_vkCmdSetFrontFace)gdpa(device, "vkCmdSetFrontFace"); + if (!f_) f_ = (PFN_vkCmdSetFrontFace)gdpa(device, "vkCmdSetFrontFaceEXT"); + dt->vkCmdSetFrontFace = f_; + } + { + PFN_vkCmdSetLineRasterizationModeEXT f_ = (PFN_vkCmdSetLineRasterizationModeEXT)gdpa(device, "vkCmdSetLineRasterizationModeEXT"); + dt->vkCmdSetLineRasterizationModeEXT = f_; + } + { + PFN_vkCmdSetLineStipple f_ = (PFN_vkCmdSetLineStipple)gdpa(device, "vkCmdSetLineStipple"); + if (!f_) f_ = (PFN_vkCmdSetLineStipple)gdpa(device, "vkCmdSetLineStippleEXT"); + if (!f_) f_ = (PFN_vkCmdSetLineStipple)gdpa(device, "vkCmdSetLineStippleKHR"); + dt->vkCmdSetLineStipple = f_; + } + { + PFN_vkCmdSetLineStippleEnableEXT f_ = (PFN_vkCmdSetLineStippleEnableEXT)gdpa(device, "vkCmdSetLineStippleEnableEXT"); + dt->vkCmdSetLineStippleEnableEXT = f_; + } + { + PFN_vkCmdSetLineWidth f_ = (PFN_vkCmdSetLineWidth)gdpa(device, "vkCmdSetLineWidth"); + dt->vkCmdSetLineWidth = f_; + } + { + PFN_vkCmdSetLogicOpEXT f_ = (PFN_vkCmdSetLogicOpEXT)gdpa(device, "vkCmdSetLogicOpEXT"); + dt->vkCmdSetLogicOpEXT = f_; + } + { + PFN_vkCmdSetLogicOpEnableEXT f_ = (PFN_vkCmdSetLogicOpEnableEXT)gdpa(device, "vkCmdSetLogicOpEnableEXT"); + dt->vkCmdSetLogicOpEnableEXT = f_; + } + { + PFN_vkCmdSetPatchControlPointsEXT f_ = (PFN_vkCmdSetPatchControlPointsEXT)gdpa(device, "vkCmdSetPatchControlPointsEXT"); + dt->vkCmdSetPatchControlPointsEXT = f_; + } + { + PFN_vkCmdSetPolygonModeEXT f_ = (PFN_vkCmdSetPolygonModeEXT)gdpa(device, "vkCmdSetPolygonModeEXT"); + dt->vkCmdSetPolygonModeEXT = f_; + } + { + PFN_vkCmdSetPrimitiveRestartEnable f_ = (PFN_vkCmdSetPrimitiveRestartEnable)gdpa(device, "vkCmdSetPrimitiveRestartEnable"); + if (!f_) f_ = (PFN_vkCmdSetPrimitiveRestartEnable)gdpa(device, "vkCmdSetPrimitiveRestartEnableEXT"); + dt->vkCmdSetPrimitiveRestartEnable = f_; + } + { + PFN_vkCmdSetPrimitiveTopology f_ = (PFN_vkCmdSetPrimitiveTopology)gdpa(device, "vkCmdSetPrimitiveTopology"); + if (!f_) f_ = (PFN_vkCmdSetPrimitiveTopology)gdpa(device, "vkCmdSetPrimitiveTopologyEXT"); + dt->vkCmdSetPrimitiveTopology = f_; + } + { + PFN_vkCmdSetProvokingVertexModeEXT f_ = (PFN_vkCmdSetProvokingVertexModeEXT)gdpa(device, "vkCmdSetProvokingVertexModeEXT"); + dt->vkCmdSetProvokingVertexModeEXT = f_; + } + { + PFN_vkCmdSetRasterizationSamplesEXT f_ = (PFN_vkCmdSetRasterizationSamplesEXT)gdpa(device, "vkCmdSetRasterizationSamplesEXT"); + dt->vkCmdSetRasterizationSamplesEXT = f_; + } + { + PFN_vkCmdSetRasterizationStreamEXT f_ = (PFN_vkCmdSetRasterizationStreamEXT)gdpa(device, "vkCmdSetRasterizationStreamEXT"); + dt->vkCmdSetRasterizationStreamEXT = f_; + } + { + PFN_vkCmdSetRasterizerDiscardEnable f_ = (PFN_vkCmdSetRasterizerDiscardEnable)gdpa(device, "vkCmdSetRasterizerDiscardEnable"); + if (!f_) f_ = (PFN_vkCmdSetRasterizerDiscardEnable)gdpa(device, "vkCmdSetRasterizerDiscardEnableEXT"); + dt->vkCmdSetRasterizerDiscardEnable = f_; + } + { + PFN_vkCmdSetRenderingAttachmentLocations f_ = (PFN_vkCmdSetRenderingAttachmentLocations)gdpa(device, "vkCmdSetRenderingAttachmentLocations"); + if (!f_) f_ = (PFN_vkCmdSetRenderingAttachmentLocations)gdpa(device, "vkCmdSetRenderingAttachmentLocationsKHR"); + dt->vkCmdSetRenderingAttachmentLocations = f_; + } + { + PFN_vkCmdSetRenderingInputAttachmentIndices f_ = (PFN_vkCmdSetRenderingInputAttachmentIndices)gdpa(device, "vkCmdSetRenderingInputAttachmentIndices"); + if (!f_) f_ = (PFN_vkCmdSetRenderingInputAttachmentIndices)gdpa(device, "vkCmdSetRenderingInputAttachmentIndicesKHR"); + dt->vkCmdSetRenderingInputAttachmentIndices = f_; + } + { + PFN_vkCmdSetSampleLocationsEXT f_ = (PFN_vkCmdSetSampleLocationsEXT)gdpa(device, "vkCmdSetSampleLocationsEXT"); + dt->vkCmdSetSampleLocationsEXT = f_; + } + { + PFN_vkCmdSetSampleLocationsEnableEXT f_ = (PFN_vkCmdSetSampleLocationsEnableEXT)gdpa(device, "vkCmdSetSampleLocationsEnableEXT"); + dt->vkCmdSetSampleLocationsEnableEXT = f_; + } + { + PFN_vkCmdSetSampleMaskEXT f_ = (PFN_vkCmdSetSampleMaskEXT)gdpa(device, "vkCmdSetSampleMaskEXT"); + dt->vkCmdSetSampleMaskEXT = f_; + } + { + PFN_vkCmdSetScissor f_ = (PFN_vkCmdSetScissor)gdpa(device, "vkCmdSetScissor"); + dt->vkCmdSetScissor = f_; + } + { + PFN_vkCmdSetScissorWithCount f_ = (PFN_vkCmdSetScissorWithCount)gdpa(device, "vkCmdSetScissorWithCount"); + if (!f_) f_ = (PFN_vkCmdSetScissorWithCount)gdpa(device, "vkCmdSetScissorWithCountEXT"); + dt->vkCmdSetScissorWithCount = f_; + } + { + PFN_vkCmdSetStencilCompareMask f_ = (PFN_vkCmdSetStencilCompareMask)gdpa(device, "vkCmdSetStencilCompareMask"); + dt->vkCmdSetStencilCompareMask = f_; + } + { + PFN_vkCmdSetStencilOp f_ = (PFN_vkCmdSetStencilOp)gdpa(device, "vkCmdSetStencilOp"); + if (!f_) f_ = (PFN_vkCmdSetStencilOp)gdpa(device, "vkCmdSetStencilOpEXT"); + dt->vkCmdSetStencilOp = f_; + } + { + PFN_vkCmdSetStencilReference f_ = (PFN_vkCmdSetStencilReference)gdpa(device, "vkCmdSetStencilReference"); + dt->vkCmdSetStencilReference = f_; + } + { + PFN_vkCmdSetStencilTestEnable f_ = (PFN_vkCmdSetStencilTestEnable)gdpa(device, "vkCmdSetStencilTestEnable"); + if (!f_) f_ = (PFN_vkCmdSetStencilTestEnable)gdpa(device, "vkCmdSetStencilTestEnableEXT"); + dt->vkCmdSetStencilTestEnable = f_; + } + { + PFN_vkCmdSetStencilWriteMask f_ = (PFN_vkCmdSetStencilWriteMask)gdpa(device, "vkCmdSetStencilWriteMask"); + dt->vkCmdSetStencilWriteMask = f_; + } + { + PFN_vkCmdSetTessellationDomainOriginEXT f_ = (PFN_vkCmdSetTessellationDomainOriginEXT)gdpa(device, "vkCmdSetTessellationDomainOriginEXT"); + dt->vkCmdSetTessellationDomainOriginEXT = f_; + } + { + PFN_vkCmdSetVertexInputEXT f_ = (PFN_vkCmdSetVertexInputEXT)gdpa(device, "vkCmdSetVertexInputEXT"); + dt->vkCmdSetVertexInputEXT = f_; + } + { + PFN_vkCmdSetViewport f_ = (PFN_vkCmdSetViewport)gdpa(device, "vkCmdSetViewport"); + dt->vkCmdSetViewport = f_; + } + { + PFN_vkCmdSetViewportWithCount f_ = (PFN_vkCmdSetViewportWithCount)gdpa(device, "vkCmdSetViewportWithCount"); + if (!f_) f_ = (PFN_vkCmdSetViewportWithCount)gdpa(device, "vkCmdSetViewportWithCountEXT"); + dt->vkCmdSetViewportWithCount = f_; + } + { + PFN_vkCmdUpdateBuffer f_ = (PFN_vkCmdUpdateBuffer)gdpa(device, "vkCmdUpdateBuffer"); + dt->vkCmdUpdateBuffer = f_; + } + { + PFN_vkCmdWaitEvents f_ = (PFN_vkCmdWaitEvents)gdpa(device, "vkCmdWaitEvents"); + dt->vkCmdWaitEvents = f_; + } + { + PFN_vkCmdWaitEvents2 f_ = (PFN_vkCmdWaitEvents2)gdpa(device, "vkCmdWaitEvents2"); + if (!f_) f_ = (PFN_vkCmdWaitEvents2)gdpa(device, "vkCmdWaitEvents2KHR"); + dt->vkCmdWaitEvents2 = f_; + } + { + PFN_vkCmdWriteTimestamp f_ = (PFN_vkCmdWriteTimestamp)gdpa(device, "vkCmdWriteTimestamp"); + dt->vkCmdWriteTimestamp = f_; + } + { + PFN_vkCmdWriteTimestamp2 f_ = (PFN_vkCmdWriteTimestamp2)gdpa(device, "vkCmdWriteTimestamp2"); + if (!f_) f_ = (PFN_vkCmdWriteTimestamp2)gdpa(device, "vkCmdWriteTimestamp2KHR"); + dt->vkCmdWriteTimestamp2 = f_; + } + { + PFN_vkCreateBuffer f_ = (PFN_vkCreateBuffer)gdpa(device, "vkCreateBuffer"); + dt->vkCreateBuffer = f_; + } + { + PFN_vkCreateBufferView f_ = (PFN_vkCreateBufferView)gdpa(device, "vkCreateBufferView"); + dt->vkCreateBufferView = f_; + } + { + PFN_vkCreateCommandPool f_ = (PFN_vkCreateCommandPool)gdpa(device, "vkCreateCommandPool"); + dt->vkCreateCommandPool = f_; + } + { + PFN_vkCreateComputePipelines f_ = (PFN_vkCreateComputePipelines)gdpa(device, "vkCreateComputePipelines"); + dt->vkCreateComputePipelines = f_; + } + { + PFN_vkCreateDescriptorPool f_ = (PFN_vkCreateDescriptorPool)gdpa(device, "vkCreateDescriptorPool"); + dt->vkCreateDescriptorPool = f_; + } + { + PFN_vkCreateDescriptorSetLayout f_ = (PFN_vkCreateDescriptorSetLayout)gdpa(device, "vkCreateDescriptorSetLayout"); + dt->vkCreateDescriptorSetLayout = f_; + } + { + PFN_vkCreateDescriptorUpdateTemplate f_ = (PFN_vkCreateDescriptorUpdateTemplate)gdpa(device, "vkCreateDescriptorUpdateTemplate"); + if (!f_) f_ = (PFN_vkCreateDescriptorUpdateTemplate)gdpa(device, "vkCreateDescriptorUpdateTemplateKHR"); + dt->vkCreateDescriptorUpdateTemplate = f_; + } + { + PFN_vkCreateEvent f_ = (PFN_vkCreateEvent)gdpa(device, "vkCreateEvent"); + dt->vkCreateEvent = f_; + } + { + PFN_vkCreateFence f_ = (PFN_vkCreateFence)gdpa(device, "vkCreateFence"); + dt->vkCreateFence = f_; + } + { + PFN_vkCreateFramebuffer f_ = (PFN_vkCreateFramebuffer)gdpa(device, "vkCreateFramebuffer"); + dt->vkCreateFramebuffer = f_; + } + { + PFN_vkCreateGraphicsPipelines f_ = (PFN_vkCreateGraphicsPipelines)gdpa(device, "vkCreateGraphicsPipelines"); + dt->vkCreateGraphicsPipelines = f_; + } + { + PFN_vkCreateImage f_ = (PFN_vkCreateImage)gdpa(device, "vkCreateImage"); + dt->vkCreateImage = f_; + } + { + PFN_vkCreateImageView f_ = (PFN_vkCreateImageView)gdpa(device, "vkCreateImageView"); + dt->vkCreateImageView = f_; + } + { + PFN_vkCreatePipelineCache f_ = (PFN_vkCreatePipelineCache)gdpa(device, "vkCreatePipelineCache"); + dt->vkCreatePipelineCache = f_; + } + { + PFN_vkCreatePipelineLayout f_ = (PFN_vkCreatePipelineLayout)gdpa(device, "vkCreatePipelineLayout"); + dt->vkCreatePipelineLayout = f_; + } + { + PFN_vkCreateQueryPool f_ = (PFN_vkCreateQueryPool)gdpa(device, "vkCreateQueryPool"); + dt->vkCreateQueryPool = f_; + } + { + PFN_vkCreateRenderPass f_ = (PFN_vkCreateRenderPass)gdpa(device, "vkCreateRenderPass"); + dt->vkCreateRenderPass = f_; + } + { + PFN_vkCreateRenderPass2 f_ = (PFN_vkCreateRenderPass2)gdpa(device, "vkCreateRenderPass2"); + if (!f_) f_ = (PFN_vkCreateRenderPass2)gdpa(device, "vkCreateRenderPass2KHR"); + dt->vkCreateRenderPass2 = f_; + } + { + PFN_vkCreateSampler f_ = (PFN_vkCreateSampler)gdpa(device, "vkCreateSampler"); + dt->vkCreateSampler = f_; + } + { + PFN_vkCreateSamplerYcbcrConversion f_ = (PFN_vkCreateSamplerYcbcrConversion)gdpa(device, "vkCreateSamplerYcbcrConversion"); + if (!f_) f_ = (PFN_vkCreateSamplerYcbcrConversion)gdpa(device, "vkCreateSamplerYcbcrConversionKHR"); + dt->vkCreateSamplerYcbcrConversion = f_; + } + { + PFN_vkCreateSemaphore f_ = (PFN_vkCreateSemaphore)gdpa(device, "vkCreateSemaphore"); + dt->vkCreateSemaphore = f_; + } + { + PFN_vkCreateShaderModule f_ = (PFN_vkCreateShaderModule)gdpa(device, "vkCreateShaderModule"); + dt->vkCreateShaderModule = f_; + } + { + PFN_vkCreateTensorARM f_ = (PFN_vkCreateTensorARM)gdpa(device, "vkCreateTensorARM"); + dt->vkCreateTensorARM = f_; + } + { + PFN_vkCreateTensorViewARM f_ = (PFN_vkCreateTensorViewARM)gdpa(device, "vkCreateTensorViewARM"); + dt->vkCreateTensorViewARM = f_; + } + { + PFN_vkDestroyBuffer f_ = (PFN_vkDestroyBuffer)gdpa(device, "vkDestroyBuffer"); + dt->vkDestroyBuffer = f_; + } + { + PFN_vkDestroyBufferView f_ = (PFN_vkDestroyBufferView)gdpa(device, "vkDestroyBufferView"); + dt->vkDestroyBufferView = f_; + } + { + PFN_vkDestroyCommandPool f_ = (PFN_vkDestroyCommandPool)gdpa(device, "vkDestroyCommandPool"); + dt->vkDestroyCommandPool = f_; + } + { + PFN_vkDestroyDescriptorPool f_ = (PFN_vkDestroyDescriptorPool)gdpa(device, "vkDestroyDescriptorPool"); + dt->vkDestroyDescriptorPool = f_; + } + { + PFN_vkDestroyDescriptorSetLayout f_ = (PFN_vkDestroyDescriptorSetLayout)gdpa(device, "vkDestroyDescriptorSetLayout"); + dt->vkDestroyDescriptorSetLayout = f_; + } + { + PFN_vkDestroyDescriptorUpdateTemplate f_ = (PFN_vkDestroyDescriptorUpdateTemplate)gdpa(device, "vkDestroyDescriptorUpdateTemplate"); + if (!f_) f_ = (PFN_vkDestroyDescriptorUpdateTemplate)gdpa(device, "vkDestroyDescriptorUpdateTemplateKHR"); + dt->vkDestroyDescriptorUpdateTemplate = f_; + } + { + PFN_vkDestroyDevice f_ = (PFN_vkDestroyDevice)gdpa(device, "vkDestroyDevice"); + dt->vkDestroyDevice = f_; + } + { + PFN_vkDestroyEvent f_ = (PFN_vkDestroyEvent)gdpa(device, "vkDestroyEvent"); + dt->vkDestroyEvent = f_; + } + { + PFN_vkDestroyFence f_ = (PFN_vkDestroyFence)gdpa(device, "vkDestroyFence"); + dt->vkDestroyFence = f_; + } + { + PFN_vkDestroyFramebuffer f_ = (PFN_vkDestroyFramebuffer)gdpa(device, "vkDestroyFramebuffer"); + dt->vkDestroyFramebuffer = f_; + } + { + PFN_vkDestroyImage f_ = (PFN_vkDestroyImage)gdpa(device, "vkDestroyImage"); + dt->vkDestroyImage = f_; + } + { + PFN_vkDestroyImageView f_ = (PFN_vkDestroyImageView)gdpa(device, "vkDestroyImageView"); + dt->vkDestroyImageView = f_; + } + { + PFN_vkDestroyPipeline f_ = (PFN_vkDestroyPipeline)gdpa(device, "vkDestroyPipeline"); + dt->vkDestroyPipeline = f_; + } + { + PFN_vkDestroyPipelineCache f_ = (PFN_vkDestroyPipelineCache)gdpa(device, "vkDestroyPipelineCache"); + dt->vkDestroyPipelineCache = f_; + } + { + PFN_vkDestroyPipelineLayout f_ = (PFN_vkDestroyPipelineLayout)gdpa(device, "vkDestroyPipelineLayout"); + dt->vkDestroyPipelineLayout = f_; + } + { + PFN_vkDestroyQueryPool f_ = (PFN_vkDestroyQueryPool)gdpa(device, "vkDestroyQueryPool"); + dt->vkDestroyQueryPool = f_; + } + { + PFN_vkDestroyRenderPass f_ = (PFN_vkDestroyRenderPass)gdpa(device, "vkDestroyRenderPass"); + dt->vkDestroyRenderPass = f_; + } + { + PFN_vkDestroySampler f_ = (PFN_vkDestroySampler)gdpa(device, "vkDestroySampler"); + dt->vkDestroySampler = f_; + } + { + PFN_vkDestroySamplerYcbcrConversion f_ = (PFN_vkDestroySamplerYcbcrConversion)gdpa(device, "vkDestroySamplerYcbcrConversion"); + if (!f_) f_ = (PFN_vkDestroySamplerYcbcrConversion)gdpa(device, "vkDestroySamplerYcbcrConversionKHR"); + dt->vkDestroySamplerYcbcrConversion = f_; + } + { + PFN_vkDestroySemaphore f_ = (PFN_vkDestroySemaphore)gdpa(device, "vkDestroySemaphore"); + dt->vkDestroySemaphore = f_; + } + { + PFN_vkDestroyShaderModule f_ = (PFN_vkDestroyShaderModule)gdpa(device, "vkDestroyShaderModule"); + dt->vkDestroyShaderModule = f_; + } + { + PFN_vkDestroyTensorARM f_ = (PFN_vkDestroyTensorARM)gdpa(device, "vkDestroyTensorARM"); + dt->vkDestroyTensorARM = f_; + } + { + PFN_vkDestroyTensorViewARM f_ = (PFN_vkDestroyTensorViewARM)gdpa(device, "vkDestroyTensorViewARM"); + dt->vkDestroyTensorViewARM = f_; + } + { + PFN_vkDeviceWaitIdle f_ = (PFN_vkDeviceWaitIdle)gdpa(device, "vkDeviceWaitIdle"); + dt->vkDeviceWaitIdle = f_; + } + { + PFN_vkEndCommandBuffer f_ = (PFN_vkEndCommandBuffer)gdpa(device, "vkEndCommandBuffer"); + dt->vkEndCommandBuffer = f_; + } + { + PFN_vkFlushMappedMemoryRanges f_ = (PFN_vkFlushMappedMemoryRanges)gdpa(device, "vkFlushMappedMemoryRanges"); + dt->vkFlushMappedMemoryRanges = f_; + } + { + PFN_vkFreeCommandBuffers f_ = (PFN_vkFreeCommandBuffers)gdpa(device, "vkFreeCommandBuffers"); + dt->vkFreeCommandBuffers = f_; + } + { + PFN_vkFreeDescriptorSets f_ = (PFN_vkFreeDescriptorSets)gdpa(device, "vkFreeDescriptorSets"); + dt->vkFreeDescriptorSets = f_; + } + { + PFN_vkFreeMemory f_ = (PFN_vkFreeMemory)gdpa(device, "vkFreeMemory"); + dt->vkFreeMemory = f_; + } + { + PFN_vkGetBufferDeviceAddress f_ = (PFN_vkGetBufferDeviceAddress)gdpa(device, "vkGetBufferDeviceAddress"); + if (!f_) f_ = (PFN_vkGetBufferDeviceAddress)gdpa(device, "vkGetBufferDeviceAddressEXT"); + if (!f_) f_ = (PFN_vkGetBufferDeviceAddress)gdpa(device, "vkGetBufferDeviceAddressKHR"); + dt->vkGetBufferDeviceAddress = f_; + } + { + PFN_vkGetBufferMemoryRequirements f_ = (PFN_vkGetBufferMemoryRequirements)gdpa(device, "vkGetBufferMemoryRequirements"); + dt->vkGetBufferMemoryRequirements = f_; + } + { + PFN_vkGetBufferMemoryRequirements2 f_ = (PFN_vkGetBufferMemoryRequirements2)gdpa(device, "vkGetBufferMemoryRequirements2"); + if (!f_) f_ = (PFN_vkGetBufferMemoryRequirements2)gdpa(device, "vkGetBufferMemoryRequirements2KHR"); + dt->vkGetBufferMemoryRequirements2 = f_; + } + { + PFN_vkGetBufferOpaqueCaptureAddress f_ = (PFN_vkGetBufferOpaqueCaptureAddress)gdpa(device, "vkGetBufferOpaqueCaptureAddress"); + if (!f_) f_ = (PFN_vkGetBufferOpaqueCaptureAddress)gdpa(device, "vkGetBufferOpaqueCaptureAddressKHR"); + dt->vkGetBufferOpaqueCaptureAddress = f_; + } + { + PFN_vkGetCalibratedTimestampsKHR f_ = (PFN_vkGetCalibratedTimestampsKHR)gdpa(device, "vkGetCalibratedTimestampsKHR"); + if (!f_) f_ = (PFN_vkGetCalibratedTimestampsKHR)gdpa(device, "vkGetCalibratedTimestampsEXT"); + dt->vkGetCalibratedTimestampsKHR = f_; + } + { + PFN_vkGetDescriptorSetLayoutSupport f_ = (PFN_vkGetDescriptorSetLayoutSupport)gdpa(device, "vkGetDescriptorSetLayoutSupport"); + if (!f_) f_ = (PFN_vkGetDescriptorSetLayoutSupport)gdpa(device, "vkGetDescriptorSetLayoutSupportKHR"); + dt->vkGetDescriptorSetLayoutSupport = f_; + } + { + PFN_vkGetDeviceBufferMemoryRequirements f_ = (PFN_vkGetDeviceBufferMemoryRequirements)gdpa(device, "vkGetDeviceBufferMemoryRequirements"); + if (!f_) f_ = (PFN_vkGetDeviceBufferMemoryRequirements)gdpa(device, "vkGetDeviceBufferMemoryRequirementsKHR"); + dt->vkGetDeviceBufferMemoryRequirements = f_; + } + { + PFN_vkGetDeviceGroupPeerMemoryFeatures f_ = (PFN_vkGetDeviceGroupPeerMemoryFeatures)gdpa(device, "vkGetDeviceGroupPeerMemoryFeatures"); + if (!f_) f_ = (PFN_vkGetDeviceGroupPeerMemoryFeatures)gdpa(device, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); + dt->vkGetDeviceGroupPeerMemoryFeatures = f_; + } + { + PFN_vkGetDeviceImageMemoryRequirements f_ = (PFN_vkGetDeviceImageMemoryRequirements)gdpa(device, "vkGetDeviceImageMemoryRequirements"); + if (!f_) f_ = (PFN_vkGetDeviceImageMemoryRequirements)gdpa(device, "vkGetDeviceImageMemoryRequirementsKHR"); + dt->vkGetDeviceImageMemoryRequirements = f_; + } + { + PFN_vkGetDeviceImageSparseMemoryRequirements f_ = (PFN_vkGetDeviceImageSparseMemoryRequirements)gdpa(device, "vkGetDeviceImageSparseMemoryRequirements"); + if (!f_) f_ = (PFN_vkGetDeviceImageSparseMemoryRequirements)gdpa(device, "vkGetDeviceImageSparseMemoryRequirementsKHR"); + dt->vkGetDeviceImageSparseMemoryRequirements = f_; + } + { + PFN_vkGetDeviceImageSubresourceLayout f_ = (PFN_vkGetDeviceImageSubresourceLayout)gdpa(device, "vkGetDeviceImageSubresourceLayout"); + if (!f_) f_ = (PFN_vkGetDeviceImageSubresourceLayout)gdpa(device, "vkGetDeviceImageSubresourceLayoutKHR"); + dt->vkGetDeviceImageSubresourceLayout = f_; + } + { + PFN_vkGetDeviceMemoryCommitment f_ = (PFN_vkGetDeviceMemoryCommitment)gdpa(device, "vkGetDeviceMemoryCommitment"); + dt->vkGetDeviceMemoryCommitment = f_; + } + { + PFN_vkGetDeviceMemoryOpaqueCaptureAddress f_ = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)gdpa(device, "vkGetDeviceMemoryOpaqueCaptureAddress"); + if (!f_) f_ = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)gdpa(device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); + dt->vkGetDeviceMemoryOpaqueCaptureAddress = f_; + } + { + PFN_vkGetDeviceQueue f_ = (PFN_vkGetDeviceQueue)gdpa(device, "vkGetDeviceQueue"); + dt->vkGetDeviceQueue = f_; + } + { + PFN_vkGetDeviceQueue2 f_ = (PFN_vkGetDeviceQueue2)gdpa(device, "vkGetDeviceQueue2"); + dt->vkGetDeviceQueue2 = f_; + } + { + PFN_vkGetDeviceTensorMemoryRequirementsARM f_ = (PFN_vkGetDeviceTensorMemoryRequirementsARM)gdpa(device, "vkGetDeviceTensorMemoryRequirementsARM"); + dt->vkGetDeviceTensorMemoryRequirementsARM = f_; + } + { + PFN_vkGetEventStatus f_ = (PFN_vkGetEventStatus)gdpa(device, "vkGetEventStatus"); + dt->vkGetEventStatus = f_; + } + { + PFN_vkGetFenceFdKHR f_ = (PFN_vkGetFenceFdKHR)gdpa(device, "vkGetFenceFdKHR"); + dt->vkGetFenceFdKHR = f_; + } + { + PFN_vkGetFenceStatus f_ = (PFN_vkGetFenceStatus)gdpa(device, "vkGetFenceStatus"); + dt->vkGetFenceStatus = f_; + } + { + PFN_vkGetImageDrmFormatModifierPropertiesEXT f_ = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)gdpa(device, "vkGetImageDrmFormatModifierPropertiesEXT"); + dt->vkGetImageDrmFormatModifierPropertiesEXT = f_; + } + { + PFN_vkGetImageMemoryRequirements f_ = (PFN_vkGetImageMemoryRequirements)gdpa(device, "vkGetImageMemoryRequirements"); + dt->vkGetImageMemoryRequirements = f_; + } + { + PFN_vkGetImageMemoryRequirements2 f_ = (PFN_vkGetImageMemoryRequirements2)gdpa(device, "vkGetImageMemoryRequirements2"); + if (!f_) f_ = (PFN_vkGetImageMemoryRequirements2)gdpa(device, "vkGetImageMemoryRequirements2KHR"); + dt->vkGetImageMemoryRequirements2 = f_; + } + { + PFN_vkGetImageSparseMemoryRequirements f_ = (PFN_vkGetImageSparseMemoryRequirements)gdpa(device, "vkGetImageSparseMemoryRequirements"); + dt->vkGetImageSparseMemoryRequirements = f_; + } + { + PFN_vkGetImageSparseMemoryRequirements2 f_ = (PFN_vkGetImageSparseMemoryRequirements2)gdpa(device, "vkGetImageSparseMemoryRequirements2"); + if (!f_) f_ = (PFN_vkGetImageSparseMemoryRequirements2)gdpa(device, "vkGetImageSparseMemoryRequirements2KHR"); + dt->vkGetImageSparseMemoryRequirements2 = f_; + } + { + PFN_vkGetImageSubresourceLayout f_ = (PFN_vkGetImageSubresourceLayout)gdpa(device, "vkGetImageSubresourceLayout"); + dt->vkGetImageSubresourceLayout = f_; + } + { + PFN_vkGetImageSubresourceLayout2 f_ = (PFN_vkGetImageSubresourceLayout2)gdpa(device, "vkGetImageSubresourceLayout2"); + if (!f_) f_ = (PFN_vkGetImageSubresourceLayout2)gdpa(device, "vkGetImageSubresourceLayout2EXT"); + if (!f_) f_ = (PFN_vkGetImageSubresourceLayout2)gdpa(device, "vkGetImageSubresourceLayout2KHR"); + dt->vkGetImageSubresourceLayout2 = f_; + } + { + PFN_vkGetMemoryFdKHR f_ = (PFN_vkGetMemoryFdKHR)gdpa(device, "vkGetMemoryFdKHR"); + dt->vkGetMemoryFdKHR = f_; + } + { + PFN_vkGetMemoryFdPropertiesKHR f_ = (PFN_vkGetMemoryFdPropertiesKHR)gdpa(device, "vkGetMemoryFdPropertiesKHR"); + dt->vkGetMemoryFdPropertiesKHR = f_; + } + { + PFN_vkGetMemoryHostPointerPropertiesEXT f_ = (PFN_vkGetMemoryHostPointerPropertiesEXT)gdpa(device, "vkGetMemoryHostPointerPropertiesEXT"); + dt->vkGetMemoryHostPointerPropertiesEXT = f_; + } + { + PFN_vkGetPipelineCacheData f_ = (PFN_vkGetPipelineCacheData)gdpa(device, "vkGetPipelineCacheData"); + dt->vkGetPipelineCacheData = f_; + } + { + PFN_vkGetQueryPoolResults f_ = (PFN_vkGetQueryPoolResults)gdpa(device, "vkGetQueryPoolResults"); + dt->vkGetQueryPoolResults = f_; + } + { + PFN_vkGetRenderAreaGranularity f_ = (PFN_vkGetRenderAreaGranularity)gdpa(device, "vkGetRenderAreaGranularity"); + dt->vkGetRenderAreaGranularity = f_; + } + { + PFN_vkGetRenderingAreaGranularity f_ = (PFN_vkGetRenderingAreaGranularity)gdpa(device, "vkGetRenderingAreaGranularity"); + if (!f_) f_ = (PFN_vkGetRenderingAreaGranularity)gdpa(device, "vkGetRenderingAreaGranularityKHR"); + dt->vkGetRenderingAreaGranularity = f_; + } + { + PFN_vkGetSemaphoreCounterValue f_ = (PFN_vkGetSemaphoreCounterValue)gdpa(device, "vkGetSemaphoreCounterValue"); + if (!f_) f_ = (PFN_vkGetSemaphoreCounterValue)gdpa(device, "vkGetSemaphoreCounterValueKHR"); + dt->vkGetSemaphoreCounterValue = f_; + } + { + PFN_vkGetSemaphoreFdKHR f_ = (PFN_vkGetSemaphoreFdKHR)gdpa(device, "vkGetSemaphoreFdKHR"); + dt->vkGetSemaphoreFdKHR = f_; + } + { + PFN_vkGetShaderModuleCreateInfoIdentifierEXT f_ = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT)gdpa(device, "vkGetShaderModuleCreateInfoIdentifierEXT"); + dt->vkGetShaderModuleCreateInfoIdentifierEXT = f_; + } + { + PFN_vkGetShaderModuleIdentifierEXT f_ = (PFN_vkGetShaderModuleIdentifierEXT)gdpa(device, "vkGetShaderModuleIdentifierEXT"); + dt->vkGetShaderModuleIdentifierEXT = f_; + } + { + PFN_vkGetTensorMemoryRequirementsARM f_ = (PFN_vkGetTensorMemoryRequirementsARM)gdpa(device, "vkGetTensorMemoryRequirementsARM"); + dt->vkGetTensorMemoryRequirementsARM = f_; + } + { + PFN_vkImportFenceFdKHR f_ = (PFN_vkImportFenceFdKHR)gdpa(device, "vkImportFenceFdKHR"); + dt->vkImportFenceFdKHR = f_; + } + { + PFN_vkImportSemaphoreFdKHR f_ = (PFN_vkImportSemaphoreFdKHR)gdpa(device, "vkImportSemaphoreFdKHR"); + dt->vkImportSemaphoreFdKHR = f_; + } + { + PFN_vkInvalidateMappedMemoryRanges f_ = (PFN_vkInvalidateMappedMemoryRanges)gdpa(device, "vkInvalidateMappedMemoryRanges"); + dt->vkInvalidateMappedMemoryRanges = f_; + } + { + PFN_vkMapMemory f_ = (PFN_vkMapMemory)gdpa(device, "vkMapMemory"); + dt->vkMapMemory = f_; + } + { + PFN_vkMergePipelineCaches f_ = (PFN_vkMergePipelineCaches)gdpa(device, "vkMergePipelineCaches"); + dt->vkMergePipelineCaches = f_; + } + { + PFN_vkQueueBindSparse f_ = (PFN_vkQueueBindSparse)gdpa(device, "vkQueueBindSparse"); + dt->vkQueueBindSparse = f_; + } + { + PFN_vkQueueSubmit f_ = (PFN_vkQueueSubmit)gdpa(device, "vkQueueSubmit"); + dt->vkQueueSubmit = f_; + } + { + PFN_vkQueueSubmit2 f_ = (PFN_vkQueueSubmit2)gdpa(device, "vkQueueSubmit2"); + if (!f_) f_ = (PFN_vkQueueSubmit2)gdpa(device, "vkQueueSubmit2KHR"); + dt->vkQueueSubmit2 = f_; + } + { + PFN_vkQueueWaitIdle f_ = (PFN_vkQueueWaitIdle)gdpa(device, "vkQueueWaitIdle"); + dt->vkQueueWaitIdle = f_; + } + { + PFN_vkResetCommandBuffer f_ = (PFN_vkResetCommandBuffer)gdpa(device, "vkResetCommandBuffer"); + dt->vkResetCommandBuffer = f_; + } + { + PFN_vkResetCommandPool f_ = (PFN_vkResetCommandPool)gdpa(device, "vkResetCommandPool"); + dt->vkResetCommandPool = f_; + } + { + PFN_vkResetDescriptorPool f_ = (PFN_vkResetDescriptorPool)gdpa(device, "vkResetDescriptorPool"); + dt->vkResetDescriptorPool = f_; + } + { + PFN_vkResetEvent f_ = (PFN_vkResetEvent)gdpa(device, "vkResetEvent"); + dt->vkResetEvent = f_; + } + { + PFN_vkResetFences f_ = (PFN_vkResetFences)gdpa(device, "vkResetFences"); + dt->vkResetFences = f_; + } + { + PFN_vkResetQueryPool f_ = (PFN_vkResetQueryPool)gdpa(device, "vkResetQueryPool"); + if (!f_) f_ = (PFN_vkResetQueryPool)gdpa(device, "vkResetQueryPoolEXT"); + dt->vkResetQueryPool = f_; + } + { + PFN_vkSetDeviceMemoryPriorityEXT f_ = (PFN_vkSetDeviceMemoryPriorityEXT)gdpa(device, "vkSetDeviceMemoryPriorityEXT"); + dt->vkSetDeviceMemoryPriorityEXT = f_; + } + { + PFN_vkSetEvent f_ = (PFN_vkSetEvent)gdpa(device, "vkSetEvent"); + dt->vkSetEvent = f_; + } + { + PFN_vkSignalSemaphore f_ = (PFN_vkSignalSemaphore)gdpa(device, "vkSignalSemaphore"); + if (!f_) f_ = (PFN_vkSignalSemaphore)gdpa(device, "vkSignalSemaphoreKHR"); + dt->vkSignalSemaphore = f_; + } + { + PFN_vkTrimCommandPool f_ = (PFN_vkTrimCommandPool)gdpa(device, "vkTrimCommandPool"); + if (!f_) f_ = (PFN_vkTrimCommandPool)gdpa(device, "vkTrimCommandPoolKHR"); + dt->vkTrimCommandPool = f_; + } + { + PFN_vkUnmapMemory f_ = (PFN_vkUnmapMemory)gdpa(device, "vkUnmapMemory"); + dt->vkUnmapMemory = f_; + } + { + PFN_vkUpdateDescriptorSetWithTemplate f_ = (PFN_vkUpdateDescriptorSetWithTemplate)gdpa(device, "vkUpdateDescriptorSetWithTemplate"); + if (!f_) f_ = (PFN_vkUpdateDescriptorSetWithTemplate)gdpa(device, "vkUpdateDescriptorSetWithTemplateKHR"); + dt->vkUpdateDescriptorSetWithTemplate = f_; + } + { + PFN_vkUpdateDescriptorSets f_ = (PFN_vkUpdateDescriptorSets)gdpa(device, "vkUpdateDescriptorSets"); + dt->vkUpdateDescriptorSets = f_; + } + { + PFN_vkWaitForFences f_ = (PFN_vkWaitForFences)gdpa(device, "vkWaitForFences"); + dt->vkWaitForFences = f_; + } + { + PFN_vkWaitSemaphores f_ = (PFN_vkWaitSemaphores)gdpa(device, "vkWaitSemaphores"); + if (!f_) f_ = (PFN_vkWaitSemaphores)gdpa(device, "vkWaitSemaphoresKHR"); + dt->vkWaitSemaphores = f_; + } +} + +void vkb_sv_vkAllocateCommandBuffers(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkCommandBufferAllocateInfo *pAllocateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBufferAllocateInfo *a_ = (VkCommandBufferAllocateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBufferAllocateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCommandBufferAllocateInfo(d, &a_[i_]); + pAllocateInfo = a_; + } else { + pAllocateInfo = NULL; + } + uint8_t has_pCommandBuffers = vkb_dec_u8(d); uint32_t n_pCommandBuffers = vkb_dec_u32(d); + VkCommandBuffer *pCommandBuffers = has_pCommandBuffers ? (VkCommandBuffer *)vkb_dec_alloc_zero(d, (size_t)n_pCommandBuffers * sizeof(VkCommandBuffer)) : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkAllocateCommandBuffers) { vkb_srv_missing(c, "vkAllocateCommandBuffers"); return; } + VkResult r_ = c->dt->vkAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); + vkb_enc_bytes(e, &r_, sizeof(r_)); + { + uint32_t rn_ = n_pCommandBuffers; + uint32_t has_ = pCommandBuffers ? (rn_ < n_pCommandBuffers ? rn_ : n_pCommandBuffers) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_u64(e, (uint64_t)(uintptr_t)pCommandBuffers[i_]); + } +} + +void vkb_sv_vkAllocateDescriptorSets(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDescriptorSetAllocateInfo *pAllocateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDescriptorSetAllocateInfo *a_ = (VkDescriptorSetAllocateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDescriptorSetAllocateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDescriptorSetAllocateInfo(d, &a_[i_]); + pAllocateInfo = a_; + } else { + pAllocateInfo = NULL; + } + uint8_t has_pDescriptorSets = vkb_dec_u8(d); uint32_t n_pDescriptorSets = vkb_dec_u32(d); + VkDescriptorSet *pDescriptorSets = has_pDescriptorSets ? (VkDescriptorSet *)vkb_dec_alloc_zero(d, (size_t)n_pDescriptorSets * sizeof(VkDescriptorSet)) : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkAllocateDescriptorSets) { vkb_srv_missing(c, "vkAllocateDescriptorSets"); return; } + VkResult r_ = c->dt->vkAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets); + vkb_enc_bytes(e, &r_, sizeof(r_)); + { + uint32_t rn_ = n_pDescriptorSets; + uint32_t has_ = pDescriptorSets ? (rn_ < n_pDescriptorSets ? rn_ : n_pDescriptorSets) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pDescriptorSets[i_], sizeof(VkDescriptorSet)); + } +} + +void vkb_sv_vkBeginCommandBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkCommandBufferBeginInfo *pBeginInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBufferBeginInfo *a_ = (VkCommandBufferBeginInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBufferBeginInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCommandBufferBeginInfo(d, &a_[i_]); + pBeginInfo = a_; + } else { + pBeginInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkBeginCommandBuffer) { vkb_srv_missing(c, "vkBeginCommandBuffer"); return; } + VkResult r_ = c->dt->vkBeginCommandBuffer(commandBuffer, pBeginInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkBindBufferMemory(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceMemory memory; + vkb_dec_bytes(d, &memory, sizeof(memory)); + VkDeviceSize memoryOffset; + vkb_dec_bytes(d, &memoryOffset, sizeof(memoryOffset)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkBindBufferMemory) { vkb_srv_missing(c, "vkBindBufferMemory"); return; } + VkResult r_ = c->dt->vkBindBufferMemory(device, buffer, memory, memoryOffset); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkBindBufferMemory2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t bindInfoCount; + vkb_dec_bytes(d, &bindInfoCount, sizeof(bindInfoCount)); + const VkBindBufferMemoryInfo *pBindInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBindBufferMemoryInfo *a_ = (VkBindBufferMemoryInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBindBufferMemoryInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBindBufferMemoryInfo(d, &a_[i_]); + pBindInfos = a_; + } else { + pBindInfos = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkBindBufferMemory2) { vkb_srv_missing(c, "vkBindBufferMemory2"); return; } + VkResult r_ = c->dt->vkBindBufferMemory2(device, bindInfoCount, pBindInfos); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkBindImageMemory(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + VkDeviceMemory memory; + vkb_dec_bytes(d, &memory, sizeof(memory)); + VkDeviceSize memoryOffset; + vkb_dec_bytes(d, &memoryOffset, sizeof(memoryOffset)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkBindImageMemory) { vkb_srv_missing(c, "vkBindImageMemory"); return; } + VkResult r_ = c->dt->vkBindImageMemory(device, image, memory, memoryOffset); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkBindImageMemory2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t bindInfoCount; + vkb_dec_bytes(d, &bindInfoCount, sizeof(bindInfoCount)); + const VkBindImageMemoryInfo *pBindInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBindImageMemoryInfo *a_ = (VkBindImageMemoryInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBindImageMemoryInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBindImageMemoryInfo(d, &a_[i_]); + pBindInfos = a_; + } else { + pBindInfos = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkBindImageMemory2) { vkb_srv_missing(c, "vkBindImageMemory2"); return; } + VkResult r_ = c->dt->vkBindImageMemory2(device, bindInfoCount, pBindInfos); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkBindTensorMemoryARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t bindInfoCount; + vkb_dec_bytes(d, &bindInfoCount, sizeof(bindInfoCount)); + const VkBindTensorMemoryInfoARM *pBindInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBindTensorMemoryInfoARM *a_ = (VkBindTensorMemoryInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBindTensorMemoryInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBindTensorMemoryInfoARM(d, &a_[i_]); + pBindInfos = a_; + } else { + pBindInfos = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkBindTensorMemoryARM) { vkb_srv_missing(c, "vkBindTensorMemoryARM"); return; } + VkResult r_ = c->dt->vkBindTensorMemoryARM(device, bindInfoCount, pBindInfos); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkCmdBeginConditionalRenderingEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkConditionalRenderingBeginInfoEXT *pConditionalRenderingBegin; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkConditionalRenderingBeginInfoEXT *a_ = (VkConditionalRenderingBeginInfoEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkConditionalRenderingBeginInfoEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkConditionalRenderingBeginInfoEXT(d, &a_[i_]); + pConditionalRenderingBegin = a_; + } else { + pConditionalRenderingBegin = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginConditionalRenderingEXT) { vkb_srv_missing(c, "vkCmdBeginConditionalRenderingEXT"); return; } + c->dt->vkCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin); +} + +void vkb_sv_vkCmdBeginCustomResolveEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkBeginCustomResolveInfoEXT *pBeginCustomResolveInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBeginCustomResolveInfoEXT *a_ = (VkBeginCustomResolveInfoEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBeginCustomResolveInfoEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBeginCustomResolveInfoEXT(d, &a_[i_]); + pBeginCustomResolveInfo = a_; + } else { + pBeginCustomResolveInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginCustomResolveEXT) { vkb_srv_missing(c, "vkCmdBeginCustomResolveEXT"); return; } + c->dt->vkCmdBeginCustomResolveEXT(commandBuffer, pBeginCustomResolveInfo); +} + +void vkb_sv_vkCmdBeginQuery(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t query; + vkb_dec_bytes(d, &query, sizeof(query)); + VkQueryControlFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginQuery) { vkb_srv_missing(c, "vkCmdBeginQuery"); return; } + c->dt->vkCmdBeginQuery(commandBuffer, queryPool, query, flags); +} + +void vkb_sv_vkCmdBeginQueryIndexedEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t query; + vkb_dec_bytes(d, &query, sizeof(query)); + VkQueryControlFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + uint32_t index; + vkb_dec_bytes(d, &index, sizeof(index)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginQueryIndexedEXT) { vkb_srv_missing(c, "vkCmdBeginQueryIndexedEXT"); return; } + c->dt->vkCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index); +} + +void vkb_sv_vkCmdBeginRenderPass(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkRenderPassBeginInfo *pRenderPassBegin; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderPassBeginInfo *a_ = (VkRenderPassBeginInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderPassBeginInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderPassBeginInfo(d, &a_[i_]); + pRenderPassBegin = a_; + } else { + pRenderPassBegin = NULL; + } + VkSubpassContents contents; + vkb_dec_bytes(d, &contents, sizeof(contents)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginRenderPass) { vkb_srv_missing(c, "vkCmdBeginRenderPass"); return; } + c->dt->vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); +} + +void vkb_sv_vkCmdBeginRenderPass2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkRenderPassBeginInfo *pRenderPassBegin; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderPassBeginInfo *a_ = (VkRenderPassBeginInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderPassBeginInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderPassBeginInfo(d, &a_[i_]); + pRenderPassBegin = a_; + } else { + pRenderPassBegin = NULL; + } + const VkSubpassBeginInfo *pSubpassBeginInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassBeginInfo *a_ = (VkSubpassBeginInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassBeginInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassBeginInfo(d, &a_[i_]); + pSubpassBeginInfo = a_; + } else { + pSubpassBeginInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginRenderPass2) { vkb_srv_missing(c, "vkCmdBeginRenderPass2"); return; } + c->dt->vkCmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo); +} + +void vkb_sv_vkCmdBeginRendering(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkRenderingInfo *pRenderingInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingInfo *a_ = (VkRenderingInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingInfo(d, &a_[i_]); + pRenderingInfo = a_; + } else { + pRenderingInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginRendering) { vkb_srv_missing(c, "vkCmdBeginRendering"); return; } + c->dt->vkCmdBeginRendering(commandBuffer, pRenderingInfo); +} + +void vkb_sv_vkCmdBeginTransformFeedbackEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstCounterBuffer; + vkb_dec_bytes(d, &firstCounterBuffer, sizeof(firstCounterBuffer)); + uint32_t counterBufferCount; + vkb_dec_bytes(d, &counterBufferCount, sizeof(counterBufferCount)); + const VkBuffer *pCounterBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pCounterBuffers = (const VkBuffer *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBuffer)); + } else { + pCounterBuffers = NULL; + } + const VkDeviceSize *pCounterBufferOffsets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pCounterBufferOffsets = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pCounterBufferOffsets = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBeginTransformFeedbackEXT) { vkb_srv_missing(c, "vkCmdBeginTransformFeedbackEXT"); return; } + c->dt->vkCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); +} + +void vkb_sv_vkCmdBindDescriptorSets(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineBindPoint pipelineBindPoint; + vkb_dec_bytes(d, &pipelineBindPoint, sizeof(pipelineBindPoint)); + VkPipelineLayout layout; + vkb_dec_bytes(d, &layout, sizeof(layout)); + uint32_t firstSet; + vkb_dec_bytes(d, &firstSet, sizeof(firstSet)); + uint32_t descriptorSetCount; + vkb_dec_bytes(d, &descriptorSetCount, sizeof(descriptorSetCount)); + const VkDescriptorSet *pDescriptorSets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pDescriptorSets = (const VkDescriptorSet *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorSet)); + } else { + pDescriptorSets = NULL; + } + uint32_t dynamicOffsetCount; + vkb_dec_bytes(d, &dynamicOffsetCount, sizeof(dynamicOffsetCount)); + const uint32_t *pDynamicOffsets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pDynamicOffsets = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + pDynamicOffsets = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindDescriptorSets) { vkb_srv_missing(c, "vkCmdBindDescriptorSets"); return; } + c->dt->vkCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); +} + +void vkb_sv_vkCmdBindDescriptorSets2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkBindDescriptorSetsInfo *pBindDescriptorSetsInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBindDescriptorSetsInfo *a_ = (VkBindDescriptorSetsInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBindDescriptorSetsInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBindDescriptorSetsInfo(d, &a_[i_]); + pBindDescriptorSetsInfo = a_; + } else { + pBindDescriptorSetsInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindDescriptorSets2) { vkb_srv_missing(c, "vkCmdBindDescriptorSets2"); return; } + c->dt->vkCmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo); +} + +void vkb_sv_vkCmdBindIndexBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + VkIndexType indexType; + vkb_dec_bytes(d, &indexType, sizeof(indexType)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindIndexBuffer) { vkb_srv_missing(c, "vkCmdBindIndexBuffer"); return; } + c->dt->vkCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); +} + +void vkb_sv_vkCmdBindIndexBuffer2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + VkDeviceSize size; + vkb_dec_bytes(d, &size, sizeof(size)); + VkIndexType indexType; + vkb_dec_bytes(d, &indexType, sizeof(indexType)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindIndexBuffer2) { vkb_srv_missing(c, "vkCmdBindIndexBuffer2"); return; } + c->dt->vkCmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType); +} + +void vkb_sv_vkCmdBindPipeline(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineBindPoint pipelineBindPoint; + vkb_dec_bytes(d, &pipelineBindPoint, sizeof(pipelineBindPoint)); + VkPipeline pipeline; + vkb_dec_bytes(d, &pipeline, sizeof(pipeline)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindPipeline) { vkb_srv_missing(c, "vkCmdBindPipeline"); return; } + c->dt->vkCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); +} + +void vkb_sv_vkCmdBindTransformFeedbackBuffersEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstBinding; + vkb_dec_bytes(d, &firstBinding, sizeof(firstBinding)); + uint32_t bindingCount; + vkb_dec_bytes(d, &bindingCount, sizeof(bindingCount)); + const VkBuffer *pBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pBuffers = (const VkBuffer *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBuffer)); + } else { + pBuffers = NULL; + } + const VkDeviceSize *pOffsets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pOffsets = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pOffsets = NULL; + } + const VkDeviceSize *pSizes; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pSizes = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pSizes = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindTransformFeedbackBuffersEXT) { vkb_srv_missing(c, "vkCmdBindTransformFeedbackBuffersEXT"); return; } + c->dt->vkCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); +} + +void vkb_sv_vkCmdBindVertexBuffers(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstBinding; + vkb_dec_bytes(d, &firstBinding, sizeof(firstBinding)); + uint32_t bindingCount; + vkb_dec_bytes(d, &bindingCount, sizeof(bindingCount)); + const VkBuffer *pBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pBuffers = (const VkBuffer *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBuffer)); + } else { + pBuffers = NULL; + } + const VkDeviceSize *pOffsets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pOffsets = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pOffsets = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindVertexBuffers) { vkb_srv_missing(c, "vkCmdBindVertexBuffers"); return; } + c->dt->vkCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); +} + +void vkb_sv_vkCmdBindVertexBuffers2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstBinding; + vkb_dec_bytes(d, &firstBinding, sizeof(firstBinding)); + uint32_t bindingCount; + vkb_dec_bytes(d, &bindingCount, sizeof(bindingCount)); + const VkBuffer *pBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pBuffers = (const VkBuffer *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBuffer)); + } else { + pBuffers = NULL; + } + const VkDeviceSize *pOffsets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pOffsets = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pOffsets = NULL; + } + const VkDeviceSize *pSizes; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pSizes = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pSizes = NULL; + } + const VkDeviceSize *pStrides; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pStrides = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pStrides = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBindVertexBuffers2) { vkb_srv_missing(c, "vkCmdBindVertexBuffers2"); return; } + c->dt->vkCmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); +} + +void vkb_sv_vkCmdBlitImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImage srcImage; + vkb_dec_bytes(d, &srcImage, sizeof(srcImage)); + VkImageLayout srcImageLayout; + vkb_dec_bytes(d, &srcImageLayout, sizeof(srcImageLayout)); + VkImage dstImage; + vkb_dec_bytes(d, &dstImage, sizeof(dstImage)); + VkImageLayout dstImageLayout; + vkb_dec_bytes(d, &dstImageLayout, sizeof(dstImageLayout)); + uint32_t regionCount; + vkb_dec_bytes(d, ®ionCount, sizeof(regionCount)); + const VkImageBlit *pRegions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRegions = (const VkImageBlit *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageBlit)); + } else { + pRegions = NULL; + } + VkFilter filter; + vkb_dec_bytes(d, &filter, sizeof(filter)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBlitImage) { vkb_srv_missing(c, "vkCmdBlitImage"); return; } + c->dt->vkCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); +} + +void vkb_sv_vkCmdBlitImage2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkBlitImageInfo2 *pBlitImageInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBlitImageInfo2 *a_ = (VkBlitImageInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBlitImageInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBlitImageInfo2(d, &a_[i_]); + pBlitImageInfo = a_; + } else { + pBlitImageInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdBlitImage2) { vkb_srv_missing(c, "vkCmdBlitImage2"); return; } + c->dt->vkCmdBlitImage2(commandBuffer, pBlitImageInfo); +} + +void vkb_sv_vkCmdClearAttachments(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t attachmentCount; + vkb_dec_bytes(d, &attachmentCount, sizeof(attachmentCount)); + const VkClearAttachment *pAttachments; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pAttachments = (const VkClearAttachment *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkClearAttachment)); + } else { + pAttachments = NULL; + } + uint32_t rectCount; + vkb_dec_bytes(d, &rectCount, sizeof(rectCount)); + const VkClearRect *pRects; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRects = (const VkClearRect *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkClearRect)); + } else { + pRects = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdClearAttachments) { vkb_srv_missing(c, "vkCmdClearAttachments"); return; } + c->dt->vkCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); +} + +void vkb_sv_vkCmdClearColorImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + VkImageLayout imageLayout; + vkb_dec_bytes(d, &imageLayout, sizeof(imageLayout)); + const VkClearColorValue *pColor; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pColor = (const VkClearColorValue *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkClearColorValue)); + } else { + pColor = NULL; + } + uint32_t rangeCount; + vkb_dec_bytes(d, &rangeCount, sizeof(rangeCount)); + const VkImageSubresourceRange *pRanges; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRanges = (const VkImageSubresourceRange *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageSubresourceRange)); + } else { + pRanges = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdClearColorImage) { vkb_srv_missing(c, "vkCmdClearColorImage"); return; } + c->dt->vkCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); +} + +void vkb_sv_vkCmdClearDepthStencilImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + VkImageLayout imageLayout; + vkb_dec_bytes(d, &imageLayout, sizeof(imageLayout)); + const VkClearDepthStencilValue *pDepthStencil; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pDepthStencil = (const VkClearDepthStencilValue *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkClearDepthStencilValue)); + } else { + pDepthStencil = NULL; + } + uint32_t rangeCount; + vkb_dec_bytes(d, &rangeCount, sizeof(rangeCount)); + const VkImageSubresourceRange *pRanges; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRanges = (const VkImageSubresourceRange *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageSubresourceRange)); + } else { + pRanges = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdClearDepthStencilImage) { vkb_srv_missing(c, "vkCmdClearDepthStencilImage"); return; } + c->dt->vkCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); +} + +void vkb_sv_vkCmdCopyBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer srcBuffer; + vkb_dec_bytes(d, &srcBuffer, sizeof(srcBuffer)); + VkBuffer dstBuffer; + vkb_dec_bytes(d, &dstBuffer, sizeof(dstBuffer)); + uint32_t regionCount; + vkb_dec_bytes(d, ®ionCount, sizeof(regionCount)); + const VkBufferCopy *pRegions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRegions = (const VkBufferCopy *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBufferCopy)); + } else { + pRegions = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyBuffer) { vkb_srv_missing(c, "vkCmdCopyBuffer"); return; } + c->dt->vkCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); +} + +void vkb_sv_vkCmdCopyBuffer2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkCopyBufferInfo2 *pCopyBufferInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCopyBufferInfo2 *a_ = (VkCopyBufferInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCopyBufferInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCopyBufferInfo2(d, &a_[i_]); + pCopyBufferInfo = a_; + } else { + pCopyBufferInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyBuffer2) { vkb_srv_missing(c, "vkCmdCopyBuffer2"); return; } + c->dt->vkCmdCopyBuffer2(commandBuffer, pCopyBufferInfo); +} + +void vkb_sv_vkCmdCopyBufferToImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer srcBuffer; + vkb_dec_bytes(d, &srcBuffer, sizeof(srcBuffer)); + VkImage dstImage; + vkb_dec_bytes(d, &dstImage, sizeof(dstImage)); + VkImageLayout dstImageLayout; + vkb_dec_bytes(d, &dstImageLayout, sizeof(dstImageLayout)); + uint32_t regionCount; + vkb_dec_bytes(d, ®ionCount, sizeof(regionCount)); + const VkBufferImageCopy *pRegions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRegions = (const VkBufferImageCopy *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBufferImageCopy)); + } else { + pRegions = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyBufferToImage) { vkb_srv_missing(c, "vkCmdCopyBufferToImage"); return; } + c->dt->vkCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); +} + +void vkb_sv_vkCmdCopyBufferToImage2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCopyBufferToImageInfo2 *a_ = (VkCopyBufferToImageInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCopyBufferToImageInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCopyBufferToImageInfo2(d, &a_[i_]); + pCopyBufferToImageInfo = a_; + } else { + pCopyBufferToImageInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyBufferToImage2) { vkb_srv_missing(c, "vkCmdCopyBufferToImage2"); return; } + c->dt->vkCmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo); +} + +void vkb_sv_vkCmdCopyImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImage srcImage; + vkb_dec_bytes(d, &srcImage, sizeof(srcImage)); + VkImageLayout srcImageLayout; + vkb_dec_bytes(d, &srcImageLayout, sizeof(srcImageLayout)); + VkImage dstImage; + vkb_dec_bytes(d, &dstImage, sizeof(dstImage)); + VkImageLayout dstImageLayout; + vkb_dec_bytes(d, &dstImageLayout, sizeof(dstImageLayout)); + uint32_t regionCount; + vkb_dec_bytes(d, ®ionCount, sizeof(regionCount)); + const VkImageCopy *pRegions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRegions = (const VkImageCopy *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageCopy)); + } else { + pRegions = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyImage) { vkb_srv_missing(c, "vkCmdCopyImage"); return; } + c->dt->vkCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); +} + +void vkb_sv_vkCmdCopyImage2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkCopyImageInfo2 *pCopyImageInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCopyImageInfo2 *a_ = (VkCopyImageInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCopyImageInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCopyImageInfo2(d, &a_[i_]); + pCopyImageInfo = a_; + } else { + pCopyImageInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyImage2) { vkb_srv_missing(c, "vkCmdCopyImage2"); return; } + c->dt->vkCmdCopyImage2(commandBuffer, pCopyImageInfo); +} + +void vkb_sv_vkCmdCopyImageToBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImage srcImage; + vkb_dec_bytes(d, &srcImage, sizeof(srcImage)); + VkImageLayout srcImageLayout; + vkb_dec_bytes(d, &srcImageLayout, sizeof(srcImageLayout)); + VkBuffer dstBuffer; + vkb_dec_bytes(d, &dstBuffer, sizeof(dstBuffer)); + uint32_t regionCount; + vkb_dec_bytes(d, ®ionCount, sizeof(regionCount)); + const VkBufferImageCopy *pRegions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRegions = (const VkBufferImageCopy *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBufferImageCopy)); + } else { + pRegions = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyImageToBuffer) { vkb_srv_missing(c, "vkCmdCopyImageToBuffer"); return; } + c->dt->vkCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); +} + +void vkb_sv_vkCmdCopyImageToBuffer2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCopyImageToBufferInfo2 *a_ = (VkCopyImageToBufferInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCopyImageToBufferInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCopyImageToBufferInfo2(d, &a_[i_]); + pCopyImageToBufferInfo = a_; + } else { + pCopyImageToBufferInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyImageToBuffer2) { vkb_srv_missing(c, "vkCmdCopyImageToBuffer2"); return; } + c->dt->vkCmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo); +} + +void vkb_sv_vkCmdCopyQueryPoolResults(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t firstQuery; + vkb_dec_bytes(d, &firstQuery, sizeof(firstQuery)); + uint32_t queryCount; + vkb_dec_bytes(d, &queryCount, sizeof(queryCount)); + VkBuffer dstBuffer; + vkb_dec_bytes(d, &dstBuffer, sizeof(dstBuffer)); + VkDeviceSize dstOffset; + vkb_dec_bytes(d, &dstOffset, sizeof(dstOffset)); + VkDeviceSize stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + VkQueryResultFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyQueryPoolResults) { vkb_srv_missing(c, "vkCmdCopyQueryPoolResults"); return; } + c->dt->vkCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); +} + +void vkb_sv_vkCmdCopyTensorARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkCopyTensorInfoARM *pCopyTensorInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCopyTensorInfoARM *a_ = (VkCopyTensorInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCopyTensorInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCopyTensorInfoARM(d, &a_[i_]); + pCopyTensorInfo = a_; + } else { + pCopyTensorInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdCopyTensorARM) { vkb_srv_missing(c, "vkCmdCopyTensorARM"); return; } + c->dt->vkCmdCopyTensorARM(commandBuffer, pCopyTensorInfo); +} + +void vkb_sv_vkCmdDispatch(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t groupCountX; + vkb_dec_bytes(d, &groupCountX, sizeof(groupCountX)); + uint32_t groupCountY; + vkb_dec_bytes(d, &groupCountY, sizeof(groupCountY)); + uint32_t groupCountZ; + vkb_dec_bytes(d, &groupCountZ, sizeof(groupCountZ)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDispatch) { vkb_srv_missing(c, "vkCmdDispatch"); return; } + c->dt->vkCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ); +} + +void vkb_sv_vkCmdDispatchBase(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t baseGroupX; + vkb_dec_bytes(d, &baseGroupX, sizeof(baseGroupX)); + uint32_t baseGroupY; + vkb_dec_bytes(d, &baseGroupY, sizeof(baseGroupY)); + uint32_t baseGroupZ; + vkb_dec_bytes(d, &baseGroupZ, sizeof(baseGroupZ)); + uint32_t groupCountX; + vkb_dec_bytes(d, &groupCountX, sizeof(groupCountX)); + uint32_t groupCountY; + vkb_dec_bytes(d, &groupCountY, sizeof(groupCountY)); + uint32_t groupCountZ; + vkb_dec_bytes(d, &groupCountZ, sizeof(groupCountZ)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDispatchBase) { vkb_srv_missing(c, "vkCmdDispatchBase"); return; } + c->dt->vkCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); +} + +void vkb_sv_vkCmdDispatchIndirect(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDispatchIndirect) { vkb_srv_missing(c, "vkCmdDispatchIndirect"); return; } + c->dt->vkCmdDispatchIndirect(commandBuffer, buffer, offset); +} + +void vkb_sv_vkCmdDraw(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t vertexCount; + vkb_dec_bytes(d, &vertexCount, sizeof(vertexCount)); + uint32_t instanceCount; + vkb_dec_bytes(d, &instanceCount, sizeof(instanceCount)); + uint32_t firstVertex; + vkb_dec_bytes(d, &firstVertex, sizeof(firstVertex)); + uint32_t firstInstance; + vkb_dec_bytes(d, &firstInstance, sizeof(firstInstance)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDraw) { vkb_srv_missing(c, "vkCmdDraw"); return; } + c->dt->vkCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); +} + +void vkb_sv_vkCmdDrawIndexed(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t indexCount; + vkb_dec_bytes(d, &indexCount, sizeof(indexCount)); + uint32_t instanceCount; + vkb_dec_bytes(d, &instanceCount, sizeof(instanceCount)); + uint32_t firstIndex; + vkb_dec_bytes(d, &firstIndex, sizeof(firstIndex)); + int32_t vertexOffset; + vkb_dec_bytes(d, &vertexOffset, sizeof(vertexOffset)); + uint32_t firstInstance; + vkb_dec_bytes(d, &firstInstance, sizeof(firstInstance)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawIndexed) { vkb_srv_missing(c, "vkCmdDrawIndexed"); return; } + c->dt->vkCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); +} + +void vkb_sv_vkCmdDrawIndexedIndirect(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + uint32_t drawCount; + vkb_dec_bytes(d, &drawCount, sizeof(drawCount)); + uint32_t stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawIndexedIndirect) { vkb_srv_missing(c, "vkCmdDrawIndexedIndirect"); return; } + c->dt->vkCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride); +} + +void vkb_sv_vkCmdDrawIndexedIndirectCount(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + VkBuffer countBuffer; + vkb_dec_bytes(d, &countBuffer, sizeof(countBuffer)); + VkDeviceSize countBufferOffset; + vkb_dec_bytes(d, &countBufferOffset, sizeof(countBufferOffset)); + uint32_t maxDrawCount; + vkb_dec_bytes(d, &maxDrawCount, sizeof(maxDrawCount)); + uint32_t stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawIndexedIndirectCount) { vkb_srv_missing(c, "vkCmdDrawIndexedIndirectCount"); return; } + c->dt->vkCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +void vkb_sv_vkCmdDrawIndirect(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + uint32_t drawCount; + vkb_dec_bytes(d, &drawCount, sizeof(drawCount)); + uint32_t stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawIndirect) { vkb_srv_missing(c, "vkCmdDrawIndirect"); return; } + c->dt->vkCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride); +} + +void vkb_sv_vkCmdDrawIndirectByteCountEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t instanceCount; + vkb_dec_bytes(d, &instanceCount, sizeof(instanceCount)); + uint32_t firstInstance; + vkb_dec_bytes(d, &firstInstance, sizeof(firstInstance)); + VkBuffer counterBuffer; + vkb_dec_bytes(d, &counterBuffer, sizeof(counterBuffer)); + VkDeviceSize counterBufferOffset; + vkb_dec_bytes(d, &counterBufferOffset, sizeof(counterBufferOffset)); + uint32_t counterOffset; + vkb_dec_bytes(d, &counterOffset, sizeof(counterOffset)); + uint32_t vertexStride; + vkb_dec_bytes(d, &vertexStride, sizeof(vertexStride)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawIndirectByteCountEXT) { vkb_srv_missing(c, "vkCmdDrawIndirectByteCountEXT"); return; } + c->dt->vkCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); +} + +void vkb_sv_vkCmdDrawIndirectCount(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + VkDeviceSize offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + VkBuffer countBuffer; + vkb_dec_bytes(d, &countBuffer, sizeof(countBuffer)); + VkDeviceSize countBufferOffset; + vkb_dec_bytes(d, &countBufferOffset, sizeof(countBufferOffset)); + uint32_t maxDrawCount; + vkb_dec_bytes(d, &maxDrawCount, sizeof(maxDrawCount)); + uint32_t stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawIndirectCount) { vkb_srv_missing(c, "vkCmdDrawIndirectCount"); return; } + c->dt->vkCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +void vkb_sv_vkCmdDrawMultiEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t drawCount; + vkb_dec_bytes(d, &drawCount, sizeof(drawCount)); + const VkMultiDrawInfoEXT *pVertexInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pVertexInfo = (const VkMultiDrawInfoEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkMultiDrawInfoEXT)); + } else { + pVertexInfo = NULL; + } + uint32_t instanceCount; + vkb_dec_bytes(d, &instanceCount, sizeof(instanceCount)); + uint32_t firstInstance; + vkb_dec_bytes(d, &firstInstance, sizeof(firstInstance)); + uint32_t stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawMultiEXT) { vkb_srv_missing(c, "vkCmdDrawMultiEXT"); return; } + c->dt->vkCmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); +} + +void vkb_sv_vkCmdDrawMultiIndexedEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t drawCount; + vkb_dec_bytes(d, &drawCount, sizeof(drawCount)); + const VkMultiDrawIndexedInfoEXT *pIndexInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pIndexInfo = (const VkMultiDrawIndexedInfoEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkMultiDrawIndexedInfoEXT)); + } else { + pIndexInfo = NULL; + } + uint32_t instanceCount; + vkb_dec_bytes(d, &instanceCount, sizeof(instanceCount)); + uint32_t firstInstance; + vkb_dec_bytes(d, &firstInstance, sizeof(firstInstance)); + uint32_t stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + const int32_t *pVertexOffset; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pVertexOffset = (const int32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(int32_t)); + } else { + pVertexOffset = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdDrawMultiIndexedEXT) { vkb_srv_missing(c, "vkCmdDrawMultiIndexedEXT"); return; } + c->dt->vkCmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); +} + +void vkb_sv_vkCmdEndConditionalRenderingEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndConditionalRenderingEXT) { vkb_srv_missing(c, "vkCmdEndConditionalRenderingEXT"); return; } + c->dt->vkCmdEndConditionalRenderingEXT(commandBuffer); +} + +void vkb_sv_vkCmdEndQuery(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t query; + vkb_dec_bytes(d, &query, sizeof(query)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndQuery) { vkb_srv_missing(c, "vkCmdEndQuery"); return; } + c->dt->vkCmdEndQuery(commandBuffer, queryPool, query); +} + +void vkb_sv_vkCmdEndQueryIndexedEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t query; + vkb_dec_bytes(d, &query, sizeof(query)); + uint32_t index; + vkb_dec_bytes(d, &index, sizeof(index)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndQueryIndexedEXT) { vkb_srv_missing(c, "vkCmdEndQueryIndexedEXT"); return; } + c->dt->vkCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index); +} + +void vkb_sv_vkCmdEndRenderPass(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndRenderPass) { vkb_srv_missing(c, "vkCmdEndRenderPass"); return; } + c->dt->vkCmdEndRenderPass(commandBuffer); +} + +void vkb_sv_vkCmdEndRenderPass2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkSubpassEndInfo *pSubpassEndInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassEndInfo *a_ = (VkSubpassEndInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassEndInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassEndInfo(d, &a_[i_]); + pSubpassEndInfo = a_; + } else { + pSubpassEndInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndRenderPass2) { vkb_srv_missing(c, "vkCmdEndRenderPass2"); return; } + c->dt->vkCmdEndRenderPass2(commandBuffer, pSubpassEndInfo); +} + +void vkb_sv_vkCmdEndRendering(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndRendering) { vkb_srv_missing(c, "vkCmdEndRendering"); return; } + c->dt->vkCmdEndRendering(commandBuffer); +} + +void vkb_sv_vkCmdEndRendering2KHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkRenderingEndInfoKHR *pRenderingEndInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingEndInfoKHR *a_ = (VkRenderingEndInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingEndInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingEndInfoKHR(d, &a_[i_]); + pRenderingEndInfo = a_; + } else { + pRenderingEndInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndRendering2KHR) { vkb_srv_missing(c, "vkCmdEndRendering2KHR"); return; } + c->dt->vkCmdEndRendering2KHR(commandBuffer, pRenderingEndInfo); +} + +void vkb_sv_vkCmdEndTransformFeedbackEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstCounterBuffer; + vkb_dec_bytes(d, &firstCounterBuffer, sizeof(firstCounterBuffer)); + uint32_t counterBufferCount; + vkb_dec_bytes(d, &counterBufferCount, sizeof(counterBufferCount)); + const VkBuffer *pCounterBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pCounterBuffers = (const VkBuffer *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBuffer)); + } else { + pCounterBuffers = NULL; + } + const VkDeviceSize *pCounterBufferOffsets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pCounterBufferOffsets = (const VkDeviceSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceSize)); + } else { + pCounterBufferOffsets = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdEndTransformFeedbackEXT) { vkb_srv_missing(c, "vkCmdEndTransformFeedbackEXT"); return; } + c->dt->vkCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); +} + +void vkb_sv_vkCmdExecuteCommands(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t commandBufferCount; + vkb_dec_bytes(d, &commandBufferCount, sizeof(commandBufferCount)); + const VkCommandBuffer *pCommandBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBuffer *a_ = (VkCommandBuffer *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBuffer)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) a_[i_] = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + pCommandBuffers = a_; + } else { + pCommandBuffers = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdExecuteCommands) { vkb_srv_missing(c, "vkCmdExecuteCommands"); return; } + c->dt->vkCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); +} + +void vkb_sv_vkCmdFillBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer dstBuffer; + vkb_dec_bytes(d, &dstBuffer, sizeof(dstBuffer)); + VkDeviceSize dstOffset; + vkb_dec_bytes(d, &dstOffset, sizeof(dstOffset)); + VkDeviceSize size; + vkb_dec_bytes(d, &size, sizeof(size)); + uint32_t data; + vkb_dec_bytes(d, &data, sizeof(data)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdFillBuffer) { vkb_srv_missing(c, "vkCmdFillBuffer"); return; } + c->dt->vkCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); +} + +void vkb_sv_vkCmdNextSubpass(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkSubpassContents contents; + vkb_dec_bytes(d, &contents, sizeof(contents)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdNextSubpass) { vkb_srv_missing(c, "vkCmdNextSubpass"); return; } + c->dt->vkCmdNextSubpass(commandBuffer, contents); +} + +void vkb_sv_vkCmdNextSubpass2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkSubpassBeginInfo *pSubpassBeginInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassBeginInfo *a_ = (VkSubpassBeginInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassBeginInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassBeginInfo(d, &a_[i_]); + pSubpassBeginInfo = a_; + } else { + pSubpassBeginInfo = NULL; + } + const VkSubpassEndInfo *pSubpassEndInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassEndInfo *a_ = (VkSubpassEndInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassEndInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassEndInfo(d, &a_[i_]); + pSubpassEndInfo = a_; + } else { + pSubpassEndInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdNextSubpass2) { vkb_srv_missing(c, "vkCmdNextSubpass2"); return; } + c->dt->vkCmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); +} + +void vkb_sv_vkCmdPipelineBarrier(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineStageFlags srcStageMask; + vkb_dec_bytes(d, &srcStageMask, sizeof(srcStageMask)); + VkPipelineStageFlags dstStageMask; + vkb_dec_bytes(d, &dstStageMask, sizeof(dstStageMask)); + VkDependencyFlags dependencyFlags; + vkb_dec_bytes(d, &dependencyFlags, sizeof(dependencyFlags)); + uint32_t memoryBarrierCount; + vkb_dec_bytes(d, &memoryBarrierCount, sizeof(memoryBarrierCount)); + const VkMemoryBarrier *pMemoryBarriers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkMemoryBarrier *a_ = (VkMemoryBarrier *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkMemoryBarrier)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkMemoryBarrier(d, &a_[i_]); + pMemoryBarriers = a_; + } else { + pMemoryBarriers = NULL; + } + uint32_t bufferMemoryBarrierCount; + vkb_dec_bytes(d, &bufferMemoryBarrierCount, sizeof(bufferMemoryBarrierCount)); + const VkBufferMemoryBarrier *pBufferMemoryBarriers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferMemoryBarrier *a_ = (VkBufferMemoryBarrier *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferMemoryBarrier)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferMemoryBarrier(d, &a_[i_]); + pBufferMemoryBarriers = a_; + } else { + pBufferMemoryBarriers = NULL; + } + uint32_t imageMemoryBarrierCount; + vkb_dec_bytes(d, &imageMemoryBarrierCount, sizeof(imageMemoryBarrierCount)); + const VkImageMemoryBarrier *pImageMemoryBarriers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageMemoryBarrier *a_ = (VkImageMemoryBarrier *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageMemoryBarrier)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageMemoryBarrier(d, &a_[i_]); + pImageMemoryBarriers = a_; + } else { + pImageMemoryBarriers = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdPipelineBarrier) { vkb_srv_missing(c, "vkCmdPipelineBarrier"); return; } + c->dt->vkCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); +} + +void vkb_sv_vkCmdPipelineBarrier2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkDependencyInfo *pDependencyInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDependencyInfo *a_ = (VkDependencyInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDependencyInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDependencyInfo(d, &a_[i_]); + pDependencyInfo = a_; + } else { + pDependencyInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdPipelineBarrier2) { vkb_srv_missing(c, "vkCmdPipelineBarrier2"); return; } + c->dt->vkCmdPipelineBarrier2(commandBuffer, pDependencyInfo); +} + +void vkb_sv_vkCmdPushConstants(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineLayout layout; + vkb_dec_bytes(d, &layout, sizeof(layout)); + VkShaderStageFlags stageFlags; + vkb_dec_bytes(d, &stageFlags, sizeof(stageFlags)); + uint32_t offset; + vkb_dec_bytes(d, &offset, sizeof(offset)); + uint32_t size; + vkb_dec_bytes(d, &size, sizeof(size)); + const void *pValues; + pValues = (const void *)vkb_dec_blob(d, NULL); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdPushConstants) { vkb_srv_missing(c, "vkCmdPushConstants"); return; } + c->dt->vkCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); +} + +void vkb_sv_vkCmdPushConstants2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkPushConstantsInfo *pPushConstantsInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPushConstantsInfo *a_ = (VkPushConstantsInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPushConstantsInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPushConstantsInfo(d, &a_[i_]); + pPushConstantsInfo = a_; + } else { + pPushConstantsInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdPushConstants2) { vkb_srv_missing(c, "vkCmdPushConstants2"); return; } + c->dt->vkCmdPushConstants2(commandBuffer, pPushConstantsInfo); +} + +void vkb_sv_vkCmdPushDescriptorSet(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineBindPoint pipelineBindPoint; + vkb_dec_bytes(d, &pipelineBindPoint, sizeof(pipelineBindPoint)); + VkPipelineLayout layout; + vkb_dec_bytes(d, &layout, sizeof(layout)); + uint32_t set; + vkb_dec_bytes(d, &set, sizeof(set)); + uint32_t descriptorWriteCount; + vkb_dec_bytes(d, &descriptorWriteCount, sizeof(descriptorWriteCount)); + const VkWriteDescriptorSet *pDescriptorWrites; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkWriteDescriptorSet *a_ = (VkWriteDescriptorSet *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkWriteDescriptorSet)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkWriteDescriptorSet(d, &a_[i_]); + pDescriptorWrites = a_; + } else { + pDescriptorWrites = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdPushDescriptorSet) { vkb_srv_missing(c, "vkCmdPushDescriptorSet"); return; } + c->dt->vkCmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); +} + +void vkb_sv_vkCmdPushDescriptorSet2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkPushDescriptorSetInfo *pPushDescriptorSetInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPushDescriptorSetInfo *a_ = (VkPushDescriptorSetInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPushDescriptorSetInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPushDescriptorSetInfo(d, &a_[i_]); + pPushDescriptorSetInfo = a_; + } else { + pPushDescriptorSetInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdPushDescriptorSet2) { vkb_srv_missing(c, "vkCmdPushDescriptorSet2"); return; } + c->dt->vkCmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo); +} + +void vkb_sv_vkCmdResetEvent(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + VkPipelineStageFlags stageMask; + vkb_dec_bytes(d, &stageMask, sizeof(stageMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdResetEvent) { vkb_srv_missing(c, "vkCmdResetEvent"); return; } + c->dt->vkCmdResetEvent(commandBuffer, event, stageMask); +} + +void vkb_sv_vkCmdResetEvent2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + VkPipelineStageFlags2 stageMask; + vkb_dec_bytes(d, &stageMask, sizeof(stageMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdResetEvent2) { vkb_srv_missing(c, "vkCmdResetEvent2"); return; } + c->dt->vkCmdResetEvent2(commandBuffer, event, stageMask); +} + +void vkb_sv_vkCmdResetQueryPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t firstQuery; + vkb_dec_bytes(d, &firstQuery, sizeof(firstQuery)); + uint32_t queryCount; + vkb_dec_bytes(d, &queryCount, sizeof(queryCount)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdResetQueryPool) { vkb_srv_missing(c, "vkCmdResetQueryPool"); return; } + c->dt->vkCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); +} + +void vkb_sv_vkCmdResolveImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImage srcImage; + vkb_dec_bytes(d, &srcImage, sizeof(srcImage)); + VkImageLayout srcImageLayout; + vkb_dec_bytes(d, &srcImageLayout, sizeof(srcImageLayout)); + VkImage dstImage; + vkb_dec_bytes(d, &dstImage, sizeof(dstImage)); + VkImageLayout dstImageLayout; + vkb_dec_bytes(d, &dstImageLayout, sizeof(dstImageLayout)); + uint32_t regionCount; + vkb_dec_bytes(d, ®ionCount, sizeof(regionCount)); + const VkImageResolve *pRegions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pRegions = (const VkImageResolve *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageResolve)); + } else { + pRegions = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdResolveImage) { vkb_srv_missing(c, "vkCmdResolveImage"); return; } + c->dt->vkCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); +} + +void vkb_sv_vkCmdResolveImage2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkResolveImageInfo2 *pResolveImageInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkResolveImageInfo2 *a_ = (VkResolveImageInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkResolveImageInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkResolveImageInfo2(d, &a_[i_]); + pResolveImageInfo = a_; + } else { + pResolveImageInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdResolveImage2) { vkb_srv_missing(c, "vkCmdResolveImage2"); return; } + c->dt->vkCmdResolveImage2(commandBuffer, pResolveImageInfo); +} + +void vkb_sv_vkCmdSetAlphaToCoverageEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 alphaToCoverageEnable; + vkb_dec_bytes(d, &alphaToCoverageEnable, sizeof(alphaToCoverageEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetAlphaToCoverageEnableEXT) { vkb_srv_missing(c, "vkCmdSetAlphaToCoverageEnableEXT"); return; } + c->dt->vkCmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable); +} + +void vkb_sv_vkCmdSetAlphaToOneEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 alphaToOneEnable; + vkb_dec_bytes(d, &alphaToOneEnable, sizeof(alphaToOneEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetAlphaToOneEnableEXT) { vkb_srv_missing(c, "vkCmdSetAlphaToOneEnableEXT"); return; } + c->dt->vkCmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable); +} + +void vkb_sv_vkCmdSetAttachmentFeedbackLoopEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkImageAspectFlags aspectMask; + vkb_dec_bytes(d, &aspectMask, sizeof(aspectMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetAttachmentFeedbackLoopEnableEXT) { vkb_srv_missing(c, "vkCmdSetAttachmentFeedbackLoopEnableEXT"); return; } + c->dt->vkCmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask); +} + +void vkb_sv_vkCmdSetBlendConstants(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const float *blendConstants = (const float *)vkb_dec_raw_view(d, sizeof(float) * 4); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetBlendConstants) { vkb_srv_missing(c, "vkCmdSetBlendConstants"); return; } + c->dt->vkCmdSetBlendConstants(commandBuffer, blendConstants); +} + +void vkb_sv_vkCmdSetColorBlendAdvancedEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstAttachment; + vkb_dec_bytes(d, &firstAttachment, sizeof(firstAttachment)); + uint32_t attachmentCount; + vkb_dec_bytes(d, &attachmentCount, sizeof(attachmentCount)); + const VkColorBlendAdvancedEXT *pColorBlendAdvanced; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pColorBlendAdvanced = (const VkColorBlendAdvancedEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkColorBlendAdvancedEXT)); + } else { + pColorBlendAdvanced = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetColorBlendAdvancedEXT) { vkb_srv_missing(c, "vkCmdSetColorBlendAdvancedEXT"); return; } + c->dt->vkCmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); +} + +void vkb_sv_vkCmdSetColorBlendEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstAttachment; + vkb_dec_bytes(d, &firstAttachment, sizeof(firstAttachment)); + uint32_t attachmentCount; + vkb_dec_bytes(d, &attachmentCount, sizeof(attachmentCount)); + const VkBool32 *pColorBlendEnables; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pColorBlendEnables = (const VkBool32 *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBool32)); + } else { + pColorBlendEnables = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetColorBlendEnableEXT) { vkb_srv_missing(c, "vkCmdSetColorBlendEnableEXT"); return; } + c->dt->vkCmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); +} + +void vkb_sv_vkCmdSetColorBlendEquationEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstAttachment; + vkb_dec_bytes(d, &firstAttachment, sizeof(firstAttachment)); + uint32_t attachmentCount; + vkb_dec_bytes(d, &attachmentCount, sizeof(attachmentCount)); + const VkColorBlendEquationEXT *pColorBlendEquations; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pColorBlendEquations = (const VkColorBlendEquationEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkColorBlendEquationEXT)); + } else { + pColorBlendEquations = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetColorBlendEquationEXT) { vkb_srv_missing(c, "vkCmdSetColorBlendEquationEXT"); return; } + c->dt->vkCmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); +} + +void vkb_sv_vkCmdSetColorWriteEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t attachmentCount; + vkb_dec_bytes(d, &attachmentCount, sizeof(attachmentCount)); + const VkBool32 *pColorWriteEnables; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pColorWriteEnables = (const VkBool32 *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBool32)); + } else { + pColorWriteEnables = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetColorWriteEnableEXT) { vkb_srv_missing(c, "vkCmdSetColorWriteEnableEXT"); return; } + c->dt->vkCmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables); +} + +void vkb_sv_vkCmdSetColorWriteMaskEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstAttachment; + vkb_dec_bytes(d, &firstAttachment, sizeof(firstAttachment)); + uint32_t attachmentCount; + vkb_dec_bytes(d, &attachmentCount, sizeof(attachmentCount)); + const VkColorComponentFlags *pColorWriteMasks; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pColorWriteMasks = (const VkColorComponentFlags *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkColorComponentFlags)); + } else { + pColorWriteMasks = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetColorWriteMaskEXT) { vkb_srv_missing(c, "vkCmdSetColorWriteMaskEXT"); return; } + c->dt->vkCmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); +} + +void vkb_sv_vkCmdSetConservativeRasterizationModeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkConservativeRasterizationModeEXT conservativeRasterizationMode; + vkb_dec_bytes(d, &conservativeRasterizationMode, sizeof(conservativeRasterizationMode)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetConservativeRasterizationModeEXT) { vkb_srv_missing(c, "vkCmdSetConservativeRasterizationModeEXT"); return; } + c->dt->vkCmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode); +} + +void vkb_sv_vkCmdSetCullMode(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkCullModeFlags cullMode; + vkb_dec_bytes(d, &cullMode, sizeof(cullMode)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetCullMode) { vkb_srv_missing(c, "vkCmdSetCullMode"); return; } + c->dt->vkCmdSetCullMode(commandBuffer, cullMode); +} + +void vkb_sv_vkCmdSetDepthBias(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + float depthBiasConstantFactor; + vkb_dec_bytes(d, &depthBiasConstantFactor, sizeof(depthBiasConstantFactor)); + float depthBiasClamp; + vkb_dec_bytes(d, &depthBiasClamp, sizeof(depthBiasClamp)); + float depthBiasSlopeFactor; + vkb_dec_bytes(d, &depthBiasSlopeFactor, sizeof(depthBiasSlopeFactor)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthBias) { vkb_srv_missing(c, "vkCmdSetDepthBias"); return; } + c->dt->vkCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); +} + +void vkb_sv_vkCmdSetDepthBias2EXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkDepthBiasInfoEXT *pDepthBiasInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDepthBiasInfoEXT *a_ = (VkDepthBiasInfoEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDepthBiasInfoEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDepthBiasInfoEXT(d, &a_[i_]); + pDepthBiasInfo = a_; + } else { + pDepthBiasInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthBias2EXT) { vkb_srv_missing(c, "vkCmdSetDepthBias2EXT"); return; } + c->dt->vkCmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo); +} + +void vkb_sv_vkCmdSetDepthBiasEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 depthBiasEnable; + vkb_dec_bytes(d, &depthBiasEnable, sizeof(depthBiasEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthBiasEnable) { vkb_srv_missing(c, "vkCmdSetDepthBiasEnable"); return; } + c->dt->vkCmdSetDepthBiasEnable(commandBuffer, depthBiasEnable); +} + +void vkb_sv_vkCmdSetDepthBounds(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + float minDepthBounds; + vkb_dec_bytes(d, &minDepthBounds, sizeof(minDepthBounds)); + float maxDepthBounds; + vkb_dec_bytes(d, &maxDepthBounds, sizeof(maxDepthBounds)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthBounds) { vkb_srv_missing(c, "vkCmdSetDepthBounds"); return; } + c->dt->vkCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds); +} + +void vkb_sv_vkCmdSetDepthBoundsTestEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 depthBoundsTestEnable; + vkb_dec_bytes(d, &depthBoundsTestEnable, sizeof(depthBoundsTestEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthBoundsTestEnable) { vkb_srv_missing(c, "vkCmdSetDepthBoundsTestEnable"); return; } + c->dt->vkCmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable); +} + +void vkb_sv_vkCmdSetDepthClampEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 depthClampEnable; + vkb_dec_bytes(d, &depthClampEnable, sizeof(depthClampEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthClampEnableEXT) { vkb_srv_missing(c, "vkCmdSetDepthClampEnableEXT"); return; } + c->dt->vkCmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable); +} + +void vkb_sv_vkCmdSetDepthClampRangeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkDepthClampModeEXT depthClampMode; + vkb_dec_bytes(d, &depthClampMode, sizeof(depthClampMode)); + const VkDepthClampRangeEXT *pDepthClampRange; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pDepthClampRange = (const VkDepthClampRangeEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDepthClampRangeEXT)); + } else { + pDepthClampRange = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthClampRangeEXT) { vkb_srv_missing(c, "vkCmdSetDepthClampRangeEXT"); return; } + c->dt->vkCmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange); +} + +void vkb_sv_vkCmdSetDepthClipEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 depthClipEnable; + vkb_dec_bytes(d, &depthClipEnable, sizeof(depthClipEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthClipEnableEXT) { vkb_srv_missing(c, "vkCmdSetDepthClipEnableEXT"); return; } + c->dt->vkCmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable); +} + +void vkb_sv_vkCmdSetDepthClipNegativeOneToOneEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 negativeOneToOne; + vkb_dec_bytes(d, &negativeOneToOne, sizeof(negativeOneToOne)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthClipNegativeOneToOneEXT) { vkb_srv_missing(c, "vkCmdSetDepthClipNegativeOneToOneEXT"); return; } + c->dt->vkCmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne); +} + +void vkb_sv_vkCmdSetDepthCompareOp(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkCompareOp depthCompareOp; + vkb_dec_bytes(d, &depthCompareOp, sizeof(depthCompareOp)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthCompareOp) { vkb_srv_missing(c, "vkCmdSetDepthCompareOp"); return; } + c->dt->vkCmdSetDepthCompareOp(commandBuffer, depthCompareOp); +} + +void vkb_sv_vkCmdSetDepthTestEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 depthTestEnable; + vkb_dec_bytes(d, &depthTestEnable, sizeof(depthTestEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthTestEnable) { vkb_srv_missing(c, "vkCmdSetDepthTestEnable"); return; } + c->dt->vkCmdSetDepthTestEnable(commandBuffer, depthTestEnable); +} + +void vkb_sv_vkCmdSetDepthWriteEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 depthWriteEnable; + vkb_dec_bytes(d, &depthWriteEnable, sizeof(depthWriteEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDepthWriteEnable) { vkb_srv_missing(c, "vkCmdSetDepthWriteEnable"); return; } + c->dt->vkCmdSetDepthWriteEnable(commandBuffer, depthWriteEnable); +} + +void vkb_sv_vkCmdSetDeviceMask(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t deviceMask; + vkb_dec_bytes(d, &deviceMask, sizeof(deviceMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDeviceMask) { vkb_srv_missing(c, "vkCmdSetDeviceMask"); return; } + c->dt->vkCmdSetDeviceMask(commandBuffer, deviceMask); +} + +void vkb_sv_vkCmdSetDiscardRectangleEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstDiscardRectangle; + vkb_dec_bytes(d, &firstDiscardRectangle, sizeof(firstDiscardRectangle)); + uint32_t discardRectangleCount; + vkb_dec_bytes(d, &discardRectangleCount, sizeof(discardRectangleCount)); + const VkRect2D *pDiscardRectangles; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pDiscardRectangles = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + pDiscardRectangles = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDiscardRectangleEXT) { vkb_srv_missing(c, "vkCmdSetDiscardRectangleEXT"); return; } + c->dt->vkCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); +} + +void vkb_sv_vkCmdSetDiscardRectangleEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 discardRectangleEnable; + vkb_dec_bytes(d, &discardRectangleEnable, sizeof(discardRectangleEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDiscardRectangleEnableEXT) { vkb_srv_missing(c, "vkCmdSetDiscardRectangleEnableEXT"); return; } + c->dt->vkCmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable); +} + +void vkb_sv_vkCmdSetDiscardRectangleModeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkDiscardRectangleModeEXT discardRectangleMode; + vkb_dec_bytes(d, &discardRectangleMode, sizeof(discardRectangleMode)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetDiscardRectangleModeEXT) { vkb_srv_missing(c, "vkCmdSetDiscardRectangleModeEXT"); return; } + c->dt->vkCmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode); +} + +void vkb_sv_vkCmdSetEvent(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + VkPipelineStageFlags stageMask; + vkb_dec_bytes(d, &stageMask, sizeof(stageMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetEvent) { vkb_srv_missing(c, "vkCmdSetEvent"); return; } + c->dt->vkCmdSetEvent(commandBuffer, event, stageMask); +} + +void vkb_sv_vkCmdSetEvent2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + const VkDependencyInfo *pDependencyInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDependencyInfo *a_ = (VkDependencyInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDependencyInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDependencyInfo(d, &a_[i_]); + pDependencyInfo = a_; + } else { + pDependencyInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetEvent2) { vkb_srv_missing(c, "vkCmdSetEvent2"); return; } + c->dt->vkCmdSetEvent2(commandBuffer, event, pDependencyInfo); +} + +void vkb_sv_vkCmdSetExtraPrimitiveOverestimationSizeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + float extraPrimitiveOverestimationSize; + vkb_dec_bytes(d, &extraPrimitiveOverestimationSize, sizeof(extraPrimitiveOverestimationSize)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetExtraPrimitiveOverestimationSizeEXT) { vkb_srv_missing(c, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); return; } + c->dt->vkCmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize); +} + +void vkb_sv_vkCmdSetFragmentShadingRateKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkExtent2D *pFragmentSize; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pFragmentSize = (const VkExtent2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkExtent2D)); + } else { + pFragmentSize = NULL; + } + const VkFragmentShadingRateCombinerOpKHR *combinerOps = (const VkFragmentShadingRateCombinerOpKHR *)vkb_dec_raw_view(d, sizeof(VkFragmentShadingRateCombinerOpKHR) * 2); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetFragmentShadingRateKHR) { vkb_srv_missing(c, "vkCmdSetFragmentShadingRateKHR"); return; } + c->dt->vkCmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps); +} + +void vkb_sv_vkCmdSetFrontFace(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkFrontFace frontFace; + vkb_dec_bytes(d, &frontFace, sizeof(frontFace)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetFrontFace) { vkb_srv_missing(c, "vkCmdSetFrontFace"); return; } + c->dt->vkCmdSetFrontFace(commandBuffer, frontFace); +} + +void vkb_sv_vkCmdSetLineRasterizationModeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkLineRasterizationModeEXT lineRasterizationMode; + vkb_dec_bytes(d, &lineRasterizationMode, sizeof(lineRasterizationMode)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetLineRasterizationModeEXT) { vkb_srv_missing(c, "vkCmdSetLineRasterizationModeEXT"); return; } + c->dt->vkCmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode); +} + +void vkb_sv_vkCmdSetLineStipple(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t lineStippleFactor; + vkb_dec_bytes(d, &lineStippleFactor, sizeof(lineStippleFactor)); + uint16_t lineStipplePattern; + vkb_dec_bytes(d, &lineStipplePattern, sizeof(lineStipplePattern)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetLineStipple) { vkb_srv_missing(c, "vkCmdSetLineStipple"); return; } + c->dt->vkCmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern); +} + +void vkb_sv_vkCmdSetLineStippleEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 stippledLineEnable; + vkb_dec_bytes(d, &stippledLineEnable, sizeof(stippledLineEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetLineStippleEnableEXT) { vkb_srv_missing(c, "vkCmdSetLineStippleEnableEXT"); return; } + c->dt->vkCmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable); +} + +void vkb_sv_vkCmdSetLineWidth(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + float lineWidth; + vkb_dec_bytes(d, &lineWidth, sizeof(lineWidth)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetLineWidth) { vkb_srv_missing(c, "vkCmdSetLineWidth"); return; } + c->dt->vkCmdSetLineWidth(commandBuffer, lineWidth); +} + +void vkb_sv_vkCmdSetLogicOpEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkLogicOp logicOp; + vkb_dec_bytes(d, &logicOp, sizeof(logicOp)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetLogicOpEXT) { vkb_srv_missing(c, "vkCmdSetLogicOpEXT"); return; } + c->dt->vkCmdSetLogicOpEXT(commandBuffer, logicOp); +} + +void vkb_sv_vkCmdSetLogicOpEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 logicOpEnable; + vkb_dec_bytes(d, &logicOpEnable, sizeof(logicOpEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetLogicOpEnableEXT) { vkb_srv_missing(c, "vkCmdSetLogicOpEnableEXT"); return; } + c->dt->vkCmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable); +} + +void vkb_sv_vkCmdSetPatchControlPointsEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t patchControlPoints; + vkb_dec_bytes(d, &patchControlPoints, sizeof(patchControlPoints)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetPatchControlPointsEXT) { vkb_srv_missing(c, "vkCmdSetPatchControlPointsEXT"); return; } + c->dt->vkCmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints); +} + +void vkb_sv_vkCmdSetPolygonModeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPolygonMode polygonMode; + vkb_dec_bytes(d, &polygonMode, sizeof(polygonMode)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetPolygonModeEXT) { vkb_srv_missing(c, "vkCmdSetPolygonModeEXT"); return; } + c->dt->vkCmdSetPolygonModeEXT(commandBuffer, polygonMode); +} + +void vkb_sv_vkCmdSetPrimitiveRestartEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 primitiveRestartEnable; + vkb_dec_bytes(d, &primitiveRestartEnable, sizeof(primitiveRestartEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetPrimitiveRestartEnable) { vkb_srv_missing(c, "vkCmdSetPrimitiveRestartEnable"); return; } + c->dt->vkCmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable); +} + +void vkb_sv_vkCmdSetPrimitiveTopology(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPrimitiveTopology primitiveTopology; + vkb_dec_bytes(d, &primitiveTopology, sizeof(primitiveTopology)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetPrimitiveTopology) { vkb_srv_missing(c, "vkCmdSetPrimitiveTopology"); return; } + c->dt->vkCmdSetPrimitiveTopology(commandBuffer, primitiveTopology); +} + +void vkb_sv_vkCmdSetProvokingVertexModeEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkProvokingVertexModeEXT provokingVertexMode; + vkb_dec_bytes(d, &provokingVertexMode, sizeof(provokingVertexMode)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetProvokingVertexModeEXT) { vkb_srv_missing(c, "vkCmdSetProvokingVertexModeEXT"); return; } + c->dt->vkCmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode); +} + +void vkb_sv_vkCmdSetRasterizationSamplesEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkSampleCountFlagBits rasterizationSamples; + vkb_dec_bytes(d, &rasterizationSamples, sizeof(rasterizationSamples)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetRasterizationSamplesEXT) { vkb_srv_missing(c, "vkCmdSetRasterizationSamplesEXT"); return; } + c->dt->vkCmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples); +} + +void vkb_sv_vkCmdSetRasterizationStreamEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t rasterizationStream; + vkb_dec_bytes(d, &rasterizationStream, sizeof(rasterizationStream)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetRasterizationStreamEXT) { vkb_srv_missing(c, "vkCmdSetRasterizationStreamEXT"); return; } + c->dt->vkCmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream); +} + +void vkb_sv_vkCmdSetRasterizerDiscardEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 rasterizerDiscardEnable; + vkb_dec_bytes(d, &rasterizerDiscardEnable, sizeof(rasterizerDiscardEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetRasterizerDiscardEnable) { vkb_srv_missing(c, "vkCmdSetRasterizerDiscardEnable"); return; } + c->dt->vkCmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable); +} + +void vkb_sv_vkCmdSetRenderingAttachmentLocations(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkRenderingAttachmentLocationInfo *pLocationInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingAttachmentLocationInfo *a_ = (VkRenderingAttachmentLocationInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingAttachmentLocationInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingAttachmentLocationInfo(d, &a_[i_]); + pLocationInfo = a_; + } else { + pLocationInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetRenderingAttachmentLocations) { vkb_srv_missing(c, "vkCmdSetRenderingAttachmentLocations"); return; } + c->dt->vkCmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo); +} + +void vkb_sv_vkCmdSetRenderingInputAttachmentIndices(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkRenderingInputAttachmentIndexInfo *pInputAttachmentIndexInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingInputAttachmentIndexInfo *a_ = (VkRenderingInputAttachmentIndexInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingInputAttachmentIndexInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingInputAttachmentIndexInfo(d, &a_[i_]); + pInputAttachmentIndexInfo = a_; + } else { + pInputAttachmentIndexInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetRenderingInputAttachmentIndices) { vkb_srv_missing(c, "vkCmdSetRenderingInputAttachmentIndices"); return; } + c->dt->vkCmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo); +} + +void vkb_sv_vkCmdSetSampleLocationsEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + const VkSampleLocationsInfoEXT *pSampleLocationsInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSampleLocationsInfoEXT *a_ = (VkSampleLocationsInfoEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSampleLocationsInfoEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSampleLocationsInfoEXT(d, &a_[i_]); + pSampleLocationsInfo = a_; + } else { + pSampleLocationsInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetSampleLocationsEXT) { vkb_srv_missing(c, "vkCmdSetSampleLocationsEXT"); return; } + c->dt->vkCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo); +} + +void vkb_sv_vkCmdSetSampleLocationsEnableEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 sampleLocationsEnable; + vkb_dec_bytes(d, &sampleLocationsEnable, sizeof(sampleLocationsEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetSampleLocationsEnableEXT) { vkb_srv_missing(c, "vkCmdSetSampleLocationsEnableEXT"); return; } + c->dt->vkCmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable); +} + +void vkb_sv_vkCmdSetSampleMaskEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkSampleCountFlagBits samples; + vkb_dec_bytes(d, &samples, sizeof(samples)); + const VkSampleMask *pSampleMask; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pSampleMask = (const VkSampleMask *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSampleMask)); + } else { + pSampleMask = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetSampleMaskEXT) { vkb_srv_missing(c, "vkCmdSetSampleMaskEXT"); return; } + c->dt->vkCmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask); +} + +void vkb_sv_vkCmdSetScissor(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstScissor; + vkb_dec_bytes(d, &firstScissor, sizeof(firstScissor)); + uint32_t scissorCount; + vkb_dec_bytes(d, &scissorCount, sizeof(scissorCount)); + const VkRect2D *pScissors; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pScissors = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + pScissors = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetScissor) { vkb_srv_missing(c, "vkCmdSetScissor"); return; } + c->dt->vkCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); +} + +void vkb_sv_vkCmdSetScissorWithCount(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t scissorCount; + vkb_dec_bytes(d, &scissorCount, sizeof(scissorCount)); + const VkRect2D *pScissors; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pScissors = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + pScissors = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetScissorWithCount) { vkb_srv_missing(c, "vkCmdSetScissorWithCount"); return; } + c->dt->vkCmdSetScissorWithCount(commandBuffer, scissorCount, pScissors); +} + +void vkb_sv_vkCmdSetStencilCompareMask(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkStencilFaceFlags faceMask; + vkb_dec_bytes(d, &faceMask, sizeof(faceMask)); + uint32_t compareMask; + vkb_dec_bytes(d, &compareMask, sizeof(compareMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetStencilCompareMask) { vkb_srv_missing(c, "vkCmdSetStencilCompareMask"); return; } + c->dt->vkCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask); +} + +void vkb_sv_vkCmdSetStencilOp(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkStencilFaceFlags faceMask; + vkb_dec_bytes(d, &faceMask, sizeof(faceMask)); + VkStencilOp failOp; + vkb_dec_bytes(d, &failOp, sizeof(failOp)); + VkStencilOp passOp; + vkb_dec_bytes(d, &passOp, sizeof(passOp)); + VkStencilOp depthFailOp; + vkb_dec_bytes(d, &depthFailOp, sizeof(depthFailOp)); + VkCompareOp compareOp; + vkb_dec_bytes(d, &compareOp, sizeof(compareOp)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetStencilOp) { vkb_srv_missing(c, "vkCmdSetStencilOp"); return; } + c->dt->vkCmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); +} + +void vkb_sv_vkCmdSetStencilReference(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkStencilFaceFlags faceMask; + vkb_dec_bytes(d, &faceMask, sizeof(faceMask)); + uint32_t reference; + vkb_dec_bytes(d, &reference, sizeof(reference)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetStencilReference) { vkb_srv_missing(c, "vkCmdSetStencilReference"); return; } + c->dt->vkCmdSetStencilReference(commandBuffer, faceMask, reference); +} + +void vkb_sv_vkCmdSetStencilTestEnable(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBool32 stencilTestEnable; + vkb_dec_bytes(d, &stencilTestEnable, sizeof(stencilTestEnable)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetStencilTestEnable) { vkb_srv_missing(c, "vkCmdSetStencilTestEnable"); return; } + c->dt->vkCmdSetStencilTestEnable(commandBuffer, stencilTestEnable); +} + +void vkb_sv_vkCmdSetStencilWriteMask(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkStencilFaceFlags faceMask; + vkb_dec_bytes(d, &faceMask, sizeof(faceMask)); + uint32_t writeMask; + vkb_dec_bytes(d, &writeMask, sizeof(writeMask)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetStencilWriteMask) { vkb_srv_missing(c, "vkCmdSetStencilWriteMask"); return; } + c->dt->vkCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask); +} + +void vkb_sv_vkCmdSetTessellationDomainOriginEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkTessellationDomainOrigin domainOrigin; + vkb_dec_bytes(d, &domainOrigin, sizeof(domainOrigin)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetTessellationDomainOriginEXT) { vkb_srv_missing(c, "vkCmdSetTessellationDomainOriginEXT"); return; } + c->dt->vkCmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin); +} + +void vkb_sv_vkCmdSetVertexInputEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t vertexBindingDescriptionCount; + vkb_dec_bytes(d, &vertexBindingDescriptionCount, sizeof(vertexBindingDescriptionCount)); + const VkVertexInputBindingDescription2EXT *pVertexBindingDescriptions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkVertexInputBindingDescription2EXT *a_ = (VkVertexInputBindingDescription2EXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkVertexInputBindingDescription2EXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkVertexInputBindingDescription2EXT(d, &a_[i_]); + pVertexBindingDescriptions = a_; + } else { + pVertexBindingDescriptions = NULL; + } + uint32_t vertexAttributeDescriptionCount; + vkb_dec_bytes(d, &vertexAttributeDescriptionCount, sizeof(vertexAttributeDescriptionCount)); + const VkVertexInputAttributeDescription2EXT *pVertexAttributeDescriptions; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkVertexInputAttributeDescription2EXT *a_ = (VkVertexInputAttributeDescription2EXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkVertexInputAttributeDescription2EXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkVertexInputAttributeDescription2EXT(d, &a_[i_]); + pVertexAttributeDescriptions = a_; + } else { + pVertexAttributeDescriptions = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetVertexInputEXT) { vkb_srv_missing(c, "vkCmdSetVertexInputEXT"); return; } + c->dt->vkCmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); +} + +void vkb_sv_vkCmdSetViewport(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t firstViewport; + vkb_dec_bytes(d, &firstViewport, sizeof(firstViewport)); + uint32_t viewportCount; + vkb_dec_bytes(d, &viewportCount, sizeof(viewportCount)); + const VkViewport *pViewports; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pViewports = (const VkViewport *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkViewport)); + } else { + pViewports = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetViewport) { vkb_srv_missing(c, "vkCmdSetViewport"); return; } + c->dt->vkCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); +} + +void vkb_sv_vkCmdSetViewportWithCount(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t viewportCount; + vkb_dec_bytes(d, &viewportCount, sizeof(viewportCount)); + const VkViewport *pViewports; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pViewports = (const VkViewport *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkViewport)); + } else { + pViewports = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdSetViewportWithCount) { vkb_srv_missing(c, "vkCmdSetViewportWithCount"); return; } + c->dt->vkCmdSetViewportWithCount(commandBuffer, viewportCount, pViewports); +} + +void vkb_sv_vkCmdUpdateBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkBuffer dstBuffer; + vkb_dec_bytes(d, &dstBuffer, sizeof(dstBuffer)); + VkDeviceSize dstOffset; + vkb_dec_bytes(d, &dstOffset, sizeof(dstOffset)); + VkDeviceSize dataSize; + vkb_dec_bytes(d, &dataSize, sizeof(dataSize)); + const void *pData; + pData = (const void *)vkb_dec_blob(d, NULL); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdUpdateBuffer) { vkb_srv_missing(c, "vkCmdUpdateBuffer"); return; } + c->dt->vkCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); +} + +void vkb_sv_vkCmdWaitEvents(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t eventCount; + vkb_dec_bytes(d, &eventCount, sizeof(eventCount)); + const VkEvent *pEvents; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pEvents = (const VkEvent *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkEvent)); + } else { + pEvents = NULL; + } + VkPipelineStageFlags srcStageMask; + vkb_dec_bytes(d, &srcStageMask, sizeof(srcStageMask)); + VkPipelineStageFlags dstStageMask; + vkb_dec_bytes(d, &dstStageMask, sizeof(dstStageMask)); + uint32_t memoryBarrierCount; + vkb_dec_bytes(d, &memoryBarrierCount, sizeof(memoryBarrierCount)); + const VkMemoryBarrier *pMemoryBarriers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkMemoryBarrier *a_ = (VkMemoryBarrier *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkMemoryBarrier)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkMemoryBarrier(d, &a_[i_]); + pMemoryBarriers = a_; + } else { + pMemoryBarriers = NULL; + } + uint32_t bufferMemoryBarrierCount; + vkb_dec_bytes(d, &bufferMemoryBarrierCount, sizeof(bufferMemoryBarrierCount)); + const VkBufferMemoryBarrier *pBufferMemoryBarriers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferMemoryBarrier *a_ = (VkBufferMemoryBarrier *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferMemoryBarrier)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferMemoryBarrier(d, &a_[i_]); + pBufferMemoryBarriers = a_; + } else { + pBufferMemoryBarriers = NULL; + } + uint32_t imageMemoryBarrierCount; + vkb_dec_bytes(d, &imageMemoryBarrierCount, sizeof(imageMemoryBarrierCount)); + const VkImageMemoryBarrier *pImageMemoryBarriers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageMemoryBarrier *a_ = (VkImageMemoryBarrier *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageMemoryBarrier)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageMemoryBarrier(d, &a_[i_]); + pImageMemoryBarriers = a_; + } else { + pImageMemoryBarriers = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdWaitEvents) { vkb_srv_missing(c, "vkCmdWaitEvents"); return; } + c->dt->vkCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); +} + +void vkb_sv_vkCmdWaitEvents2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + uint32_t eventCount; + vkb_dec_bytes(d, &eventCount, sizeof(eventCount)); + const VkEvent *pEvents; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pEvents = (const VkEvent *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkEvent)); + } else { + pEvents = NULL; + } + const VkDependencyInfo *pDependencyInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDependencyInfo *a_ = (VkDependencyInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDependencyInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDependencyInfo(d, &a_[i_]); + pDependencyInfos = a_; + } else { + pDependencyInfos = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdWaitEvents2) { vkb_srv_missing(c, "vkCmdWaitEvents2"); return; } + c->dt->vkCmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos); +} + +void vkb_sv_vkCmdWriteTimestamp(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineStageFlagBits pipelineStage; + vkb_dec_bytes(d, &pipelineStage, sizeof(pipelineStage)); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t query; + vkb_dec_bytes(d, &query, sizeof(query)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdWriteTimestamp) { vkb_srv_missing(c, "vkCmdWriteTimestamp"); return; } + c->dt->vkCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); +} + +void vkb_sv_vkCmdWriteTimestamp2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkPipelineStageFlags2 stage; + vkb_dec_bytes(d, &stage, sizeof(stage)); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t query; + vkb_dec_bytes(d, &query, sizeof(query)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCmdWriteTimestamp2) { vkb_srv_missing(c, "vkCmdWriteTimestamp2"); return; } + c->dt->vkCmdWriteTimestamp2(commandBuffer, stage, queryPool, query); +} + +void vkb_sv_vkCreateBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkBufferCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferCreateInfo *a_ = (VkBufferCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pBuffer = vkb_dec_u8(d); + VkBuffer pBuffer_v; + memset(&pBuffer_v, 0, sizeof(pBuffer_v)); + if (has_pBuffer) vkb_dec_bytes(d, &pBuffer_v, sizeof(pBuffer_v)); + VkBuffer *pBuffer = has_pBuffer ? &pBuffer_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateBuffer) { vkb_srv_missing(c, "vkCreateBuffer"); return; } + VkResult r_ = c->dt->vkCreateBuffer(device, pCreateInfo, NULL, pBuffer); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pBuffer != NULL); + if (pBuffer) vkb_enc_raw(e, pBuffer, sizeof(*pBuffer)); +} + +void vkb_sv_vkCreateBufferView(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkBufferViewCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferViewCreateInfo *a_ = (VkBufferViewCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferViewCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferViewCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pView = vkb_dec_u8(d); + VkBufferView pView_v; + memset(&pView_v, 0, sizeof(pView_v)); + if (has_pView) vkb_dec_bytes(d, &pView_v, sizeof(pView_v)); + VkBufferView *pView = has_pView ? &pView_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateBufferView) { vkb_srv_missing(c, "vkCreateBufferView"); return; } + VkResult r_ = c->dt->vkCreateBufferView(device, pCreateInfo, NULL, pView); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pView != NULL); + if (pView) vkb_enc_raw(e, pView, sizeof(*pView)); +} + +void vkb_sv_vkCreateCommandPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkCommandPoolCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandPoolCreateInfo *a_ = (VkCommandPoolCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandPoolCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCommandPoolCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pCommandPool = vkb_dec_u8(d); + VkCommandPool pCommandPool_v; + memset(&pCommandPool_v, 0, sizeof(pCommandPool_v)); + if (has_pCommandPool) vkb_dec_bytes(d, &pCommandPool_v, sizeof(pCommandPool_v)); + VkCommandPool *pCommandPool = has_pCommandPool ? &pCommandPool_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateCommandPool) { vkb_srv_missing(c, "vkCreateCommandPool"); return; } + VkResult r_ = c->dt->vkCreateCommandPool(device, pCreateInfo, NULL, pCommandPool); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pCommandPool != NULL); + if (pCommandPool) vkb_enc_raw(e, pCommandPool, sizeof(*pCommandPool)); +} + +void vkb_sv_vkCreateComputePipelines(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipelineCache pipelineCache; + vkb_dec_bytes(d, &pipelineCache, sizeof(pipelineCache)); + uint32_t createInfoCount; + vkb_dec_bytes(d, &createInfoCount, sizeof(createInfoCount)); + const VkComputePipelineCreateInfo *pCreateInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkComputePipelineCreateInfo *a_ = (VkComputePipelineCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkComputePipelineCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkComputePipelineCreateInfo(d, &a_[i_]); + pCreateInfos = a_; + } else { + pCreateInfos = NULL; + } + uint8_t has_pPipelines = vkb_dec_u8(d); uint32_t n_pPipelines = vkb_dec_u32(d); + VkPipeline *pPipelines = has_pPipelines ? (VkPipeline *)vkb_dec_alloc_zero(d, (size_t)n_pPipelines * sizeof(VkPipeline)) : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateComputePipelines) { vkb_srv_missing(c, "vkCreateComputePipelines"); return; } + VkResult r_ = c->dt->vkCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, NULL, pPipelines); + vkb_enc_bytes(e, &r_, sizeof(r_)); + { + uint32_t rn_ = n_pPipelines; + uint32_t has_ = pPipelines ? (rn_ < n_pPipelines ? rn_ : n_pPipelines) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pPipelines[i_], sizeof(VkPipeline)); + } +} + +void vkb_sv_vkCreateDescriptorPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDescriptorPoolCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDescriptorPoolCreateInfo *a_ = (VkDescriptorPoolCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDescriptorPoolCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDescriptorPoolCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pDescriptorPool = vkb_dec_u8(d); + VkDescriptorPool pDescriptorPool_v; + memset(&pDescriptorPool_v, 0, sizeof(pDescriptorPool_v)); + if (has_pDescriptorPool) vkb_dec_bytes(d, &pDescriptorPool_v, sizeof(pDescriptorPool_v)); + VkDescriptorPool *pDescriptorPool = has_pDescriptorPool ? &pDescriptorPool_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateDescriptorPool) { vkb_srv_missing(c, "vkCreateDescriptorPool"); return; } + VkResult r_ = c->dt->vkCreateDescriptorPool(device, pCreateInfo, NULL, pDescriptorPool); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pDescriptorPool != NULL); + if (pDescriptorPool) vkb_enc_raw(e, pDescriptorPool, sizeof(*pDescriptorPool)); +} + +void vkb_sv_vkCreateDescriptorSetLayout(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDescriptorSetLayoutCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDescriptorSetLayoutCreateInfo *a_ = (VkDescriptorSetLayoutCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDescriptorSetLayoutCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDescriptorSetLayoutCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pSetLayout = vkb_dec_u8(d); + VkDescriptorSetLayout pSetLayout_v; + memset(&pSetLayout_v, 0, sizeof(pSetLayout_v)); + if (has_pSetLayout) vkb_dec_bytes(d, &pSetLayout_v, sizeof(pSetLayout_v)); + VkDescriptorSetLayout *pSetLayout = has_pSetLayout ? &pSetLayout_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateDescriptorSetLayout) { vkb_srv_missing(c, "vkCreateDescriptorSetLayout"); return; } + VkResult r_ = c->dt->vkCreateDescriptorSetLayout(device, pCreateInfo, NULL, pSetLayout); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pSetLayout != NULL); + if (pSetLayout) vkb_enc_raw(e, pSetLayout, sizeof(*pSetLayout)); +} + +void vkb_sv_vkCreateDescriptorUpdateTemplate(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDescriptorUpdateTemplateCreateInfo *a_ = (VkDescriptorUpdateTemplateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDescriptorUpdateTemplateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDescriptorUpdateTemplateCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pDescriptorUpdateTemplate = vkb_dec_u8(d); + VkDescriptorUpdateTemplate pDescriptorUpdateTemplate_v; + memset(&pDescriptorUpdateTemplate_v, 0, sizeof(pDescriptorUpdateTemplate_v)); + if (has_pDescriptorUpdateTemplate) vkb_dec_bytes(d, &pDescriptorUpdateTemplate_v, sizeof(pDescriptorUpdateTemplate_v)); + VkDescriptorUpdateTemplate *pDescriptorUpdateTemplate = has_pDescriptorUpdateTemplate ? &pDescriptorUpdateTemplate_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateDescriptorUpdateTemplate) { vkb_srv_missing(c, "vkCreateDescriptorUpdateTemplate"); return; } + VkResult r_ = c->dt->vkCreateDescriptorUpdateTemplate(device, pCreateInfo, NULL, pDescriptorUpdateTemplate); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pDescriptorUpdateTemplate != NULL); + if (pDescriptorUpdateTemplate) vkb_enc_raw(e, pDescriptorUpdateTemplate, sizeof(*pDescriptorUpdateTemplate)); +} + +void vkb_sv_vkCreateEvent(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkEventCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkEventCreateInfo *a_ = (VkEventCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkEventCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkEventCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pEvent = vkb_dec_u8(d); + VkEvent pEvent_v; + memset(&pEvent_v, 0, sizeof(pEvent_v)); + if (has_pEvent) vkb_dec_bytes(d, &pEvent_v, sizeof(pEvent_v)); + VkEvent *pEvent = has_pEvent ? &pEvent_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateEvent) { vkb_srv_missing(c, "vkCreateEvent"); return; } + VkResult r_ = c->dt->vkCreateEvent(device, pCreateInfo, NULL, pEvent); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pEvent != NULL); + if (pEvent) vkb_enc_raw(e, pEvent, sizeof(*pEvent)); +} + +void vkb_sv_vkCreateFence(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkFenceCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkFenceCreateInfo *a_ = (VkFenceCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkFenceCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkFenceCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pFence = vkb_dec_u8(d); + VkFence pFence_v; + memset(&pFence_v, 0, sizeof(pFence_v)); + if (has_pFence) vkb_dec_bytes(d, &pFence_v, sizeof(pFence_v)); + VkFence *pFence = has_pFence ? &pFence_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateFence) { vkb_srv_missing(c, "vkCreateFence"); return; } + VkResult r_ = c->dt->vkCreateFence(device, pCreateInfo, NULL, pFence); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pFence != NULL); + if (pFence) vkb_enc_raw(e, pFence, sizeof(*pFence)); +} + +void vkb_sv_vkCreateFramebuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkFramebufferCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkFramebufferCreateInfo *a_ = (VkFramebufferCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkFramebufferCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkFramebufferCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pFramebuffer = vkb_dec_u8(d); + VkFramebuffer pFramebuffer_v; + memset(&pFramebuffer_v, 0, sizeof(pFramebuffer_v)); + if (has_pFramebuffer) vkb_dec_bytes(d, &pFramebuffer_v, sizeof(pFramebuffer_v)); + VkFramebuffer *pFramebuffer = has_pFramebuffer ? &pFramebuffer_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateFramebuffer) { vkb_srv_missing(c, "vkCreateFramebuffer"); return; } + VkResult r_ = c->dt->vkCreateFramebuffer(device, pCreateInfo, NULL, pFramebuffer); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pFramebuffer != NULL); + if (pFramebuffer) vkb_enc_raw(e, pFramebuffer, sizeof(*pFramebuffer)); +} + +void vkb_sv_vkCreateGraphicsPipelines(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipelineCache pipelineCache; + vkb_dec_bytes(d, &pipelineCache, sizeof(pipelineCache)); + uint32_t createInfoCount; + vkb_dec_bytes(d, &createInfoCount, sizeof(createInfoCount)); + const VkGraphicsPipelineCreateInfo *pCreateInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkGraphicsPipelineCreateInfo *a_ = (VkGraphicsPipelineCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkGraphicsPipelineCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkGraphicsPipelineCreateInfo(d, &a_[i_]); + pCreateInfos = a_; + } else { + pCreateInfos = NULL; + } + uint8_t has_pPipelines = vkb_dec_u8(d); uint32_t n_pPipelines = vkb_dec_u32(d); + VkPipeline *pPipelines = has_pPipelines ? (VkPipeline *)vkb_dec_alloc_zero(d, (size_t)n_pPipelines * sizeof(VkPipeline)) : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateGraphicsPipelines) { vkb_srv_missing(c, "vkCreateGraphicsPipelines"); return; } + VkResult r_ = c->dt->vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, NULL, pPipelines); + vkb_enc_bytes(e, &r_, sizeof(r_)); + { + uint32_t rn_ = n_pPipelines; + uint32_t has_ = pPipelines ? (rn_ < n_pPipelines ? rn_ : n_pPipelines) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pPipelines[i_], sizeof(VkPipeline)); + } +} + +void vkb_sv_vkCreateImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkImageCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageCreateInfo *a_ = (VkImageCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pImage = vkb_dec_u8(d); + VkImage pImage_v; + memset(&pImage_v, 0, sizeof(pImage_v)); + if (has_pImage) vkb_dec_bytes(d, &pImage_v, sizeof(pImage_v)); + VkImage *pImage = has_pImage ? &pImage_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateImage) { vkb_srv_missing(c, "vkCreateImage"); return; } + VkResult r_ = c->dt->vkCreateImage(device, pCreateInfo, NULL, pImage); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pImage != NULL); + if (pImage) vkb_enc_raw(e, pImage, sizeof(*pImage)); +} + +void vkb_sv_vkCreateImageView(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkImageViewCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageViewCreateInfo *a_ = (VkImageViewCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageViewCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageViewCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pView = vkb_dec_u8(d); + VkImageView pView_v; + memset(&pView_v, 0, sizeof(pView_v)); + if (has_pView) vkb_dec_bytes(d, &pView_v, sizeof(pView_v)); + VkImageView *pView = has_pView ? &pView_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateImageView) { vkb_srv_missing(c, "vkCreateImageView"); return; } + VkResult r_ = c->dt->vkCreateImageView(device, pCreateInfo, NULL, pView); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pView != NULL); + if (pView) vkb_enc_raw(e, pView, sizeof(*pView)); +} + +void vkb_sv_vkCreatePipelineCache(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkPipelineCacheCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineCacheCreateInfo *a_ = (VkPipelineCacheCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineCacheCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineCacheCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pPipelineCache = vkb_dec_u8(d); + VkPipelineCache pPipelineCache_v; + memset(&pPipelineCache_v, 0, sizeof(pPipelineCache_v)); + if (has_pPipelineCache) vkb_dec_bytes(d, &pPipelineCache_v, sizeof(pPipelineCache_v)); + VkPipelineCache *pPipelineCache = has_pPipelineCache ? &pPipelineCache_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreatePipelineCache) { vkb_srv_missing(c, "vkCreatePipelineCache"); return; } + VkResult r_ = c->dt->vkCreatePipelineCache(device, pCreateInfo, NULL, pPipelineCache); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPipelineCache != NULL); + if (pPipelineCache) vkb_enc_raw(e, pPipelineCache, sizeof(*pPipelineCache)); +} + +void vkb_sv_vkCreatePipelineLayout(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkPipelineLayoutCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineLayoutCreateInfo *a_ = (VkPipelineLayoutCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineLayoutCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineLayoutCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pPipelineLayout = vkb_dec_u8(d); + VkPipelineLayout pPipelineLayout_v; + memset(&pPipelineLayout_v, 0, sizeof(pPipelineLayout_v)); + if (has_pPipelineLayout) vkb_dec_bytes(d, &pPipelineLayout_v, sizeof(pPipelineLayout_v)); + VkPipelineLayout *pPipelineLayout = has_pPipelineLayout ? &pPipelineLayout_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreatePipelineLayout) { vkb_srv_missing(c, "vkCreatePipelineLayout"); return; } + VkResult r_ = c->dt->vkCreatePipelineLayout(device, pCreateInfo, NULL, pPipelineLayout); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPipelineLayout != NULL); + if (pPipelineLayout) vkb_enc_raw(e, pPipelineLayout, sizeof(*pPipelineLayout)); +} + +void vkb_sv_vkCreateQueryPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkQueryPoolCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkQueryPoolCreateInfo *a_ = (VkQueryPoolCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkQueryPoolCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkQueryPoolCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pQueryPool = vkb_dec_u8(d); + VkQueryPool pQueryPool_v; + memset(&pQueryPool_v, 0, sizeof(pQueryPool_v)); + if (has_pQueryPool) vkb_dec_bytes(d, &pQueryPool_v, sizeof(pQueryPool_v)); + VkQueryPool *pQueryPool = has_pQueryPool ? &pQueryPool_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateQueryPool) { vkb_srv_missing(c, "vkCreateQueryPool"); return; } + VkResult r_ = c->dt->vkCreateQueryPool(device, pCreateInfo, NULL, pQueryPool); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pQueryPool != NULL); + if (pQueryPool) vkb_enc_raw(e, pQueryPool, sizeof(*pQueryPool)); +} + +void vkb_sv_vkCreateRenderPass(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkRenderPassCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderPassCreateInfo *a_ = (VkRenderPassCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderPassCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderPassCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pRenderPass = vkb_dec_u8(d); + VkRenderPass pRenderPass_v; + memset(&pRenderPass_v, 0, sizeof(pRenderPass_v)); + if (has_pRenderPass) vkb_dec_bytes(d, &pRenderPass_v, sizeof(pRenderPass_v)); + VkRenderPass *pRenderPass = has_pRenderPass ? &pRenderPass_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateRenderPass) { vkb_srv_missing(c, "vkCreateRenderPass"); return; } + VkResult r_ = c->dt->vkCreateRenderPass(device, pCreateInfo, NULL, pRenderPass); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pRenderPass != NULL); + if (pRenderPass) vkb_enc_raw(e, pRenderPass, sizeof(*pRenderPass)); +} + +void vkb_sv_vkCreateRenderPass2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkRenderPassCreateInfo2 *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderPassCreateInfo2 *a_ = (VkRenderPassCreateInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderPassCreateInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderPassCreateInfo2(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pRenderPass = vkb_dec_u8(d); + VkRenderPass pRenderPass_v; + memset(&pRenderPass_v, 0, sizeof(pRenderPass_v)); + if (has_pRenderPass) vkb_dec_bytes(d, &pRenderPass_v, sizeof(pRenderPass_v)); + VkRenderPass *pRenderPass = has_pRenderPass ? &pRenderPass_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateRenderPass2) { vkb_srv_missing(c, "vkCreateRenderPass2"); return; } + VkResult r_ = c->dt->vkCreateRenderPass2(device, pCreateInfo, NULL, pRenderPass); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pRenderPass != NULL); + if (pRenderPass) vkb_enc_raw(e, pRenderPass, sizeof(*pRenderPass)); +} + +void vkb_sv_vkCreateSampler(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkSamplerCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSamplerCreateInfo *a_ = (VkSamplerCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSamplerCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSamplerCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pSampler = vkb_dec_u8(d); + VkSampler pSampler_v; + memset(&pSampler_v, 0, sizeof(pSampler_v)); + if (has_pSampler) vkb_dec_bytes(d, &pSampler_v, sizeof(pSampler_v)); + VkSampler *pSampler = has_pSampler ? &pSampler_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateSampler) { vkb_srv_missing(c, "vkCreateSampler"); return; } + VkResult r_ = c->dt->vkCreateSampler(device, pCreateInfo, NULL, pSampler); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pSampler != NULL); + if (pSampler) vkb_enc_raw(e, pSampler, sizeof(*pSampler)); +} + +void vkb_sv_vkCreateSamplerYcbcrConversion(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkSamplerYcbcrConversionCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSamplerYcbcrConversionCreateInfo *a_ = (VkSamplerYcbcrConversionCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSamplerYcbcrConversionCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSamplerYcbcrConversionCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pYcbcrConversion = vkb_dec_u8(d); + VkSamplerYcbcrConversion pYcbcrConversion_v; + memset(&pYcbcrConversion_v, 0, sizeof(pYcbcrConversion_v)); + if (has_pYcbcrConversion) vkb_dec_bytes(d, &pYcbcrConversion_v, sizeof(pYcbcrConversion_v)); + VkSamplerYcbcrConversion *pYcbcrConversion = has_pYcbcrConversion ? &pYcbcrConversion_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateSamplerYcbcrConversion) { vkb_srv_missing(c, "vkCreateSamplerYcbcrConversion"); return; } + VkResult r_ = c->dt->vkCreateSamplerYcbcrConversion(device, pCreateInfo, NULL, pYcbcrConversion); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pYcbcrConversion != NULL); + if (pYcbcrConversion) vkb_enc_raw(e, pYcbcrConversion, sizeof(*pYcbcrConversion)); +} + +void vkb_sv_vkCreateSemaphore(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkSemaphoreCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreCreateInfo *a_ = (VkSemaphoreCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pSemaphore = vkb_dec_u8(d); + VkSemaphore pSemaphore_v; + memset(&pSemaphore_v, 0, sizeof(pSemaphore_v)); + if (has_pSemaphore) vkb_dec_bytes(d, &pSemaphore_v, sizeof(pSemaphore_v)); + VkSemaphore *pSemaphore = has_pSemaphore ? &pSemaphore_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateSemaphore) { vkb_srv_missing(c, "vkCreateSemaphore"); return; } + VkResult r_ = c->dt->vkCreateSemaphore(device, pCreateInfo, NULL, pSemaphore); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pSemaphore != NULL); + if (pSemaphore) vkb_enc_raw(e, pSemaphore, sizeof(*pSemaphore)); +} + +void vkb_sv_vkCreateShaderModule(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkShaderModuleCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkShaderModuleCreateInfo *a_ = (VkShaderModuleCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkShaderModuleCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkShaderModuleCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pShaderModule = vkb_dec_u8(d); + VkShaderModule pShaderModule_v; + memset(&pShaderModule_v, 0, sizeof(pShaderModule_v)); + if (has_pShaderModule) vkb_dec_bytes(d, &pShaderModule_v, sizeof(pShaderModule_v)); + VkShaderModule *pShaderModule = has_pShaderModule ? &pShaderModule_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateShaderModule) { vkb_srv_missing(c, "vkCreateShaderModule"); return; } + VkResult r_ = c->dt->vkCreateShaderModule(device, pCreateInfo, NULL, pShaderModule); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pShaderModule != NULL); + if (pShaderModule) vkb_enc_raw(e, pShaderModule, sizeof(*pShaderModule)); +} + +void vkb_sv_vkCreateTensorARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkTensorCreateInfoARM *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorCreateInfoARM *a_ = (VkTensorCreateInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorCreateInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorCreateInfoARM(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pTensor = vkb_dec_u8(d); + VkTensorARM pTensor_v; + memset(&pTensor_v, 0, sizeof(pTensor_v)); + if (has_pTensor) vkb_dec_bytes(d, &pTensor_v, sizeof(pTensor_v)); + VkTensorARM *pTensor = has_pTensor ? &pTensor_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateTensorARM) { vkb_srv_missing(c, "vkCreateTensorARM"); return; } + VkResult r_ = c->dt->vkCreateTensorARM(device, pCreateInfo, NULL, pTensor); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pTensor != NULL); + if (pTensor) vkb_enc_raw(e, pTensor, sizeof(*pTensor)); +} + +void vkb_sv_vkCreateTensorViewARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkTensorViewCreateInfoARM *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorViewCreateInfoARM *a_ = (VkTensorViewCreateInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorViewCreateInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorViewCreateInfoARM(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pView = vkb_dec_u8(d); + VkTensorViewARM pView_v; + memset(&pView_v, 0, sizeof(pView_v)); + if (has_pView) vkb_dec_bytes(d, &pView_v, sizeof(pView_v)); + VkTensorViewARM *pView = has_pView ? &pView_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkCreateTensorViewARM) { vkb_srv_missing(c, "vkCreateTensorViewARM"); return; } + VkResult r_ = c->dt->vkCreateTensorViewARM(device, pCreateInfo, NULL, pView); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pView != NULL); + if (pView) vkb_enc_raw(e, pView, sizeof(*pView)); +} + +void vkb_sv_vkDestroyBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyBuffer) { vkb_srv_missing(c, "vkDestroyBuffer"); return; } + c->dt->vkDestroyBuffer(device, buffer, NULL); +} + +void vkb_sv_vkDestroyBufferView(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkBufferView bufferView; + vkb_dec_bytes(d, &bufferView, sizeof(bufferView)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyBufferView) { vkb_srv_missing(c, "vkDestroyBufferView"); return; } + c->dt->vkDestroyBufferView(device, bufferView, NULL); +} + +void vkb_sv_vkDestroyCommandPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkCommandPool commandPool; + vkb_dec_bytes(d, &commandPool, sizeof(commandPool)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyCommandPool) { vkb_srv_missing(c, "vkDestroyCommandPool"); return; } + c->dt->vkDestroyCommandPool(device, commandPool, NULL); +} + +void vkb_sv_vkDestroyDescriptorPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDescriptorPool descriptorPool; + vkb_dec_bytes(d, &descriptorPool, sizeof(descriptorPool)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyDescriptorPool) { vkb_srv_missing(c, "vkDestroyDescriptorPool"); return; } + c->dt->vkDestroyDescriptorPool(device, descriptorPool, NULL); +} + +void vkb_sv_vkDestroyDescriptorSetLayout(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDescriptorSetLayout descriptorSetLayout; + vkb_dec_bytes(d, &descriptorSetLayout, sizeof(descriptorSetLayout)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyDescriptorSetLayout) { vkb_srv_missing(c, "vkDestroyDescriptorSetLayout"); return; } + c->dt->vkDestroyDescriptorSetLayout(device, descriptorSetLayout, NULL); +} + +void vkb_sv_vkDestroyDescriptorUpdateTemplate(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDescriptorUpdateTemplate descriptorUpdateTemplate; + vkb_dec_bytes(d, &descriptorUpdateTemplate, sizeof(descriptorUpdateTemplate)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyDescriptorUpdateTemplate) { vkb_srv_missing(c, "vkDestroyDescriptorUpdateTemplate"); return; } + c->dt->vkDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, NULL); +} + +void vkb_sv_vkDestroyEvent(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyEvent) { vkb_srv_missing(c, "vkDestroyEvent"); return; } + c->dt->vkDestroyEvent(device, event, NULL); +} + +void vkb_sv_vkDestroyFence(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkFence fence; + vkb_dec_bytes(d, &fence, sizeof(fence)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyFence) { vkb_srv_missing(c, "vkDestroyFence"); return; } + c->dt->vkDestroyFence(device, fence, NULL); +} + +void vkb_sv_vkDestroyFramebuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkFramebuffer framebuffer; + vkb_dec_bytes(d, &framebuffer, sizeof(framebuffer)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyFramebuffer) { vkb_srv_missing(c, "vkDestroyFramebuffer"); return; } + c->dt->vkDestroyFramebuffer(device, framebuffer, NULL); +} + +void vkb_sv_vkDestroyImage(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyImage) { vkb_srv_missing(c, "vkDestroyImage"); return; } + c->dt->vkDestroyImage(device, image, NULL); +} + +void vkb_sv_vkDestroyImageView(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImageView imageView; + vkb_dec_bytes(d, &imageView, sizeof(imageView)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyImageView) { vkb_srv_missing(c, "vkDestroyImageView"); return; } + c->dt->vkDestroyImageView(device, imageView, NULL); +} + +void vkb_sv_vkDestroyPipeline(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipeline pipeline; + vkb_dec_bytes(d, &pipeline, sizeof(pipeline)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyPipeline) { vkb_srv_missing(c, "vkDestroyPipeline"); return; } + c->dt->vkDestroyPipeline(device, pipeline, NULL); +} + +void vkb_sv_vkDestroyPipelineCache(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipelineCache pipelineCache; + vkb_dec_bytes(d, &pipelineCache, sizeof(pipelineCache)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyPipelineCache) { vkb_srv_missing(c, "vkDestroyPipelineCache"); return; } + c->dt->vkDestroyPipelineCache(device, pipelineCache, NULL); +} + +void vkb_sv_vkDestroyPipelineLayout(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipelineLayout pipelineLayout; + vkb_dec_bytes(d, &pipelineLayout, sizeof(pipelineLayout)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyPipelineLayout) { vkb_srv_missing(c, "vkDestroyPipelineLayout"); return; } + c->dt->vkDestroyPipelineLayout(device, pipelineLayout, NULL); +} + +void vkb_sv_vkDestroyQueryPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyQueryPool) { vkb_srv_missing(c, "vkDestroyQueryPool"); return; } + c->dt->vkDestroyQueryPool(device, queryPool, NULL); +} + +void vkb_sv_vkDestroyRenderPass(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkRenderPass renderPass; + vkb_dec_bytes(d, &renderPass, sizeof(renderPass)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyRenderPass) { vkb_srv_missing(c, "vkDestroyRenderPass"); return; } + c->dt->vkDestroyRenderPass(device, renderPass, NULL); +} + +void vkb_sv_vkDestroySampler(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkSampler sampler; + vkb_dec_bytes(d, &sampler, sizeof(sampler)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroySampler) { vkb_srv_missing(c, "vkDestroySampler"); return; } + c->dt->vkDestroySampler(device, sampler, NULL); +} + +void vkb_sv_vkDestroySamplerYcbcrConversion(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkSamplerYcbcrConversion ycbcrConversion; + vkb_dec_bytes(d, &ycbcrConversion, sizeof(ycbcrConversion)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroySamplerYcbcrConversion) { vkb_srv_missing(c, "vkDestroySamplerYcbcrConversion"); return; } + c->dt->vkDestroySamplerYcbcrConversion(device, ycbcrConversion, NULL); +} + +void vkb_sv_vkDestroySemaphore(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkSemaphore semaphore; + vkb_dec_bytes(d, &semaphore, sizeof(semaphore)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroySemaphore) { vkb_srv_missing(c, "vkDestroySemaphore"); return; } + c->dt->vkDestroySemaphore(device, semaphore, NULL); +} + +void vkb_sv_vkDestroyShaderModule(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkShaderModule shaderModule; + vkb_dec_bytes(d, &shaderModule, sizeof(shaderModule)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyShaderModule) { vkb_srv_missing(c, "vkDestroyShaderModule"); return; } + c->dt->vkDestroyShaderModule(device, shaderModule, NULL); +} + +void vkb_sv_vkDestroyTensorARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkTensorARM tensor; + vkb_dec_bytes(d, &tensor, sizeof(tensor)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyTensorARM) { vkb_srv_missing(c, "vkDestroyTensorARM"); return; } + c->dt->vkDestroyTensorARM(device, tensor, NULL); +} + +void vkb_sv_vkDestroyTensorViewARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkTensorViewARM tensorView; + vkb_dec_bytes(d, &tensorView, sizeof(tensorView)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDestroyTensorViewARM) { vkb_srv_missing(c, "vkDestroyTensorViewARM"); return; } + c->dt->vkDestroyTensorViewARM(device, tensorView, NULL); +} + +void vkb_sv_vkDeviceWaitIdle(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkDeviceWaitIdle) { vkb_srv_missing(c, "vkDeviceWaitIdle"); return; } + VkResult r_ = c->dt->vkDeviceWaitIdle(device); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkEnumerateDeviceExtensionProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const char *pLayerName; + pLayerName = vkb_dec_str(d); + uint8_t has_pPropertyCount = vkb_dec_u8(d); + uint32_t pPropertyCount_v; + memset(&pPropertyCount_v, 0, sizeof(pPropertyCount_v)); + if (has_pPropertyCount) vkb_dec_bytes(d, &pPropertyCount_v, sizeof(pPropertyCount_v)); + uint32_t *pPropertyCount = has_pPropertyCount ? &pPropertyCount_v : NULL; + uint8_t has_pProperties = vkb_dec_u8(d); uint32_t n_pProperties = vkb_dec_u32(d); + VkExtensionProperties *pProperties = has_pProperties ? (VkExtensionProperties *)vkb_dec_alloc_zero(d, (size_t)n_pProperties * sizeof(VkExtensionProperties)) : NULL; + if (pProperties && pPropertyCount) *pPropertyCount = n_pProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumerateDeviceExtensionProperties) { vkb_srv_missing(c, "vkEnumerateDeviceExtensionProperties"); return; } + VkResult r_ = c->dt->vkEnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_raw(e, pPropertyCount, sizeof(*pPropertyCount)); + { + uint32_t rn_ = (pPropertyCount ? *pPropertyCount : 0); + uint32_t has_ = pProperties ? (rn_ < n_pProperties ? rn_ : n_pProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pProperties[i_], sizeof(VkExtensionProperties)); + } +} + +void vkb_sv_vkEnumerateInstanceExtensionProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + const char *pLayerName; + pLayerName = vkb_dec_str(d); + uint8_t has_pPropertyCount = vkb_dec_u8(d); + uint32_t pPropertyCount_v; + memset(&pPropertyCount_v, 0, sizeof(pPropertyCount_v)); + if (has_pPropertyCount) vkb_dec_bytes(d, &pPropertyCount_v, sizeof(pPropertyCount_v)); + uint32_t *pPropertyCount = has_pPropertyCount ? &pPropertyCount_v : NULL; + uint8_t has_pProperties = vkb_dec_u8(d); uint32_t n_pProperties = vkb_dec_u32(d); + VkExtensionProperties *pProperties = has_pProperties ? (VkExtensionProperties *)vkb_dec_alloc_zero(d, (size_t)n_pProperties * sizeof(VkExtensionProperties)) : NULL; + if (pProperties && pPropertyCount) *pPropertyCount = n_pProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumerateInstanceExtensionProperties) { vkb_srv_missing(c, "vkEnumerateInstanceExtensionProperties"); return; } + VkResult r_ = c->dt->vkEnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_raw(e, pPropertyCount, sizeof(*pPropertyCount)); + { + uint32_t rn_ = (pPropertyCount ? *pPropertyCount : 0); + uint32_t has_ = pProperties ? (rn_ < n_pProperties ? rn_ : n_pProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pProperties[i_], sizeof(VkExtensionProperties)); + } +} + +void vkb_sv_vkEnumerateInstanceLayerProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + uint8_t has_pPropertyCount = vkb_dec_u8(d); + uint32_t pPropertyCount_v; + memset(&pPropertyCount_v, 0, sizeof(pPropertyCount_v)); + if (has_pPropertyCount) vkb_dec_bytes(d, &pPropertyCount_v, sizeof(pPropertyCount_v)); + uint32_t *pPropertyCount = has_pPropertyCount ? &pPropertyCount_v : NULL; + uint8_t has_pProperties = vkb_dec_u8(d); uint32_t n_pProperties = vkb_dec_u32(d); + VkLayerProperties *pProperties = has_pProperties ? (VkLayerProperties *)vkb_dec_alloc_zero(d, (size_t)n_pProperties * sizeof(VkLayerProperties)) : NULL; + if (pProperties && pPropertyCount) *pPropertyCount = n_pProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumerateInstanceLayerProperties) { vkb_srv_missing(c, "vkEnumerateInstanceLayerProperties"); return; } + VkResult r_ = c->dt->vkEnumerateInstanceLayerProperties(pPropertyCount, pProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_raw(e, pPropertyCount, sizeof(*pPropertyCount)); + { + uint32_t rn_ = (pPropertyCount ? *pPropertyCount : 0); + uint32_t has_ = pProperties ? (rn_ < n_pProperties ? rn_ : n_pProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pProperties[i_], sizeof(VkLayerProperties)); + } +} + +void vkb_sv_vkEnumerateInstanceVersion(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + uint8_t has_pApiVersion = vkb_dec_u8(d); + uint32_t pApiVersion_v; + memset(&pApiVersion_v, 0, sizeof(pApiVersion_v)); + if (has_pApiVersion) vkb_dec_bytes(d, &pApiVersion_v, sizeof(pApiVersion_v)); + uint32_t *pApiVersion = has_pApiVersion ? &pApiVersion_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumerateInstanceVersion) { vkb_srv_missing(c, "vkEnumerateInstanceVersion"); return; } + VkResult r_ = c->dt->vkEnumerateInstanceVersion(pApiVersion); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pApiVersion != NULL); + if (pApiVersion) vkb_enc_raw(e, pApiVersion, sizeof(*pApiVersion)); +} + +void vkb_sv_vkEnumeratePhysicalDeviceGroups(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkInstance instance = (VkInstance)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pPhysicalDeviceGroupCount = vkb_dec_u8(d); + uint32_t pPhysicalDeviceGroupCount_v; + memset(&pPhysicalDeviceGroupCount_v, 0, sizeof(pPhysicalDeviceGroupCount_v)); + if (has_pPhysicalDeviceGroupCount) vkb_dec_bytes(d, &pPhysicalDeviceGroupCount_v, sizeof(pPhysicalDeviceGroupCount_v)); + uint32_t *pPhysicalDeviceGroupCount = has_pPhysicalDeviceGroupCount ? &pPhysicalDeviceGroupCount_v : NULL; + uint8_t has_pPhysicalDeviceGroupProperties = vkb_dec_u8(d); uint32_t n_pPhysicalDeviceGroupProperties = vkb_dec_u32(d); + VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties = has_pPhysicalDeviceGroupProperties ? (VkPhysicalDeviceGroupProperties *)vkb_dec_alloc_zero(d, (size_t)n_pPhysicalDeviceGroupProperties * sizeof(VkPhysicalDeviceGroupProperties)) : NULL; + for (uint32_t i_ = 0; pPhysicalDeviceGroupProperties && i_ < n_pPhysicalDeviceGroupProperties; i_++) vkb_dec_out_template(d, &pPhysicalDeviceGroupProperties[i_], sizeof(VkPhysicalDeviceGroupProperties)); + if (pPhysicalDeviceGroupProperties && pPhysicalDeviceGroupCount) *pPhysicalDeviceGroupCount = n_pPhysicalDeviceGroupProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumeratePhysicalDeviceGroups) { vkb_srv_missing(c, "vkEnumeratePhysicalDeviceGroups"); return; } + VkResult r_ = c->dt->vkEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPhysicalDeviceGroupCount != NULL); + if (pPhysicalDeviceGroupCount) vkb_enc_raw(e, pPhysicalDeviceGroupCount, sizeof(*pPhysicalDeviceGroupCount)); + { + uint32_t rn_ = (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0); + uint32_t has_ = pPhysicalDeviceGroupProperties ? (rn_ < n_pPhysicalDeviceGroupProperties ? rn_ : n_pPhysicalDeviceGroupProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pPhysicalDeviceGroupProperties[i_], sizeof(VkPhysicalDeviceGroupProperties)); + } +} + +void vkb_sv_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t queueFamilyIndex; + vkb_dec_bytes(d, &queueFamilyIndex, sizeof(queueFamilyIndex)); + uint8_t has_pCounterCount = vkb_dec_u8(d); + uint32_t pCounterCount_v; + memset(&pCounterCount_v, 0, sizeof(pCounterCount_v)); + if (has_pCounterCount) vkb_dec_bytes(d, &pCounterCount_v, sizeof(pCounterCount_v)); + uint32_t *pCounterCount = has_pCounterCount ? &pCounterCount_v : NULL; + uint8_t has_pCounters = vkb_dec_u8(d); uint32_t n_pCounters = vkb_dec_u32(d); + VkPerformanceCounterARM *pCounters = has_pCounters ? (VkPerformanceCounterARM *)vkb_dec_alloc_zero(d, (size_t)n_pCounters * sizeof(VkPerformanceCounterARM)) : NULL; + for (uint32_t i_ = 0; pCounters && i_ < n_pCounters; i_++) vkb_dec_out_template(d, &pCounters[i_], sizeof(VkPerformanceCounterARM)); + if (pCounters && pCounterCount) *pCounterCount = n_pCounters; + uint8_t has_pCounterDescriptions = vkb_dec_u8(d); uint32_t n_pCounterDescriptions = vkb_dec_u32(d); + VkPerformanceCounterDescriptionARM *pCounterDescriptions = has_pCounterDescriptions ? (VkPerformanceCounterDescriptionARM *)vkb_dec_alloc_zero(d, (size_t)n_pCounterDescriptions * sizeof(VkPerformanceCounterDescriptionARM)) : NULL; + for (uint32_t i_ = 0; pCounterDescriptions && i_ < n_pCounterDescriptions; i_++) vkb_dec_out_template(d, &pCounterDescriptions[i_], sizeof(VkPerformanceCounterDescriptionARM)); + if (pCounterDescriptions && pCounterCount) *pCounterCount = n_pCounterDescriptions; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM) { vkb_srv_missing(c, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM"); return; } + VkResult r_ = c->dt->vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pCounterCount != NULL); + if (pCounterCount) vkb_enc_raw(e, pCounterCount, sizeof(*pCounterCount)); + { + uint32_t rn_ = (pCounterCount ? *pCounterCount : 0); + uint32_t has_ = pCounters ? (rn_ < n_pCounters ? rn_ : n_pCounters) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pCounters[i_], sizeof(VkPerformanceCounterARM)); + } + { + uint32_t rn_ = (pCounterCount ? *pCounterCount : 0); + uint32_t has_ = pCounterDescriptions ? (rn_ < n_pCounterDescriptions ? rn_ : n_pCounterDescriptions) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pCounterDescriptions[i_], sizeof(VkPerformanceCounterDescriptionARM)); + } +} + +void vkb_sv_vkEnumeratePhysicalDevices(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkInstance instance = (VkInstance)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pPhysicalDeviceCount = vkb_dec_u8(d); + uint32_t pPhysicalDeviceCount_v; + memset(&pPhysicalDeviceCount_v, 0, sizeof(pPhysicalDeviceCount_v)); + if (has_pPhysicalDeviceCount) vkb_dec_bytes(d, &pPhysicalDeviceCount_v, sizeof(pPhysicalDeviceCount_v)); + uint32_t *pPhysicalDeviceCount = has_pPhysicalDeviceCount ? &pPhysicalDeviceCount_v : NULL; + uint8_t has_pPhysicalDevices = vkb_dec_u8(d); uint32_t n_pPhysicalDevices = vkb_dec_u32(d); + VkPhysicalDevice *pPhysicalDevices = has_pPhysicalDevices ? (VkPhysicalDevice *)vkb_dec_alloc_zero(d, (size_t)n_pPhysicalDevices * sizeof(VkPhysicalDevice)) : NULL; + if (pPhysicalDevices && pPhysicalDeviceCount) *pPhysicalDeviceCount = n_pPhysicalDevices; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkEnumeratePhysicalDevices) { vkb_srv_missing(c, "vkEnumeratePhysicalDevices"); return; } + VkResult r_ = c->dt->vkEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPhysicalDeviceCount != NULL); + if (pPhysicalDeviceCount) vkb_enc_raw(e, pPhysicalDeviceCount, sizeof(*pPhysicalDeviceCount)); + { + uint32_t rn_ = (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0); + uint32_t has_ = pPhysicalDevices ? (rn_ < n_pPhysicalDevices ? rn_ : n_pPhysicalDevices) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_u64(e, (uint64_t)(uintptr_t)pPhysicalDevices[i_]); + } +} + +void vkb_sv_vkFreeCommandBuffers(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkCommandPool commandPool; + vkb_dec_bytes(d, &commandPool, sizeof(commandPool)); + uint32_t commandBufferCount; + vkb_dec_bytes(d, &commandBufferCount, sizeof(commandBufferCount)); + const VkCommandBuffer *pCommandBuffers; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBuffer *a_ = (VkCommandBuffer *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBuffer)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) a_[i_] = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + pCommandBuffers = a_; + } else { + pCommandBuffers = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkFreeCommandBuffers) { vkb_srv_missing(c, "vkFreeCommandBuffers"); return; } + c->dt->vkFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); +} + +void vkb_sv_vkFreeDescriptorSets(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDescriptorPool descriptorPool; + vkb_dec_bytes(d, &descriptorPool, sizeof(descriptorPool)); + uint32_t descriptorSetCount; + vkb_dec_bytes(d, &descriptorSetCount, sizeof(descriptorSetCount)); + const VkDescriptorSet *pDescriptorSets; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pDescriptorSets = (const VkDescriptorSet *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorSet)); + } else { + pDescriptorSets = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkFreeDescriptorSets) { vkb_srv_missing(c, "vkFreeDescriptorSets"); return; } + VkResult r_ = c->dt->vkFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkGetBufferDeviceAddress(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkBufferDeviceAddressInfo *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferDeviceAddressInfo *a_ = (VkBufferDeviceAddressInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferDeviceAddressInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferDeviceAddressInfo(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetBufferDeviceAddress) { vkb_srv_missing(c, "vkGetBufferDeviceAddress"); return; } + VkDeviceAddress r_ = c->dt->vkGetBufferDeviceAddress(device, pInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkGetBufferMemoryRequirements(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkBuffer buffer; + vkb_dec_bytes(d, &buffer, sizeof(buffer)); + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + VkMemoryRequirements *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetBufferMemoryRequirements) { vkb_srv_missing(c, "vkGetBufferMemoryRequirements"); return; } + c->dt->vkGetBufferMemoryRequirements(device, buffer, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_raw(e, pMemoryRequirements, sizeof(*pMemoryRequirements)); +} + +void vkb_sv_vkGetBufferMemoryRequirements2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkBufferMemoryRequirementsInfo2 *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferMemoryRequirementsInfo2 *a_ = (VkBufferMemoryRequirementsInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferMemoryRequirementsInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferMemoryRequirementsInfo2(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements2 pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + if (has_pMemoryRequirements) vkb_dec_out_template(d, &pMemoryRequirements_v, sizeof(VkMemoryRequirements2)); + VkMemoryRequirements2 *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetBufferMemoryRequirements2) { vkb_srv_missing(c, "vkGetBufferMemoryRequirements2"); return; } + c->dt->vkGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_struct(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); +} + +void vkb_sv_vkGetBufferOpaqueCaptureAddress(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkBufferDeviceAddressInfo *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferDeviceAddressInfo *a_ = (VkBufferDeviceAddressInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferDeviceAddressInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferDeviceAddressInfo(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetBufferOpaqueCaptureAddress) { vkb_srv_missing(c, "vkGetBufferOpaqueCaptureAddress"); return; } + uint64_t r_ = c->dt->vkGetBufferOpaqueCaptureAddress(device, pInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkGetCalibratedTimestampsKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t timestampCount; + vkb_dec_bytes(d, ×tampCount, sizeof(timestampCount)); + const VkCalibratedTimestampInfoKHR *pTimestampInfos; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCalibratedTimestampInfoKHR *a_ = (VkCalibratedTimestampInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCalibratedTimestampInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCalibratedTimestampInfoKHR(d, &a_[i_]); + pTimestampInfos = a_; + } else { + pTimestampInfos = NULL; + } + uint8_t has_pTimestamps = vkb_dec_u8(d); uint32_t n_pTimestamps = vkb_dec_u32(d); + uint64_t *pTimestamps = has_pTimestamps ? (uint64_t *)vkb_dec_alloc_zero(d, (size_t)n_pTimestamps * sizeof(uint64_t)) : NULL; + uint8_t has_pMaxDeviation = vkb_dec_u8(d); + uint64_t pMaxDeviation_v; + memset(&pMaxDeviation_v, 0, sizeof(pMaxDeviation_v)); + if (has_pMaxDeviation) vkb_dec_bytes(d, &pMaxDeviation_v, sizeof(pMaxDeviation_v)); + uint64_t *pMaxDeviation = has_pMaxDeviation ? &pMaxDeviation_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetCalibratedTimestampsKHR) { vkb_srv_missing(c, "vkGetCalibratedTimestampsKHR"); return; } + VkResult r_ = c->dt->vkGetCalibratedTimestampsKHR(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); + vkb_enc_bytes(e, &r_, sizeof(r_)); + { + uint32_t rn_ = n_pTimestamps; + uint32_t has_ = pTimestamps ? (rn_ < n_pTimestamps ? rn_ : n_pTimestamps) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pTimestamps[i_], sizeof(uint64_t)); + } + vkb_enc_u8(e, pMaxDeviation != NULL); + if (pMaxDeviation) vkb_enc_raw(e, pMaxDeviation, sizeof(*pMaxDeviation)); +} + +void vkb_sv_vkGetDescriptorSetLayoutSupport(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDescriptorSetLayoutCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDescriptorSetLayoutCreateInfo *a_ = (VkDescriptorSetLayoutCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDescriptorSetLayoutCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDescriptorSetLayoutCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pSupport = vkb_dec_u8(d); + VkDescriptorSetLayoutSupport pSupport_v; + memset(&pSupport_v, 0, sizeof(pSupport_v)); + if (has_pSupport) vkb_dec_out_template(d, &pSupport_v, sizeof(VkDescriptorSetLayoutSupport)); + VkDescriptorSetLayoutSupport *pSupport = has_pSupport ? &pSupport_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDescriptorSetLayoutSupport) { vkb_srv_missing(c, "vkGetDescriptorSetLayoutSupport"); return; } + c->dt->vkGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport); + vkb_enc_u8(e, pSupport != NULL); + if (pSupport) vkb_enc_out_struct(e, pSupport, sizeof(VkDescriptorSetLayoutSupport)); +} + +void vkb_sv_vkGetDeviceBufferMemoryRequirements(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceBufferMemoryRequirements *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceBufferMemoryRequirements *a_ = (VkDeviceBufferMemoryRequirements *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceBufferMemoryRequirements)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceBufferMemoryRequirements(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements2 pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + if (has_pMemoryRequirements) vkb_dec_out_template(d, &pMemoryRequirements_v, sizeof(VkMemoryRequirements2)); + VkMemoryRequirements2 *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceBufferMemoryRequirements) { vkb_srv_missing(c, "vkGetDeviceBufferMemoryRequirements"); return; } + c->dt->vkGetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_struct(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); +} + +void vkb_sv_vkGetDeviceGroupPeerMemoryFeatures(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t heapIndex; + vkb_dec_bytes(d, &heapIndex, sizeof(heapIndex)); + uint32_t localDeviceIndex; + vkb_dec_bytes(d, &localDeviceIndex, sizeof(localDeviceIndex)); + uint32_t remoteDeviceIndex; + vkb_dec_bytes(d, &remoteDeviceIndex, sizeof(remoteDeviceIndex)); + uint8_t has_pPeerMemoryFeatures = vkb_dec_u8(d); + VkPeerMemoryFeatureFlags pPeerMemoryFeatures_v; + memset(&pPeerMemoryFeatures_v, 0, sizeof(pPeerMemoryFeatures_v)); + if (has_pPeerMemoryFeatures) vkb_dec_bytes(d, &pPeerMemoryFeatures_v, sizeof(pPeerMemoryFeatures_v)); + VkPeerMemoryFeatureFlags *pPeerMemoryFeatures = has_pPeerMemoryFeatures ? &pPeerMemoryFeatures_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceGroupPeerMemoryFeatures) { vkb_srv_missing(c, "vkGetDeviceGroupPeerMemoryFeatures"); return; } + c->dt->vkGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + vkb_enc_u8(e, pPeerMemoryFeatures != NULL); + if (pPeerMemoryFeatures) vkb_enc_raw(e, pPeerMemoryFeatures, sizeof(*pPeerMemoryFeatures)); +} + +void vkb_sv_vkGetDeviceImageMemoryRequirements(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceImageMemoryRequirements *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceImageMemoryRequirements *a_ = (VkDeviceImageMemoryRequirements *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceImageMemoryRequirements)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceImageMemoryRequirements(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements2 pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + if (has_pMemoryRequirements) vkb_dec_out_template(d, &pMemoryRequirements_v, sizeof(VkMemoryRequirements2)); + VkMemoryRequirements2 *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceImageMemoryRequirements) { vkb_srv_missing(c, "vkGetDeviceImageMemoryRequirements"); return; } + c->dt->vkGetDeviceImageMemoryRequirements(device, pInfo, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_struct(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); +} + +void vkb_sv_vkGetDeviceImageSparseMemoryRequirements(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceImageMemoryRequirements *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceImageMemoryRequirements *a_ = (VkDeviceImageMemoryRequirements *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceImageMemoryRequirements)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceImageMemoryRequirements(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pSparseMemoryRequirementCount = vkb_dec_u8(d); + uint32_t pSparseMemoryRequirementCount_v; + memset(&pSparseMemoryRequirementCount_v, 0, sizeof(pSparseMemoryRequirementCount_v)); + if (has_pSparseMemoryRequirementCount) vkb_dec_bytes(d, &pSparseMemoryRequirementCount_v, sizeof(pSparseMemoryRequirementCount_v)); + uint32_t *pSparseMemoryRequirementCount = has_pSparseMemoryRequirementCount ? &pSparseMemoryRequirementCount_v : NULL; + uint8_t has_pSparseMemoryRequirements = vkb_dec_u8(d); uint32_t n_pSparseMemoryRequirements = vkb_dec_u32(d); + VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements = has_pSparseMemoryRequirements ? (VkSparseImageMemoryRequirements2 *)vkb_dec_alloc_zero(d, (size_t)n_pSparseMemoryRequirements * sizeof(VkSparseImageMemoryRequirements2)) : NULL; + for (uint32_t i_ = 0; pSparseMemoryRequirements && i_ < n_pSparseMemoryRequirements; i_++) vkb_dec_out_template(d, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + if (pSparseMemoryRequirements && pSparseMemoryRequirementCount) *pSparseMemoryRequirementCount = n_pSparseMemoryRequirements; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceImageSparseMemoryRequirements) { vkb_srv_missing(c, "vkGetDeviceImageSparseMemoryRequirements"); return; } + c->dt->vkGetDeviceImageSparseMemoryRequirements(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + vkb_enc_u8(e, pSparseMemoryRequirementCount != NULL); + if (pSparseMemoryRequirementCount) vkb_enc_raw(e, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); + { + uint32_t rn_ = (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); + uint32_t has_ = pSparseMemoryRequirements ? (rn_ < n_pSparseMemoryRequirements ? rn_ : n_pSparseMemoryRequirements) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + } +} + +void vkb_sv_vkGetDeviceImageSubresourceLayout(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceImageSubresourceInfo *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceImageSubresourceInfo *a_ = (VkDeviceImageSubresourceInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceImageSubresourceInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceImageSubresourceInfo(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pLayout = vkb_dec_u8(d); + VkSubresourceLayout2 pLayout_v; + memset(&pLayout_v, 0, sizeof(pLayout_v)); + if (has_pLayout) vkb_dec_out_template(d, &pLayout_v, sizeof(VkSubresourceLayout2)); + VkSubresourceLayout2 *pLayout = has_pLayout ? &pLayout_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceImageSubresourceLayout) { vkb_srv_missing(c, "vkGetDeviceImageSubresourceLayout"); return; } + c->dt->vkGetDeviceImageSubresourceLayout(device, pInfo, pLayout); + vkb_enc_u8(e, pLayout != NULL); + if (pLayout) vkb_enc_out_struct(e, pLayout, sizeof(VkSubresourceLayout2)); +} + +void vkb_sv_vkGetDeviceMemoryCommitment(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDeviceMemory memory; + vkb_dec_bytes(d, &memory, sizeof(memory)); + uint8_t has_pCommittedMemoryInBytes = vkb_dec_u8(d); + VkDeviceSize pCommittedMemoryInBytes_v; + memset(&pCommittedMemoryInBytes_v, 0, sizeof(pCommittedMemoryInBytes_v)); + if (has_pCommittedMemoryInBytes) vkb_dec_bytes(d, &pCommittedMemoryInBytes_v, sizeof(pCommittedMemoryInBytes_v)); + VkDeviceSize *pCommittedMemoryInBytes = has_pCommittedMemoryInBytes ? &pCommittedMemoryInBytes_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceMemoryCommitment) { vkb_srv_missing(c, "vkGetDeviceMemoryCommitment"); return; } + c->dt->vkGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); + vkb_enc_u8(e, pCommittedMemoryInBytes != NULL); + if (pCommittedMemoryInBytes) vkb_enc_raw(e, pCommittedMemoryInBytes, sizeof(*pCommittedMemoryInBytes)); +} + +void vkb_sv_vkGetDeviceMemoryOpaqueCaptureAddress(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceMemoryOpaqueCaptureAddressInfo *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceMemoryOpaqueCaptureAddressInfo *a_ = (VkDeviceMemoryOpaqueCaptureAddressInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceMemoryOpaqueCaptureAddressInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceMemoryOpaqueCaptureAddressInfo(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceMemoryOpaqueCaptureAddress) { vkb_srv_missing(c, "vkGetDeviceMemoryOpaqueCaptureAddress"); return; } + uint64_t r_ = c->dt->vkGetDeviceMemoryOpaqueCaptureAddress(device, pInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkGetDeviceQueue(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t queueFamilyIndex; + vkb_dec_bytes(d, &queueFamilyIndex, sizeof(queueFamilyIndex)); + uint32_t queueIndex; + vkb_dec_bytes(d, &queueIndex, sizeof(queueIndex)); + uint8_t has_pQueue = vkb_dec_u8(d); + VkQueue pQueue_v; + memset(&pQueue_v, 0, sizeof(pQueue_v)); + VkQueue *pQueue = has_pQueue ? &pQueue_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceQueue) { vkb_srv_missing(c, "vkGetDeviceQueue"); return; } + c->dt->vkGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue); + vkb_enc_u8(e, pQueue != NULL); + if (pQueue) vkb_enc_u64(e, (uint64_t)(uintptr_t)*pQueue); +} + +void vkb_sv_vkGetDeviceQueue2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceQueueInfo2 *pQueueInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceQueueInfo2 *a_ = (VkDeviceQueueInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceQueueInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceQueueInfo2(d, &a_[i_]); + pQueueInfo = a_; + } else { + pQueueInfo = NULL; + } + uint8_t has_pQueue = vkb_dec_u8(d); + VkQueue pQueue_v; + memset(&pQueue_v, 0, sizeof(pQueue_v)); + VkQueue *pQueue = has_pQueue ? &pQueue_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceQueue2) { vkb_srv_missing(c, "vkGetDeviceQueue2"); return; } + c->dt->vkGetDeviceQueue2(device, pQueueInfo, pQueue); + vkb_enc_u8(e, pQueue != NULL); + if (pQueue) vkb_enc_u64(e, (uint64_t)(uintptr_t)*pQueue); +} + +void vkb_sv_vkGetDeviceTensorMemoryRequirementsARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkDeviceTensorMemoryRequirementsARM *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceTensorMemoryRequirementsARM *a_ = (VkDeviceTensorMemoryRequirementsARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceTensorMemoryRequirementsARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceTensorMemoryRequirementsARM(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements2 pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + if (has_pMemoryRequirements) vkb_dec_out_template(d, &pMemoryRequirements_v, sizeof(VkMemoryRequirements2)); + VkMemoryRequirements2 *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetDeviceTensorMemoryRequirementsARM) { vkb_srv_missing(c, "vkGetDeviceTensorMemoryRequirementsARM"); return; } + c->dt->vkGetDeviceTensorMemoryRequirementsARM(device, pInfo, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_struct(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); +} + +void vkb_sv_vkGetEventStatus(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetEventStatus) { vkb_srv_missing(c, "vkGetEventStatus"); return; } + VkResult r_ = c->dt->vkGetEventStatus(device, event); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkGetFenceFdKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkFenceGetFdInfoKHR *pGetFdInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkFenceGetFdInfoKHR *a_ = (VkFenceGetFdInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkFenceGetFdInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkFenceGetFdInfoKHR(d, &a_[i_]); + pGetFdInfo = a_; + } else { + pGetFdInfo = NULL; + } + int pFd_v = -1; int *pFd = vkb_dec_u8(d) ? &pFd_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetFenceFdKHR) { vkb_srv_missing(c, "vkGetFenceFdKHR"); return; } + VkResult r_ = c->dt->vkGetFenceFdKHR(device, pGetFdInfo, pFd); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_fd(e, pFd ? *pFd : -1); + if (pFd && *pFd >= 0) vkb_srv_close_after_send(c, *pFd); +} + +void vkb_sv_vkGetFenceStatus(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkFence fence; + vkb_dec_bytes(d, &fence, sizeof(fence)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetFenceStatus) { vkb_srv_missing(c, "vkGetFenceStatus"); return; } + VkResult r_ = c->dt->vkGetFenceStatus(device, fence); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkGetImageDrmFormatModifierPropertiesEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + uint8_t has_pProperties = vkb_dec_u8(d); + VkImageDrmFormatModifierPropertiesEXT pProperties_v; + memset(&pProperties_v, 0, sizeof(pProperties_v)); + if (has_pProperties) vkb_dec_out_template(d, &pProperties_v, sizeof(VkImageDrmFormatModifierPropertiesEXT)); + VkImageDrmFormatModifierPropertiesEXT *pProperties = has_pProperties ? &pProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageDrmFormatModifierPropertiesEXT) { vkb_srv_missing(c, "vkGetImageDrmFormatModifierPropertiesEXT"); return; } + VkResult r_ = c->dt->vkGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pProperties != NULL); + if (pProperties) vkb_enc_out_struct(e, pProperties, sizeof(VkImageDrmFormatModifierPropertiesEXT)); +} + +void vkb_sv_vkGetImageMemoryRequirements(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + VkMemoryRequirements *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageMemoryRequirements) { vkb_srv_missing(c, "vkGetImageMemoryRequirements"); return; } + c->dt->vkGetImageMemoryRequirements(device, image, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_raw(e, pMemoryRequirements, sizeof(*pMemoryRequirements)); +} + +void vkb_sv_vkGetImageMemoryRequirements2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkImageMemoryRequirementsInfo2 *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageMemoryRequirementsInfo2 *a_ = (VkImageMemoryRequirementsInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageMemoryRequirementsInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageMemoryRequirementsInfo2(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements2 pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + if (has_pMemoryRequirements) vkb_dec_out_template(d, &pMemoryRequirements_v, sizeof(VkMemoryRequirements2)); + VkMemoryRequirements2 *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageMemoryRequirements2) { vkb_srv_missing(c, "vkGetImageMemoryRequirements2"); return; } + c->dt->vkGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_struct(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); +} + +void vkb_sv_vkGetImageSparseMemoryRequirements(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + uint8_t has_pSparseMemoryRequirementCount = vkb_dec_u8(d); + uint32_t pSparseMemoryRequirementCount_v; + memset(&pSparseMemoryRequirementCount_v, 0, sizeof(pSparseMemoryRequirementCount_v)); + if (has_pSparseMemoryRequirementCount) vkb_dec_bytes(d, &pSparseMemoryRequirementCount_v, sizeof(pSparseMemoryRequirementCount_v)); + uint32_t *pSparseMemoryRequirementCount = has_pSparseMemoryRequirementCount ? &pSparseMemoryRequirementCount_v : NULL; + uint8_t has_pSparseMemoryRequirements = vkb_dec_u8(d); uint32_t n_pSparseMemoryRequirements = vkb_dec_u32(d); + VkSparseImageMemoryRequirements *pSparseMemoryRequirements = has_pSparseMemoryRequirements ? (VkSparseImageMemoryRequirements *)vkb_dec_alloc_zero(d, (size_t)n_pSparseMemoryRequirements * sizeof(VkSparseImageMemoryRequirements)) : NULL; + if (pSparseMemoryRequirements && pSparseMemoryRequirementCount) *pSparseMemoryRequirementCount = n_pSparseMemoryRequirements; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageSparseMemoryRequirements) { vkb_srv_missing(c, "vkGetImageSparseMemoryRequirements"); return; } + c->dt->vkGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + vkb_enc_u8(e, pSparseMemoryRequirementCount != NULL); + if (pSparseMemoryRequirementCount) vkb_enc_raw(e, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); + { + uint32_t rn_ = (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); + uint32_t has_ = pSparseMemoryRequirements ? (rn_ < n_pSparseMemoryRequirements ? rn_ : n_pSparseMemoryRequirements) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements)); + } +} + +void vkb_sv_vkGetImageSparseMemoryRequirements2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkImageSparseMemoryRequirementsInfo2 *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageSparseMemoryRequirementsInfo2 *a_ = (VkImageSparseMemoryRequirementsInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageSparseMemoryRequirementsInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageSparseMemoryRequirementsInfo2(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pSparseMemoryRequirementCount = vkb_dec_u8(d); + uint32_t pSparseMemoryRequirementCount_v; + memset(&pSparseMemoryRequirementCount_v, 0, sizeof(pSparseMemoryRequirementCount_v)); + if (has_pSparseMemoryRequirementCount) vkb_dec_bytes(d, &pSparseMemoryRequirementCount_v, sizeof(pSparseMemoryRequirementCount_v)); + uint32_t *pSparseMemoryRequirementCount = has_pSparseMemoryRequirementCount ? &pSparseMemoryRequirementCount_v : NULL; + uint8_t has_pSparseMemoryRequirements = vkb_dec_u8(d); uint32_t n_pSparseMemoryRequirements = vkb_dec_u32(d); + VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements = has_pSparseMemoryRequirements ? (VkSparseImageMemoryRequirements2 *)vkb_dec_alloc_zero(d, (size_t)n_pSparseMemoryRequirements * sizeof(VkSparseImageMemoryRequirements2)) : NULL; + for (uint32_t i_ = 0; pSparseMemoryRequirements && i_ < n_pSparseMemoryRequirements; i_++) vkb_dec_out_template(d, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + if (pSparseMemoryRequirements && pSparseMemoryRequirementCount) *pSparseMemoryRequirementCount = n_pSparseMemoryRequirements; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageSparseMemoryRequirements2) { vkb_srv_missing(c, "vkGetImageSparseMemoryRequirements2"); return; } + c->dt->vkGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + vkb_enc_u8(e, pSparseMemoryRequirementCount != NULL); + if (pSparseMemoryRequirementCount) vkb_enc_raw(e, pSparseMemoryRequirementCount, sizeof(*pSparseMemoryRequirementCount)); + { + uint32_t rn_ = (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); + uint32_t has_ = pSparseMemoryRequirements ? (rn_ < n_pSparseMemoryRequirements ? rn_ : n_pSparseMemoryRequirements) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pSparseMemoryRequirements[i_], sizeof(VkSparseImageMemoryRequirements2)); + } +} + +void vkb_sv_vkGetImageSubresourceLayout(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + const VkImageSubresource *pSubresource; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pSubresource = (const VkImageSubresource *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageSubresource)); + } else { + pSubresource = NULL; + } + uint8_t has_pLayout = vkb_dec_u8(d); + VkSubresourceLayout pLayout_v; + memset(&pLayout_v, 0, sizeof(pLayout_v)); + VkSubresourceLayout *pLayout = has_pLayout ? &pLayout_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageSubresourceLayout) { vkb_srv_missing(c, "vkGetImageSubresourceLayout"); return; } + c->dt->vkGetImageSubresourceLayout(device, image, pSubresource, pLayout); + vkb_enc_u8(e, pLayout != NULL); + if (pLayout) vkb_enc_raw(e, pLayout, sizeof(*pLayout)); +} + +void vkb_sv_vkGetImageSubresourceLayout2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkImage image; + vkb_dec_bytes(d, &image, sizeof(image)); + const VkImageSubresource2 *pSubresource; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageSubresource2 *a_ = (VkImageSubresource2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageSubresource2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageSubresource2(d, &a_[i_]); + pSubresource = a_; + } else { + pSubresource = NULL; + } + uint8_t has_pLayout = vkb_dec_u8(d); + VkSubresourceLayout2 pLayout_v; + memset(&pLayout_v, 0, sizeof(pLayout_v)); + if (has_pLayout) vkb_dec_out_template(d, &pLayout_v, sizeof(VkSubresourceLayout2)); + VkSubresourceLayout2 *pLayout = has_pLayout ? &pLayout_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetImageSubresourceLayout2) { vkb_srv_missing(c, "vkGetImageSubresourceLayout2"); return; } + c->dt->vkGetImageSubresourceLayout2(device, image, pSubresource, pLayout); + vkb_enc_u8(e, pLayout != NULL); + if (pLayout) vkb_enc_out_struct(e, pLayout, sizeof(VkSubresourceLayout2)); +} + +void vkb_sv_vkGetMemoryFdKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkMemoryGetFdInfoKHR *pGetFdInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkMemoryGetFdInfoKHR *a_ = (VkMemoryGetFdInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkMemoryGetFdInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkMemoryGetFdInfoKHR(d, &a_[i_]); + pGetFdInfo = a_; + } else { + pGetFdInfo = NULL; + } + int pFd_v = -1; int *pFd = vkb_dec_u8(d) ? &pFd_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetMemoryFdKHR) { vkb_srv_missing(c, "vkGetMemoryFdKHR"); return; } + VkResult r_ = c->dt->vkGetMemoryFdKHR(device, pGetFdInfo, pFd); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_fd(e, pFd ? *pFd : -1); + if (pFd && *pFd >= 0) vkb_srv_close_after_send(c, *pFd); +} + +void vkb_sv_vkGetMemoryFdPropertiesKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkExternalMemoryHandleTypeFlagBits handleType; + vkb_dec_bytes(d, &handleType, sizeof(handleType)); + int fd = vkb_dec_fd(d); + uint8_t has_pMemoryFdProperties = vkb_dec_u8(d); + VkMemoryFdPropertiesKHR pMemoryFdProperties_v; + memset(&pMemoryFdProperties_v, 0, sizeof(pMemoryFdProperties_v)); + if (has_pMemoryFdProperties) vkb_dec_out_template(d, &pMemoryFdProperties_v, sizeof(VkMemoryFdPropertiesKHR)); + VkMemoryFdPropertiesKHR *pMemoryFdProperties = has_pMemoryFdProperties ? &pMemoryFdProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetMemoryFdPropertiesKHR) { vkb_srv_missing(c, "vkGetMemoryFdPropertiesKHR"); return; } + VkResult r_ = c->dt->vkGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + if (fd >= 0) vkb_close_fd(fd); + vkb_enc_u8(e, pMemoryFdProperties != NULL); + if (pMemoryFdProperties) vkb_enc_out_struct(e, pMemoryFdProperties, sizeof(VkMemoryFdPropertiesKHR)); +} + +void vkb_sv_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pTimeDomainCount = vkb_dec_u8(d); + uint32_t pTimeDomainCount_v; + memset(&pTimeDomainCount_v, 0, sizeof(pTimeDomainCount_v)); + if (has_pTimeDomainCount) vkb_dec_bytes(d, &pTimeDomainCount_v, sizeof(pTimeDomainCount_v)); + uint32_t *pTimeDomainCount = has_pTimeDomainCount ? &pTimeDomainCount_v : NULL; + uint8_t has_pTimeDomains = vkb_dec_u8(d); uint32_t n_pTimeDomains = vkb_dec_u32(d); + VkTimeDomainKHR *pTimeDomains = has_pTimeDomains ? (VkTimeDomainKHR *)vkb_dec_alloc_zero(d, (size_t)n_pTimeDomains * sizeof(VkTimeDomainKHR)) : NULL; + if (pTimeDomains && pTimeDomainCount) *pTimeDomainCount = n_pTimeDomains; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR) { vkb_srv_missing(c, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR"); return; } + VkResult r_ = c->dt->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(physicalDevice, pTimeDomainCount, pTimeDomains); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pTimeDomainCount != NULL); + if (pTimeDomainCount) vkb_enc_raw(e, pTimeDomainCount, sizeof(*pTimeDomainCount)); + { + uint32_t rn_ = (pTimeDomainCount ? *pTimeDomainCount : 0); + uint32_t has_ = pTimeDomains ? (rn_ < n_pTimeDomains ? rn_ : n_pTimeDomains) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pTimeDomains[i_], sizeof(VkTimeDomainKHR)); + } +} + +void vkb_sv_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pPropertyCount = vkb_dec_u8(d); + uint32_t pPropertyCount_v; + memset(&pPropertyCount_v, 0, sizeof(pPropertyCount_v)); + if (has_pPropertyCount) vkb_dec_bytes(d, &pPropertyCount_v, sizeof(pPropertyCount_v)); + uint32_t *pPropertyCount = has_pPropertyCount ? &pPropertyCount_v : NULL; + uint8_t has_pProperties = vkb_dec_u8(d); uint32_t n_pProperties = vkb_dec_u32(d); + VkCooperativeMatrixPropertiesKHR *pProperties = has_pProperties ? (VkCooperativeMatrixPropertiesKHR *)vkb_dec_alloc_zero(d, (size_t)n_pProperties * sizeof(VkCooperativeMatrixPropertiesKHR)) : NULL; + for (uint32_t i_ = 0; pProperties && i_ < n_pProperties; i_++) vkb_dec_out_template(d, &pProperties[i_], sizeof(VkCooperativeMatrixPropertiesKHR)); + if (pProperties && pPropertyCount) *pPropertyCount = n_pProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR) { vkb_srv_missing(c, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR"); return; } + VkResult r_ = c->dt->vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(physicalDevice, pPropertyCount, pProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_raw(e, pPropertyCount, sizeof(*pPropertyCount)); + { + uint32_t rn_ = (pPropertyCount ? *pPropertyCount : 0); + uint32_t has_ = pProperties ? (rn_ < n_pProperties ? rn_ : n_pProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pProperties[i_], sizeof(VkCooperativeMatrixPropertiesKHR)); + } +} + +void vkb_sv_vkGetPhysicalDeviceExternalBufferProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceExternalBufferInfo *a_ = (VkPhysicalDeviceExternalBufferInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceExternalBufferInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceExternalBufferInfo(d, &a_[i_]); + pExternalBufferInfo = a_; + } else { + pExternalBufferInfo = NULL; + } + uint8_t has_pExternalBufferProperties = vkb_dec_u8(d); + VkExternalBufferProperties pExternalBufferProperties_v; + memset(&pExternalBufferProperties_v, 0, sizeof(pExternalBufferProperties_v)); + if (has_pExternalBufferProperties) vkb_dec_out_template(d, &pExternalBufferProperties_v, sizeof(VkExternalBufferProperties)); + VkExternalBufferProperties *pExternalBufferProperties = has_pExternalBufferProperties ? &pExternalBufferProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceExternalBufferProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceExternalBufferProperties"); return; } + c->dt->vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + vkb_enc_u8(e, pExternalBufferProperties != NULL); + if (pExternalBufferProperties) vkb_enc_out_struct(e, pExternalBufferProperties, sizeof(VkExternalBufferProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceExternalFenceProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const VkPhysicalDeviceExternalFenceInfo *pExternalFenceInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceExternalFenceInfo *a_ = (VkPhysicalDeviceExternalFenceInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceExternalFenceInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceExternalFenceInfo(d, &a_[i_]); + pExternalFenceInfo = a_; + } else { + pExternalFenceInfo = NULL; + } + uint8_t has_pExternalFenceProperties = vkb_dec_u8(d); + VkExternalFenceProperties pExternalFenceProperties_v; + memset(&pExternalFenceProperties_v, 0, sizeof(pExternalFenceProperties_v)); + if (has_pExternalFenceProperties) vkb_dec_out_template(d, &pExternalFenceProperties_v, sizeof(VkExternalFenceProperties)); + VkExternalFenceProperties *pExternalFenceProperties = has_pExternalFenceProperties ? &pExternalFenceProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceExternalFenceProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceExternalFenceProperties"); return; } + c->dt->vkGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + vkb_enc_u8(e, pExternalFenceProperties != NULL); + if (pExternalFenceProperties) vkb_enc_out_struct(e, pExternalFenceProperties, sizeof(VkExternalFenceProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceExternalSemaphoreProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const VkPhysicalDeviceExternalSemaphoreInfo *pExternalSemaphoreInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceExternalSemaphoreInfo *a_ = (VkPhysicalDeviceExternalSemaphoreInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceExternalSemaphoreInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceExternalSemaphoreInfo(d, &a_[i_]); + pExternalSemaphoreInfo = a_; + } else { + pExternalSemaphoreInfo = NULL; + } + uint8_t has_pExternalSemaphoreProperties = vkb_dec_u8(d); + VkExternalSemaphoreProperties pExternalSemaphoreProperties_v; + memset(&pExternalSemaphoreProperties_v, 0, sizeof(pExternalSemaphoreProperties_v)); + if (has_pExternalSemaphoreProperties) vkb_dec_out_template(d, &pExternalSemaphoreProperties_v, sizeof(VkExternalSemaphoreProperties)); + VkExternalSemaphoreProperties *pExternalSemaphoreProperties = has_pExternalSemaphoreProperties ? &pExternalSemaphoreProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceExternalSemaphoreProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceExternalSemaphoreProperties"); return; } + c->dt->vkGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); + vkb_enc_u8(e, pExternalSemaphoreProperties != NULL); + if (pExternalSemaphoreProperties) vkb_enc_out_struct(e, pExternalSemaphoreProperties, sizeof(VkExternalSemaphoreProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceExternalTensorPropertiesARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const VkPhysicalDeviceExternalTensorInfoARM *pExternalTensorInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceExternalTensorInfoARM *a_ = (VkPhysicalDeviceExternalTensorInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceExternalTensorInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceExternalTensorInfoARM(d, &a_[i_]); + pExternalTensorInfo = a_; + } else { + pExternalTensorInfo = NULL; + } + uint8_t has_pExternalTensorProperties = vkb_dec_u8(d); + VkExternalTensorPropertiesARM pExternalTensorProperties_v; + memset(&pExternalTensorProperties_v, 0, sizeof(pExternalTensorProperties_v)); + if (has_pExternalTensorProperties) vkb_dec_out_template(d, &pExternalTensorProperties_v, sizeof(VkExternalTensorPropertiesARM)); + VkExternalTensorPropertiesARM *pExternalTensorProperties = has_pExternalTensorProperties ? &pExternalTensorProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceExternalTensorPropertiesARM) { vkb_srv_missing(c, "vkGetPhysicalDeviceExternalTensorPropertiesARM"); return; } + c->dt->vkGetPhysicalDeviceExternalTensorPropertiesARM(physicalDevice, pExternalTensorInfo, pExternalTensorProperties); + vkb_enc_u8(e, pExternalTensorProperties != NULL); + if (pExternalTensorProperties) vkb_enc_out_struct(e, pExternalTensorProperties, sizeof(VkExternalTensorPropertiesARM)); +} + +void vkb_sv_vkGetPhysicalDeviceFeatures(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pFeatures = vkb_dec_u8(d); + VkPhysicalDeviceFeatures pFeatures_v; + memset(&pFeatures_v, 0, sizeof(pFeatures_v)); + VkPhysicalDeviceFeatures *pFeatures = has_pFeatures ? &pFeatures_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceFeatures) { vkb_srv_missing(c, "vkGetPhysicalDeviceFeatures"); return; } + c->dt->vkGetPhysicalDeviceFeatures(physicalDevice, pFeatures); + vkb_enc_u8(e, pFeatures != NULL); + if (pFeatures) vkb_enc_raw(e, pFeatures, sizeof(*pFeatures)); +} + +void vkb_sv_vkGetPhysicalDeviceFeatures2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pFeatures = vkb_dec_u8(d); + VkPhysicalDeviceFeatures2 pFeatures_v; + memset(&pFeatures_v, 0, sizeof(pFeatures_v)); + if (has_pFeatures) vkb_dec_out_template(d, &pFeatures_v, sizeof(VkPhysicalDeviceFeatures2)); + VkPhysicalDeviceFeatures2 *pFeatures = has_pFeatures ? &pFeatures_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceFeatures2) { vkb_srv_missing(c, "vkGetPhysicalDeviceFeatures2"); return; } + c->dt->vkGetPhysicalDeviceFeatures2(physicalDevice, pFeatures); + vkb_enc_u8(e, pFeatures != NULL); + if (pFeatures) vkb_enc_out_struct(e, pFeatures, sizeof(VkPhysicalDeviceFeatures2)); +} + +void vkb_sv_vkGetPhysicalDeviceFormatProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + VkFormat format; + vkb_dec_bytes(d, &format, sizeof(format)); + uint8_t has_pFormatProperties = vkb_dec_u8(d); + VkFormatProperties pFormatProperties_v; + memset(&pFormatProperties_v, 0, sizeof(pFormatProperties_v)); + VkFormatProperties *pFormatProperties = has_pFormatProperties ? &pFormatProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceFormatProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceFormatProperties"); return; } + c->dt->vkGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties); + vkb_enc_u8(e, pFormatProperties != NULL); + if (pFormatProperties) vkb_enc_raw(e, pFormatProperties, sizeof(*pFormatProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceFormatProperties2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + VkFormat format; + vkb_dec_bytes(d, &format, sizeof(format)); + uint8_t has_pFormatProperties = vkb_dec_u8(d); + VkFormatProperties2 pFormatProperties_v; + memset(&pFormatProperties_v, 0, sizeof(pFormatProperties_v)); + if (has_pFormatProperties) vkb_dec_out_template(d, &pFormatProperties_v, sizeof(VkFormatProperties2)); + VkFormatProperties2 *pFormatProperties = has_pFormatProperties ? &pFormatProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceFormatProperties2) { vkb_srv_missing(c, "vkGetPhysicalDeviceFormatProperties2"); return; } + c->dt->vkGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties); + vkb_enc_u8(e, pFormatProperties != NULL); + if (pFormatProperties) vkb_enc_out_struct(e, pFormatProperties, sizeof(VkFormatProperties2)); +} + +void vkb_sv_vkGetPhysicalDeviceFragmentShadingRatesKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pFragmentShadingRateCount = vkb_dec_u8(d); + uint32_t pFragmentShadingRateCount_v; + memset(&pFragmentShadingRateCount_v, 0, sizeof(pFragmentShadingRateCount_v)); + if (has_pFragmentShadingRateCount) vkb_dec_bytes(d, &pFragmentShadingRateCount_v, sizeof(pFragmentShadingRateCount_v)); + uint32_t *pFragmentShadingRateCount = has_pFragmentShadingRateCount ? &pFragmentShadingRateCount_v : NULL; + uint8_t has_pFragmentShadingRates = vkb_dec_u8(d); uint32_t n_pFragmentShadingRates = vkb_dec_u32(d); + VkPhysicalDeviceFragmentShadingRateKHR *pFragmentShadingRates = has_pFragmentShadingRates ? (VkPhysicalDeviceFragmentShadingRateKHR *)vkb_dec_alloc_zero(d, (size_t)n_pFragmentShadingRates * sizeof(VkPhysicalDeviceFragmentShadingRateKHR)) : NULL; + for (uint32_t i_ = 0; pFragmentShadingRates && i_ < n_pFragmentShadingRates; i_++) vkb_dec_out_template(d, &pFragmentShadingRates[i_], sizeof(VkPhysicalDeviceFragmentShadingRateKHR)); + if (pFragmentShadingRates && pFragmentShadingRateCount) *pFragmentShadingRateCount = n_pFragmentShadingRates; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceFragmentShadingRatesKHR) { vkb_srv_missing(c, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); return; } + VkResult r_ = c->dt->vkGetPhysicalDeviceFragmentShadingRatesKHR(physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pFragmentShadingRateCount != NULL); + if (pFragmentShadingRateCount) vkb_enc_raw(e, pFragmentShadingRateCount, sizeof(*pFragmentShadingRateCount)); + { + uint32_t rn_ = (pFragmentShadingRateCount ? *pFragmentShadingRateCount : 0); + uint32_t has_ = pFragmentShadingRates ? (rn_ < n_pFragmentShadingRates ? rn_ : n_pFragmentShadingRates) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pFragmentShadingRates[i_], sizeof(VkPhysicalDeviceFragmentShadingRateKHR)); + } +} + +void vkb_sv_vkGetPhysicalDeviceImageFormatProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + VkFormat format; + vkb_dec_bytes(d, &format, sizeof(format)); + VkImageType type; + vkb_dec_bytes(d, &type, sizeof(type)); + VkImageTiling tiling; + vkb_dec_bytes(d, &tiling, sizeof(tiling)); + VkImageUsageFlags usage; + vkb_dec_bytes(d, &usage, sizeof(usage)); + VkImageCreateFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + uint8_t has_pImageFormatProperties = vkb_dec_u8(d); + VkImageFormatProperties pImageFormatProperties_v; + memset(&pImageFormatProperties_v, 0, sizeof(pImageFormatProperties_v)); + VkImageFormatProperties *pImageFormatProperties = has_pImageFormatProperties ? &pImageFormatProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceImageFormatProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceImageFormatProperties"); return; } + VkResult r_ = c->dt->vkGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pImageFormatProperties != NULL); + if (pImageFormatProperties) vkb_enc_raw(e, pImageFormatProperties, sizeof(*pImageFormatProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceImageFormatProperties2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceImageFormatInfo2 *a_ = (VkPhysicalDeviceImageFormatInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceImageFormatInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceImageFormatInfo2(d, &a_[i_]); + pImageFormatInfo = a_; + } else { + pImageFormatInfo = NULL; + } + uint8_t has_pImageFormatProperties = vkb_dec_u8(d); + VkImageFormatProperties2 pImageFormatProperties_v; + memset(&pImageFormatProperties_v, 0, sizeof(pImageFormatProperties_v)); + if (has_pImageFormatProperties) vkb_dec_out_template(d, &pImageFormatProperties_v, sizeof(VkImageFormatProperties2)); + VkImageFormatProperties2 *pImageFormatProperties = has_pImageFormatProperties ? &pImageFormatProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceImageFormatProperties2) { vkb_srv_missing(c, "vkGetPhysicalDeviceImageFormatProperties2"); return; } + VkResult r_ = c->dt->vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pImageFormatProperties != NULL); + if (pImageFormatProperties) vkb_enc_out_struct(e, pImageFormatProperties, sizeof(VkImageFormatProperties2)); +} + +void vkb_sv_vkGetPhysicalDeviceMemoryProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pMemoryProperties = vkb_dec_u8(d); + VkPhysicalDeviceMemoryProperties pMemoryProperties_v; + memset(&pMemoryProperties_v, 0, sizeof(pMemoryProperties_v)); + VkPhysicalDeviceMemoryProperties *pMemoryProperties = has_pMemoryProperties ? &pMemoryProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceMemoryProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceMemoryProperties"); return; } + c->dt->vkGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties); + vkb_enc_u8(e, pMemoryProperties != NULL); + if (pMemoryProperties) vkb_enc_raw(e, pMemoryProperties, sizeof(*pMemoryProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceMemoryProperties2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pMemoryProperties = vkb_dec_u8(d); + VkPhysicalDeviceMemoryProperties2 pMemoryProperties_v; + memset(&pMemoryProperties_v, 0, sizeof(pMemoryProperties_v)); + if (has_pMemoryProperties) vkb_dec_out_template(d, &pMemoryProperties_v, sizeof(VkPhysicalDeviceMemoryProperties2)); + VkPhysicalDeviceMemoryProperties2 *pMemoryProperties = has_pMemoryProperties ? &pMemoryProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceMemoryProperties2) { vkb_srv_missing(c, "vkGetPhysicalDeviceMemoryProperties2"); return; } + c->dt->vkGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties); + vkb_enc_u8(e, pMemoryProperties != NULL); + if (pMemoryProperties) vkb_enc_out_struct(e, pMemoryProperties, sizeof(VkPhysicalDeviceMemoryProperties2)); +} + +void vkb_sv_vkGetPhysicalDeviceMultisamplePropertiesEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + VkSampleCountFlagBits samples; + vkb_dec_bytes(d, &samples, sizeof(samples)); + uint8_t has_pMultisampleProperties = vkb_dec_u8(d); + VkMultisamplePropertiesEXT pMultisampleProperties_v; + memset(&pMultisampleProperties_v, 0, sizeof(pMultisampleProperties_v)); + if (has_pMultisampleProperties) vkb_dec_out_template(d, &pMultisampleProperties_v, sizeof(VkMultisamplePropertiesEXT)); + VkMultisamplePropertiesEXT *pMultisampleProperties = has_pMultisampleProperties ? &pMultisampleProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceMultisamplePropertiesEXT) { vkb_srv_missing(c, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); return; } + c->dt->vkGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties); + vkb_enc_u8(e, pMultisampleProperties != NULL); + if (pMultisampleProperties) vkb_enc_out_struct(e, pMultisampleProperties, sizeof(VkMultisamplePropertiesEXT)); +} + +void vkb_sv_vkGetPhysicalDeviceProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pProperties = vkb_dec_u8(d); + VkPhysicalDeviceProperties pProperties_v; + memset(&pProperties_v, 0, sizeof(pProperties_v)); + VkPhysicalDeviceProperties *pProperties = has_pProperties ? &pProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceProperties"); return; } + c->dt->vkGetPhysicalDeviceProperties(physicalDevice, pProperties); + vkb_enc_u8(e, pProperties != NULL); + if (pProperties) vkb_enc_raw(e, pProperties, sizeof(*pProperties)); +} + +void vkb_sv_vkGetPhysicalDeviceProperties2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pProperties = vkb_dec_u8(d); + VkPhysicalDeviceProperties2 pProperties_v; + memset(&pProperties_v, 0, sizeof(pProperties_v)); + if (has_pProperties) vkb_dec_out_template(d, &pProperties_v, sizeof(VkPhysicalDeviceProperties2)); + VkPhysicalDeviceProperties2 *pProperties = has_pProperties ? &pProperties_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceProperties2) { vkb_srv_missing(c, "vkGetPhysicalDeviceProperties2"); return; } + c->dt->vkGetPhysicalDeviceProperties2(physicalDevice, pProperties); + vkb_enc_u8(e, pProperties != NULL); + if (pProperties) vkb_enc_out_struct(e, pProperties, sizeof(VkPhysicalDeviceProperties2)); +} + +void vkb_sv_vkGetPhysicalDeviceQueueFamilyProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pQueueFamilyPropertyCount = vkb_dec_u8(d); + uint32_t pQueueFamilyPropertyCount_v; + memset(&pQueueFamilyPropertyCount_v, 0, sizeof(pQueueFamilyPropertyCount_v)); + if (has_pQueueFamilyPropertyCount) vkb_dec_bytes(d, &pQueueFamilyPropertyCount_v, sizeof(pQueueFamilyPropertyCount_v)); + uint32_t *pQueueFamilyPropertyCount = has_pQueueFamilyPropertyCount ? &pQueueFamilyPropertyCount_v : NULL; + uint8_t has_pQueueFamilyProperties = vkb_dec_u8(d); uint32_t n_pQueueFamilyProperties = vkb_dec_u32(d); + VkQueueFamilyProperties *pQueueFamilyProperties = has_pQueueFamilyProperties ? (VkQueueFamilyProperties *)vkb_dec_alloc_zero(d, (size_t)n_pQueueFamilyProperties * sizeof(VkQueueFamilyProperties)) : NULL; + if (pQueueFamilyProperties && pQueueFamilyPropertyCount) *pQueueFamilyPropertyCount = n_pQueueFamilyProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceQueueFamilyProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceQueueFamilyProperties"); return; } + c->dt->vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + vkb_enc_u8(e, pQueueFamilyPropertyCount != NULL); + if (pQueueFamilyPropertyCount) vkb_enc_raw(e, pQueueFamilyPropertyCount, sizeof(*pQueueFamilyPropertyCount)); + { + uint32_t rn_ = (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); + uint32_t has_ = pQueueFamilyProperties ? (rn_ < n_pQueueFamilyProperties ? rn_ : n_pQueueFamilyProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pQueueFamilyProperties[i_], sizeof(VkQueueFamilyProperties)); + } +} + +void vkb_sv_vkGetPhysicalDeviceQueueFamilyProperties2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pQueueFamilyPropertyCount = vkb_dec_u8(d); + uint32_t pQueueFamilyPropertyCount_v; + memset(&pQueueFamilyPropertyCount_v, 0, sizeof(pQueueFamilyPropertyCount_v)); + if (has_pQueueFamilyPropertyCount) vkb_dec_bytes(d, &pQueueFamilyPropertyCount_v, sizeof(pQueueFamilyPropertyCount_v)); + uint32_t *pQueueFamilyPropertyCount = has_pQueueFamilyPropertyCount ? &pQueueFamilyPropertyCount_v : NULL; + uint8_t has_pQueueFamilyProperties = vkb_dec_u8(d); uint32_t n_pQueueFamilyProperties = vkb_dec_u32(d); + VkQueueFamilyProperties2 *pQueueFamilyProperties = has_pQueueFamilyProperties ? (VkQueueFamilyProperties2 *)vkb_dec_alloc_zero(d, (size_t)n_pQueueFamilyProperties * sizeof(VkQueueFamilyProperties2)) : NULL; + for (uint32_t i_ = 0; pQueueFamilyProperties && i_ < n_pQueueFamilyProperties; i_++) vkb_dec_out_template(d, &pQueueFamilyProperties[i_], sizeof(VkQueueFamilyProperties2)); + if (pQueueFamilyProperties && pQueueFamilyPropertyCount) *pQueueFamilyPropertyCount = n_pQueueFamilyProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceQueueFamilyProperties2) { vkb_srv_missing(c, "vkGetPhysicalDeviceQueueFamilyProperties2"); return; } + c->dt->vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + vkb_enc_u8(e, pQueueFamilyPropertyCount != NULL); + if (pQueueFamilyPropertyCount) vkb_enc_raw(e, pQueueFamilyPropertyCount, sizeof(*pQueueFamilyPropertyCount)); + { + uint32_t rn_ = (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); + uint32_t has_ = pQueueFamilyProperties ? (rn_ < n_pQueueFamilyProperties ? rn_ : n_pQueueFamilyProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pQueueFamilyProperties[i_], sizeof(VkQueueFamilyProperties2)); + } +} + +void vkb_sv_vkGetPhysicalDeviceSparseImageFormatProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + VkFormat format; + vkb_dec_bytes(d, &format, sizeof(format)); + VkImageType type; + vkb_dec_bytes(d, &type, sizeof(type)); + VkSampleCountFlagBits samples; + vkb_dec_bytes(d, &samples, sizeof(samples)); + VkImageUsageFlags usage; + vkb_dec_bytes(d, &usage, sizeof(usage)); + VkImageTiling tiling; + vkb_dec_bytes(d, &tiling, sizeof(tiling)); + uint8_t has_pPropertyCount = vkb_dec_u8(d); + uint32_t pPropertyCount_v; + memset(&pPropertyCount_v, 0, sizeof(pPropertyCount_v)); + if (has_pPropertyCount) vkb_dec_bytes(d, &pPropertyCount_v, sizeof(pPropertyCount_v)); + uint32_t *pPropertyCount = has_pPropertyCount ? &pPropertyCount_v : NULL; + uint8_t has_pProperties = vkb_dec_u8(d); uint32_t n_pProperties = vkb_dec_u32(d); + VkSparseImageFormatProperties *pProperties = has_pProperties ? (VkSparseImageFormatProperties *)vkb_dec_alloc_zero(d, (size_t)n_pProperties * sizeof(VkSparseImageFormatProperties)) : NULL; + if (pProperties && pPropertyCount) *pPropertyCount = n_pProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceSparseImageFormatProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceSparseImageFormatProperties"); return; } + c->dt->vkGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_raw(e, pPropertyCount, sizeof(*pPropertyCount)); + { + uint32_t rn_ = (pPropertyCount ? *pPropertyCount : 0); + uint32_t has_ = pProperties ? (rn_ < n_pProperties ? rn_ : n_pProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_raw(e, &pProperties[i_], sizeof(VkSparseImageFormatProperties)); + } +} + +void vkb_sv_vkGetPhysicalDeviceSparseImageFormatProperties2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + const VkPhysicalDeviceSparseImageFormatInfo2 *pFormatInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceSparseImageFormatInfo2 *a_ = (VkPhysicalDeviceSparseImageFormatInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceSparseImageFormatInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceSparseImageFormatInfo2(d, &a_[i_]); + pFormatInfo = a_; + } else { + pFormatInfo = NULL; + } + uint8_t has_pPropertyCount = vkb_dec_u8(d); + uint32_t pPropertyCount_v; + memset(&pPropertyCount_v, 0, sizeof(pPropertyCount_v)); + if (has_pPropertyCount) vkb_dec_bytes(d, &pPropertyCount_v, sizeof(pPropertyCount_v)); + uint32_t *pPropertyCount = has_pPropertyCount ? &pPropertyCount_v : NULL; + uint8_t has_pProperties = vkb_dec_u8(d); uint32_t n_pProperties = vkb_dec_u32(d); + VkSparseImageFormatProperties2 *pProperties = has_pProperties ? (VkSparseImageFormatProperties2 *)vkb_dec_alloc_zero(d, (size_t)n_pProperties * sizeof(VkSparseImageFormatProperties2)) : NULL; + for (uint32_t i_ = 0; pProperties && i_ < n_pProperties; i_++) vkb_dec_out_template(d, &pProperties[i_], sizeof(VkSparseImageFormatProperties2)); + if (pProperties && pPropertyCount) *pPropertyCount = n_pProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceSparseImageFormatProperties2) { vkb_srv_missing(c, "vkGetPhysicalDeviceSparseImageFormatProperties2"); return; } + c->dt->vkGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties); + vkb_enc_u8(e, pPropertyCount != NULL); + if (pPropertyCount) vkb_enc_raw(e, pPropertyCount, sizeof(*pPropertyCount)); + { + uint32_t rn_ = (pPropertyCount ? *pPropertyCount : 0); + uint32_t has_ = pProperties ? (rn_ < n_pProperties ? rn_ : n_pProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pProperties[i_], sizeof(VkSparseImageFormatProperties2)); + } +} + +void vkb_sv_vkGetPhysicalDeviceToolProperties(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkPhysicalDevice physicalDevice = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + uint8_t has_pToolCount = vkb_dec_u8(d); + uint32_t pToolCount_v; + memset(&pToolCount_v, 0, sizeof(pToolCount_v)); + if (has_pToolCount) vkb_dec_bytes(d, &pToolCount_v, sizeof(pToolCount_v)); + uint32_t *pToolCount = has_pToolCount ? &pToolCount_v : NULL; + uint8_t has_pToolProperties = vkb_dec_u8(d); uint32_t n_pToolProperties = vkb_dec_u32(d); + VkPhysicalDeviceToolProperties *pToolProperties = has_pToolProperties ? (VkPhysicalDeviceToolProperties *)vkb_dec_alloc_zero(d, (size_t)n_pToolProperties * sizeof(VkPhysicalDeviceToolProperties)) : NULL; + for (uint32_t i_ = 0; pToolProperties && i_ < n_pToolProperties; i_++) vkb_dec_out_template(d, &pToolProperties[i_], sizeof(VkPhysicalDeviceToolProperties)); + if (pToolProperties && pToolCount) *pToolCount = n_pToolProperties; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPhysicalDeviceToolProperties) { vkb_srv_missing(c, "vkGetPhysicalDeviceToolProperties"); return; } + VkResult r_ = c->dt->vkGetPhysicalDeviceToolProperties(physicalDevice, pToolCount, pToolProperties); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pToolCount != NULL); + if (pToolCount) vkb_enc_raw(e, pToolCount, sizeof(*pToolCount)); + { + uint32_t rn_ = (pToolCount ? *pToolCount : 0); + uint32_t has_ = pToolProperties ? (rn_ < n_pToolProperties ? rn_ : n_pToolProperties) : 0; + vkb_enc_u32(e, rn_); vkb_enc_u32(e, has_); + for (uint32_t i_ = 0; i_ < has_; i_++) vkb_enc_out_struct(e, &pToolProperties[i_], sizeof(VkPhysicalDeviceToolProperties)); + } +} + +void vkb_sv_vkGetPipelineCacheData(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipelineCache pipelineCache; + vkb_dec_bytes(d, &pipelineCache, sizeof(pipelineCache)); + uint8_t has_pDataSize = vkb_dec_u8(d); + size_t pDataSize_v; + memset(&pDataSize_v, 0, sizeof(pDataSize_v)); + if (has_pDataSize) vkb_dec_bytes(d, &pDataSize_v, sizeof(pDataSize_v)); + size_t *pDataSize = has_pDataSize ? &pDataSize_v : NULL; + uint8_t has_pData = vkb_dec_u8(d); uint64_t n_pData = vkb_dec_u64(d); + void *pData = has_pData ? vkb_dec_alloc(d, (size_t)n_pData) : NULL; + if (pDataSize && pData) *pDataSize = (size_t)n_pData; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetPipelineCacheData) { vkb_srv_missing(c, "vkGetPipelineCacheData"); return; } + VkResult r_ = c->dt->vkGetPipelineCacheData(device, pipelineCache, pDataSize, pData); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pDataSize != NULL); + if (pDataSize) vkb_enc_raw(e, pDataSize, sizeof(*pDataSize)); + vkb_enc_u64(e, pDataSize ? (uint64_t)*pDataSize : 0); vkb_enc_blob(e, pData, pData && pDataSize ? (size_t)*pDataSize : 0); +} + +void vkb_sv_vkGetQueryPoolResults(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t firstQuery; + vkb_dec_bytes(d, &firstQuery, sizeof(firstQuery)); + uint32_t queryCount; + vkb_dec_bytes(d, &queryCount, sizeof(queryCount)); + size_t dataSize; + vkb_dec_bytes(d, &dataSize, sizeof(dataSize)); + uint8_t has_pData = vkb_dec_u8(d); uint64_t n_pData = vkb_dec_u64(d); + void *pData = has_pData ? vkb_dec_alloc(d, (size_t)n_pData) : NULL; + VkDeviceSize stride; + vkb_dec_bytes(d, &stride, sizeof(stride)); + VkQueryResultFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetQueryPoolResults) { vkb_srv_missing(c, "vkGetQueryPoolResults"); return; } + VkResult r_ = c->dt->vkGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_blob(e, pData, (size_t)n_pData); +} + +void vkb_sv_vkGetRenderAreaGranularity(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkRenderPass renderPass; + vkb_dec_bytes(d, &renderPass, sizeof(renderPass)); + uint8_t has_pGranularity = vkb_dec_u8(d); + VkExtent2D pGranularity_v; + memset(&pGranularity_v, 0, sizeof(pGranularity_v)); + VkExtent2D *pGranularity = has_pGranularity ? &pGranularity_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetRenderAreaGranularity) { vkb_srv_missing(c, "vkGetRenderAreaGranularity"); return; } + c->dt->vkGetRenderAreaGranularity(device, renderPass, pGranularity); + vkb_enc_u8(e, pGranularity != NULL); + if (pGranularity) vkb_enc_raw(e, pGranularity, sizeof(*pGranularity)); +} + +void vkb_sv_vkGetRenderingAreaGranularity(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkRenderingAreaInfo *pRenderingAreaInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingAreaInfo *a_ = (VkRenderingAreaInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingAreaInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingAreaInfo(d, &a_[i_]); + pRenderingAreaInfo = a_; + } else { + pRenderingAreaInfo = NULL; + } + uint8_t has_pGranularity = vkb_dec_u8(d); + VkExtent2D pGranularity_v; + memset(&pGranularity_v, 0, sizeof(pGranularity_v)); + VkExtent2D *pGranularity = has_pGranularity ? &pGranularity_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetRenderingAreaGranularity) { vkb_srv_missing(c, "vkGetRenderingAreaGranularity"); return; } + c->dt->vkGetRenderingAreaGranularity(device, pRenderingAreaInfo, pGranularity); + vkb_enc_u8(e, pGranularity != NULL); + if (pGranularity) vkb_enc_raw(e, pGranularity, sizeof(*pGranularity)); +} + +void vkb_sv_vkGetSemaphoreCounterValue(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkSemaphore semaphore; + vkb_dec_bytes(d, &semaphore, sizeof(semaphore)); + uint8_t has_pValue = vkb_dec_u8(d); + uint64_t pValue_v; + memset(&pValue_v, 0, sizeof(pValue_v)); + if (has_pValue) vkb_dec_bytes(d, &pValue_v, sizeof(pValue_v)); + uint64_t *pValue = has_pValue ? &pValue_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetSemaphoreCounterValue) { vkb_srv_missing(c, "vkGetSemaphoreCounterValue"); return; } + VkResult r_ = c->dt->vkGetSemaphoreCounterValue(device, semaphore, pValue); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_u8(e, pValue != NULL); + if (pValue) vkb_enc_raw(e, pValue, sizeof(*pValue)); +} + +void vkb_sv_vkGetSemaphoreFdKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkSemaphoreGetFdInfoKHR *pGetFdInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreGetFdInfoKHR *a_ = (VkSemaphoreGetFdInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreGetFdInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreGetFdInfoKHR(d, &a_[i_]); + pGetFdInfo = a_; + } else { + pGetFdInfo = NULL; + } + int pFd_v = -1; int *pFd = vkb_dec_u8(d) ? &pFd_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetSemaphoreFdKHR) { vkb_srv_missing(c, "vkGetSemaphoreFdKHR"); return; } + VkResult r_ = c->dt->vkGetSemaphoreFdKHR(device, pGetFdInfo, pFd); + vkb_enc_bytes(e, &r_, sizeof(r_)); + vkb_enc_fd(e, pFd ? *pFd : -1); + if (pFd && *pFd >= 0) vkb_srv_close_after_send(c, *pFd); +} + +void vkb_sv_vkGetShaderModuleCreateInfoIdentifierEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkShaderModuleCreateInfo *pCreateInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkShaderModuleCreateInfo *a_ = (VkShaderModuleCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkShaderModuleCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkShaderModuleCreateInfo(d, &a_[i_]); + pCreateInfo = a_; + } else { + pCreateInfo = NULL; + } + uint8_t has_pIdentifier = vkb_dec_u8(d); + VkShaderModuleIdentifierEXT pIdentifier_v; + memset(&pIdentifier_v, 0, sizeof(pIdentifier_v)); + if (has_pIdentifier) vkb_dec_out_template(d, &pIdentifier_v, sizeof(VkShaderModuleIdentifierEXT)); + VkShaderModuleIdentifierEXT *pIdentifier = has_pIdentifier ? &pIdentifier_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetShaderModuleCreateInfoIdentifierEXT) { vkb_srv_missing(c, "vkGetShaderModuleCreateInfoIdentifierEXT"); return; } + c->dt->vkGetShaderModuleCreateInfoIdentifierEXT(device, pCreateInfo, pIdentifier); + vkb_enc_u8(e, pIdentifier != NULL); + if (pIdentifier) vkb_enc_out_struct(e, pIdentifier, sizeof(VkShaderModuleIdentifierEXT)); +} + +void vkb_sv_vkGetShaderModuleIdentifierEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkShaderModule shaderModule; + vkb_dec_bytes(d, &shaderModule, sizeof(shaderModule)); + uint8_t has_pIdentifier = vkb_dec_u8(d); + VkShaderModuleIdentifierEXT pIdentifier_v; + memset(&pIdentifier_v, 0, sizeof(pIdentifier_v)); + if (has_pIdentifier) vkb_dec_out_template(d, &pIdentifier_v, sizeof(VkShaderModuleIdentifierEXT)); + VkShaderModuleIdentifierEXT *pIdentifier = has_pIdentifier ? &pIdentifier_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetShaderModuleIdentifierEXT) { vkb_srv_missing(c, "vkGetShaderModuleIdentifierEXT"); return; } + c->dt->vkGetShaderModuleIdentifierEXT(device, shaderModule, pIdentifier); + vkb_enc_u8(e, pIdentifier != NULL); + if (pIdentifier) vkb_enc_out_struct(e, pIdentifier, sizeof(VkShaderModuleIdentifierEXT)); +} + +void vkb_sv_vkGetTensorMemoryRequirementsARM(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkTensorMemoryRequirementsInfoARM *pInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorMemoryRequirementsInfoARM *a_ = (VkTensorMemoryRequirementsInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorMemoryRequirementsInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorMemoryRequirementsInfoARM(d, &a_[i_]); + pInfo = a_; + } else { + pInfo = NULL; + } + uint8_t has_pMemoryRequirements = vkb_dec_u8(d); + VkMemoryRequirements2 pMemoryRequirements_v; + memset(&pMemoryRequirements_v, 0, sizeof(pMemoryRequirements_v)); + if (has_pMemoryRequirements) vkb_dec_out_template(d, &pMemoryRequirements_v, sizeof(VkMemoryRequirements2)); + VkMemoryRequirements2 *pMemoryRequirements = has_pMemoryRequirements ? &pMemoryRequirements_v : NULL; + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkGetTensorMemoryRequirementsARM) { vkb_srv_missing(c, "vkGetTensorMemoryRequirementsARM"); return; } + c->dt->vkGetTensorMemoryRequirementsARM(device, pInfo, pMemoryRequirements); + vkb_enc_u8(e, pMemoryRequirements != NULL); + if (pMemoryRequirements) vkb_enc_out_struct(e, pMemoryRequirements, sizeof(VkMemoryRequirements2)); +} + +void vkb_sv_vkImportFenceFdKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkImportFenceFdInfoKHR *pImportFenceFdInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImportFenceFdInfoKHR *a_ = (VkImportFenceFdInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImportFenceFdInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImportFenceFdInfoKHR(d, &a_[i_]); + pImportFenceFdInfo = a_; + } else { + pImportFenceFdInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkImportFenceFdKHR) { vkb_srv_missing(c, "vkImportFenceFdKHR"); return; } + VkResult r_ = c->dt->vkImportFenceFdKHR(device, pImportFenceFdInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkImportSemaphoreFdKHR(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkImportSemaphoreFdInfoKHR *pImportSemaphoreFdInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImportSemaphoreFdInfoKHR *a_ = (VkImportSemaphoreFdInfoKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImportSemaphoreFdInfoKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImportSemaphoreFdInfoKHR(d, &a_[i_]); + pImportSemaphoreFdInfo = a_; + } else { + pImportSemaphoreFdInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkImportSemaphoreFdKHR) { vkb_srv_missing(c, "vkImportSemaphoreFdKHR"); return; } + VkResult r_ = c->dt->vkImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkMergePipelineCaches(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkPipelineCache dstCache; + vkb_dec_bytes(d, &dstCache, sizeof(dstCache)); + uint32_t srcCacheCount; + vkb_dec_bytes(d, &srcCacheCount, sizeof(srcCacheCount)); + const VkPipelineCache *pSrcCaches; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pSrcCaches = (const VkPipelineCache *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPipelineCache)); + } else { + pSrcCaches = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkMergePipelineCaches) { vkb_srv_missing(c, "vkMergePipelineCaches"); return; } + VkResult r_ = c->dt->vkMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkQueueBindSparse(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkQueue queue = (VkQueue)(uintptr_t)vkb_dec_u64(d); + uint32_t bindInfoCount; + vkb_dec_bytes(d, &bindInfoCount, sizeof(bindInfoCount)); + const VkBindSparseInfo *pBindInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBindSparseInfo *a_ = (VkBindSparseInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBindSparseInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBindSparseInfo(d, &a_[i_]); + pBindInfo = a_; + } else { + pBindInfo = NULL; + } + VkFence fence; + vkb_dec_bytes(d, &fence, sizeof(fence)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkQueueBindSparse) { vkb_srv_missing(c, "vkQueueBindSparse"); return; } + VkResult r_ = c->dt->vkQueueBindSparse(queue, bindInfoCount, pBindInfo, fence); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkQueueSubmit(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkQueue queue = (VkQueue)(uintptr_t)vkb_dec_u64(d); + uint32_t submitCount; + vkb_dec_bytes(d, &submitCount, sizeof(submitCount)); + const VkSubmitInfo *pSubmits; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubmitInfo *a_ = (VkSubmitInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubmitInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubmitInfo(d, &a_[i_]); + pSubmits = a_; + } else { + pSubmits = NULL; + } + VkFence fence; + vkb_dec_bytes(d, &fence, sizeof(fence)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkQueueSubmit) { vkb_srv_missing(c, "vkQueueSubmit"); return; } + VkResult r_ = c->dt->vkQueueSubmit(queue, submitCount, pSubmits, fence); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkQueueSubmit2(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkQueue queue = (VkQueue)(uintptr_t)vkb_dec_u64(d); + uint32_t submitCount; + vkb_dec_bytes(d, &submitCount, sizeof(submitCount)); + const VkSubmitInfo2 *pSubmits; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubmitInfo2 *a_ = (VkSubmitInfo2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubmitInfo2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubmitInfo2(d, &a_[i_]); + pSubmits = a_; + } else { + pSubmits = NULL; + } + VkFence fence; + vkb_dec_bytes(d, &fence, sizeof(fence)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkQueueSubmit2) { vkb_srv_missing(c, "vkQueueSubmit2"); return; } + VkResult r_ = c->dt->vkQueueSubmit2(queue, submitCount, pSubmits, fence); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkQueueWaitIdle(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkQueue queue = (VkQueue)(uintptr_t)vkb_dec_u64(d); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkQueueWaitIdle) { vkb_srv_missing(c, "vkQueueWaitIdle"); return; } + VkResult r_ = c->dt->vkQueueWaitIdle(queue); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkResetCommandBuffer(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkCommandBuffer commandBuffer = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + VkCommandBufferResetFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkResetCommandBuffer) { vkb_srv_missing(c, "vkResetCommandBuffer"); return; } + VkResult r_ = c->dt->vkResetCommandBuffer(commandBuffer, flags); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkResetCommandPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkCommandPool commandPool; + vkb_dec_bytes(d, &commandPool, sizeof(commandPool)); + VkCommandPoolResetFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkResetCommandPool) { vkb_srv_missing(c, "vkResetCommandPool"); return; } + VkResult r_ = c->dt->vkResetCommandPool(device, commandPool, flags); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkResetDescriptorPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDescriptorPool descriptorPool; + vkb_dec_bytes(d, &descriptorPool, sizeof(descriptorPool)); + VkDescriptorPoolResetFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkResetDescriptorPool) { vkb_srv_missing(c, "vkResetDescriptorPool"); return; } + VkResult r_ = c->dt->vkResetDescriptorPool(device, descriptorPool, flags); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkResetEvent(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkResetEvent) { vkb_srv_missing(c, "vkResetEvent"); return; } + VkResult r_ = c->dt->vkResetEvent(device, event); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkResetFences(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t fenceCount; + vkb_dec_bytes(d, &fenceCount, sizeof(fenceCount)); + const VkFence *pFences; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pFences = (const VkFence *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFence)); + } else { + pFences = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkResetFences) { vkb_srv_missing(c, "vkResetFences"); return; } + VkResult r_ = c->dt->vkResetFences(device, fenceCount, pFences); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkResetQueryPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkQueryPool queryPool; + vkb_dec_bytes(d, &queryPool, sizeof(queryPool)); + uint32_t firstQuery; + vkb_dec_bytes(d, &firstQuery, sizeof(firstQuery)); + uint32_t queryCount; + vkb_dec_bytes(d, &queryCount, sizeof(queryCount)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkResetQueryPool) { vkb_srv_missing(c, "vkResetQueryPool"); return; } + c->dt->vkResetQueryPool(device, queryPool, firstQuery, queryCount); +} + +void vkb_sv_vkSetDeviceMemoryPriorityEXT(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkDeviceMemory memory; + vkb_dec_bytes(d, &memory, sizeof(memory)); + float priority; + vkb_dec_bytes(d, &priority, sizeof(priority)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkSetDeviceMemoryPriorityEXT) { vkb_srv_missing(c, "vkSetDeviceMemoryPriorityEXT"); return; } + c->dt->vkSetDeviceMemoryPriorityEXT(device, memory, priority); +} + +void vkb_sv_vkSetEvent(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkEvent event; + vkb_dec_bytes(d, &event, sizeof(event)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkSetEvent) { vkb_srv_missing(c, "vkSetEvent"); return; } + VkResult r_ = c->dt->vkSetEvent(device, event); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkSignalSemaphore(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkSemaphoreSignalInfo *pSignalInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreSignalInfo *a_ = (VkSemaphoreSignalInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreSignalInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreSignalInfo(d, &a_[i_]); + pSignalInfo = a_; + } else { + pSignalInfo = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkSignalSemaphore) { vkb_srv_missing(c, "vkSignalSemaphore"); return; } + VkResult r_ = c->dt->vkSignalSemaphore(device, pSignalInfo); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkTrimCommandPool(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + VkCommandPool commandPool; + vkb_dec_bytes(d, &commandPool, sizeof(commandPool)); + VkCommandPoolTrimFlags flags; + vkb_dec_bytes(d, &flags, sizeof(flags)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkTrimCommandPool) { vkb_srv_missing(c, "vkTrimCommandPool"); return; } + c->dt->vkTrimCommandPool(device, commandPool, flags); +} + +void vkb_sv_vkUpdateDescriptorSets(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t descriptorWriteCount; + vkb_dec_bytes(d, &descriptorWriteCount, sizeof(descriptorWriteCount)); + const VkWriteDescriptorSet *pDescriptorWrites; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkWriteDescriptorSet *a_ = (VkWriteDescriptorSet *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkWriteDescriptorSet)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkWriteDescriptorSet(d, &a_[i_]); + pDescriptorWrites = a_; + } else { + pDescriptorWrites = NULL; + } + uint32_t descriptorCopyCount; + vkb_dec_bytes(d, &descriptorCopyCount, sizeof(descriptorCopyCount)); + const VkCopyDescriptorSet *pDescriptorCopies; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCopyDescriptorSet *a_ = (VkCopyDescriptorSet *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCopyDescriptorSet)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCopyDescriptorSet(d, &a_[i_]); + pDescriptorCopies = a_; + } else { + pDescriptorCopies = NULL; + } + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkUpdateDescriptorSets) { vkb_srv_missing(c, "vkUpdateDescriptorSets"); return; } + c->dt->vkUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); +} + +void vkb_sv_vkWaitForFences(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + uint32_t fenceCount; + vkb_dec_bytes(d, &fenceCount, sizeof(fenceCount)); + const VkFence *pFences; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + pFences = (const VkFence *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFence)); + } else { + pFences = NULL; + } + VkBool32 waitAll; + vkb_dec_bytes(d, &waitAll, sizeof(waitAll)); + uint64_t timeout; + vkb_dec_bytes(d, &timeout, sizeof(timeout)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkWaitForFences) { vkb_srv_missing(c, "vkWaitForFences"); return; } + VkResult r_ = c->dt->vkWaitForFences(device, fenceCount, pFences, waitAll, timeout); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +void vkb_sv_vkWaitSemaphores(vkb_srv_call *c) +{ + vkb_dec *d = &c->d; + vkb_enc *e = &c->r; + (void)e; + VkDevice device = (VkDevice)(uintptr_t)vkb_dec_u64(d); + const VkSemaphoreWaitInfo *pWaitInfo; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreWaitInfo *a_ = (VkSemaphoreWaitInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreWaitInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreWaitInfo(d, &a_[i_]); + pWaitInfo = a_; + } else { + pWaitInfo = NULL; + } + uint64_t timeout; + vkb_dec_bytes(d, &timeout, sizeof(timeout)); + if (d->err) { vkb_srv_bad_message(c); return; } + if (!c->dt->vkWaitSemaphores) { vkb_srv_missing(c, "vkWaitSemaphores"); return; } + VkResult r_ = c->dt->vkWaitSemaphores(device, pWaitInfo, timeout); + vkb_enc_bytes(e, &r_, sizeof(r_)); +} + +const vkb_srv_handler vkb_srv_handlers[VKB_CMD_COUNT] = { + [VKB_CMD_vkbHello] = vkb_sv_vkbHello, + [VKB_CMD_vkbQueryServer] = vkb_sv_vkbQueryServer, + [VKB_CMD_vkbDescUpdateRaw] = vkb_sv_vkbDescUpdateRaw, + [VKB_CMD_vkbPushDescRaw] = vkb_sv_vkbPushDescRaw, + [VKB_CMD_vkbAllocDescSets] = vkb_sv_vkbAllocDescSets, + [VKB_CMD_vkAllocateCommandBuffers] = vkb_sv_vkAllocateCommandBuffers, + [VKB_CMD_vkAllocateDescriptorSets] = vkb_sv_vkAllocateDescriptorSets, + [VKB_CMD_vkAllocateMemory] = vkb_sv_vkAllocateMemory, + [VKB_CMD_vkBeginCommandBuffer] = vkb_sv_vkBeginCommandBuffer, + [VKB_CMD_vkBindBufferMemory] = vkb_sv_vkBindBufferMemory, + [VKB_CMD_vkBindBufferMemory2] = vkb_sv_vkBindBufferMemory2, + [VKB_CMD_vkBindImageMemory] = vkb_sv_vkBindImageMemory, + [VKB_CMD_vkBindImageMemory2] = vkb_sv_vkBindImageMemory2, + [VKB_CMD_vkBindTensorMemoryARM] = vkb_sv_vkBindTensorMemoryARM, + [VKB_CMD_vkCmdBeginConditionalRenderingEXT] = vkb_sv_vkCmdBeginConditionalRenderingEXT, + [VKB_CMD_vkCmdBeginCustomResolveEXT] = vkb_sv_vkCmdBeginCustomResolveEXT, + [VKB_CMD_vkCmdBeginQuery] = vkb_sv_vkCmdBeginQuery, + [VKB_CMD_vkCmdBeginQueryIndexedEXT] = vkb_sv_vkCmdBeginQueryIndexedEXT, + [VKB_CMD_vkCmdBeginRenderPass] = vkb_sv_vkCmdBeginRenderPass, + [VKB_CMD_vkCmdBeginRenderPass2] = vkb_sv_vkCmdBeginRenderPass2, + [VKB_CMD_vkCmdBeginRendering] = vkb_sv_vkCmdBeginRendering, + [VKB_CMD_vkCmdBeginTransformFeedbackEXT] = vkb_sv_vkCmdBeginTransformFeedbackEXT, + [VKB_CMD_vkCmdBindDescriptorSets] = vkb_sv_vkCmdBindDescriptorSets, + [VKB_CMD_vkCmdBindDescriptorSets2] = vkb_sv_vkCmdBindDescriptorSets2, + [VKB_CMD_vkCmdBindIndexBuffer] = vkb_sv_vkCmdBindIndexBuffer, + [VKB_CMD_vkCmdBindIndexBuffer2] = vkb_sv_vkCmdBindIndexBuffer2, + [VKB_CMD_vkCmdBindPipeline] = vkb_sv_vkCmdBindPipeline, + [VKB_CMD_vkCmdBindTransformFeedbackBuffersEXT] = vkb_sv_vkCmdBindTransformFeedbackBuffersEXT, + [VKB_CMD_vkCmdBindVertexBuffers] = vkb_sv_vkCmdBindVertexBuffers, + [VKB_CMD_vkCmdBindVertexBuffers2] = vkb_sv_vkCmdBindVertexBuffers2, + [VKB_CMD_vkCmdBlitImage] = vkb_sv_vkCmdBlitImage, + [VKB_CMD_vkCmdBlitImage2] = vkb_sv_vkCmdBlitImage2, + [VKB_CMD_vkCmdClearAttachments] = vkb_sv_vkCmdClearAttachments, + [VKB_CMD_vkCmdClearColorImage] = vkb_sv_vkCmdClearColorImage, + [VKB_CMD_vkCmdClearDepthStencilImage] = vkb_sv_vkCmdClearDepthStencilImage, + [VKB_CMD_vkCmdCopyBuffer] = vkb_sv_vkCmdCopyBuffer, + [VKB_CMD_vkCmdCopyBuffer2] = vkb_sv_vkCmdCopyBuffer2, + [VKB_CMD_vkCmdCopyBufferToImage] = vkb_sv_vkCmdCopyBufferToImage, + [VKB_CMD_vkCmdCopyBufferToImage2] = vkb_sv_vkCmdCopyBufferToImage2, + [VKB_CMD_vkCmdCopyImage] = vkb_sv_vkCmdCopyImage, + [VKB_CMD_vkCmdCopyImage2] = vkb_sv_vkCmdCopyImage2, + [VKB_CMD_vkCmdCopyImageToBuffer] = vkb_sv_vkCmdCopyImageToBuffer, + [VKB_CMD_vkCmdCopyImageToBuffer2] = vkb_sv_vkCmdCopyImageToBuffer2, + [VKB_CMD_vkCmdCopyQueryPoolResults] = vkb_sv_vkCmdCopyQueryPoolResults, + [VKB_CMD_vkCmdCopyTensorARM] = vkb_sv_vkCmdCopyTensorARM, + [VKB_CMD_vkCmdDispatch] = vkb_sv_vkCmdDispatch, + [VKB_CMD_vkCmdDispatchBase] = vkb_sv_vkCmdDispatchBase, + [VKB_CMD_vkCmdDispatchIndirect] = vkb_sv_vkCmdDispatchIndirect, + [VKB_CMD_vkCmdDraw] = vkb_sv_vkCmdDraw, + [VKB_CMD_vkCmdDrawIndexed] = vkb_sv_vkCmdDrawIndexed, + [VKB_CMD_vkCmdDrawIndexedIndirect] = vkb_sv_vkCmdDrawIndexedIndirect, + [VKB_CMD_vkCmdDrawIndexedIndirectCount] = vkb_sv_vkCmdDrawIndexedIndirectCount, + [VKB_CMD_vkCmdDrawIndirect] = vkb_sv_vkCmdDrawIndirect, + [VKB_CMD_vkCmdDrawIndirectByteCountEXT] = vkb_sv_vkCmdDrawIndirectByteCountEXT, + [VKB_CMD_vkCmdDrawIndirectCount] = vkb_sv_vkCmdDrawIndirectCount, + [VKB_CMD_vkCmdDrawMultiEXT] = vkb_sv_vkCmdDrawMultiEXT, + [VKB_CMD_vkCmdDrawMultiIndexedEXT] = vkb_sv_vkCmdDrawMultiIndexedEXT, + [VKB_CMD_vkCmdEndConditionalRenderingEXT] = vkb_sv_vkCmdEndConditionalRenderingEXT, + [VKB_CMD_vkCmdEndQuery] = vkb_sv_vkCmdEndQuery, + [VKB_CMD_vkCmdEndQueryIndexedEXT] = vkb_sv_vkCmdEndQueryIndexedEXT, + [VKB_CMD_vkCmdEndRenderPass] = vkb_sv_vkCmdEndRenderPass, + [VKB_CMD_vkCmdEndRenderPass2] = vkb_sv_vkCmdEndRenderPass2, + [VKB_CMD_vkCmdEndRendering] = vkb_sv_vkCmdEndRendering, + [VKB_CMD_vkCmdEndRendering2KHR] = vkb_sv_vkCmdEndRendering2KHR, + [VKB_CMD_vkCmdEndTransformFeedbackEXT] = vkb_sv_vkCmdEndTransformFeedbackEXT, + [VKB_CMD_vkCmdExecuteCommands] = vkb_sv_vkCmdExecuteCommands, + [VKB_CMD_vkCmdFillBuffer] = vkb_sv_vkCmdFillBuffer, + [VKB_CMD_vkCmdNextSubpass] = vkb_sv_vkCmdNextSubpass, + [VKB_CMD_vkCmdNextSubpass2] = vkb_sv_vkCmdNextSubpass2, + [VKB_CMD_vkCmdPipelineBarrier] = vkb_sv_vkCmdPipelineBarrier, + [VKB_CMD_vkCmdPipelineBarrier2] = vkb_sv_vkCmdPipelineBarrier2, + [VKB_CMD_vkCmdPushConstants] = vkb_sv_vkCmdPushConstants, + [VKB_CMD_vkCmdPushConstants2] = vkb_sv_vkCmdPushConstants2, + [VKB_CMD_vkCmdPushDescriptorSet] = vkb_sv_vkCmdPushDescriptorSet, + [VKB_CMD_vkCmdPushDescriptorSet2] = vkb_sv_vkCmdPushDescriptorSet2, + [VKB_CMD_vkCmdResetEvent] = vkb_sv_vkCmdResetEvent, + [VKB_CMD_vkCmdResetEvent2] = vkb_sv_vkCmdResetEvent2, + [VKB_CMD_vkCmdResetQueryPool] = vkb_sv_vkCmdResetQueryPool, + [VKB_CMD_vkCmdResolveImage] = vkb_sv_vkCmdResolveImage, + [VKB_CMD_vkCmdResolveImage2] = vkb_sv_vkCmdResolveImage2, + [VKB_CMD_vkCmdSetAlphaToCoverageEnableEXT] = vkb_sv_vkCmdSetAlphaToCoverageEnableEXT, + [VKB_CMD_vkCmdSetAlphaToOneEnableEXT] = vkb_sv_vkCmdSetAlphaToOneEnableEXT, + [VKB_CMD_vkCmdSetAttachmentFeedbackLoopEnableEXT] = vkb_sv_vkCmdSetAttachmentFeedbackLoopEnableEXT, + [VKB_CMD_vkCmdSetBlendConstants] = vkb_sv_vkCmdSetBlendConstants, + [VKB_CMD_vkCmdSetColorBlendAdvancedEXT] = vkb_sv_vkCmdSetColorBlendAdvancedEXT, + [VKB_CMD_vkCmdSetColorBlendEnableEXT] = vkb_sv_vkCmdSetColorBlendEnableEXT, + [VKB_CMD_vkCmdSetColorBlendEquationEXT] = vkb_sv_vkCmdSetColorBlendEquationEXT, + [VKB_CMD_vkCmdSetColorWriteEnableEXT] = vkb_sv_vkCmdSetColorWriteEnableEXT, + [VKB_CMD_vkCmdSetColorWriteMaskEXT] = vkb_sv_vkCmdSetColorWriteMaskEXT, + [VKB_CMD_vkCmdSetConservativeRasterizationModeEXT] = vkb_sv_vkCmdSetConservativeRasterizationModeEXT, + [VKB_CMD_vkCmdSetCullMode] = vkb_sv_vkCmdSetCullMode, + [VKB_CMD_vkCmdSetDepthBias] = vkb_sv_vkCmdSetDepthBias, + [VKB_CMD_vkCmdSetDepthBias2EXT] = vkb_sv_vkCmdSetDepthBias2EXT, + [VKB_CMD_vkCmdSetDepthBiasEnable] = vkb_sv_vkCmdSetDepthBiasEnable, + [VKB_CMD_vkCmdSetDepthBounds] = vkb_sv_vkCmdSetDepthBounds, + [VKB_CMD_vkCmdSetDepthBoundsTestEnable] = vkb_sv_vkCmdSetDepthBoundsTestEnable, + [VKB_CMD_vkCmdSetDepthClampEnableEXT] = vkb_sv_vkCmdSetDepthClampEnableEXT, + [VKB_CMD_vkCmdSetDepthClampRangeEXT] = vkb_sv_vkCmdSetDepthClampRangeEXT, + [VKB_CMD_vkCmdSetDepthClipEnableEXT] = vkb_sv_vkCmdSetDepthClipEnableEXT, + [VKB_CMD_vkCmdSetDepthClipNegativeOneToOneEXT] = vkb_sv_vkCmdSetDepthClipNegativeOneToOneEXT, + [VKB_CMD_vkCmdSetDepthCompareOp] = vkb_sv_vkCmdSetDepthCompareOp, + [VKB_CMD_vkCmdSetDepthTestEnable] = vkb_sv_vkCmdSetDepthTestEnable, + [VKB_CMD_vkCmdSetDepthWriteEnable] = vkb_sv_vkCmdSetDepthWriteEnable, + [VKB_CMD_vkCmdSetDeviceMask] = vkb_sv_vkCmdSetDeviceMask, + [VKB_CMD_vkCmdSetDiscardRectangleEXT] = vkb_sv_vkCmdSetDiscardRectangleEXT, + [VKB_CMD_vkCmdSetDiscardRectangleEnableEXT] = vkb_sv_vkCmdSetDiscardRectangleEnableEXT, + [VKB_CMD_vkCmdSetDiscardRectangleModeEXT] = vkb_sv_vkCmdSetDiscardRectangleModeEXT, + [VKB_CMD_vkCmdSetEvent] = vkb_sv_vkCmdSetEvent, + [VKB_CMD_vkCmdSetEvent2] = vkb_sv_vkCmdSetEvent2, + [VKB_CMD_vkCmdSetExtraPrimitiveOverestimationSizeEXT] = vkb_sv_vkCmdSetExtraPrimitiveOverestimationSizeEXT, + [VKB_CMD_vkCmdSetFragmentShadingRateKHR] = vkb_sv_vkCmdSetFragmentShadingRateKHR, + [VKB_CMD_vkCmdSetFrontFace] = vkb_sv_vkCmdSetFrontFace, + [VKB_CMD_vkCmdSetLineRasterizationModeEXT] = vkb_sv_vkCmdSetLineRasterizationModeEXT, + [VKB_CMD_vkCmdSetLineStipple] = vkb_sv_vkCmdSetLineStipple, + [VKB_CMD_vkCmdSetLineStippleEnableEXT] = vkb_sv_vkCmdSetLineStippleEnableEXT, + [VKB_CMD_vkCmdSetLineWidth] = vkb_sv_vkCmdSetLineWidth, + [VKB_CMD_vkCmdSetLogicOpEXT] = vkb_sv_vkCmdSetLogicOpEXT, + [VKB_CMD_vkCmdSetLogicOpEnableEXT] = vkb_sv_vkCmdSetLogicOpEnableEXT, + [VKB_CMD_vkCmdSetPatchControlPointsEXT] = vkb_sv_vkCmdSetPatchControlPointsEXT, + [VKB_CMD_vkCmdSetPolygonModeEXT] = vkb_sv_vkCmdSetPolygonModeEXT, + [VKB_CMD_vkCmdSetPrimitiveRestartEnable] = vkb_sv_vkCmdSetPrimitiveRestartEnable, + [VKB_CMD_vkCmdSetPrimitiveTopology] = vkb_sv_vkCmdSetPrimitiveTopology, + [VKB_CMD_vkCmdSetProvokingVertexModeEXT] = vkb_sv_vkCmdSetProvokingVertexModeEXT, + [VKB_CMD_vkCmdSetRasterizationSamplesEXT] = vkb_sv_vkCmdSetRasterizationSamplesEXT, + [VKB_CMD_vkCmdSetRasterizationStreamEXT] = vkb_sv_vkCmdSetRasterizationStreamEXT, + [VKB_CMD_vkCmdSetRasterizerDiscardEnable] = vkb_sv_vkCmdSetRasterizerDiscardEnable, + [VKB_CMD_vkCmdSetRenderingAttachmentLocations] = vkb_sv_vkCmdSetRenderingAttachmentLocations, + [VKB_CMD_vkCmdSetRenderingInputAttachmentIndices] = vkb_sv_vkCmdSetRenderingInputAttachmentIndices, + [VKB_CMD_vkCmdSetSampleLocationsEXT] = vkb_sv_vkCmdSetSampleLocationsEXT, + [VKB_CMD_vkCmdSetSampleLocationsEnableEXT] = vkb_sv_vkCmdSetSampleLocationsEnableEXT, + [VKB_CMD_vkCmdSetSampleMaskEXT] = vkb_sv_vkCmdSetSampleMaskEXT, + [VKB_CMD_vkCmdSetScissor] = vkb_sv_vkCmdSetScissor, + [VKB_CMD_vkCmdSetScissorWithCount] = vkb_sv_vkCmdSetScissorWithCount, + [VKB_CMD_vkCmdSetStencilCompareMask] = vkb_sv_vkCmdSetStencilCompareMask, + [VKB_CMD_vkCmdSetStencilOp] = vkb_sv_vkCmdSetStencilOp, + [VKB_CMD_vkCmdSetStencilReference] = vkb_sv_vkCmdSetStencilReference, + [VKB_CMD_vkCmdSetStencilTestEnable] = vkb_sv_vkCmdSetStencilTestEnable, + [VKB_CMD_vkCmdSetStencilWriteMask] = vkb_sv_vkCmdSetStencilWriteMask, + [VKB_CMD_vkCmdSetTessellationDomainOriginEXT] = vkb_sv_vkCmdSetTessellationDomainOriginEXT, + [VKB_CMD_vkCmdSetVertexInputEXT] = vkb_sv_vkCmdSetVertexInputEXT, + [VKB_CMD_vkCmdSetViewport] = vkb_sv_vkCmdSetViewport, + [VKB_CMD_vkCmdSetViewportWithCount] = vkb_sv_vkCmdSetViewportWithCount, + [VKB_CMD_vkCmdUpdateBuffer] = vkb_sv_vkCmdUpdateBuffer, + [VKB_CMD_vkCmdWaitEvents] = vkb_sv_vkCmdWaitEvents, + [VKB_CMD_vkCmdWaitEvents2] = vkb_sv_vkCmdWaitEvents2, + [VKB_CMD_vkCmdWriteTimestamp] = vkb_sv_vkCmdWriteTimestamp, + [VKB_CMD_vkCmdWriteTimestamp2] = vkb_sv_vkCmdWriteTimestamp2, + [VKB_CMD_vkCreateBuffer] = vkb_sv_vkCreateBuffer, + [VKB_CMD_vkCreateBufferView] = vkb_sv_vkCreateBufferView, + [VKB_CMD_vkCreateCommandPool] = vkb_sv_vkCreateCommandPool, + [VKB_CMD_vkCreateComputePipelines] = vkb_sv_vkCreateComputePipelines, + [VKB_CMD_vkCreateDescriptorPool] = vkb_sv_vkCreateDescriptorPool, + [VKB_CMD_vkCreateDescriptorSetLayout] = vkb_sv_vkCreateDescriptorSetLayout, + [VKB_CMD_vkCreateDescriptorUpdateTemplate] = vkb_sv_vkCreateDescriptorUpdateTemplate, + [VKB_CMD_vkCreateDevice] = vkb_sv_vkCreateDevice, + [VKB_CMD_vkCreateEvent] = vkb_sv_vkCreateEvent, + [VKB_CMD_vkCreateFence] = vkb_sv_vkCreateFence, + [VKB_CMD_vkCreateFramebuffer] = vkb_sv_vkCreateFramebuffer, + [VKB_CMD_vkCreateGraphicsPipelines] = vkb_sv_vkCreateGraphicsPipelines, + [VKB_CMD_vkCreateImage] = vkb_sv_vkCreateImage, + [VKB_CMD_vkCreateImageView] = vkb_sv_vkCreateImageView, + [VKB_CMD_vkCreateInstance] = vkb_sv_vkCreateInstance, + [VKB_CMD_vkCreatePipelineCache] = vkb_sv_vkCreatePipelineCache, + [VKB_CMD_vkCreatePipelineLayout] = vkb_sv_vkCreatePipelineLayout, + [VKB_CMD_vkCreateQueryPool] = vkb_sv_vkCreateQueryPool, + [VKB_CMD_vkCreateRenderPass] = vkb_sv_vkCreateRenderPass, + [VKB_CMD_vkCreateRenderPass2] = vkb_sv_vkCreateRenderPass2, + [VKB_CMD_vkCreateSampler] = vkb_sv_vkCreateSampler, + [VKB_CMD_vkCreateSamplerYcbcrConversion] = vkb_sv_vkCreateSamplerYcbcrConversion, + [VKB_CMD_vkCreateSemaphore] = vkb_sv_vkCreateSemaphore, + [VKB_CMD_vkCreateShaderModule] = vkb_sv_vkCreateShaderModule, + [VKB_CMD_vkCreateTensorARM] = vkb_sv_vkCreateTensorARM, + [VKB_CMD_vkCreateTensorViewARM] = vkb_sv_vkCreateTensorViewARM, + [VKB_CMD_vkDestroyBuffer] = vkb_sv_vkDestroyBuffer, + [VKB_CMD_vkDestroyBufferView] = vkb_sv_vkDestroyBufferView, + [VKB_CMD_vkDestroyCommandPool] = vkb_sv_vkDestroyCommandPool, + [VKB_CMD_vkDestroyDescriptorPool] = vkb_sv_vkDestroyDescriptorPool, + [VKB_CMD_vkDestroyDescriptorSetLayout] = vkb_sv_vkDestroyDescriptorSetLayout, + [VKB_CMD_vkDestroyDescriptorUpdateTemplate] = vkb_sv_vkDestroyDescriptorUpdateTemplate, + [VKB_CMD_vkDestroyDevice] = vkb_sv_vkDestroyDevice, + [VKB_CMD_vkDestroyEvent] = vkb_sv_vkDestroyEvent, + [VKB_CMD_vkDestroyFence] = vkb_sv_vkDestroyFence, + [VKB_CMD_vkDestroyFramebuffer] = vkb_sv_vkDestroyFramebuffer, + [VKB_CMD_vkDestroyImage] = vkb_sv_vkDestroyImage, + [VKB_CMD_vkDestroyImageView] = vkb_sv_vkDestroyImageView, + [VKB_CMD_vkDestroyInstance] = vkb_sv_vkDestroyInstance, + [VKB_CMD_vkDestroyPipeline] = vkb_sv_vkDestroyPipeline, + [VKB_CMD_vkDestroyPipelineCache] = vkb_sv_vkDestroyPipelineCache, + [VKB_CMD_vkDestroyPipelineLayout] = vkb_sv_vkDestroyPipelineLayout, + [VKB_CMD_vkDestroyQueryPool] = vkb_sv_vkDestroyQueryPool, + [VKB_CMD_vkDestroyRenderPass] = vkb_sv_vkDestroyRenderPass, + [VKB_CMD_vkDestroySampler] = vkb_sv_vkDestroySampler, + [VKB_CMD_vkDestroySamplerYcbcrConversion] = vkb_sv_vkDestroySamplerYcbcrConversion, + [VKB_CMD_vkDestroySemaphore] = vkb_sv_vkDestroySemaphore, + [VKB_CMD_vkDestroyShaderModule] = vkb_sv_vkDestroyShaderModule, + [VKB_CMD_vkDestroyTensorARM] = vkb_sv_vkDestroyTensorARM, + [VKB_CMD_vkDestroyTensorViewARM] = vkb_sv_vkDestroyTensorViewARM, + [VKB_CMD_vkDeviceWaitIdle] = vkb_sv_vkDeviceWaitIdle, + [VKB_CMD_vkEndCommandBuffer] = vkb_sv_vkEndCommandBuffer, + [VKB_CMD_vkEnumerateDeviceExtensionProperties] = vkb_sv_vkEnumerateDeviceExtensionProperties, + [VKB_CMD_vkEnumerateInstanceExtensionProperties] = vkb_sv_vkEnumerateInstanceExtensionProperties, + [VKB_CMD_vkEnumerateInstanceLayerProperties] = vkb_sv_vkEnumerateInstanceLayerProperties, + [VKB_CMD_vkEnumerateInstanceVersion] = vkb_sv_vkEnumerateInstanceVersion, + [VKB_CMD_vkEnumeratePhysicalDeviceGroups] = vkb_sv_vkEnumeratePhysicalDeviceGroups, + [VKB_CMD_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM] = vkb_sv_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, + [VKB_CMD_vkEnumeratePhysicalDevices] = vkb_sv_vkEnumeratePhysicalDevices, + [VKB_CMD_vkFlushMappedMemoryRanges] = vkb_sv_vkFlushMappedMemoryRanges, + [VKB_CMD_vkFreeCommandBuffers] = vkb_sv_vkFreeCommandBuffers, + [VKB_CMD_vkFreeDescriptorSets] = vkb_sv_vkFreeDescriptorSets, + [VKB_CMD_vkFreeMemory] = vkb_sv_vkFreeMemory, + [VKB_CMD_vkGetBufferDeviceAddress] = vkb_sv_vkGetBufferDeviceAddress, + [VKB_CMD_vkGetBufferMemoryRequirements] = vkb_sv_vkGetBufferMemoryRequirements, + [VKB_CMD_vkGetBufferMemoryRequirements2] = vkb_sv_vkGetBufferMemoryRequirements2, + [VKB_CMD_vkGetBufferOpaqueCaptureAddress] = vkb_sv_vkGetBufferOpaqueCaptureAddress, + [VKB_CMD_vkGetCalibratedTimestampsKHR] = vkb_sv_vkGetCalibratedTimestampsKHR, + [VKB_CMD_vkGetDescriptorSetLayoutSupport] = vkb_sv_vkGetDescriptorSetLayoutSupport, + [VKB_CMD_vkGetDeviceBufferMemoryRequirements] = vkb_sv_vkGetDeviceBufferMemoryRequirements, + [VKB_CMD_vkGetDeviceGroupPeerMemoryFeatures] = vkb_sv_vkGetDeviceGroupPeerMemoryFeatures, + [VKB_CMD_vkGetDeviceImageMemoryRequirements] = vkb_sv_vkGetDeviceImageMemoryRequirements, + [VKB_CMD_vkGetDeviceImageSparseMemoryRequirements] = vkb_sv_vkGetDeviceImageSparseMemoryRequirements, + [VKB_CMD_vkGetDeviceImageSubresourceLayout] = vkb_sv_vkGetDeviceImageSubresourceLayout, + [VKB_CMD_vkGetDeviceMemoryCommitment] = vkb_sv_vkGetDeviceMemoryCommitment, + [VKB_CMD_vkGetDeviceMemoryOpaqueCaptureAddress] = vkb_sv_vkGetDeviceMemoryOpaqueCaptureAddress, + [VKB_CMD_vkGetDeviceQueue] = vkb_sv_vkGetDeviceQueue, + [VKB_CMD_vkGetDeviceQueue2] = vkb_sv_vkGetDeviceQueue2, + [VKB_CMD_vkGetDeviceTensorMemoryRequirementsARM] = vkb_sv_vkGetDeviceTensorMemoryRequirementsARM, + [VKB_CMD_vkGetEventStatus] = vkb_sv_vkGetEventStatus, + [VKB_CMD_vkGetFenceFdKHR] = vkb_sv_vkGetFenceFdKHR, + [VKB_CMD_vkGetFenceStatus] = vkb_sv_vkGetFenceStatus, + [VKB_CMD_vkGetImageDrmFormatModifierPropertiesEXT] = vkb_sv_vkGetImageDrmFormatModifierPropertiesEXT, + [VKB_CMD_vkGetImageMemoryRequirements] = vkb_sv_vkGetImageMemoryRequirements, + [VKB_CMD_vkGetImageMemoryRequirements2] = vkb_sv_vkGetImageMemoryRequirements2, + [VKB_CMD_vkGetImageSparseMemoryRequirements] = vkb_sv_vkGetImageSparseMemoryRequirements, + [VKB_CMD_vkGetImageSparseMemoryRequirements2] = vkb_sv_vkGetImageSparseMemoryRequirements2, + [VKB_CMD_vkGetImageSubresourceLayout] = vkb_sv_vkGetImageSubresourceLayout, + [VKB_CMD_vkGetImageSubresourceLayout2] = vkb_sv_vkGetImageSubresourceLayout2, + [VKB_CMD_vkGetMemoryFdKHR] = vkb_sv_vkGetMemoryFdKHR, + [VKB_CMD_vkGetMemoryFdPropertiesKHR] = vkb_sv_vkGetMemoryFdPropertiesKHR, + [VKB_CMD_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR] = vkb_sv_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, + [VKB_CMD_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR] = vkb_sv_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, + [VKB_CMD_vkGetPhysicalDeviceExternalBufferProperties] = vkb_sv_vkGetPhysicalDeviceExternalBufferProperties, + [VKB_CMD_vkGetPhysicalDeviceExternalFenceProperties] = vkb_sv_vkGetPhysicalDeviceExternalFenceProperties, + [VKB_CMD_vkGetPhysicalDeviceExternalSemaphoreProperties] = vkb_sv_vkGetPhysicalDeviceExternalSemaphoreProperties, + [VKB_CMD_vkGetPhysicalDeviceExternalTensorPropertiesARM] = vkb_sv_vkGetPhysicalDeviceExternalTensorPropertiesARM, + [VKB_CMD_vkGetPhysicalDeviceFeatures] = vkb_sv_vkGetPhysicalDeviceFeatures, + [VKB_CMD_vkGetPhysicalDeviceFeatures2] = vkb_sv_vkGetPhysicalDeviceFeatures2, + [VKB_CMD_vkGetPhysicalDeviceFormatProperties] = vkb_sv_vkGetPhysicalDeviceFormatProperties, + [VKB_CMD_vkGetPhysicalDeviceFormatProperties2] = vkb_sv_vkGetPhysicalDeviceFormatProperties2, + [VKB_CMD_vkGetPhysicalDeviceFragmentShadingRatesKHR] = vkb_sv_vkGetPhysicalDeviceFragmentShadingRatesKHR, + [VKB_CMD_vkGetPhysicalDeviceImageFormatProperties] = vkb_sv_vkGetPhysicalDeviceImageFormatProperties, + [VKB_CMD_vkGetPhysicalDeviceImageFormatProperties2] = vkb_sv_vkGetPhysicalDeviceImageFormatProperties2, + [VKB_CMD_vkGetPhysicalDeviceMemoryProperties] = vkb_sv_vkGetPhysicalDeviceMemoryProperties, + [VKB_CMD_vkGetPhysicalDeviceMemoryProperties2] = vkb_sv_vkGetPhysicalDeviceMemoryProperties2, + [VKB_CMD_vkGetPhysicalDeviceMultisamplePropertiesEXT] = vkb_sv_vkGetPhysicalDeviceMultisamplePropertiesEXT, + [VKB_CMD_vkGetPhysicalDeviceProperties] = vkb_sv_vkGetPhysicalDeviceProperties, + [VKB_CMD_vkGetPhysicalDeviceProperties2] = vkb_sv_vkGetPhysicalDeviceProperties2, + [VKB_CMD_vkGetPhysicalDeviceQueueFamilyProperties] = vkb_sv_vkGetPhysicalDeviceQueueFamilyProperties, + [VKB_CMD_vkGetPhysicalDeviceQueueFamilyProperties2] = vkb_sv_vkGetPhysicalDeviceQueueFamilyProperties2, + [VKB_CMD_vkGetPhysicalDeviceSparseImageFormatProperties] = vkb_sv_vkGetPhysicalDeviceSparseImageFormatProperties, + [VKB_CMD_vkGetPhysicalDeviceSparseImageFormatProperties2] = vkb_sv_vkGetPhysicalDeviceSparseImageFormatProperties2, + [VKB_CMD_vkGetPhysicalDeviceToolProperties] = vkb_sv_vkGetPhysicalDeviceToolProperties, + [VKB_CMD_vkGetPipelineCacheData] = vkb_sv_vkGetPipelineCacheData, + [VKB_CMD_vkGetQueryPoolResults] = vkb_sv_vkGetQueryPoolResults, + [VKB_CMD_vkGetRenderAreaGranularity] = vkb_sv_vkGetRenderAreaGranularity, + [VKB_CMD_vkGetRenderingAreaGranularity] = vkb_sv_vkGetRenderingAreaGranularity, + [VKB_CMD_vkGetSemaphoreCounterValue] = vkb_sv_vkGetSemaphoreCounterValue, + [VKB_CMD_vkGetSemaphoreFdKHR] = vkb_sv_vkGetSemaphoreFdKHR, + [VKB_CMD_vkGetShaderModuleCreateInfoIdentifierEXT] = vkb_sv_vkGetShaderModuleCreateInfoIdentifierEXT, + [VKB_CMD_vkGetShaderModuleIdentifierEXT] = vkb_sv_vkGetShaderModuleIdentifierEXT, + [VKB_CMD_vkGetTensorMemoryRequirementsARM] = vkb_sv_vkGetTensorMemoryRequirementsARM, + [VKB_CMD_vkImportFenceFdKHR] = vkb_sv_vkImportFenceFdKHR, + [VKB_CMD_vkImportSemaphoreFdKHR] = vkb_sv_vkImportSemaphoreFdKHR, + [VKB_CMD_vkInvalidateMappedMemoryRanges] = vkb_sv_vkInvalidateMappedMemoryRanges, + [VKB_CMD_vkMergePipelineCaches] = vkb_sv_vkMergePipelineCaches, + [VKB_CMD_vkQueueBindSparse] = vkb_sv_vkQueueBindSparse, + [VKB_CMD_vkQueueSubmit] = vkb_sv_vkQueueSubmit, + [VKB_CMD_vkQueueSubmit2] = vkb_sv_vkQueueSubmit2, + [VKB_CMD_vkQueueWaitIdle] = vkb_sv_vkQueueWaitIdle, + [VKB_CMD_vkResetCommandBuffer] = vkb_sv_vkResetCommandBuffer, + [VKB_CMD_vkResetCommandPool] = vkb_sv_vkResetCommandPool, + [VKB_CMD_vkResetDescriptorPool] = vkb_sv_vkResetDescriptorPool, + [VKB_CMD_vkResetEvent] = vkb_sv_vkResetEvent, + [VKB_CMD_vkResetFences] = vkb_sv_vkResetFences, + [VKB_CMD_vkResetQueryPool] = vkb_sv_vkResetQueryPool, + [VKB_CMD_vkSetDeviceMemoryPriorityEXT] = vkb_sv_vkSetDeviceMemoryPriorityEXT, + [VKB_CMD_vkSetEvent] = vkb_sv_vkSetEvent, + [VKB_CMD_vkSignalSemaphore] = vkb_sv_vkSignalSemaphore, + [VKB_CMD_vkTrimCommandPool] = vkb_sv_vkTrimCommandPool, + [VKB_CMD_vkUpdateDescriptorSets] = vkb_sv_vkUpdateDescriptorSets, + [VKB_CMD_vkWaitForFences] = vkb_sv_vkWaitForFences, + [VKB_CMD_vkWaitSemaphores] = vkb_sv_vkWaitSemaphores, +}; diff --git a/tools/vkbridge/common/gen/vkb_gen_structs.c b/tools/vkbridge/common/gen/vkb_gen_structs.c new file mode 100644 index 000000000..bede111a4 --- /dev/null +++ b/tools/vkbridge/common/gen/vkb_gen_structs.c @@ -0,0 +1,16460 @@ +/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */ + +#include "vkb_gen.h" +#include "../vkb_wire.h" +#include + +void vkb_encfix_VkApplicationInfo(vkb_enc *e, const VkApplicationInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_str(e, s->pApplicationName ? s->pApplicationName : NULL); + vkb_enc_str(e, s->pEngineName ? s->pEngineName : NULL); +} + +void vkb_enc_VkApplicationInfo(vkb_enc *e, const VkApplicationInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkApplicationInfo(e, s, raw); +} + +void vkb_decfix_VkApplicationInfo(vkb_dec *d, VkApplicationInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pApplicationName = vkb_dec_str(d); + s->pEngineName = vkb_dec_str(d); +} + +void vkb_dec_VkApplicationInfo(vkb_dec *d, VkApplicationInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkApplicationInfo(d, s); +} + +void vkb_encfix_VkAttachmentDescription2(vkb_enc *e, const VkAttachmentDescription2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkAttachmentDescription2(vkb_enc *e, const VkAttachmentDescription2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkAttachmentDescription2(e, s, raw); +} + +void vkb_decfix_VkAttachmentDescription2(vkb_dec *d, VkAttachmentDescription2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkAttachmentDescription2(vkb_dec *d, VkAttachmentDescription2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkAttachmentDescription2(d, s); +} + +void vkb_encfix_VkAttachmentDescriptionStencilLayout(vkb_enc *e, const VkAttachmentDescriptionStencilLayout *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkAttachmentDescriptionStencilLayout(vkb_enc *e, const VkAttachmentDescriptionStencilLayout *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkAttachmentDescriptionStencilLayout(e, s, raw); +} + +void vkb_decfix_VkAttachmentDescriptionStencilLayout(vkb_dec *d, VkAttachmentDescriptionStencilLayout *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkAttachmentDescriptionStencilLayout(vkb_dec *d, VkAttachmentDescriptionStencilLayout *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkAttachmentDescriptionStencilLayout(d, s); +} + +void vkb_encfix_VkAttachmentFeedbackLoopInfoEXT(vkb_enc *e, const VkAttachmentFeedbackLoopInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkAttachmentFeedbackLoopInfoEXT(vkb_enc *e, const VkAttachmentFeedbackLoopInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkAttachmentFeedbackLoopInfoEXT(e, s, raw); +} + +void vkb_decfix_VkAttachmentFeedbackLoopInfoEXT(vkb_dec *d, VkAttachmentFeedbackLoopInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkAttachmentFeedbackLoopInfoEXT(vkb_dec *d, VkAttachmentFeedbackLoopInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkAttachmentFeedbackLoopInfoEXT(d, s); +} + +void vkb_encfix_VkAttachmentReference2(vkb_enc *e, const VkAttachmentReference2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkAttachmentReference2(vkb_enc *e, const VkAttachmentReference2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkAttachmentReference2(e, s, raw); +} + +void vkb_decfix_VkAttachmentReference2(vkb_dec *d, VkAttachmentReference2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkAttachmentReference2(vkb_dec *d, VkAttachmentReference2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkAttachmentReference2(d, s); +} + +void vkb_encfix_VkAttachmentReferenceStencilLayout(vkb_enc *e, const VkAttachmentReferenceStencilLayout *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkAttachmentReferenceStencilLayout(vkb_enc *e, const VkAttachmentReferenceStencilLayout *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkAttachmentReferenceStencilLayout(e, s, raw); +} + +void vkb_decfix_VkAttachmentReferenceStencilLayout(vkb_dec *d, VkAttachmentReferenceStencilLayout *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkAttachmentReferenceStencilLayout(vkb_dec *d, VkAttachmentReferenceStencilLayout *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkAttachmentReferenceStencilLayout(d, s); +} + +void vkb_encfix_VkAttachmentSampleLocationsEXT(vkb_enc *e, const VkAttachmentSampleLocationsEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_encfix_VkSampleLocationsInfoEXT(e, &s->sampleLocationsInfo, raw + offsetof(VkAttachmentSampleLocationsEXT, sampleLocationsInfo)); +} + +void vkb_enc_VkAttachmentSampleLocationsEXT(vkb_enc *e, const VkAttachmentSampleLocationsEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkAttachmentSampleLocationsEXT(e, s, raw); +} + +void vkb_decfix_VkAttachmentSampleLocationsEXT(vkb_dec *d, VkAttachmentSampleLocationsEXT *s) +{ + (void)d; (void)s; + vkb_decfix_VkSampleLocationsInfoEXT(d, &s->sampleLocationsInfo); +} + +void vkb_dec_VkAttachmentSampleLocationsEXT(vkb_dec *d, VkAttachmentSampleLocationsEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkAttachmentSampleLocationsEXT(d, s); +} + +void vkb_encfix_VkBeginCustomResolveInfoEXT(vkb_enc *e, const VkBeginCustomResolveInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBeginCustomResolveInfoEXT(vkb_enc *e, const VkBeginCustomResolveInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBeginCustomResolveInfoEXT(e, s, raw); +} + +void vkb_decfix_VkBeginCustomResolveInfoEXT(vkb_dec *d, VkBeginCustomResolveInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBeginCustomResolveInfoEXT(vkb_dec *d, VkBeginCustomResolveInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBeginCustomResolveInfoEXT(d, s); +} + +void vkb_encfix_VkBindBufferMemoryDeviceGroupInfo(vkb_enc *e, const VkBindBufferMemoryDeviceGroupInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDeviceIndices) { + uint32_t n_ = (uint32_t)(s->deviceIndexCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDeviceIndices, (size_t)n_ * sizeof(*s->pDeviceIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBindBufferMemoryDeviceGroupInfo(vkb_enc *e, const VkBindBufferMemoryDeviceGroupInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindBufferMemoryDeviceGroupInfo(e, s, raw); +} + +void vkb_decfix_VkBindBufferMemoryDeviceGroupInfo(vkb_dec *d, VkBindBufferMemoryDeviceGroupInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDeviceIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pDeviceIndices = NULL; + } +} + +void vkb_dec_VkBindBufferMemoryDeviceGroupInfo(vkb_dec *d, VkBindBufferMemoryDeviceGroupInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindBufferMemoryDeviceGroupInfo(d, s); +} + +void vkb_encfix_VkBindBufferMemoryInfo(vkb_enc *e, const VkBindBufferMemoryInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBindBufferMemoryInfo(vkb_enc *e, const VkBindBufferMemoryInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindBufferMemoryInfo(e, s, raw); +} + +void vkb_decfix_VkBindBufferMemoryInfo(vkb_dec *d, VkBindBufferMemoryInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBindBufferMemoryInfo(vkb_dec *d, VkBindBufferMemoryInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindBufferMemoryInfo(d, s); +} + +void vkb_encfix_VkBindDescriptorSetsInfo(vkb_enc *e, const VkBindDescriptorSetsInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDescriptorSets) { + uint32_t n_ = (uint32_t)(s->descriptorSetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDescriptorSets, (size_t)n_ * sizeof(*s->pDescriptorSets)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDynamicOffsets) { + uint32_t n_ = (uint32_t)(s->dynamicOffsetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDynamicOffsets, (size_t)n_ * sizeof(*s->pDynamicOffsets)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBindDescriptorSetsInfo(vkb_enc *e, const VkBindDescriptorSetsInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindDescriptorSetsInfo(e, s, raw); +} + +void vkb_decfix_VkBindDescriptorSetsInfo(vkb_dec *d, VkBindDescriptorSetsInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDescriptorSets = (const VkDescriptorSet *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorSet)); + } else { + s->pDescriptorSets = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDynamicOffsets = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pDynamicOffsets = NULL; + } +} + +void vkb_dec_VkBindDescriptorSetsInfo(vkb_dec *d, VkBindDescriptorSetsInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindDescriptorSetsInfo(d, s); +} + +void vkb_encfix_VkBindImageMemoryDeviceGroupInfo(vkb_enc *e, const VkBindImageMemoryDeviceGroupInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDeviceIndices) { + uint32_t n_ = (uint32_t)(s->deviceIndexCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDeviceIndices, (size_t)n_ * sizeof(*s->pDeviceIndices)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSplitInstanceBindRegions) { + uint32_t n_ = (uint32_t)(s->splitInstanceBindRegionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSplitInstanceBindRegions, (size_t)n_ * sizeof(*s->pSplitInstanceBindRegions)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBindImageMemoryDeviceGroupInfo(vkb_enc *e, const VkBindImageMemoryDeviceGroupInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindImageMemoryDeviceGroupInfo(e, s, raw); +} + +void vkb_decfix_VkBindImageMemoryDeviceGroupInfo(vkb_dec *d, VkBindImageMemoryDeviceGroupInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDeviceIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pDeviceIndices = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSplitInstanceBindRegions = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + s->pSplitInstanceBindRegions = NULL; + } +} + +void vkb_dec_VkBindImageMemoryDeviceGroupInfo(vkb_dec *d, VkBindImageMemoryDeviceGroupInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindImageMemoryDeviceGroupInfo(d, s); +} + +void vkb_encfix_VkBindImageMemoryInfo(vkb_enc *e, const VkBindImageMemoryInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBindImageMemoryInfo(vkb_enc *e, const VkBindImageMemoryInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindImageMemoryInfo(e, s, raw); +} + +void vkb_decfix_VkBindImageMemoryInfo(vkb_dec *d, VkBindImageMemoryInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBindImageMemoryInfo(vkb_dec *d, VkBindImageMemoryInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindImageMemoryInfo(d, s); +} + +void vkb_encfix_VkBindImageMemorySwapchainInfoKHR(vkb_enc *e, const VkBindImageMemorySwapchainInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBindImageMemorySwapchainInfoKHR(vkb_enc *e, const VkBindImageMemorySwapchainInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindImageMemorySwapchainInfoKHR(e, s, raw); +} + +void vkb_decfix_VkBindImageMemorySwapchainInfoKHR(vkb_dec *d, VkBindImageMemorySwapchainInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBindImageMemorySwapchainInfoKHR(vkb_dec *d, VkBindImageMemorySwapchainInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindImageMemorySwapchainInfoKHR(d, s); +} + +void vkb_encfix_VkBindImagePlaneMemoryInfo(vkb_enc *e, const VkBindImagePlaneMemoryInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBindImagePlaneMemoryInfo(vkb_enc *e, const VkBindImagePlaneMemoryInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindImagePlaneMemoryInfo(e, s, raw); +} + +void vkb_decfix_VkBindImagePlaneMemoryInfo(vkb_dec *d, VkBindImagePlaneMemoryInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBindImagePlaneMemoryInfo(vkb_dec *d, VkBindImagePlaneMemoryInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindImagePlaneMemoryInfo(d, s); +} + +void vkb_encfix_VkBindMemoryStatus(vkb_enc *e, const VkBindMemoryStatus *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pResult) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pResult, (size_t)n_ * sizeof(*s->pResult)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBindMemoryStatus(vkb_enc *e, const VkBindMemoryStatus *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindMemoryStatus(e, s, raw); +} + +void vkb_decfix_VkBindMemoryStatus(vkb_dec *d, VkBindMemoryStatus *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pResult = (VkResult *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkResult)); + } else { + s->pResult = NULL; + } +} + +void vkb_dec_VkBindMemoryStatus(vkb_dec *d, VkBindMemoryStatus *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindMemoryStatus(d, s); +} + +void vkb_encfix_VkBindSparseInfo(vkb_enc *e, const VkBindSparseInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pWaitSemaphores) { + uint32_t n_ = (uint32_t)(s->waitSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pWaitSemaphores, (size_t)n_ * sizeof(*s->pWaitSemaphores)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pBufferBinds) { + uint32_t n_ = (uint32_t)(s->bufferBindCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSparseBufferMemoryBindInfo(e, &s->pBufferBinds[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pImageOpaqueBinds) { + uint32_t n_ = (uint32_t)(s->imageOpaqueBindCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSparseImageOpaqueMemoryBindInfo(e, &s->pImageOpaqueBinds[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pImageBinds) { + uint32_t n_ = (uint32_t)(s->imageBindCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSparseImageMemoryBindInfo(e, &s->pImageBinds[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSignalSemaphores) { + uint32_t n_ = (uint32_t)(s->signalSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSignalSemaphores, (size_t)n_ * sizeof(*s->pSignalSemaphores)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBindSparseInfo(vkb_enc *e, const VkBindSparseInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindSparseInfo(e, s, raw); +} + +void vkb_decfix_VkBindSparseInfo(vkb_dec *d, VkBindSparseInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pWaitSemaphores = (const VkSemaphore *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSemaphore)); + } else { + s->pWaitSemaphores = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSparseBufferMemoryBindInfo *a_ = (VkSparseBufferMemoryBindInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSparseBufferMemoryBindInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSparseBufferMemoryBindInfo(d, &a_[i_]); + s->pBufferBinds = a_; + } else { + s->pBufferBinds = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSparseImageOpaqueMemoryBindInfo *a_ = (VkSparseImageOpaqueMemoryBindInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSparseImageOpaqueMemoryBindInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSparseImageOpaqueMemoryBindInfo(d, &a_[i_]); + s->pImageOpaqueBinds = a_; + } else { + s->pImageOpaqueBinds = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSparseImageMemoryBindInfo *a_ = (VkSparseImageMemoryBindInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSparseImageMemoryBindInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSparseImageMemoryBindInfo(d, &a_[i_]); + s->pImageBinds = a_; + } else { + s->pImageBinds = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSignalSemaphores = (const VkSemaphore *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSemaphore)); + } else { + s->pSignalSemaphores = NULL; + } +} + +void vkb_dec_VkBindSparseInfo(vkb_dec *d, VkBindSparseInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindSparseInfo(d, s); +} + +void vkb_encfix_VkBindTensorMemoryInfoARM(vkb_enc *e, const VkBindTensorMemoryInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBindTensorMemoryInfoARM(vkb_enc *e, const VkBindTensorMemoryInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBindTensorMemoryInfoARM(e, s, raw); +} + +void vkb_decfix_VkBindTensorMemoryInfoARM(vkb_dec *d, VkBindTensorMemoryInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBindTensorMemoryInfoARM(vkb_dec *d, VkBindTensorMemoryInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBindTensorMemoryInfoARM(d, s); +} + +void vkb_encfix_VkBlitImageInfo2(vkb_enc *e, const VkBlitImageInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageBlit2(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBlitImageInfo2(vkb_enc *e, const VkBlitImageInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBlitImageInfo2(e, s, raw); +} + +void vkb_decfix_VkBlitImageInfo2(vkb_dec *d, VkBlitImageInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageBlit2 *a_ = (VkImageBlit2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageBlit2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageBlit2(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkBlitImageInfo2(vkb_dec *d, VkBlitImageInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBlitImageInfo2(d, s); +} + +void vkb_encfix_VkBufferCopy2(vkb_enc *e, const VkBufferCopy2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferCopy2(vkb_enc *e, const VkBufferCopy2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferCopy2(e, s, raw); +} + +void vkb_decfix_VkBufferCopy2(vkb_dec *d, VkBufferCopy2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferCopy2(vkb_dec *d, VkBufferCopy2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferCopy2(d, s); +} + +void vkb_encfix_VkBufferCreateInfo(vkb_enc *e, const VkBufferCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pQueueFamilyIndices && (s->sharingMode == VK_SHARING_MODE_CONCURRENT)) { + uint32_t n_ = (uint32_t)(s->queueFamilyIndexCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pQueueFamilyIndices, (size_t)n_ * sizeof(*s->pQueueFamilyIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkBufferCreateInfo(vkb_enc *e, const VkBufferCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferCreateInfo(e, s, raw); +} + +void vkb_decfix_VkBufferCreateInfo(vkb_dec *d, VkBufferCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pQueueFamilyIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pQueueFamilyIndices = NULL; + } +} + +void vkb_dec_VkBufferCreateInfo(vkb_dec *d, VkBufferCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferCreateInfo(d, s); +} + +void vkb_encfix_VkBufferDeviceAddressCreateInfoEXT(vkb_enc *e, const VkBufferDeviceAddressCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferDeviceAddressCreateInfoEXT(vkb_enc *e, const VkBufferDeviceAddressCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferDeviceAddressCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkBufferDeviceAddressCreateInfoEXT(vkb_dec *d, VkBufferDeviceAddressCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferDeviceAddressCreateInfoEXT(vkb_dec *d, VkBufferDeviceAddressCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferDeviceAddressCreateInfoEXT(d, s); +} + +void vkb_encfix_VkBufferDeviceAddressInfo(vkb_enc *e, const VkBufferDeviceAddressInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferDeviceAddressInfo(vkb_enc *e, const VkBufferDeviceAddressInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferDeviceAddressInfo(e, s, raw); +} + +void vkb_decfix_VkBufferDeviceAddressInfo(vkb_dec *d, VkBufferDeviceAddressInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferDeviceAddressInfo(vkb_dec *d, VkBufferDeviceAddressInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferDeviceAddressInfo(d, s); +} + +void vkb_encfix_VkBufferImageCopy2(vkb_enc *e, const VkBufferImageCopy2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferImageCopy2(vkb_enc *e, const VkBufferImageCopy2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferImageCopy2(e, s, raw); +} + +void vkb_decfix_VkBufferImageCopy2(vkb_dec *d, VkBufferImageCopy2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferImageCopy2(vkb_dec *d, VkBufferImageCopy2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferImageCopy2(d, s); +} + +void vkb_encfix_VkBufferMemoryBarrier(vkb_enc *e, const VkBufferMemoryBarrier *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferMemoryBarrier(vkb_enc *e, const VkBufferMemoryBarrier *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferMemoryBarrier(e, s, raw); +} + +void vkb_decfix_VkBufferMemoryBarrier(vkb_dec *d, VkBufferMemoryBarrier *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferMemoryBarrier(vkb_dec *d, VkBufferMemoryBarrier *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferMemoryBarrier(d, s); +} + +void vkb_encfix_VkBufferMemoryBarrier2(vkb_enc *e, const VkBufferMemoryBarrier2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferMemoryBarrier2(vkb_enc *e, const VkBufferMemoryBarrier2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferMemoryBarrier2(e, s, raw); +} + +void vkb_decfix_VkBufferMemoryBarrier2(vkb_dec *d, VkBufferMemoryBarrier2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferMemoryBarrier2(vkb_dec *d, VkBufferMemoryBarrier2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferMemoryBarrier2(d, s); +} + +void vkb_encfix_VkBufferMemoryRequirementsInfo2(vkb_enc *e, const VkBufferMemoryRequirementsInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferMemoryRequirementsInfo2(vkb_enc *e, const VkBufferMemoryRequirementsInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferMemoryRequirementsInfo2(e, s, raw); +} + +void vkb_decfix_VkBufferMemoryRequirementsInfo2(vkb_dec *d, VkBufferMemoryRequirementsInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferMemoryRequirementsInfo2(vkb_dec *d, VkBufferMemoryRequirementsInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferMemoryRequirementsInfo2(d, s); +} + +void vkb_encfix_VkBufferOpaqueCaptureAddressCreateInfo(vkb_enc *e, const VkBufferOpaqueCaptureAddressCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferOpaqueCaptureAddressCreateInfo(vkb_enc *e, const VkBufferOpaqueCaptureAddressCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferOpaqueCaptureAddressCreateInfo(e, s, raw); +} + +void vkb_decfix_VkBufferOpaqueCaptureAddressCreateInfo(vkb_dec *d, VkBufferOpaqueCaptureAddressCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferOpaqueCaptureAddressCreateInfo(vkb_dec *d, VkBufferOpaqueCaptureAddressCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferOpaqueCaptureAddressCreateInfo(d, s); +} + +void vkb_encfix_VkBufferUsageFlags2CreateInfo(vkb_enc *e, const VkBufferUsageFlags2CreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferUsageFlags2CreateInfo(vkb_enc *e, const VkBufferUsageFlags2CreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferUsageFlags2CreateInfo(e, s, raw); +} + +void vkb_decfix_VkBufferUsageFlags2CreateInfo(vkb_dec *d, VkBufferUsageFlags2CreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferUsageFlags2CreateInfo(vkb_dec *d, VkBufferUsageFlags2CreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferUsageFlags2CreateInfo(d, s); +} + +void vkb_encfix_VkBufferViewCreateInfo(vkb_enc *e, const VkBufferViewCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkBufferViewCreateInfo(vkb_enc *e, const VkBufferViewCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkBufferViewCreateInfo(e, s, raw); +} + +void vkb_decfix_VkBufferViewCreateInfo(vkb_dec *d, VkBufferViewCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkBufferViewCreateInfo(vkb_dec *d, VkBufferViewCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkBufferViewCreateInfo(d, s); +} + +void vkb_encfix_VkCalibratedTimestampInfoKHR(vkb_enc *e, const VkCalibratedTimestampInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCalibratedTimestampInfoKHR(vkb_enc *e, const VkCalibratedTimestampInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCalibratedTimestampInfoKHR(e, s, raw); +} + +void vkb_decfix_VkCalibratedTimestampInfoKHR(vkb_dec *d, VkCalibratedTimestampInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCalibratedTimestampInfoKHR(vkb_dec *d, VkCalibratedTimestampInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCalibratedTimestampInfoKHR(d, s); +} + +void vkb_encfix_VkCommandBufferAllocateInfo(vkb_enc *e, const VkCommandBufferAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCommandBufferAllocateInfo(vkb_enc *e, const VkCommandBufferAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandBufferAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkCommandBufferAllocateInfo(vkb_dec *d, VkCommandBufferAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCommandBufferAllocateInfo(vkb_dec *d, VkCommandBufferAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandBufferAllocateInfo(d, s); +} + +void vkb_encfix_VkCommandBufferBeginInfo(vkb_enc *e, const VkCommandBufferBeginInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pInheritanceInfo && (vkb_cb_begin_is_secondary(s))) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCommandBufferInheritanceInfo(e, &s->pInheritanceInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCommandBufferBeginInfo(vkb_enc *e, const VkCommandBufferBeginInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandBufferBeginInfo(e, s, raw); +} + +void vkb_decfix_VkCommandBufferBeginInfo(vkb_dec *d, VkCommandBufferBeginInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBufferInheritanceInfo *a_ = (VkCommandBufferInheritanceInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBufferInheritanceInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCommandBufferInheritanceInfo(d, &a_[i_]); + s->pInheritanceInfo = a_; + } else { + s->pInheritanceInfo = NULL; + } +} + +void vkb_dec_VkCommandBufferBeginInfo(vkb_dec *d, VkCommandBufferBeginInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandBufferBeginInfo(d, s); +} + +void vkb_encfix_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_enc *e, const VkCommandBufferInheritanceConditionalRenderingInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_enc *e, const VkCommandBufferInheritanceConditionalRenderingInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandBufferInheritanceConditionalRenderingInfoEXT(e, s, raw); +} + +void vkb_decfix_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_dec *d, VkCommandBufferInheritanceConditionalRenderingInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkb_dec *d, VkCommandBufferInheritanceConditionalRenderingInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandBufferInheritanceConditionalRenderingInfoEXT(d, s); +} + +void vkb_encfix_VkCommandBufferInheritanceInfo(vkb_enc *e, const VkCommandBufferInheritanceInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCommandBufferInheritanceInfo(vkb_enc *e, const VkCommandBufferInheritanceInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandBufferInheritanceInfo(e, s, raw); +} + +void vkb_decfix_VkCommandBufferInheritanceInfo(vkb_dec *d, VkCommandBufferInheritanceInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCommandBufferInheritanceInfo(vkb_dec *d, VkCommandBufferInheritanceInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandBufferInheritanceInfo(d, s); +} + +void vkb_encfix_VkCommandBufferInheritanceRenderingInfo(vkb_enc *e, const VkCommandBufferInheritanceRenderingInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachmentFormats) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachmentFormats, (size_t)n_ * sizeof(*s->pColorAttachmentFormats)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCommandBufferInheritanceRenderingInfo(vkb_enc *e, const VkCommandBufferInheritanceRenderingInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandBufferInheritanceRenderingInfo(e, s, raw); +} + +void vkb_decfix_VkCommandBufferInheritanceRenderingInfo(vkb_dec *d, VkCommandBufferInheritanceRenderingInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachmentFormats = (const VkFormat *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFormat)); + } else { + s->pColorAttachmentFormats = NULL; + } +} + +void vkb_dec_VkCommandBufferInheritanceRenderingInfo(vkb_dec *d, VkCommandBufferInheritanceRenderingInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandBufferInheritanceRenderingInfo(d, s); +} + +void vkb_encfix_VkCommandBufferSubmitInfo(vkb_enc *e, const VkCommandBufferSubmitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_patch_u64(e, raw + offsetof(VkCommandBufferSubmitInfo, commandBuffer), vkb_remote((const void *)s->commandBuffer)); +} + +void vkb_enc_VkCommandBufferSubmitInfo(vkb_enc *e, const VkCommandBufferSubmitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandBufferSubmitInfo(e, s, raw); +} + +void vkb_decfix_VkCommandBufferSubmitInfo(vkb_dec *d, VkCommandBufferSubmitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCommandBufferSubmitInfo(vkb_dec *d, VkCommandBufferSubmitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandBufferSubmitInfo(d, s); +} + +void vkb_encfix_VkCommandPoolCreateInfo(vkb_enc *e, const VkCommandPoolCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCommandPoolCreateInfo(vkb_enc *e, const VkCommandPoolCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCommandPoolCreateInfo(e, s, raw); +} + +void vkb_decfix_VkCommandPoolCreateInfo(vkb_dec *d, VkCommandPoolCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCommandPoolCreateInfo(vkb_dec *d, VkCommandPoolCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCommandPoolCreateInfo(d, s); +} + +void vkb_encfix_VkComputePipelineCreateInfo(vkb_enc *e, const VkComputePipelineCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_encfix_VkPipelineShaderStageCreateInfo(e, &s->stage, raw + offsetof(VkComputePipelineCreateInfo, stage)); +} + +void vkb_enc_VkComputePipelineCreateInfo(vkb_enc *e, const VkComputePipelineCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkComputePipelineCreateInfo(e, s, raw); +} + +void vkb_decfix_VkComputePipelineCreateInfo(vkb_dec *d, VkComputePipelineCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + vkb_decfix_VkPipelineShaderStageCreateInfo(d, &s->stage); +} + +void vkb_dec_VkComputePipelineCreateInfo(vkb_dec *d, VkComputePipelineCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkComputePipelineCreateInfo(d, s); +} + +void vkb_encfix_VkConditionalRenderingBeginInfoEXT(vkb_enc *e, const VkConditionalRenderingBeginInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkConditionalRenderingBeginInfoEXT(vkb_enc *e, const VkConditionalRenderingBeginInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkConditionalRenderingBeginInfoEXT(e, s, raw); +} + +void vkb_decfix_VkConditionalRenderingBeginInfoEXT(vkb_dec *d, VkConditionalRenderingBeginInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkConditionalRenderingBeginInfoEXT(vkb_dec *d, VkConditionalRenderingBeginInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkConditionalRenderingBeginInfoEXT(d, s); +} + +void vkb_encfix_VkCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkCooperativeMatrixPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkCooperativeMatrixPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCooperativeMatrixPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkCooperativeMatrixPropertiesKHR(vkb_dec *d, VkCooperativeMatrixPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCooperativeMatrixPropertiesKHR(vkb_dec *d, VkCooperativeMatrixPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCooperativeMatrixPropertiesKHR(d, s); +} + +void vkb_encfix_VkCopyBufferInfo2(vkb_enc *e, const VkCopyBufferInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferCopy2(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCopyBufferInfo2(vkb_enc *e, const VkCopyBufferInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCopyBufferInfo2(e, s, raw); +} + +void vkb_decfix_VkCopyBufferInfo2(vkb_dec *d, VkCopyBufferInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferCopy2 *a_ = (VkBufferCopy2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferCopy2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferCopy2(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkCopyBufferInfo2(vkb_dec *d, VkCopyBufferInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCopyBufferInfo2(d, s); +} + +void vkb_encfix_VkCopyBufferToImageInfo2(vkb_enc *e, const VkCopyBufferToImageInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferImageCopy2(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCopyBufferToImageInfo2(vkb_enc *e, const VkCopyBufferToImageInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCopyBufferToImageInfo2(e, s, raw); +} + +void vkb_decfix_VkCopyBufferToImageInfo2(vkb_dec *d, VkCopyBufferToImageInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferImageCopy2 *a_ = (VkBufferImageCopy2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferImageCopy2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferImageCopy2(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkCopyBufferToImageInfo2(vkb_dec *d, VkCopyBufferToImageInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCopyBufferToImageInfo2(d, s); +} + +void vkb_encfix_VkCopyDescriptorSet(vkb_enc *e, const VkCopyDescriptorSet *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkCopyDescriptorSet(vkb_enc *e, const VkCopyDescriptorSet *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCopyDescriptorSet(e, s, raw); +} + +void vkb_decfix_VkCopyDescriptorSet(vkb_dec *d, VkCopyDescriptorSet *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkCopyDescriptorSet(vkb_dec *d, VkCopyDescriptorSet *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCopyDescriptorSet(d, s); +} + +void vkb_encfix_VkCopyImageInfo2(vkb_enc *e, const VkCopyImageInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageCopy2(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCopyImageInfo2(vkb_enc *e, const VkCopyImageInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCopyImageInfo2(e, s, raw); +} + +void vkb_decfix_VkCopyImageInfo2(vkb_dec *d, VkCopyImageInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageCopy2 *a_ = (VkImageCopy2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageCopy2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageCopy2(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkCopyImageInfo2(vkb_dec *d, VkCopyImageInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCopyImageInfo2(d, s); +} + +void vkb_encfix_VkCopyImageToBufferInfo2(vkb_enc *e, const VkCopyImageToBufferInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferImageCopy2(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCopyImageToBufferInfo2(vkb_enc *e, const VkCopyImageToBufferInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCopyImageToBufferInfo2(e, s, raw); +} + +void vkb_decfix_VkCopyImageToBufferInfo2(vkb_dec *d, VkCopyImageToBufferInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferImageCopy2 *a_ = (VkBufferImageCopy2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferImageCopy2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferImageCopy2(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkCopyImageToBufferInfo2(vkb_dec *d, VkCopyImageToBufferInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCopyImageToBufferInfo2(d, s); +} + +void vkb_encfix_VkCopyTensorInfoARM(vkb_enc *e, const VkCopyTensorInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorCopyARM(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCopyTensorInfoARM(vkb_enc *e, const VkCopyTensorInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCopyTensorInfoARM(e, s, raw); +} + +void vkb_decfix_VkCopyTensorInfoARM(vkb_dec *d, VkCopyTensorInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorCopyARM *a_ = (VkTensorCopyARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorCopyARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorCopyARM(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkCopyTensorInfoARM(vkb_dec *d, VkCopyTensorInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCopyTensorInfoARM(d, s); +} + +void vkb_encfix_VkCustomResolveCreateInfoEXT(vkb_enc *e, const VkCustomResolveCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachmentFormats) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachmentFormats, (size_t)n_ * sizeof(*s->pColorAttachmentFormats)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkCustomResolveCreateInfoEXT(vkb_enc *e, const VkCustomResolveCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkCustomResolveCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkCustomResolveCreateInfoEXT(vkb_dec *d, VkCustomResolveCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachmentFormats = (const VkFormat *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFormat)); + } else { + s->pColorAttachmentFormats = NULL; + } +} + +void vkb_dec_VkCustomResolveCreateInfoEXT(vkb_dec *d, VkCustomResolveCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkCustomResolveCreateInfoEXT(d, s); +} + +void vkb_encfix_VkDebugUtilsObjectNameInfoEXT(vkb_enc *e, const VkDebugUtilsObjectNameInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_str(e, s->pObjectName ? s->pObjectName : NULL); +} + +void vkb_enc_VkDebugUtilsObjectNameInfoEXT(vkb_enc *e, const VkDebugUtilsObjectNameInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDebugUtilsObjectNameInfoEXT(e, s, raw); +} + +void vkb_decfix_VkDebugUtilsObjectNameInfoEXT(vkb_dec *d, VkDebugUtilsObjectNameInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pObjectName = vkb_dec_str(d); +} + +void vkb_dec_VkDebugUtilsObjectNameInfoEXT(vkb_dec *d, VkDebugUtilsObjectNameInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDebugUtilsObjectNameInfoEXT(d, s); +} + +void vkb_encfix_VkDependencyInfo(vkb_enc *e, const VkDependencyInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pMemoryBarriers) { + uint32_t n_ = (uint32_t)(s->memoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMemoryBarrier2(e, &s->pMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pBufferMemoryBarriers) { + uint32_t n_ = (uint32_t)(s->bufferMemoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferMemoryBarrier2(e, &s->pBufferMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pImageMemoryBarriers) { + uint32_t n_ = (uint32_t)(s->imageMemoryBarrierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageMemoryBarrier2(e, &s->pImageMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDependencyInfo(vkb_enc *e, const VkDependencyInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDependencyInfo(e, s, raw); +} + +void vkb_decfix_VkDependencyInfo(vkb_dec *d, VkDependencyInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkMemoryBarrier2 *a_ = (VkMemoryBarrier2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkMemoryBarrier2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkMemoryBarrier2(d, &a_[i_]); + s->pMemoryBarriers = a_; + } else { + s->pMemoryBarriers = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferMemoryBarrier2 *a_ = (VkBufferMemoryBarrier2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferMemoryBarrier2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferMemoryBarrier2(d, &a_[i_]); + s->pBufferMemoryBarriers = a_; + } else { + s->pBufferMemoryBarriers = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageMemoryBarrier2 *a_ = (VkImageMemoryBarrier2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageMemoryBarrier2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageMemoryBarrier2(d, &a_[i_]); + s->pImageMemoryBarriers = a_; + } else { + s->pImageMemoryBarriers = NULL; + } +} + +void vkb_dec_VkDependencyInfo(vkb_dec *d, VkDependencyInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDependencyInfo(d, s); +} + +void vkb_encfix_VkDepthBiasInfoEXT(vkb_enc *e, const VkDepthBiasInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDepthBiasInfoEXT(vkb_enc *e, const VkDepthBiasInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDepthBiasInfoEXT(e, s, raw); +} + +void vkb_decfix_VkDepthBiasInfoEXT(vkb_dec *d, VkDepthBiasInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDepthBiasInfoEXT(vkb_dec *d, VkDepthBiasInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDepthBiasInfoEXT(d, s); +} + +void vkb_encfix_VkDepthBiasRepresentationInfoEXT(vkb_enc *e, const VkDepthBiasRepresentationInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDepthBiasRepresentationInfoEXT(vkb_enc *e, const VkDepthBiasRepresentationInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDepthBiasRepresentationInfoEXT(e, s, raw); +} + +void vkb_decfix_VkDepthBiasRepresentationInfoEXT(vkb_dec *d, VkDepthBiasRepresentationInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDepthBiasRepresentationInfoEXT(vkb_dec *d, VkDepthBiasRepresentationInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDepthBiasRepresentationInfoEXT(d, s); +} + +void vkb_encfix_VkDescriptorPoolCreateInfo(vkb_enc *e, const VkDescriptorPoolCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pPoolSizes) { + uint32_t n_ = (uint32_t)(s->poolSizeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPoolSizes, (size_t)n_ * sizeof(*s->pPoolSizes)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorPoolCreateInfo(vkb_enc *e, const VkDescriptorPoolCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorPoolCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorPoolCreateInfo(vkb_dec *d, VkDescriptorPoolCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPoolSizes = (const VkDescriptorPoolSize *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorPoolSize)); + } else { + s->pPoolSizes = NULL; + } +} + +void vkb_dec_VkDescriptorPoolCreateInfo(vkb_dec *d, VkDescriptorPoolCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorPoolCreateInfo(d, s); +} + +void vkb_encfix_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_enc *e, const VkDescriptorPoolInlineUniformBlockCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_enc *e, const VkDescriptorPoolInlineUniformBlockCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorPoolInlineUniformBlockCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_dec *d, VkDescriptorPoolInlineUniformBlockCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDescriptorPoolInlineUniformBlockCreateInfo(vkb_dec *d, VkDescriptorPoolInlineUniformBlockCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorPoolInlineUniformBlockCreateInfo(d, s); +} + +void vkb_encfix_VkDescriptorSetAllocateInfo(vkb_enc *e, const VkDescriptorSetAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSetLayouts) { + uint32_t n_ = (uint32_t)(s->descriptorSetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSetLayouts, (size_t)n_ * sizeof(*s->pSetLayouts)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorSetAllocateInfo(vkb_enc *e, const VkDescriptorSetAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetAllocateInfo(vkb_dec *d, VkDescriptorSetAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSetLayouts = (const VkDescriptorSetLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorSetLayout)); + } else { + s->pSetLayouts = NULL; + } +} + +void vkb_dec_VkDescriptorSetAllocateInfo(vkb_dec *d, VkDescriptorSetAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetAllocateInfo(d, s); +} + +void vkb_encfix_VkDescriptorSetLayoutBinding(vkb_enc *e, const VkDescriptorSetLayoutBinding *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pImmutableSamplers && ((s->descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || s->descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER))) { + uint32_t n_ = (uint32_t)(s->descriptorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pImmutableSamplers, (size_t)n_ * sizeof(*s->pImmutableSamplers)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorSetLayoutBinding(vkb_enc *e, const VkDescriptorSetLayoutBinding *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetLayoutBinding(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetLayoutBinding(vkb_dec *d, VkDescriptorSetLayoutBinding *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pImmutableSamplers = (const VkSampler *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSampler)); + } else { + s->pImmutableSamplers = NULL; + } +} + +void vkb_dec_VkDescriptorSetLayoutBinding(vkb_dec *d, VkDescriptorSetLayoutBinding *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetLayoutBinding(d, s); +} + +void vkb_encfix_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutBindingFlagsCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pBindingFlags) { + uint32_t n_ = (uint32_t)(s->bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pBindingFlags, (size_t)n_ * sizeof(*s->pBindingFlags)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutBindingFlagsCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetLayoutBindingFlagsCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_dec *d, VkDescriptorSetLayoutBindingFlagsCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pBindingFlags = (const VkDescriptorBindingFlags *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorBindingFlags)); + } else { + s->pBindingFlags = NULL; + } +} + +void vkb_dec_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkb_dec *d, VkDescriptorSetLayoutBindingFlagsCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetLayoutBindingFlagsCreateInfo(d, s); +} + +void vkb_encfix_VkDescriptorSetLayoutCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pBindings) { + uint32_t n_ = (uint32_t)(s->bindingCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDescriptorSetLayoutBinding(e, &s->pBindings[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorSetLayoutCreateInfo(vkb_enc *e, const VkDescriptorSetLayoutCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetLayoutCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetLayoutCreateInfo(vkb_dec *d, VkDescriptorSetLayoutCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDescriptorSetLayoutBinding *a_ = (VkDescriptorSetLayoutBinding *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDescriptorSetLayoutBinding)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDescriptorSetLayoutBinding(d, &a_[i_]); + s->pBindings = a_; + } else { + s->pBindings = NULL; + } +} + +void vkb_dec_VkDescriptorSetLayoutCreateInfo(vkb_dec *d, VkDescriptorSetLayoutCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetLayoutCreateInfo(d, s); +} + +void vkb_encfix_VkDescriptorSetLayoutSupport(vkb_enc *e, const VkDescriptorSetLayoutSupport *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDescriptorSetLayoutSupport(vkb_enc *e, const VkDescriptorSetLayoutSupport *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetLayoutSupport(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetLayoutSupport(vkb_dec *d, VkDescriptorSetLayoutSupport *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDescriptorSetLayoutSupport(vkb_dec *d, VkDescriptorSetLayoutSupport *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetLayoutSupport(d, s); +} + +void vkb_encfix_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDescriptorCounts) { + uint32_t n_ = (uint32_t)(s->descriptorSetCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDescriptorCounts, (size_t)n_ * sizeof(*s->pDescriptorCounts)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetVariableDescriptorCountAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_dec *d, VkDescriptorSetVariableDescriptorCountAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDescriptorCounts = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pDescriptorCounts = NULL; + } +} + +void vkb_dec_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkb_dec *d, VkDescriptorSetVariableDescriptorCountAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetVariableDescriptorCountAllocateInfo(d, s); +} + +void vkb_encfix_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountLayoutSupport *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_enc *e, const VkDescriptorSetVariableDescriptorCountLayoutSupport *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorSetVariableDescriptorCountLayoutSupport(e, s, raw); +} + +void vkb_decfix_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_dec *d, VkDescriptorSetVariableDescriptorCountLayoutSupport *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkb_dec *d, VkDescriptorSetVariableDescriptorCountLayoutSupport *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorSetVariableDescriptorCountLayoutSupport(d, s); +} + +void vkb_encfix_VkDescriptorUpdateTemplateCreateInfo(vkb_enc *e, const VkDescriptorUpdateTemplateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDescriptorUpdateEntries) { + uint32_t n_ = (uint32_t)(s->descriptorUpdateEntryCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDescriptorUpdateEntries, (size_t)n_ * sizeof(*s->pDescriptorUpdateEntries)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDescriptorUpdateTemplateCreateInfo(vkb_enc *e, const VkDescriptorUpdateTemplateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDescriptorUpdateTemplateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDescriptorUpdateTemplateCreateInfo(vkb_dec *d, VkDescriptorUpdateTemplateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDescriptorUpdateEntries = (const VkDescriptorUpdateTemplateEntry *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorUpdateTemplateEntry)); + } else { + s->pDescriptorUpdateEntries = NULL; + } +} + +void vkb_dec_VkDescriptorUpdateTemplateCreateInfo(vkb_dec *d, VkDescriptorUpdateTemplateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDescriptorUpdateTemplateCreateInfo(d, s); +} + +void vkb_encfix_VkDeviceBufferMemoryRequirements(vkb_enc *e, const VkDeviceBufferMemoryRequirements *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkBufferCreateInfo(e, &s->pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceBufferMemoryRequirements(vkb_enc *e, const VkDeviceBufferMemoryRequirements *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceBufferMemoryRequirements(e, s, raw); +} + +void vkb_decfix_VkDeviceBufferMemoryRequirements(vkb_dec *d, VkDeviceBufferMemoryRequirements *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkBufferCreateInfo *a_ = (VkBufferCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkBufferCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkBufferCreateInfo(d, &a_[i_]); + s->pCreateInfo = a_; + } else { + s->pCreateInfo = NULL; + } +} + +void vkb_dec_VkDeviceBufferMemoryRequirements(vkb_dec *d, VkDeviceBufferMemoryRequirements *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceBufferMemoryRequirements(d, s); +} + +void vkb_encfix_VkDeviceCreateInfo(vkb_enc *e, const VkDeviceCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pQueueCreateInfos) { + uint32_t n_ = (uint32_t)(s->queueCreateInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkDeviceQueueCreateInfo(e, &s->pQueueCreateInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_strarray(e, s->ppEnabledLayerNames ? s->ppEnabledLayerNames : NULL, s->ppEnabledLayerNames ? (uint32_t)(s->enabledLayerCount) : 0); + vkb_enc_strarray(e, s->ppEnabledExtensionNames ? s->ppEnabledExtensionNames : NULL, s->ppEnabledExtensionNames ? (uint32_t)(s->enabledExtensionCount) : 0); + if (s->pEnabledFeatures) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pEnabledFeatures, (size_t)n_ * sizeof(*s->pEnabledFeatures)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceCreateInfo(vkb_enc *e, const VkDeviceCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceCreateInfo(vkb_dec *d, VkDeviceCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkDeviceQueueCreateInfo *a_ = (VkDeviceQueueCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkDeviceQueueCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkDeviceQueueCreateInfo(d, &a_[i_]); + s->pQueueCreateInfos = a_; + } else { + s->pQueueCreateInfos = NULL; + } + s->ppEnabledLayerNames = vkb_dec_strarray(d); + s->ppEnabledExtensionNames = vkb_dec_strarray(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pEnabledFeatures = (const VkPhysicalDeviceFeatures *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPhysicalDeviceFeatures)); + } else { + s->pEnabledFeatures = NULL; + } +} + +void vkb_dec_VkDeviceCreateInfo(vkb_dec *d, VkDeviceCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceCreateInfo(d, s); +} + +void vkb_encfix_VkDeviceGroupBindSparseInfo(vkb_enc *e, const VkDeviceGroupBindSparseInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDeviceGroupBindSparseInfo(vkb_enc *e, const VkDeviceGroupBindSparseInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceGroupBindSparseInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceGroupBindSparseInfo(vkb_dec *d, VkDeviceGroupBindSparseInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDeviceGroupBindSparseInfo(vkb_dec *d, VkDeviceGroupBindSparseInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceGroupBindSparseInfo(d, s); +} + +void vkb_encfix_VkDeviceGroupCommandBufferBeginInfo(vkb_enc *e, const VkDeviceGroupCommandBufferBeginInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDeviceGroupCommandBufferBeginInfo(vkb_enc *e, const VkDeviceGroupCommandBufferBeginInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceGroupCommandBufferBeginInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceGroupCommandBufferBeginInfo(vkb_dec *d, VkDeviceGroupCommandBufferBeginInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDeviceGroupCommandBufferBeginInfo(vkb_dec *d, VkDeviceGroupCommandBufferBeginInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceGroupCommandBufferBeginInfo(d, s); +} + +void vkb_encfix_VkDeviceGroupDeviceCreateInfo(vkb_enc *e, const VkDeviceGroupDeviceCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pPhysicalDevices) { + uint32_t n_ = (uint32_t)(s->physicalDeviceCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_u64(e, vkb_remote((const void *)s->pPhysicalDevices[i_])); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceGroupDeviceCreateInfo(vkb_enc *e, const VkDeviceGroupDeviceCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceGroupDeviceCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceGroupDeviceCreateInfo(vkb_dec *d, VkDeviceGroupDeviceCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDevice *a_ = (VkPhysicalDevice *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDevice)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) a_[i_] = (VkPhysicalDevice)(uintptr_t)vkb_dec_u64(d); + s->pPhysicalDevices = a_; + } else { + s->pPhysicalDevices = NULL; + } +} + +void vkb_dec_VkDeviceGroupDeviceCreateInfo(vkb_dec *d, VkDeviceGroupDeviceCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceGroupDeviceCreateInfo(d, s); +} + +void vkb_encfix_VkDeviceGroupRenderPassBeginInfo(vkb_enc *e, const VkDeviceGroupRenderPassBeginInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDeviceRenderAreas) { + uint32_t n_ = (uint32_t)(s->deviceRenderAreaCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDeviceRenderAreas, (size_t)n_ * sizeof(*s->pDeviceRenderAreas)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceGroupRenderPassBeginInfo(vkb_enc *e, const VkDeviceGroupRenderPassBeginInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceGroupRenderPassBeginInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceGroupRenderPassBeginInfo(vkb_dec *d, VkDeviceGroupRenderPassBeginInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDeviceRenderAreas = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + s->pDeviceRenderAreas = NULL; + } +} + +void vkb_dec_VkDeviceGroupRenderPassBeginInfo(vkb_dec *d, VkDeviceGroupRenderPassBeginInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceGroupRenderPassBeginInfo(d, s); +} + +void vkb_encfix_VkDeviceGroupSubmitInfo(vkb_enc *e, const VkDeviceGroupSubmitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pWaitSemaphoreDeviceIndices) { + uint32_t n_ = (uint32_t)(s->waitSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pWaitSemaphoreDeviceIndices, (size_t)n_ * sizeof(*s->pWaitSemaphoreDeviceIndices)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCommandBufferDeviceMasks) { + uint32_t n_ = (uint32_t)(s->commandBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCommandBufferDeviceMasks, (size_t)n_ * sizeof(*s->pCommandBufferDeviceMasks)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSignalSemaphoreDeviceIndices) { + uint32_t n_ = (uint32_t)(s->signalSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSignalSemaphoreDeviceIndices, (size_t)n_ * sizeof(*s->pSignalSemaphoreDeviceIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceGroupSubmitInfo(vkb_enc *e, const VkDeviceGroupSubmitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceGroupSubmitInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceGroupSubmitInfo(vkb_dec *d, VkDeviceGroupSubmitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pWaitSemaphoreDeviceIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pWaitSemaphoreDeviceIndices = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCommandBufferDeviceMasks = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pCommandBufferDeviceMasks = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSignalSemaphoreDeviceIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pSignalSemaphoreDeviceIndices = NULL; + } +} + +void vkb_dec_VkDeviceGroupSubmitInfo(vkb_dec *d, VkDeviceGroupSubmitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceGroupSubmitInfo(d, s); +} + +void vkb_encfix_VkDeviceImageMemoryRequirements(vkb_enc *e, const VkDeviceImageMemoryRequirements *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageCreateInfo(e, &s->pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceImageMemoryRequirements(vkb_enc *e, const VkDeviceImageMemoryRequirements *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceImageMemoryRequirements(e, s, raw); +} + +void vkb_decfix_VkDeviceImageMemoryRequirements(vkb_dec *d, VkDeviceImageMemoryRequirements *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageCreateInfo *a_ = (VkImageCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageCreateInfo(d, &a_[i_]); + s->pCreateInfo = a_; + } else { + s->pCreateInfo = NULL; + } +} + +void vkb_dec_VkDeviceImageMemoryRequirements(vkb_dec *d, VkDeviceImageMemoryRequirements *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceImageMemoryRequirements(d, s); +} + +void vkb_encfix_VkDeviceImageSubresourceInfo(vkb_enc *e, const VkDeviceImageSubresourceInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageCreateInfo(e, &s->pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSubresource) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageSubresource2(e, &s->pSubresource[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceImageSubresourceInfo(vkb_enc *e, const VkDeviceImageSubresourceInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceImageSubresourceInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceImageSubresourceInfo(vkb_dec *d, VkDeviceImageSubresourceInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageCreateInfo *a_ = (VkImageCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageCreateInfo(d, &a_[i_]); + s->pCreateInfo = a_; + } else { + s->pCreateInfo = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageSubresource2 *a_ = (VkImageSubresource2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageSubresource2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageSubresource2(d, &a_[i_]); + s->pSubresource = a_; + } else { + s->pSubresource = NULL; + } +} + +void vkb_dec_VkDeviceImageSubresourceInfo(vkb_dec *d, VkDeviceImageSubresourceInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceImageSubresourceInfo(d, s); +} + +void vkb_encfix_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_enc *e, const VkDeviceMemoryOpaqueCaptureAddressInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_enc *e, const VkDeviceMemoryOpaqueCaptureAddressInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceMemoryOpaqueCaptureAddressInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_dec *d, VkDeviceMemoryOpaqueCaptureAddressInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDeviceMemoryOpaqueCaptureAddressInfo(vkb_dec *d, VkDeviceMemoryOpaqueCaptureAddressInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceMemoryOpaqueCaptureAddressInfo(d, s); +} + +void vkb_encfix_VkDevicePrivateDataCreateInfo(vkb_enc *e, const VkDevicePrivateDataCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDevicePrivateDataCreateInfo(vkb_enc *e, const VkDevicePrivateDataCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDevicePrivateDataCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDevicePrivateDataCreateInfo(vkb_dec *d, VkDevicePrivateDataCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDevicePrivateDataCreateInfo(vkb_dec *d, VkDevicePrivateDataCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDevicePrivateDataCreateInfo(d, s); +} + +void vkb_encfix_VkDeviceQueueCreateInfo(vkb_enc *e, const VkDeviceQueueCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pQueuePriorities) { + uint32_t n_ = (uint32_t)(s->queueCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pQueuePriorities, (size_t)n_ * sizeof(*s->pQueuePriorities)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceQueueCreateInfo(vkb_enc *e, const VkDeviceQueueCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceQueueCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceQueueCreateInfo(vkb_dec *d, VkDeviceQueueCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pQueuePriorities = (const float *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(float)); + } else { + s->pQueuePriorities = NULL; + } +} + +void vkb_dec_VkDeviceQueueCreateInfo(vkb_dec *d, VkDeviceQueueCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceQueueCreateInfo(d, s); +} + +void vkb_encfix_VkDeviceQueueGlobalPriorityCreateInfo(vkb_enc *e, const VkDeviceQueueGlobalPriorityCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDeviceQueueGlobalPriorityCreateInfo(vkb_enc *e, const VkDeviceQueueGlobalPriorityCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceQueueGlobalPriorityCreateInfo(e, s, raw); +} + +void vkb_decfix_VkDeviceQueueGlobalPriorityCreateInfo(vkb_dec *d, VkDeviceQueueGlobalPriorityCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDeviceQueueGlobalPriorityCreateInfo(vkb_dec *d, VkDeviceQueueGlobalPriorityCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceQueueGlobalPriorityCreateInfo(d, s); +} + +void vkb_encfix_VkDeviceQueueInfo2(vkb_enc *e, const VkDeviceQueueInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDeviceQueueInfo2(vkb_enc *e, const VkDeviceQueueInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceQueueInfo2(e, s, raw); +} + +void vkb_decfix_VkDeviceQueueInfo2(vkb_dec *d, VkDeviceQueueInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDeviceQueueInfo2(vkb_dec *d, VkDeviceQueueInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceQueueInfo2(d, s); +} + +void vkb_encfix_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_enc *e, const VkDeviceQueueShaderCoreControlCreateInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_enc *e, const VkDeviceQueueShaderCoreControlCreateInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceQueueShaderCoreControlCreateInfoARM(e, s, raw); +} + +void vkb_decfix_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_dec *d, VkDeviceQueueShaderCoreControlCreateInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkDeviceQueueShaderCoreControlCreateInfoARM(vkb_dec *d, VkDeviceQueueShaderCoreControlCreateInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceQueueShaderCoreControlCreateInfoARM(d, s); +} + +void vkb_encfix_VkDeviceTensorMemoryRequirementsARM(vkb_enc *e, const VkDeviceTensorMemoryRequirementsARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCreateInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorCreateInfoARM(e, &s->pCreateInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDeviceTensorMemoryRequirementsARM(vkb_enc *e, const VkDeviceTensorMemoryRequirementsARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDeviceTensorMemoryRequirementsARM(e, s, raw); +} + +void vkb_decfix_VkDeviceTensorMemoryRequirementsARM(vkb_dec *d, VkDeviceTensorMemoryRequirementsARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorCreateInfoARM *a_ = (VkTensorCreateInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorCreateInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorCreateInfoARM(d, &a_[i_]); + s->pCreateInfo = a_; + } else { + s->pCreateInfo = NULL; + } +} + +void vkb_dec_VkDeviceTensorMemoryRequirementsARM(vkb_dec *d, VkDeviceTensorMemoryRequirementsARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDeviceTensorMemoryRequirementsARM(d, s); +} + +void vkb_encfix_VkDrmFormatModifierPropertiesList2EXT(vkb_enc *e, const VkDrmFormatModifierPropertiesList2EXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDrmFormatModifierProperties) { + uint32_t n_ = (uint32_t)(s->drmFormatModifierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDrmFormatModifierProperties, (size_t)n_ * sizeof(*s->pDrmFormatModifierProperties)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDrmFormatModifierPropertiesList2EXT(vkb_enc *e, const VkDrmFormatModifierPropertiesList2EXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDrmFormatModifierPropertiesList2EXT(e, s, raw); +} + +void vkb_decfix_VkDrmFormatModifierPropertiesList2EXT(vkb_dec *d, VkDrmFormatModifierPropertiesList2EXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDrmFormatModifierProperties = (VkDrmFormatModifierProperties2EXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDrmFormatModifierProperties2EXT)); + } else { + s->pDrmFormatModifierProperties = NULL; + } +} + +void vkb_dec_VkDrmFormatModifierPropertiesList2EXT(vkb_dec *d, VkDrmFormatModifierPropertiesList2EXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDrmFormatModifierPropertiesList2EXT(d, s); +} + +void vkb_encfix_VkDrmFormatModifierPropertiesListEXT(vkb_enc *e, const VkDrmFormatModifierPropertiesListEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDrmFormatModifierProperties) { + uint32_t n_ = (uint32_t)(s->drmFormatModifierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDrmFormatModifierProperties, (size_t)n_ * sizeof(*s->pDrmFormatModifierProperties)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkDrmFormatModifierPropertiesListEXT(vkb_enc *e, const VkDrmFormatModifierPropertiesListEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkDrmFormatModifierPropertiesListEXT(e, s, raw); +} + +void vkb_decfix_VkDrmFormatModifierPropertiesListEXT(vkb_dec *d, VkDrmFormatModifierPropertiesListEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDrmFormatModifierProperties = (VkDrmFormatModifierPropertiesEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDrmFormatModifierPropertiesEXT)); + } else { + s->pDrmFormatModifierProperties = NULL; + } +} + +void vkb_dec_VkDrmFormatModifierPropertiesListEXT(vkb_dec *d, VkDrmFormatModifierPropertiesListEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkDrmFormatModifierPropertiesListEXT(d, s); +} + +void vkb_encfix_VkEventCreateInfo(vkb_enc *e, const VkEventCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkEventCreateInfo(vkb_enc *e, const VkEventCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkEventCreateInfo(e, s, raw); +} + +void vkb_decfix_VkEventCreateInfo(vkb_dec *d, VkEventCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkEventCreateInfo(vkb_dec *d, VkEventCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkEventCreateInfo(d, s); +} + +void vkb_encfix_VkExportFenceCreateInfo(vkb_enc *e, const VkExportFenceCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExportFenceCreateInfo(vkb_enc *e, const VkExportFenceCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExportFenceCreateInfo(e, s, raw); +} + +void vkb_decfix_VkExportFenceCreateInfo(vkb_dec *d, VkExportFenceCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExportFenceCreateInfo(vkb_dec *d, VkExportFenceCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExportFenceCreateInfo(d, s); +} + +void vkb_encfix_VkExportMemoryAllocateInfo(vkb_enc *e, const VkExportMemoryAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExportMemoryAllocateInfo(vkb_enc *e, const VkExportMemoryAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExportMemoryAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkExportMemoryAllocateInfo(vkb_dec *d, VkExportMemoryAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExportMemoryAllocateInfo(vkb_dec *d, VkExportMemoryAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExportMemoryAllocateInfo(d, s); +} + +void vkb_encfix_VkExportSemaphoreCreateInfo(vkb_enc *e, const VkExportSemaphoreCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExportSemaphoreCreateInfo(vkb_enc *e, const VkExportSemaphoreCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExportSemaphoreCreateInfo(e, s, raw); +} + +void vkb_decfix_VkExportSemaphoreCreateInfo(vkb_dec *d, VkExportSemaphoreCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExportSemaphoreCreateInfo(vkb_dec *d, VkExportSemaphoreCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExportSemaphoreCreateInfo(d, s); +} + +void vkb_encfix_VkExternalBufferProperties(vkb_enc *e, const VkExternalBufferProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalBufferProperties(vkb_enc *e, const VkExternalBufferProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalBufferProperties(e, s, raw); +} + +void vkb_decfix_VkExternalBufferProperties(vkb_dec *d, VkExternalBufferProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalBufferProperties(vkb_dec *d, VkExternalBufferProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalBufferProperties(d, s); +} + +void vkb_encfix_VkExternalFenceProperties(vkb_enc *e, const VkExternalFenceProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalFenceProperties(vkb_enc *e, const VkExternalFenceProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalFenceProperties(e, s, raw); +} + +void vkb_decfix_VkExternalFenceProperties(vkb_dec *d, VkExternalFenceProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalFenceProperties(vkb_dec *d, VkExternalFenceProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalFenceProperties(d, s); +} + +void vkb_encfix_VkExternalImageFormatProperties(vkb_enc *e, const VkExternalImageFormatProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalImageFormatProperties(vkb_enc *e, const VkExternalImageFormatProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalImageFormatProperties(e, s, raw); +} + +void vkb_decfix_VkExternalImageFormatProperties(vkb_dec *d, VkExternalImageFormatProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalImageFormatProperties(vkb_dec *d, VkExternalImageFormatProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalImageFormatProperties(d, s); +} + +void vkb_encfix_VkExternalMemoryAcquireUnmodifiedEXT(vkb_enc *e, const VkExternalMemoryAcquireUnmodifiedEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalMemoryAcquireUnmodifiedEXT(vkb_enc *e, const VkExternalMemoryAcquireUnmodifiedEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalMemoryAcquireUnmodifiedEXT(e, s, raw); +} + +void vkb_decfix_VkExternalMemoryAcquireUnmodifiedEXT(vkb_dec *d, VkExternalMemoryAcquireUnmodifiedEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalMemoryAcquireUnmodifiedEXT(vkb_dec *d, VkExternalMemoryAcquireUnmodifiedEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalMemoryAcquireUnmodifiedEXT(d, s); +} + +void vkb_encfix_VkExternalMemoryBufferCreateInfo(vkb_enc *e, const VkExternalMemoryBufferCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalMemoryBufferCreateInfo(vkb_enc *e, const VkExternalMemoryBufferCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalMemoryBufferCreateInfo(e, s, raw); +} + +void vkb_decfix_VkExternalMemoryBufferCreateInfo(vkb_dec *d, VkExternalMemoryBufferCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalMemoryBufferCreateInfo(vkb_dec *d, VkExternalMemoryBufferCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalMemoryBufferCreateInfo(d, s); +} + +void vkb_encfix_VkExternalMemoryImageCreateInfo(vkb_enc *e, const VkExternalMemoryImageCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalMemoryImageCreateInfo(vkb_enc *e, const VkExternalMemoryImageCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalMemoryImageCreateInfo(e, s, raw); +} + +void vkb_decfix_VkExternalMemoryImageCreateInfo(vkb_dec *d, VkExternalMemoryImageCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalMemoryImageCreateInfo(vkb_dec *d, VkExternalMemoryImageCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalMemoryImageCreateInfo(d, s); +} + +void vkb_encfix_VkExternalMemoryTensorCreateInfoARM(vkb_enc *e, const VkExternalMemoryTensorCreateInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalMemoryTensorCreateInfoARM(vkb_enc *e, const VkExternalMemoryTensorCreateInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalMemoryTensorCreateInfoARM(e, s, raw); +} + +void vkb_decfix_VkExternalMemoryTensorCreateInfoARM(vkb_dec *d, VkExternalMemoryTensorCreateInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalMemoryTensorCreateInfoARM(vkb_dec *d, VkExternalMemoryTensorCreateInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalMemoryTensorCreateInfoARM(d, s); +} + +void vkb_encfix_VkExternalSemaphoreProperties(vkb_enc *e, const VkExternalSemaphoreProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalSemaphoreProperties(vkb_enc *e, const VkExternalSemaphoreProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalSemaphoreProperties(e, s, raw); +} + +void vkb_decfix_VkExternalSemaphoreProperties(vkb_dec *d, VkExternalSemaphoreProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalSemaphoreProperties(vkb_dec *d, VkExternalSemaphoreProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalSemaphoreProperties(d, s); +} + +void vkb_encfix_VkExternalTensorPropertiesARM(vkb_enc *e, const VkExternalTensorPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkExternalTensorPropertiesARM(vkb_enc *e, const VkExternalTensorPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkExternalTensorPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkExternalTensorPropertiesARM(vkb_dec *d, VkExternalTensorPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkExternalTensorPropertiesARM(vkb_dec *d, VkExternalTensorPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkExternalTensorPropertiesARM(d, s); +} + +void vkb_encfix_VkFenceCreateInfo(vkb_enc *e, const VkFenceCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkFenceCreateInfo(vkb_enc *e, const VkFenceCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFenceCreateInfo(e, s, raw); +} + +void vkb_decfix_VkFenceCreateInfo(vkb_dec *d, VkFenceCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkFenceCreateInfo(vkb_dec *d, VkFenceCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFenceCreateInfo(d, s); +} + +void vkb_encfix_VkFenceGetFdInfoKHR(vkb_enc *e, const VkFenceGetFdInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkFenceGetFdInfoKHR(vkb_enc *e, const VkFenceGetFdInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFenceGetFdInfoKHR(e, s, raw); +} + +void vkb_decfix_VkFenceGetFdInfoKHR(vkb_dec *d, VkFenceGetFdInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkFenceGetFdInfoKHR(vkb_dec *d, VkFenceGetFdInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFenceGetFdInfoKHR(d, s); +} + +void vkb_encfix_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_enc *e, const VkFilterCubicImageViewImageFormatPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_enc *e, const VkFilterCubicImageViewImageFormatPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFilterCubicImageViewImageFormatPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_dec *d, VkFilterCubicImageViewImageFormatPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkFilterCubicImageViewImageFormatPropertiesEXT(vkb_dec *d, VkFilterCubicImageViewImageFormatPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFilterCubicImageViewImageFormatPropertiesEXT(d, s); +} + +void vkb_encfix_VkFormatProperties2(vkb_enc *e, const VkFormatProperties2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkFormatProperties2(vkb_enc *e, const VkFormatProperties2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFormatProperties2(e, s, raw); +} + +void vkb_decfix_VkFormatProperties2(vkb_dec *d, VkFormatProperties2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkFormatProperties2(vkb_dec *d, VkFormatProperties2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFormatProperties2(d, s); +} + +void vkb_encfix_VkFormatProperties3(vkb_enc *e, const VkFormatProperties3 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkFormatProperties3(vkb_enc *e, const VkFormatProperties3 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFormatProperties3(e, s, raw); +} + +void vkb_decfix_VkFormatProperties3(vkb_dec *d, VkFormatProperties3 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkFormatProperties3(vkb_dec *d, VkFormatProperties3 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFormatProperties3(d, s); +} + +void vkb_encfix_VkFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkFragmentShadingRateAttachmentInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pFragmentShadingRateAttachment) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentReference2(e, &s->pFragmentShadingRateAttachment[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkFragmentShadingRateAttachmentInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFragmentShadingRateAttachmentInfoKHR(e, s, raw); +} + +void vkb_decfix_VkFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkFragmentShadingRateAttachmentInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentReference2 *a_ = (VkAttachmentReference2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentReference2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentReference2(d, &a_[i_]); + s->pFragmentShadingRateAttachment = a_; + } else { + s->pFragmentShadingRateAttachment = NULL; + } +} + +void vkb_dec_VkFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkFragmentShadingRateAttachmentInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFragmentShadingRateAttachmentInfoKHR(d, s); +} + +void vkb_encfix_VkFramebufferAttachmentImageInfo(vkb_enc *e, const VkFramebufferAttachmentImageInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pViewFormats) { + uint32_t n_ = (uint32_t)(s->viewFormatCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pViewFormats, (size_t)n_ * sizeof(*s->pViewFormats)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkFramebufferAttachmentImageInfo(vkb_enc *e, const VkFramebufferAttachmentImageInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFramebufferAttachmentImageInfo(e, s, raw); +} + +void vkb_decfix_VkFramebufferAttachmentImageInfo(vkb_dec *d, VkFramebufferAttachmentImageInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pViewFormats = (const VkFormat *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFormat)); + } else { + s->pViewFormats = NULL; + } +} + +void vkb_dec_VkFramebufferAttachmentImageInfo(vkb_dec *d, VkFramebufferAttachmentImageInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFramebufferAttachmentImageInfo(d, s); +} + +void vkb_encfix_VkFramebufferAttachmentsCreateInfo(vkb_enc *e, const VkFramebufferAttachmentsCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachmentImageInfos) { + uint32_t n_ = (uint32_t)(s->attachmentImageInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkFramebufferAttachmentImageInfo(e, &s->pAttachmentImageInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkFramebufferAttachmentsCreateInfo(vkb_enc *e, const VkFramebufferAttachmentsCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFramebufferAttachmentsCreateInfo(e, s, raw); +} + +void vkb_decfix_VkFramebufferAttachmentsCreateInfo(vkb_dec *d, VkFramebufferAttachmentsCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkFramebufferAttachmentImageInfo *a_ = (VkFramebufferAttachmentImageInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkFramebufferAttachmentImageInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkFramebufferAttachmentImageInfo(d, &a_[i_]); + s->pAttachmentImageInfos = a_; + } else { + s->pAttachmentImageInfos = NULL; + } +} + +void vkb_dec_VkFramebufferAttachmentsCreateInfo(vkb_dec *d, VkFramebufferAttachmentsCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFramebufferAttachmentsCreateInfo(d, s); +} + +void vkb_encfix_VkFramebufferCreateInfo(vkb_enc *e, const VkFramebufferCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachments && (!(s->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT))) { + uint32_t n_ = (uint32_t)(s->attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pAttachments, (size_t)n_ * sizeof(*s->pAttachments)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkFramebufferCreateInfo(vkb_enc *e, const VkFramebufferCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkFramebufferCreateInfo(e, s, raw); +} + +void vkb_decfix_VkFramebufferCreateInfo(vkb_dec *d, VkFramebufferCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pAttachments = (const VkImageView *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageView)); + } else { + s->pAttachments = NULL; + } +} + +void vkb_dec_VkFramebufferCreateInfo(vkb_dec *d, VkFramebufferCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkFramebufferCreateInfo(d, s); +} + +void vkb_encfix_VkGraphicsPipelineCreateInfo(vkb_enc *e, const VkGraphicsPipelineCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pStages) { + uint32_t n_ = (uint32_t)(s->stageCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineShaderStageCreateInfo(e, &s->pStages[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pVertexInputState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineVertexInputStateCreateInfo(e, &s->pVertexInputState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pInputAssemblyState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineInputAssemblyStateCreateInfo(e, &s->pInputAssemblyState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pTessellationState && (vkb_gp_has_tess(s))) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineTessellationStateCreateInfo(e, &s->pTessellationState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pViewportState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineViewportStateCreateInfo(e, &s->pViewportState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pRasterizationState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineRasterizationStateCreateInfo(e, &s->pRasterizationState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pMultisampleState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineMultisampleStateCreateInfo(e, &s->pMultisampleState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDepthStencilState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineDepthStencilStateCreateInfo(e, &s->pDepthStencilState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pColorBlendState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineColorBlendStateCreateInfo(e, &s->pColorBlendState[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDynamicState) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPipelineDynamicStateCreateInfo(e, &s->pDynamicState[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkGraphicsPipelineCreateInfo(vkb_enc *e, const VkGraphicsPipelineCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkGraphicsPipelineCreateInfo(e, s, raw); +} + +void vkb_decfix_VkGraphicsPipelineCreateInfo(vkb_dec *d, VkGraphicsPipelineCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineShaderStageCreateInfo *a_ = (VkPipelineShaderStageCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineShaderStageCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineShaderStageCreateInfo(d, &a_[i_]); + s->pStages = a_; + } else { + s->pStages = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineVertexInputStateCreateInfo *a_ = (VkPipelineVertexInputStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineVertexInputStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineVertexInputStateCreateInfo(d, &a_[i_]); + s->pVertexInputState = a_; + } else { + s->pVertexInputState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineInputAssemblyStateCreateInfo *a_ = (VkPipelineInputAssemblyStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineInputAssemblyStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineInputAssemblyStateCreateInfo(d, &a_[i_]); + s->pInputAssemblyState = a_; + } else { + s->pInputAssemblyState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineTessellationStateCreateInfo *a_ = (VkPipelineTessellationStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineTessellationStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineTessellationStateCreateInfo(d, &a_[i_]); + s->pTessellationState = a_; + } else { + s->pTessellationState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineViewportStateCreateInfo *a_ = (VkPipelineViewportStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineViewportStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineViewportStateCreateInfo(d, &a_[i_]); + s->pViewportState = a_; + } else { + s->pViewportState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineRasterizationStateCreateInfo *a_ = (VkPipelineRasterizationStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineRasterizationStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineRasterizationStateCreateInfo(d, &a_[i_]); + s->pRasterizationState = a_; + } else { + s->pRasterizationState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineMultisampleStateCreateInfo *a_ = (VkPipelineMultisampleStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineMultisampleStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineMultisampleStateCreateInfo(d, &a_[i_]); + s->pMultisampleState = a_; + } else { + s->pMultisampleState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineDepthStencilStateCreateInfo *a_ = (VkPipelineDepthStencilStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineDepthStencilStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineDepthStencilStateCreateInfo(d, &a_[i_]); + s->pDepthStencilState = a_; + } else { + s->pDepthStencilState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineColorBlendStateCreateInfo *a_ = (VkPipelineColorBlendStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineColorBlendStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineColorBlendStateCreateInfo(d, &a_[i_]); + s->pColorBlendState = a_; + } else { + s->pColorBlendState = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPipelineDynamicStateCreateInfo *a_ = (VkPipelineDynamicStateCreateInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPipelineDynamicStateCreateInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPipelineDynamicStateCreateInfo(d, &a_[i_]); + s->pDynamicState = a_; + } else { + s->pDynamicState = NULL; + } +} + +void vkb_dec_VkGraphicsPipelineCreateInfo(vkb_dec *d, VkGraphicsPipelineCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkGraphicsPipelineCreateInfo(d, s); +} + +void vkb_encfix_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_enc *e, const VkGraphicsPipelineLibraryCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_enc *e, const VkGraphicsPipelineLibraryCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkGraphicsPipelineLibraryCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_dec *d, VkGraphicsPipelineLibraryCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkGraphicsPipelineLibraryCreateInfoEXT(vkb_dec *d, VkGraphicsPipelineLibraryCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkGraphicsPipelineLibraryCreateInfoEXT(d, s); +} + +void vkb_encfix_VkHostImageCopyDevicePerformanceQuery(vkb_enc *e, const VkHostImageCopyDevicePerformanceQuery *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkHostImageCopyDevicePerformanceQuery(vkb_enc *e, const VkHostImageCopyDevicePerformanceQuery *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkHostImageCopyDevicePerformanceQuery(e, s, raw); +} + +void vkb_decfix_VkHostImageCopyDevicePerformanceQuery(vkb_dec *d, VkHostImageCopyDevicePerformanceQuery *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkHostImageCopyDevicePerformanceQuery(vkb_dec *d, VkHostImageCopyDevicePerformanceQuery *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkHostImageCopyDevicePerformanceQuery(d, s); +} + +void vkb_encfix_VkImageAlignmentControlCreateInfoMESA(vkb_enc *e, const VkImageAlignmentControlCreateInfoMESA *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageAlignmentControlCreateInfoMESA(vkb_enc *e, const VkImageAlignmentControlCreateInfoMESA *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageAlignmentControlCreateInfoMESA(e, s, raw); +} + +void vkb_decfix_VkImageAlignmentControlCreateInfoMESA(vkb_dec *d, VkImageAlignmentControlCreateInfoMESA *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageAlignmentControlCreateInfoMESA(vkb_dec *d, VkImageAlignmentControlCreateInfoMESA *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageAlignmentControlCreateInfoMESA(d, s); +} + +void vkb_encfix_VkImageBlit2(vkb_enc *e, const VkImageBlit2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageBlit2(vkb_enc *e, const VkImageBlit2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageBlit2(e, s, raw); +} + +void vkb_decfix_VkImageBlit2(vkb_dec *d, VkImageBlit2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageBlit2(vkb_dec *d, VkImageBlit2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageBlit2(d, s); +} + +void vkb_encfix_VkImageCompressionControlEXT(vkb_enc *e, const VkImageCompressionControlEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pFixedRateFlags && (s->flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT)) { + uint32_t n_ = (uint32_t)(s->compressionControlPlaneCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pFixedRateFlags, (size_t)n_ * sizeof(*s->pFixedRateFlags)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkImageCompressionControlEXT(vkb_enc *e, const VkImageCompressionControlEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageCompressionControlEXT(e, s, raw); +} + +void vkb_decfix_VkImageCompressionControlEXT(vkb_dec *d, VkImageCompressionControlEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pFixedRateFlags = (VkImageCompressionFixedRateFlagsEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageCompressionFixedRateFlagsEXT)); + } else { + s->pFixedRateFlags = NULL; + } +} + +void vkb_dec_VkImageCompressionControlEXT(vkb_dec *d, VkImageCompressionControlEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageCompressionControlEXT(d, s); +} + +void vkb_encfix_VkImageCompressionPropertiesEXT(vkb_enc *e, const VkImageCompressionPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageCompressionPropertiesEXT(vkb_enc *e, const VkImageCompressionPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageCompressionPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkImageCompressionPropertiesEXT(vkb_dec *d, VkImageCompressionPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageCompressionPropertiesEXT(vkb_dec *d, VkImageCompressionPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageCompressionPropertiesEXT(d, s); +} + +void vkb_encfix_VkImageCopy2(vkb_enc *e, const VkImageCopy2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageCopy2(vkb_enc *e, const VkImageCopy2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageCopy2(e, s, raw); +} + +void vkb_decfix_VkImageCopy2(vkb_dec *d, VkImageCopy2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageCopy2(vkb_dec *d, VkImageCopy2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageCopy2(d, s); +} + +void vkb_encfix_VkImageCreateInfo(vkb_enc *e, const VkImageCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pQueueFamilyIndices && (s->sharingMode == VK_SHARING_MODE_CONCURRENT)) { + uint32_t n_ = (uint32_t)(s->queueFamilyIndexCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pQueueFamilyIndices, (size_t)n_ * sizeof(*s->pQueueFamilyIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkImageCreateInfo(vkb_enc *e, const VkImageCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageCreateInfo(e, s, raw); +} + +void vkb_decfix_VkImageCreateInfo(vkb_dec *d, VkImageCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pQueueFamilyIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pQueueFamilyIndices = NULL; + } +} + +void vkb_dec_VkImageCreateInfo(vkb_dec *d, VkImageCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageCreateInfo(d, s); +} + +void vkb_encfix_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierExplicitCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pPlaneLayouts) { + uint32_t n_ = (uint32_t)(s->drmFormatModifierPlaneCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPlaneLayouts, (size_t)n_ * sizeof(*s->pPlaneLayouts)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierExplicitCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageDrmFormatModifierExplicitCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierExplicitCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPlaneLayouts = (const VkSubresourceLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSubresourceLayout)); + } else { + s->pPlaneLayouts = NULL; + } +} + +void vkb_dec_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierExplicitCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageDrmFormatModifierExplicitCreateInfoEXT(d, s); +} + +void vkb_encfix_VkImageDrmFormatModifierListCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierListCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDrmFormatModifiers) { + uint32_t n_ = (uint32_t)(s->drmFormatModifierCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDrmFormatModifiers, (size_t)n_ * sizeof(*s->pDrmFormatModifiers)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkImageDrmFormatModifierListCreateInfoEXT(vkb_enc *e, const VkImageDrmFormatModifierListCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageDrmFormatModifierListCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkImageDrmFormatModifierListCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierListCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDrmFormatModifiers = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pDrmFormatModifiers = NULL; + } +} + +void vkb_dec_VkImageDrmFormatModifierListCreateInfoEXT(vkb_dec *d, VkImageDrmFormatModifierListCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageDrmFormatModifierListCreateInfoEXT(d, s); +} + +void vkb_encfix_VkImageDrmFormatModifierPropertiesEXT(vkb_enc *e, const VkImageDrmFormatModifierPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageDrmFormatModifierPropertiesEXT(vkb_enc *e, const VkImageDrmFormatModifierPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageDrmFormatModifierPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkImageDrmFormatModifierPropertiesEXT(vkb_dec *d, VkImageDrmFormatModifierPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageDrmFormatModifierPropertiesEXT(vkb_dec *d, VkImageDrmFormatModifierPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageDrmFormatModifierPropertiesEXT(d, s); +} + +void vkb_encfix_VkImageFormatListCreateInfo(vkb_enc *e, const VkImageFormatListCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pViewFormats) { + uint32_t n_ = (uint32_t)(s->viewFormatCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pViewFormats, (size_t)n_ * sizeof(*s->pViewFormats)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkImageFormatListCreateInfo(vkb_enc *e, const VkImageFormatListCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageFormatListCreateInfo(e, s, raw); +} + +void vkb_decfix_VkImageFormatListCreateInfo(vkb_dec *d, VkImageFormatListCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pViewFormats = (const VkFormat *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFormat)); + } else { + s->pViewFormats = NULL; + } +} + +void vkb_dec_VkImageFormatListCreateInfo(vkb_dec *d, VkImageFormatListCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageFormatListCreateInfo(d, s); +} + +void vkb_encfix_VkImageFormatProperties2(vkb_enc *e, const VkImageFormatProperties2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageFormatProperties2(vkb_enc *e, const VkImageFormatProperties2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageFormatProperties2(e, s, raw); +} + +void vkb_decfix_VkImageFormatProperties2(vkb_dec *d, VkImageFormatProperties2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageFormatProperties2(vkb_dec *d, VkImageFormatProperties2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageFormatProperties2(d, s); +} + +void vkb_encfix_VkImageMemoryBarrier(vkb_enc *e, const VkImageMemoryBarrier *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageMemoryBarrier(vkb_enc *e, const VkImageMemoryBarrier *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageMemoryBarrier(e, s, raw); +} + +void vkb_decfix_VkImageMemoryBarrier(vkb_dec *d, VkImageMemoryBarrier *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageMemoryBarrier(vkb_dec *d, VkImageMemoryBarrier *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageMemoryBarrier(d, s); +} + +void vkb_encfix_VkImageMemoryBarrier2(vkb_enc *e, const VkImageMemoryBarrier2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageMemoryBarrier2(vkb_enc *e, const VkImageMemoryBarrier2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageMemoryBarrier2(e, s, raw); +} + +void vkb_decfix_VkImageMemoryBarrier2(vkb_dec *d, VkImageMemoryBarrier2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageMemoryBarrier2(vkb_dec *d, VkImageMemoryBarrier2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageMemoryBarrier2(d, s); +} + +void vkb_encfix_VkImageMemoryRequirementsInfo2(vkb_enc *e, const VkImageMemoryRequirementsInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageMemoryRequirementsInfo2(vkb_enc *e, const VkImageMemoryRequirementsInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageMemoryRequirementsInfo2(e, s, raw); +} + +void vkb_decfix_VkImageMemoryRequirementsInfo2(vkb_dec *d, VkImageMemoryRequirementsInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageMemoryRequirementsInfo2(vkb_dec *d, VkImageMemoryRequirementsInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageMemoryRequirementsInfo2(d, s); +} + +void vkb_encfix_VkImagePlaneMemoryRequirementsInfo(vkb_enc *e, const VkImagePlaneMemoryRequirementsInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImagePlaneMemoryRequirementsInfo(vkb_enc *e, const VkImagePlaneMemoryRequirementsInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImagePlaneMemoryRequirementsInfo(e, s, raw); +} + +void vkb_decfix_VkImagePlaneMemoryRequirementsInfo(vkb_dec *d, VkImagePlaneMemoryRequirementsInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImagePlaneMemoryRequirementsInfo(vkb_dec *d, VkImagePlaneMemoryRequirementsInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImagePlaneMemoryRequirementsInfo(d, s); +} + +void vkb_encfix_VkImageResolve2(vkb_enc *e, const VkImageResolve2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageResolve2(vkb_enc *e, const VkImageResolve2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageResolve2(e, s, raw); +} + +void vkb_decfix_VkImageResolve2(vkb_dec *d, VkImageResolve2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageResolve2(vkb_dec *d, VkImageResolve2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageResolve2(d, s); +} + +void vkb_encfix_VkImageSparseMemoryRequirementsInfo2(vkb_enc *e, const VkImageSparseMemoryRequirementsInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageSparseMemoryRequirementsInfo2(vkb_enc *e, const VkImageSparseMemoryRequirementsInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageSparseMemoryRequirementsInfo2(e, s, raw); +} + +void vkb_decfix_VkImageSparseMemoryRequirementsInfo2(vkb_dec *d, VkImageSparseMemoryRequirementsInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageSparseMemoryRequirementsInfo2(vkb_dec *d, VkImageSparseMemoryRequirementsInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageSparseMemoryRequirementsInfo2(d, s); +} + +void vkb_encfix_VkImageStencilUsageCreateInfo(vkb_enc *e, const VkImageStencilUsageCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageStencilUsageCreateInfo(vkb_enc *e, const VkImageStencilUsageCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageStencilUsageCreateInfo(e, s, raw); +} + +void vkb_decfix_VkImageStencilUsageCreateInfo(vkb_dec *d, VkImageStencilUsageCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageStencilUsageCreateInfo(vkb_dec *d, VkImageStencilUsageCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageStencilUsageCreateInfo(d, s); +} + +void vkb_encfix_VkImageSubresource2(vkb_enc *e, const VkImageSubresource2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageSubresource2(vkb_enc *e, const VkImageSubresource2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageSubresource2(e, s, raw); +} + +void vkb_decfix_VkImageSubresource2(vkb_dec *d, VkImageSubresource2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageSubresource2(vkb_dec *d, VkImageSubresource2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageSubresource2(d, s); +} + +void vkb_encfix_VkImageSwapchainCreateInfoKHR(vkb_enc *e, const VkImageSwapchainCreateInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageSwapchainCreateInfoKHR(vkb_enc *e, const VkImageSwapchainCreateInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageSwapchainCreateInfoKHR(e, s, raw); +} + +void vkb_decfix_VkImageSwapchainCreateInfoKHR(vkb_dec *d, VkImageSwapchainCreateInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageSwapchainCreateInfoKHR(vkb_dec *d, VkImageSwapchainCreateInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageSwapchainCreateInfoKHR(d, s); +} + +void vkb_encfix_VkImageViewASTCDecodeModeEXT(vkb_enc *e, const VkImageViewASTCDecodeModeEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageViewASTCDecodeModeEXT(vkb_enc *e, const VkImageViewASTCDecodeModeEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageViewASTCDecodeModeEXT(e, s, raw); +} + +void vkb_decfix_VkImageViewASTCDecodeModeEXT(vkb_dec *d, VkImageViewASTCDecodeModeEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageViewASTCDecodeModeEXT(vkb_dec *d, VkImageViewASTCDecodeModeEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageViewASTCDecodeModeEXT(d, s); +} + +void vkb_encfix_VkImageViewCreateInfo(vkb_enc *e, const VkImageViewCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageViewCreateInfo(vkb_enc *e, const VkImageViewCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageViewCreateInfo(e, s, raw); +} + +void vkb_decfix_VkImageViewCreateInfo(vkb_dec *d, VkImageViewCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageViewCreateInfo(vkb_dec *d, VkImageViewCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageViewCreateInfo(d, s); +} + +void vkb_encfix_VkImageViewMinLodCreateInfoEXT(vkb_enc *e, const VkImageViewMinLodCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageViewMinLodCreateInfoEXT(vkb_enc *e, const VkImageViewMinLodCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageViewMinLodCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkImageViewMinLodCreateInfoEXT(vkb_dec *d, VkImageViewMinLodCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageViewMinLodCreateInfoEXT(vkb_dec *d, VkImageViewMinLodCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageViewMinLodCreateInfoEXT(d, s); +} + +void vkb_encfix_VkImageViewSlicedCreateInfoEXT(vkb_enc *e, const VkImageViewSlicedCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageViewSlicedCreateInfoEXT(vkb_enc *e, const VkImageViewSlicedCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageViewSlicedCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkImageViewSlicedCreateInfoEXT(vkb_dec *d, VkImageViewSlicedCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageViewSlicedCreateInfoEXT(vkb_dec *d, VkImageViewSlicedCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageViewSlicedCreateInfoEXT(d, s); +} + +void vkb_encfix_VkImageViewUsageCreateInfo(vkb_enc *e, const VkImageViewUsageCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkImageViewUsageCreateInfo(vkb_enc *e, const VkImageViewUsageCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImageViewUsageCreateInfo(e, s, raw); +} + +void vkb_decfix_VkImageViewUsageCreateInfo(vkb_dec *d, VkImageViewUsageCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkImageViewUsageCreateInfo(vkb_dec *d, VkImageViewUsageCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImageViewUsageCreateInfo(d, s); +} + +void vkb_encfix_VkImportFenceFdInfoKHR(vkb_enc *e, const VkImportFenceFdInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_fd(e, s->fd); +} + +void vkb_enc_VkImportFenceFdInfoKHR(vkb_enc *e, const VkImportFenceFdInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImportFenceFdInfoKHR(e, s, raw); +} + +void vkb_decfix_VkImportFenceFdInfoKHR(vkb_dec *d, VkImportFenceFdInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->fd = vkb_dec_fd(d); +} + +void vkb_dec_VkImportFenceFdInfoKHR(vkb_dec *d, VkImportFenceFdInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImportFenceFdInfoKHR(d, s); +} + +void vkb_encfix_VkImportMemoryFdInfoKHR(vkb_enc *e, const VkImportMemoryFdInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_fd(e, s->fd); +} + +void vkb_enc_VkImportMemoryFdInfoKHR(vkb_enc *e, const VkImportMemoryFdInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImportMemoryFdInfoKHR(e, s, raw); +} + +void vkb_decfix_VkImportMemoryFdInfoKHR(vkb_dec *d, VkImportMemoryFdInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->fd = vkb_dec_fd(d); +} + +void vkb_dec_VkImportMemoryFdInfoKHR(vkb_dec *d, VkImportMemoryFdInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImportMemoryFdInfoKHR(d, s); +} + +void vkb_encfix_VkImportSemaphoreFdInfoKHR(vkb_enc *e, const VkImportSemaphoreFdInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_fd(e, s->fd); +} + +void vkb_enc_VkImportSemaphoreFdInfoKHR(vkb_enc *e, const VkImportSemaphoreFdInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkImportSemaphoreFdInfoKHR(e, s, raw); +} + +void vkb_decfix_VkImportSemaphoreFdInfoKHR(vkb_dec *d, VkImportSemaphoreFdInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->fd = vkb_dec_fd(d); +} + +void vkb_dec_VkImportSemaphoreFdInfoKHR(vkb_dec *d, VkImportSemaphoreFdInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkImportSemaphoreFdInfoKHR(d, s); +} + +void vkb_encfix_VkInstanceCreateInfo(vkb_enc *e, const VkInstanceCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pApplicationInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkApplicationInfo(e, &s->pApplicationInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_strarray(e, s->ppEnabledLayerNames ? s->ppEnabledLayerNames : NULL, s->ppEnabledLayerNames ? (uint32_t)(s->enabledLayerCount) : 0); + vkb_enc_strarray(e, s->ppEnabledExtensionNames ? s->ppEnabledExtensionNames : NULL, s->ppEnabledExtensionNames ? (uint32_t)(s->enabledExtensionCount) : 0); +} + +void vkb_enc_VkInstanceCreateInfo(vkb_enc *e, const VkInstanceCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkInstanceCreateInfo(e, s, raw); +} + +void vkb_decfix_VkInstanceCreateInfo(vkb_dec *d, VkInstanceCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkApplicationInfo *a_ = (VkApplicationInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkApplicationInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkApplicationInfo(d, &a_[i_]); + s->pApplicationInfo = a_; + } else { + s->pApplicationInfo = NULL; + } + s->ppEnabledLayerNames = vkb_dec_strarray(d); + s->ppEnabledExtensionNames = vkb_dec_strarray(d); +} + +void vkb_dec_VkInstanceCreateInfo(vkb_dec *d, VkInstanceCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkInstanceCreateInfo(d, s); +} + +void vkb_encfix_VkMappedMemoryRange(vkb_enc *e, const VkMappedMemoryRange *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMappedMemoryRange(vkb_enc *e, const VkMappedMemoryRange *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMappedMemoryRange(e, s, raw); +} + +void vkb_decfix_VkMappedMemoryRange(vkb_dec *d, VkMappedMemoryRange *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMappedMemoryRange(vkb_dec *d, VkMappedMemoryRange *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMappedMemoryRange(d, s); +} + +void vkb_encfix_VkMemoryAllocateFlagsInfo(vkb_enc *e, const VkMemoryAllocateFlagsInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryAllocateFlagsInfo(vkb_enc *e, const VkMemoryAllocateFlagsInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryAllocateFlagsInfo(e, s, raw); +} + +void vkb_decfix_VkMemoryAllocateFlagsInfo(vkb_dec *d, VkMemoryAllocateFlagsInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryAllocateFlagsInfo(vkb_dec *d, VkMemoryAllocateFlagsInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryAllocateFlagsInfo(d, s); +} + +void vkb_encfix_VkMemoryAllocateInfo(vkb_enc *e, const VkMemoryAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryAllocateInfo(vkb_enc *e, const VkMemoryAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkMemoryAllocateInfo(vkb_dec *d, VkMemoryAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryAllocateInfo(vkb_dec *d, VkMemoryAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryAllocateInfo(d, s); +} + +void vkb_encfix_VkMemoryBarrier(vkb_enc *e, const VkMemoryBarrier *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryBarrier(vkb_enc *e, const VkMemoryBarrier *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryBarrier(e, s, raw); +} + +void vkb_decfix_VkMemoryBarrier(vkb_dec *d, VkMemoryBarrier *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryBarrier(vkb_dec *d, VkMemoryBarrier *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryBarrier(d, s); +} + +void vkb_encfix_VkMemoryBarrier2(vkb_enc *e, const VkMemoryBarrier2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryBarrier2(vkb_enc *e, const VkMemoryBarrier2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryBarrier2(e, s, raw); +} + +void vkb_decfix_VkMemoryBarrier2(vkb_dec *d, VkMemoryBarrier2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryBarrier2(vkb_dec *d, VkMemoryBarrier2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryBarrier2(d, s); +} + +void vkb_encfix_VkMemoryBarrierAccessFlags3KHR(vkb_enc *e, const VkMemoryBarrierAccessFlags3KHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryBarrierAccessFlags3KHR(vkb_enc *e, const VkMemoryBarrierAccessFlags3KHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryBarrierAccessFlags3KHR(e, s, raw); +} + +void vkb_decfix_VkMemoryBarrierAccessFlags3KHR(vkb_dec *d, VkMemoryBarrierAccessFlags3KHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryBarrierAccessFlags3KHR(vkb_dec *d, VkMemoryBarrierAccessFlags3KHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryBarrierAccessFlags3KHR(d, s); +} + +void vkb_encfix_VkMemoryDedicatedAllocateInfo(vkb_enc *e, const VkMemoryDedicatedAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryDedicatedAllocateInfo(vkb_enc *e, const VkMemoryDedicatedAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryDedicatedAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkMemoryDedicatedAllocateInfo(vkb_dec *d, VkMemoryDedicatedAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryDedicatedAllocateInfo(vkb_dec *d, VkMemoryDedicatedAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryDedicatedAllocateInfo(d, s); +} + +void vkb_encfix_VkMemoryDedicatedAllocateInfoTensorARM(vkb_enc *e, const VkMemoryDedicatedAllocateInfoTensorARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryDedicatedAllocateInfoTensorARM(vkb_enc *e, const VkMemoryDedicatedAllocateInfoTensorARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryDedicatedAllocateInfoTensorARM(e, s, raw); +} + +void vkb_decfix_VkMemoryDedicatedAllocateInfoTensorARM(vkb_dec *d, VkMemoryDedicatedAllocateInfoTensorARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryDedicatedAllocateInfoTensorARM(vkb_dec *d, VkMemoryDedicatedAllocateInfoTensorARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryDedicatedAllocateInfoTensorARM(d, s); +} + +void vkb_encfix_VkMemoryDedicatedRequirements(vkb_enc *e, const VkMemoryDedicatedRequirements *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryDedicatedRequirements(vkb_enc *e, const VkMemoryDedicatedRequirements *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryDedicatedRequirements(e, s, raw); +} + +void vkb_decfix_VkMemoryDedicatedRequirements(vkb_dec *d, VkMemoryDedicatedRequirements *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryDedicatedRequirements(vkb_dec *d, VkMemoryDedicatedRequirements *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryDedicatedRequirements(d, s); +} + +void vkb_encfix_VkMemoryFdPropertiesKHR(vkb_enc *e, const VkMemoryFdPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryFdPropertiesKHR(vkb_enc *e, const VkMemoryFdPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryFdPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkMemoryFdPropertiesKHR(vkb_dec *d, VkMemoryFdPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryFdPropertiesKHR(vkb_dec *d, VkMemoryFdPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryFdPropertiesKHR(d, s); +} + +void vkb_encfix_VkMemoryGetFdInfoKHR(vkb_enc *e, const VkMemoryGetFdInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryGetFdInfoKHR(vkb_enc *e, const VkMemoryGetFdInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryGetFdInfoKHR(e, s, raw); +} + +void vkb_decfix_VkMemoryGetFdInfoKHR(vkb_dec *d, VkMemoryGetFdInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryGetFdInfoKHR(vkb_dec *d, VkMemoryGetFdInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryGetFdInfoKHR(d, s); +} + +void vkb_encfix_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_enc *e, const VkMemoryOpaqueCaptureAddressAllocateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_enc *e, const VkMemoryOpaqueCaptureAddressAllocateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryOpaqueCaptureAddressAllocateInfo(e, s, raw); +} + +void vkb_decfix_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_dec *d, VkMemoryOpaqueCaptureAddressAllocateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryOpaqueCaptureAddressAllocateInfo(vkb_dec *d, VkMemoryOpaqueCaptureAddressAllocateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryOpaqueCaptureAddressAllocateInfo(d, s); +} + +void vkb_encfix_VkMemoryPriorityAllocateInfoEXT(vkb_enc *e, const VkMemoryPriorityAllocateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryPriorityAllocateInfoEXT(vkb_enc *e, const VkMemoryPriorityAllocateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryPriorityAllocateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkMemoryPriorityAllocateInfoEXT(vkb_dec *d, VkMemoryPriorityAllocateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryPriorityAllocateInfoEXT(vkb_dec *d, VkMemoryPriorityAllocateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryPriorityAllocateInfoEXT(d, s); +} + +void vkb_encfix_VkMemoryRequirements2(vkb_enc *e, const VkMemoryRequirements2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMemoryRequirements2(vkb_enc *e, const VkMemoryRequirements2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMemoryRequirements2(e, s, raw); +} + +void vkb_decfix_VkMemoryRequirements2(vkb_dec *d, VkMemoryRequirements2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMemoryRequirements2(vkb_dec *d, VkMemoryRequirements2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMemoryRequirements2(d, s); +} + +void vkb_encfix_VkMultisamplePropertiesEXT(vkb_enc *e, const VkMultisamplePropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMultisamplePropertiesEXT(vkb_enc *e, const VkMultisamplePropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMultisamplePropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkMultisamplePropertiesEXT(vkb_dec *d, VkMultisamplePropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMultisamplePropertiesEXT(vkb_dec *d, VkMultisamplePropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMultisamplePropertiesEXT(d, s); +} + +void vkb_encfix_VkMultisampledRenderToSingleSampledInfoEXT(vkb_enc *e, const VkMultisampledRenderToSingleSampledInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkMultisampledRenderToSingleSampledInfoEXT(vkb_enc *e, const VkMultisampledRenderToSingleSampledInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMultisampledRenderToSingleSampledInfoEXT(e, s, raw); +} + +void vkb_decfix_VkMultisampledRenderToSingleSampledInfoEXT(vkb_dec *d, VkMultisampledRenderToSingleSampledInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkMultisampledRenderToSingleSampledInfoEXT(vkb_dec *d, VkMultisampledRenderToSingleSampledInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMultisampledRenderToSingleSampledInfoEXT(d, s); +} + +void vkb_encfix_VkMutableDescriptorTypeCreateInfoEXT(vkb_enc *e, const VkMutableDescriptorTypeCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pMutableDescriptorTypeLists) { + uint32_t n_ = (uint32_t)(s->mutableDescriptorTypeListCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkMutableDescriptorTypeListEXT(e, &s->pMutableDescriptorTypeLists[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkMutableDescriptorTypeCreateInfoEXT(vkb_enc *e, const VkMutableDescriptorTypeCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMutableDescriptorTypeCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkMutableDescriptorTypeCreateInfoEXT(vkb_dec *d, VkMutableDescriptorTypeCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkMutableDescriptorTypeListEXT *a_ = (VkMutableDescriptorTypeListEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkMutableDescriptorTypeListEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkMutableDescriptorTypeListEXT(d, &a_[i_]); + s->pMutableDescriptorTypeLists = a_; + } else { + s->pMutableDescriptorTypeLists = NULL; + } +} + +void vkb_dec_VkMutableDescriptorTypeCreateInfoEXT(vkb_dec *d, VkMutableDescriptorTypeCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMutableDescriptorTypeCreateInfoEXT(d, s); +} + +void vkb_encfix_VkMutableDescriptorTypeListEXT(vkb_enc *e, const VkMutableDescriptorTypeListEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pDescriptorTypes) { + uint32_t n_ = (uint32_t)(s->descriptorTypeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDescriptorTypes, (size_t)n_ * sizeof(*s->pDescriptorTypes)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkMutableDescriptorTypeListEXT(vkb_enc *e, const VkMutableDescriptorTypeListEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkMutableDescriptorTypeListEXT(e, s, raw); +} + +void vkb_decfix_VkMutableDescriptorTypeListEXT(vkb_dec *d, VkMutableDescriptorTypeListEXT *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDescriptorTypes = (const VkDescriptorType *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorType)); + } else { + s->pDescriptorTypes = NULL; + } +} + +void vkb_dec_VkMutableDescriptorTypeListEXT(vkb_dec *d, VkMutableDescriptorTypeListEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkMutableDescriptorTypeListEXT(d, s); +} + +void vkb_encfix_VkPerformanceCounterARM(vkb_enc *e, const VkPerformanceCounterARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPerformanceCounterARM(vkb_enc *e, const VkPerformanceCounterARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPerformanceCounterARM(e, s, raw); +} + +void vkb_decfix_VkPerformanceCounterARM(vkb_dec *d, VkPerformanceCounterARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPerformanceCounterARM(vkb_dec *d, VkPerformanceCounterARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPerformanceCounterARM(d, s); +} + +void vkb_encfix_VkPerformanceCounterDescriptionARM(vkb_enc *e, const VkPerformanceCounterDescriptionARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPerformanceCounterDescriptionARM(vkb_enc *e, const VkPerformanceCounterDescriptionARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPerformanceCounterDescriptionARM(e, s, raw); +} + +void vkb_decfix_VkPerformanceCounterDescriptionARM(vkb_dec *d, VkPerformanceCounterDescriptionARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPerformanceCounterDescriptionARM(vkb_dec *d, VkPerformanceCounterDescriptionARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPerformanceCounterDescriptionARM(d, s); +} + +void vkb_encfix_VkPhysicalDevice16BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice16BitStorageFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevice16BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice16BitStorageFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevice16BitStorageFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevice16BitStorageFeatures(vkb_dec *d, VkPhysicalDevice16BitStorageFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevice16BitStorageFeatures(vkb_dec *d, VkPhysicalDevice16BitStorageFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevice16BitStorageFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDevice4444FormatsFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDevice4444FormatsFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevice4444FormatsFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDevice4444FormatsFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevice4444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDevice4444FormatsFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevice4444FormatsFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevice8BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice8BitStorageFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevice8BitStorageFeatures(vkb_enc *e, const VkPhysicalDevice8BitStorageFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevice8BitStorageFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevice8BitStorageFeatures(vkb_dec *d, VkPhysicalDevice8BitStorageFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevice8BitStorageFeatures(vkb_dec *d, VkPhysicalDevice8BitStorageFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevice8BitStorageFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceASTCDecodeFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceASTCDecodeFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceASTCDecodeFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceASTCDecodeFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceASTCDecodeFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceASTCDecodeFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(vkb_dec *d, VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceBufferDeviceAddressFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceBufferDeviceAddressFeatures(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceBufferDeviceAddressFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkb_dec *d, VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceColorWriteEnableFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceColorWriteEnableFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceColorWriteEnableFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceColorWriteEnableFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceColorWriteEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceColorWriteEnableFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceColorWriteEnableFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(vkb_dec *d, VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceConditionalRenderingFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceConditionalRenderingFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceConditionalRenderingFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceConditionalRenderingFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceConditionalRenderingFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceConditionalRenderingFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_dec *d, VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkb_dec *d, VkPhysicalDeviceConservativeRasterizationPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_dec *d, VkPhysicalDeviceCooperativeMatrixPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceCustomBorderColorFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceCustomBorderColorFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceCustomBorderColorPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceCustomBorderColorPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceCustomBorderColorPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceCustomBorderColorPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomResolveFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceCustomResolveFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceCustomResolveFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomResolveFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceCustomResolveFeaturesEXT(vkb_dec *d, VkPhysicalDeviceCustomResolveFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceCustomResolveFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthBiasControlFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthBiasControlFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDepthBiasControlFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthBiasControlFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDepthBiasControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthBiasControlFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDepthBiasControlFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClampControlFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClampControlFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDepthClampControlFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClampControlFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDepthClampControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClampControlFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDepthClampControlFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_dec *d, VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(vkb_dec *d, VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipControlFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipControlFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDepthClipControlFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipControlFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDepthClipControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipControlFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDepthClipControlFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipEnableFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDepthClipEnableFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDepthClipEnableFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipEnableFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDepthClipEnableFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDepthClipEnableFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDepthStencilResolveProperties(vkb_enc *e, const VkPhysicalDeviceDepthStencilResolveProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDepthStencilResolveProperties(vkb_enc *e, const VkPhysicalDeviceDepthStencilResolveProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDepthStencilResolveProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDepthStencilResolveProperties(vkb_dec *d, VkPhysicalDeviceDepthStencilResolveProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDepthStencilResolveProperties(vkb_dec *d, VkPhysicalDeviceDepthStencilResolveProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDepthStencilResolveProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDescriptorIndexingFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDescriptorIndexingFeatures(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDescriptorIndexingFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDescriptorIndexingProperties(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDescriptorIndexingProperties(vkb_enc *e, const VkPhysicalDeviceDescriptorIndexingProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDescriptorIndexingProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDescriptorIndexingProperties(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDescriptorIndexingProperties(vkb_dec *d, VkPhysicalDeviceDescriptorIndexingProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDescriptorIndexingProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDiscardRectanglePropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDiscardRectanglePropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDiscardRectanglePropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_dec *d, VkPhysicalDeviceDiscardRectanglePropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkb_dec *d, VkPhysicalDeviceDiscardRectanglePropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDiscardRectanglePropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDriverProperties(vkb_enc *e, const VkPhysicalDeviceDriverProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDriverProperties(vkb_enc *e, const VkPhysicalDeviceDriverProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDriverProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDriverProperties(vkb_dec *d, VkPhysicalDeviceDriverProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDriverProperties(vkb_dec *d, VkPhysicalDeviceDriverProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDriverProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDrmPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDrmPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDrmPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceDrmPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDrmPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDrmPropertiesEXT(vkb_dec *d, VkPhysicalDeviceDrmPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDrmPropertiesEXT(vkb_dec *d, VkPhysicalDeviceDrmPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDrmPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDynamicRenderingFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDynamicRenderingFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDynamicRenderingFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDynamicRenderingFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDynamicRenderingFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDynamicRenderingFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(vkb_dec *d, VkPhysicalDeviceDynamicRenderingLocalReadFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExternalBufferInfo(vkb_enc *e, const VkPhysicalDeviceExternalBufferInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExternalBufferInfo(vkb_enc *e, const VkPhysicalDeviceExternalBufferInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExternalBufferInfo(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExternalBufferInfo(vkb_dec *d, VkPhysicalDeviceExternalBufferInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExternalBufferInfo(vkb_dec *d, VkPhysicalDeviceExternalBufferInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExternalBufferInfo(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExternalFenceInfo(vkb_enc *e, const VkPhysicalDeviceExternalFenceInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExternalFenceInfo(vkb_enc *e, const VkPhysicalDeviceExternalFenceInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExternalFenceInfo(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExternalFenceInfo(vkb_dec *d, VkPhysicalDeviceExternalFenceInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExternalFenceInfo(vkb_dec *d, VkPhysicalDeviceExternalFenceInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExternalFenceInfo(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExternalImageFormatInfo(vkb_enc *e, const VkPhysicalDeviceExternalImageFormatInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExternalImageFormatInfo(vkb_enc *e, const VkPhysicalDeviceExternalImageFormatInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExternalImageFormatInfo(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExternalImageFormatInfo(vkb_dec *d, VkPhysicalDeviceExternalImageFormatInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExternalImageFormatInfo(vkb_dec *d, VkPhysicalDeviceExternalImageFormatInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExternalImageFormatInfo(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExternalSemaphoreInfo(vkb_enc *e, const VkPhysicalDeviceExternalSemaphoreInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceExternalSemaphoreInfo(vkb_enc *e, const VkPhysicalDeviceExternalSemaphoreInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExternalSemaphoreInfo(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExternalSemaphoreInfo(vkb_dec *d, VkPhysicalDeviceExternalSemaphoreInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceExternalSemaphoreInfo(vkb_dec *d, VkPhysicalDeviceExternalSemaphoreInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExternalSemaphoreInfo(d, s); +} + +void vkb_encfix_VkPhysicalDeviceExternalTensorInfoARM(vkb_enc *e, const VkPhysicalDeviceExternalTensorInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDescription) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorDescriptionARM(e, &s->pDescription[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPhysicalDeviceExternalTensorInfoARM(vkb_enc *e, const VkPhysicalDeviceExternalTensorInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceExternalTensorInfoARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceExternalTensorInfoARM(vkb_dec *d, VkPhysicalDeviceExternalTensorInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorDescriptionARM *a_ = (VkTensorDescriptionARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorDescriptionARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorDescriptionARM(d, &a_[i_]); + s->pDescription = a_; + } else { + s->pDescription = NULL; + } +} + +void vkb_dec_VkPhysicalDeviceExternalTensorInfoARM(vkb_dec *d, VkPhysicalDeviceExternalTensorInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceExternalTensorInfoARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFeatures2(vkb_enc *e, const VkPhysicalDeviceFeatures2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFeatures2(vkb_enc *e, const VkPhysicalDeviceFeatures2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFeatures2(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFeatures2(vkb_dec *d, VkPhysicalDeviceFeatures2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFeatures2(vkb_dec *d, VkPhysicalDeviceFeatures2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFeatures2(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFloatControlsProperties(vkb_enc *e, const VkPhysicalDeviceFloatControlsProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFloatControlsProperties(vkb_enc *e, const VkPhysicalDeviceFloatControlsProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFloatControlsProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFloatControlsProperties(vkb_dec *d, VkPhysicalDeviceFloatControlsProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFloatControlsProperties(vkb_dec *d, VkPhysicalDeviceFloatControlsProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFloatControlsProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFormatPackFeaturesARM(vkb_enc *e, const VkPhysicalDeviceFormatPackFeaturesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFormatPackFeaturesARM(vkb_enc *e, const VkPhysicalDeviceFormatPackFeaturesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFormatPackFeaturesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFormatPackFeaturesARM(vkb_dec *d, VkPhysicalDeviceFormatPackFeaturesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFormatPackFeaturesARM(vkb_dec *d, VkPhysicalDeviceFormatPackFeaturesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFormatPackFeaturesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkb_dec *d, VkPhysicalDeviceFragmentDensityMapPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkb_dec *d, VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentShadingRateKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentShadingRateKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRateKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentShadingRateKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentShadingRateKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentShadingRateKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRateKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentShadingRateKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_enc *e, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkb_dec *d, VkPhysicalDeviceFragmentShadingRatePropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_enc *e, const VkPhysicalDeviceGlobalPriorityQueryFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_enc *e, const VkPhysicalDeviceGlobalPriorityQueryFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceGlobalPriorityQueryFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_dec *d, VkPhysicalDeviceGlobalPriorityQueryFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceGlobalPriorityQueryFeatures(vkb_dec *d, VkPhysicalDeviceGlobalPriorityQueryFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceGlobalPriorityQueryFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(vkb_dec *d, VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceGroupProperties(vkb_enc *e, const VkPhysicalDeviceGroupProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + for (size_t i_ = 0; i_ < sizeof(s->physicalDevices) / sizeof(s->physicalDevices[0]); i_++) vkb_enc_patch_u64(e, raw + offsetof(VkPhysicalDeviceGroupProperties, physicalDevices) + i_ * 8, vkb_remote((const void *)s->physicalDevices[i_])); +} + +void vkb_enc_VkPhysicalDeviceGroupProperties(vkb_enc *e, const VkPhysicalDeviceGroupProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceGroupProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceGroupProperties(vkb_dec *d, VkPhysicalDeviceGroupProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceGroupProperties(vkb_dec *d, VkPhysicalDeviceGroupProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceGroupProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceHostImageCopyFeatures(vkb_enc *e, const VkPhysicalDeviceHostImageCopyFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceHostImageCopyFeatures(vkb_enc *e, const VkPhysicalDeviceHostImageCopyFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceHostImageCopyFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceHostImageCopyFeatures(vkb_dec *d, VkPhysicalDeviceHostImageCopyFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceHostImageCopyFeatures(vkb_dec *d, VkPhysicalDeviceHostImageCopyFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceHostImageCopyFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceHostImageCopyProperties(vkb_enc *e, const VkPhysicalDeviceHostImageCopyProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCopySrcLayouts) { + uint32_t n_ = (uint32_t)(s->copySrcLayoutCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCopySrcLayouts, (size_t)n_ * sizeof(*s->pCopySrcLayouts)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCopyDstLayouts) { + uint32_t n_ = (uint32_t)(s->copyDstLayoutCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCopyDstLayouts, (size_t)n_ * sizeof(*s->pCopyDstLayouts)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPhysicalDeviceHostImageCopyProperties(vkb_enc *e, const VkPhysicalDeviceHostImageCopyProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceHostImageCopyProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceHostImageCopyProperties(vkb_dec *d, VkPhysicalDeviceHostImageCopyProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCopySrcLayouts = (VkImageLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageLayout)); + } else { + s->pCopySrcLayouts = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCopyDstLayouts = (VkImageLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageLayout)); + } else { + s->pCopyDstLayouts = NULL; + } +} + +void vkb_dec_VkPhysicalDeviceHostImageCopyProperties(vkb_dec *d, VkPhysicalDeviceHostImageCopyProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceHostImageCopyProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceHostQueryResetFeatures(vkb_enc *e, const VkPhysicalDeviceHostQueryResetFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceHostQueryResetFeatures(vkb_enc *e, const VkPhysicalDeviceHostQueryResetFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceHostQueryResetFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceHostQueryResetFeatures(vkb_dec *d, VkPhysicalDeviceHostQueryResetFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceHostQueryResetFeatures(vkb_dec *d, VkPhysicalDeviceHostQueryResetFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceHostQueryResetFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceIDProperties(vkb_enc *e, const VkPhysicalDeviceIDProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceIDProperties(vkb_enc *e, const VkPhysicalDeviceIDProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceIDProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceIDProperties(vkb_dec *d, VkPhysicalDeviceIDProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceIDProperties(vkb_dec *d, VkPhysicalDeviceIDProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceIDProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlFeaturesMESA *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_enc *e, const VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(vkb_dec *d, VkPhysicalDeviceImageAlignmentControlPropertiesMESA *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageCompressionControlFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageCompressionControlFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageCompressionControlFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageCompressionControlFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageCompressionControlFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageCompressionControlFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageCompressionControlFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pQueueFamilyIndices && (s->sharingMode == VK_SHARING_MODE_CONCURRENT)) { + uint32_t n_ = (uint32_t)(s->queueFamilyIndexCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pQueueFamilyIndices, (size_t)n_ * sizeof(*s->pQueueFamilyIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_dec *d, VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pQueueFamilyIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pQueueFamilyIndices = NULL; + } +} + +void vkb_dec_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkb_dec *d, VkPhysicalDeviceImageDrmFormatModifierInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceImageFormatInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceImageFormatInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageFormatInfo2(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceImageFormatInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceImageFormatInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageFormatInfo2(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageRobustnessFeatures(vkb_enc *e, const VkPhysicalDeviceImageRobustnessFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageRobustnessFeatures(vkb_enc *e, const VkPhysicalDeviceImageRobustnessFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageRobustnessFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageRobustnessFeatures(vkb_dec *d, VkPhysicalDeviceImageRobustnessFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageRobustnessFeatures(vkb_dec *d, VkPhysicalDeviceImageRobustnessFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageRobustnessFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageViewImageFormatInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_enc *e, const VkPhysicalDeviceImageViewImageFormatInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageViewImageFormatInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_dec *d, VkPhysicalDeviceImageViewImageFormatInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkb_dec *d, VkPhysicalDeviceImageViewImageFormatInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageViewImageFormatInfoEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageViewMinLodFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceImageViewMinLodFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImageViewMinLodFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageViewMinLodFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImageViewMinLodFeaturesEXT(vkb_dec *d, VkPhysicalDeviceImageViewMinLodFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImageViewMinLodFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_enc *e, const VkPhysicalDeviceImagelessFramebufferFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_enc *e, const VkPhysicalDeviceImagelessFramebufferFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceImagelessFramebufferFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_dec *d, VkPhysicalDeviceImagelessFramebufferFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceImagelessFramebufferFeatures(vkb_dec *d, VkPhysicalDeviceImagelessFramebufferFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceImagelessFramebufferFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceIndexTypeUint8Features(vkb_enc *e, const VkPhysicalDeviceIndexTypeUint8Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceIndexTypeUint8Features(vkb_enc *e, const VkPhysicalDeviceIndexTypeUint8Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceIndexTypeUint8Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceIndexTypeUint8Features(vkb_dec *d, VkPhysicalDeviceIndexTypeUint8Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceIndexTypeUint8Features(vkb_dec *d, VkPhysicalDeviceIndexTypeUint8Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceIndexTypeUint8Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceInlineUniformBlockFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceInlineUniformBlockFeatures(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceInlineUniformBlockFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceInlineUniformBlockProperties(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceInlineUniformBlockProperties(vkb_enc *e, const VkPhysicalDeviceInlineUniformBlockProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceInlineUniformBlockProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceInlineUniformBlockProperties(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceInlineUniformBlockProperties(vkb_dec *d, VkPhysicalDeviceInlineUniformBlockProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceInlineUniformBlockProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(vkb_dec *d, VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLayeredApiPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceLayeredApiPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLayeredApiPropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesListKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pLayeredApis) { + uint32_t n_ = (uint32_t)(s->layeredApiCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkPhysicalDeviceLayeredApiPropertiesKHR(e, &s->pLayeredApis[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiPropertiesListKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLayeredApiPropertiesListKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesListKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkPhysicalDeviceLayeredApiPropertiesKHR *a_ = (VkPhysicalDeviceLayeredApiPropertiesKHR *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkPhysicalDeviceLayeredApiPropertiesKHR)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkPhysicalDeviceLayeredApiPropertiesKHR(d, &a_[i_]); + s->pLayeredApis = a_; + } else { + s->pLayeredApis = NULL; + } +} + +void vkb_dec_VkPhysicalDeviceLayeredApiPropertiesListKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiPropertiesListKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLayeredApiPropertiesListKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_encfix_VkPhysicalDeviceProperties2(e, &s->properties, raw + offsetof(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR, properties)); +} + +void vkb_enc_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_enc *e, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + vkb_decfix_VkPhysicalDeviceProperties2(d, &s->properties); +} + +void vkb_dec_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(vkb_dec *d, VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyDitheringFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyDitheringFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLegacyDitheringFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyDitheringFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceLegacyDitheringFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyDitheringFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLegacyDitheringFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(vkb_dec *d, VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLineRasterizationFeatures(vkb_enc *e, const VkPhysicalDeviceLineRasterizationFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceLineRasterizationFeatures(vkb_enc *e, const VkPhysicalDeviceLineRasterizationFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLineRasterizationFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLineRasterizationFeatures(vkb_dec *d, VkPhysicalDeviceLineRasterizationFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceLineRasterizationFeatures(vkb_dec *d, VkPhysicalDeviceLineRasterizationFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLineRasterizationFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceLineRasterizationProperties(vkb_enc *e, const VkPhysicalDeviceLineRasterizationProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceLineRasterizationProperties(vkb_enc *e, const VkPhysicalDeviceLineRasterizationProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceLineRasterizationProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceLineRasterizationProperties(vkb_dec *d, VkPhysicalDeviceLineRasterizationProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceLineRasterizationProperties(vkb_dec *d, VkPhysicalDeviceLineRasterizationProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceLineRasterizationProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10FeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10FeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance10FeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10FeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance10FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10FeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance10FeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10PropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance10PropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance10PropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10PropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance10PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance10PropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance10PropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance3Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance3Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance3Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance3Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance3Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance3Properties(vkb_dec *d, VkPhysicalDeviceMaintenance3Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance3Properties(vkb_dec *d, VkPhysicalDeviceMaintenance3Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance3Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance4Features(vkb_enc *e, const VkPhysicalDeviceMaintenance4Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance4Features(vkb_enc *e, const VkPhysicalDeviceMaintenance4Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance4Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance4Features(vkb_dec *d, VkPhysicalDeviceMaintenance4Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance4Features(vkb_dec *d, VkPhysicalDeviceMaintenance4Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance4Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance4Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance4Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance4Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance4Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance4Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance4Properties(vkb_dec *d, VkPhysicalDeviceMaintenance4Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance4Properties(vkb_dec *d, VkPhysicalDeviceMaintenance4Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance4Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance5Features(vkb_enc *e, const VkPhysicalDeviceMaintenance5Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance5Features(vkb_enc *e, const VkPhysicalDeviceMaintenance5Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance5Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance5Features(vkb_dec *d, VkPhysicalDeviceMaintenance5Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance5Features(vkb_dec *d, VkPhysicalDeviceMaintenance5Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance5Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance5Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance5Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance5Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance5Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance5Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance5Properties(vkb_dec *d, VkPhysicalDeviceMaintenance5Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance5Properties(vkb_dec *d, VkPhysicalDeviceMaintenance5Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance5Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance6Features(vkb_enc *e, const VkPhysicalDeviceMaintenance6Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance6Features(vkb_enc *e, const VkPhysicalDeviceMaintenance6Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance6Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance6Features(vkb_dec *d, VkPhysicalDeviceMaintenance6Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance6Features(vkb_dec *d, VkPhysicalDeviceMaintenance6Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance6Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance6Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance6Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance6Properties(vkb_enc *e, const VkPhysicalDeviceMaintenance6Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance6Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance6Properties(vkb_dec *d, VkPhysicalDeviceMaintenance6Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance6Properties(vkb_dec *d, VkPhysicalDeviceMaintenance6Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance6Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7FeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7FeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance7FeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7FeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance7FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7FeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance7FeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7PropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance7PropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance7PropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7PropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance7PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance7PropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance7PropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance8FeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance8FeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance8FeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance8FeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance8FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance8FeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance8FeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9FeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9FeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance9FeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9FeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance9FeaturesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9FeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance9FeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9PropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceMaintenance9PropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMaintenance9PropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9PropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMaintenance9PropertiesKHR(vkb_dec *d, VkPhysicalDeviceMaintenance9PropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMaintenance9PropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryBudgetPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryBudgetPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMemoryBudgetPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMemoryBudgetPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMemoryBudgetPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMemoryBudgetPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryPriorityFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMemoryPriorityFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMemoryPriorityFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMemoryPriorityFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMemoryPriorityFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMemoryPriorityFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMemoryProperties2(vkb_enc *e, const VkPhysicalDeviceMemoryProperties2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMemoryProperties2(vkb_enc *e, const VkPhysicalDeviceMemoryProperties2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMemoryProperties2(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMemoryProperties2(vkb_dec *d, VkPhysicalDeviceMemoryProperties2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMemoryProperties2(vkb_dec *d, VkPhysicalDeviceMemoryProperties2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMemoryProperties2(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMultiDrawFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMultiDrawFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMultiDrawFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceMultiDrawPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMultiDrawPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMultiDrawPropertiesEXT(vkb_dec *d, VkPhysicalDeviceMultiDrawPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMultiDrawPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMultiviewFeatures(vkb_enc *e, const VkPhysicalDeviceMultiviewFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMultiviewFeatures(vkb_enc *e, const VkPhysicalDeviceMultiviewFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMultiviewFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMultiviewFeatures(vkb_dec *d, VkPhysicalDeviceMultiviewFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMultiviewFeatures(vkb_dec *d, VkPhysicalDeviceMultiviewFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMultiviewFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMultiviewProperties(vkb_enc *e, const VkPhysicalDeviceMultiviewProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMultiviewProperties(vkb_enc *e, const VkPhysicalDeviceMultiviewProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMultiviewProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMultiviewProperties(vkb_dec *d, VkPhysicalDeviceMultiviewProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMultiviewProperties(vkb_dec *d, VkPhysicalDeviceMultiviewProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMultiviewProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(vkb_dec *d, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(vkb_dec *d, VkPhysicalDeviceNestedCommandBufferPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(vkb_dec *d, VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_enc *e, const VkPhysicalDevicePCIBusInfoPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_enc *e, const VkPhysicalDevicePCIBusInfoPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePCIBusInfoPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_dec *d, VkPhysicalDevicePCIBusInfoPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkb_dec *d, VkPhysicalDevicePCIBusInfoPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePCIBusInfoPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(d, s); +} + +void vkb_encfix_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_enc *e, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(vkb_dec *d, VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(d, s); +} + +void vkb_encfix_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_enc *e, const VkPhysicalDevicePipelineCreationCacheControlFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_enc *e, const VkPhysicalDevicePipelineCreationCacheControlFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePipelineCreationCacheControlFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_dec *d, VkPhysicalDevicePipelineCreationCacheControlFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePipelineCreationCacheControlFeatures(vkb_dec *d, VkPhysicalDevicePipelineCreationCacheControlFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePipelineCreationCacheControlFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineProtectedAccessFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineProtectedAccessFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePipelineProtectedAccessFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_dec *d, VkPhysicalDevicePipelineProtectedAccessFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePipelineProtectedAccessFeatures(vkb_dec *d, VkPhysicalDevicePipelineProtectedAccessFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePipelineProtectedAccessFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDevicePipelineRobustnessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePipelineRobustnessFeatures(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePipelineRobustnessFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePipelineRobustnessFeatures(vkb_dec *d, VkPhysicalDevicePipelineRobustnessFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePipelineRobustnessFeatures(vkb_dec *d, VkPhysicalDevicePipelineRobustnessFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePipelineRobustnessFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDevicePipelineRobustnessProperties(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePipelineRobustnessProperties(vkb_enc *e, const VkPhysicalDevicePipelineRobustnessProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePipelineRobustnessProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePipelineRobustnessProperties(vkb_dec *d, VkPhysicalDevicePipelineRobustnessProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePipelineRobustnessProperties(vkb_dec *d, VkPhysicalDevicePipelineRobustnessProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePipelineRobustnessProperties(d, s); +} + +void vkb_encfix_VkPhysicalDevicePointClippingProperties(vkb_enc *e, const VkPhysicalDevicePointClippingProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePointClippingProperties(vkb_enc *e, const VkPhysicalDevicePointClippingProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePointClippingProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePointClippingProperties(vkb_dec *d, VkPhysicalDevicePointClippingProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePointClippingProperties(vkb_dec *d, VkPhysicalDevicePointClippingProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePointClippingProperties(d, s); +} + +void vkb_encfix_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_enc *e, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_enc *e, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_dec *d, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(vkb_dec *d, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_enc *e, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(vkb_dec *d, VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevicePrivateDataFeatures(vkb_enc *e, const VkPhysicalDevicePrivateDataFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePrivateDataFeatures(vkb_enc *e, const VkPhysicalDevicePrivateDataFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePrivateDataFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePrivateDataFeatures(vkb_dec *d, VkPhysicalDevicePrivateDataFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePrivateDataFeatures(vkb_dec *d, VkPhysicalDevicePrivateDataFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePrivateDataFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceProperties2(vkb_enc *e, const VkPhysicalDeviceProperties2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceProperties2(vkb_enc *e, const VkPhysicalDeviceProperties2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceProperties2(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceProperties2(vkb_dec *d, VkPhysicalDeviceProperties2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceProperties2(vkb_dec *d, VkPhysicalDeviceProperties2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceProperties2(d, s); +} + +void vkb_encfix_VkPhysicalDeviceProtectedMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceProtectedMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceProtectedMemoryFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceProtectedMemoryFeatures(vkb_dec *d, VkPhysicalDeviceProtectedMemoryFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceProtectedMemoryFeatures(vkb_dec *d, VkPhysicalDeviceProtectedMemoryFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceProtectedMemoryFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceProtectedMemoryProperties(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceProtectedMemoryProperties(vkb_enc *e, const VkPhysicalDeviceProtectedMemoryProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceProtectedMemoryProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceProtectedMemoryProperties(vkb_dec *d, VkPhysicalDeviceProtectedMemoryProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceProtectedMemoryProperties(vkb_dec *d, VkPhysicalDeviceProtectedMemoryProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceProtectedMemoryProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceProvokingVertexFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceProvokingVertexFeaturesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceProvokingVertexFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceProvokingVertexPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceProvokingVertexPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceProvokingVertexPropertiesEXT(vkb_dec *d, VkPhysicalDeviceProvokingVertexPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceProvokingVertexPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDevicePushDescriptorProperties(vkb_enc *e, const VkPhysicalDevicePushDescriptorProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDevicePushDescriptorProperties(vkb_enc *e, const VkPhysicalDevicePushDescriptorProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDevicePushDescriptorProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDevicePushDescriptorProperties(vkb_dec *d, VkPhysicalDevicePushDescriptorProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDevicePushDescriptorProperties(vkb_dec *d, VkPhysicalDevicePushDescriptorProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDevicePushDescriptorProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_enc *e, const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_enc *e, const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_dec *d, VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(vkb_dec *d, VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedFeaturesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedFeaturesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRenderPassStripedFeaturesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedFeaturesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRenderPassStripedFeaturesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedFeaturesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRenderPassStripedFeaturesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_enc *e, const VkPhysicalDeviceRenderPassStripedPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRenderPassStripedPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRenderPassStripedPropertiesARM(vkb_dec *d, VkPhysicalDeviceRenderPassStripedPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRenderPassStripedPropertiesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2FeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2FeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRobustness2FeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2FeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRobustness2FeaturesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2FeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRobustness2FeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2PropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_enc *e, const VkPhysicalDeviceRobustness2PropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceRobustness2PropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2PropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceRobustness2PropertiesKHR(vkb_dec *d, VkPhysicalDeviceRobustness2PropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceRobustness2PropertiesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceSampleLocationsPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceSampleLocationsPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSampleLocationsPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_dec *d, VkPhysicalDeviceSampleLocationsPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkb_dec *d, VkPhysicalDeviceSampleLocationsPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSampleLocationsPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_enc *e, const VkPhysicalDeviceSamplerFilterMinmaxProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_enc *e, const VkPhysicalDeviceSamplerFilterMinmaxProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSamplerFilterMinmaxProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_dec *d, VkPhysicalDeviceSamplerFilterMinmaxProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkb_dec *d, VkPhysicalDeviceSamplerFilterMinmaxProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSamplerFilterMinmaxProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_enc *e, const VkPhysicalDeviceSamplerYcbcrConversionFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_enc *e, const VkPhysicalDeviceSamplerYcbcrConversionFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSamplerYcbcrConversionFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_dec *d, VkPhysicalDeviceSamplerYcbcrConversionFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkb_dec *d, VkPhysicalDeviceSamplerYcbcrConversionFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSamplerYcbcrConversionFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceScalarBlockLayoutFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceScalarBlockLayoutFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceScalarBlockLayoutFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_dec *d, VkPhysicalDeviceScalarBlockLayoutFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceScalarBlockLayoutFeatures(vkb_dec *d, VkPhysicalDeviceScalarBlockLayoutFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceScalarBlockLayoutFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsFeaturesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsFeaturesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSchedulingControlsFeaturesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsFeaturesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSchedulingControlsFeaturesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsFeaturesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSchedulingControlsFeaturesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceSchedulingControlsPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSchedulingControlsPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSchedulingControlsPropertiesARM(vkb_dec *d, VkPhysicalDeviceSchedulingControlsPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSchedulingControlsPropertiesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_enc *e, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_enc *e, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_dec *d, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkb_dec *d, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShader64BitIndexingFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderAtomicInt64Features(vkb_enc *e, const VkPhysicalDeviceShaderAtomicInt64Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderAtomicInt64Features(vkb_enc *e, const VkPhysicalDeviceShaderAtomicInt64Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderAtomicInt64Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderAtomicInt64Features(vkb_dec *d, VkPhysicalDeviceShaderAtomicInt64Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderAtomicInt64Features(vkb_dec *d, VkPhysicalDeviceShaderAtomicInt64Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderAtomicInt64Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderBfloat16FeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderBfloat16FeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderBfloat16FeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderBfloat16FeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderBfloat16FeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderBfloat16FeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderBfloat16FeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderClockFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderClockFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderClockFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderClockFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderClockFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderClockFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderClockFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderCorePropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCorePropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderCorePropertiesARM(vkb_enc *e, const VkPhysicalDeviceShaderCorePropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderCorePropertiesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderCorePropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCorePropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderCorePropertiesARM(vkb_dec *d, VkPhysicalDeviceShaderCorePropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderCorePropertiesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDrawParametersFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_enc *e, const VkPhysicalDeviceShaderDrawParametersFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderDrawParametersFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_dec *d, VkPhysicalDeviceShaderDrawParametersFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderDrawParametersFeatures(vkb_dec *d, VkPhysicalDeviceShaderDrawParametersFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderDrawParametersFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_enc *e, const VkPhysicalDeviceShaderExpectAssumeFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_enc *e, const VkPhysicalDeviceShaderExpectAssumeFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderExpectAssumeFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_dec *d, VkPhysicalDeviceShaderExpectAssumeFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderExpectAssumeFeatures(vkb_dec *d, VkPhysicalDeviceShaderExpectAssumeFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderExpectAssumeFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderFloat16Int8Features(vkb_enc *e, const VkPhysicalDeviceShaderFloat16Int8Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderFloat16Int8Features(vkb_enc *e, const VkPhysicalDeviceShaderFloat16Int8Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderFloat16Int8Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderFloat16Int8Features(vkb_dec *d, VkPhysicalDeviceShaderFloat16Int8Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderFloat16Int8Features(vkb_dec *d, VkPhysicalDeviceShaderFloat16Int8Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderFloat16Int8Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderFloat8FeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderFloat8FeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderFloat8FeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderFloat8FeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderFloat8FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderFloat8FeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderFloat8FeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderFloatControls2Features(vkb_enc *e, const VkPhysicalDeviceShaderFloatControls2Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderFloatControls2Features(vkb_enc *e, const VkPhysicalDeviceShaderFloatControls2Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderFloatControls2Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderFloatControls2Features(vkb_dec *d, VkPhysicalDeviceShaderFloatControls2Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderFloatControls2Features(vkb_dec *d, VkPhysicalDeviceShaderFloatControls2Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderFloatControls2Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderFmaFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderFmaFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderFmaFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderFmaFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderFmaFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderFmaFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderFmaFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderIntegerDotProductFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderIntegerDotProductFeatures(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderIntegerDotProductFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_enc *e, const VkPhysicalDeviceShaderIntegerDotProductProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderIntegerDotProductProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderIntegerDotProductProperties(vkb_dec *d, VkPhysicalDeviceShaderIntegerDotProductProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderIntegerDotProductProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderLongVectorFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderLongVectorFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderLongVectorFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderLongVectorPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderLongVectorPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderLongVectorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderLongVectorPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderLongVectorPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderQuadControlFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderQuadControlFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderQuadControlFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderQuadControlFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderQuadControlFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderQuadControlFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderQuadControlFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupRotateFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupRotateFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderSubgroupRotateFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupRotateFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderSubgroupRotateFeatures(vkb_dec *d, VkPhysicalDeviceShaderSubgroupRotateFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderSubgroupRotateFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderTerminateInvocationFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_enc *e, const VkPhysicalDeviceShaderTerminateInvocationFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderTerminateInvocationFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderTerminateInvocationFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderTerminateInvocationFeatures(vkb_dec *d, VkPhysicalDeviceShaderTerminateInvocationFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderTerminateInvocationFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImageFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImageFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderTileImageFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImageFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderTileImageFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImageFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderTileImageFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImagePropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_enc *e, const VkPhysicalDeviceShaderTileImagePropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderTileImagePropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImagePropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderTileImagePropertiesEXT(vkb_dec *d, VkPhysicalDeviceShaderTileImagePropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderTileImagePropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(vkb_dec *d, VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(vkb_dec *d, VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSparseImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceSparseImageFormatInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSparseImageFormatInfo2(vkb_enc *e, const VkPhysicalDeviceSparseImageFormatInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSparseImageFormatInfo2(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSparseImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceSparseImageFormatInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSparseImageFormatInfo2(vkb_dec *d, VkPhysicalDeviceSparseImageFormatInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSparseImageFormatInfo2(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSubgroupProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSubgroupProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSubgroupProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSubgroupProperties(vkb_dec *d, VkPhysicalDeviceSubgroupProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSubgroupProperties(vkb_dec *d, VkPhysicalDeviceSubgroupProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSubgroupProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSubgroupSizeControlFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSubgroupSizeControlFeatures(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSubgroupSizeControlFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_enc *e, const VkPhysicalDeviceSubgroupSizeControlProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSubgroupSizeControlProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSubgroupSizeControlProperties(vkb_dec *d, VkPhysicalDeviceSubgroupSizeControlProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSubgroupSizeControlProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceSynchronization2Features(vkb_enc *e, const VkPhysicalDeviceSynchronization2Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceSynchronization2Features(vkb_enc *e, const VkPhysicalDeviceSynchronization2Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceSynchronization2Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceSynchronization2Features(vkb_dec *d, VkPhysicalDeviceSynchronization2Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceSynchronization2Features(vkb_dec *d, VkPhysicalDeviceSynchronization2Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceSynchronization2Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTensorFeaturesARM(vkb_enc *e, const VkPhysicalDeviceTensorFeaturesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTensorFeaturesARM(vkb_enc *e, const VkPhysicalDeviceTensorFeaturesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTensorFeaturesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTensorFeaturesARM(vkb_dec *d, VkPhysicalDeviceTensorFeaturesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTensorFeaturesARM(vkb_dec *d, VkPhysicalDeviceTensorFeaturesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTensorFeaturesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTensorPropertiesARM(vkb_enc *e, const VkPhysicalDeviceTensorPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTensorPropertiesARM(vkb_enc *e, const VkPhysicalDeviceTensorPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTensorPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTensorPropertiesARM(vkb_dec *d, VkPhysicalDeviceTensorPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTensorPropertiesARM(vkb_dec *d, VkPhysicalDeviceTensorPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTensorPropertiesARM(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_enc *e, const VkPhysicalDeviceTexelBufferAlignmentProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTexelBufferAlignmentProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTexelBufferAlignmentProperties(vkb_dec *d, VkPhysicalDeviceTexelBufferAlignmentProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTexelBufferAlignmentProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_enc *e, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(vkb_dec *d, VkPhysicalDeviceTextureCompressionASTCHDRFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTimelineSemaphoreFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTimelineSemaphoreFeatures(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTimelineSemaphoreFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_enc *e, const VkPhysicalDeviceTimelineSemaphoreProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTimelineSemaphoreProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTimelineSemaphoreProperties(vkb_dec *d, VkPhysicalDeviceTimelineSemaphoreProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTimelineSemaphoreProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceToolProperties(vkb_enc *e, const VkPhysicalDeviceToolProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceToolProperties(vkb_enc *e, const VkPhysicalDeviceToolProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceToolProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceToolProperties(vkb_dec *d, VkPhysicalDeviceToolProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceToolProperties(vkb_dec *d, VkPhysicalDeviceToolProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceToolProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTransformFeedbackFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTransformFeedbackFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceTransformFeedbackPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceTransformFeedbackPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkb_dec *d, VkPhysicalDeviceTransformFeedbackPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceTransformFeedbackPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_dec *d, VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(vkb_dec *d, VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_enc *e, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_dec *d, VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkb_dec *d, VkPhysicalDeviceUniformBufferStandardLayoutFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVariablePointersFeatures(vkb_enc *e, const VkPhysicalDeviceVariablePointersFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVariablePointersFeatures(vkb_enc *e, const VkPhysicalDeviceVariablePointersFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVariablePointersFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVariablePointersFeatures(vkb_dec *d, VkPhysicalDeviceVariablePointersFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVariablePointersFeatures(vkb_dec *d, VkPhysicalDeviceVariablePointersFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVariablePointersFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVertexAttributeDivisorFeatures(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorProperties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVertexAttributeDivisorProperties(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorProperties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(vkb_dec *d, VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan11Features(vkb_enc *e, const VkPhysicalDeviceVulkan11Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan11Features(vkb_enc *e, const VkPhysicalDeviceVulkan11Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan11Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan11Features(vkb_dec *d, VkPhysicalDeviceVulkan11Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan11Features(vkb_dec *d, VkPhysicalDeviceVulkan11Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan11Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan11Properties(vkb_enc *e, const VkPhysicalDeviceVulkan11Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan11Properties(vkb_enc *e, const VkPhysicalDeviceVulkan11Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan11Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan11Properties(vkb_dec *d, VkPhysicalDeviceVulkan11Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan11Properties(vkb_dec *d, VkPhysicalDeviceVulkan11Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan11Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan12Features(vkb_enc *e, const VkPhysicalDeviceVulkan12Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan12Features(vkb_enc *e, const VkPhysicalDeviceVulkan12Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan12Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan12Features(vkb_dec *d, VkPhysicalDeviceVulkan12Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan12Features(vkb_dec *d, VkPhysicalDeviceVulkan12Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan12Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan12Properties(vkb_enc *e, const VkPhysicalDeviceVulkan12Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan12Properties(vkb_enc *e, const VkPhysicalDeviceVulkan12Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan12Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan12Properties(vkb_dec *d, VkPhysicalDeviceVulkan12Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan12Properties(vkb_dec *d, VkPhysicalDeviceVulkan12Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan12Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan13Features(vkb_enc *e, const VkPhysicalDeviceVulkan13Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan13Features(vkb_enc *e, const VkPhysicalDeviceVulkan13Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan13Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan13Features(vkb_dec *d, VkPhysicalDeviceVulkan13Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan13Features(vkb_dec *d, VkPhysicalDeviceVulkan13Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan13Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan13Properties(vkb_enc *e, const VkPhysicalDeviceVulkan13Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan13Properties(vkb_enc *e, const VkPhysicalDeviceVulkan13Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan13Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan13Properties(vkb_dec *d, VkPhysicalDeviceVulkan13Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan13Properties(vkb_dec *d, VkPhysicalDeviceVulkan13Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan13Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan14Features(vkb_enc *e, const VkPhysicalDeviceVulkan14Features *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkan14Features(vkb_enc *e, const VkPhysicalDeviceVulkan14Features *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan14Features(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan14Features(vkb_dec *d, VkPhysicalDeviceVulkan14Features *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkan14Features(vkb_dec *d, VkPhysicalDeviceVulkan14Features *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan14Features(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkan14Properties(vkb_enc *e, const VkPhysicalDeviceVulkan14Properties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCopySrcLayouts) { + uint32_t n_ = (uint32_t)(s->copySrcLayoutCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCopySrcLayouts, (size_t)n_ * sizeof(*s->pCopySrcLayouts)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCopyDstLayouts) { + uint32_t n_ = (uint32_t)(s->copyDstLayoutCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCopyDstLayouts, (size_t)n_ * sizeof(*s->pCopyDstLayouts)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPhysicalDeviceVulkan14Properties(vkb_enc *e, const VkPhysicalDeviceVulkan14Properties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkan14Properties(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkan14Properties(vkb_dec *d, VkPhysicalDeviceVulkan14Properties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCopySrcLayouts = (VkImageLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageLayout)); + } else { + s->pCopySrcLayouts = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCopyDstLayouts = (VkImageLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageLayout)); + } else { + s->pCopyDstLayouts = NULL; + } +} + +void vkb_dec_VkPhysicalDeviceVulkan14Properties(vkb_dec *d, VkPhysicalDeviceVulkan14Properties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkan14Properties(d, s); +} + +void vkb_encfix_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_enc *e, const VkPhysicalDeviceVulkanMemoryModelFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_enc *e, const VkPhysicalDeviceVulkanMemoryModelFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceVulkanMemoryModelFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_dec *d, VkPhysicalDeviceVulkanMemoryModelFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceVulkanMemoryModelFeatures(vkb_dec *d, VkPhysicalDeviceVulkanMemoryModelFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceVulkanMemoryModelFeatures(d, s); +} + +void vkb_encfix_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_enc *e, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_dec *d, VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(vkb_dec *d, VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(d, s); +} + +void vkb_encfix_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkb_dec *d, VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_enc *e, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(vkb_dec *d, VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(d, s); +} + +void vkb_encfix_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_enc *e, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(e, s, raw); +} + +void vkb_decfix_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_dec *d, VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(vkb_dec *d, VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(d, s); +} + +void vkb_encfix_VkPipelineCacheCreateInfo(vkb_enc *e, const VkPipelineCacheCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_blob(e, s->pInitialData ? (const void *)s->pInitialData : NULL, s->pInitialData ? (size_t)(s->initialDataSize) : 0); +} + +void vkb_enc_VkPipelineCacheCreateInfo(vkb_enc *e, const VkPipelineCacheCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineCacheCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineCacheCreateInfo(vkb_dec *d, VkPipelineCacheCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pInitialData = (const void *)vkb_dec_blob(d, NULL); +} + +void vkb_dec_VkPipelineCacheCreateInfo(vkb_dec *d, VkPipelineCacheCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineCacheCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_enc *e, const VkPipelineColorBlendAdvancedStateCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_enc *e, const VkPipelineColorBlendAdvancedStateCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineColorBlendAdvancedStateCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_dec *d, VkPipelineColorBlendAdvancedStateCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkb_dec *d, VkPipelineColorBlendAdvancedStateCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineColorBlendAdvancedStateCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineColorBlendStateCreateInfo(vkb_enc *e, const VkPipelineColorBlendStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachments) { + uint32_t n_ = (uint32_t)(s->attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pAttachments, (size_t)n_ * sizeof(*s->pAttachments)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineColorBlendStateCreateInfo(vkb_enc *e, const VkPipelineColorBlendStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineColorBlendStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineColorBlendStateCreateInfo(vkb_dec *d, VkPipelineColorBlendStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pAttachments = (const VkPipelineColorBlendAttachmentState *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPipelineColorBlendAttachmentState)); + } else { + s->pAttachments = NULL; + } +} + +void vkb_dec_VkPipelineColorBlendStateCreateInfo(vkb_dec *d, VkPipelineColorBlendStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineColorBlendStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineColorWriteCreateInfoEXT(vkb_enc *e, const VkPipelineColorWriteCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorWriteEnables) { + uint32_t n_ = (uint32_t)(s->attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorWriteEnables, (size_t)n_ * sizeof(*s->pColorWriteEnables)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineColorWriteCreateInfoEXT(vkb_enc *e, const VkPipelineColorWriteCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineColorWriteCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineColorWriteCreateInfoEXT(vkb_dec *d, VkPipelineColorWriteCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorWriteEnables = (const VkBool32 *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBool32)); + } else { + s->pColorWriteEnables = NULL; + } +} + +void vkb_dec_VkPipelineColorWriteCreateInfoEXT(vkb_dec *d, VkPipelineColorWriteCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineColorWriteCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineCreateFlags2CreateInfo(vkb_enc *e, const VkPipelineCreateFlags2CreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineCreateFlags2CreateInfo(vkb_enc *e, const VkPipelineCreateFlags2CreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineCreateFlags2CreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineCreateFlags2CreateInfo(vkb_dec *d, VkPipelineCreateFlags2CreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineCreateFlags2CreateInfo(vkb_dec *d, VkPipelineCreateFlags2CreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineCreateFlags2CreateInfo(d, s); +} + +void vkb_encfix_VkPipelineCreationFeedbackCreateInfo(vkb_enc *e, const VkPipelineCreationFeedbackCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pPipelineCreationFeedback) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPipelineCreationFeedback, (size_t)n_ * sizeof(*s->pPipelineCreationFeedback)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pPipelineStageCreationFeedbacks) { + uint32_t n_ = (uint32_t)(s->pipelineStageCreationFeedbackCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPipelineStageCreationFeedbacks, (size_t)n_ * sizeof(*s->pPipelineStageCreationFeedbacks)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineCreationFeedbackCreateInfo(vkb_enc *e, const VkPipelineCreationFeedbackCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineCreationFeedbackCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineCreationFeedbackCreateInfo(vkb_dec *d, VkPipelineCreationFeedbackCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPipelineCreationFeedback = (VkPipelineCreationFeedback *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPipelineCreationFeedback)); + } else { + s->pPipelineCreationFeedback = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPipelineStageCreationFeedbacks = (VkPipelineCreationFeedback *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPipelineCreationFeedback)); + } else { + s->pPipelineStageCreationFeedbacks = NULL; + } +} + +void vkb_dec_VkPipelineCreationFeedbackCreateInfo(vkb_dec *d, VkPipelineCreationFeedbackCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineCreationFeedbackCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineDepthStencilStateCreateInfo(vkb_enc *e, const VkPipelineDepthStencilStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineDepthStencilStateCreateInfo(vkb_enc *e, const VkPipelineDepthStencilStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineDepthStencilStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineDepthStencilStateCreateInfo(vkb_dec *d, VkPipelineDepthStencilStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineDepthStencilStateCreateInfo(vkb_dec *d, VkPipelineDepthStencilStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineDepthStencilStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_enc *e, const VkPipelineDiscardRectangleStateCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDiscardRectangles) { + uint32_t n_ = (uint32_t)(s->discardRectangleCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDiscardRectangles, (size_t)n_ * sizeof(*s->pDiscardRectangles)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_enc *e, const VkPipelineDiscardRectangleStateCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineDiscardRectangleStateCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_dec *d, VkPipelineDiscardRectangleStateCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDiscardRectangles = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + s->pDiscardRectangles = NULL; + } +} + +void vkb_dec_VkPipelineDiscardRectangleStateCreateInfoEXT(vkb_dec *d, VkPipelineDiscardRectangleStateCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineDiscardRectangleStateCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineDynamicStateCreateInfo(vkb_enc *e, const VkPipelineDynamicStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDynamicStates) { + uint32_t n_ = (uint32_t)(s->dynamicStateCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDynamicStates, (size_t)n_ * sizeof(*s->pDynamicStates)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineDynamicStateCreateInfo(vkb_enc *e, const VkPipelineDynamicStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineDynamicStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineDynamicStateCreateInfo(vkb_dec *d, VkPipelineDynamicStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDynamicStates = (const VkDynamicState *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDynamicState)); + } else { + s->pDynamicStates = NULL; + } +} + +void vkb_dec_VkPipelineDynamicStateCreateInfo(vkb_dec *d, VkPipelineDynamicStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineDynamicStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_enc *e, const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_enc *e, const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(e, s, raw); +} + +void vkb_decfix_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_dec *d, VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(vkb_dec *d, VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(d, s); +} + +void vkb_encfix_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_enc *e, const VkPipelineFragmentShadingRateStateCreateInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_enc *e, const VkPipelineFragmentShadingRateStateCreateInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineFragmentShadingRateStateCreateInfoKHR(e, s, raw); +} + +void vkb_decfix_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_dec *d, VkPipelineFragmentShadingRateStateCreateInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkb_dec *d, VkPipelineFragmentShadingRateStateCreateInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineFragmentShadingRateStateCreateInfoKHR(d, s); +} + +void vkb_encfix_VkPipelineInputAssemblyStateCreateInfo(vkb_enc *e, const VkPipelineInputAssemblyStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineInputAssemblyStateCreateInfo(vkb_enc *e, const VkPipelineInputAssemblyStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineInputAssemblyStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineInputAssemblyStateCreateInfo(vkb_dec *d, VkPipelineInputAssemblyStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineInputAssemblyStateCreateInfo(vkb_dec *d, VkPipelineInputAssemblyStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineInputAssemblyStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineLayoutCreateInfo(vkb_enc *e, const VkPipelineLayoutCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSetLayouts) { + uint32_t n_ = (uint32_t)(s->setLayoutCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSetLayouts, (size_t)n_ * sizeof(*s->pSetLayouts)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pPushConstantRanges) { + uint32_t n_ = (uint32_t)(s->pushConstantRangeCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPushConstantRanges, (size_t)n_ * sizeof(*s->pPushConstantRanges)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineLayoutCreateInfo(vkb_enc *e, const VkPipelineLayoutCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineLayoutCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineLayoutCreateInfo(vkb_dec *d, VkPipelineLayoutCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSetLayouts = (const VkDescriptorSetLayout *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorSetLayout)); + } else { + s->pSetLayouts = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPushConstantRanges = (const VkPushConstantRange *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPushConstantRange)); + } else { + s->pPushConstantRanges = NULL; + } +} + +void vkb_dec_VkPipelineLayoutCreateInfo(vkb_dec *d, VkPipelineLayoutCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineLayoutCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineLibraryCreateInfoKHR(vkb_enc *e, const VkPipelineLibraryCreateInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pLibraries) { + uint32_t n_ = (uint32_t)(s->libraryCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pLibraries, (size_t)n_ * sizeof(*s->pLibraries)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineLibraryCreateInfoKHR(vkb_enc *e, const VkPipelineLibraryCreateInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineLibraryCreateInfoKHR(e, s, raw); +} + +void vkb_decfix_VkPipelineLibraryCreateInfoKHR(vkb_dec *d, VkPipelineLibraryCreateInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pLibraries = (const VkPipeline *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPipeline)); + } else { + s->pLibraries = NULL; + } +} + +void vkb_dec_VkPipelineLibraryCreateInfoKHR(vkb_dec *d, VkPipelineLibraryCreateInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineLibraryCreateInfoKHR(d, s); +} + +void vkb_encfix_VkPipelineMultisampleStateCreateInfo(vkb_enc *e, const VkPipelineMultisampleStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSampleMask) { + uint32_t n_ = (uint32_t)((((uint32_t)s->rasterizationSamples + 31) / 32)); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSampleMask, (size_t)n_ * sizeof(*s->pSampleMask)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineMultisampleStateCreateInfo(vkb_enc *e, const VkPipelineMultisampleStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineMultisampleStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineMultisampleStateCreateInfo(vkb_dec *d, VkPipelineMultisampleStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSampleMask = (const VkSampleMask *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSampleMask)); + } else { + s->pSampleMask = NULL; + } +} + +void vkb_dec_VkPipelineMultisampleStateCreateInfo(vkb_dec *d, VkPipelineMultisampleStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineMultisampleStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationConservativeStateCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationConservativeStateCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRasterizationConservativeStateCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationConservativeStateCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationConservativeStateCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRasterizationConservativeStateCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationDepthClipStateCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationDepthClipStateCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRasterizationDepthClipStateCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationDepthClipStateCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationDepthClipStateCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRasterizationDepthClipStateCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineRasterizationLineStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationLineStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRasterizationLineStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationLineStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRasterizationLineStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineRasterizationLineStateCreateInfo(vkb_dec *d, VkPipelineRasterizationLineStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRasterizationLineStateCreateInfo(vkb_dec *d, VkPipelineRasterizationLineStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRasterizationLineStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineRasterizationStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRasterizationStateCreateInfo(vkb_enc *e, const VkPipelineRasterizationStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRasterizationStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineRasterizationStateCreateInfo(vkb_dec *d, VkPipelineRasterizationStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRasterizationStateCreateInfo(vkb_dec *d, VkPipelineRasterizationStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRasterizationStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationStateStreamCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_enc *e, const VkPipelineRasterizationStateStreamCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRasterizationStateStreamCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationStateStreamCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRasterizationStateStreamCreateInfoEXT(vkb_dec *d, VkPipelineRasterizationStateStreamCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRasterizationStateStreamCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineRenderingCreateInfo(vkb_enc *e, const VkPipelineRenderingCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachmentFormats) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachmentFormats, (size_t)n_ * sizeof(*s->pColorAttachmentFormats)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineRenderingCreateInfo(vkb_enc *e, const VkPipelineRenderingCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRenderingCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineRenderingCreateInfo(vkb_dec *d, VkPipelineRenderingCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachmentFormats = (const VkFormat *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFormat)); + } else { + s->pColorAttachmentFormats = NULL; + } +} + +void vkb_dec_VkPipelineRenderingCreateInfo(vkb_dec *d, VkPipelineRenderingCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRenderingCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineRobustnessCreateInfo(vkb_enc *e, const VkPipelineRobustnessCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineRobustnessCreateInfo(vkb_enc *e, const VkPipelineRobustnessCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineRobustnessCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineRobustnessCreateInfo(vkb_dec *d, VkPipelineRobustnessCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineRobustnessCreateInfo(vkb_dec *d, VkPipelineRobustnessCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineRobustnessCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_enc *e, const VkPipelineSampleLocationsStateCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_encfix_VkSampleLocationsInfoEXT(e, &s->sampleLocationsInfo, raw + offsetof(VkPipelineSampleLocationsStateCreateInfoEXT, sampleLocationsInfo)); +} + +void vkb_enc_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_enc *e, const VkPipelineSampleLocationsStateCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineSampleLocationsStateCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_dec *d, VkPipelineSampleLocationsStateCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + vkb_decfix_VkSampleLocationsInfoEXT(d, &s->sampleLocationsInfo); +} + +void vkb_dec_VkPipelineSampleLocationsStateCreateInfoEXT(vkb_dec *d, VkPipelineSampleLocationsStateCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineSampleLocationsStateCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineShaderStageCreateInfo(vkb_enc *e, const VkPipelineShaderStageCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_str(e, s->pName ? s->pName : NULL); + if (s->pSpecializationInfo) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSpecializationInfo(e, &s->pSpecializationInfo[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineShaderStageCreateInfo(vkb_enc *e, const VkPipelineShaderStageCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineShaderStageCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineShaderStageCreateInfo(vkb_dec *d, VkPipelineShaderStageCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pName = vkb_dec_str(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSpecializationInfo *a_ = (VkSpecializationInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSpecializationInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSpecializationInfo(d, &a_[i_]); + s->pSpecializationInfo = a_; + } else { + s->pSpecializationInfo = NULL; + } +} + +void vkb_dec_VkPipelineShaderStageCreateInfo(vkb_dec *d, VkPipelineShaderStageCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineShaderStageCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_enc *e, const VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pIdentifier) { + uint32_t n_ = (uint32_t)(s->identifierSize); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pIdentifier, (size_t)n_ * sizeof(*s->pIdentifier)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_enc *e, const VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_dec *d, VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pIdentifier = (const uint8_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint8_t)); + } else { + s->pIdentifier = NULL; + } +} + +void vkb_dec_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(vkb_dec *d, VkPipelineShaderStageModuleIdentifierCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_enc *e, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_enc *e, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_dec *d, VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(vkb_dec *d, VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_enc *e, const VkPipelineTessellationDomainOriginStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_enc *e, const VkPipelineTessellationDomainOriginStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineTessellationDomainOriginStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_dec *d, VkPipelineTessellationDomainOriginStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineTessellationDomainOriginStateCreateInfo(vkb_dec *d, VkPipelineTessellationDomainOriginStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineTessellationDomainOriginStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineTessellationStateCreateInfo(vkb_enc *e, const VkPipelineTessellationStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineTessellationStateCreateInfo(vkb_enc *e, const VkPipelineTessellationStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineTessellationStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineTessellationStateCreateInfo(vkb_dec *d, VkPipelineTessellationStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineTessellationStateCreateInfo(vkb_dec *d, VkPipelineTessellationStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineTessellationStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineVertexInputDivisorStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputDivisorStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pVertexBindingDivisors) { + uint32_t n_ = (uint32_t)(s->vertexBindingDivisorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pVertexBindingDivisors, (size_t)n_ * sizeof(*s->pVertexBindingDivisors)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineVertexInputDivisorStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputDivisorStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineVertexInputDivisorStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineVertexInputDivisorStateCreateInfo(vkb_dec *d, VkPipelineVertexInputDivisorStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pVertexBindingDivisors = (const VkVertexInputBindingDivisorDescription *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkVertexInputBindingDivisorDescription)); + } else { + s->pVertexBindingDivisors = NULL; + } +} + +void vkb_dec_VkPipelineVertexInputDivisorStateCreateInfo(vkb_dec *d, VkPipelineVertexInputDivisorStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineVertexInputDivisorStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineVertexInputStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pVertexBindingDescriptions) { + uint32_t n_ = (uint32_t)(s->vertexBindingDescriptionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pVertexBindingDescriptions, (size_t)n_ * sizeof(*s->pVertexBindingDescriptions)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pVertexAttributeDescriptions) { + uint32_t n_ = (uint32_t)(s->vertexAttributeDescriptionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pVertexAttributeDescriptions, (size_t)n_ * sizeof(*s->pVertexAttributeDescriptions)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineVertexInputStateCreateInfo(vkb_enc *e, const VkPipelineVertexInputStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineVertexInputStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineVertexInputStateCreateInfo(vkb_dec *d, VkPipelineVertexInputStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pVertexBindingDescriptions = (const VkVertexInputBindingDescription *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkVertexInputBindingDescription)); + } else { + s->pVertexBindingDescriptions = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pVertexAttributeDescriptions = (const VkVertexInputAttributeDescription *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkVertexInputAttributeDescription)); + } else { + s->pVertexAttributeDescriptions = NULL; + } +} + +void vkb_dec_VkPipelineVertexInputStateCreateInfo(vkb_dec *d, VkPipelineVertexInputStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineVertexInputStateCreateInfo(d, s); +} + +void vkb_encfix_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClampControlCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDepthClampRange) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDepthClampRange, (size_t)n_ * sizeof(*s->pDepthClampRange)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClampControlCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineViewportDepthClampControlCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClampControlCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDepthClampRange = (const VkDepthClampRangeEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDepthClampRangeEXT)); + } else { + s->pDepthClampRange = NULL; + } +} + +void vkb_dec_VkPipelineViewportDepthClampControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClampControlCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineViewportDepthClampControlCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClipControlCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_enc *e, const VkPipelineViewportDepthClipControlCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineViewportDepthClipControlCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClipControlCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkPipelineViewportDepthClipControlCreateInfoEXT(vkb_dec *d, VkPipelineViewportDepthClipControlCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineViewportDepthClipControlCreateInfoEXT(d, s); +} + +void vkb_encfix_VkPipelineViewportStateCreateInfo(vkb_enc *e, const VkPipelineViewportStateCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pViewports) { + uint32_t n_ = (uint32_t)(s->viewportCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pViewports, (size_t)n_ * sizeof(*s->pViewports)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pScissors) { + uint32_t n_ = (uint32_t)(s->scissorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pScissors, (size_t)n_ * sizeof(*s->pScissors)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPipelineViewportStateCreateInfo(vkb_enc *e, const VkPipelineViewportStateCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPipelineViewportStateCreateInfo(e, s, raw); +} + +void vkb_decfix_VkPipelineViewportStateCreateInfo(vkb_dec *d, VkPipelineViewportStateCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pViewports = (const VkViewport *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkViewport)); + } else { + s->pViewports = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pScissors = (const VkRect2D *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRect2D)); + } else { + s->pScissors = NULL; + } +} + +void vkb_dec_VkPipelineViewportStateCreateInfo(vkb_dec *d, VkPipelineViewportStateCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPipelineViewportStateCreateInfo(d, s); +} + +void vkb_encfix_VkProtectedSubmitInfo(vkb_enc *e, const VkProtectedSubmitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkProtectedSubmitInfo(vkb_enc *e, const VkProtectedSubmitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkProtectedSubmitInfo(e, s, raw); +} + +void vkb_decfix_VkProtectedSubmitInfo(vkb_dec *d, VkProtectedSubmitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkProtectedSubmitInfo(vkb_dec *d, VkProtectedSubmitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkProtectedSubmitInfo(d, s); +} + +void vkb_encfix_VkPushConstantsInfo(vkb_enc *e, const VkPushConstantsInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_blob(e, s->pValues ? (const void *)s->pValues : NULL, s->pValues ? (size_t)(s->size) : 0); +} + +void vkb_enc_VkPushConstantsInfo(vkb_enc *e, const VkPushConstantsInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPushConstantsInfo(e, s, raw); +} + +void vkb_decfix_VkPushConstantsInfo(vkb_dec *d, VkPushConstantsInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pValues = (const void *)vkb_dec_blob(d, NULL); +} + +void vkb_dec_VkPushConstantsInfo(vkb_dec *d, VkPushConstantsInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPushConstantsInfo(d, s); +} + +void vkb_encfix_VkPushDescriptorSetInfo(vkb_enc *e, const VkPushDescriptorSetInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDescriptorWrites) { + uint32_t n_ = (uint32_t)(s->descriptorWriteCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkWriteDescriptorSet(e, &s->pDescriptorWrites[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkPushDescriptorSetInfo(vkb_enc *e, const VkPushDescriptorSetInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkPushDescriptorSetInfo(e, s, raw); +} + +void vkb_decfix_VkPushDescriptorSetInfo(vkb_dec *d, VkPushDescriptorSetInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkWriteDescriptorSet *a_ = (VkWriteDescriptorSet *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkWriteDescriptorSet)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkWriteDescriptorSet(d, &a_[i_]); + s->pDescriptorWrites = a_; + } else { + s->pDescriptorWrites = NULL; + } +} + +void vkb_dec_VkPushDescriptorSetInfo(vkb_dec *d, VkPushDescriptorSetInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkPushDescriptorSetInfo(d, s); +} + +void vkb_encfix_VkQueryPoolCreateInfo(vkb_enc *e, const VkQueryPoolCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkQueryPoolCreateInfo(vkb_enc *e, const VkQueryPoolCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkQueryPoolCreateInfo(e, s, raw); +} + +void vkb_decfix_VkQueryPoolCreateInfo(vkb_dec *d, VkQueryPoolCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkQueryPoolCreateInfo(vkb_dec *d, VkQueryPoolCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkQueryPoolCreateInfo(d, s); +} + +void vkb_encfix_VkQueueFamilyGlobalPriorityProperties(vkb_enc *e, const VkQueueFamilyGlobalPriorityProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkQueueFamilyGlobalPriorityProperties(vkb_enc *e, const VkQueueFamilyGlobalPriorityProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkQueueFamilyGlobalPriorityProperties(e, s, raw); +} + +void vkb_decfix_VkQueueFamilyGlobalPriorityProperties(vkb_dec *d, VkQueueFamilyGlobalPriorityProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkQueueFamilyGlobalPriorityProperties(vkb_dec *d, VkQueueFamilyGlobalPriorityProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkQueueFamilyGlobalPriorityProperties(d, s); +} + +void vkb_encfix_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_enc *e, const VkQueueFamilyOwnershipTransferPropertiesKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_enc *e, const VkQueueFamilyOwnershipTransferPropertiesKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkQueueFamilyOwnershipTransferPropertiesKHR(e, s, raw); +} + +void vkb_decfix_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_dec *d, VkQueueFamilyOwnershipTransferPropertiesKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkQueueFamilyOwnershipTransferPropertiesKHR(vkb_dec *d, VkQueueFamilyOwnershipTransferPropertiesKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkQueueFamilyOwnershipTransferPropertiesKHR(d, s); +} + +void vkb_encfix_VkQueueFamilyProperties2(vkb_enc *e, const VkQueueFamilyProperties2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkQueueFamilyProperties2(vkb_enc *e, const VkQueueFamilyProperties2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkQueueFamilyProperties2(e, s, raw); +} + +void vkb_decfix_VkQueueFamilyProperties2(vkb_dec *d, VkQueueFamilyProperties2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkQueueFamilyProperties2(vkb_dec *d, VkQueueFamilyProperties2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkQueueFamilyProperties2(d, s); +} + +void vkb_encfix_VkRenderPassAttachmentBeginInfo(vkb_enc *e, const VkRenderPassAttachmentBeginInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachments) { + uint32_t n_ = (uint32_t)(s->attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pAttachments, (size_t)n_ * sizeof(*s->pAttachments)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassAttachmentBeginInfo(vkb_enc *e, const VkRenderPassAttachmentBeginInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassAttachmentBeginInfo(e, s, raw); +} + +void vkb_decfix_VkRenderPassAttachmentBeginInfo(vkb_dec *d, VkRenderPassAttachmentBeginInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pAttachments = (const VkImageView *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkImageView)); + } else { + s->pAttachments = NULL; + } +} + +void vkb_dec_VkRenderPassAttachmentBeginInfo(vkb_dec *d, VkRenderPassAttachmentBeginInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassAttachmentBeginInfo(d, s); +} + +void vkb_encfix_VkRenderPassBeginInfo(vkb_enc *e, const VkRenderPassBeginInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pClearValues) { + uint32_t n_ = (uint32_t)(s->clearValueCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pClearValues, (size_t)n_ * sizeof(*s->pClearValues)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassBeginInfo(vkb_enc *e, const VkRenderPassBeginInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassBeginInfo(e, s, raw); +} + +void vkb_decfix_VkRenderPassBeginInfo(vkb_dec *d, VkRenderPassBeginInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pClearValues = (const VkClearValue *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkClearValue)); + } else { + s->pClearValues = NULL; + } +} + +void vkb_dec_VkRenderPassBeginInfo(vkb_dec *d, VkRenderPassBeginInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassBeginInfo(d, s); +} + +void vkb_encfix_VkRenderPassCreateInfo(vkb_enc *e, const VkRenderPassCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachments) { + uint32_t n_ = (uint32_t)(s->attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pAttachments, (size_t)n_ * sizeof(*s->pAttachments)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSubpasses) { + uint32_t n_ = (uint32_t)(s->subpassCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassDescription(e, &s->pSubpasses[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDependencies) { + uint32_t n_ = (uint32_t)(s->dependencyCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDependencies, (size_t)n_ * sizeof(*s->pDependencies)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassCreateInfo(vkb_enc *e, const VkRenderPassCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassCreateInfo(e, s, raw); +} + +void vkb_decfix_VkRenderPassCreateInfo(vkb_dec *d, VkRenderPassCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pAttachments = (const VkAttachmentDescription *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkAttachmentDescription)); + } else { + s->pAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassDescription *a_ = (VkSubpassDescription *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassDescription)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassDescription(d, &a_[i_]); + s->pSubpasses = a_; + } else { + s->pSubpasses = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDependencies = (const VkSubpassDependency *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSubpassDependency)); + } else { + s->pDependencies = NULL; + } +} + +void vkb_dec_VkRenderPassCreateInfo(vkb_dec *d, VkRenderPassCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassCreateInfo(d, s); +} + +void vkb_encfix_VkRenderPassCreateInfo2(vkb_enc *e, const VkRenderPassCreateInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachments) { + uint32_t n_ = (uint32_t)(s->attachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentDescription2(e, &s->pAttachments[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSubpasses) { + uint32_t n_ = (uint32_t)(s->subpassCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassDescription2(e, &s->pSubpasses[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDependencies) { + uint32_t n_ = (uint32_t)(s->dependencyCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassDependency2(e, &s->pDependencies[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCorrelatedViewMasks) { + uint32_t n_ = (uint32_t)(s->correlatedViewMaskCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCorrelatedViewMasks, (size_t)n_ * sizeof(*s->pCorrelatedViewMasks)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassCreateInfo2(vkb_enc *e, const VkRenderPassCreateInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassCreateInfo2(e, s, raw); +} + +void vkb_decfix_VkRenderPassCreateInfo2(vkb_dec *d, VkRenderPassCreateInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentDescription2 *a_ = (VkAttachmentDescription2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentDescription2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentDescription2(d, &a_[i_]); + s->pAttachments = a_; + } else { + s->pAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassDescription2 *a_ = (VkSubpassDescription2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassDescription2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassDescription2(d, &a_[i_]); + s->pSubpasses = a_; + } else { + s->pSubpasses = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassDependency2 *a_ = (VkSubpassDependency2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassDependency2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassDependency2(d, &a_[i_]); + s->pDependencies = a_; + } else { + s->pDependencies = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCorrelatedViewMasks = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pCorrelatedViewMasks = NULL; + } +} + +void vkb_dec_VkRenderPassCreateInfo2(vkb_dec *d, VkRenderPassCreateInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassCreateInfo2(d, s); +} + +void vkb_encfix_VkRenderPassCreationControlEXT(vkb_enc *e, const VkRenderPassCreationControlEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderPassCreationControlEXT(vkb_enc *e, const VkRenderPassCreationControlEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassCreationControlEXT(e, s, raw); +} + +void vkb_decfix_VkRenderPassCreationControlEXT(vkb_dec *d, VkRenderPassCreationControlEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderPassCreationControlEXT(vkb_dec *d, VkRenderPassCreationControlEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassCreationControlEXT(d, s); +} + +void vkb_encfix_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassCreationFeedbackCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRenderPassFeedback) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pRenderPassFeedback, (size_t)n_ * sizeof(*s->pRenderPassFeedback)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassCreationFeedbackCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassCreationFeedbackCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassCreationFeedbackCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pRenderPassFeedback = (VkRenderPassCreationFeedbackInfoEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRenderPassCreationFeedbackInfoEXT)); + } else { + s->pRenderPassFeedback = NULL; + } +} + +void vkb_dec_VkRenderPassCreationFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassCreationFeedbackCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassCreationFeedbackCreateInfoEXT(d, s); +} + +void vkb_encfix_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_enc *e, const VkRenderPassFragmentDensityMapCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_enc *e, const VkRenderPassFragmentDensityMapCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassFragmentDensityMapCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_dec *d, VkRenderPassFragmentDensityMapCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderPassFragmentDensityMapCreateInfoEXT(vkb_dec *d, VkRenderPassFragmentDensityMapCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassFragmentDensityMapCreateInfoEXT(d, s); +} + +void vkb_encfix_VkRenderPassInputAttachmentAspectCreateInfo(vkb_enc *e, const VkRenderPassInputAttachmentAspectCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAspectReferences) { + uint32_t n_ = (uint32_t)(s->aspectReferenceCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pAspectReferences, (size_t)n_ * sizeof(*s->pAspectReferences)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassInputAttachmentAspectCreateInfo(vkb_enc *e, const VkRenderPassInputAttachmentAspectCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassInputAttachmentAspectCreateInfo(e, s, raw); +} + +void vkb_decfix_VkRenderPassInputAttachmentAspectCreateInfo(vkb_dec *d, VkRenderPassInputAttachmentAspectCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pAspectReferences = (const VkInputAttachmentAspectReference *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkInputAttachmentAspectReference)); + } else { + s->pAspectReferences = NULL; + } +} + +void vkb_dec_VkRenderPassInputAttachmentAspectCreateInfo(vkb_dec *d, VkRenderPassInputAttachmentAspectCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassInputAttachmentAspectCreateInfo(d, s); +} + +void vkb_encfix_VkRenderPassMultiviewCreateInfo(vkb_enc *e, const VkRenderPassMultiviewCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pViewMasks) { + uint32_t n_ = (uint32_t)(s->subpassCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pViewMasks, (size_t)n_ * sizeof(*s->pViewMasks)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pViewOffsets) { + uint32_t n_ = (uint32_t)(s->dependencyCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pViewOffsets, (size_t)n_ * sizeof(*s->pViewOffsets)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCorrelationMasks) { + uint32_t n_ = (uint32_t)(s->correlationMaskCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCorrelationMasks, (size_t)n_ * sizeof(*s->pCorrelationMasks)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassMultiviewCreateInfo(vkb_enc *e, const VkRenderPassMultiviewCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassMultiviewCreateInfo(e, s, raw); +} + +void vkb_decfix_VkRenderPassMultiviewCreateInfo(vkb_dec *d, VkRenderPassMultiviewCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pViewMasks = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pViewMasks = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pViewOffsets = (const int32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(int32_t)); + } else { + s->pViewOffsets = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCorrelationMasks = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pCorrelationMasks = NULL; + } +} + +void vkb_dec_VkRenderPassMultiviewCreateInfo(vkb_dec *d, VkRenderPassMultiviewCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassMultiviewCreateInfo(d, s); +} + +void vkb_encfix_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_enc *e, const VkRenderPassPerformanceCountersByRegionBeginInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pCounterAddresses) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCounterAddresses, (size_t)n_ * sizeof(*s->pCounterAddresses)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCounterIndices) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pCounterIndices, (size_t)n_ * sizeof(*s->pCounterIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_enc *e, const VkRenderPassPerformanceCountersByRegionBeginInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassPerformanceCountersByRegionBeginInfoARM(e, s, raw); +} + +void vkb_decfix_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_dec *d, VkRenderPassPerformanceCountersByRegionBeginInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCounterAddresses = (const VkDeviceAddress *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDeviceAddress)); + } else { + s->pCounterAddresses = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pCounterIndices = (uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pCounterIndices = NULL; + } +} + +void vkb_dec_VkRenderPassPerformanceCountersByRegionBeginInfoARM(vkb_dec *d, VkRenderPassPerformanceCountersByRegionBeginInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassPerformanceCountersByRegionBeginInfoARM(d, s); +} + +void vkb_encfix_VkRenderPassSampleLocationsBeginInfoEXT(vkb_enc *e, const VkRenderPassSampleLocationsBeginInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pAttachmentInitialSampleLocations) { + uint32_t n_ = (uint32_t)(s->attachmentInitialSampleLocationsCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentSampleLocationsEXT(e, &s->pAttachmentInitialSampleLocations[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pPostSubpassSampleLocations) { + uint32_t n_ = (uint32_t)(s->postSubpassSampleLocationsCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSubpassSampleLocationsEXT(e, &s->pPostSubpassSampleLocations[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassSampleLocationsBeginInfoEXT(vkb_enc *e, const VkRenderPassSampleLocationsBeginInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassSampleLocationsBeginInfoEXT(e, s, raw); +} + +void vkb_decfix_VkRenderPassSampleLocationsBeginInfoEXT(vkb_dec *d, VkRenderPassSampleLocationsBeginInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentSampleLocationsEXT *a_ = (VkAttachmentSampleLocationsEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentSampleLocationsEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentSampleLocationsEXT(d, &a_[i_]); + s->pAttachmentInitialSampleLocations = a_; + } else { + s->pAttachmentInitialSampleLocations = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSubpassSampleLocationsEXT *a_ = (VkSubpassSampleLocationsEXT *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSubpassSampleLocationsEXT)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSubpassSampleLocationsEXT(d, &a_[i_]); + s->pPostSubpassSampleLocations = a_; + } else { + s->pPostSubpassSampleLocations = NULL; + } +} + +void vkb_dec_VkRenderPassSampleLocationsBeginInfoEXT(vkb_dec *d, VkRenderPassSampleLocationsBeginInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassSampleLocationsBeginInfoEXT(d, s); +} + +void vkb_encfix_VkRenderPassStripeBeginInfoARM(vkb_enc *e, const VkRenderPassStripeBeginInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pStripeInfos) { + uint32_t n_ = (uint32_t)(s->stripeInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderPassStripeInfoARM(e, &s->pStripeInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassStripeBeginInfoARM(vkb_enc *e, const VkRenderPassStripeBeginInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassStripeBeginInfoARM(e, s, raw); +} + +void vkb_decfix_VkRenderPassStripeBeginInfoARM(vkb_dec *d, VkRenderPassStripeBeginInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderPassStripeInfoARM *a_ = (VkRenderPassStripeInfoARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderPassStripeInfoARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderPassStripeInfoARM(d, &a_[i_]); + s->pStripeInfos = a_; + } else { + s->pStripeInfos = NULL; + } +} + +void vkb_dec_VkRenderPassStripeBeginInfoARM(vkb_dec *d, VkRenderPassStripeBeginInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassStripeBeginInfoARM(d, s); +} + +void vkb_encfix_VkRenderPassStripeInfoARM(vkb_enc *e, const VkRenderPassStripeInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderPassStripeInfoARM(vkb_enc *e, const VkRenderPassStripeInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassStripeInfoARM(e, s, raw); +} + +void vkb_decfix_VkRenderPassStripeInfoARM(vkb_dec *d, VkRenderPassStripeInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderPassStripeInfoARM(vkb_dec *d, VkRenderPassStripeInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassStripeInfoARM(d, s); +} + +void vkb_encfix_VkRenderPassStripeSubmitInfoARM(vkb_enc *e, const VkRenderPassStripeSubmitInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pStripeSemaphoreInfos) { + uint32_t n_ = (uint32_t)(s->stripeSemaphoreInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreSubmitInfo(e, &s->pStripeSemaphoreInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassStripeSubmitInfoARM(vkb_enc *e, const VkRenderPassStripeSubmitInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassStripeSubmitInfoARM(e, s, raw); +} + +void vkb_decfix_VkRenderPassStripeSubmitInfoARM(vkb_dec *d, VkRenderPassStripeSubmitInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreSubmitInfo *a_ = (VkSemaphoreSubmitInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreSubmitInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreSubmitInfo(d, &a_[i_]); + s->pStripeSemaphoreInfos = a_; + } else { + s->pStripeSemaphoreInfos = NULL; + } +} + +void vkb_dec_VkRenderPassStripeSubmitInfoARM(vkb_dec *d, VkRenderPassStripeSubmitInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassStripeSubmitInfoARM(d, s); +} + +void vkb_encfix_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassSubpassFeedbackCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSubpassFeedback) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSubpassFeedback, (size_t)n_ * sizeof(*s->pSubpassFeedback)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_enc *e, const VkRenderPassSubpassFeedbackCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderPassSubpassFeedbackCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassSubpassFeedbackCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSubpassFeedback = (VkRenderPassSubpassFeedbackInfoEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkRenderPassSubpassFeedbackInfoEXT)); + } else { + s->pSubpassFeedback = NULL; + } +} + +void vkb_dec_VkRenderPassSubpassFeedbackCreateInfoEXT(vkb_dec *d, VkRenderPassSubpassFeedbackCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderPassSubpassFeedbackCreateInfoEXT(d, s); +} + +void vkb_encfix_VkRenderingAreaInfo(vkb_enc *e, const VkRenderingAreaInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachmentFormats) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachmentFormats, (size_t)n_ * sizeof(*s->pColorAttachmentFormats)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderingAreaInfo(vkb_enc *e, const VkRenderingAreaInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingAreaInfo(e, s, raw); +} + +void vkb_decfix_VkRenderingAreaInfo(vkb_dec *d, VkRenderingAreaInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachmentFormats = (const VkFormat *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkFormat)); + } else { + s->pColorAttachmentFormats = NULL; + } +} + +void vkb_dec_VkRenderingAreaInfo(vkb_dec *d, VkRenderingAreaInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingAreaInfo(d, s); +} + +void vkb_encfix_VkRenderingAttachmentFlagsInfoKHR(vkb_enc *e, const VkRenderingAttachmentFlagsInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderingAttachmentFlagsInfoKHR(vkb_enc *e, const VkRenderingAttachmentFlagsInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingAttachmentFlagsInfoKHR(e, s, raw); +} + +void vkb_decfix_VkRenderingAttachmentFlagsInfoKHR(vkb_dec *d, VkRenderingAttachmentFlagsInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderingAttachmentFlagsInfoKHR(vkb_dec *d, VkRenderingAttachmentFlagsInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingAttachmentFlagsInfoKHR(d, s); +} + +void vkb_encfix_VkRenderingAttachmentInfo(vkb_enc *e, const VkRenderingAttachmentInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderingAttachmentInfo(vkb_enc *e, const VkRenderingAttachmentInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingAttachmentInfo(e, s, raw); +} + +void vkb_decfix_VkRenderingAttachmentInfo(vkb_dec *d, VkRenderingAttachmentInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderingAttachmentInfo(vkb_dec *d, VkRenderingAttachmentInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingAttachmentInfo(d, s); +} + +void vkb_encfix_VkRenderingAttachmentLocationInfo(vkb_enc *e, const VkRenderingAttachmentLocationInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachmentLocations) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachmentLocations, (size_t)n_ * sizeof(*s->pColorAttachmentLocations)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderingAttachmentLocationInfo(vkb_enc *e, const VkRenderingAttachmentLocationInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingAttachmentLocationInfo(e, s, raw); +} + +void vkb_decfix_VkRenderingAttachmentLocationInfo(vkb_dec *d, VkRenderingAttachmentLocationInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachmentLocations = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pColorAttachmentLocations = NULL; + } +} + +void vkb_dec_VkRenderingAttachmentLocationInfo(vkb_dec *d, VkRenderingAttachmentLocationInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingAttachmentLocationInfo(d, s); +} + +void vkb_encfix_VkRenderingEndInfoKHR(vkb_enc *e, const VkRenderingEndInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderingEndInfoKHR(vkb_enc *e, const VkRenderingEndInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingEndInfoKHR(e, s, raw); +} + +void vkb_decfix_VkRenderingEndInfoKHR(vkb_dec *d, VkRenderingEndInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderingEndInfoKHR(vkb_dec *d, VkRenderingEndInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingEndInfoKHR(d, s); +} + +void vkb_encfix_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_enc *e, const VkRenderingFragmentDensityMapAttachmentInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_enc *e, const VkRenderingFragmentDensityMapAttachmentInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingFragmentDensityMapAttachmentInfoEXT(e, s, raw); +} + +void vkb_decfix_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_dec *d, VkRenderingFragmentDensityMapAttachmentInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderingFragmentDensityMapAttachmentInfoEXT(vkb_dec *d, VkRenderingFragmentDensityMapAttachmentInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingFragmentDensityMapAttachmentInfoEXT(d, s); +} + +void vkb_encfix_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkRenderingFragmentShadingRateAttachmentInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_enc *e, const VkRenderingFragmentShadingRateAttachmentInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingFragmentShadingRateAttachmentInfoKHR(e, s, raw); +} + +void vkb_decfix_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkRenderingFragmentShadingRateAttachmentInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkRenderingFragmentShadingRateAttachmentInfoKHR(vkb_dec *d, VkRenderingFragmentShadingRateAttachmentInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingFragmentShadingRateAttachmentInfoKHR(d, s); +} + +void vkb_encfix_VkRenderingInfo(vkb_enc *e, const VkRenderingInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachments) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingAttachmentInfo(e, &s->pColorAttachments[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDepthAttachment) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingAttachmentInfo(e, &s->pDepthAttachment[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pStencilAttachment) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkRenderingAttachmentInfo(e, &s->pStencilAttachment[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderingInfo(vkb_enc *e, const VkRenderingInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingInfo(e, s, raw); +} + +void vkb_decfix_VkRenderingInfo(vkb_dec *d, VkRenderingInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingAttachmentInfo *a_ = (VkRenderingAttachmentInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingAttachmentInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingAttachmentInfo(d, &a_[i_]); + s->pColorAttachments = a_; + } else { + s->pColorAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingAttachmentInfo *a_ = (VkRenderingAttachmentInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingAttachmentInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingAttachmentInfo(d, &a_[i_]); + s->pDepthAttachment = a_; + } else { + s->pDepthAttachment = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkRenderingAttachmentInfo *a_ = (VkRenderingAttachmentInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkRenderingAttachmentInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkRenderingAttachmentInfo(d, &a_[i_]); + s->pStencilAttachment = a_; + } else { + s->pStencilAttachment = NULL; + } +} + +void vkb_dec_VkRenderingInfo(vkb_dec *d, VkRenderingInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingInfo(d, s); +} + +void vkb_encfix_VkRenderingInputAttachmentIndexInfo(vkb_enc *e, const VkRenderingInputAttachmentIndexInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pColorAttachmentInputIndices) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachmentInputIndices, (size_t)n_ * sizeof(*s->pColorAttachmentInputIndices)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDepthInputAttachmentIndex) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDepthInputAttachmentIndex, (size_t)n_ * sizeof(*s->pDepthInputAttachmentIndex)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pStencilInputAttachmentIndex) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pStencilInputAttachmentIndex, (size_t)n_ * sizeof(*s->pStencilInputAttachmentIndex)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkRenderingInputAttachmentIndexInfo(vkb_enc *e, const VkRenderingInputAttachmentIndexInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkRenderingInputAttachmentIndexInfo(e, s, raw); +} + +void vkb_decfix_VkRenderingInputAttachmentIndexInfo(vkb_dec *d, VkRenderingInputAttachmentIndexInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachmentInputIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pColorAttachmentInputIndices = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDepthInputAttachmentIndex = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pDepthInputAttachmentIndex = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pStencilInputAttachmentIndex = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pStencilInputAttachmentIndex = NULL; + } +} + +void vkb_dec_VkRenderingInputAttachmentIndexInfo(vkb_dec *d, VkRenderingInputAttachmentIndexInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkRenderingInputAttachmentIndexInfo(d, s); +} + +void vkb_encfix_VkResolveImageInfo2(vkb_enc *e, const VkResolveImageInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pRegions) { + uint32_t n_ = (uint32_t)(s->regionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkImageResolve2(e, &s->pRegions[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkResolveImageInfo2(vkb_enc *e, const VkResolveImageInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkResolveImageInfo2(e, s, raw); +} + +void vkb_decfix_VkResolveImageInfo2(vkb_dec *d, VkResolveImageInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkImageResolve2 *a_ = (VkImageResolve2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkImageResolve2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkImageResolve2(d, &a_[i_]); + s->pRegions = a_; + } else { + s->pRegions = NULL; + } +} + +void vkb_dec_VkResolveImageInfo2(vkb_dec *d, VkResolveImageInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkResolveImageInfo2(d, s); +} + +void vkb_encfix_VkResolveImageModeInfoKHR(vkb_enc *e, const VkResolveImageModeInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkResolveImageModeInfoKHR(vkb_enc *e, const VkResolveImageModeInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkResolveImageModeInfoKHR(e, s, raw); +} + +void vkb_decfix_VkResolveImageModeInfoKHR(vkb_dec *d, VkResolveImageModeInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkResolveImageModeInfoKHR(vkb_dec *d, VkResolveImageModeInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkResolveImageModeInfoKHR(d, s); +} + +void vkb_encfix_VkSampleLocationsInfoEXT(vkb_enc *e, const VkSampleLocationsInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSampleLocations) { + uint32_t n_ = (uint32_t)(s->sampleLocationsCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSampleLocations, (size_t)n_ * sizeof(*s->pSampleLocations)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSampleLocationsInfoEXT(vkb_enc *e, const VkSampleLocationsInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSampleLocationsInfoEXT(e, s, raw); +} + +void vkb_decfix_VkSampleLocationsInfoEXT(vkb_dec *d, VkSampleLocationsInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSampleLocations = (const VkSampleLocationEXT *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSampleLocationEXT)); + } else { + s->pSampleLocations = NULL; + } +} + +void vkb_dec_VkSampleLocationsInfoEXT(vkb_dec *d, VkSampleLocationsInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSampleLocationsInfoEXT(d, s); +} + +void vkb_encfix_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_enc *e, const VkSamplerBorderColorComponentMappingCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_enc *e, const VkSamplerBorderColorComponentMappingCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerBorderColorComponentMappingCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_dec *d, VkSamplerBorderColorComponentMappingCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerBorderColorComponentMappingCreateInfoEXT(vkb_dec *d, VkSamplerBorderColorComponentMappingCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerBorderColorComponentMappingCreateInfoEXT(d, s); +} + +void vkb_encfix_VkSamplerCreateInfo(vkb_enc *e, const VkSamplerCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerCreateInfo(vkb_enc *e, const VkSamplerCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerCreateInfo(e, s, raw); +} + +void vkb_decfix_VkSamplerCreateInfo(vkb_dec *d, VkSamplerCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerCreateInfo(vkb_dec *d, VkSamplerCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerCreateInfo(d, s); +} + +void vkb_encfix_VkSamplerCustomBorderColorCreateInfoEXT(vkb_enc *e, const VkSamplerCustomBorderColorCreateInfoEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerCustomBorderColorCreateInfoEXT(vkb_enc *e, const VkSamplerCustomBorderColorCreateInfoEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerCustomBorderColorCreateInfoEXT(e, s, raw); +} + +void vkb_decfix_VkSamplerCustomBorderColorCreateInfoEXT(vkb_dec *d, VkSamplerCustomBorderColorCreateInfoEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerCustomBorderColorCreateInfoEXT(vkb_dec *d, VkSamplerCustomBorderColorCreateInfoEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerCustomBorderColorCreateInfoEXT(d, s); +} + +void vkb_encfix_VkSamplerReductionModeCreateInfo(vkb_enc *e, const VkSamplerReductionModeCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerReductionModeCreateInfo(vkb_enc *e, const VkSamplerReductionModeCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerReductionModeCreateInfo(e, s, raw); +} + +void vkb_decfix_VkSamplerReductionModeCreateInfo(vkb_dec *d, VkSamplerReductionModeCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerReductionModeCreateInfo(vkb_dec *d, VkSamplerReductionModeCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerReductionModeCreateInfo(d, s); +} + +void vkb_encfix_VkSamplerYcbcrConversionCreateInfo(vkb_enc *e, const VkSamplerYcbcrConversionCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerYcbcrConversionCreateInfo(vkb_enc *e, const VkSamplerYcbcrConversionCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerYcbcrConversionCreateInfo(e, s, raw); +} + +void vkb_decfix_VkSamplerYcbcrConversionCreateInfo(vkb_dec *d, VkSamplerYcbcrConversionCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerYcbcrConversionCreateInfo(vkb_dec *d, VkSamplerYcbcrConversionCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerYcbcrConversionCreateInfo(d, s); +} + +void vkb_encfix_VkSamplerYcbcrConversionImageFormatProperties(vkb_enc *e, const VkSamplerYcbcrConversionImageFormatProperties *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerYcbcrConversionImageFormatProperties(vkb_enc *e, const VkSamplerYcbcrConversionImageFormatProperties *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerYcbcrConversionImageFormatProperties(e, s, raw); +} + +void vkb_decfix_VkSamplerYcbcrConversionImageFormatProperties(vkb_dec *d, VkSamplerYcbcrConversionImageFormatProperties *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerYcbcrConversionImageFormatProperties(vkb_dec *d, VkSamplerYcbcrConversionImageFormatProperties *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerYcbcrConversionImageFormatProperties(d, s); +} + +void vkb_encfix_VkSamplerYcbcrConversionInfo(vkb_enc *e, const VkSamplerYcbcrConversionInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSamplerYcbcrConversionInfo(vkb_enc *e, const VkSamplerYcbcrConversionInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSamplerYcbcrConversionInfo(e, s, raw); +} + +void vkb_decfix_VkSamplerYcbcrConversionInfo(vkb_dec *d, VkSamplerYcbcrConversionInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSamplerYcbcrConversionInfo(vkb_dec *d, VkSamplerYcbcrConversionInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSamplerYcbcrConversionInfo(d, s); +} + +void vkb_encfix_VkSemaphoreCreateInfo(vkb_enc *e, const VkSemaphoreCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSemaphoreCreateInfo(vkb_enc *e, const VkSemaphoreCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSemaphoreCreateInfo(e, s, raw); +} + +void vkb_decfix_VkSemaphoreCreateInfo(vkb_dec *d, VkSemaphoreCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSemaphoreCreateInfo(vkb_dec *d, VkSemaphoreCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSemaphoreCreateInfo(d, s); +} + +void vkb_encfix_VkSemaphoreGetFdInfoKHR(vkb_enc *e, const VkSemaphoreGetFdInfoKHR *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSemaphoreGetFdInfoKHR(vkb_enc *e, const VkSemaphoreGetFdInfoKHR *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSemaphoreGetFdInfoKHR(e, s, raw); +} + +void vkb_decfix_VkSemaphoreGetFdInfoKHR(vkb_dec *d, VkSemaphoreGetFdInfoKHR *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSemaphoreGetFdInfoKHR(vkb_dec *d, VkSemaphoreGetFdInfoKHR *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSemaphoreGetFdInfoKHR(d, s); +} + +void vkb_encfix_VkSemaphoreSignalInfo(vkb_enc *e, const VkSemaphoreSignalInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSemaphoreSignalInfo(vkb_enc *e, const VkSemaphoreSignalInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSemaphoreSignalInfo(e, s, raw); +} + +void vkb_decfix_VkSemaphoreSignalInfo(vkb_dec *d, VkSemaphoreSignalInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSemaphoreSignalInfo(vkb_dec *d, VkSemaphoreSignalInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSemaphoreSignalInfo(d, s); +} + +void vkb_encfix_VkSemaphoreSubmitInfo(vkb_enc *e, const VkSemaphoreSubmitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSemaphoreSubmitInfo(vkb_enc *e, const VkSemaphoreSubmitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSemaphoreSubmitInfo(e, s, raw); +} + +void vkb_decfix_VkSemaphoreSubmitInfo(vkb_dec *d, VkSemaphoreSubmitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSemaphoreSubmitInfo(vkb_dec *d, VkSemaphoreSubmitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSemaphoreSubmitInfo(d, s); +} + +void vkb_encfix_VkSemaphoreTypeCreateInfo(vkb_enc *e, const VkSemaphoreTypeCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSemaphoreTypeCreateInfo(vkb_enc *e, const VkSemaphoreTypeCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSemaphoreTypeCreateInfo(e, s, raw); +} + +void vkb_decfix_VkSemaphoreTypeCreateInfo(vkb_dec *d, VkSemaphoreTypeCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSemaphoreTypeCreateInfo(vkb_dec *d, VkSemaphoreTypeCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSemaphoreTypeCreateInfo(d, s); +} + +void vkb_encfix_VkSemaphoreWaitInfo(vkb_enc *e, const VkSemaphoreWaitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSemaphores) { + uint32_t n_ = (uint32_t)(s->semaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSemaphores, (size_t)n_ * sizeof(*s->pSemaphores)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pValues) { + uint32_t n_ = (uint32_t)(s->semaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pValues, (size_t)n_ * sizeof(*s->pValues)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSemaphoreWaitInfo(vkb_enc *e, const VkSemaphoreWaitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSemaphoreWaitInfo(e, s, raw); +} + +void vkb_decfix_VkSemaphoreWaitInfo(vkb_dec *d, VkSemaphoreWaitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSemaphores = (const VkSemaphore *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSemaphore)); + } else { + s->pSemaphores = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pValues = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pValues = NULL; + } +} + +void vkb_dec_VkSemaphoreWaitInfo(vkb_dec *d, VkSemaphoreWaitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSemaphoreWaitInfo(d, s); +} + +void vkb_encfix_VkShaderModuleCreateInfo(vkb_enc *e, const VkShaderModuleCreateInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_blob(e, s->pCode ? (const void *)s->pCode : NULL, s->pCode ? (size_t)(s->codeSize) : 0); +} + +void vkb_enc_VkShaderModuleCreateInfo(vkb_enc *e, const VkShaderModuleCreateInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkShaderModuleCreateInfo(e, s, raw); +} + +void vkb_decfix_VkShaderModuleCreateInfo(vkb_dec *d, VkShaderModuleCreateInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pCode = (const uint32_t *)vkb_dec_blob(d, NULL); +} + +void vkb_dec_VkShaderModuleCreateInfo(vkb_dec *d, VkShaderModuleCreateInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkShaderModuleCreateInfo(d, s); +} + +void vkb_encfix_VkShaderModuleIdentifierEXT(vkb_enc *e, const VkShaderModuleIdentifierEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkShaderModuleIdentifierEXT(vkb_enc *e, const VkShaderModuleIdentifierEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkShaderModuleIdentifierEXT(e, s, raw); +} + +void vkb_decfix_VkShaderModuleIdentifierEXT(vkb_dec *d, VkShaderModuleIdentifierEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkShaderModuleIdentifierEXT(vkb_dec *d, VkShaderModuleIdentifierEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkShaderModuleIdentifierEXT(d, s); +} + +void vkb_encfix_VkSparseBufferMemoryBindInfo(vkb_enc *e, const VkSparseBufferMemoryBindInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pBinds) { + uint32_t n_ = (uint32_t)(s->bindCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pBinds, (size_t)n_ * sizeof(*s->pBinds)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSparseBufferMemoryBindInfo(vkb_enc *e, const VkSparseBufferMemoryBindInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSparseBufferMemoryBindInfo(e, s, raw); +} + +void vkb_decfix_VkSparseBufferMemoryBindInfo(vkb_dec *d, VkSparseBufferMemoryBindInfo *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pBinds = (const VkSparseMemoryBind *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSparseMemoryBind)); + } else { + s->pBinds = NULL; + } +} + +void vkb_dec_VkSparseBufferMemoryBindInfo(vkb_dec *d, VkSparseBufferMemoryBindInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSparseBufferMemoryBindInfo(d, s); +} + +void vkb_encfix_VkSparseImageFormatProperties2(vkb_enc *e, const VkSparseImageFormatProperties2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSparseImageFormatProperties2(vkb_enc *e, const VkSparseImageFormatProperties2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSparseImageFormatProperties2(e, s, raw); +} + +void vkb_decfix_VkSparseImageFormatProperties2(vkb_dec *d, VkSparseImageFormatProperties2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSparseImageFormatProperties2(vkb_dec *d, VkSparseImageFormatProperties2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSparseImageFormatProperties2(d, s); +} + +void vkb_encfix_VkSparseImageMemoryBindInfo(vkb_enc *e, const VkSparseImageMemoryBindInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pBinds) { + uint32_t n_ = (uint32_t)(s->bindCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pBinds, (size_t)n_ * sizeof(*s->pBinds)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSparseImageMemoryBindInfo(vkb_enc *e, const VkSparseImageMemoryBindInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSparseImageMemoryBindInfo(e, s, raw); +} + +void vkb_decfix_VkSparseImageMemoryBindInfo(vkb_dec *d, VkSparseImageMemoryBindInfo *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pBinds = (const VkSparseImageMemoryBind *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSparseImageMemoryBind)); + } else { + s->pBinds = NULL; + } +} + +void vkb_dec_VkSparseImageMemoryBindInfo(vkb_dec *d, VkSparseImageMemoryBindInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSparseImageMemoryBindInfo(d, s); +} + +void vkb_encfix_VkSparseImageMemoryRequirements2(vkb_enc *e, const VkSparseImageMemoryRequirements2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSparseImageMemoryRequirements2(vkb_enc *e, const VkSparseImageMemoryRequirements2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSparseImageMemoryRequirements2(e, s, raw); +} + +void vkb_decfix_VkSparseImageMemoryRequirements2(vkb_dec *d, VkSparseImageMemoryRequirements2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSparseImageMemoryRequirements2(vkb_dec *d, VkSparseImageMemoryRequirements2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSparseImageMemoryRequirements2(d, s); +} + +void vkb_encfix_VkSparseImageOpaqueMemoryBindInfo(vkb_enc *e, const VkSparseImageOpaqueMemoryBindInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pBinds) { + uint32_t n_ = (uint32_t)(s->bindCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pBinds, (size_t)n_ * sizeof(*s->pBinds)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSparseImageOpaqueMemoryBindInfo(vkb_enc *e, const VkSparseImageOpaqueMemoryBindInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSparseImageOpaqueMemoryBindInfo(e, s, raw); +} + +void vkb_decfix_VkSparseImageOpaqueMemoryBindInfo(vkb_dec *d, VkSparseImageOpaqueMemoryBindInfo *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pBinds = (const VkSparseMemoryBind *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSparseMemoryBind)); + } else { + s->pBinds = NULL; + } +} + +void vkb_dec_VkSparseImageOpaqueMemoryBindInfo(vkb_dec *d, VkSparseImageOpaqueMemoryBindInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSparseImageOpaqueMemoryBindInfo(d, s); +} + +void vkb_encfix_VkSpecializationInfo(vkb_enc *e, const VkSpecializationInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pMapEntries) { + uint32_t n_ = (uint32_t)(s->mapEntryCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pMapEntries, (size_t)n_ * sizeof(*s->pMapEntries)); + } else { + vkb_enc_u8(e, 0); + } + vkb_enc_blob(e, s->pData ? (const void *)s->pData : NULL, s->pData ? (size_t)(s->dataSize) : 0); +} + +void vkb_enc_VkSpecializationInfo(vkb_enc *e, const VkSpecializationInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSpecializationInfo(e, s, raw); +} + +void vkb_decfix_VkSpecializationInfo(vkb_dec *d, VkSpecializationInfo *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pMapEntries = (const VkSpecializationMapEntry *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSpecializationMapEntry)); + } else { + s->pMapEntries = NULL; + } + s->pData = (const void *)vkb_dec_blob(d, NULL); +} + +void vkb_dec_VkSpecializationInfo(vkb_dec *d, VkSpecializationInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSpecializationInfo(d, s); +} + +void vkb_encfix_VkSubmitInfo(vkb_enc *e, const VkSubmitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pWaitSemaphores) { + uint32_t n_ = (uint32_t)(s->waitSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pWaitSemaphores, (size_t)n_ * sizeof(*s->pWaitSemaphores)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pWaitDstStageMask) { + uint32_t n_ = (uint32_t)(s->waitSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pWaitDstStageMask, (size_t)n_ * sizeof(*s->pWaitDstStageMask)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCommandBuffers) { + uint32_t n_ = (uint32_t)(s->commandBufferCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_u64(e, vkb_remote((const void *)s->pCommandBuffers[i_])); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSignalSemaphores) { + uint32_t n_ = (uint32_t)(s->signalSemaphoreCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSignalSemaphores, (size_t)n_ * sizeof(*s->pSignalSemaphores)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSubmitInfo(vkb_enc *e, const VkSubmitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubmitInfo(e, s, raw); +} + +void vkb_decfix_VkSubmitInfo(vkb_dec *d, VkSubmitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pWaitSemaphores = (const VkSemaphore *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSemaphore)); + } else { + s->pWaitSemaphores = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pWaitDstStageMask = (const VkPipelineStageFlags *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkPipelineStageFlags)); + } else { + s->pWaitDstStageMask = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBuffer *a_ = (VkCommandBuffer *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBuffer)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) a_[i_] = (VkCommandBuffer)(uintptr_t)vkb_dec_u64(d); + s->pCommandBuffers = a_; + } else { + s->pCommandBuffers = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSignalSemaphores = (const VkSemaphore *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkSemaphore)); + } else { + s->pSignalSemaphores = NULL; + } +} + +void vkb_dec_VkSubmitInfo(vkb_dec *d, VkSubmitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubmitInfo(d, s); +} + +void vkb_encfix_VkSubmitInfo2(vkb_enc *e, const VkSubmitInfo2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pWaitSemaphoreInfos) { + uint32_t n_ = (uint32_t)(s->waitSemaphoreInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreSubmitInfo(e, &s->pWaitSemaphoreInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pCommandBufferInfos) { + uint32_t n_ = (uint32_t)(s->commandBufferInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkCommandBufferSubmitInfo(e, &s->pCommandBufferInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSignalSemaphoreInfos) { + uint32_t n_ = (uint32_t)(s->signalSemaphoreInfoCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkSemaphoreSubmitInfo(e, &s->pSignalSemaphoreInfos[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSubmitInfo2(vkb_enc *e, const VkSubmitInfo2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubmitInfo2(e, s, raw); +} + +void vkb_decfix_VkSubmitInfo2(vkb_dec *d, VkSubmitInfo2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreSubmitInfo *a_ = (VkSemaphoreSubmitInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreSubmitInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreSubmitInfo(d, &a_[i_]); + s->pWaitSemaphoreInfos = a_; + } else { + s->pWaitSemaphoreInfos = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkCommandBufferSubmitInfo *a_ = (VkCommandBufferSubmitInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkCommandBufferSubmitInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkCommandBufferSubmitInfo(d, &a_[i_]); + s->pCommandBufferInfos = a_; + } else { + s->pCommandBufferInfos = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkSemaphoreSubmitInfo *a_ = (VkSemaphoreSubmitInfo *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkSemaphoreSubmitInfo)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkSemaphoreSubmitInfo(d, &a_[i_]); + s->pSignalSemaphoreInfos = a_; + } else { + s->pSignalSemaphoreInfos = NULL; + } +} + +void vkb_dec_VkSubmitInfo2(vkb_dec *d, VkSubmitInfo2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubmitInfo2(d, s); +} + +void vkb_encfix_VkSubpassBeginInfo(vkb_enc *e, const VkSubpassBeginInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSubpassBeginInfo(vkb_enc *e, const VkSubpassBeginInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassBeginInfo(e, s, raw); +} + +void vkb_decfix_VkSubpassBeginInfo(vkb_dec *d, VkSubpassBeginInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSubpassBeginInfo(vkb_dec *d, VkSubpassBeginInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassBeginInfo(d, s); +} + +void vkb_encfix_VkSubpassDependency2(vkb_enc *e, const VkSubpassDependency2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSubpassDependency2(vkb_enc *e, const VkSubpassDependency2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassDependency2(e, s, raw); +} + +void vkb_decfix_VkSubpassDependency2(vkb_dec *d, VkSubpassDependency2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSubpassDependency2(vkb_dec *d, VkSubpassDependency2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassDependency2(d, s); +} + +void vkb_encfix_VkSubpassDescription(vkb_enc *e, const VkSubpassDescription *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + if (s->pInputAttachments) { + uint32_t n_ = (uint32_t)(s->inputAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pInputAttachments, (size_t)n_ * sizeof(*s->pInputAttachments)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pColorAttachments) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pColorAttachments, (size_t)n_ * sizeof(*s->pColorAttachments)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pResolveAttachments) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pResolveAttachments, (size_t)n_ * sizeof(*s->pResolveAttachments)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDepthStencilAttachment) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDepthStencilAttachment, (size_t)n_ * sizeof(*s->pDepthStencilAttachment)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pPreserveAttachments) { + uint32_t n_ = (uint32_t)(s->preserveAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPreserveAttachments, (size_t)n_ * sizeof(*s->pPreserveAttachments)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSubpassDescription(vkb_enc *e, const VkSubpassDescription *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassDescription(e, s, raw); +} + +void vkb_decfix_VkSubpassDescription(vkb_dec *d, VkSubpassDescription *s) +{ + (void)d; (void)s; + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pInputAttachments = (const VkAttachmentReference *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkAttachmentReference)); + } else { + s->pInputAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pColorAttachments = (const VkAttachmentReference *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkAttachmentReference)); + } else { + s->pColorAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pResolveAttachments = (const VkAttachmentReference *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkAttachmentReference)); + } else { + s->pResolveAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDepthStencilAttachment = (const VkAttachmentReference *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkAttachmentReference)); + } else { + s->pDepthStencilAttachment = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPreserveAttachments = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pPreserveAttachments = NULL; + } +} + +void vkb_dec_VkSubpassDescription(vkb_dec *d, VkSubpassDescription *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassDescription(d, s); +} + +void vkb_encfix_VkSubpassDescription2(vkb_enc *e, const VkSubpassDescription2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pInputAttachments) { + uint32_t n_ = (uint32_t)(s->inputAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentReference2(e, &s->pInputAttachments[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pColorAttachments) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentReference2(e, &s->pColorAttachments[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pResolveAttachments) { + uint32_t n_ = (uint32_t)(s->colorAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentReference2(e, &s->pResolveAttachments[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDepthStencilAttachment) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentReference2(e, &s->pDepthStencilAttachment[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pPreserveAttachments) { + uint32_t n_ = (uint32_t)(s->preserveAttachmentCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pPreserveAttachments, (size_t)n_ * sizeof(*s->pPreserveAttachments)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSubpassDescription2(vkb_enc *e, const VkSubpassDescription2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassDescription2(e, s, raw); +} + +void vkb_decfix_VkSubpassDescription2(vkb_dec *d, VkSubpassDescription2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentReference2 *a_ = (VkAttachmentReference2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentReference2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentReference2(d, &a_[i_]); + s->pInputAttachments = a_; + } else { + s->pInputAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentReference2 *a_ = (VkAttachmentReference2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentReference2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentReference2(d, &a_[i_]); + s->pColorAttachments = a_; + } else { + s->pColorAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentReference2 *a_ = (VkAttachmentReference2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentReference2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentReference2(d, &a_[i_]); + s->pResolveAttachments = a_; + } else { + s->pResolveAttachments = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentReference2 *a_ = (VkAttachmentReference2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentReference2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentReference2(d, &a_[i_]); + s->pDepthStencilAttachment = a_; + } else { + s->pDepthStencilAttachment = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pPreserveAttachments = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pPreserveAttachments = NULL; + } +} + +void vkb_dec_VkSubpassDescription2(vkb_dec *d, VkSubpassDescription2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassDescription2(d, s); +} + +void vkb_encfix_VkSubpassDescriptionDepthStencilResolve(vkb_enc *e, const VkSubpassDescriptionDepthStencilResolve *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDepthStencilResolveAttachment) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkAttachmentReference2(e, &s->pDepthStencilResolveAttachment[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkSubpassDescriptionDepthStencilResolve(vkb_enc *e, const VkSubpassDescriptionDepthStencilResolve *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassDescriptionDepthStencilResolve(e, s, raw); +} + +void vkb_decfix_VkSubpassDescriptionDepthStencilResolve(vkb_dec *d, VkSubpassDescriptionDepthStencilResolve *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkAttachmentReference2 *a_ = (VkAttachmentReference2 *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkAttachmentReference2)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkAttachmentReference2(d, &a_[i_]); + s->pDepthStencilResolveAttachment = a_; + } else { + s->pDepthStencilResolveAttachment = NULL; + } +} + +void vkb_dec_VkSubpassDescriptionDepthStencilResolve(vkb_dec *d, VkSubpassDescriptionDepthStencilResolve *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassDescriptionDepthStencilResolve(d, s); +} + +void vkb_encfix_VkSubpassEndInfo(vkb_enc *e, const VkSubpassEndInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSubpassEndInfo(vkb_enc *e, const VkSubpassEndInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassEndInfo(e, s, raw); +} + +void vkb_decfix_VkSubpassEndInfo(vkb_dec *d, VkSubpassEndInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSubpassEndInfo(vkb_dec *d, VkSubpassEndInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassEndInfo(d, s); +} + +void vkb_encfix_VkSubpassResolvePerformanceQueryEXT(vkb_enc *e, const VkSubpassResolvePerformanceQueryEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSubpassResolvePerformanceQueryEXT(vkb_enc *e, const VkSubpassResolvePerformanceQueryEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassResolvePerformanceQueryEXT(e, s, raw); +} + +void vkb_decfix_VkSubpassResolvePerformanceQueryEXT(vkb_dec *d, VkSubpassResolvePerformanceQueryEXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSubpassResolvePerformanceQueryEXT(vkb_dec *d, VkSubpassResolvePerformanceQueryEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassResolvePerformanceQueryEXT(d, s); +} + +void vkb_encfix_VkSubpassSampleLocationsEXT(vkb_enc *e, const VkSubpassSampleLocationsEXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_encfix_VkSampleLocationsInfoEXT(e, &s->sampleLocationsInfo, raw + offsetof(VkSubpassSampleLocationsEXT, sampleLocationsInfo)); +} + +void vkb_enc_VkSubpassSampleLocationsEXT(vkb_enc *e, const VkSubpassSampleLocationsEXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubpassSampleLocationsEXT(e, s, raw); +} + +void vkb_decfix_VkSubpassSampleLocationsEXT(vkb_dec *d, VkSubpassSampleLocationsEXT *s) +{ + (void)d; (void)s; + vkb_decfix_VkSampleLocationsInfoEXT(d, &s->sampleLocationsInfo); +} + +void vkb_dec_VkSubpassSampleLocationsEXT(vkb_dec *d, VkSubpassSampleLocationsEXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubpassSampleLocationsEXT(d, s); +} + +void vkb_encfix_VkSubresourceHostMemcpySize(vkb_enc *e, const VkSubresourceHostMemcpySize *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSubresourceHostMemcpySize(vkb_enc *e, const VkSubresourceHostMemcpySize *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubresourceHostMemcpySize(e, s, raw); +} + +void vkb_decfix_VkSubresourceHostMemcpySize(vkb_dec *d, VkSubresourceHostMemcpySize *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSubresourceHostMemcpySize(vkb_dec *d, VkSubresourceHostMemcpySize *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubresourceHostMemcpySize(d, s); +} + +void vkb_encfix_VkSubresourceLayout2(vkb_enc *e, const VkSubresourceLayout2 *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkSubresourceLayout2(vkb_enc *e, const VkSubresourceLayout2 *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkSubresourceLayout2(e, s, raw); +} + +void vkb_decfix_VkSubresourceLayout2(vkb_dec *d, VkSubresourceLayout2 *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkSubresourceLayout2(vkb_dec *d, VkSubresourceLayout2 *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkSubresourceLayout2(d, s); +} + +void vkb_encfix_VkTensorCopyARM(vkb_enc *e, const VkTensorCopyARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pSrcOffset) { + uint32_t n_ = (uint32_t)(s->dimensionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSrcOffset, (size_t)n_ * sizeof(*s->pSrcOffset)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pDstOffset) { + uint32_t n_ = (uint32_t)(s->dimensionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDstOffset, (size_t)n_ * sizeof(*s->pDstOffset)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pExtent) { + uint32_t n_ = (uint32_t)(s->dimensionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pExtent, (size_t)n_ * sizeof(*s->pExtent)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkTensorCopyARM(vkb_enc *e, const VkTensorCopyARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorCopyARM(e, s, raw); +} + +void vkb_decfix_VkTensorCopyARM(vkb_dec *d, VkTensorCopyARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSrcOffset = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pSrcOffset = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDstOffset = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pDstOffset = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pExtent = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pExtent = NULL; + } +} + +void vkb_dec_VkTensorCopyARM(vkb_dec *d, VkTensorCopyARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorCopyARM(d, s); +} + +void vkb_encfix_VkTensorCreateInfoARM(vkb_enc *e, const VkTensorCreateInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDescription) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorDescriptionARM(e, &s->pDescription[i_]); + } else { + vkb_enc_u8(e, 0); + } + if (s->pQueueFamilyIndices) { + uint32_t n_ = (uint32_t)(s->queueFamilyIndexCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pQueueFamilyIndices, (size_t)n_ * sizeof(*s->pQueueFamilyIndices)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkTensorCreateInfoARM(vkb_enc *e, const VkTensorCreateInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorCreateInfoARM(e, s, raw); +} + +void vkb_decfix_VkTensorCreateInfoARM(vkb_dec *d, VkTensorCreateInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorDescriptionARM *a_ = (VkTensorDescriptionARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorDescriptionARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorDescriptionARM(d, &a_[i_]); + s->pDescription = a_; + } else { + s->pDescription = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pQueueFamilyIndices = (const uint32_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint32_t)); + } else { + s->pQueueFamilyIndices = NULL; + } +} + +void vkb_dec_VkTensorCreateInfoARM(vkb_dec *d, VkTensorCreateInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorCreateInfoARM(d, s); +} + +void vkb_encfix_VkTensorDependencyInfoARM(vkb_enc *e, const VkTensorDependencyInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pTensorMemoryBarriers) { + uint32_t n_ = (uint32_t)(1); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + for (uint32_t i_ = 0; i_ < n_; i_++) vkb_enc_VkTensorMemoryBarrierARM(e, &s->pTensorMemoryBarriers[i_]); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkTensorDependencyInfoARM(vkb_enc *e, const VkTensorDependencyInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorDependencyInfoARM(e, s, raw); +} + +void vkb_decfix_VkTensorDependencyInfoARM(vkb_dec *d, VkTensorDependencyInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + VkTensorMemoryBarrierARM *a_ = (VkTensorMemoryBarrierARM *)vkb_dec_alloc(d, (size_t)n_ * sizeof(VkTensorMemoryBarrierARM)); + for (uint32_t i_ = 0; a_ && i_ < n_; i_++) vkb_dec_VkTensorMemoryBarrierARM(d, &a_[i_]); + s->pTensorMemoryBarriers = a_; + } else { + s->pTensorMemoryBarriers = NULL; + } +} + +void vkb_dec_VkTensorDependencyInfoARM(vkb_dec *d, VkTensorDependencyInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorDependencyInfoARM(d, s); +} + +void vkb_encfix_VkTensorDescriptionARM(vkb_enc *e, const VkTensorDescriptionARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pDimensions) { + uint32_t n_ = (uint32_t)(s->dimensionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pDimensions, (size_t)n_ * sizeof(*s->pDimensions)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pStrides) { + uint32_t n_ = (uint32_t)(s->dimensionCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pStrides, (size_t)n_ * sizeof(*s->pStrides)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkTensorDescriptionARM(vkb_enc *e, const VkTensorDescriptionARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorDescriptionARM(e, s, raw); +} + +void vkb_decfix_VkTensorDescriptionARM(vkb_dec *d, VkTensorDescriptionARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pDimensions = (const int64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(int64_t)); + } else { + s->pDimensions = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pStrides = (const int64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(int64_t)); + } else { + s->pStrides = NULL; + } +} + +void vkb_dec_VkTensorDescriptionARM(vkb_dec *d, VkTensorDescriptionARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorDescriptionARM(d, s); +} + +void vkb_encfix_VkTensorFormatPropertiesARM(vkb_enc *e, const VkTensorFormatPropertiesARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkTensorFormatPropertiesARM(vkb_enc *e, const VkTensorFormatPropertiesARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorFormatPropertiesARM(e, s, raw); +} + +void vkb_decfix_VkTensorFormatPropertiesARM(vkb_dec *d, VkTensorFormatPropertiesARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkTensorFormatPropertiesARM(vkb_dec *d, VkTensorFormatPropertiesARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorFormatPropertiesARM(d, s); +} + +void vkb_encfix_VkTensorMemoryBarrierARM(vkb_enc *e, const VkTensorMemoryBarrierARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkTensorMemoryBarrierARM(vkb_enc *e, const VkTensorMemoryBarrierARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorMemoryBarrierARM(e, s, raw); +} + +void vkb_decfix_VkTensorMemoryBarrierARM(vkb_dec *d, VkTensorMemoryBarrierARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkTensorMemoryBarrierARM(vkb_dec *d, VkTensorMemoryBarrierARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorMemoryBarrierARM(d, s); +} + +void vkb_encfix_VkTensorMemoryRequirementsInfoARM(vkb_enc *e, const VkTensorMemoryRequirementsInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkTensorMemoryRequirementsInfoARM(vkb_enc *e, const VkTensorMemoryRequirementsInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorMemoryRequirementsInfoARM(e, s, raw); +} + +void vkb_decfix_VkTensorMemoryRequirementsInfoARM(vkb_dec *d, VkTensorMemoryRequirementsInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkTensorMemoryRequirementsInfoARM(vkb_dec *d, VkTensorMemoryRequirementsInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorMemoryRequirementsInfoARM(d, s); +} + +void vkb_encfix_VkTensorViewCreateInfoARM(vkb_enc *e, const VkTensorViewCreateInfoARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkTensorViewCreateInfoARM(vkb_enc *e, const VkTensorViewCreateInfoARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTensorViewCreateInfoARM(e, s, raw); +} + +void vkb_decfix_VkTensorViewCreateInfoARM(vkb_dec *d, VkTensorViewCreateInfoARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkTensorViewCreateInfoARM(vkb_dec *d, VkTensorViewCreateInfoARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTensorViewCreateInfoARM(d, s); +} + +void vkb_encfix_VkTimelineSemaphoreSubmitInfo(vkb_enc *e, const VkTimelineSemaphoreSubmitInfo *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pWaitSemaphoreValues) { + uint32_t n_ = (uint32_t)(s->waitSemaphoreValueCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pWaitSemaphoreValues, (size_t)n_ * sizeof(*s->pWaitSemaphoreValues)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pSignalSemaphoreValues) { + uint32_t n_ = (uint32_t)(s->signalSemaphoreValueCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pSignalSemaphoreValues, (size_t)n_ * sizeof(*s->pSignalSemaphoreValues)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkTimelineSemaphoreSubmitInfo(vkb_enc *e, const VkTimelineSemaphoreSubmitInfo *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkTimelineSemaphoreSubmitInfo(e, s, raw); +} + +void vkb_decfix_VkTimelineSemaphoreSubmitInfo(vkb_dec *d, VkTimelineSemaphoreSubmitInfo *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pWaitSemaphoreValues = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pWaitSemaphoreValues = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pSignalSemaphoreValues = (const uint64_t *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(uint64_t)); + } else { + s->pSignalSemaphoreValues = NULL; + } +} + +void vkb_dec_VkTimelineSemaphoreSubmitInfo(vkb_dec *d, VkTimelineSemaphoreSubmitInfo *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkTimelineSemaphoreSubmitInfo(d, s); +} + +void vkb_encfix_VkVertexInputAttributeDescription2EXT(vkb_enc *e, const VkVertexInputAttributeDescription2EXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkVertexInputAttributeDescription2EXT(vkb_enc *e, const VkVertexInputAttributeDescription2EXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkVertexInputAttributeDescription2EXT(e, s, raw); +} + +void vkb_decfix_VkVertexInputAttributeDescription2EXT(vkb_dec *d, VkVertexInputAttributeDescription2EXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkVertexInputAttributeDescription2EXT(vkb_dec *d, VkVertexInputAttributeDescription2EXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkVertexInputAttributeDescription2EXT(d, s); +} + +void vkb_encfix_VkVertexInputBindingDescription2EXT(vkb_enc *e, const VkVertexInputBindingDescription2EXT *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); +} + +void vkb_enc_VkVertexInputBindingDescription2EXT(vkb_enc *e, const VkVertexInputBindingDescription2EXT *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkVertexInputBindingDescription2EXT(e, s, raw); +} + +void vkb_decfix_VkVertexInputBindingDescription2EXT(vkb_dec *d, VkVertexInputBindingDescription2EXT *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); +} + +void vkb_dec_VkVertexInputBindingDescription2EXT(vkb_dec *d, VkVertexInputBindingDescription2EXT *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkVertexInputBindingDescription2EXT(d, s); +} + +void vkb_encfix_VkWriteDescriptorSet(vkb_enc *e, const VkWriteDescriptorSet *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pImageInfo && (vkb_desc_has_image(s->descriptorType))) { + uint32_t n_ = (uint32_t)(s->descriptorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pImageInfo, (size_t)n_ * sizeof(*s->pImageInfo)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pBufferInfo && (vkb_desc_has_buffer(s->descriptorType))) { + uint32_t n_ = (uint32_t)(s->descriptorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pBufferInfo, (size_t)n_ * sizeof(*s->pBufferInfo)); + } else { + vkb_enc_u8(e, 0); + } + if (s->pTexelBufferView && (vkb_desc_has_texel(s->descriptorType))) { + uint32_t n_ = (uint32_t)(s->descriptorCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pTexelBufferView, (size_t)n_ * sizeof(*s->pTexelBufferView)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkWriteDescriptorSet(vkb_enc *e, const VkWriteDescriptorSet *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkWriteDescriptorSet(e, s, raw); +} + +void vkb_decfix_VkWriteDescriptorSet(vkb_dec *d, VkWriteDescriptorSet *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pImageInfo = (const VkDescriptorImageInfo *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorImageInfo)); + } else { + s->pImageInfo = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pBufferInfo = (const VkDescriptorBufferInfo *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkDescriptorBufferInfo)); + } else { + s->pBufferInfo = NULL; + } + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pTexelBufferView = (const VkBufferView *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkBufferView)); + } else { + s->pTexelBufferView = NULL; + } +} + +void vkb_dec_VkWriteDescriptorSet(vkb_dec *d, VkWriteDescriptorSet *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkWriteDescriptorSet(d, s); +} + +void vkb_encfix_VkWriteDescriptorSetInlineUniformBlock(vkb_enc *e, const VkWriteDescriptorSetInlineUniformBlock *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + vkb_enc_blob(e, s->pData ? (const void *)s->pData : NULL, s->pData ? (size_t)(s->dataSize) : 0); +} + +void vkb_enc_VkWriteDescriptorSetInlineUniformBlock(vkb_enc *e, const VkWriteDescriptorSetInlineUniformBlock *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkWriteDescriptorSetInlineUniformBlock(e, s, raw); +} + +void vkb_decfix_VkWriteDescriptorSetInlineUniformBlock(vkb_dec *d, VkWriteDescriptorSetInlineUniformBlock *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + s->pData = (const void *)vkb_dec_blob(d, NULL); +} + +void vkb_dec_VkWriteDescriptorSetInlineUniformBlock(vkb_dec *d, VkWriteDescriptorSetInlineUniformBlock *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkWriteDescriptorSetInlineUniformBlock(d, s); +} + +void vkb_encfix_VkWriteDescriptorSetTensorARM(vkb_enc *e, const VkWriteDescriptorSetTensorARM *s, size_t raw) +{ + (void)e; (void)s; (void)raw; + vkb_enc_chain(e, s->pNext); + if (s->pTensorViews) { + uint32_t n_ = (uint32_t)(s->tensorViewCount); + vkb_enc_u8(e, 1); vkb_enc_u32(e, n_); + vkb_enc_raw(e, s->pTensorViews, (size_t)n_ * sizeof(*s->pTensorViews)); + } else { + vkb_enc_u8(e, 0); + } +} + +void vkb_enc_VkWriteDescriptorSetTensorARM(vkb_enc *e, const VkWriteDescriptorSetTensorARM *s) +{ + size_t raw = vkb_enc_raw(e, s, sizeof(*s)); + vkb_encfix_VkWriteDescriptorSetTensorARM(e, s, raw); +} + +void vkb_decfix_VkWriteDescriptorSetTensorARM(vkb_dec *d, VkWriteDescriptorSetTensorARM *s) +{ + (void)d; (void)s; + s->pNext = (void *)vkb_dec_chain(d); + if (vkb_dec_u8(d)) { + uint32_t n_ = vkb_dec_u32(d); + s->pTensorViews = (const VkTensorViewARM *)vkb_dec_raw_view(d, (size_t)n_ * sizeof(VkTensorViewARM)); + } else { + s->pTensorViews = NULL; + } +} + +void vkb_dec_VkWriteDescriptorSetTensorARM(vkb_dec *d, VkWriteDescriptorSetTensorARM *s) +{ + vkb_dec_raw_into(d, s, sizeof(*s)); + vkb_decfix_VkWriteDescriptorSetTensorARM(d, s); +} + +size_t vkb_struct_size(VkStructureType t) +{ + switch ((int)t) { + case VK_STRUCTURE_TYPE_APPLICATION_INFO: return sizeof(VkApplicationInfo); + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: return sizeof(VkAttachmentDescription2); + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: return sizeof(VkAttachmentDescriptionStencilLayout); + case VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT: return sizeof(VkAttachmentFeedbackLoopInfoEXT); + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: return sizeof(VkAttachmentReference2); + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: return sizeof(VkAttachmentReferenceStencilLayout); + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: return sizeof(VkBeginCustomResolveInfoEXT); + case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO: return sizeof(VkBindBufferMemoryDeviceGroupInfo); + case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: return sizeof(VkBindBufferMemoryInfo); + case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: return sizeof(VkBindDescriptorSetsInfo); + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO: return sizeof(VkBindImageMemoryDeviceGroupInfo); + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO: return sizeof(VkBindImageMemoryInfo); + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: return sizeof(VkBindImageMemorySwapchainInfoKHR); + case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: return sizeof(VkBindImagePlaneMemoryInfo); + case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: return sizeof(VkBindMemoryStatus); + case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO: return sizeof(VkBindSparseInfo); + case VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM: return sizeof(VkBindTensorMemoryInfoARM); + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: return sizeof(VkBlitImageInfo2); + case VK_STRUCTURE_TYPE_BUFFER_COPY_2: return sizeof(VkBufferCopy2); + case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO: return sizeof(VkBufferCreateInfo); + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT: return sizeof(VkBufferDeviceAddressCreateInfoEXT); + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: return sizeof(VkBufferDeviceAddressInfo); + case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2: return sizeof(VkBufferImageCopy2); + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: return sizeof(VkBufferMemoryBarrier); + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2: return sizeof(VkBufferMemoryBarrier2); + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2: return sizeof(VkBufferMemoryRequirementsInfo2); + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: return sizeof(VkBufferOpaqueCaptureAddressCreateInfo); + case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: return sizeof(VkBufferUsageFlags2CreateInfo); + case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: return sizeof(VkBufferViewCreateInfo); + case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR: return sizeof(VkCalibratedTimestampInfoKHR); + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: return sizeof(VkCommandBufferAllocateInfo); + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: return sizeof(VkCommandBufferBeginInfo); + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT: return sizeof(VkCommandBufferInheritanceConditionalRenderingInfoEXT); + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: return sizeof(VkCommandBufferInheritanceInfo); + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: return sizeof(VkCommandBufferInheritanceRenderingInfo); + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO: return sizeof(VkCommandBufferSubmitInfo); + case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: return sizeof(VkCommandPoolCreateInfo); + case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO: return sizeof(VkComputePipelineCreateInfo); + case VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT: return sizeof(VkConditionalRenderingBeginInfoEXT); + case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR: return sizeof(VkCooperativeMatrixPropertiesKHR); + case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2: return sizeof(VkCopyBufferInfo2); + case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2: return sizeof(VkCopyBufferToImageInfo2); + case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: return sizeof(VkCopyDescriptorSet); + case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2: return sizeof(VkCopyImageInfo2); + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2: return sizeof(VkCopyImageToBufferInfo2); + case VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM: return sizeof(VkCopyTensorInfoARM); + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: return sizeof(VkCustomResolveCreateInfoEXT); + case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT: return sizeof(VkDebugUtilsObjectNameInfoEXT); + case VK_STRUCTURE_TYPE_DEPENDENCY_INFO: return sizeof(VkDependencyInfo); + case VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT: return sizeof(VkDepthBiasInfoEXT); + case VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT: return sizeof(VkDepthBiasRepresentationInfoEXT); + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: return sizeof(VkDescriptorPoolCreateInfo); + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: return sizeof(VkDescriptorPoolInlineUniformBlockCreateInfo); + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: return sizeof(VkDescriptorSetAllocateInfo); + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO: return sizeof(VkDescriptorSetLayoutBindingFlagsCreateInfo); + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: return sizeof(VkDescriptorSetLayoutCreateInfo); + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT: return sizeof(VkDescriptorSetLayoutSupport); + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO: return sizeof(VkDescriptorSetVariableDescriptorCountAllocateInfo); + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: return sizeof(VkDescriptorSetVariableDescriptorCountLayoutSupport); + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: return sizeof(VkDescriptorUpdateTemplateCreateInfo); + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: return sizeof(VkDeviceBufferMemoryRequirements); + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: return sizeof(VkDeviceCreateInfo); + case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: return sizeof(VkDeviceGroupBindSparseInfo); + case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: return sizeof(VkDeviceGroupCommandBufferBeginInfo); + case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: return sizeof(VkDeviceGroupDeviceCreateInfo); + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: return sizeof(VkDeviceGroupRenderPassBeginInfo); + case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO: return sizeof(VkDeviceGroupSubmitInfo); + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: return sizeof(VkDeviceImageMemoryRequirements); + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: return sizeof(VkDeviceImageSubresourceInfo); + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: return sizeof(VkDeviceMemoryOpaqueCaptureAddressInfo); + case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: return sizeof(VkDevicePrivateDataCreateInfo); + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO: return sizeof(VkDeviceQueueCreateInfo); + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO: return sizeof(VkDeviceQueueGlobalPriorityCreateInfo); + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2: return sizeof(VkDeviceQueueInfo2); + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM: return sizeof(VkDeviceQueueShaderCoreControlCreateInfoARM); + case VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM: return sizeof(VkDeviceTensorMemoryRequirementsARM); + case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT: return sizeof(VkDrmFormatModifierPropertiesList2EXT); + case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: return sizeof(VkDrmFormatModifierPropertiesListEXT); + case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: return sizeof(VkEventCreateInfo); + case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO: return sizeof(VkExportFenceCreateInfo); + case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO: return sizeof(VkExportMemoryAllocateInfo); + case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO: return sizeof(VkExportSemaphoreCreateInfo); + case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES: return sizeof(VkExternalBufferProperties); + case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES: return sizeof(VkExternalFenceProperties); + case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES: return sizeof(VkExternalImageFormatProperties); + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT: return sizeof(VkExternalMemoryAcquireUnmodifiedEXT); + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO: return sizeof(VkExternalMemoryBufferCreateInfo); + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO: return sizeof(VkExternalMemoryImageCreateInfo); + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM: return sizeof(VkExternalMemoryTensorCreateInfoARM); + case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES: return sizeof(VkExternalSemaphoreProperties); + case VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM: return sizeof(VkExternalTensorPropertiesARM); + case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO: return sizeof(VkFenceCreateInfo); + case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR: return sizeof(VkFenceGetFdInfoKHR); + case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT: return sizeof(VkFilterCubicImageViewImageFormatPropertiesEXT); + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2: return sizeof(VkFormatProperties2); + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: return sizeof(VkFormatProperties3); + case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: return sizeof(VkFragmentShadingRateAttachmentInfoKHR); + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: return sizeof(VkFramebufferAttachmentImageInfo); + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: return sizeof(VkFramebufferAttachmentsCreateInfo); + case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO: return sizeof(VkFramebufferCreateInfo); + case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO: return sizeof(VkGraphicsPipelineCreateInfo); + case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT: return sizeof(VkGraphicsPipelineLibraryCreateInfoEXT); + case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: return sizeof(VkHostImageCopyDevicePerformanceQuery); + case VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA: return sizeof(VkImageAlignmentControlCreateInfoMESA); + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: return sizeof(VkImageBlit2); + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: return sizeof(VkImageCompressionControlEXT); + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT: return sizeof(VkImageCompressionPropertiesEXT); + case VK_STRUCTURE_TYPE_IMAGE_COPY_2: return sizeof(VkImageCopy2); + case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: return sizeof(VkImageCreateInfo); + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: return sizeof(VkImageDrmFormatModifierExplicitCreateInfoEXT); + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: return sizeof(VkImageDrmFormatModifierListCreateInfoEXT); + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: return sizeof(VkImageDrmFormatModifierPropertiesEXT); + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: return sizeof(VkImageFormatListCreateInfo); + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2: return sizeof(VkImageFormatProperties2); + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: return sizeof(VkImageMemoryBarrier); + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2: return sizeof(VkImageMemoryBarrier2); + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2: return sizeof(VkImageMemoryRequirementsInfo2); + case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: return sizeof(VkImagePlaneMemoryRequirementsInfo); + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: return sizeof(VkImageResolve2); + case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2: return sizeof(VkImageSparseMemoryRequirementsInfo2); + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: return sizeof(VkImageStencilUsageCreateInfo); + case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: return sizeof(VkImageSubresource2); + case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: return sizeof(VkImageSwapchainCreateInfoKHR); + case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT: return sizeof(VkImageViewASTCDecodeModeEXT); + case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO: return sizeof(VkImageViewCreateInfo); + case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: return sizeof(VkImageViewMinLodCreateInfoEXT); + case VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT: return sizeof(VkImageViewSlicedCreateInfoEXT); + case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: return sizeof(VkImageViewUsageCreateInfo); + case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR: return sizeof(VkImportFenceFdInfoKHR); + case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR: return sizeof(VkImportMemoryFdInfoKHR); + case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR: return sizeof(VkImportSemaphoreFdInfoKHR); + case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO: return sizeof(VkInstanceCreateInfo); + case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE: return sizeof(VkMappedMemoryRange); + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO: return sizeof(VkMemoryAllocateFlagsInfo); + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: return sizeof(VkMemoryAllocateInfo); + case VK_STRUCTURE_TYPE_MEMORY_BARRIER: return sizeof(VkMemoryBarrier); + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: return sizeof(VkMemoryBarrier2); + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: return sizeof(VkMemoryBarrierAccessFlags3KHR); + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO: return sizeof(VkMemoryDedicatedAllocateInfo); + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM: return sizeof(VkMemoryDedicatedAllocateInfoTensorARM); + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: return sizeof(VkMemoryDedicatedRequirements); + case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR: return sizeof(VkMemoryFdPropertiesKHR); + case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR: return sizeof(VkMemoryGetFdInfoKHR); + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: return sizeof(VkMemoryOpaqueCaptureAddressAllocateInfo); + case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT: return sizeof(VkMemoryPriorityAllocateInfoEXT); + case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2: return sizeof(VkMemoryRequirements2); + case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT: return sizeof(VkMultisamplePropertiesEXT); + case VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT: return sizeof(VkMultisampledRenderToSingleSampledInfoEXT); + case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT: return sizeof(VkMutableDescriptorTypeCreateInfoEXT); + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: return sizeof(VkPerformanceCounterARM); + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: return sizeof(VkPerformanceCounterDescriptionARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: return sizeof(VkPhysicalDevice16BitStorageFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: return sizeof(VkPhysicalDevice4444FormatsFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: return sizeof(VkPhysicalDevice8BitStorageFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: return sizeof(VkPhysicalDeviceASTCDecodeFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT: return sizeof(VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: return sizeof(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: return sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: return sizeof(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: return sizeof(VkPhysicalDeviceBufferDeviceAddressFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: return sizeof(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: return sizeof(VkPhysicalDeviceColorWriteEnableFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: return sizeof(VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: return sizeof(VkPhysicalDeviceConditionalRenderingFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR: return sizeof(VkPhysicalDeviceCooperativeMatrixFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceCooperativeMatrixPropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: return sizeof(VkPhysicalDeviceCustomBorderColorFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceCustomBorderColorPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: return sizeof(VkPhysicalDeviceCustomResolveFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT: return sizeof(VkPhysicalDeviceDepthBiasControlFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: return sizeof(VkPhysicalDeviceDepthClampControlFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: return sizeof(VkPhysicalDeviceDepthClampZeroOneFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: return sizeof(VkPhysicalDeviceDepthClipControlFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: return sizeof(VkPhysicalDeviceDepthClipEnableFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: return sizeof(VkPhysicalDeviceDepthStencilResolveProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: return sizeof(VkPhysicalDeviceDescriptorIndexingFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES: return sizeof(VkPhysicalDeviceDescriptorIndexingProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceDiscardRectanglePropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: return sizeof(VkPhysicalDeviceDriverProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceDrmPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: return sizeof(VkPhysicalDeviceDynamicRenderingFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: return sizeof(VkPhysicalDeviceDynamicRenderingLocalReadFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT: return sizeof(VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: return sizeof(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: return sizeof(VkPhysicalDeviceExtendedDynamicState3FeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceExtendedDynamicState3PropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: return sizeof(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO: return sizeof(VkPhysicalDeviceExternalBufferInfo); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO: return sizeof(VkPhysicalDeviceExternalFenceInfo); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: return sizeof(VkPhysicalDeviceExternalImageFormatInfo); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO: return sizeof(VkPhysicalDeviceExternalSemaphoreInfo); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM: return sizeof(VkPhysicalDeviceExternalTensorInfoARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: return sizeof(VkPhysicalDeviceFeatures2); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: return sizeof(VkPhysicalDeviceFloatControlsProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM: return sizeof(VkPhysicalDeviceFormatPackFeaturesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: return sizeof(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE: return sizeof(VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE: return sizeof(VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR: return sizeof(VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: return sizeof(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: return sizeof(VkPhysicalDeviceFragmentShadingRateFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR: return sizeof(VkPhysicalDeviceFragmentShadingRateKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceFragmentShadingRatePropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES: return sizeof(VkPhysicalDeviceGlobalPriorityQueryFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: return sizeof(VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES: return sizeof(VkPhysicalDeviceGroupProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: return sizeof(VkPhysicalDeviceHostImageCopyFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: return sizeof(VkPhysicalDeviceHostImageCopyProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: return sizeof(VkPhysicalDeviceHostQueryResetFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: return sizeof(VkPhysicalDeviceIDProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: return sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: return sizeof(VkPhysicalDeviceImageAlignmentControlFeaturesMESA); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA: return sizeof(VkPhysicalDeviceImageAlignmentControlPropertiesMESA); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT: return sizeof(VkPhysicalDeviceImageCompressionControlFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: return sizeof(VkPhysicalDeviceImageDrmFormatModifierInfoEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2: return sizeof(VkPhysicalDeviceImageFormatInfo2); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: return sizeof(VkPhysicalDeviceImageRobustnessFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT: return sizeof(VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT: return sizeof(VkPhysicalDeviceImageViewImageFormatInfoEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: return sizeof(VkPhysicalDeviceImageViewMinLodFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: return sizeof(VkPhysicalDeviceImagelessFramebufferFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: return sizeof(VkPhysicalDeviceIndexTypeUint8Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: return sizeof(VkPhysicalDeviceInlineUniformBlockFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: return sizeof(VkPhysicalDeviceInlineUniformBlockProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR: return sizeof(VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceLayeredApiPropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR: return sizeof(VkPhysicalDeviceLayeredApiPropertiesListKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT: return sizeof(VkPhysicalDeviceLegacyDitheringFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT: return sizeof(VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: return sizeof(VkPhysicalDeviceLineRasterizationFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: return sizeof(VkPhysicalDeviceLineRasterizationProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: return sizeof(VkPhysicalDeviceMaintenance10FeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceMaintenance10PropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: return sizeof(VkPhysicalDeviceMaintenance3Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: return sizeof(VkPhysicalDeviceMaintenance4Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: return sizeof(VkPhysicalDeviceMaintenance4Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: return sizeof(VkPhysicalDeviceMaintenance5Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: return sizeof(VkPhysicalDeviceMaintenance5Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: return sizeof(VkPhysicalDeviceMaintenance6Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: return sizeof(VkPhysicalDeviceMaintenance6Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR: return sizeof(VkPhysicalDeviceMaintenance7FeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceMaintenance7PropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR: return sizeof(VkPhysicalDeviceMaintenance8FeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: return sizeof(VkPhysicalDeviceMaintenance9FeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceMaintenance9PropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT: return sizeof(VkPhysicalDeviceMapMemoryPlacedFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceMapMemoryPlacedPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceMemoryBudgetPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: return sizeof(VkPhysicalDeviceMemoryPriorityFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2: return sizeof(VkPhysicalDeviceMemoryProperties2); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: return sizeof(VkPhysicalDeviceMultiDrawFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceMultiDrawPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: return sizeof(VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: return sizeof(VkPhysicalDeviceMultiviewFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: return sizeof(VkPhysicalDeviceMultiviewProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: return sizeof(VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT: return sizeof(VkPhysicalDeviceNestedCommandBufferFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceNestedCommandBufferPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: return sizeof(VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT: return sizeof(VkPhysicalDevicePCIBusInfoPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: return sizeof(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: return sizeof(VkPhysicalDevicePerformanceCountersByRegionFeaturesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: return sizeof(VkPhysicalDevicePerformanceCountersByRegionPropertiesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: return sizeof(VkPhysicalDevicePipelineCreationCacheControlFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: return sizeof(VkPhysicalDevicePipelineProtectedAccessFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: return sizeof(VkPhysicalDevicePipelineRobustnessFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: return sizeof(VkPhysicalDevicePipelineRobustnessProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: return sizeof(VkPhysicalDevicePointClippingProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: return sizeof(VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: return sizeof(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: return sizeof(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: return sizeof(VkPhysicalDevicePrivateDataFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: return sizeof(VkPhysicalDeviceProperties2); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: return sizeof(VkPhysicalDeviceProtectedMemoryFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: return sizeof(VkPhysicalDeviceProtectedMemoryProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: return sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceProvokingVertexPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: return sizeof(VkPhysicalDevicePushDescriptorProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: return sizeof(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: return sizeof(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: return sizeof(VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM: return sizeof(VkPhysicalDeviceRenderPassStripedFeaturesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM: return sizeof(VkPhysicalDeviceRenderPassStripedPropertiesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR: return sizeof(VkPhysicalDeviceRobustness2FeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR: return sizeof(VkPhysicalDeviceRobustness2PropertiesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceSampleLocationsPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: return sizeof(VkPhysicalDeviceSamplerFilterMinmaxProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: return sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: return sizeof(VkPhysicalDeviceScalarBlockLayoutFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM: return sizeof(VkPhysicalDeviceSchedulingControlsFeaturesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM: return sizeof(VkPhysicalDeviceSchedulingControlsPropertiesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: return sizeof(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: return sizeof(VkPhysicalDeviceShader64BitIndexingFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: return sizeof(VkPhysicalDeviceShaderAtomicInt64Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderBfloat16FeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderClockFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM: return sizeof(VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM: return sizeof(VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM: return sizeof(VkPhysicalDeviceShaderCorePropertiesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: return sizeof(VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: return sizeof(VkPhysicalDeviceShaderDrawParametersFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: return sizeof(VkPhysicalDeviceShaderExpectAssumeFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: return sizeof(VkPhysicalDeviceShaderFloat16Int8Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderFloat8FeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: return sizeof(VkPhysicalDeviceShaderFloatControls2Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderFmaFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: return sizeof(VkPhysicalDeviceShaderIntegerDotProductFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: return sizeof(VkPhysicalDeviceShaderIntegerDotProductProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderLongVectorFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceShaderLongVectorPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderQuadControlFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: return sizeof(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: return sizeof(VkPhysicalDeviceShaderSubgroupRotateFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: return sizeof(VkPhysicalDeviceShaderTerminateInvocationFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderTileImageFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceShaderTileImagePropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: return sizeof(VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: return sizeof(VkPhysicalDeviceShaderUntypedPointersFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: return sizeof(VkPhysicalDeviceSparseImageFormatInfo2); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: return sizeof(VkPhysicalDeviceSubgroupProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: return sizeof(VkPhysicalDeviceSubgroupSizeControlFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: return sizeof(VkPhysicalDeviceSubgroupSizeControlProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: return sizeof(VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: return sizeof(VkPhysicalDeviceSynchronization2Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM: return sizeof(VkPhysicalDeviceTensorFeaturesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM: return sizeof(VkPhysicalDeviceTensorPropertiesARM); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: return sizeof(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: return sizeof(VkPhysicalDeviceTexelBufferAlignmentProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: return sizeof(VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: return sizeof(VkPhysicalDeviceTextureCompressionASTCHDRFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: return sizeof(VkPhysicalDeviceTimelineSemaphoreFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: return sizeof(VkPhysicalDeviceTimelineSemaphoreProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: return sizeof(VkPhysicalDeviceToolProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: return sizeof(VkPhysicalDeviceTransformFeedbackFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceTransformFeedbackPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR: return sizeof(VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: return sizeof(VkPhysicalDeviceUniformBufferStandardLayoutFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: return sizeof(VkPhysicalDeviceVariablePointersFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: return sizeof(VkPhysicalDeviceVertexAttributeDivisorFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: return sizeof(VkPhysicalDeviceVertexAttributeDivisorProperties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: return sizeof(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: return sizeof(VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: return sizeof(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: return sizeof(VkPhysicalDeviceVulkan11Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: return sizeof(VkPhysicalDeviceVulkan11Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: return sizeof(VkPhysicalDeviceVulkan12Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: return sizeof(VkPhysicalDeviceVulkan12Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: return sizeof(VkPhysicalDeviceVulkan13Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: return sizeof(VkPhysicalDeviceVulkan13Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: return sizeof(VkPhysicalDeviceVulkan14Features); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES: return sizeof(VkPhysicalDeviceVulkan14Properties); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: return sizeof(VkPhysicalDeviceVulkanMemoryModelFeatures); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: return sizeof(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: return sizeof(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: return sizeof(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: return sizeof(VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: return sizeof(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures); + case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO: return sizeof(VkPipelineCacheCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: return sizeof(VkPipelineColorBlendAdvancedStateCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO: return sizeof(VkPipelineColorBlendStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: return sizeof(VkPipelineColorWriteCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: return sizeof(VkPipelineCreateFlags2CreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: return sizeof(VkPipelineCreationFeedbackCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO: return sizeof(VkPipelineDepthStencilStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT: return sizeof(VkPipelineDiscardRectangleStateCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO: return sizeof(VkPipelineDynamicStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE: return sizeof(VkPipelineFragmentDensityMapLayeredCreateInfoVALVE); + case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR: return sizeof(VkPipelineFragmentShadingRateStateCreateInfoKHR); + case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO: return sizeof(VkPipelineInputAssemblyStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: return sizeof(VkPipelineLayoutCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR: return sizeof(VkPipelineLibraryCreateInfoKHR); + case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO: return sizeof(VkPipelineMultisampleStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT: return sizeof(VkPipelineRasterizationConservativeStateCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT: return sizeof(VkPipelineRasterizationDepthClipStateCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: return sizeof(VkPipelineRasterizationLineStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: return sizeof(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO: return sizeof(VkPipelineRasterizationStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT: return sizeof(VkPipelineRasterizationStateStreamCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: return sizeof(VkPipelineRenderingCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO: return sizeof(VkPipelineRobustnessCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT: return sizeof(VkPipelineSampleLocationsStateCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO: return sizeof(VkPipelineShaderStageCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT: return sizeof(VkPipelineShaderStageModuleIdentifierCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: return sizeof(VkPipelineShaderStageRequiredSubgroupSizeCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: return sizeof(VkPipelineTessellationDomainOriginStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO: return sizeof(VkPipelineTessellationStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: return sizeof(VkPipelineVertexInputDivisorStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: return sizeof(VkPipelineVertexInputStateCreateInfo); + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT: return sizeof(VkPipelineViewportDepthClampControlCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT: return sizeof(VkPipelineViewportDepthClipControlCreateInfoEXT); + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO: return sizeof(VkPipelineViewportStateCreateInfo); + case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: return sizeof(VkProtectedSubmitInfo); + case VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO: return sizeof(VkPushConstantsInfo); + case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO: return sizeof(VkPushDescriptorSetInfo); + case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO: return sizeof(VkQueryPoolCreateInfo); + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES: return sizeof(VkQueueFamilyGlobalPriorityProperties); + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR: return sizeof(VkQueueFamilyOwnershipTransferPropertiesKHR); + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2: return sizeof(VkQueueFamilyProperties2); + case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: return sizeof(VkRenderPassAttachmentBeginInfo); + case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO: return sizeof(VkRenderPassBeginInfo); + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: return sizeof(VkRenderPassCreateInfo); + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: return sizeof(VkRenderPassCreateInfo2); + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT: return sizeof(VkRenderPassCreationControlEXT); + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT: return sizeof(VkRenderPassCreationFeedbackCreateInfoEXT); + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: return sizeof(VkRenderPassInputAttachmentAspectCreateInfo); + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: return sizeof(VkRenderPassMultiviewCreateInfo); + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: return sizeof(VkRenderPassPerformanceCountersByRegionBeginInfoARM); + case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: return sizeof(VkRenderPassSampleLocationsBeginInfoEXT); + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM: return sizeof(VkRenderPassStripeBeginInfoARM); + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM: return sizeof(VkRenderPassStripeInfoARM); + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM: return sizeof(VkRenderPassStripeSubmitInfoARM); + case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT: return sizeof(VkRenderPassSubpassFeedbackCreateInfoEXT); + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: return sizeof(VkRenderingAreaInfo); + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: return sizeof(VkRenderingAttachmentFlagsInfoKHR); + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: return sizeof(VkRenderingAttachmentInfo); + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: return sizeof(VkRenderingAttachmentLocationInfo); + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: return sizeof(VkRenderingEndInfoKHR); + case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT: return sizeof(VkRenderingFragmentDensityMapAttachmentInfoEXT); + case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: return sizeof(VkRenderingFragmentShadingRateAttachmentInfoKHR); + case VK_STRUCTURE_TYPE_RENDERING_INFO: return sizeof(VkRenderingInfo); + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: return sizeof(VkRenderingInputAttachmentIndexInfo); + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: return sizeof(VkResolveImageInfo2); + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: return sizeof(VkResolveImageModeInfoKHR); + case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: return sizeof(VkSampleLocationsInfoEXT); + case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT: return sizeof(VkSamplerBorderColorComponentMappingCreateInfoEXT); + case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: return sizeof(VkSamplerCreateInfo); + case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: return sizeof(VkSamplerCustomBorderColorCreateInfoEXT); + case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: return sizeof(VkSamplerReductionModeCreateInfo); + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: return sizeof(VkSamplerYcbcrConversionCreateInfo); + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: return sizeof(VkSamplerYcbcrConversionImageFormatProperties); + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: return sizeof(VkSamplerYcbcrConversionInfo); + case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO: return sizeof(VkSemaphoreCreateInfo); + case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR: return sizeof(VkSemaphoreGetFdInfoKHR); + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: return sizeof(VkSemaphoreSignalInfo); + case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO: return sizeof(VkSemaphoreSubmitInfo); + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: return sizeof(VkSemaphoreTypeCreateInfo); + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: return sizeof(VkSemaphoreWaitInfo); + case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: return sizeof(VkShaderModuleCreateInfo); + case VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT: return sizeof(VkShaderModuleIdentifierEXT); + case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2: return sizeof(VkSparseImageFormatProperties2); + case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2: return sizeof(VkSparseImageMemoryRequirements2); + case VK_STRUCTURE_TYPE_SUBMIT_INFO: return sizeof(VkSubmitInfo); + case VK_STRUCTURE_TYPE_SUBMIT_INFO_2: return sizeof(VkSubmitInfo2); + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: return sizeof(VkSubpassBeginInfo); + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: return sizeof(VkSubpassDependency2); + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: return sizeof(VkSubpassDescription2); + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: return sizeof(VkSubpassDescriptionDepthStencilResolve); + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: return sizeof(VkSubpassEndInfo); + case VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT: return sizeof(VkSubpassResolvePerformanceQueryEXT); + case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: return sizeof(VkSubresourceHostMemcpySize); + case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: return sizeof(VkSubresourceLayout2); + case VK_STRUCTURE_TYPE_TENSOR_COPY_ARM: return sizeof(VkTensorCopyARM); + case VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM: return sizeof(VkTensorCreateInfoARM); + case VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM: return sizeof(VkTensorDependencyInfoARM); + case VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM: return sizeof(VkTensorDescriptionARM); + case VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM: return sizeof(VkTensorFormatPropertiesARM); + case VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM: return sizeof(VkTensorMemoryBarrierARM); + case VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM: return sizeof(VkTensorMemoryRequirementsInfoARM); + case VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM: return sizeof(VkTensorViewCreateInfoARM); + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: return sizeof(VkTimelineSemaphoreSubmitInfo); + case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT: return sizeof(VkVertexInputAttributeDescription2EXT); + case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT: return sizeof(VkVertexInputBindingDescription2EXT); + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: return sizeof(VkWriteDescriptorSet); + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: return sizeof(VkWriteDescriptorSetInlineUniformBlock); + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM: return sizeof(VkWriteDescriptorSetTensorARM); + default: return 0; + } +} + +void vkb_enc_chain_elem(vkb_enc *e, const VkBaseInStructure *b) +{ + switch ((int)b->sType) { + case VK_STRUCTURE_TYPE_APPLICATION_INFO: vkb_enc_VkApplicationInfo(e, (const VkApplicationInfo *)b); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: vkb_enc_VkAttachmentDescription2(e, (const VkAttachmentDescription2 *)b); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: vkb_enc_VkAttachmentDescriptionStencilLayout(e, (const VkAttachmentDescriptionStencilLayout *)b); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT: vkb_enc_VkAttachmentFeedbackLoopInfoEXT(e, (const VkAttachmentFeedbackLoopInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: vkb_enc_VkAttachmentReference2(e, (const VkAttachmentReference2 *)b); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: vkb_enc_VkAttachmentReferenceStencilLayout(e, (const VkAttachmentReferenceStencilLayout *)b); return; + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: vkb_enc_VkBeginCustomResolveInfoEXT(e, (const VkBeginCustomResolveInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO: vkb_enc_VkBindBufferMemoryDeviceGroupInfo(e, (const VkBindBufferMemoryDeviceGroupInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: vkb_enc_VkBindBufferMemoryInfo(e, (const VkBindBufferMemoryInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: vkb_enc_VkBindDescriptorSetsInfo(e, (const VkBindDescriptorSetsInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO: vkb_enc_VkBindImageMemoryDeviceGroupInfo(e, (const VkBindImageMemoryDeviceGroupInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO: vkb_enc_VkBindImageMemoryInfo(e, (const VkBindImageMemoryInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: vkb_enc_VkBindImageMemorySwapchainInfoKHR(e, (const VkBindImageMemorySwapchainInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: vkb_enc_VkBindImagePlaneMemoryInfo(e, (const VkBindImagePlaneMemoryInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: vkb_enc_VkBindMemoryStatus(e, (const VkBindMemoryStatus *)b); return; + case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO: vkb_enc_VkBindSparseInfo(e, (const VkBindSparseInfo *)b); return; + case VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM: vkb_enc_VkBindTensorMemoryInfoARM(e, (const VkBindTensorMemoryInfoARM *)b); return; + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: vkb_enc_VkBlitImageInfo2(e, (const VkBlitImageInfo2 *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_COPY_2: vkb_enc_VkBufferCopy2(e, (const VkBufferCopy2 *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO: vkb_enc_VkBufferCreateInfo(e, (const VkBufferCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT: vkb_enc_VkBufferDeviceAddressCreateInfoEXT(e, (const VkBufferDeviceAddressCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: vkb_enc_VkBufferDeviceAddressInfo(e, (const VkBufferDeviceAddressInfo *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2: vkb_enc_VkBufferImageCopy2(e, (const VkBufferImageCopy2 *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: vkb_enc_VkBufferMemoryBarrier(e, (const VkBufferMemoryBarrier *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2: vkb_enc_VkBufferMemoryBarrier2(e, (const VkBufferMemoryBarrier2 *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2: vkb_enc_VkBufferMemoryRequirementsInfo2(e, (const VkBufferMemoryRequirementsInfo2 *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: vkb_enc_VkBufferOpaqueCaptureAddressCreateInfo(e, (const VkBufferOpaqueCaptureAddressCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: vkb_enc_VkBufferUsageFlags2CreateInfo(e, (const VkBufferUsageFlags2CreateInfo *)b); return; + case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: vkb_enc_VkBufferViewCreateInfo(e, (const VkBufferViewCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR: vkb_enc_VkCalibratedTimestampInfoKHR(e, (const VkCalibratedTimestampInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: vkb_enc_VkCommandBufferAllocateInfo(e, (const VkCommandBufferAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: vkb_enc_VkCommandBufferBeginInfo(e, (const VkCommandBufferBeginInfo *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT: vkb_enc_VkCommandBufferInheritanceConditionalRenderingInfoEXT(e, (const VkCommandBufferInheritanceConditionalRenderingInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: vkb_enc_VkCommandBufferInheritanceInfo(e, (const VkCommandBufferInheritanceInfo *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: vkb_enc_VkCommandBufferInheritanceRenderingInfo(e, (const VkCommandBufferInheritanceRenderingInfo *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO: vkb_enc_VkCommandBufferSubmitInfo(e, (const VkCommandBufferSubmitInfo *)b); return; + case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: vkb_enc_VkCommandPoolCreateInfo(e, (const VkCommandPoolCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO: vkb_enc_VkComputePipelineCreateInfo(e, (const VkComputePipelineCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT: vkb_enc_VkConditionalRenderingBeginInfoEXT(e, (const VkConditionalRenderingBeginInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR: vkb_enc_VkCooperativeMatrixPropertiesKHR(e, (const VkCooperativeMatrixPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2: vkb_enc_VkCopyBufferInfo2(e, (const VkCopyBufferInfo2 *)b); return; + case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2: vkb_enc_VkCopyBufferToImageInfo2(e, (const VkCopyBufferToImageInfo2 *)b); return; + case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: vkb_enc_VkCopyDescriptorSet(e, (const VkCopyDescriptorSet *)b); return; + case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2: vkb_enc_VkCopyImageInfo2(e, (const VkCopyImageInfo2 *)b); return; + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2: vkb_enc_VkCopyImageToBufferInfo2(e, (const VkCopyImageToBufferInfo2 *)b); return; + case VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM: vkb_enc_VkCopyTensorInfoARM(e, (const VkCopyTensorInfoARM *)b); return; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: vkb_enc_VkCustomResolveCreateInfoEXT(e, (const VkCustomResolveCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT: vkb_enc_VkDebugUtilsObjectNameInfoEXT(e, (const VkDebugUtilsObjectNameInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_DEPENDENCY_INFO: vkb_enc_VkDependencyInfo(e, (const VkDependencyInfo *)b); return; + case VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT: vkb_enc_VkDepthBiasInfoEXT(e, (const VkDepthBiasInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT: vkb_enc_VkDepthBiasRepresentationInfoEXT(e, (const VkDepthBiasRepresentationInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: vkb_enc_VkDescriptorPoolCreateInfo(e, (const VkDescriptorPoolCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: vkb_enc_VkDescriptorPoolInlineUniformBlockCreateInfo(e, (const VkDescriptorPoolInlineUniformBlockCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: vkb_enc_VkDescriptorSetAllocateInfo(e, (const VkDescriptorSetAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO: vkb_enc_VkDescriptorSetLayoutBindingFlagsCreateInfo(e, (const VkDescriptorSetLayoutBindingFlagsCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: vkb_enc_VkDescriptorSetLayoutCreateInfo(e, (const VkDescriptorSetLayoutCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT: vkb_enc_VkDescriptorSetLayoutSupport(e, (const VkDescriptorSetLayoutSupport *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO: vkb_enc_VkDescriptorSetVariableDescriptorCountAllocateInfo(e, (const VkDescriptorSetVariableDescriptorCountAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: vkb_enc_VkDescriptorSetVariableDescriptorCountLayoutSupport(e, (const VkDescriptorSetVariableDescriptorCountLayoutSupport *)b); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: vkb_enc_VkDescriptorUpdateTemplateCreateInfo(e, (const VkDescriptorUpdateTemplateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: vkb_enc_VkDeviceBufferMemoryRequirements(e, (const VkDeviceBufferMemoryRequirements *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: vkb_enc_VkDeviceCreateInfo(e, (const VkDeviceCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: vkb_enc_VkDeviceGroupBindSparseInfo(e, (const VkDeviceGroupBindSparseInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: vkb_enc_VkDeviceGroupCommandBufferBeginInfo(e, (const VkDeviceGroupCommandBufferBeginInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: vkb_enc_VkDeviceGroupDeviceCreateInfo(e, (const VkDeviceGroupDeviceCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: vkb_enc_VkDeviceGroupRenderPassBeginInfo(e, (const VkDeviceGroupRenderPassBeginInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO: vkb_enc_VkDeviceGroupSubmitInfo(e, (const VkDeviceGroupSubmitInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: vkb_enc_VkDeviceImageMemoryRequirements(e, (const VkDeviceImageMemoryRequirements *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: vkb_enc_VkDeviceImageSubresourceInfo(e, (const VkDeviceImageSubresourceInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: vkb_enc_VkDeviceMemoryOpaqueCaptureAddressInfo(e, (const VkDeviceMemoryOpaqueCaptureAddressInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: vkb_enc_VkDevicePrivateDataCreateInfo(e, (const VkDevicePrivateDataCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO: vkb_enc_VkDeviceQueueCreateInfo(e, (const VkDeviceQueueCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO: vkb_enc_VkDeviceQueueGlobalPriorityCreateInfo(e, (const VkDeviceQueueGlobalPriorityCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2: vkb_enc_VkDeviceQueueInfo2(e, (const VkDeviceQueueInfo2 *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM: vkb_enc_VkDeviceQueueShaderCoreControlCreateInfoARM(e, (const VkDeviceQueueShaderCoreControlCreateInfoARM *)b); return; + case VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM: vkb_enc_VkDeviceTensorMemoryRequirementsARM(e, (const VkDeviceTensorMemoryRequirementsARM *)b); return; + case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT: vkb_enc_VkDrmFormatModifierPropertiesList2EXT(e, (const VkDrmFormatModifierPropertiesList2EXT *)b); return; + case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: vkb_enc_VkDrmFormatModifierPropertiesListEXT(e, (const VkDrmFormatModifierPropertiesListEXT *)b); return; + case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: vkb_enc_VkEventCreateInfo(e, (const VkEventCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO: vkb_enc_VkExportFenceCreateInfo(e, (const VkExportFenceCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO: vkb_enc_VkExportMemoryAllocateInfo(e, (const VkExportMemoryAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO: vkb_enc_VkExportSemaphoreCreateInfo(e, (const VkExportSemaphoreCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES: vkb_enc_VkExternalBufferProperties(e, (const VkExternalBufferProperties *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES: vkb_enc_VkExternalFenceProperties(e, (const VkExternalFenceProperties *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES: vkb_enc_VkExternalImageFormatProperties(e, (const VkExternalImageFormatProperties *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT: vkb_enc_VkExternalMemoryAcquireUnmodifiedEXT(e, (const VkExternalMemoryAcquireUnmodifiedEXT *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO: vkb_enc_VkExternalMemoryBufferCreateInfo(e, (const VkExternalMemoryBufferCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO: vkb_enc_VkExternalMemoryImageCreateInfo(e, (const VkExternalMemoryImageCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM: vkb_enc_VkExternalMemoryTensorCreateInfoARM(e, (const VkExternalMemoryTensorCreateInfoARM *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES: vkb_enc_VkExternalSemaphoreProperties(e, (const VkExternalSemaphoreProperties *)b); return; + case VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM: vkb_enc_VkExternalTensorPropertiesARM(e, (const VkExternalTensorPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO: vkb_enc_VkFenceCreateInfo(e, (const VkFenceCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR: vkb_enc_VkFenceGetFdInfoKHR(e, (const VkFenceGetFdInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT: vkb_enc_VkFilterCubicImageViewImageFormatPropertiesEXT(e, (const VkFilterCubicImageViewImageFormatPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2: vkb_enc_VkFormatProperties2(e, (const VkFormatProperties2 *)b); return; + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: vkb_enc_VkFormatProperties3(e, (const VkFormatProperties3 *)b); return; + case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: vkb_enc_VkFragmentShadingRateAttachmentInfoKHR(e, (const VkFragmentShadingRateAttachmentInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: vkb_enc_VkFramebufferAttachmentImageInfo(e, (const VkFramebufferAttachmentImageInfo *)b); return; + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: vkb_enc_VkFramebufferAttachmentsCreateInfo(e, (const VkFramebufferAttachmentsCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO: vkb_enc_VkFramebufferCreateInfo(e, (const VkFramebufferCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO: vkb_enc_VkGraphicsPipelineCreateInfo(e, (const VkGraphicsPipelineCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT: vkb_enc_VkGraphicsPipelineLibraryCreateInfoEXT(e, (const VkGraphicsPipelineLibraryCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: vkb_enc_VkHostImageCopyDevicePerformanceQuery(e, (const VkHostImageCopyDevicePerformanceQuery *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA: vkb_enc_VkImageAlignmentControlCreateInfoMESA(e, (const VkImageAlignmentControlCreateInfoMESA *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: vkb_enc_VkImageBlit2(e, (const VkImageBlit2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: vkb_enc_VkImageCompressionControlEXT(e, (const VkImageCompressionControlEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT: vkb_enc_VkImageCompressionPropertiesEXT(e, (const VkImageCompressionPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_COPY_2: vkb_enc_VkImageCopy2(e, (const VkImageCopy2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: vkb_enc_VkImageCreateInfo(e, (const VkImageCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: vkb_enc_VkImageDrmFormatModifierExplicitCreateInfoEXT(e, (const VkImageDrmFormatModifierExplicitCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: vkb_enc_VkImageDrmFormatModifierListCreateInfoEXT(e, (const VkImageDrmFormatModifierListCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: vkb_enc_VkImageDrmFormatModifierPropertiesEXT(e, (const VkImageDrmFormatModifierPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: vkb_enc_VkImageFormatListCreateInfo(e, (const VkImageFormatListCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2: vkb_enc_VkImageFormatProperties2(e, (const VkImageFormatProperties2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: vkb_enc_VkImageMemoryBarrier(e, (const VkImageMemoryBarrier *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2: vkb_enc_VkImageMemoryBarrier2(e, (const VkImageMemoryBarrier2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2: vkb_enc_VkImageMemoryRequirementsInfo2(e, (const VkImageMemoryRequirementsInfo2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: vkb_enc_VkImagePlaneMemoryRequirementsInfo(e, (const VkImagePlaneMemoryRequirementsInfo *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: vkb_enc_VkImageResolve2(e, (const VkImageResolve2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2: vkb_enc_VkImageSparseMemoryRequirementsInfo2(e, (const VkImageSparseMemoryRequirementsInfo2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: vkb_enc_VkImageStencilUsageCreateInfo(e, (const VkImageStencilUsageCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: vkb_enc_VkImageSubresource2(e, (const VkImageSubresource2 *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: vkb_enc_VkImageSwapchainCreateInfoKHR(e, (const VkImageSwapchainCreateInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT: vkb_enc_VkImageViewASTCDecodeModeEXT(e, (const VkImageViewASTCDecodeModeEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO: vkb_enc_VkImageViewCreateInfo(e, (const VkImageViewCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: vkb_enc_VkImageViewMinLodCreateInfoEXT(e, (const VkImageViewMinLodCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT: vkb_enc_VkImageViewSlicedCreateInfoEXT(e, (const VkImageViewSlicedCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: vkb_enc_VkImageViewUsageCreateInfo(e, (const VkImageViewUsageCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR: vkb_enc_VkImportFenceFdInfoKHR(e, (const VkImportFenceFdInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR: vkb_enc_VkImportMemoryFdInfoKHR(e, (const VkImportMemoryFdInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR: vkb_enc_VkImportSemaphoreFdInfoKHR(e, (const VkImportSemaphoreFdInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO: vkb_enc_VkInstanceCreateInfo(e, (const VkInstanceCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE: vkb_enc_VkMappedMemoryRange(e, (const VkMappedMemoryRange *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO: vkb_enc_VkMemoryAllocateFlagsInfo(e, (const VkMemoryAllocateFlagsInfo *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: vkb_enc_VkMemoryAllocateInfo(e, (const VkMemoryAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER: vkb_enc_VkMemoryBarrier(e, (const VkMemoryBarrier *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: vkb_enc_VkMemoryBarrier2(e, (const VkMemoryBarrier2 *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: vkb_enc_VkMemoryBarrierAccessFlags3KHR(e, (const VkMemoryBarrierAccessFlags3KHR *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO: vkb_enc_VkMemoryDedicatedAllocateInfo(e, (const VkMemoryDedicatedAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM: vkb_enc_VkMemoryDedicatedAllocateInfoTensorARM(e, (const VkMemoryDedicatedAllocateInfoTensorARM *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: vkb_enc_VkMemoryDedicatedRequirements(e, (const VkMemoryDedicatedRequirements *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR: vkb_enc_VkMemoryFdPropertiesKHR(e, (const VkMemoryFdPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR: vkb_enc_VkMemoryGetFdInfoKHR(e, (const VkMemoryGetFdInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: vkb_enc_VkMemoryOpaqueCaptureAddressAllocateInfo(e, (const VkMemoryOpaqueCaptureAddressAllocateInfo *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT: vkb_enc_VkMemoryPriorityAllocateInfoEXT(e, (const VkMemoryPriorityAllocateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2: vkb_enc_VkMemoryRequirements2(e, (const VkMemoryRequirements2 *)b); return; + case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT: vkb_enc_VkMultisamplePropertiesEXT(e, (const VkMultisamplePropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT: vkb_enc_VkMultisampledRenderToSingleSampledInfoEXT(e, (const VkMultisampledRenderToSingleSampledInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT: vkb_enc_VkMutableDescriptorTypeCreateInfoEXT(e, (const VkMutableDescriptorTypeCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: vkb_enc_VkPerformanceCounterARM(e, (const VkPerformanceCounterARM *)b); return; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: vkb_enc_VkPerformanceCounterDescriptionARM(e, (const VkPerformanceCounterDescriptionARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: vkb_enc_VkPhysicalDevice16BitStorageFeatures(e, (const VkPhysicalDevice16BitStorageFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: vkb_enc_VkPhysicalDevice4444FormatsFeaturesEXT(e, (const VkPhysicalDevice4444FormatsFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: vkb_enc_VkPhysicalDevice8BitStorageFeatures(e, (const VkPhysicalDevice8BitStorageFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceASTCDecodeFeaturesEXT(e, (const VkPhysicalDeviceASTCDecodeFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(e, (const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: vkb_enc_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(e, (const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: vkb_enc_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(e, (const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(e, (const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(e, (const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: vkb_enc_VkPhysicalDeviceBufferDeviceAddressFeatures(e, (const VkPhysicalDeviceBufferDeviceAddressFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(e, (const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceColorWriteEnableFeaturesEXT(e, (const VkPhysicalDeviceColorWriteEnableFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: vkb_enc_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(e, (const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(e, (const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: vkb_enc_VkPhysicalDeviceConditionalRenderingFeaturesEXT(e, (const VkPhysicalDeviceConditionalRenderingFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(e, (const VkPhysicalDeviceConservativeRasterizationPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR: vkb_enc_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(e, (const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(e, (const VkPhysicalDeviceCooperativeMatrixPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: vkb_enc_VkPhysicalDeviceCustomBorderColorFeaturesEXT(e, (const VkPhysicalDeviceCustomBorderColorFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceCustomBorderColorPropertiesEXT(e, (const VkPhysicalDeviceCustomBorderColorPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceCustomResolveFeaturesEXT(e, (const VkPhysicalDeviceCustomResolveFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT: vkb_enc_VkPhysicalDeviceDepthBiasControlFeaturesEXT(e, (const VkPhysicalDeviceDepthBiasControlFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: vkb_enc_VkPhysicalDeviceDepthClampControlFeaturesEXT(e, (const VkPhysicalDeviceDepthClampControlFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: vkb_enc_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(e, (const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: vkb_enc_VkPhysicalDeviceDepthClipControlFeaturesEXT(e, (const VkPhysicalDeviceDepthClipControlFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceDepthClipEnableFeaturesEXT(e, (const VkPhysicalDeviceDepthClipEnableFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: vkb_enc_VkPhysicalDeviceDepthStencilResolveProperties(e, (const VkPhysicalDeviceDepthStencilResolveProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: vkb_enc_VkPhysicalDeviceDescriptorIndexingFeatures(e, (const VkPhysicalDeviceDescriptorIndexingFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES: vkb_enc_VkPhysicalDeviceDescriptorIndexingProperties(e, (const VkPhysicalDeviceDescriptorIndexingProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceDiscardRectanglePropertiesEXT(e, (const VkPhysicalDeviceDiscardRectanglePropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: vkb_enc_VkPhysicalDeviceDriverProperties(e, (const VkPhysicalDeviceDriverProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceDrmPropertiesEXT(e, (const VkPhysicalDeviceDrmPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: vkb_enc_VkPhysicalDeviceDynamicRenderingFeatures(e, (const VkPhysicalDeviceDynamicRenderingFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: vkb_enc_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(e, (const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(e, (const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: vkb_enc_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(e, (const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: vkb_enc_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(e, (const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(e, (const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(e, (const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO: vkb_enc_VkPhysicalDeviceExternalBufferInfo(e, (const VkPhysicalDeviceExternalBufferInfo *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO: vkb_enc_VkPhysicalDeviceExternalFenceInfo(e, (const VkPhysicalDeviceExternalFenceInfo *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: vkb_enc_VkPhysicalDeviceExternalImageFormatInfo(e, (const VkPhysicalDeviceExternalImageFormatInfo *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO: vkb_enc_VkPhysicalDeviceExternalSemaphoreInfo(e, (const VkPhysicalDeviceExternalSemaphoreInfo *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM: vkb_enc_VkPhysicalDeviceExternalTensorInfoARM(e, (const VkPhysicalDeviceExternalTensorInfoARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: vkb_enc_VkPhysicalDeviceFeatures2(e, (const VkPhysicalDeviceFeatures2 *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: vkb_enc_VkPhysicalDeviceFloatControlsProperties(e, (const VkPhysicalDeviceFloatControlsProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM: vkb_enc_VkPhysicalDeviceFormatPackFeaturesARM(e, (const VkPhysicalDeviceFormatPackFeaturesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: vkb_enc_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(e, (const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(e, (const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: vkb_enc_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(e, (const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE: vkb_enc_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(e, (const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE: vkb_enc_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(e, (const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(e, (const VkPhysicalDeviceFragmentDensityMapPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR: vkb_enc_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(e, (const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(e, (const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: vkb_enc_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(e, (const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: vkb_enc_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(e, (const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR: vkb_enc_VkPhysicalDeviceFragmentShadingRateKHR(e, (const VkPhysicalDeviceFragmentShadingRateKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(e, (const VkPhysicalDeviceFragmentShadingRatePropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES: vkb_enc_VkPhysicalDeviceGlobalPriorityQueryFeatures(e, (const VkPhysicalDeviceGlobalPriorityQueryFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: vkb_enc_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(e, (const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(e, (const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES: vkb_enc_VkPhysicalDeviceGroupProperties(e, (const VkPhysicalDeviceGroupProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: vkb_enc_VkPhysicalDeviceHostImageCopyFeatures(e, (const VkPhysicalDeviceHostImageCopyFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: vkb_enc_VkPhysicalDeviceHostImageCopyProperties(e, (const VkPhysicalDeviceHostImageCopyProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: vkb_enc_VkPhysicalDeviceHostQueryResetFeatures(e, (const VkPhysicalDeviceHostQueryResetFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: vkb_enc_VkPhysicalDeviceIDProperties(e, (const VkPhysicalDeviceIDProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: vkb_enc_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(e, (const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: vkb_enc_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(e, (const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA: vkb_enc_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(e, (const VkPhysicalDeviceImageAlignmentControlPropertiesMESA *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT: vkb_enc_VkPhysicalDeviceImageCompressionControlFeaturesEXT(e, (const VkPhysicalDeviceImageCompressionControlFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: vkb_enc_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(e, (const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2: vkb_enc_VkPhysicalDeviceImageFormatInfo2(e, (const VkPhysicalDeviceImageFormatInfo2 *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: vkb_enc_VkPhysicalDeviceImageRobustnessFeatures(e, (const VkPhysicalDeviceImageRobustnessFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT: vkb_enc_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(e, (const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT: vkb_enc_VkPhysicalDeviceImageViewImageFormatInfoEXT(e, (const VkPhysicalDeviceImageViewImageFormatInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: vkb_enc_VkPhysicalDeviceImageViewMinLodFeaturesEXT(e, (const VkPhysicalDeviceImageViewMinLodFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: vkb_enc_VkPhysicalDeviceImagelessFramebufferFeatures(e, (const VkPhysicalDeviceImagelessFramebufferFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: vkb_enc_VkPhysicalDeviceIndexTypeUint8Features(e, (const VkPhysicalDeviceIndexTypeUint8Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: vkb_enc_VkPhysicalDeviceInlineUniformBlockFeatures(e, (const VkPhysicalDeviceInlineUniformBlockFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: vkb_enc_VkPhysicalDeviceInlineUniformBlockProperties(e, (const VkPhysicalDeviceInlineUniformBlockProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR: vkb_enc_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(e, (const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceLayeredApiPropertiesKHR(e, (const VkPhysicalDeviceLayeredApiPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR: vkb_enc_VkPhysicalDeviceLayeredApiPropertiesListKHR(e, (const VkPhysicalDeviceLayeredApiPropertiesListKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(e, (const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT: vkb_enc_VkPhysicalDeviceLegacyDitheringFeaturesEXT(e, (const VkPhysicalDeviceLegacyDitheringFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT: vkb_enc_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(e, (const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(e, (const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: vkb_enc_VkPhysicalDeviceLineRasterizationFeatures(e, (const VkPhysicalDeviceLineRasterizationFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: vkb_enc_VkPhysicalDeviceLineRasterizationProperties(e, (const VkPhysicalDeviceLineRasterizationProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: vkb_enc_VkPhysicalDeviceMaintenance10FeaturesKHR(e, (const VkPhysicalDeviceMaintenance10FeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceMaintenance10PropertiesKHR(e, (const VkPhysicalDeviceMaintenance10PropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: vkb_enc_VkPhysicalDeviceMaintenance3Properties(e, (const VkPhysicalDeviceMaintenance3Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: vkb_enc_VkPhysicalDeviceMaintenance4Features(e, (const VkPhysicalDeviceMaintenance4Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: vkb_enc_VkPhysicalDeviceMaintenance4Properties(e, (const VkPhysicalDeviceMaintenance4Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: vkb_enc_VkPhysicalDeviceMaintenance5Features(e, (const VkPhysicalDeviceMaintenance5Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: vkb_enc_VkPhysicalDeviceMaintenance5Properties(e, (const VkPhysicalDeviceMaintenance5Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: vkb_enc_VkPhysicalDeviceMaintenance6Features(e, (const VkPhysicalDeviceMaintenance6Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: vkb_enc_VkPhysicalDeviceMaintenance6Properties(e, (const VkPhysicalDeviceMaintenance6Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR: vkb_enc_VkPhysicalDeviceMaintenance7FeaturesKHR(e, (const VkPhysicalDeviceMaintenance7FeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceMaintenance7PropertiesKHR(e, (const VkPhysicalDeviceMaintenance7PropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR: vkb_enc_VkPhysicalDeviceMaintenance8FeaturesKHR(e, (const VkPhysicalDeviceMaintenance8FeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: vkb_enc_VkPhysicalDeviceMaintenance9FeaturesKHR(e, (const VkPhysicalDeviceMaintenance9FeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceMaintenance9PropertiesKHR(e, (const VkPhysicalDeviceMaintenance9PropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT: vkb_enc_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(e, (const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(e, (const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceMemoryBudgetPropertiesEXT(e, (const VkPhysicalDeviceMemoryBudgetPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: vkb_enc_VkPhysicalDeviceMemoryPriorityFeaturesEXT(e, (const VkPhysicalDeviceMemoryPriorityFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2: vkb_enc_VkPhysicalDeviceMemoryProperties2(e, (const VkPhysicalDeviceMemoryProperties2 *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: vkb_enc_VkPhysicalDeviceMultiDrawFeaturesEXT(e, (const VkPhysicalDeviceMultiDrawFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceMultiDrawPropertiesEXT(e, (const VkPhysicalDeviceMultiDrawPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: vkb_enc_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(e, (const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: vkb_enc_VkPhysicalDeviceMultiviewFeatures(e, (const VkPhysicalDeviceMultiviewFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: vkb_enc_VkPhysicalDeviceMultiviewProperties(e, (const VkPhysicalDeviceMultiviewProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(e, (const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT: vkb_enc_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(e, (const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(e, (const VkPhysicalDeviceNestedCommandBufferPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: vkb_enc_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(e, (const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT: vkb_enc_VkPhysicalDevicePCIBusInfoPropertiesEXT(e, (const VkPhysicalDevicePCIBusInfoPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: vkb_enc_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(e, (const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: vkb_enc_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(e, (const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: vkb_enc_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(e, (const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: vkb_enc_VkPhysicalDevicePipelineCreationCacheControlFeatures(e, (const VkPhysicalDevicePipelineCreationCacheControlFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: vkb_enc_VkPhysicalDevicePipelineProtectedAccessFeatures(e, (const VkPhysicalDevicePipelineProtectedAccessFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: vkb_enc_VkPhysicalDevicePipelineRobustnessFeatures(e, (const VkPhysicalDevicePipelineRobustnessFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: vkb_enc_VkPhysicalDevicePipelineRobustnessProperties(e, (const VkPhysicalDevicePipelineRobustnessProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: vkb_enc_VkPhysicalDevicePointClippingProperties(e, (const VkPhysicalDevicePointClippingProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: vkb_enc_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(e, (const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: vkb_enc_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(e, (const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: vkb_enc_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(e, (const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: vkb_enc_VkPhysicalDevicePrivateDataFeatures(e, (const VkPhysicalDevicePrivateDataFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: vkb_enc_VkPhysicalDeviceProperties2(e, (const VkPhysicalDeviceProperties2 *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: vkb_enc_VkPhysicalDeviceProtectedMemoryFeatures(e, (const VkPhysicalDeviceProtectedMemoryFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: vkb_enc_VkPhysicalDeviceProtectedMemoryProperties(e, (const VkPhysicalDeviceProtectedMemoryProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: vkb_enc_VkPhysicalDeviceProvokingVertexFeaturesEXT(e, (const VkPhysicalDeviceProvokingVertexFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceProvokingVertexPropertiesEXT(e, (const VkPhysicalDeviceProvokingVertexPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: vkb_enc_VkPhysicalDevicePushDescriptorProperties(e, (const VkPhysicalDevicePushDescriptorProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(e, (const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(e, (const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: vkb_enc_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(e, (const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM: vkb_enc_VkPhysicalDeviceRenderPassStripedFeaturesARM(e, (const VkPhysicalDeviceRenderPassStripedFeaturesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM: vkb_enc_VkPhysicalDeviceRenderPassStripedPropertiesARM(e, (const VkPhysicalDeviceRenderPassStripedPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR: vkb_enc_VkPhysicalDeviceRobustness2FeaturesKHR(e, (const VkPhysicalDeviceRobustness2FeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR: vkb_enc_VkPhysicalDeviceRobustness2PropertiesKHR(e, (const VkPhysicalDeviceRobustness2PropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceSampleLocationsPropertiesEXT(e, (const VkPhysicalDeviceSampleLocationsPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: vkb_enc_VkPhysicalDeviceSamplerFilterMinmaxProperties(e, (const VkPhysicalDeviceSamplerFilterMinmaxProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: vkb_enc_VkPhysicalDeviceSamplerYcbcrConversionFeatures(e, (const VkPhysicalDeviceSamplerYcbcrConversionFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: vkb_enc_VkPhysicalDeviceScalarBlockLayoutFeatures(e, (const VkPhysicalDeviceScalarBlockLayoutFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM: vkb_enc_VkPhysicalDeviceSchedulingControlsFeaturesARM(e, (const VkPhysicalDeviceSchedulingControlsFeaturesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM: vkb_enc_VkPhysicalDeviceSchedulingControlsPropertiesARM(e, (const VkPhysicalDeviceSchedulingControlsPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: vkb_enc_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(e, (const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(e, (const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(e, (const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(e, (const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: vkb_enc_VkPhysicalDeviceShaderAtomicInt64Features(e, (const VkPhysicalDeviceShaderAtomicInt64Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderBfloat16FeaturesKHR(e, (const VkPhysicalDeviceShaderBfloat16FeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderClockFeaturesKHR(e, (const VkPhysicalDeviceShaderClockFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM: vkb_enc_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(e, (const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM: vkb_enc_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(e, (const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM: vkb_enc_VkPhysicalDeviceShaderCorePropertiesARM(e, (const VkPhysicalDeviceShaderCorePropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: vkb_enc_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(e, (const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: vkb_enc_VkPhysicalDeviceShaderDrawParametersFeatures(e, (const VkPhysicalDeviceShaderDrawParametersFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: vkb_enc_VkPhysicalDeviceShaderExpectAssumeFeatures(e, (const VkPhysicalDeviceShaderExpectAssumeFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: vkb_enc_VkPhysicalDeviceShaderFloat16Int8Features(e, (const VkPhysicalDeviceShaderFloat16Int8Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderFloat8FeaturesEXT(e, (const VkPhysicalDeviceShaderFloat8FeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: vkb_enc_VkPhysicalDeviceShaderFloatControls2Features(e, (const VkPhysicalDeviceShaderFloatControls2Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderFmaFeaturesKHR(e, (const VkPhysicalDeviceShaderFmaFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(e, (const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: vkb_enc_VkPhysicalDeviceShaderIntegerDotProductFeatures(e, (const VkPhysicalDeviceShaderIntegerDotProductFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: vkb_enc_VkPhysicalDeviceShaderIntegerDotProductProperties(e, (const VkPhysicalDeviceShaderIntegerDotProductProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderLongVectorFeaturesEXT(e, (const VkPhysicalDeviceShaderLongVectorFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceShaderLongVectorPropertiesEXT(e, (const VkPhysicalDeviceShaderLongVectorPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(e, (const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(e, (const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(e, (const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderQuadControlFeaturesKHR(e, (const VkPhysicalDeviceShaderQuadControlFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(e, (const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(e, (const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: vkb_enc_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(e, (const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(e, (const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: vkb_enc_VkPhysicalDeviceShaderSubgroupRotateFeatures(e, (const VkPhysicalDeviceShaderSubgroupRotateFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(e, (const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: vkb_enc_VkPhysicalDeviceShaderTerminateInvocationFeatures(e, (const VkPhysicalDeviceShaderTerminateInvocationFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderTileImageFeaturesEXT(e, (const VkPhysicalDeviceShaderTileImageFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceShaderTileImagePropertiesEXT(e, (const VkPhysicalDeviceShaderTileImagePropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: vkb_enc_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(e, (const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: vkb_enc_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(e, (const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: vkb_enc_VkPhysicalDeviceSparseImageFormatInfo2(e, (const VkPhysicalDeviceSparseImageFormatInfo2 *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: vkb_enc_VkPhysicalDeviceSubgroupProperties(e, (const VkPhysicalDeviceSubgroupProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: vkb_enc_VkPhysicalDeviceSubgroupSizeControlFeatures(e, (const VkPhysicalDeviceSubgroupSizeControlFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: vkb_enc_VkPhysicalDeviceSubgroupSizeControlProperties(e, (const VkPhysicalDeviceSubgroupSizeControlProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: vkb_enc_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(e, (const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: vkb_enc_VkPhysicalDeviceSynchronization2Features(e, (const VkPhysicalDeviceSynchronization2Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM: vkb_enc_VkPhysicalDeviceTensorFeaturesARM(e, (const VkPhysicalDeviceTensorFeaturesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM: vkb_enc_VkPhysicalDeviceTensorPropertiesARM(e, (const VkPhysicalDeviceTensorPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: vkb_enc_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(e, (const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: vkb_enc_VkPhysicalDeviceTexelBufferAlignmentProperties(e, (const VkPhysicalDeviceTexelBufferAlignmentProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: vkb_enc_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(e, (const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: vkb_enc_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(e, (const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: vkb_enc_VkPhysicalDeviceTimelineSemaphoreFeatures(e, (const VkPhysicalDeviceTimelineSemaphoreFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: vkb_enc_VkPhysicalDeviceTimelineSemaphoreProperties(e, (const VkPhysicalDeviceTimelineSemaphoreProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: vkb_enc_VkPhysicalDeviceToolProperties(e, (const VkPhysicalDeviceToolProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: vkb_enc_VkPhysicalDeviceTransformFeedbackFeaturesEXT(e, (const VkPhysicalDeviceTransformFeedbackFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceTransformFeedbackPropertiesEXT(e, (const VkPhysicalDeviceTransformFeedbackPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR: vkb_enc_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(e, (const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: vkb_enc_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(e, (const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: vkb_enc_VkPhysicalDeviceVariablePointersFeatures(e, (const VkPhysicalDeviceVariablePointersFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: vkb_enc_VkPhysicalDeviceVertexAttributeDivisorFeatures(e, (const VkPhysicalDeviceVertexAttributeDivisorFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: vkb_enc_VkPhysicalDeviceVertexAttributeDivisorProperties(e, (const VkPhysicalDeviceVertexAttributeDivisorProperties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: vkb_enc_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(e, (const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(e, (const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: vkb_enc_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(e, (const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: vkb_enc_VkPhysicalDeviceVulkan11Features(e, (const VkPhysicalDeviceVulkan11Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: vkb_enc_VkPhysicalDeviceVulkan11Properties(e, (const VkPhysicalDeviceVulkan11Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: vkb_enc_VkPhysicalDeviceVulkan12Features(e, (const VkPhysicalDeviceVulkan12Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: vkb_enc_VkPhysicalDeviceVulkan12Properties(e, (const VkPhysicalDeviceVulkan12Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: vkb_enc_VkPhysicalDeviceVulkan13Features(e, (const VkPhysicalDeviceVulkan13Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: vkb_enc_VkPhysicalDeviceVulkan13Properties(e, (const VkPhysicalDeviceVulkan13Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: vkb_enc_VkPhysicalDeviceVulkan14Features(e, (const VkPhysicalDeviceVulkan14Features *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES: vkb_enc_VkPhysicalDeviceVulkan14Properties(e, (const VkPhysicalDeviceVulkan14Properties *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: vkb_enc_VkPhysicalDeviceVulkanMemoryModelFeatures(e, (const VkPhysicalDeviceVulkanMemoryModelFeatures *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: vkb_enc_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(e, (const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(e, (const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: vkb_enc_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(e, (const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: vkb_enc_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(e, (const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *)b); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: vkb_enc_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(e, (const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO: vkb_enc_VkPipelineCacheCreateInfo(e, (const VkPipelineCacheCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: vkb_enc_VkPipelineColorBlendAdvancedStateCreateInfoEXT(e, (const VkPipelineColorBlendAdvancedStateCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO: vkb_enc_VkPipelineColorBlendStateCreateInfo(e, (const VkPipelineColorBlendStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: vkb_enc_VkPipelineColorWriteCreateInfoEXT(e, (const VkPipelineColorWriteCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: vkb_enc_VkPipelineCreateFlags2CreateInfo(e, (const VkPipelineCreateFlags2CreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: vkb_enc_VkPipelineCreationFeedbackCreateInfo(e, (const VkPipelineCreationFeedbackCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO: vkb_enc_VkPipelineDepthStencilStateCreateInfo(e, (const VkPipelineDepthStencilStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT: vkb_enc_VkPipelineDiscardRectangleStateCreateInfoEXT(e, (const VkPipelineDiscardRectangleStateCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO: vkb_enc_VkPipelineDynamicStateCreateInfo(e, (const VkPipelineDynamicStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE: vkb_enc_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(e, (const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR: vkb_enc_VkPipelineFragmentShadingRateStateCreateInfoKHR(e, (const VkPipelineFragmentShadingRateStateCreateInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO: vkb_enc_VkPipelineInputAssemblyStateCreateInfo(e, (const VkPipelineInputAssemblyStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: vkb_enc_VkPipelineLayoutCreateInfo(e, (const VkPipelineLayoutCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR: vkb_enc_VkPipelineLibraryCreateInfoKHR(e, (const VkPipelineLibraryCreateInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO: vkb_enc_VkPipelineMultisampleStateCreateInfo(e, (const VkPipelineMultisampleStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT: vkb_enc_VkPipelineRasterizationConservativeStateCreateInfoEXT(e, (const VkPipelineRasterizationConservativeStateCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT: vkb_enc_VkPipelineRasterizationDepthClipStateCreateInfoEXT(e, (const VkPipelineRasterizationDepthClipStateCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: vkb_enc_VkPipelineRasterizationLineStateCreateInfo(e, (const VkPipelineRasterizationLineStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: vkb_enc_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(e, (const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO: vkb_enc_VkPipelineRasterizationStateCreateInfo(e, (const VkPipelineRasterizationStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT: vkb_enc_VkPipelineRasterizationStateStreamCreateInfoEXT(e, (const VkPipelineRasterizationStateStreamCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: vkb_enc_VkPipelineRenderingCreateInfo(e, (const VkPipelineRenderingCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO: vkb_enc_VkPipelineRobustnessCreateInfo(e, (const VkPipelineRobustnessCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT: vkb_enc_VkPipelineSampleLocationsStateCreateInfoEXT(e, (const VkPipelineSampleLocationsStateCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO: vkb_enc_VkPipelineShaderStageCreateInfo(e, (const VkPipelineShaderStageCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT: vkb_enc_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(e, (const VkPipelineShaderStageModuleIdentifierCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: vkb_enc_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(e, (const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: vkb_enc_VkPipelineTessellationDomainOriginStateCreateInfo(e, (const VkPipelineTessellationDomainOriginStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO: vkb_enc_VkPipelineTessellationStateCreateInfo(e, (const VkPipelineTessellationStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: vkb_enc_VkPipelineVertexInputDivisorStateCreateInfo(e, (const VkPipelineVertexInputDivisorStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: vkb_enc_VkPipelineVertexInputStateCreateInfo(e, (const VkPipelineVertexInputStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT: vkb_enc_VkPipelineViewportDepthClampControlCreateInfoEXT(e, (const VkPipelineViewportDepthClampControlCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT: vkb_enc_VkPipelineViewportDepthClipControlCreateInfoEXT(e, (const VkPipelineViewportDepthClipControlCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO: vkb_enc_VkPipelineViewportStateCreateInfo(e, (const VkPipelineViewportStateCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: vkb_enc_VkProtectedSubmitInfo(e, (const VkProtectedSubmitInfo *)b); return; + case VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO: vkb_enc_VkPushConstantsInfo(e, (const VkPushConstantsInfo *)b); return; + case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO: vkb_enc_VkPushDescriptorSetInfo(e, (const VkPushDescriptorSetInfo *)b); return; + case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO: vkb_enc_VkQueryPoolCreateInfo(e, (const VkQueryPoolCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES: vkb_enc_VkQueueFamilyGlobalPriorityProperties(e, (const VkQueueFamilyGlobalPriorityProperties *)b); return; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR: vkb_enc_VkQueueFamilyOwnershipTransferPropertiesKHR(e, (const VkQueueFamilyOwnershipTransferPropertiesKHR *)b); return; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2: vkb_enc_VkQueueFamilyProperties2(e, (const VkQueueFamilyProperties2 *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: vkb_enc_VkRenderPassAttachmentBeginInfo(e, (const VkRenderPassAttachmentBeginInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO: vkb_enc_VkRenderPassBeginInfo(e, (const VkRenderPassBeginInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: vkb_enc_VkRenderPassCreateInfo(e, (const VkRenderPassCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: vkb_enc_VkRenderPassCreateInfo2(e, (const VkRenderPassCreateInfo2 *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT: vkb_enc_VkRenderPassCreationControlEXT(e, (const VkRenderPassCreationControlEXT *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT: vkb_enc_VkRenderPassCreationFeedbackCreateInfoEXT(e, (const VkRenderPassCreationFeedbackCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: vkb_enc_VkRenderPassFragmentDensityMapCreateInfoEXT(e, (const VkRenderPassFragmentDensityMapCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: vkb_enc_VkRenderPassInputAttachmentAspectCreateInfo(e, (const VkRenderPassInputAttachmentAspectCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: vkb_enc_VkRenderPassMultiviewCreateInfo(e, (const VkRenderPassMultiviewCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: vkb_enc_VkRenderPassPerformanceCountersByRegionBeginInfoARM(e, (const VkRenderPassPerformanceCountersByRegionBeginInfoARM *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: vkb_enc_VkRenderPassSampleLocationsBeginInfoEXT(e, (const VkRenderPassSampleLocationsBeginInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM: vkb_enc_VkRenderPassStripeBeginInfoARM(e, (const VkRenderPassStripeBeginInfoARM *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM: vkb_enc_VkRenderPassStripeInfoARM(e, (const VkRenderPassStripeInfoARM *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM: vkb_enc_VkRenderPassStripeSubmitInfoARM(e, (const VkRenderPassStripeSubmitInfoARM *)b); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT: vkb_enc_VkRenderPassSubpassFeedbackCreateInfoEXT(e, (const VkRenderPassSubpassFeedbackCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: vkb_enc_VkRenderingAreaInfo(e, (const VkRenderingAreaInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: vkb_enc_VkRenderingAttachmentFlagsInfoKHR(e, (const VkRenderingAttachmentFlagsInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: vkb_enc_VkRenderingAttachmentInfo(e, (const VkRenderingAttachmentInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: vkb_enc_VkRenderingAttachmentLocationInfo(e, (const VkRenderingAttachmentLocationInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: vkb_enc_VkRenderingEndInfoKHR(e, (const VkRenderingEndInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT: vkb_enc_VkRenderingFragmentDensityMapAttachmentInfoEXT(e, (const VkRenderingFragmentDensityMapAttachmentInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: vkb_enc_VkRenderingFragmentShadingRateAttachmentInfoKHR(e, (const VkRenderingFragmentShadingRateAttachmentInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_INFO: vkb_enc_VkRenderingInfo(e, (const VkRenderingInfo *)b); return; + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: vkb_enc_VkRenderingInputAttachmentIndexInfo(e, (const VkRenderingInputAttachmentIndexInfo *)b); return; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: vkb_enc_VkResolveImageInfo2(e, (const VkResolveImageInfo2 *)b); return; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: vkb_enc_VkResolveImageModeInfoKHR(e, (const VkResolveImageModeInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: vkb_enc_VkSampleLocationsInfoEXT(e, (const VkSampleLocationsInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT: vkb_enc_VkSamplerBorderColorComponentMappingCreateInfoEXT(e, (const VkSamplerBorderColorComponentMappingCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: vkb_enc_VkSamplerCreateInfo(e, (const VkSamplerCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: vkb_enc_VkSamplerCustomBorderColorCreateInfoEXT(e, (const VkSamplerCustomBorderColorCreateInfoEXT *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: vkb_enc_VkSamplerReductionModeCreateInfo(e, (const VkSamplerReductionModeCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: vkb_enc_VkSamplerYcbcrConversionCreateInfo(e, (const VkSamplerYcbcrConversionCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: vkb_enc_VkSamplerYcbcrConversionImageFormatProperties(e, (const VkSamplerYcbcrConversionImageFormatProperties *)b); return; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: vkb_enc_VkSamplerYcbcrConversionInfo(e, (const VkSamplerYcbcrConversionInfo *)b); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO: vkb_enc_VkSemaphoreCreateInfo(e, (const VkSemaphoreCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR: vkb_enc_VkSemaphoreGetFdInfoKHR(e, (const VkSemaphoreGetFdInfoKHR *)b); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: vkb_enc_VkSemaphoreSignalInfo(e, (const VkSemaphoreSignalInfo *)b); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO: vkb_enc_VkSemaphoreSubmitInfo(e, (const VkSemaphoreSubmitInfo *)b); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: vkb_enc_VkSemaphoreTypeCreateInfo(e, (const VkSemaphoreTypeCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: vkb_enc_VkSemaphoreWaitInfo(e, (const VkSemaphoreWaitInfo *)b); return; + case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: vkb_enc_VkShaderModuleCreateInfo(e, (const VkShaderModuleCreateInfo *)b); return; + case VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT: vkb_enc_VkShaderModuleIdentifierEXT(e, (const VkShaderModuleIdentifierEXT *)b); return; + case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2: vkb_enc_VkSparseImageFormatProperties2(e, (const VkSparseImageFormatProperties2 *)b); return; + case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2: vkb_enc_VkSparseImageMemoryRequirements2(e, (const VkSparseImageMemoryRequirements2 *)b); return; + case VK_STRUCTURE_TYPE_SUBMIT_INFO: vkb_enc_VkSubmitInfo(e, (const VkSubmitInfo *)b); return; + case VK_STRUCTURE_TYPE_SUBMIT_INFO_2: vkb_enc_VkSubmitInfo2(e, (const VkSubmitInfo2 *)b); return; + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: vkb_enc_VkSubpassBeginInfo(e, (const VkSubpassBeginInfo *)b); return; + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: vkb_enc_VkSubpassDependency2(e, (const VkSubpassDependency2 *)b); return; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: vkb_enc_VkSubpassDescription2(e, (const VkSubpassDescription2 *)b); return; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: vkb_enc_VkSubpassDescriptionDepthStencilResolve(e, (const VkSubpassDescriptionDepthStencilResolve *)b); return; + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: vkb_enc_VkSubpassEndInfo(e, (const VkSubpassEndInfo *)b); return; + case VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT: vkb_enc_VkSubpassResolvePerformanceQueryEXT(e, (const VkSubpassResolvePerformanceQueryEXT *)b); return; + case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: vkb_enc_VkSubresourceHostMemcpySize(e, (const VkSubresourceHostMemcpySize *)b); return; + case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: vkb_enc_VkSubresourceLayout2(e, (const VkSubresourceLayout2 *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_COPY_ARM: vkb_enc_VkTensorCopyARM(e, (const VkTensorCopyARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM: vkb_enc_VkTensorCreateInfoARM(e, (const VkTensorCreateInfoARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM: vkb_enc_VkTensorDependencyInfoARM(e, (const VkTensorDependencyInfoARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM: vkb_enc_VkTensorDescriptionARM(e, (const VkTensorDescriptionARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM: vkb_enc_VkTensorFormatPropertiesARM(e, (const VkTensorFormatPropertiesARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM: vkb_enc_VkTensorMemoryBarrierARM(e, (const VkTensorMemoryBarrierARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM: vkb_enc_VkTensorMemoryRequirementsInfoARM(e, (const VkTensorMemoryRequirementsInfoARM *)b); return; + case VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM: vkb_enc_VkTensorViewCreateInfoARM(e, (const VkTensorViewCreateInfoARM *)b); return; + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: vkb_enc_VkTimelineSemaphoreSubmitInfo(e, (const VkTimelineSemaphoreSubmitInfo *)b); return; + case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT: vkb_enc_VkVertexInputAttributeDescription2EXT(e, (const VkVertexInputAttributeDescription2EXT *)b); return; + case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT: vkb_enc_VkVertexInputBindingDescription2EXT(e, (const VkVertexInputBindingDescription2EXT *)b); return; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: vkb_enc_VkWriteDescriptorSet(e, (const VkWriteDescriptorSet *)b); return; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: vkb_enc_VkWriteDescriptorSetInlineUniformBlock(e, (const VkWriteDescriptorSetInlineUniformBlock *)b); return; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM: vkb_enc_VkWriteDescriptorSetTensorARM(e, (const VkWriteDescriptorSetTensorARM *)b); return; + default: vkb_enc_raw(e, b, vkb_struct_size(b->sType)); return; + } +} + +void vkb_dec_chain_elem(vkb_dec *d, VkStructureType t, void *dst) +{ + switch ((int)t) { + case VK_STRUCTURE_TYPE_APPLICATION_INFO: vkb_dec_VkApplicationInfo(d, (VkApplicationInfo *)dst); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: vkb_dec_VkAttachmentDescription2(d, (VkAttachmentDescription2 *)dst); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: vkb_dec_VkAttachmentDescriptionStencilLayout(d, (VkAttachmentDescriptionStencilLayout *)dst); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT: vkb_dec_VkAttachmentFeedbackLoopInfoEXT(d, (VkAttachmentFeedbackLoopInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: vkb_dec_VkAttachmentReference2(d, (VkAttachmentReference2 *)dst); return; + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: vkb_dec_VkAttachmentReferenceStencilLayout(d, (VkAttachmentReferenceStencilLayout *)dst); return; + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: vkb_dec_VkBeginCustomResolveInfoEXT(d, (VkBeginCustomResolveInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO: vkb_dec_VkBindBufferMemoryDeviceGroupInfo(d, (VkBindBufferMemoryDeviceGroupInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: vkb_dec_VkBindBufferMemoryInfo(d, (VkBindBufferMemoryInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: vkb_dec_VkBindDescriptorSetsInfo(d, (VkBindDescriptorSetsInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO: vkb_dec_VkBindImageMemoryDeviceGroupInfo(d, (VkBindImageMemoryDeviceGroupInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO: vkb_dec_VkBindImageMemoryInfo(d, (VkBindImageMemoryInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: vkb_dec_VkBindImageMemorySwapchainInfoKHR(d, (VkBindImageMemorySwapchainInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: vkb_dec_VkBindImagePlaneMemoryInfo(d, (VkBindImagePlaneMemoryInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: vkb_dec_VkBindMemoryStatus(d, (VkBindMemoryStatus *)dst); return; + case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO: vkb_dec_VkBindSparseInfo(d, (VkBindSparseInfo *)dst); return; + case VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM: vkb_dec_VkBindTensorMemoryInfoARM(d, (VkBindTensorMemoryInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: vkb_dec_VkBlitImageInfo2(d, (VkBlitImageInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_COPY_2: vkb_dec_VkBufferCopy2(d, (VkBufferCopy2 *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO: vkb_dec_VkBufferCreateInfo(d, (VkBufferCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT: vkb_dec_VkBufferDeviceAddressCreateInfoEXT(d, (VkBufferDeviceAddressCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: vkb_dec_VkBufferDeviceAddressInfo(d, (VkBufferDeviceAddressInfo *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2: vkb_dec_VkBufferImageCopy2(d, (VkBufferImageCopy2 *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: vkb_dec_VkBufferMemoryBarrier(d, (VkBufferMemoryBarrier *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2: vkb_dec_VkBufferMemoryBarrier2(d, (VkBufferMemoryBarrier2 *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2: vkb_dec_VkBufferMemoryRequirementsInfo2(d, (VkBufferMemoryRequirementsInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: vkb_dec_VkBufferOpaqueCaptureAddressCreateInfo(d, (VkBufferOpaqueCaptureAddressCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: vkb_dec_VkBufferUsageFlags2CreateInfo(d, (VkBufferUsageFlags2CreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: vkb_dec_VkBufferViewCreateInfo(d, (VkBufferViewCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR: vkb_dec_VkCalibratedTimestampInfoKHR(d, (VkCalibratedTimestampInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: vkb_dec_VkCommandBufferAllocateInfo(d, (VkCommandBufferAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: vkb_dec_VkCommandBufferBeginInfo(d, (VkCommandBufferBeginInfo *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT: vkb_dec_VkCommandBufferInheritanceConditionalRenderingInfoEXT(d, (VkCommandBufferInheritanceConditionalRenderingInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: vkb_dec_VkCommandBufferInheritanceInfo(d, (VkCommandBufferInheritanceInfo *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: vkb_dec_VkCommandBufferInheritanceRenderingInfo(d, (VkCommandBufferInheritanceRenderingInfo *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO: vkb_dec_VkCommandBufferSubmitInfo(d, (VkCommandBufferSubmitInfo *)dst); return; + case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: vkb_dec_VkCommandPoolCreateInfo(d, (VkCommandPoolCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO: vkb_dec_VkComputePipelineCreateInfo(d, (VkComputePipelineCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT: vkb_dec_VkConditionalRenderingBeginInfoEXT(d, (VkConditionalRenderingBeginInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR: vkb_dec_VkCooperativeMatrixPropertiesKHR(d, (VkCooperativeMatrixPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2: vkb_dec_VkCopyBufferInfo2(d, (VkCopyBufferInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2: vkb_dec_VkCopyBufferToImageInfo2(d, (VkCopyBufferToImageInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: vkb_dec_VkCopyDescriptorSet(d, (VkCopyDescriptorSet *)dst); return; + case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2: vkb_dec_VkCopyImageInfo2(d, (VkCopyImageInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2: vkb_dec_VkCopyImageToBufferInfo2(d, (VkCopyImageToBufferInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM: vkb_dec_VkCopyTensorInfoARM(d, (VkCopyTensorInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: vkb_dec_VkCustomResolveCreateInfoEXT(d, (VkCustomResolveCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT: vkb_dec_VkDebugUtilsObjectNameInfoEXT(d, (VkDebugUtilsObjectNameInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_DEPENDENCY_INFO: vkb_dec_VkDependencyInfo(d, (VkDependencyInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT: vkb_dec_VkDepthBiasInfoEXT(d, (VkDepthBiasInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT: vkb_dec_VkDepthBiasRepresentationInfoEXT(d, (VkDepthBiasRepresentationInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: vkb_dec_VkDescriptorPoolCreateInfo(d, (VkDescriptorPoolCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: vkb_dec_VkDescriptorPoolInlineUniformBlockCreateInfo(d, (VkDescriptorPoolInlineUniformBlockCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: vkb_dec_VkDescriptorSetAllocateInfo(d, (VkDescriptorSetAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO: vkb_dec_VkDescriptorSetLayoutBindingFlagsCreateInfo(d, (VkDescriptorSetLayoutBindingFlagsCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: vkb_dec_VkDescriptorSetLayoutCreateInfo(d, (VkDescriptorSetLayoutCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT: vkb_dec_VkDescriptorSetLayoutSupport(d, (VkDescriptorSetLayoutSupport *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO: vkb_dec_VkDescriptorSetVariableDescriptorCountAllocateInfo(d, (VkDescriptorSetVariableDescriptorCountAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: vkb_dec_VkDescriptorSetVariableDescriptorCountLayoutSupport(d, (VkDescriptorSetVariableDescriptorCountLayoutSupport *)dst); return; + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: vkb_dec_VkDescriptorUpdateTemplateCreateInfo(d, (VkDescriptorUpdateTemplateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: vkb_dec_VkDeviceBufferMemoryRequirements(d, (VkDeviceBufferMemoryRequirements *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: vkb_dec_VkDeviceCreateInfo(d, (VkDeviceCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: vkb_dec_VkDeviceGroupBindSparseInfo(d, (VkDeviceGroupBindSparseInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: vkb_dec_VkDeviceGroupCommandBufferBeginInfo(d, (VkDeviceGroupCommandBufferBeginInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: vkb_dec_VkDeviceGroupDeviceCreateInfo(d, (VkDeviceGroupDeviceCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: vkb_dec_VkDeviceGroupRenderPassBeginInfo(d, (VkDeviceGroupRenderPassBeginInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO: vkb_dec_VkDeviceGroupSubmitInfo(d, (VkDeviceGroupSubmitInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: vkb_dec_VkDeviceImageMemoryRequirements(d, (VkDeviceImageMemoryRequirements *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: vkb_dec_VkDeviceImageSubresourceInfo(d, (VkDeviceImageSubresourceInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: vkb_dec_VkDeviceMemoryOpaqueCaptureAddressInfo(d, (VkDeviceMemoryOpaqueCaptureAddressInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: vkb_dec_VkDevicePrivateDataCreateInfo(d, (VkDevicePrivateDataCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO: vkb_dec_VkDeviceQueueCreateInfo(d, (VkDeviceQueueCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO: vkb_dec_VkDeviceQueueGlobalPriorityCreateInfo(d, (VkDeviceQueueGlobalPriorityCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2: vkb_dec_VkDeviceQueueInfo2(d, (VkDeviceQueueInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM: vkb_dec_VkDeviceQueueShaderCoreControlCreateInfoARM(d, (VkDeviceQueueShaderCoreControlCreateInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM: vkb_dec_VkDeviceTensorMemoryRequirementsARM(d, (VkDeviceTensorMemoryRequirementsARM *)dst); return; + case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT: vkb_dec_VkDrmFormatModifierPropertiesList2EXT(d, (VkDrmFormatModifierPropertiesList2EXT *)dst); return; + case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: vkb_dec_VkDrmFormatModifierPropertiesListEXT(d, (VkDrmFormatModifierPropertiesListEXT *)dst); return; + case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: vkb_dec_VkEventCreateInfo(d, (VkEventCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO: vkb_dec_VkExportFenceCreateInfo(d, (VkExportFenceCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO: vkb_dec_VkExportMemoryAllocateInfo(d, (VkExportMemoryAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO: vkb_dec_VkExportSemaphoreCreateInfo(d, (VkExportSemaphoreCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES: vkb_dec_VkExternalBufferProperties(d, (VkExternalBufferProperties *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES: vkb_dec_VkExternalFenceProperties(d, (VkExternalFenceProperties *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES: vkb_dec_VkExternalImageFormatProperties(d, (VkExternalImageFormatProperties *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT: vkb_dec_VkExternalMemoryAcquireUnmodifiedEXT(d, (VkExternalMemoryAcquireUnmodifiedEXT *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO: vkb_dec_VkExternalMemoryBufferCreateInfo(d, (VkExternalMemoryBufferCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO: vkb_dec_VkExternalMemoryImageCreateInfo(d, (VkExternalMemoryImageCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM: vkb_dec_VkExternalMemoryTensorCreateInfoARM(d, (VkExternalMemoryTensorCreateInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES: vkb_dec_VkExternalSemaphoreProperties(d, (VkExternalSemaphoreProperties *)dst); return; + case VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM: vkb_dec_VkExternalTensorPropertiesARM(d, (VkExternalTensorPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO: vkb_dec_VkFenceCreateInfo(d, (VkFenceCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR: vkb_dec_VkFenceGetFdInfoKHR(d, (VkFenceGetFdInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT: vkb_dec_VkFilterCubicImageViewImageFormatPropertiesEXT(d, (VkFilterCubicImageViewImageFormatPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2: vkb_dec_VkFormatProperties2(d, (VkFormatProperties2 *)dst); return; + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: vkb_dec_VkFormatProperties3(d, (VkFormatProperties3 *)dst); return; + case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: vkb_dec_VkFragmentShadingRateAttachmentInfoKHR(d, (VkFragmentShadingRateAttachmentInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: vkb_dec_VkFramebufferAttachmentImageInfo(d, (VkFramebufferAttachmentImageInfo *)dst); return; + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: vkb_dec_VkFramebufferAttachmentsCreateInfo(d, (VkFramebufferAttachmentsCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO: vkb_dec_VkFramebufferCreateInfo(d, (VkFramebufferCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO: vkb_dec_VkGraphicsPipelineCreateInfo(d, (VkGraphicsPipelineCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT: vkb_dec_VkGraphicsPipelineLibraryCreateInfoEXT(d, (VkGraphicsPipelineLibraryCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: vkb_dec_VkHostImageCopyDevicePerformanceQuery(d, (VkHostImageCopyDevicePerformanceQuery *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA: vkb_dec_VkImageAlignmentControlCreateInfoMESA(d, (VkImageAlignmentControlCreateInfoMESA *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: vkb_dec_VkImageBlit2(d, (VkImageBlit2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: vkb_dec_VkImageCompressionControlEXT(d, (VkImageCompressionControlEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT: vkb_dec_VkImageCompressionPropertiesEXT(d, (VkImageCompressionPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_COPY_2: vkb_dec_VkImageCopy2(d, (VkImageCopy2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: vkb_dec_VkImageCreateInfo(d, (VkImageCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: vkb_dec_VkImageDrmFormatModifierExplicitCreateInfoEXT(d, (VkImageDrmFormatModifierExplicitCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: vkb_dec_VkImageDrmFormatModifierListCreateInfoEXT(d, (VkImageDrmFormatModifierListCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: vkb_dec_VkImageDrmFormatModifierPropertiesEXT(d, (VkImageDrmFormatModifierPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: vkb_dec_VkImageFormatListCreateInfo(d, (VkImageFormatListCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2: vkb_dec_VkImageFormatProperties2(d, (VkImageFormatProperties2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: vkb_dec_VkImageMemoryBarrier(d, (VkImageMemoryBarrier *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2: vkb_dec_VkImageMemoryBarrier2(d, (VkImageMemoryBarrier2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2: vkb_dec_VkImageMemoryRequirementsInfo2(d, (VkImageMemoryRequirementsInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: vkb_dec_VkImagePlaneMemoryRequirementsInfo(d, (VkImagePlaneMemoryRequirementsInfo *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: vkb_dec_VkImageResolve2(d, (VkImageResolve2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2: vkb_dec_VkImageSparseMemoryRequirementsInfo2(d, (VkImageSparseMemoryRequirementsInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: vkb_dec_VkImageStencilUsageCreateInfo(d, (VkImageStencilUsageCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: vkb_dec_VkImageSubresource2(d, (VkImageSubresource2 *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: vkb_dec_VkImageSwapchainCreateInfoKHR(d, (VkImageSwapchainCreateInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT: vkb_dec_VkImageViewASTCDecodeModeEXT(d, (VkImageViewASTCDecodeModeEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO: vkb_dec_VkImageViewCreateInfo(d, (VkImageViewCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: vkb_dec_VkImageViewMinLodCreateInfoEXT(d, (VkImageViewMinLodCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT: vkb_dec_VkImageViewSlicedCreateInfoEXT(d, (VkImageViewSlicedCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: vkb_dec_VkImageViewUsageCreateInfo(d, (VkImageViewUsageCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR: vkb_dec_VkImportFenceFdInfoKHR(d, (VkImportFenceFdInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR: vkb_dec_VkImportMemoryFdInfoKHR(d, (VkImportMemoryFdInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR: vkb_dec_VkImportSemaphoreFdInfoKHR(d, (VkImportSemaphoreFdInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO: vkb_dec_VkInstanceCreateInfo(d, (VkInstanceCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE: vkb_dec_VkMappedMemoryRange(d, (VkMappedMemoryRange *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO: vkb_dec_VkMemoryAllocateFlagsInfo(d, (VkMemoryAllocateFlagsInfo *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: vkb_dec_VkMemoryAllocateInfo(d, (VkMemoryAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER: vkb_dec_VkMemoryBarrier(d, (VkMemoryBarrier *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: vkb_dec_VkMemoryBarrier2(d, (VkMemoryBarrier2 *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: vkb_dec_VkMemoryBarrierAccessFlags3KHR(d, (VkMemoryBarrierAccessFlags3KHR *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO: vkb_dec_VkMemoryDedicatedAllocateInfo(d, (VkMemoryDedicatedAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM: vkb_dec_VkMemoryDedicatedAllocateInfoTensorARM(d, (VkMemoryDedicatedAllocateInfoTensorARM *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: vkb_dec_VkMemoryDedicatedRequirements(d, (VkMemoryDedicatedRequirements *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR: vkb_dec_VkMemoryFdPropertiesKHR(d, (VkMemoryFdPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR: vkb_dec_VkMemoryGetFdInfoKHR(d, (VkMemoryGetFdInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: vkb_dec_VkMemoryOpaqueCaptureAddressAllocateInfo(d, (VkMemoryOpaqueCaptureAddressAllocateInfo *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT: vkb_dec_VkMemoryPriorityAllocateInfoEXT(d, (VkMemoryPriorityAllocateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2: vkb_dec_VkMemoryRequirements2(d, (VkMemoryRequirements2 *)dst); return; + case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT: vkb_dec_VkMultisamplePropertiesEXT(d, (VkMultisamplePropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT: vkb_dec_VkMultisampledRenderToSingleSampledInfoEXT(d, (VkMultisampledRenderToSingleSampledInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT: vkb_dec_VkMutableDescriptorTypeCreateInfoEXT(d, (VkMutableDescriptorTypeCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: vkb_dec_VkPerformanceCounterARM(d, (VkPerformanceCounterARM *)dst); return; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: vkb_dec_VkPerformanceCounterDescriptionARM(d, (VkPerformanceCounterDescriptionARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: vkb_dec_VkPhysicalDevice16BitStorageFeatures(d, (VkPhysicalDevice16BitStorageFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: vkb_dec_VkPhysicalDevice4444FormatsFeaturesEXT(d, (VkPhysicalDevice4444FormatsFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: vkb_dec_VkPhysicalDevice8BitStorageFeatures(d, (VkPhysicalDevice8BitStorageFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceASTCDecodeFeaturesEXT(d, (VkPhysicalDeviceASTCDecodeFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT(d, (VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: vkb_dec_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(d, (VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: vkb_dec_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(d, (VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(d, (VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(d, (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: vkb_dec_VkPhysicalDeviceBufferDeviceAddressFeatures(d, (VkPhysicalDeviceBufferDeviceAddressFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(d, (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceColorWriteEnableFeaturesEXT(d, (VkPhysicalDeviceColorWriteEnableFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: vkb_dec_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(d, (VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(d, (VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: vkb_dec_VkPhysicalDeviceConditionalRenderingFeaturesEXT(d, (VkPhysicalDeviceConditionalRenderingFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(d, (VkPhysicalDeviceConservativeRasterizationPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR: vkb_dec_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(d, (VkPhysicalDeviceCooperativeMatrixFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(d, (VkPhysicalDeviceCooperativeMatrixPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: vkb_dec_VkPhysicalDeviceCustomBorderColorFeaturesEXT(d, (VkPhysicalDeviceCustomBorderColorFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceCustomBorderColorPropertiesEXT(d, (VkPhysicalDeviceCustomBorderColorPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceCustomResolveFeaturesEXT(d, (VkPhysicalDeviceCustomResolveFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT: vkb_dec_VkPhysicalDeviceDepthBiasControlFeaturesEXT(d, (VkPhysicalDeviceDepthBiasControlFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: vkb_dec_VkPhysicalDeviceDepthClampControlFeaturesEXT(d, (VkPhysicalDeviceDepthClampControlFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: vkb_dec_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(d, (VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: vkb_dec_VkPhysicalDeviceDepthClipControlFeaturesEXT(d, (VkPhysicalDeviceDepthClipControlFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceDepthClipEnableFeaturesEXT(d, (VkPhysicalDeviceDepthClipEnableFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: vkb_dec_VkPhysicalDeviceDepthStencilResolveProperties(d, (VkPhysicalDeviceDepthStencilResolveProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: vkb_dec_VkPhysicalDeviceDescriptorIndexingFeatures(d, (VkPhysicalDeviceDescriptorIndexingFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES: vkb_dec_VkPhysicalDeviceDescriptorIndexingProperties(d, (VkPhysicalDeviceDescriptorIndexingProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceDiscardRectanglePropertiesEXT(d, (VkPhysicalDeviceDiscardRectanglePropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: vkb_dec_VkPhysicalDeviceDriverProperties(d, (VkPhysicalDeviceDriverProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceDrmPropertiesEXT(d, (VkPhysicalDeviceDrmPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: vkb_dec_VkPhysicalDeviceDynamicRenderingFeatures(d, (VkPhysicalDeviceDynamicRenderingFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: vkb_dec_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(d, (VkPhysicalDeviceDynamicRenderingLocalReadFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(d, (VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: vkb_dec_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(d, (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: vkb_dec_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(d, (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(d, (VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(d, (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO: vkb_dec_VkPhysicalDeviceExternalBufferInfo(d, (VkPhysicalDeviceExternalBufferInfo *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO: vkb_dec_VkPhysicalDeviceExternalFenceInfo(d, (VkPhysicalDeviceExternalFenceInfo *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: vkb_dec_VkPhysicalDeviceExternalImageFormatInfo(d, (VkPhysicalDeviceExternalImageFormatInfo *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO: vkb_dec_VkPhysicalDeviceExternalSemaphoreInfo(d, (VkPhysicalDeviceExternalSemaphoreInfo *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM: vkb_dec_VkPhysicalDeviceExternalTensorInfoARM(d, (VkPhysicalDeviceExternalTensorInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: vkb_dec_VkPhysicalDeviceFeatures2(d, (VkPhysicalDeviceFeatures2 *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: vkb_dec_VkPhysicalDeviceFloatControlsProperties(d, (VkPhysicalDeviceFloatControlsProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM: vkb_dec_VkPhysicalDeviceFormatPackFeaturesARM(d, (VkPhysicalDeviceFormatPackFeaturesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: vkb_dec_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(d, (VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(d, (VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: vkb_dec_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(d, (VkPhysicalDeviceFragmentDensityMapFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE: vkb_dec_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE(d, (VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE: vkb_dec_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE(d, (VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(d, (VkPhysicalDeviceFragmentDensityMapPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR: vkb_dec_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(d, (VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(d, (VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: vkb_dec_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(d, (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: vkb_dec_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(d, (VkPhysicalDeviceFragmentShadingRateFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR: vkb_dec_VkPhysicalDeviceFragmentShadingRateKHR(d, (VkPhysicalDeviceFragmentShadingRateKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(d, (VkPhysicalDeviceFragmentShadingRatePropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES: vkb_dec_VkPhysicalDeviceGlobalPriorityQueryFeatures(d, (VkPhysicalDeviceGlobalPriorityQueryFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: vkb_dec_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(d, (VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(d, (VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES: vkb_dec_VkPhysicalDeviceGroupProperties(d, (VkPhysicalDeviceGroupProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: vkb_dec_VkPhysicalDeviceHostImageCopyFeatures(d, (VkPhysicalDeviceHostImageCopyFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: vkb_dec_VkPhysicalDeviceHostImageCopyProperties(d, (VkPhysicalDeviceHostImageCopyProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: vkb_dec_VkPhysicalDeviceHostQueryResetFeatures(d, (VkPhysicalDeviceHostQueryResetFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: vkb_dec_VkPhysicalDeviceIDProperties(d, (VkPhysicalDeviceIDProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: vkb_dec_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(d, (VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: vkb_dec_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(d, (VkPhysicalDeviceImageAlignmentControlFeaturesMESA *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA: vkb_dec_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(d, (VkPhysicalDeviceImageAlignmentControlPropertiesMESA *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT: vkb_dec_VkPhysicalDeviceImageCompressionControlFeaturesEXT(d, (VkPhysicalDeviceImageCompressionControlFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: vkb_dec_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(d, (VkPhysicalDeviceImageDrmFormatModifierInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2: vkb_dec_VkPhysicalDeviceImageFormatInfo2(d, (VkPhysicalDeviceImageFormatInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: vkb_dec_VkPhysicalDeviceImageRobustnessFeatures(d, (VkPhysicalDeviceImageRobustnessFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT: vkb_dec_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(d, (VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT: vkb_dec_VkPhysicalDeviceImageViewImageFormatInfoEXT(d, (VkPhysicalDeviceImageViewImageFormatInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: vkb_dec_VkPhysicalDeviceImageViewMinLodFeaturesEXT(d, (VkPhysicalDeviceImageViewMinLodFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: vkb_dec_VkPhysicalDeviceImagelessFramebufferFeatures(d, (VkPhysicalDeviceImagelessFramebufferFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: vkb_dec_VkPhysicalDeviceIndexTypeUint8Features(d, (VkPhysicalDeviceIndexTypeUint8Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: vkb_dec_VkPhysicalDeviceInlineUniformBlockFeatures(d, (VkPhysicalDeviceInlineUniformBlockFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: vkb_dec_VkPhysicalDeviceInlineUniformBlockProperties(d, (VkPhysicalDeviceInlineUniformBlockProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR: vkb_dec_VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR(d, (VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceLayeredApiPropertiesKHR(d, (VkPhysicalDeviceLayeredApiPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR: vkb_dec_VkPhysicalDeviceLayeredApiPropertiesListKHR(d, (VkPhysicalDeviceLayeredApiPropertiesListKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(d, (VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT: vkb_dec_VkPhysicalDeviceLegacyDitheringFeaturesEXT(d, (VkPhysicalDeviceLegacyDitheringFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT: vkb_dec_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(d, (VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(d, (VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: vkb_dec_VkPhysicalDeviceLineRasterizationFeatures(d, (VkPhysicalDeviceLineRasterizationFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: vkb_dec_VkPhysicalDeviceLineRasterizationProperties(d, (VkPhysicalDeviceLineRasterizationProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: vkb_dec_VkPhysicalDeviceMaintenance10FeaturesKHR(d, (VkPhysicalDeviceMaintenance10FeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceMaintenance10PropertiesKHR(d, (VkPhysicalDeviceMaintenance10PropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: vkb_dec_VkPhysicalDeviceMaintenance3Properties(d, (VkPhysicalDeviceMaintenance3Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: vkb_dec_VkPhysicalDeviceMaintenance4Features(d, (VkPhysicalDeviceMaintenance4Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: vkb_dec_VkPhysicalDeviceMaintenance4Properties(d, (VkPhysicalDeviceMaintenance4Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: vkb_dec_VkPhysicalDeviceMaintenance5Features(d, (VkPhysicalDeviceMaintenance5Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: vkb_dec_VkPhysicalDeviceMaintenance5Properties(d, (VkPhysicalDeviceMaintenance5Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: vkb_dec_VkPhysicalDeviceMaintenance6Features(d, (VkPhysicalDeviceMaintenance6Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: vkb_dec_VkPhysicalDeviceMaintenance6Properties(d, (VkPhysicalDeviceMaintenance6Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR: vkb_dec_VkPhysicalDeviceMaintenance7FeaturesKHR(d, (VkPhysicalDeviceMaintenance7FeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceMaintenance7PropertiesKHR(d, (VkPhysicalDeviceMaintenance7PropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR: vkb_dec_VkPhysicalDeviceMaintenance8FeaturesKHR(d, (VkPhysicalDeviceMaintenance8FeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: vkb_dec_VkPhysicalDeviceMaintenance9FeaturesKHR(d, (VkPhysicalDeviceMaintenance9FeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceMaintenance9PropertiesKHR(d, (VkPhysicalDeviceMaintenance9PropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT: vkb_dec_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(d, (VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(d, (VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceMemoryBudgetPropertiesEXT(d, (VkPhysicalDeviceMemoryBudgetPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: vkb_dec_VkPhysicalDeviceMemoryPriorityFeaturesEXT(d, (VkPhysicalDeviceMemoryPriorityFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2: vkb_dec_VkPhysicalDeviceMemoryProperties2(d, (VkPhysicalDeviceMemoryProperties2 *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: vkb_dec_VkPhysicalDeviceMultiDrawFeaturesEXT(d, (VkPhysicalDeviceMultiDrawFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceMultiDrawPropertiesEXT(d, (VkPhysicalDeviceMultiDrawPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: vkb_dec_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(d, (VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: vkb_dec_VkPhysicalDeviceMultiviewFeatures(d, (VkPhysicalDeviceMultiviewFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: vkb_dec_VkPhysicalDeviceMultiviewProperties(d, (VkPhysicalDeviceMultiviewProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(d, (VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT: vkb_dec_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(d, (VkPhysicalDeviceNestedCommandBufferFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(d, (VkPhysicalDeviceNestedCommandBufferPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: vkb_dec_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(d, (VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT: vkb_dec_VkPhysicalDevicePCIBusInfoPropertiesEXT(d, (VkPhysicalDevicePCIBusInfoPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: vkb_dec_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(d, (VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: vkb_dec_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(d, (VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: vkb_dec_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(d, (VkPhysicalDevicePerformanceCountersByRegionPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: vkb_dec_VkPhysicalDevicePipelineCreationCacheControlFeatures(d, (VkPhysicalDevicePipelineCreationCacheControlFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: vkb_dec_VkPhysicalDevicePipelineProtectedAccessFeatures(d, (VkPhysicalDevicePipelineProtectedAccessFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: vkb_dec_VkPhysicalDevicePipelineRobustnessFeatures(d, (VkPhysicalDevicePipelineRobustnessFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: vkb_dec_VkPhysicalDevicePipelineRobustnessProperties(d, (VkPhysicalDevicePipelineRobustnessProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: vkb_dec_VkPhysicalDevicePointClippingProperties(d, (VkPhysicalDevicePointClippingProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: vkb_dec_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(d, (VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: vkb_dec_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(d, (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: vkb_dec_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(d, (VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: vkb_dec_VkPhysicalDevicePrivateDataFeatures(d, (VkPhysicalDevicePrivateDataFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: vkb_dec_VkPhysicalDeviceProperties2(d, (VkPhysicalDeviceProperties2 *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: vkb_dec_VkPhysicalDeviceProtectedMemoryFeatures(d, (VkPhysicalDeviceProtectedMemoryFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: vkb_dec_VkPhysicalDeviceProtectedMemoryProperties(d, (VkPhysicalDeviceProtectedMemoryProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: vkb_dec_VkPhysicalDeviceProvokingVertexFeaturesEXT(d, (VkPhysicalDeviceProvokingVertexFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceProvokingVertexPropertiesEXT(d, (VkPhysicalDeviceProvokingVertexPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: vkb_dec_VkPhysicalDevicePushDescriptorProperties(d, (VkPhysicalDevicePushDescriptorProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(d, (VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(d, (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: vkb_dec_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(d, (VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM: vkb_dec_VkPhysicalDeviceRenderPassStripedFeaturesARM(d, (VkPhysicalDeviceRenderPassStripedFeaturesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM: vkb_dec_VkPhysicalDeviceRenderPassStripedPropertiesARM(d, (VkPhysicalDeviceRenderPassStripedPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR: vkb_dec_VkPhysicalDeviceRobustness2FeaturesKHR(d, (VkPhysicalDeviceRobustness2FeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR: vkb_dec_VkPhysicalDeviceRobustness2PropertiesKHR(d, (VkPhysicalDeviceRobustness2PropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceSampleLocationsPropertiesEXT(d, (VkPhysicalDeviceSampleLocationsPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: vkb_dec_VkPhysicalDeviceSamplerFilterMinmaxProperties(d, (VkPhysicalDeviceSamplerFilterMinmaxProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: vkb_dec_VkPhysicalDeviceSamplerYcbcrConversionFeatures(d, (VkPhysicalDeviceSamplerYcbcrConversionFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: vkb_dec_VkPhysicalDeviceScalarBlockLayoutFeatures(d, (VkPhysicalDeviceScalarBlockLayoutFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM: vkb_dec_VkPhysicalDeviceSchedulingControlsFeaturesARM(d, (VkPhysicalDeviceSchedulingControlsFeaturesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM: vkb_dec_VkPhysicalDeviceSchedulingControlsPropertiesARM(d, (VkPhysicalDeviceSchedulingControlsPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: vkb_dec_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(d, (VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(d, (VkPhysicalDeviceShader64BitIndexingFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(d, (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(d, (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: vkb_dec_VkPhysicalDeviceShaderAtomicInt64Features(d, (VkPhysicalDeviceShaderAtomicInt64Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderBfloat16FeaturesKHR(d, (VkPhysicalDeviceShaderBfloat16FeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderClockFeaturesKHR(d, (VkPhysicalDeviceShaderClockFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM: vkb_dec_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(d, (VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM: vkb_dec_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(d, (VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM: vkb_dec_VkPhysicalDeviceShaderCorePropertiesARM(d, (VkPhysicalDeviceShaderCorePropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: vkb_dec_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(d, (VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: vkb_dec_VkPhysicalDeviceShaderDrawParametersFeatures(d, (VkPhysicalDeviceShaderDrawParametersFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: vkb_dec_VkPhysicalDeviceShaderExpectAssumeFeatures(d, (VkPhysicalDeviceShaderExpectAssumeFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: vkb_dec_VkPhysicalDeviceShaderFloat16Int8Features(d, (VkPhysicalDeviceShaderFloat16Int8Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderFloat8FeaturesEXT(d, (VkPhysicalDeviceShaderFloat8FeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: vkb_dec_VkPhysicalDeviceShaderFloatControls2Features(d, (VkPhysicalDeviceShaderFloatControls2Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderFmaFeaturesKHR(d, (VkPhysicalDeviceShaderFmaFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(d, (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: vkb_dec_VkPhysicalDeviceShaderIntegerDotProductFeatures(d, (VkPhysicalDeviceShaderIntegerDotProductFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: vkb_dec_VkPhysicalDeviceShaderIntegerDotProductProperties(d, (VkPhysicalDeviceShaderIntegerDotProductProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderLongVectorFeaturesEXT(d, (VkPhysicalDeviceShaderLongVectorFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceShaderLongVectorPropertiesEXT(d, (VkPhysicalDeviceShaderLongVectorPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(d, (VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(d, (VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(d, (VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderQuadControlFeaturesKHR(d, (VkPhysicalDeviceShaderQuadControlFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(d, (VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT(d, (VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: vkb_dec_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(d, (VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(d, (VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: vkb_dec_VkPhysicalDeviceShaderSubgroupRotateFeatures(d, (VkPhysicalDeviceShaderSubgroupRotateFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(d, (VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: vkb_dec_VkPhysicalDeviceShaderTerminateInvocationFeatures(d, (VkPhysicalDeviceShaderTerminateInvocationFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderTileImageFeaturesEXT(d, (VkPhysicalDeviceShaderTileImageFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceShaderTileImagePropertiesEXT(d, (VkPhysicalDeviceShaderTileImagePropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: vkb_dec_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(d, (VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: vkb_dec_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(d, (VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: vkb_dec_VkPhysicalDeviceSparseImageFormatInfo2(d, (VkPhysicalDeviceSparseImageFormatInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: vkb_dec_VkPhysicalDeviceSubgroupProperties(d, (VkPhysicalDeviceSubgroupProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: vkb_dec_VkPhysicalDeviceSubgroupSizeControlFeatures(d, (VkPhysicalDeviceSubgroupSizeControlFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: vkb_dec_VkPhysicalDeviceSubgroupSizeControlProperties(d, (VkPhysicalDeviceSubgroupSizeControlProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: vkb_dec_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(d, (VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: vkb_dec_VkPhysicalDeviceSynchronization2Features(d, (VkPhysicalDeviceSynchronization2Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM: vkb_dec_VkPhysicalDeviceTensorFeaturesARM(d, (VkPhysicalDeviceTensorFeaturesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM: vkb_dec_VkPhysicalDeviceTensorPropertiesARM(d, (VkPhysicalDeviceTensorPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: vkb_dec_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(d, (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: vkb_dec_VkPhysicalDeviceTexelBufferAlignmentProperties(d, (VkPhysicalDeviceTexelBufferAlignmentProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: vkb_dec_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(d, (VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: vkb_dec_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(d, (VkPhysicalDeviceTextureCompressionASTCHDRFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: vkb_dec_VkPhysicalDeviceTimelineSemaphoreFeatures(d, (VkPhysicalDeviceTimelineSemaphoreFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: vkb_dec_VkPhysicalDeviceTimelineSemaphoreProperties(d, (VkPhysicalDeviceTimelineSemaphoreProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: vkb_dec_VkPhysicalDeviceToolProperties(d, (VkPhysicalDeviceToolProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: vkb_dec_VkPhysicalDeviceTransformFeedbackFeaturesEXT(d, (VkPhysicalDeviceTransformFeedbackFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceTransformFeedbackPropertiesEXT(d, (VkPhysicalDeviceTransformFeedbackPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR: vkb_dec_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(d, (VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: vkb_dec_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(d, (VkPhysicalDeviceUniformBufferStandardLayoutFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: vkb_dec_VkPhysicalDeviceVariablePointersFeatures(d, (VkPhysicalDeviceVariablePointersFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: vkb_dec_VkPhysicalDeviceVertexAttributeDivisorFeatures(d, (VkPhysicalDeviceVertexAttributeDivisorFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: vkb_dec_VkPhysicalDeviceVertexAttributeDivisorProperties(d, (VkPhysicalDeviceVertexAttributeDivisorProperties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: vkb_dec_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(d, (VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(d, (VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: vkb_dec_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(d, (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: vkb_dec_VkPhysicalDeviceVulkan11Features(d, (VkPhysicalDeviceVulkan11Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: vkb_dec_VkPhysicalDeviceVulkan11Properties(d, (VkPhysicalDeviceVulkan11Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: vkb_dec_VkPhysicalDeviceVulkan12Features(d, (VkPhysicalDeviceVulkan12Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: vkb_dec_VkPhysicalDeviceVulkan12Properties(d, (VkPhysicalDeviceVulkan12Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: vkb_dec_VkPhysicalDeviceVulkan13Features(d, (VkPhysicalDeviceVulkan13Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: vkb_dec_VkPhysicalDeviceVulkan13Properties(d, (VkPhysicalDeviceVulkan13Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: vkb_dec_VkPhysicalDeviceVulkan14Features(d, (VkPhysicalDeviceVulkan14Features *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES: vkb_dec_VkPhysicalDeviceVulkan14Properties(d, (VkPhysicalDeviceVulkan14Properties *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: vkb_dec_VkPhysicalDeviceVulkanMemoryModelFeatures(d, (VkPhysicalDeviceVulkanMemoryModelFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: vkb_dec_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(d, (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(d, (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: vkb_dec_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(d, (VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: vkb_dec_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(d, (VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *)dst); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: vkb_dec_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(d, (VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO: vkb_dec_VkPipelineCacheCreateInfo(d, (VkPipelineCacheCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: vkb_dec_VkPipelineColorBlendAdvancedStateCreateInfoEXT(d, (VkPipelineColorBlendAdvancedStateCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO: vkb_dec_VkPipelineColorBlendStateCreateInfo(d, (VkPipelineColorBlendStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: vkb_dec_VkPipelineColorWriteCreateInfoEXT(d, (VkPipelineColorWriteCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: vkb_dec_VkPipelineCreateFlags2CreateInfo(d, (VkPipelineCreateFlags2CreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: vkb_dec_VkPipelineCreationFeedbackCreateInfo(d, (VkPipelineCreationFeedbackCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO: vkb_dec_VkPipelineDepthStencilStateCreateInfo(d, (VkPipelineDepthStencilStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT: vkb_dec_VkPipelineDiscardRectangleStateCreateInfoEXT(d, (VkPipelineDiscardRectangleStateCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO: vkb_dec_VkPipelineDynamicStateCreateInfo(d, (VkPipelineDynamicStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE: vkb_dec_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE(d, (VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR: vkb_dec_VkPipelineFragmentShadingRateStateCreateInfoKHR(d, (VkPipelineFragmentShadingRateStateCreateInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO: vkb_dec_VkPipelineInputAssemblyStateCreateInfo(d, (VkPipelineInputAssemblyStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: vkb_dec_VkPipelineLayoutCreateInfo(d, (VkPipelineLayoutCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR: vkb_dec_VkPipelineLibraryCreateInfoKHR(d, (VkPipelineLibraryCreateInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO: vkb_dec_VkPipelineMultisampleStateCreateInfo(d, (VkPipelineMultisampleStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT: vkb_dec_VkPipelineRasterizationConservativeStateCreateInfoEXT(d, (VkPipelineRasterizationConservativeStateCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT: vkb_dec_VkPipelineRasterizationDepthClipStateCreateInfoEXT(d, (VkPipelineRasterizationDepthClipStateCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: vkb_dec_VkPipelineRasterizationLineStateCreateInfo(d, (VkPipelineRasterizationLineStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: vkb_dec_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(d, (VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO: vkb_dec_VkPipelineRasterizationStateCreateInfo(d, (VkPipelineRasterizationStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT: vkb_dec_VkPipelineRasterizationStateStreamCreateInfoEXT(d, (VkPipelineRasterizationStateStreamCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: vkb_dec_VkPipelineRenderingCreateInfo(d, (VkPipelineRenderingCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO: vkb_dec_VkPipelineRobustnessCreateInfo(d, (VkPipelineRobustnessCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT: vkb_dec_VkPipelineSampleLocationsStateCreateInfoEXT(d, (VkPipelineSampleLocationsStateCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO: vkb_dec_VkPipelineShaderStageCreateInfo(d, (VkPipelineShaderStageCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT: vkb_dec_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(d, (VkPipelineShaderStageModuleIdentifierCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: vkb_dec_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(d, (VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: vkb_dec_VkPipelineTessellationDomainOriginStateCreateInfo(d, (VkPipelineTessellationDomainOriginStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO: vkb_dec_VkPipelineTessellationStateCreateInfo(d, (VkPipelineTessellationStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: vkb_dec_VkPipelineVertexInputDivisorStateCreateInfo(d, (VkPipelineVertexInputDivisorStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: vkb_dec_VkPipelineVertexInputStateCreateInfo(d, (VkPipelineVertexInputStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT: vkb_dec_VkPipelineViewportDepthClampControlCreateInfoEXT(d, (VkPipelineViewportDepthClampControlCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT: vkb_dec_VkPipelineViewportDepthClipControlCreateInfoEXT(d, (VkPipelineViewportDepthClipControlCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO: vkb_dec_VkPipelineViewportStateCreateInfo(d, (VkPipelineViewportStateCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: vkb_dec_VkProtectedSubmitInfo(d, (VkProtectedSubmitInfo *)dst); return; + case VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO: vkb_dec_VkPushConstantsInfo(d, (VkPushConstantsInfo *)dst); return; + case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO: vkb_dec_VkPushDescriptorSetInfo(d, (VkPushDescriptorSetInfo *)dst); return; + case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO: vkb_dec_VkQueryPoolCreateInfo(d, (VkQueryPoolCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES: vkb_dec_VkQueueFamilyGlobalPriorityProperties(d, (VkQueueFamilyGlobalPriorityProperties *)dst); return; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR: vkb_dec_VkQueueFamilyOwnershipTransferPropertiesKHR(d, (VkQueueFamilyOwnershipTransferPropertiesKHR *)dst); return; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2: vkb_dec_VkQueueFamilyProperties2(d, (VkQueueFamilyProperties2 *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: vkb_dec_VkRenderPassAttachmentBeginInfo(d, (VkRenderPassAttachmentBeginInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO: vkb_dec_VkRenderPassBeginInfo(d, (VkRenderPassBeginInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: vkb_dec_VkRenderPassCreateInfo(d, (VkRenderPassCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: vkb_dec_VkRenderPassCreateInfo2(d, (VkRenderPassCreateInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT: vkb_dec_VkRenderPassCreationControlEXT(d, (VkRenderPassCreationControlEXT *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT: vkb_dec_VkRenderPassCreationFeedbackCreateInfoEXT(d, (VkRenderPassCreationFeedbackCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: vkb_dec_VkRenderPassFragmentDensityMapCreateInfoEXT(d, (VkRenderPassFragmentDensityMapCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: vkb_dec_VkRenderPassInputAttachmentAspectCreateInfo(d, (VkRenderPassInputAttachmentAspectCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: vkb_dec_VkRenderPassMultiviewCreateInfo(d, (VkRenderPassMultiviewCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: vkb_dec_VkRenderPassPerformanceCountersByRegionBeginInfoARM(d, (VkRenderPassPerformanceCountersByRegionBeginInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: vkb_dec_VkRenderPassSampleLocationsBeginInfoEXT(d, (VkRenderPassSampleLocationsBeginInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM: vkb_dec_VkRenderPassStripeBeginInfoARM(d, (VkRenderPassStripeBeginInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM: vkb_dec_VkRenderPassStripeInfoARM(d, (VkRenderPassStripeInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM: vkb_dec_VkRenderPassStripeSubmitInfoARM(d, (VkRenderPassStripeSubmitInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT: vkb_dec_VkRenderPassSubpassFeedbackCreateInfoEXT(d, (VkRenderPassSubpassFeedbackCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: vkb_dec_VkRenderingAreaInfo(d, (VkRenderingAreaInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: vkb_dec_VkRenderingAttachmentFlagsInfoKHR(d, (VkRenderingAttachmentFlagsInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: vkb_dec_VkRenderingAttachmentInfo(d, (VkRenderingAttachmentInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: vkb_dec_VkRenderingAttachmentLocationInfo(d, (VkRenderingAttachmentLocationInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: vkb_dec_VkRenderingEndInfoKHR(d, (VkRenderingEndInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT: vkb_dec_VkRenderingFragmentDensityMapAttachmentInfoEXT(d, (VkRenderingFragmentDensityMapAttachmentInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: vkb_dec_VkRenderingFragmentShadingRateAttachmentInfoKHR(d, (VkRenderingFragmentShadingRateAttachmentInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_INFO: vkb_dec_VkRenderingInfo(d, (VkRenderingInfo *)dst); return; + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: vkb_dec_VkRenderingInputAttachmentIndexInfo(d, (VkRenderingInputAttachmentIndexInfo *)dst); return; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: vkb_dec_VkResolveImageInfo2(d, (VkResolveImageInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: vkb_dec_VkResolveImageModeInfoKHR(d, (VkResolveImageModeInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: vkb_dec_VkSampleLocationsInfoEXT(d, (VkSampleLocationsInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT: vkb_dec_VkSamplerBorderColorComponentMappingCreateInfoEXT(d, (VkSamplerBorderColorComponentMappingCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: vkb_dec_VkSamplerCreateInfo(d, (VkSamplerCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: vkb_dec_VkSamplerCustomBorderColorCreateInfoEXT(d, (VkSamplerCustomBorderColorCreateInfoEXT *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: vkb_dec_VkSamplerReductionModeCreateInfo(d, (VkSamplerReductionModeCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: vkb_dec_VkSamplerYcbcrConversionCreateInfo(d, (VkSamplerYcbcrConversionCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: vkb_dec_VkSamplerYcbcrConversionImageFormatProperties(d, (VkSamplerYcbcrConversionImageFormatProperties *)dst); return; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: vkb_dec_VkSamplerYcbcrConversionInfo(d, (VkSamplerYcbcrConversionInfo *)dst); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO: vkb_dec_VkSemaphoreCreateInfo(d, (VkSemaphoreCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR: vkb_dec_VkSemaphoreGetFdInfoKHR(d, (VkSemaphoreGetFdInfoKHR *)dst); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: vkb_dec_VkSemaphoreSignalInfo(d, (VkSemaphoreSignalInfo *)dst); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO: vkb_dec_VkSemaphoreSubmitInfo(d, (VkSemaphoreSubmitInfo *)dst); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: vkb_dec_VkSemaphoreTypeCreateInfo(d, (VkSemaphoreTypeCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: vkb_dec_VkSemaphoreWaitInfo(d, (VkSemaphoreWaitInfo *)dst); return; + case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: vkb_dec_VkShaderModuleCreateInfo(d, (VkShaderModuleCreateInfo *)dst); return; + case VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT: vkb_dec_VkShaderModuleIdentifierEXT(d, (VkShaderModuleIdentifierEXT *)dst); return; + case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2: vkb_dec_VkSparseImageFormatProperties2(d, (VkSparseImageFormatProperties2 *)dst); return; + case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2: vkb_dec_VkSparseImageMemoryRequirements2(d, (VkSparseImageMemoryRequirements2 *)dst); return; + case VK_STRUCTURE_TYPE_SUBMIT_INFO: vkb_dec_VkSubmitInfo(d, (VkSubmitInfo *)dst); return; + case VK_STRUCTURE_TYPE_SUBMIT_INFO_2: vkb_dec_VkSubmitInfo2(d, (VkSubmitInfo2 *)dst); return; + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: vkb_dec_VkSubpassBeginInfo(d, (VkSubpassBeginInfo *)dst); return; + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: vkb_dec_VkSubpassDependency2(d, (VkSubpassDependency2 *)dst); return; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: vkb_dec_VkSubpassDescription2(d, (VkSubpassDescription2 *)dst); return; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: vkb_dec_VkSubpassDescriptionDepthStencilResolve(d, (VkSubpassDescriptionDepthStencilResolve *)dst); return; + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: vkb_dec_VkSubpassEndInfo(d, (VkSubpassEndInfo *)dst); return; + case VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT: vkb_dec_VkSubpassResolvePerformanceQueryEXT(d, (VkSubpassResolvePerformanceQueryEXT *)dst); return; + case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: vkb_dec_VkSubresourceHostMemcpySize(d, (VkSubresourceHostMemcpySize *)dst); return; + case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: vkb_dec_VkSubresourceLayout2(d, (VkSubresourceLayout2 *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_COPY_ARM: vkb_dec_VkTensorCopyARM(d, (VkTensorCopyARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM: vkb_dec_VkTensorCreateInfoARM(d, (VkTensorCreateInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM: vkb_dec_VkTensorDependencyInfoARM(d, (VkTensorDependencyInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM: vkb_dec_VkTensorDescriptionARM(d, (VkTensorDescriptionARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM: vkb_dec_VkTensorFormatPropertiesARM(d, (VkTensorFormatPropertiesARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM: vkb_dec_VkTensorMemoryBarrierARM(d, (VkTensorMemoryBarrierARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM: vkb_dec_VkTensorMemoryRequirementsInfoARM(d, (VkTensorMemoryRequirementsInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM: vkb_dec_VkTensorViewCreateInfoARM(d, (VkTensorViewCreateInfoARM *)dst); return; + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: vkb_dec_VkTimelineSemaphoreSubmitInfo(d, (VkTimelineSemaphoreSubmitInfo *)dst); return; + case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT: vkb_dec_VkVertexInputAttributeDescription2EXT(d, (VkVertexInputAttributeDescription2EXT *)dst); return; + case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT: vkb_dec_VkVertexInputBindingDescription2EXT(d, (VkVertexInputBindingDescription2EXT *)dst); return; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: vkb_dec_VkWriteDescriptorSet(d, (VkWriteDescriptorSet *)dst); return; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: vkb_dec_VkWriteDescriptorSetInlineUniformBlock(d, (VkWriteDescriptorSetInlineUniformBlock *)dst); return; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM: vkb_dec_VkWriteDescriptorSetTensorARM(d, (VkWriteDescriptorSetTensorARM *)dst); return; + default: vkb_dec_raw_into(d, dst, vkb_struct_size(t)); return; + } +} + +const char *const vkb_cmd_names[VKB_CMD_COUNT] = { + "vkbHello", + "vkbQueryServer", + "vkbDescUpdateRaw", + "vkbPushDescRaw", + "vkbAllocDescSets", + "vkAllocateCommandBuffers", + "vkAllocateDescriptorSets", + "vkAllocateMemory", + "vkBeginCommandBuffer", + "vkBindBufferMemory", + "vkBindBufferMemory2", + "vkBindImageMemory", + "vkBindImageMemory2", + "vkBindTensorMemoryARM", + "vkCmdBeginConditionalRenderingEXT", + "vkCmdBeginCustomResolveEXT", + "vkCmdBeginQuery", + "vkCmdBeginQueryIndexedEXT", + "vkCmdBeginRenderPass", + "vkCmdBeginRenderPass2", + "vkCmdBeginRendering", + "vkCmdBeginTransformFeedbackEXT", + "vkCmdBindDescriptorSets", + "vkCmdBindDescriptorSets2", + "vkCmdBindIndexBuffer", + "vkCmdBindIndexBuffer2", + "vkCmdBindPipeline", + "vkCmdBindTransformFeedbackBuffersEXT", + "vkCmdBindVertexBuffers", + "vkCmdBindVertexBuffers2", + "vkCmdBlitImage", + "vkCmdBlitImage2", + "vkCmdClearAttachments", + "vkCmdClearColorImage", + "vkCmdClearDepthStencilImage", + "vkCmdCopyBuffer", + "vkCmdCopyBuffer2", + "vkCmdCopyBufferToImage", + "vkCmdCopyBufferToImage2", + "vkCmdCopyImage", + "vkCmdCopyImage2", + "vkCmdCopyImageToBuffer", + "vkCmdCopyImageToBuffer2", + "vkCmdCopyQueryPoolResults", + "vkCmdCopyTensorARM", + "vkCmdDispatch", + "vkCmdDispatchBase", + "vkCmdDispatchIndirect", + "vkCmdDraw", + "vkCmdDrawIndexed", + "vkCmdDrawIndexedIndirect", + "vkCmdDrawIndexedIndirectCount", + "vkCmdDrawIndirect", + "vkCmdDrawIndirectByteCountEXT", + "vkCmdDrawIndirectCount", + "vkCmdDrawMultiEXT", + "vkCmdDrawMultiIndexedEXT", + "vkCmdEndConditionalRenderingEXT", + "vkCmdEndQuery", + "vkCmdEndQueryIndexedEXT", + "vkCmdEndRenderPass", + "vkCmdEndRenderPass2", + "vkCmdEndRendering", + "vkCmdEndRendering2KHR", + "vkCmdEndTransformFeedbackEXT", + "vkCmdExecuteCommands", + "vkCmdFillBuffer", + "vkCmdNextSubpass", + "vkCmdNextSubpass2", + "vkCmdPipelineBarrier", + "vkCmdPipelineBarrier2", + "vkCmdPushConstants", + "vkCmdPushConstants2", + "vkCmdPushDescriptorSet", + "vkCmdPushDescriptorSet2", + "vkCmdResetEvent", + "vkCmdResetEvent2", + "vkCmdResetQueryPool", + "vkCmdResolveImage", + "vkCmdResolveImage2", + "vkCmdSetAlphaToCoverageEnableEXT", + "vkCmdSetAlphaToOneEnableEXT", + "vkCmdSetAttachmentFeedbackLoopEnableEXT", + "vkCmdSetBlendConstants", + "vkCmdSetColorBlendAdvancedEXT", + "vkCmdSetColorBlendEnableEXT", + "vkCmdSetColorBlendEquationEXT", + "vkCmdSetColorWriteEnableEXT", + "vkCmdSetColorWriteMaskEXT", + "vkCmdSetConservativeRasterizationModeEXT", + "vkCmdSetCullMode", + "vkCmdSetDepthBias", + "vkCmdSetDepthBias2EXT", + "vkCmdSetDepthBiasEnable", + "vkCmdSetDepthBounds", + "vkCmdSetDepthBoundsTestEnable", + "vkCmdSetDepthClampEnableEXT", + "vkCmdSetDepthClampRangeEXT", + "vkCmdSetDepthClipEnableEXT", + "vkCmdSetDepthClipNegativeOneToOneEXT", + "vkCmdSetDepthCompareOp", + "vkCmdSetDepthTestEnable", + "vkCmdSetDepthWriteEnable", + "vkCmdSetDeviceMask", + "vkCmdSetDiscardRectangleEXT", + "vkCmdSetDiscardRectangleEnableEXT", + "vkCmdSetDiscardRectangleModeEXT", + "vkCmdSetEvent", + "vkCmdSetEvent2", + "vkCmdSetExtraPrimitiveOverestimationSizeEXT", + "vkCmdSetFragmentShadingRateKHR", + "vkCmdSetFrontFace", + "vkCmdSetLineRasterizationModeEXT", + "vkCmdSetLineStipple", + "vkCmdSetLineStippleEnableEXT", + "vkCmdSetLineWidth", + "vkCmdSetLogicOpEXT", + "vkCmdSetLogicOpEnableEXT", + "vkCmdSetPatchControlPointsEXT", + "vkCmdSetPolygonModeEXT", + "vkCmdSetPrimitiveRestartEnable", + "vkCmdSetPrimitiveTopology", + "vkCmdSetProvokingVertexModeEXT", + "vkCmdSetRasterizationSamplesEXT", + "vkCmdSetRasterizationStreamEXT", + "vkCmdSetRasterizerDiscardEnable", + "vkCmdSetRenderingAttachmentLocations", + "vkCmdSetRenderingInputAttachmentIndices", + "vkCmdSetSampleLocationsEXT", + "vkCmdSetSampleLocationsEnableEXT", + "vkCmdSetSampleMaskEXT", + "vkCmdSetScissor", + "vkCmdSetScissorWithCount", + "vkCmdSetStencilCompareMask", + "vkCmdSetStencilOp", + "vkCmdSetStencilReference", + "vkCmdSetStencilTestEnable", + "vkCmdSetStencilWriteMask", + "vkCmdSetTessellationDomainOriginEXT", + "vkCmdSetVertexInputEXT", + "vkCmdSetViewport", + "vkCmdSetViewportWithCount", + "vkCmdUpdateBuffer", + "vkCmdWaitEvents", + "vkCmdWaitEvents2", + "vkCmdWriteTimestamp", + "vkCmdWriteTimestamp2", + "vkCreateBuffer", + "vkCreateBufferView", + "vkCreateCommandPool", + "vkCreateComputePipelines", + "vkCreateDescriptorPool", + "vkCreateDescriptorSetLayout", + "vkCreateDescriptorUpdateTemplate", + "vkCreateDevice", + "vkCreateEvent", + "vkCreateFence", + "vkCreateFramebuffer", + "vkCreateGraphicsPipelines", + "vkCreateImage", + "vkCreateImageView", + "vkCreateInstance", + "vkCreatePipelineCache", + "vkCreatePipelineLayout", + "vkCreateQueryPool", + "vkCreateRenderPass", + "vkCreateRenderPass2", + "vkCreateSampler", + "vkCreateSamplerYcbcrConversion", + "vkCreateSemaphore", + "vkCreateShaderModule", + "vkCreateTensorARM", + "vkCreateTensorViewARM", + "vkDestroyBuffer", + "vkDestroyBufferView", + "vkDestroyCommandPool", + "vkDestroyDescriptorPool", + "vkDestroyDescriptorSetLayout", + "vkDestroyDescriptorUpdateTemplate", + "vkDestroyDevice", + "vkDestroyEvent", + "vkDestroyFence", + "vkDestroyFramebuffer", + "vkDestroyImage", + "vkDestroyImageView", + "vkDestroyInstance", + "vkDestroyPipeline", + "vkDestroyPipelineCache", + "vkDestroyPipelineLayout", + "vkDestroyQueryPool", + "vkDestroyRenderPass", + "vkDestroySampler", + "vkDestroySamplerYcbcrConversion", + "vkDestroySemaphore", + "vkDestroyShaderModule", + "vkDestroyTensorARM", + "vkDestroyTensorViewARM", + "vkDeviceWaitIdle", + "vkEndCommandBuffer", + "vkEnumerateDeviceExtensionProperties", + "vkEnumerateInstanceExtensionProperties", + "vkEnumerateInstanceLayerProperties", + "vkEnumerateInstanceVersion", + "vkEnumeratePhysicalDeviceGroups", + "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", + "vkEnumeratePhysicalDevices", + "vkFlushMappedMemoryRanges", + "vkFreeCommandBuffers", + "vkFreeDescriptorSets", + "vkFreeMemory", + "vkGetBufferDeviceAddress", + "vkGetBufferMemoryRequirements", + "vkGetBufferMemoryRequirements2", + "vkGetBufferOpaqueCaptureAddress", + "vkGetCalibratedTimestampsKHR", + "vkGetDescriptorSetLayoutSupport", + "vkGetDeviceBufferMemoryRequirements", + "vkGetDeviceGroupPeerMemoryFeatures", + "vkGetDeviceImageMemoryRequirements", + "vkGetDeviceImageSparseMemoryRequirements", + "vkGetDeviceImageSubresourceLayout", + "vkGetDeviceMemoryCommitment", + "vkGetDeviceMemoryOpaqueCaptureAddress", + "vkGetDeviceQueue", + "vkGetDeviceQueue2", + "vkGetDeviceTensorMemoryRequirementsARM", + "vkGetEventStatus", + "vkGetFenceFdKHR", + "vkGetFenceStatus", + "vkGetImageDrmFormatModifierPropertiesEXT", + "vkGetImageMemoryRequirements", + "vkGetImageMemoryRequirements2", + "vkGetImageSparseMemoryRequirements", + "vkGetImageSparseMemoryRequirements2", + "vkGetImageSubresourceLayout", + "vkGetImageSubresourceLayout2", + "vkGetMemoryFdKHR", + "vkGetMemoryFdPropertiesKHR", + "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR", + "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR", + "vkGetPhysicalDeviceExternalBufferProperties", + "vkGetPhysicalDeviceExternalFenceProperties", + "vkGetPhysicalDeviceExternalSemaphoreProperties", + "vkGetPhysicalDeviceExternalTensorPropertiesARM", + "vkGetPhysicalDeviceFeatures", + "vkGetPhysicalDeviceFeatures2", + "vkGetPhysicalDeviceFormatProperties", + "vkGetPhysicalDeviceFormatProperties2", + "vkGetPhysicalDeviceFragmentShadingRatesKHR", + "vkGetPhysicalDeviceImageFormatProperties", + "vkGetPhysicalDeviceImageFormatProperties2", + "vkGetPhysicalDeviceMemoryProperties", + "vkGetPhysicalDeviceMemoryProperties2", + "vkGetPhysicalDeviceMultisamplePropertiesEXT", + "vkGetPhysicalDeviceProperties", + "vkGetPhysicalDeviceProperties2", + "vkGetPhysicalDeviceQueueFamilyProperties", + "vkGetPhysicalDeviceQueueFamilyProperties2", + "vkGetPhysicalDeviceSparseImageFormatProperties", + "vkGetPhysicalDeviceSparseImageFormatProperties2", + "vkGetPhysicalDeviceToolProperties", + "vkGetPipelineCacheData", + "vkGetQueryPoolResults", + "vkGetRenderAreaGranularity", + "vkGetRenderingAreaGranularity", + "vkGetSemaphoreCounterValue", + "vkGetSemaphoreFdKHR", + "vkGetShaderModuleCreateInfoIdentifierEXT", + "vkGetShaderModuleIdentifierEXT", + "vkGetTensorMemoryRequirementsARM", + "vkImportFenceFdKHR", + "vkImportSemaphoreFdKHR", + "vkInvalidateMappedMemoryRanges", + "vkMergePipelineCaches", + "vkQueueBindSparse", + "vkQueueSubmit", + "vkQueueSubmit2", + "vkQueueWaitIdle", + "vkResetCommandBuffer", + "vkResetCommandPool", + "vkResetDescriptorPool", + "vkResetEvent", + "vkResetFences", + "vkResetQueryPool", + "vkSetDeviceMemoryPriorityEXT", + "vkSetEvent", + "vkSignalSemaphore", + "vkTrimCommandPool", + "vkUpdateDescriptorSets", + "vkWaitForFences", + "vkWaitSemaphores", +}; +const unsigned char vkb_cmd_result[VKB_CMD_COUNT] = { + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, +}; +const vkb_ext_desc vkb_exts[VKB_EXT_COUNT] = { + {"VK_KHR_surface", 0, 1}, + {"VK_KHR_swapchain", 1, 1}, + {"VK_KHR_xlib_surface", 0, 1}, + {"VK_KHR_xcb_surface", 0, 1}, + {"VK_KHR_wayland_surface", 0, 1}, + {"VK_EXT_depth_range_unrestricted", 1, 0}, + {"VK_KHR_sampler_mirror_clamp_to_edge", 1, 0}, + {"VK_IMG_filter_cubic", 1, 0}, + {"VK_EXT_transform_feedback", 1, 0}, + {"VK_KHR_dynamic_rendering", 1, 0}, + {"VK_KHR_multiview", 1, 0}, + {"VK_IMG_format_pvrtc", 1, 0}, + {"VK_KHR_get_physical_device_properties2", 0, 0}, + {"VK_KHR_device_group", 1, 0}, + {"VK_KHR_shader_draw_parameters", 1, 0}, + {"VK_EXT_shader_subgroup_ballot", 1, 0}, + {"VK_EXT_shader_subgroup_vote", 1, 0}, + {"VK_EXT_texture_compression_astc_hdr", 1, 0}, + {"VK_EXT_astc_decode_mode", 1, 0}, + {"VK_EXT_pipeline_robustness", 1, 0}, + {"VK_KHR_maintenance1", 1, 0}, + {"VK_KHR_device_group_creation", 0, 0}, + {"VK_KHR_external_memory_capabilities", 0, 0}, + {"VK_KHR_external_memory", 1, 0}, + {"VK_KHR_external_memory_fd", 1, 0}, + {"VK_KHR_external_semaphore_capabilities", 0, 0}, + {"VK_KHR_external_semaphore", 1, 0}, + {"VK_KHR_external_semaphore_fd", 1, 0}, + {"VK_KHR_push_descriptor", 1, 0}, + {"VK_EXT_conditional_rendering", 1, 0}, + {"VK_KHR_shader_float16_int8", 1, 0}, + {"VK_KHR_16bit_storage", 1, 0}, + {"VK_KHR_incremental_present", 1, 1}, + {"VK_KHR_descriptor_update_template", 1, 0}, + {"VK_EXT_discard_rectangles", 1, 0}, + {"VK_EXT_conservative_rasterization", 1, 0}, + {"VK_EXT_depth_clip_enable", 1, 0}, + {"VK_EXT_swapchain_colorspace", 0, 1}, + {"VK_KHR_imageless_framebuffer", 1, 0}, + {"VK_KHR_create_renderpass2", 1, 0}, + {"VK_IMG_relaxed_line_rasterization", 1, 0}, + {"VK_KHR_external_fence_capabilities", 0, 0}, + {"VK_KHR_external_fence", 1, 0}, + {"VK_KHR_external_fence_fd", 1, 0}, + {"VK_KHR_maintenance2", 1, 0}, + {"VK_KHR_get_surface_capabilities2", 0, 1}, + {"VK_KHR_variable_pointers", 1, 0}, + {"VK_EXT_external_memory_dma_buf", 1, 0}, + {"VK_EXT_queue_family_foreign", 1, 0}, + {"VK_KHR_dedicated_allocation", 1, 0}, + {"VK_EXT_debug_utils", 0, 1}, + {"VK_EXT_sampler_filter_minmax", 1, 0}, + {"VK_KHR_storage_buffer_storage_class", 1, 0}, + {"VK_EXT_inline_uniform_block", 1, 0}, + {"VK_EXT_shader_stencil_export", 1, 0}, + {"VK_KHR_shader_bfloat16", 1, 0}, + {"VK_EXT_sample_locations", 1, 0}, + {"VK_KHR_relaxed_block_layout", 1, 0}, + {"VK_KHR_get_memory_requirements2", 1, 0}, + {"VK_KHR_image_format_list", 1, 0}, + {"VK_EXT_blend_operation_advanced", 1, 0}, + {"VK_EXT_post_depth_coverage", 1, 0}, + {"VK_KHR_sampler_ycbcr_conversion", 1, 0}, + {"VK_KHR_bind_memory2", 1, 0}, + {"VK_EXT_image_drm_format_modifier", 1, 0}, + {"VK_EXT_descriptor_indexing", 1, 0}, + {"VK_EXT_shader_viewport_index_layer", 1, 0}, + {"VK_KHR_maintenance3", 1, 0}, + {"VK_KHR_draw_indirect_count", 1, 0}, + {"VK_EXT_filter_cubic", 1, 0}, + {"VK_EXT_global_priority", 1, 0}, + {"VK_KHR_shader_subgroup_extended_types", 1, 0}, + {"VK_KHR_8bit_storage", 1, 0}, + {"VK_KHR_shader_atomic_int64", 1, 0}, + {"VK_KHR_shader_clock", 1, 0}, + {"VK_EXT_calibrated_timestamps", 1, 0}, + {"VK_KHR_global_priority", 1, 0}, + {"VK_EXT_vertex_attribute_divisor", 1, 0}, + {"VK_EXT_pipeline_creation_feedback", 1, 0}, + {"VK_KHR_driver_properties", 1, 0}, + {"VK_KHR_shader_float_controls", 1, 0}, + {"VK_KHR_depth_stencil_resolve", 1, 0}, + {"VK_KHR_swapchain_mutable_format", 1, 1}, + {"VK_KHR_timeline_semaphore", 1, 0}, + {"VK_KHR_vulkan_memory_model", 1, 0}, + {"VK_EXT_pci_bus_info", 1, 0}, + {"VK_KHR_shader_terminate_invocation", 1, 0}, + {"VK_EXT_fragment_density_map", 1, 0}, + {"VK_EXT_scalar_block_layout", 1, 0}, + {"VK_GOOGLE_hlsl_functionality1", 1, 0}, + {"VK_GOOGLE_decorate_string", 1, 0}, + {"VK_EXT_subgroup_size_control", 1, 0}, + {"VK_KHR_fragment_shading_rate", 1, 0}, + {"VK_KHR_dynamic_rendering_local_read", 1, 0}, + {"VK_EXT_shader_image_atomic_int64", 1, 0}, + {"VK_KHR_shader_quad_control", 1, 0}, + {"VK_KHR_spirv_1_4", 1, 0}, + {"VK_EXT_memory_budget", 1, 0}, + {"VK_EXT_memory_priority", 1, 0}, + {"VK_KHR_separate_depth_stencil_layouts", 1, 0}, + {"VK_EXT_buffer_device_address", 1, 0}, + {"VK_EXT_tooling_info", 1, 0}, + {"VK_EXT_separate_stencil_usage", 1, 0}, + {"VK_EXT_fragment_shader_interlock", 1, 0}, + {"VK_EXT_ycbcr_image_arrays", 1, 0}, + {"VK_KHR_uniform_buffer_standard_layout", 1, 0}, + {"VK_EXT_provoking_vertex", 1, 0}, + {"VK_EXT_headless_surface", 0, 1}, + {"VK_KHR_buffer_device_address", 1, 0}, + {"VK_EXT_line_rasterization", 1, 0}, + {"VK_EXT_shader_atomic_float", 1, 0}, + {"VK_EXT_host_query_reset", 1, 0}, + {"VK_EXT_index_type_uint8", 1, 0}, + {"VK_EXT_extended_dynamic_state", 1, 0}, + {"VK_KHR_map_memory2", 1, 0}, + {"VK_EXT_map_memory_placed", 1, 0}, + {"VK_EXT_shader_atomic_float2", 1, 0}, + {"VK_EXT_shader_demote_to_helper_invocation", 1, 0}, + {"VK_KHR_shader_integer_dot_product", 1, 0}, + {"VK_EXT_texel_buffer_alignment", 1, 0}, + {"VK_EXT_depth_bias_control", 1, 0}, + {"VK_EXT_robustness2", 1, 0}, + {"VK_EXT_custom_border_color", 1, 0}, + {"VK_EXT_texture_compression_astc_3d", 1, 0}, + {"VK_GOOGLE_user_type", 1, 0}, + {"VK_KHR_pipeline_library", 1, 0}, + {"VK_KHR_shader_non_semantic_info", 1, 0}, + {"VK_EXT_private_data", 1, 0}, + {"VK_EXT_pipeline_creation_cache_control", 1, 0}, + {"VK_KHR_synchronization2", 1, 0}, + {"VK_EXT_graphics_pipeline_library", 1, 0}, + {"VK_KHR_fragment_shader_barycentric", 1, 0}, + {"VK_KHR_shader_subgroup_uniform_control_flow", 1, 0}, + {"VK_KHR_zero_initialize_workgroup_memory", 1, 0}, + {"VK_EXT_ycbcr_2plane_444_formats", 1, 0}, + {"VK_EXT_fragment_density_map2", 1, 0}, + {"VK_EXT_image_robustness", 1, 0}, + {"VK_KHR_workgroup_memory_explicit_layout", 1, 0}, + {"VK_KHR_copy_commands2", 1, 0}, + {"VK_EXT_image_compression_control", 1, 0}, + {"VK_EXT_attachment_feedback_loop_layout", 1, 0}, + {"VK_EXT_4444_formats", 1, 0}, + {"VK_ARM_rasterization_order_attachment_access", 1, 0}, + {"VK_EXT_rgba10x6_formats", 1, 0}, + {"VK_VALVE_mutable_descriptor_type", 1, 0}, + {"VK_EXT_vertex_input_dynamic_state", 1, 0}, + {"VK_EXT_physical_device_drm", 1, 0}, + {"VK_EXT_depth_clip_control", 1, 0}, + {"VK_EXT_primitive_topology_list_restart", 1, 0}, + {"VK_KHR_format_feature_flags2", 1, 0}, + {"VK_EXT_present_mode_fifo_latest_ready", 1, 0}, + {"VK_EXT_multisampled_render_to_single_sampled", 1, 0}, + {"VK_EXT_extended_dynamic_state2", 1, 0}, + {"VK_EXT_color_write_enable", 1, 0}, + {"VK_EXT_primitives_generated_query", 1, 0}, + {"VK_KHR_shader_untyped_pointers", 1, 0}, + {"VK_EXT_global_priority_query", 1, 0}, + {"VK_EXT_image_view_min_lod", 1, 0}, + {"VK_EXT_multi_draw", 1, 0}, + {"VK_EXT_image_2d_view_of_3d", 1, 0}, + {"VK_EXT_shader_tile_image", 1, 0}, + {"VK_EXT_load_store_op_none", 1, 0}, + {"VK_EXT_border_color_swizzle", 1, 0}, + {"VK_EXT_pageable_device_local_memory", 1, 0}, + {"VK_KHR_maintenance4", 1, 0}, + {"VK_ARM_shader_core_properties", 1, 0}, + {"VK_KHR_shader_subgroup_rotate", 1, 0}, + {"VK_ARM_scheduling_controls", 1, 0}, + {"VK_EXT_image_sliced_view_of_3d", 1, 0}, + {"VK_EXT_depth_clamp_zero_one", 1, 0}, + {"VK_EXT_non_seamless_cube_map", 1, 0}, + {"VK_ARM_render_pass_striped", 1, 0}, + {"VK_GOOGLE_surfaceless_query", 0, 0}, + {"VK_KHR_shader_maximal_reconvergence", 1, 0}, + {"VK_EXT_nested_command_buffer", 1, 0}, + {"VK_EXT_external_memory_acquire_unmodified", 1, 0}, + {"VK_EXT_extended_dynamic_state3", 1, 0}, + {"VK_EXT_subpass_merge_feedback", 1, 0}, + {"VK_ARM_tensors", 1, 0}, + {"VK_EXT_shader_module_identifier", 1, 0}, + {"VK_EXT_rasterization_order_attachment_access", 1, 0}, + {"VK_EXT_legacy_dithering", 1, 0}, + {"VK_EXT_pipeline_protected_access", 1, 0}, + {"VK_KHR_maintenance5", 1, 0}, + {"VK_EXT_mutable_descriptor_type", 1, 0}, + {"VK_EXT_legacy_vertex_attributes", 1, 0}, + {"VK_EXT_layer_settings", 0, 0}, + {"VK_ARM_shader_core_builtins", 1, 0}, + {"VK_EXT_dynamic_rendering_unused_attachments", 1, 0}, + {"VK_KHR_internally_synchronized_queues", 1, 0}, + {"VK_KHR_cooperative_matrix", 1, 0}, + {"VK_KHR_compute_shader_derivatives", 1, 0}, + {"VK_EXT_attachment_feedback_loop_dynamic_state", 1, 0}, + {"VK_KHR_vertex_attribute_divisor", 1, 0}, + {"VK_KHR_load_store_op_none", 1, 0}, + {"VK_KHR_unified_image_layouts", 1, 0}, + {"VK_KHR_shader_float_controls2", 1, 0}, + {"VK_KHR_index_type_uint8", 1, 0}, + {"VK_KHR_line_rasterization", 1, 0}, + {"VK_KHR_calibrated_timestamps", 1, 0}, + {"VK_KHR_shader_expect_assume", 1, 0}, + {"VK_KHR_maintenance6", 1, 0}, + {"VK_KHR_shader_relaxed_extended_instruction", 1, 0}, + {"VK_KHR_maintenance7", 1, 0}, + {"VK_EXT_shader_replicated_composites", 1, 0}, + {"VK_EXT_shader_float8", 1, 0}, + {"VK_KHR_maintenance8", 1, 0}, + {"VK_MESA_image_alignment_control", 1, 0}, + {"VK_KHR_shader_fma", 1, 0}, + {"VK_EXT_depth_clamp_control", 1, 0}, + {"VK_KHR_maintenance9", 1, 0}, + {"VK_KHR_depth_clamp_zero_one", 1, 0}, + {"VK_ARM_performance_counters_by_region", 1, 0}, + {"VK_EXT_vertex_attribute_robustness", 1, 0}, + {"VK_ARM_format_pack", 1, 0}, + {"VK_VALVE_fragment_density_map_layered", 1, 0}, + {"VK_KHR_robustness2", 1, 0}, + {"VK_EXT_zero_initialize_device_memory", 1, 0}, + {"VK_KHR_present_mode_fifo_latest_ready", 1, 0}, + {"VK_EXT_shader_64bit_indexing", 1, 0}, + {"VK_EXT_custom_resolve", 1, 0}, + {"VK_KHR_maintenance10", 1, 0}, + {"VK_EXT_shader_long_vector", 1, 0}, + {"VK_EXT_shader_uniform_buffer_unsized_array", 1, 0}, + {"VK_EXT_shader_subgroup_partitioned", 1, 0}, +}; diff --git a/tools/vkbridge/common/gen/vkb_server_gen.h b/tools/vkbridge/common/gen/vkb_server_gen.h new file mode 100644 index 000000000..c7a44fac3 --- /dev/null +++ b/tools/vkbridge/common/gen/vkb_server_gen.h @@ -0,0 +1,300 @@ +/* Generated by tools/vkbridge/codegen/gen_vkbridge.py from vk.xml 1.4.341 - do not edit. */ + +#ifndef VKB_SERVER_GEN_H +#define VKB_SERVER_GEN_H +#include "vkb_gen.h" +typedef struct vkb_srv_call vkb_srv_call; +typedef void (*vkb_srv_handler)(vkb_srv_call *c); +extern const vkb_srv_handler vkb_srv_handlers[VKB_CMD_COUNT]; +void vkb_sv_vkAllocateCommandBuffers(vkb_srv_call *c); +void vkb_sv_vkAllocateDescriptorSets(vkb_srv_call *c); +void vkb_sv_vkAllocateMemory(vkb_srv_call *c); +void vkb_sv_vkBeginCommandBuffer(vkb_srv_call *c); +void vkb_sv_vkBindBufferMemory(vkb_srv_call *c); +void vkb_sv_vkBindBufferMemory2(vkb_srv_call *c); +void vkb_sv_vkBindImageMemory(vkb_srv_call *c); +void vkb_sv_vkBindImageMemory2(vkb_srv_call *c); +void vkb_sv_vkBindTensorMemoryARM(vkb_srv_call *c); +void vkb_sv_vkCmdBeginConditionalRenderingEXT(vkb_srv_call *c); +void vkb_sv_vkCmdBeginCustomResolveEXT(vkb_srv_call *c); +void vkb_sv_vkCmdBeginQuery(vkb_srv_call *c); +void vkb_sv_vkCmdBeginQueryIndexedEXT(vkb_srv_call *c); +void vkb_sv_vkCmdBeginRenderPass(vkb_srv_call *c); +void vkb_sv_vkCmdBeginRenderPass2(vkb_srv_call *c); +void vkb_sv_vkCmdBeginRendering(vkb_srv_call *c); +void vkb_sv_vkCmdBeginTransformFeedbackEXT(vkb_srv_call *c); +void vkb_sv_vkCmdBindDescriptorSets(vkb_srv_call *c); +void vkb_sv_vkCmdBindDescriptorSets2(vkb_srv_call *c); +void vkb_sv_vkCmdBindIndexBuffer(vkb_srv_call *c); +void vkb_sv_vkCmdBindIndexBuffer2(vkb_srv_call *c); +void vkb_sv_vkCmdBindPipeline(vkb_srv_call *c); +void vkb_sv_vkCmdBindTransformFeedbackBuffersEXT(vkb_srv_call *c); +void vkb_sv_vkCmdBindVertexBuffers(vkb_srv_call *c); +void vkb_sv_vkCmdBindVertexBuffers2(vkb_srv_call *c); +void vkb_sv_vkCmdBlitImage(vkb_srv_call *c); +void vkb_sv_vkCmdBlitImage2(vkb_srv_call *c); +void vkb_sv_vkCmdClearAttachments(vkb_srv_call *c); +void vkb_sv_vkCmdClearColorImage(vkb_srv_call *c); +void vkb_sv_vkCmdClearDepthStencilImage(vkb_srv_call *c); +void vkb_sv_vkCmdCopyBuffer(vkb_srv_call *c); +void vkb_sv_vkCmdCopyBuffer2(vkb_srv_call *c); +void vkb_sv_vkCmdCopyBufferToImage(vkb_srv_call *c); +void vkb_sv_vkCmdCopyBufferToImage2(vkb_srv_call *c); +void vkb_sv_vkCmdCopyImage(vkb_srv_call *c); +void vkb_sv_vkCmdCopyImage2(vkb_srv_call *c); +void vkb_sv_vkCmdCopyImageToBuffer(vkb_srv_call *c); +void vkb_sv_vkCmdCopyImageToBuffer2(vkb_srv_call *c); +void vkb_sv_vkCmdCopyQueryPoolResults(vkb_srv_call *c); +void vkb_sv_vkCmdCopyTensorARM(vkb_srv_call *c); +void vkb_sv_vkCmdDispatch(vkb_srv_call *c); +void vkb_sv_vkCmdDispatchBase(vkb_srv_call *c); +void vkb_sv_vkCmdDispatchIndirect(vkb_srv_call *c); +void vkb_sv_vkCmdDraw(vkb_srv_call *c); +void vkb_sv_vkCmdDrawIndexed(vkb_srv_call *c); +void vkb_sv_vkCmdDrawIndexedIndirect(vkb_srv_call *c); +void vkb_sv_vkCmdDrawIndexedIndirectCount(vkb_srv_call *c); +void vkb_sv_vkCmdDrawIndirect(vkb_srv_call *c); +void vkb_sv_vkCmdDrawIndirectByteCountEXT(vkb_srv_call *c); +void vkb_sv_vkCmdDrawIndirectCount(vkb_srv_call *c); +void vkb_sv_vkCmdDrawMultiEXT(vkb_srv_call *c); +void vkb_sv_vkCmdDrawMultiIndexedEXT(vkb_srv_call *c); +void vkb_sv_vkCmdEndConditionalRenderingEXT(vkb_srv_call *c); +void vkb_sv_vkCmdEndQuery(vkb_srv_call *c); +void vkb_sv_vkCmdEndQueryIndexedEXT(vkb_srv_call *c); +void vkb_sv_vkCmdEndRenderPass(vkb_srv_call *c); +void vkb_sv_vkCmdEndRenderPass2(vkb_srv_call *c); +void vkb_sv_vkCmdEndRendering(vkb_srv_call *c); +void vkb_sv_vkCmdEndRendering2KHR(vkb_srv_call *c); +void vkb_sv_vkCmdEndTransformFeedbackEXT(vkb_srv_call *c); +void vkb_sv_vkCmdExecuteCommands(vkb_srv_call *c); +void vkb_sv_vkCmdFillBuffer(vkb_srv_call *c); +void vkb_sv_vkCmdNextSubpass(vkb_srv_call *c); +void vkb_sv_vkCmdNextSubpass2(vkb_srv_call *c); +void vkb_sv_vkCmdPipelineBarrier(vkb_srv_call *c); +void vkb_sv_vkCmdPipelineBarrier2(vkb_srv_call *c); +void vkb_sv_vkCmdPushConstants(vkb_srv_call *c); +void vkb_sv_vkCmdPushConstants2(vkb_srv_call *c); +void vkb_sv_vkCmdPushDescriptorSet(vkb_srv_call *c); +void vkb_sv_vkCmdPushDescriptorSet2(vkb_srv_call *c); +void vkb_sv_vkCmdResetEvent(vkb_srv_call *c); +void vkb_sv_vkCmdResetEvent2(vkb_srv_call *c); +void vkb_sv_vkCmdResetQueryPool(vkb_srv_call *c); +void vkb_sv_vkCmdResolveImage(vkb_srv_call *c); +void vkb_sv_vkCmdResolveImage2(vkb_srv_call *c); +void vkb_sv_vkCmdSetAlphaToCoverageEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetAlphaToOneEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetAttachmentFeedbackLoopEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetBlendConstants(vkb_srv_call *c); +void vkb_sv_vkCmdSetColorBlendAdvancedEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetColorBlendEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetColorBlendEquationEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetColorWriteEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetColorWriteMaskEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetConservativeRasterizationModeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetCullMode(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthBias(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthBias2EXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthBiasEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthBounds(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthBoundsTestEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthClampEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthClampRangeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthClipEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthClipNegativeOneToOneEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthCompareOp(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthTestEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetDepthWriteEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetDeviceMask(vkb_srv_call *c); +void vkb_sv_vkCmdSetDiscardRectangleEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDiscardRectangleEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetDiscardRectangleModeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetEvent(vkb_srv_call *c); +void vkb_sv_vkCmdSetEvent2(vkb_srv_call *c); +void vkb_sv_vkCmdSetExtraPrimitiveOverestimationSizeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetFragmentShadingRateKHR(vkb_srv_call *c); +void vkb_sv_vkCmdSetFrontFace(vkb_srv_call *c); +void vkb_sv_vkCmdSetLineRasterizationModeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetLineStipple(vkb_srv_call *c); +void vkb_sv_vkCmdSetLineStippleEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetLineWidth(vkb_srv_call *c); +void vkb_sv_vkCmdSetLogicOpEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetLogicOpEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetPatchControlPointsEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetPolygonModeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetPrimitiveRestartEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetPrimitiveTopology(vkb_srv_call *c); +void vkb_sv_vkCmdSetProvokingVertexModeEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetRasterizationSamplesEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetRasterizationStreamEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetRasterizerDiscardEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetRenderingAttachmentLocations(vkb_srv_call *c); +void vkb_sv_vkCmdSetRenderingInputAttachmentIndices(vkb_srv_call *c); +void vkb_sv_vkCmdSetSampleLocationsEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetSampleLocationsEnableEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetSampleMaskEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetScissor(vkb_srv_call *c); +void vkb_sv_vkCmdSetScissorWithCount(vkb_srv_call *c); +void vkb_sv_vkCmdSetStencilCompareMask(vkb_srv_call *c); +void vkb_sv_vkCmdSetStencilOp(vkb_srv_call *c); +void vkb_sv_vkCmdSetStencilReference(vkb_srv_call *c); +void vkb_sv_vkCmdSetStencilTestEnable(vkb_srv_call *c); +void vkb_sv_vkCmdSetStencilWriteMask(vkb_srv_call *c); +void vkb_sv_vkCmdSetTessellationDomainOriginEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetVertexInputEXT(vkb_srv_call *c); +void vkb_sv_vkCmdSetViewport(vkb_srv_call *c); +void vkb_sv_vkCmdSetViewportWithCount(vkb_srv_call *c); +void vkb_sv_vkCmdUpdateBuffer(vkb_srv_call *c); +void vkb_sv_vkCmdWaitEvents(vkb_srv_call *c); +void vkb_sv_vkCmdWaitEvents2(vkb_srv_call *c); +void vkb_sv_vkCmdWriteTimestamp(vkb_srv_call *c); +void vkb_sv_vkCmdWriteTimestamp2(vkb_srv_call *c); +void vkb_sv_vkCreateBuffer(vkb_srv_call *c); +void vkb_sv_vkCreateBufferView(vkb_srv_call *c); +void vkb_sv_vkCreateCommandPool(vkb_srv_call *c); +void vkb_sv_vkCreateComputePipelines(vkb_srv_call *c); +void vkb_sv_vkCreateDescriptorPool(vkb_srv_call *c); +void vkb_sv_vkCreateDescriptorSetLayout(vkb_srv_call *c); +void vkb_sv_vkCreateDescriptorUpdateTemplate(vkb_srv_call *c); +void vkb_sv_vkCreateDevice(vkb_srv_call *c); +void vkb_sv_vkCreateEvent(vkb_srv_call *c); +void vkb_sv_vkCreateFence(vkb_srv_call *c); +void vkb_sv_vkCreateFramebuffer(vkb_srv_call *c); +void vkb_sv_vkCreateGraphicsPipelines(vkb_srv_call *c); +void vkb_sv_vkCreateImage(vkb_srv_call *c); +void vkb_sv_vkCreateImageView(vkb_srv_call *c); +void vkb_sv_vkCreateInstance(vkb_srv_call *c); +void vkb_sv_vkCreatePipelineCache(vkb_srv_call *c); +void vkb_sv_vkCreatePipelineLayout(vkb_srv_call *c); +void vkb_sv_vkCreateQueryPool(vkb_srv_call *c); +void vkb_sv_vkCreateRenderPass(vkb_srv_call *c); +void vkb_sv_vkCreateRenderPass2(vkb_srv_call *c); +void vkb_sv_vkCreateSampler(vkb_srv_call *c); +void vkb_sv_vkCreateSamplerYcbcrConversion(vkb_srv_call *c); +void vkb_sv_vkCreateSemaphore(vkb_srv_call *c); +void vkb_sv_vkCreateShaderModule(vkb_srv_call *c); +void vkb_sv_vkCreateTensorARM(vkb_srv_call *c); +void vkb_sv_vkCreateTensorViewARM(vkb_srv_call *c); +void vkb_sv_vkDestroyBuffer(vkb_srv_call *c); +void vkb_sv_vkDestroyBufferView(vkb_srv_call *c); +void vkb_sv_vkDestroyCommandPool(vkb_srv_call *c); +void vkb_sv_vkDestroyDescriptorPool(vkb_srv_call *c); +void vkb_sv_vkDestroyDescriptorSetLayout(vkb_srv_call *c); +void vkb_sv_vkDestroyDescriptorUpdateTemplate(vkb_srv_call *c); +void vkb_sv_vkDestroyDevice(vkb_srv_call *c); +void vkb_sv_vkDestroyEvent(vkb_srv_call *c); +void vkb_sv_vkDestroyFence(vkb_srv_call *c); +void vkb_sv_vkDestroyFramebuffer(vkb_srv_call *c); +void vkb_sv_vkDestroyImage(vkb_srv_call *c); +void vkb_sv_vkDestroyImageView(vkb_srv_call *c); +void vkb_sv_vkDestroyInstance(vkb_srv_call *c); +void vkb_sv_vkDestroyPipeline(vkb_srv_call *c); +void vkb_sv_vkDestroyPipelineCache(vkb_srv_call *c); +void vkb_sv_vkDestroyPipelineLayout(vkb_srv_call *c); +void vkb_sv_vkDestroyQueryPool(vkb_srv_call *c); +void vkb_sv_vkDestroyRenderPass(vkb_srv_call *c); +void vkb_sv_vkDestroySampler(vkb_srv_call *c); +void vkb_sv_vkDestroySamplerYcbcrConversion(vkb_srv_call *c); +void vkb_sv_vkDestroySemaphore(vkb_srv_call *c); +void vkb_sv_vkDestroyShaderModule(vkb_srv_call *c); +void vkb_sv_vkDestroyTensorARM(vkb_srv_call *c); +void vkb_sv_vkDestroyTensorViewARM(vkb_srv_call *c); +void vkb_sv_vkDeviceWaitIdle(vkb_srv_call *c); +void vkb_sv_vkEndCommandBuffer(vkb_srv_call *c); +void vkb_sv_vkEnumerateDeviceExtensionProperties(vkb_srv_call *c); +void vkb_sv_vkEnumerateInstanceExtensionProperties(vkb_srv_call *c); +void vkb_sv_vkEnumerateInstanceLayerProperties(vkb_srv_call *c); +void vkb_sv_vkEnumerateInstanceVersion(vkb_srv_call *c); +void vkb_sv_vkEnumeratePhysicalDeviceGroups(vkb_srv_call *c); +void vkb_sv_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(vkb_srv_call *c); +void vkb_sv_vkEnumeratePhysicalDevices(vkb_srv_call *c); +void vkb_sv_vkFlushMappedMemoryRanges(vkb_srv_call *c); +void vkb_sv_vkFreeCommandBuffers(vkb_srv_call *c); +void vkb_sv_vkFreeDescriptorSets(vkb_srv_call *c); +void vkb_sv_vkFreeMemory(vkb_srv_call *c); +void vkb_sv_vkGetBufferDeviceAddress(vkb_srv_call *c); +void vkb_sv_vkGetBufferMemoryRequirements(vkb_srv_call *c); +void vkb_sv_vkGetBufferMemoryRequirements2(vkb_srv_call *c); +void vkb_sv_vkGetBufferOpaqueCaptureAddress(vkb_srv_call *c); +void vkb_sv_vkGetCalibratedTimestampsKHR(vkb_srv_call *c); +void vkb_sv_vkGetDescriptorSetLayoutSupport(vkb_srv_call *c); +void vkb_sv_vkGetDeviceBufferMemoryRequirements(vkb_srv_call *c); +void vkb_sv_vkGetDeviceGroupPeerMemoryFeatures(vkb_srv_call *c); +void vkb_sv_vkGetDeviceImageMemoryRequirements(vkb_srv_call *c); +void vkb_sv_vkGetDeviceImageSparseMemoryRequirements(vkb_srv_call *c); +void vkb_sv_vkGetDeviceImageSubresourceLayout(vkb_srv_call *c); +void vkb_sv_vkGetDeviceMemoryCommitment(vkb_srv_call *c); +void vkb_sv_vkGetDeviceMemoryOpaqueCaptureAddress(vkb_srv_call *c); +void vkb_sv_vkGetDeviceQueue(vkb_srv_call *c); +void vkb_sv_vkGetDeviceQueue2(vkb_srv_call *c); +void vkb_sv_vkGetDeviceTensorMemoryRequirementsARM(vkb_srv_call *c); +void vkb_sv_vkGetEventStatus(vkb_srv_call *c); +void vkb_sv_vkGetFenceFdKHR(vkb_srv_call *c); +void vkb_sv_vkGetFenceStatus(vkb_srv_call *c); +void vkb_sv_vkGetImageDrmFormatModifierPropertiesEXT(vkb_srv_call *c); +void vkb_sv_vkGetImageMemoryRequirements(vkb_srv_call *c); +void vkb_sv_vkGetImageMemoryRequirements2(vkb_srv_call *c); +void vkb_sv_vkGetImageSparseMemoryRequirements(vkb_srv_call *c); +void vkb_sv_vkGetImageSparseMemoryRequirements2(vkb_srv_call *c); +void vkb_sv_vkGetImageSubresourceLayout(vkb_srv_call *c); +void vkb_sv_vkGetImageSubresourceLayout2(vkb_srv_call *c); +void vkb_sv_vkGetMemoryFdKHR(vkb_srv_call *c); +void vkb_sv_vkGetMemoryFdPropertiesKHR(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceExternalBufferProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceExternalFenceProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceExternalSemaphoreProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceExternalTensorPropertiesARM(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceFeatures(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceFeatures2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceFormatProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceFormatProperties2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceFragmentShadingRatesKHR(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceImageFormatProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceImageFormatProperties2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceMemoryProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceMemoryProperties2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceMultisamplePropertiesEXT(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceProperties2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceQueueFamilyProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceQueueFamilyProperties2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceSparseImageFormatProperties(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceSparseImageFormatProperties2(vkb_srv_call *c); +void vkb_sv_vkGetPhysicalDeviceToolProperties(vkb_srv_call *c); +void vkb_sv_vkGetPipelineCacheData(vkb_srv_call *c); +void vkb_sv_vkGetQueryPoolResults(vkb_srv_call *c); +void vkb_sv_vkGetRenderAreaGranularity(vkb_srv_call *c); +void vkb_sv_vkGetRenderingAreaGranularity(vkb_srv_call *c); +void vkb_sv_vkGetSemaphoreCounterValue(vkb_srv_call *c); +void vkb_sv_vkGetSemaphoreFdKHR(vkb_srv_call *c); +void vkb_sv_vkGetShaderModuleCreateInfoIdentifierEXT(vkb_srv_call *c); +void vkb_sv_vkGetShaderModuleIdentifierEXT(vkb_srv_call *c); +void vkb_sv_vkGetTensorMemoryRequirementsARM(vkb_srv_call *c); +void vkb_sv_vkImportFenceFdKHR(vkb_srv_call *c); +void vkb_sv_vkImportSemaphoreFdKHR(vkb_srv_call *c); +void vkb_sv_vkInvalidateMappedMemoryRanges(vkb_srv_call *c); +void vkb_sv_vkMergePipelineCaches(vkb_srv_call *c); +void vkb_sv_vkQueueBindSparse(vkb_srv_call *c); +void vkb_sv_vkQueueSubmit(vkb_srv_call *c); +void vkb_sv_vkQueueSubmit2(vkb_srv_call *c); +void vkb_sv_vkQueueWaitIdle(vkb_srv_call *c); +void vkb_sv_vkResetCommandBuffer(vkb_srv_call *c); +void vkb_sv_vkResetCommandPool(vkb_srv_call *c); +void vkb_sv_vkResetDescriptorPool(vkb_srv_call *c); +void vkb_sv_vkResetEvent(vkb_srv_call *c); +void vkb_sv_vkResetFences(vkb_srv_call *c); +void vkb_sv_vkResetQueryPool(vkb_srv_call *c); +void vkb_sv_vkSetDeviceMemoryPriorityEXT(vkb_srv_call *c); +void vkb_sv_vkSetEvent(vkb_srv_call *c); +void vkb_sv_vkSignalSemaphore(vkb_srv_call *c); +void vkb_sv_vkTrimCommandPool(vkb_srv_call *c); +void vkb_sv_vkUpdateDescriptorSets(vkb_srv_call *c); +void vkb_sv_vkWaitForFences(vkb_srv_call *c); +void vkb_sv_vkWaitSemaphores(vkb_srv_call *c); +void vkb_sv_vkbHello(vkb_srv_call *c); +void vkb_sv_vkbQueryServer(vkb_srv_call *c); +void vkb_sv_vkbDescUpdateRaw(vkb_srv_call *c); +void vkb_sv_vkbPushDescRaw(vkb_srv_call *c); +void vkb_sv_vkbAllocDescSets(vkb_srv_call *c); +#endif diff --git a/tools/vkbridge/common/vkb_emu_formats.h b/tools/vkbridge/common/vkb_emu_formats.h new file mode 100644 index 000000000..1704adf98 --- /dev/null +++ b/tools/vkbridge/common/vkb_emu_formats.h @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * BCn emulation: what each block-compressed format is decoded into. Shared by the client (format + * queries) and the server (image creation, decode). The decoded image is created with the UNORM + * base format and MUTABLE_FORMAT so the decoder can write it through a storage view, and the + * app's sRGB views still work. + */ +#ifndef VKB_EMU_FORMATS_H +#define VKB_EMU_FORMATS_H + +#include + +static inline int vkb_is_bc(VkFormat f) +{ + return f >= VK_FORMAT_BC1_RGB_UNORM_BLOCK && f <= VK_FORMAT_BC7_SRGB_BLOCK; +} + +/* The format an app's view of a BC format becomes (keeps sRGB/SNORM meaning). */ +static inline VkFormat vkb_bc_view_format(VkFormat f) +{ + switch (f) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + case VK_FORMAT_BC2_UNORM_BLOCK: + case VK_FORMAT_BC3_UNORM_BLOCK: + case VK_FORMAT_BC7_UNORM_BLOCK: return VK_FORMAT_R8G8B8A8_UNORM; + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: + case VK_FORMAT_BC2_SRGB_BLOCK: + case VK_FORMAT_BC3_SRGB_BLOCK: + case VK_FORMAT_BC7_SRGB_BLOCK: return VK_FORMAT_R8G8B8A8_SRGB; + case VK_FORMAT_BC4_UNORM_BLOCK: return VK_FORMAT_R8_UNORM; + case VK_FORMAT_BC4_SNORM_BLOCK: return VK_FORMAT_R8_SNORM; + case VK_FORMAT_BC5_UNORM_BLOCK: return VK_FORMAT_R8G8_UNORM; + case VK_FORMAT_BC5_SNORM_BLOCK: return VK_FORMAT_R8G8_SNORM; + case VK_FORMAT_BC6H_UFLOAT_BLOCK: + case VK_FORMAT_BC6H_SFLOAT_BLOCK: return VK_FORMAT_R16G16B16A16_SFLOAT; + default: return f; + } +} + +/* The format the decoded image is created with and written through (storage-capable). */ +static inline VkFormat vkb_bc_storage_format(VkFormat f) +{ + switch (vkb_bc_view_format(f)) { + case VK_FORMAT_R8G8B8A8_SRGB: + case VK_FORMAT_R8G8B8A8_UNORM: return VK_FORMAT_R8G8B8A8_UNORM; + case VK_FORMAT_R8_SNORM: + case VK_FORMAT_R8_UNORM: return VK_FORMAT_R8_UNORM; + case VK_FORMAT_R8G8_SNORM: + case VK_FORMAT_R8G8_UNORM: return VK_FORMAT_R8G8_UNORM; + case VK_FORMAT_R16G16B16A16_SFLOAT: return VK_FORMAT_R16G16B16A16_SFLOAT; + default: return f; + } +} + +/* Bytes per 4x4 block. */ +static inline uint32_t vkb_bc_block_bytes(VkFormat f) +{ + switch (f) { + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + case VK_FORMAT_BC1_RGB_SRGB_BLOCK: + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: + case VK_FORMAT_BC4_UNORM_BLOCK: + case VK_FORMAT_BC4_SNORM_BLOCK: return 8; + default: return 16; + } +} + +#endif diff --git a/tools/vkbridge/common/vkb_log.h b/tools/vkbridge/common/vkb_log.h new file mode 100644 index 000000000..a84b272db --- /dev/null +++ b/tools/vkbridge/common/vkb_log.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#ifndef VKB_LOG_H +#define VKB_LOG_H + +#include + +#define VKB_LOG_ERROR 0 +#define VKB_LOG_WARN 1 +#define VKB_LOG_INFO 2 +#define VKB_LOG_DEBUG 3 + +/* Each side provides the sink (client: stderr + optional file; server: logcat + file). */ +void vkb_log(int level, const char *fmt, ...) __attribute__((format(printf, 2, 3))); +int vkb_log_level(void); + +#define VKB_ERR(...) vkb_log(VKB_LOG_ERROR, __VA_ARGS__) +#define VKB_WARN(...) vkb_log(VKB_LOG_WARN, __VA_ARGS__) +#define VKB_INFO(...) vkb_log(VKB_LOG_INFO, __VA_ARGS__) +#define VKB_DBG(...) do { if (vkb_log_level() >= VKB_LOG_DEBUG) vkb_log(VKB_LOG_DEBUG, __VA_ARGS__); } while (0) + +/* Logs a message only the first time this call site is reached. */ +#define VKB_ONCE(level, ...) do { static int once_; if (!__atomic_exchange_n(&once_, 1, __ATOMIC_RELAXED)) vkb_log(level, __VA_ARGS__); } while (0) + +#endif diff --git a/tools/vkbridge/common/vkb_proto.h b/tools/vkbridge/common/vkb_proto.h new file mode 100644 index 000000000..0291fe12c --- /dev/null +++ b/tools/vkbridge/common/vkb_proto.h @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Bridge-specific (non-Vulkan) parts of the protocol: hello, server query, memory sharing. + */ +#ifndef VKB_PROTO_H +#define VKB_PROTO_H + +#include + +#define VKB_DEFAULT_SOCKET_ENV "VKBRIDGE_SOCKET" + +/* How host-visible memory is shared between the client's address space and the GPU. */ +enum vkb_mem_strategy { + VKB_MEM_NONE = 0, /* no sharing works: host-visible memory is not offered */ + VKB_MEM_HOSTPTR = 1, /* client memfd, server imports it (VK_EXT_external_memory_host) */ + VKB_MEM_DMABUF = 2, /* server exports a dma-buf (VK_EXT_external_memory_dma_buf), client mmaps */ + VKB_MEM_AHB = 3, /* server allocates an AHardwareBuffer (BLOB), client mmaps its dma-buf */ + VKB_MEM_DMAHEAP = 4, /* server allocates from /dev/dma_heap and imports it as a dma-buf, client mmaps */ +}; + +static inline const char *vkb_mem_strategy_name(uint32_t s) +{ + switch (s) { + case VKB_MEM_HOSTPTR: return "hostptr"; + case VKB_MEM_DMABUF: return "dmabuf"; + case VKB_MEM_AHB: return "ahb"; + case VKB_MEM_DMAHEAP: return "dmaheap"; + default: return "none"; + } +} + +/* Emulated features (server rewrites resources/shaders; client reports them as supported). */ +#define VKB_EMU_BCN (1u << 0) /* BC1-BC7 textures decoded on upload */ +#define VKB_EMU_DIVISOR (1u << 1) /* VK_EXT_vertex_attribute_divisor */ +#define VKB_EMU_CLIP_DISTANCE (1u << 2) /* shaderClipDistance */ +#define VKB_EMU_CULL_DISTANCE (1u << 3) /* shaderCullDistance (accepted, not applied) */ +#define VKB_EMU_POINT_SIZE (1u << 4) /* strip PointSize from geometry/tessellation stages */ +#define VKB_EMU_DEPTH_CLIP (1u << 5) /* VK_EXT_depth_clip_enable via depthClamp */ +#define VKB_EMU_MAINT5 (1u << 6) /* VK_KHR_maintenance5 on a driver without it */ +#define VKB_EMU_ROBUSTNESS2 (1u << 7) /* VK_EXT_robustness2 reported, not enforced (GameNative's r44 profile) */ + +/* vkbQueryServer reply (per physical device). */ +typedef struct vkb_server_pd_info { + uint32_t strategy; /* enum vkb_mem_strategy */ + uint32_t buffer_handle_types; /* VkExternalMemoryHandleTypeFlags to put on buffers */ + uint32_t shareable_types; /* server memory type bits that can be shared */ + uint32_t coherent_types; /* of those, verified coherent without flushes */ + uint64_t import_alignment; /* hostptr: minImportedHostPointerAlignment */ + uint32_t emu; /* VKB_EMU_* the server will perform */ + uint32_t emu_available; /* VKB_EMU_* the server could perform */ + uint32_t real_api_version; + uint32_t missing; /* VKB_EMU_* features the GPU lacks (emulated or not) */ + uint32_t reserved[6]; +} vkb_server_pd_info; + +/* vkAllocateMemory wire extras (after VkMemoryAllocateInfo). */ +#define VKB_ALLOC_PLAIN 0u +#define VKB_ALLOC_SHARED 1u + +/* Extra structure the client hangs on create infos to tell the server which shared handle + * types were injected (so the server can remove them if the driver refuses). Not on the wire. */ + +#endif diff --git a/tools/vkbridge/common/vkb_server_iface.h b/tools/vkbridge/common/vkb_server_iface.h new file mode 100644 index 000000000..ccc922867 --- /dev/null +++ b/tools/vkbridge/common/vkb_server_iface.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * What the generated server handlers need from the server: the per-call context. + */ +#ifndef VKB_SERVER_IFACE_H +#define VKB_SERVER_IFACE_H + +#include "vkb_wire.h" + +struct vkb_srv_table; +struct vkb_srv_conn; + +struct vkb_srv_call { + vkb_dec d; /* request */ + vkb_enc r; /* reply payload */ + vkb_dispatch *dt; /* dispatch for the table named in the request */ + struct vkb_srv_table *table; /* NULL for global commands */ + struct vkb_srv_conn *conn; + uint32_t status; /* reply status (VKB_ST_*) */ + int close_after[VKB_MAX_FDS]; /* server fds to close once the reply is sent */ + int nclose; + int in_stream; /* replaying a command buffer stream */ +}; + +void vkb_srv_bad_message(struct vkb_srv_call *c); +void vkb_srv_missing(struct vkb_srv_call *c, const char *name); +void vkb_srv_close_after_send(struct vkb_srv_call *c, int fd); + +#endif diff --git a/tools/vkbridge/common/vkb_wire.c b/tools/vkbridge/common/vkb_wire.c new file mode 100644 index 000000000..e3d24cef5 --- /dev/null +++ b/tools/vkbridge/common/vkb_wire.c @@ -0,0 +1,710 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#include "vkb_wire.h" +#include "vkb_log.h" + +#include +#include +#include +#include +#include +#include + +/* ------------------------------------------------------------------ arena */ + +struct vkb_arena_block { + vkb_arena_block *next; + size_t used, cap; + /* data follows, 16-aligned */ +}; + +#define ARENA_HDR ((sizeof(vkb_arena_block) + 15) & ~(size_t)15) + +void *vkb_arena_alloc(vkb_arena *a, size_t n) +{ + n = (n + 15) & ~(size_t)15; + if (n == 0) n = 16; + vkb_arena_block *b = a->head; + if (!b || b->cap - b->used < n) { + size_t cap = n > 65536 ? n : 65536; + b = malloc(ARENA_HDR + cap); + if (!b) return NULL; + b->next = a->head; + b->used = 0; + b->cap = cap; + a->head = b; + } + void *p = (uint8_t *)b + ARENA_HDR + b->used; + b->used += n; + a->used_total += n; + memset(p, 0, n); + return p; +} + +void vkb_arena_reset(vkb_arena *a) +{ + /* Keep the most recent block if it is the default size; free the rest. */ + vkb_arena_block *b = a->head, *keep = NULL; + while (b) { + vkb_arena_block *n = b->next; + if (!keep && b->cap == 65536) { + keep = b; + keep->next = NULL; + keep->used = 0; + } else { + free(b); + } + b = n; + } + a->head = keep; + a->used_total = 0; +} + +void vkb_arena_free(vkb_arena *a) +{ + vkb_arena_block *b = a->head; + while (b) { + vkb_arena_block *n = b->next; + free(b); + b = n; + } + a->head = NULL; +} + +/* ------------------------------------------------------------------ encoder */ + +void vkb_enc_init(vkb_enc *e) +{ + memset(e, 0, sizeof(*e)); +} + +void vkb_enc_reset(vkb_enc *e) +{ + e->len = 0; + e->nfds = 0; + e->oom = 0; +} + +void vkb_enc_free(vkb_enc *e) +{ + free(e->buf); + memset(e, 0, sizeof(*e)); +} + +static int enc_grow(vkb_enc *e, size_t add) +{ + if (e->oom) return 0; + size_t need = e->len + add; + if (need <= e->cap) return 1; + size_t cap = e->cap ? e->cap : 4096; + while (cap < need) cap *= 2; + uint8_t *nb = realloc(e->buf, cap); + if (!nb) { + e->oom = 1; + return 0; + } + e->buf = nb; + e->cap = cap; + return 1; +} + +void vkb_enc_bytes(vkb_enc *e, const void *p, size_t n) +{ + if (!n || !enc_grow(e, n)) return; + if (p) memcpy(e->buf + e->len, p, n); + else memset(e->buf + e->len, 0, n); + e->len += n; +} + +void vkb_enc_u8(vkb_enc *e, uint8_t v) { vkb_enc_bytes(e, &v, 1); } +void vkb_enc_u32(vkb_enc *e, uint32_t v) { vkb_enc_bytes(e, &v, 4); } +void vkb_enc_u64(vkb_enc *e, uint64_t v) { vkb_enc_bytes(e, &v, 8); } + +static void enc_align(vkb_enc *e) +{ + size_t pad = (8 - (e->len & 7)) & 7; + if (pad) vkb_enc_bytes(e, NULL, pad); +} + +size_t vkb_enc_raw(vkb_enc *e, const void *p, size_t n) +{ + enc_align(e); + size_t off = e->len; + vkb_enc_bytes(e, p, n); + return off; +} + +void vkb_enc_patch_u64(vkb_enc *e, size_t off, uint64_t v) +{ + if (e->oom || off + 8 > e->len) return; + memcpy(e->buf + off, &v, 8); +} + +void vkb_enc_str(vkb_enc *e, const char *s) +{ + if (!s) { + vkb_enc_u8(e, 0); + return; + } + uint32_t n = (uint32_t)strlen(s); + vkb_enc_u8(e, 1); + vkb_enc_u32(e, n); + vkb_enc_bytes(e, s, n); +} + +void vkb_enc_strarray(vkb_enc *e, const char *const *a, uint32_t n) +{ + if (!a) { + vkb_enc_u8(e, 0); + return; + } + vkb_enc_u8(e, 1); + vkb_enc_u32(e, n); + for (uint32_t i = 0; i < n; i++) vkb_enc_str(e, a[i]); +} + +void vkb_enc_blob(vkb_enc *e, const void *p, size_t n) +{ + if (!p) { + vkb_enc_u8(e, 0); + return; + } + vkb_enc_u8(e, 1); + vkb_enc_u64(e, n); + vkb_enc_raw(e, p, n); +} + +void vkb_enc_fd(vkb_enc *e, int fd) +{ + if (fd < 0) { + vkb_enc_u32(e, VKB_FD_NONE); + return; + } + if (e->nfds >= VKB_MAX_FDS) { + VKB_ERR("too many file descriptors in one message"); + e->oom = 1; + return; + } + e->fds[e->nfds] = fd; + vkb_enc_u32(e, (uint32_t)e->nfds); + e->nfds++; +} + +void vkb_enc_append(vkb_enc *e, const vkb_enc *src) +{ + enc_align(e); + /* fd indices inside src are relative to src; a stream that carries fds is not appendable. */ + if (src->nfds) { + VKB_ERR("internal: appending a message that carries file descriptors"); + e->oom = 1; + return; + } + vkb_enc_bytes(e, src->buf, src->len); +} + +static const VkBaseInStructure *next_known(const void *p) +{ + const VkBaseInStructure *b = p; + while (b) { + if (vkb_struct_size(b->sType)) return b; + VKB_ONCE(VKB_LOG_WARN, "pNext: structure type %d is not bridged; dropped (logged once)", (int)b->sType); + b = b->pNext; + } + return NULL; +} + +void vkb_enc_chain(vkb_enc *e, const void *pNext) +{ + const VkBaseInStructure *b = next_known(pNext); + if (!b) { + vkb_enc_u32(e, VKB_CHAIN_END); + return; + } + vkb_enc_u32(e, (uint32_t)b->sType); + vkb_enc_chain_elem(e, b); +} + +/* Out-structs that carry caller-provided arrays (the two-call idiom inside a struct). An + * "empty" one is always answered with no elements (its elements carry chains of their own). */ +typedef struct out_arr { + VkStructureType t; + size_t count_off, ptr_off, elem; + int empty; +} out_arr; + +#define OA(T, ST, CNT, PTR, ELEM, EMPTY) {ST, offsetof(T, CNT), offsetof(T, PTR), sizeof(ELEM), EMPTY} +static const out_arr out_arrays[] = { + OA(VkDrmFormatModifierPropertiesListEXT, VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT, + drmFormatModifierCount, pDrmFormatModifierProperties, VkDrmFormatModifierPropertiesEXT, 0), + OA(VkDrmFormatModifierPropertiesList2EXT, VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT, + drmFormatModifierCount, pDrmFormatModifierProperties, VkDrmFormatModifierProperties2EXT, 0), + OA(VkPhysicalDeviceVulkan14Properties, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES, + copySrcLayoutCount, pCopySrcLayouts, VkImageLayout, 0), + OA(VkPhysicalDeviceVulkan14Properties, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES, + copyDstLayoutCount, pCopyDstLayouts, VkImageLayout, 0), + OA(VkPhysicalDeviceHostImageCopyProperties, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + copySrcLayoutCount, pCopySrcLayouts, VkImageLayout, 0), + OA(VkPhysicalDeviceHostImageCopyProperties, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + copyDstLayoutCount, pCopyDstLayouts, VkImageLayout, 0), + OA(VkPhysicalDeviceLayeredApiPropertiesListKHR, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR, + layeredApiCount, pLayeredApis, VkPhysicalDeviceLayeredApiPropertiesKHR, 1), +}; +#undef OA +#define N_OUT_ARRAYS (sizeof(out_arrays) / sizeof(out_arrays[0])) + +static uint32_t rd32(const void *base, size_t off) { uint32_t v; memcpy(&v, (const uint8_t *)base + off, 4); return v; } +static void wr32(void *base, size_t off, uint32_t v) { memcpy((uint8_t *)base + off, &v, 4); } +static void *rdp(const void *base, size_t off) { void *v; memcpy(&v, (const uint8_t *)base + off, sizeof(v)); return v; } +static void wrp(void *base, size_t off, void *v) { memcpy((uint8_t *)base + off, &v, sizeof(v)); } + +static const VkBaseInStructure *next_known_out(const void *p) +{ + const VkBaseInStructure *b = p; + while (b) { + if (vkb_struct_size(b->sType)) return b; + VKB_ONCE(VKB_LOG_WARN, "output pNext: structure type %d is not bridged; left unfilled (logged once)", (int)b->sType); + b = b->pNext; + } + return NULL; +} + +void vkb_enc_out_template(vkb_enc *e, const void *s, size_t size) +{ + vkb_enc_raw(e, s, size); + const VkBaseInStructure *b = next_known_out(((const VkBaseInStructure *)s)->pNext); + while (b) { + size_t sz = vkb_struct_size(b->sType); + vkb_enc_u32(e, (uint32_t)b->sType); + vkb_enc_raw(e, b, sz); + for (size_t i = 0; i < N_OUT_ARRAYS; i++) + if (out_arrays[i].t == b->sType) vkb_enc_u8(e, !out_arrays[i].empty && rdp(b, out_arrays[i].ptr_off) != NULL); + b = next_known_out(b->pNext); + } + vkb_enc_u32(e, VKB_CHAIN_END); +} + +void vkb_enc_out_struct(vkb_enc *e, const void *s, size_t size) +{ + vkb_enc_raw(e, s, size); + const VkBaseInStructure *b = ((const VkBaseInStructure *)s)->pNext; + for (; b; b = b->pNext) { + size_t sz = vkb_struct_size(b->sType); + if (!sz) continue; + vkb_enc_u32(e, (uint32_t)b->sType); + vkb_enc_raw(e, b, sz); + for (size_t i = 0; i < N_OUT_ARRAYS; i++) { + const out_arr *oa = &out_arrays[i]; + if (oa->t != b->sType) continue; + const void *arr = rdp(b, oa->ptr_off); + vkb_enc_u8(e, arr != NULL); + if (arr) { + uint32_t n = rd32(b, oa->count_off); + vkb_enc_u32(e, n); + vkb_enc_raw(e, arr, (size_t)n * oa->elem); + } + } + } + vkb_enc_u32(e, VKB_CHAIN_END); +} + +/* ------------------------------------------------------------------ decoder */ + +void vkb_dec_init(vkb_dec *d, const void *buf, size_t len, vkb_arena *a, int *fds, int nfds) +{ + memset(d, 0, sizeof(*d)); + d->buf = buf; + d->len = len; + d->arena = a; + d->fds = fds; + d->nfds = nfds; +} + +void vkb_dec_bytes(vkb_dec *d, void *dst, size_t n) +{ + if (d->err || d->len - d->pos < n) { + d->err = 1; + if (dst) memset(dst, 0, n); + return; + } + if (dst) memcpy(dst, d->buf + d->pos, n); + d->pos += n; +} + +uint8_t vkb_dec_u8(vkb_dec *d) { uint8_t v; vkb_dec_bytes(d, &v, 1); return v; } +uint32_t vkb_dec_u32(vkb_dec *d) { uint32_t v; vkb_dec_bytes(d, &v, 4); return v; } +uint64_t vkb_dec_u64(vkb_dec *d) { uint64_t v; vkb_dec_bytes(d, &v, 8); return v; } + +static void dec_align(vkb_dec *d) +{ + size_t pad = (8 - (d->pos & 7)) & 7; + if (d->len - d->pos < pad) { + d->err = 1; + return; + } + d->pos += pad; +} + +void vkb_dec_raw_into(vkb_dec *d, void *dst, size_t n) +{ + dec_align(d); + vkb_dec_bytes(d, dst, n); +} + +const void *vkb_dec_raw_view(vkb_dec *d, size_t n) +{ + dec_align(d); + if (d->err || d->len - d->pos < n) { + d->err = 1; + return NULL; + } + const void *p = d->buf + d->pos; + d->pos += n; + return p; +} + +void *vkb_dec_alloc(vkb_dec *d, size_t n) +{ + if (d->err) return NULL; + if (n > ((size_t)1 << 32)) { + d->err = 1; + return NULL; + } + void *p = vkb_arena_alloc(d->arena, n); + if (!p) d->err = 1; + return p; +} + +void *vkb_dec_alloc_zero(vkb_dec *d, size_t n) { return vkb_dec_alloc(d, n); } + +const char *vkb_dec_str(vkb_dec *d) +{ + if (!vkb_dec_u8(d)) return NULL; + uint32_t n = vkb_dec_u32(d); + if (d->err || d->len - d->pos < n) { + d->err = 1; + return NULL; + } + char *s = vkb_dec_alloc(d, (size_t)n + 1); + if (!s) return NULL; + memcpy(s, d->buf + d->pos, n); + s[n] = 0; + d->pos += n; + return s; +} + +const char *const *vkb_dec_strarray(vkb_dec *d) +{ + if (!vkb_dec_u8(d)) return NULL; + uint32_t n = vkb_dec_u32(d); + if (d->err || n > (d->len - d->pos)) { + d->err = 1; + return NULL; + } + const char **a = vkb_dec_alloc(d, (size_t)(n ? n : 1) * sizeof(char *)); + for (uint32_t i = 0; a && i < n; i++) a[i] = vkb_dec_str(d); + return a; +} + +const void *vkb_dec_blob(vkb_dec *d, size_t *n) +{ + if (!vkb_dec_u8(d)) { + if (n) *n = 0; + return NULL; + } + uint64_t sz = vkb_dec_u64(d); + if (n) *n = (size_t)sz; + return vkb_dec_raw_view(d, (size_t)sz); +} + +void vkb_dec_blob_into(vkb_dec *d, void *dst, size_t cap) +{ + size_t n = 0; + const void *p = vkb_dec_blob(d, &n); + if (p && dst) memcpy(dst, p, n < cap ? n : cap); +} + +int vkb_dec_fd(vkb_dec *d) +{ + uint32_t i = vkb_dec_u32(d); + if (i == VKB_FD_NONE || d->err) return -1; + if ((int)i >= d->nfds || (d->fd_taken & (1u << i))) { + d->err = 1; + return -1; + } + d->fd_taken |= 1u << i; + return d->fds[i]; +} + +void vkb_dec_close_untaken(vkb_dec *d) +{ + for (int i = 0; i < d->nfds; i++) { + if (!(d->fd_taken & (1u << i)) && d->fds[i] >= 0) close(d->fds[i]); + } + d->fd_taken = 0xffffffffu; +} + +const void *vkb_dec_chain(vkb_dec *d) +{ + uint32_t t = vkb_dec_u32(d); + if (d->err || t == VKB_CHAIN_END) return NULL; + size_t sz = vkb_struct_size((VkStructureType)t); + if (!sz) { + VKB_ERR("protocol: unknown structure type %u in a chain", t); + d->err = 1; + return NULL; + } + void *p = vkb_dec_alloc(d, sz); + if (!p) return NULL; + vkb_dec_chain_elem(d, (VkStructureType)t, p); + return p; +} + +void vkb_dec_out_template(vkb_dec *d, void *dst, size_t size) +{ + vkb_dec_raw_into(d, dst, size); + VkBaseOutStructure *prev = dst; + prev->pNext = NULL; + for (;;) { + uint32_t t = vkb_dec_u32(d); + if (d->err || t == VKB_CHAIN_END) break; + size_t sz = vkb_struct_size((VkStructureType)t); + if (!sz) { + d->err = 1; + break; + } + VkBaseOutStructure *el = vkb_dec_alloc(d, sz); + if (!el) break; + vkb_dec_raw_into(d, el, sz); + el->pNext = NULL; + for (size_t i = 0; i < N_OUT_ARRAYS; i++) { + const out_arr *oa = &out_arrays[i]; + if (oa->t != (VkStructureType)t) continue; + void *arr = NULL; + if (vkb_dec_u8(d)) { + uint32_t n = rd32(el, oa->count_off); + arr = vkb_dec_alloc(d, (size_t)(n ? n : 1) * oa->elem); + } else { + wr32(el, oa->count_off, 0); + } + wrp(el, oa->ptr_off, arr); + } + prev->pNext = el; + prev = el; + } +} + +void vkb_dec_out_struct(vkb_dec *d, void *dst, size_t size) +{ + VkBaseOutStructure *top = dst; + VkBaseOutStructure *keep = top->pNext; + vkb_dec_raw_into(d, dst, size); + top->pNext = keep; + VkBaseOutStructure *app = (VkBaseOutStructure *)next_known_out(keep); + for (;;) { + uint32_t t = vkb_dec_u32(d); + if (d->err || t == VKB_CHAIN_END) break; + size_t sz = vkb_struct_size((VkStructureType)t); + const uint8_t *src = vkb_dec_raw_view(d, sz); + if (!src || !sz) { + d->err = 1; + break; + } + if (!app || (uint32_t)app->sType != t) { + /* The server answered for a structure we did not send: protocol mismatch. */ + d->err = 1; + break; + } + /* The caller's own pointers and array capacities survive the copy. */ + VkBaseOutStructure *keep_next = app->pNext; + void *app_arr[4] = {0}; + uint32_t cap[4] = {0}; + int na = 0; + for (size_t i = 0; i < N_OUT_ARRAYS && na < 4; i++) { + if (out_arrays[i].t != (VkStructureType)t) continue; + app_arr[na] = rdp(app, out_arrays[i].ptr_off); + cap[na] = rd32(app, out_arrays[i].count_off); + na++; + } + memcpy(app, src, sz); + app->pNext = keep_next; + na = 0; + for (size_t i = 0; i < N_OUT_ARRAYS && na < 4; i++) { + const out_arr *oa = &out_arrays[i]; + if (oa->t != (VkStructureType)t) continue; + wrp(app, oa->ptr_off, app_arr[na]); + uint8_t present = vkb_dec_u8(d); + uint32_t n = 0; + const uint8_t *arr_src = NULL; + if (present) { + n = vkb_dec_u32(d); + arr_src = vkb_dec_raw_view(d, (size_t)n * oa->elem); + } + if (oa->empty) { + wr32(app, oa->count_off, 0); + } else if (app_arr[na] && arr_src) { + uint32_t m = n < cap[na] ? n : cap[na]; + memcpy(app_arr[na], arr_src, (size_t)m * oa->elem); + wr32(app, oa->count_off, m); + } + na++; + } + app = (VkBaseOutStructure *)next_known_out(keep_next); + } +} + +void vkb_close_fd(int fd) +{ + if (fd >= 0) close(fd); +} + +/* ------------------------------------------------------------------ predicates */ + +int vkb_desc_has_image(VkDescriptorType t) +{ + return t == VK_DESCRIPTOR_TYPE_SAMPLER || t == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER || + t == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE || t == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE || + t == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT || t == VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM || + t == VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM; +} + +int vkb_desc_has_buffer(VkDescriptorType t) +{ + return t == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER || t == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER || + t == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || t == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC; +} + +int vkb_desc_has_texel(VkDescriptorType t) +{ + return t == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER || t == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER; +} + +int vkb_gp_has_tess(const VkGraphicsPipelineCreateInfo *s) +{ + if (!s->pStages) return 1; /* library pieces: trust the pointer */ + for (uint32_t i = 0; i < s->stageCount; i++) { + if (s->pStages[i].stage & (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)) + return 1; + } + return 0; +} + +/* ------------------------------------------------------------------ transport */ + +int vkb_send_msg(int sock, const vkb_msg_hdr *h, const void *payload, const int *fds, int nfds) +{ + struct iovec iov[2]; + iov[0].iov_base = (void *)h; + iov[0].iov_len = sizeof(*h); + iov[1].iov_base = (void *)payload; + iov[1].iov_len = h->size; + union { + char buf[CMSG_SPACE(sizeof(int) * VKB_MAX_FDS)]; + struct cmsghdr align; + } cm; + struct msghdr msg; + memset(&msg, 0, sizeof(msg)); + msg.msg_iov = iov; + msg.msg_iovlen = h->size ? 2 : 1; + if (nfds > 0) { + memset(&cm, 0, sizeof(cm)); + msg.msg_control = cm.buf; + msg.msg_controllen = CMSG_SPACE(sizeof(int) * nfds); + struct cmsghdr *c = CMSG_FIRSTHDR(&msg); + c->cmsg_level = SOL_SOCKET; + c->cmsg_type = SCM_RIGHTS; + c->cmsg_len = CMSG_LEN(sizeof(int) * nfds); + memcpy(CMSG_DATA(c), fds, sizeof(int) * nfds); + } + size_t total = sizeof(*h) + h->size; + size_t sent = 0; + while (sent < total) { + ssize_t r = sendmsg(sock, &msg, MSG_NOSIGNAL); + if (r < 0) { + if (errno == EINTR) continue; + return -1; + } + sent += (size_t)r; + if (sent >= total) break; + /* Partial write: advance the iovecs; fds went with the first chunk. */ + msg.msg_control = NULL; + msg.msg_controllen = 0; + size_t skip = (size_t)r; + while (msg.msg_iovlen && skip >= msg.msg_iov[0].iov_len) { + skip -= msg.msg_iov[0].iov_len; + msg.msg_iov++; + msg.msg_iovlen--; + } + if (msg.msg_iovlen) { + msg.msg_iov[0].iov_base = (uint8_t *)msg.msg_iov[0].iov_base + skip; + msg.msg_iov[0].iov_len -= skip; + } + } + return 0; +} + +static int read_full(int sock, void *buf, size_t n) +{ + size_t got = 0; + while (got < n) { + ssize_t r = recv(sock, (uint8_t *)buf + got, n - got, 0); + if (r == 0) return -1; + if (r < 0) { + if (errno == EINTR) continue; + return -1; + } + got += (size_t)r; + } + return 0; +} + +int vkb_recv_msg(int sock, vkb_msg_hdr *h, uint8_t **payload, size_t *cap, int *fds, int *nfds) +{ + union { + char buf[CMSG_SPACE(sizeof(int) * VKB_MAX_FDS)]; + struct cmsghdr align; + } cm; + struct iovec iov = {h, sizeof(*h)}; + struct msghdr msg; + memset(&msg, 0, sizeof(msg)); + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_control = cm.buf; + msg.msg_controllen = sizeof(cm.buf); + *nfds = 0; + ssize_t r; + do { + r = recvmsg(sock, &msg, MSG_CMSG_CLOEXEC); + } while (r < 0 && errno == EINTR); + if (r <= 0) return -1; + for (struct cmsghdr *c = CMSG_FIRSTHDR(&msg); c; c = CMSG_NXTHDR(&msg, c)) { + if (c->cmsg_level == SOL_SOCKET && c->cmsg_type == SCM_RIGHTS) { + int n = (int)((c->cmsg_len - CMSG_LEN(0)) / sizeof(int)); + for (int i = 0; i < n; i++) { + int fd; + memcpy(&fd, CMSG_DATA(c) + i * sizeof(int), sizeof(int)); + if (*nfds < VKB_MAX_FDS) fds[(*nfds)++] = fd; + else close(fd); + } + } + } + if ((size_t)r < sizeof(*h) && read_full(sock, (uint8_t *)h + r, sizeof(*h) - (size_t)r) < 0) goto fail; + if (h->magic != VKB_MAGIC) { + VKB_ERR("transport: bad message magic 0x%08x", h->magic); + goto fail; + } + if (h->size) { + if (h->size > *cap) { + size_t nc = *cap ? *cap : 65536; + while (nc < h->size) nc *= 2; + uint8_t *nb = realloc(*payload, nc); + if (!nb) goto fail; + *payload = nb; + *cap = nc; + } + if (read_full(sock, *payload, h->size) < 0) goto fail; + } + return 0; +fail: + for (int i = 0; i < *nfds; i++) close(fds[i]); + *nfds = 0; + return -1; +} diff --git a/tools/vkbridge/common/vkb_wire.h b/tools/vkbridge/common/vkb_wire.h new file mode 100644 index 000000000..304239977 --- /dev/null +++ b/tools/vkbridge/common/vkb_wire.h @@ -0,0 +1,123 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * Wire primitives shared by the bridge's client ICD (glibc) and server (bionic). + * See tools/vkbridge/README.md for the protocol. + */ +#ifndef VKB_WIRE_H +#define VKB_WIRE_H + +#include +#include +#include "gen/vkb_gen.h" + +#define VKB_MAX_FDS 16 +#define VKB_CHAIN_END 0x7FFFFFFFu +#define VKB_FD_NONE 0xFFFFFFFFu + +/* ---- arena: per-call scratch memory on the decoding side ---- */ +typedef struct vkb_arena_block vkb_arena_block; +typedef struct vkb_arena { + vkb_arena_block *head; + size_t used_total; +} vkb_arena; +void *vkb_arena_alloc(vkb_arena *a, size_t n); +void vkb_arena_reset(vkb_arena *a); +void vkb_arena_free(vkb_arena *a); + +/* ---- encoder ---- */ +struct vkb_enc { + uint8_t *buf; + size_t len, cap; + int fds[VKB_MAX_FDS]; + int nfds; + int oom; +}; +void vkb_enc_init(vkb_enc *e); +void vkb_enc_reset(vkb_enc *e); /* keeps the buffer */ +void vkb_enc_free(vkb_enc *e); +void vkb_enc_bytes(vkb_enc *e, const void *p, size_t n); +void vkb_enc_u8(vkb_enc *e, uint8_t v); +void vkb_enc_u32(vkb_enc *e, uint32_t v); +void vkb_enc_u64(vkb_enc *e, uint64_t v); +size_t vkb_enc_raw(vkb_enc *e, const void *p, size_t n); /* 8-aligned; returns offset */ +void vkb_enc_patch_u64(vkb_enc *e, size_t off, uint64_t v); +void vkb_enc_str(vkb_enc *e, const char *s); +void vkb_enc_strarray(vkb_enc *e, const char *const *a, uint32_t n); +void vkb_enc_blob(vkb_enc *e, const void *p, size_t n); +void vkb_enc_fd(vkb_enc *e, int fd); /* sent with the message */ +void vkb_enc_chain(vkb_enc *e, const void *pNext); +void vkb_enc_out_template(vkb_enc *e, const void *s, size_t size); /* client */ +void vkb_enc_out_struct(vkb_enc *e, const void *s, size_t size); /* server */ +void vkb_enc_append(vkb_enc *e, const vkb_enc *src); /* bytes + fds */ + +/* ---- decoder ---- */ +struct vkb_dec { + const uint8_t *buf; + size_t pos, len; + int err; + vkb_arena *arena; + int *fds; + int nfds; + uint32_t fd_taken; /* bitmask of fds handed out */ +}; +void vkb_dec_init(vkb_dec *d, const void *buf, size_t len, vkb_arena *a, int *fds, int nfds); +void vkb_dec_bytes(vkb_dec *d, void *dst, size_t n); +uint8_t vkb_dec_u8(vkb_dec *d); +uint32_t vkb_dec_u32(vkb_dec *d); +uint64_t vkb_dec_u64(vkb_dec *d); +void vkb_dec_raw_into(vkb_dec *d, void *dst, size_t n); +const void *vkb_dec_raw_view(vkb_dec *d, size_t n); +void *vkb_dec_alloc(vkb_dec *d, size_t n); /* zeroed */ +void *vkb_dec_alloc_zero(vkb_dec *d, size_t n); +const char *vkb_dec_str(vkb_dec *d); +const char *const *vkb_dec_strarray(vkb_dec *d); +const void *vkb_dec_blob(vkb_dec *d, size_t *n); +void vkb_dec_blob_into(vkb_dec *d, void *dst, size_t cap); +int vkb_dec_fd(vkb_dec *d); /* caller owns the fd */ +const void *vkb_dec_chain(vkb_dec *d); +void vkb_dec_out_template(vkb_dec *d, void *dst, size_t size); /* server */ +void vkb_dec_out_struct(vkb_dec *d, void *dst, size_t size); /* client */ +void vkb_dec_close_untaken(vkb_dec *d); + +void vkb_close_fd(int fd); + +/* Descriptor-type predicates used by generated encoders. */ +int vkb_desc_has_image(VkDescriptorType t); +int vkb_desc_has_buffer(VkDescriptorType t); +int vkb_desc_has_texel(VkDescriptorType t); +int vkb_gp_has_tess(const VkGraphicsPipelineCreateInfo *s); +/* Defined per side: on the client it consults the command buffer's level. */ +int vkb_cb_begin_is_secondary(const VkCommandBufferBeginInfo *s); + +/* Defined per side: client maps a dispatchable handle to the server's value; server: identity. */ +uint64_t vkb_remote(const void *dispatchable); + +/* ---- transport ---- */ +typedef struct vkb_msg_hdr { + uint32_t magic; /* VKB_MAGIC */ + uint32_t size; /* payload bytes after the header */ + uint32_t cmd; /* request: command id; reply: status (0 = ok) */ + uint32_t table; /* request: server dispatch table id */ + uint32_t nfds; + uint32_t flags; + /* Ordering of asynchronous requests across a process's connections: an async request has + * seq > 0; every request carries barrier = the highest async seq its process had issued + * before it, and is not executed until all of those have been. */ + uint64_t seq; + uint64_t barrier; +} vkb_msg_hdr; +#define VKB_MAGIC 0x32424b56u /* "VKB2" */ +#define VKB_F_NOREPLY 1u + +/* Reply status codes (vkb_msg_hdr.cmd in replies). */ +#define VKB_ST_OK 0u +#define VKB_ST_BAD_MESSAGE 1u +#define VKB_ST_MISSING 2u +#define VKB_ST_BAD_TABLE 3u + +int vkb_send_msg(int sock, const vkb_msg_hdr *h, const void *payload, const int *fds, int nfds); +/* Receives one message; *payload is malloc'd (or reused when *cap suffices). Returns 0 on + * success, -1 on EOF/error. fds[] receives up to VKB_MAX_FDS descriptors. */ +int vkb_recv_msg(int sock, vkb_msg_hdr *h, uint8_t **payload, size_t *cap, int *fds, int *nfds); + +#endif diff --git a/tools/vkbridge/host/.gitignore b/tools/vkbridge/host/.gitignore new file mode 100644 index 000000000..89f9ac04a --- /dev/null +++ b/tools/vkbridge/host/.gitignore @@ -0,0 +1 @@ +out/ diff --git a/tools/vkbridge/host/Makefile b/tools/vkbridge/host/Makefile new file mode 100644 index 000000000..36f408a5f --- /dev/null +++ b/tools/vkbridge/host/Makefile @@ -0,0 +1,39 @@ +# Host (x86_64 Linux) build of both bridge halves, for testing against the desktop's own Vulkan +# driver: the server loads libvulkan.so.1 (pick a driver with VK_DRIVER_FILES in ITS environment), +# the client ICD is what test programs load (VK_DRIVER_FILES=$(OUT)/vkbridge_icd.json). +# make -C tools/vkbridge/host build +# make -C tools/vkbridge/host test vulkaninfo + vkcube-headless smoke tests +ROOT := $(abspath ../../..) +VKB := $(ROOT)/tools/vkbridge +SRV := $(ROOT)/app/src/main/cpp/vkbridge +OUT ?= $(VKB)/host/out +CC ?= gcc +CFLAGS ?= -O1 -g +WARN := -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare +INC := -I$(VKB)/third_party/Vulkan-Headers-1.4.341/include -I$(VKB)/common -I$(VKB)/common/gen +COMMON_SRC := $(VKB)/common/vkb_wire.c $(VKB)/common/gen/vkb_gen_structs.c +SERVER_SRC := $(wildcard $(SRV)/*.c) $(VKB)/common/gen/vkb_gen_server.c $(COMMON_SRC) +CLIENT_SRC := $(wildcard $(VKB)/client/*.c) $(VKB)/common/gen/vkb_gen_client.c $(COMMON_SRC) + +all: $(OUT)/vkbridge-server $(OUT)/libvulkan_droidbridge.so $(OUT)/vkbridge_icd.json + +$(OUT)/vkbridge-server: $(SERVER_SRC) $(wildcard $(SRV)/*.h $(VKB)/common/*.h $(VKB)/common/gen/*.h) + @mkdir -p $(OUT) + $(CC) $(CFLAGS) $(WARN) $(INC) -I$(SRV) -o $@ $(SERVER_SRC) -ldl -lpthread -lm -rdynamic + +$(OUT)/libvulkan_droidbridge.so: $(CLIENT_SRC) $(wildcard $(VKB)/client/*.h $(VKB)/common/*.h $(VKB)/common/gen/*.h) + @mkdir -p $(OUT) + $(CC) $(CFLAGS) $(WARN) -fPIC -shared -fvisibility=hidden -DVKB_CLIENT $(INC) -I$(VKB)/client -I$(VKB)/client/compat \ + -o $@ $(CLIENT_SRC) -ldl -lpthread -Wl,--no-undefined + +$(OUT)/vkbridge_icd.json: + @mkdir -p $(OUT) + printf '{"file_format_version":"1.0.0","ICD":{"library_path":"%s","api_version":"1.4.341"}}\n' "$(OUT)/libvulkan_droidbridge.so" > $@ + +test: all + $(VKB)/host/run_tests.sh $(OUT) + +clean: + rm -rf $(OUT) + +.PHONY: all test clean diff --git a/tools/vkbridge/host/bridge_env.sh b/tools/vkbridge/host/bridge_env.sh new file mode 100755 index 000000000..5659a6eb9 --- /dev/null +++ b/tools/vkbridge/host/bridge_env.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Source this: starts a host vkbridge server on a desktop driver (VKB_HOST_ICD, default RADV) and +# points this shell's Vulkan programs at the bridge ICD. +# [VKB_HOST_ICD=...] . tools/vkbridge/host/bridge_env.sh +_vkb_host=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +_vkb_icd=${VKB_HOST_ICD:-/usr/share/vulkan/icd.d/radeon_icd.json} +export VKBRIDGE_SOCKET=${VKBRIDGE_SOCKET:-${XDG_RUNTIME_DIR:-/tmp}/vkbridge-host.sock} +pgrep -x vkbridge-server >/dev/null && kill $(pgrep -x vkbridge-server) 2>/dev/null; sleep 0.3 +rm -f "$VKBRIDGE_SOCKET" +VK_DRIVER_FILES=$_vkb_icd VK_ICD_FILENAMES= nohup "$_vkb_host/out/vkbridge-server" --socket "$VKBRIDGE_SOCKET" \ + --log "$_vkb_host/out/server.log" >/dev/null 2>&1 & +for _i in $(seq 50); do [ -S "$VKBRIDGE_SOCKET" ] && break; sleep 0.1; done +export VK_DRIVER_FILES=$_vkb_host/out/vkbridge_icd.json +echo "vkbridge server up ($_vkb_icd) at $VKBRIDGE_SOCKET" diff --git a/tools/vkbridge/host/d3d11_test.sh b/tools/vkbridge/host/d3d11_test.sh new file mode 100755 index 000000000..c50580679 --- /dev/null +++ b/tools/vkbridge/host/d3d11_test.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Runs tests/d3d11_check.exe under Proton Experimental's wine + DXVK. Needs a prefix dir with the +# exe, DXVK's d3d11/dxgi and vkd3d's DLLs (see README). VK_DRIVER_FILES picks native or bridge. +P="$HOME/.steam/steam/steamapps/common/Proton - Experimental/files" +W=${VKB_WINE_DIR:?set VKB_WINE_DIR} +cd "$W/app" && WINEPREFIX=$W/pfx WINEDEBUG=-all WINEDLLOVERRIDES="d3d11,dxgi=n,b" DXVK_LOG_PATH=$W timeout 180 "$P/bin/wine" d3d11_check.exe 2>&1 \ + | grep -v "^info:\|^warn:\|fixme\|err:hid\|wineserver" diff --git a/tools/vkbridge/host/gamescope_test.sh b/tools/vkbridge/host/gamescope_test.sh new file mode 100755 index 000000000..75879b0e6 --- /dev/null +++ b/tools/vkbridge/host/gamescope_test.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# Phase 3 host test: Arch's gamescope (the runtime's distribution) in a container WITHOUT any GPU +# device, drawing only through the bridge, nested on the desktop's Wayland. Run after +# bridge_env.sh. Usage: gamescope_test.sh [command inside gamescope...] +host=$(cd "$(dirname "$0")" && pwd) +R=${XDG_RUNTIME_DIR:-/run/user/$(id -u)} +cmd=${*:-vkcube --c 600} +exec docker run --rm ${VKB_DOCKER_EXTRA:-} --tmpfs /run/xdg:mode=0700 \ + -e XDG_RUNTIME_DIR=/run/xdg -e WAYLAND_DISPLAY=host-wayland -e HOME=/root \ + -v "$R/${WAYLAND_DISPLAY:-wayland-0}:/run/host-wayland" -v "$VKBRIDGE_SOCKET:/run/vkbridge.sock" \ + -v "$host/out:$host/out" -v "$host/out/shots:/shots" -e VK_DRIVER_FILES=$host/out/vkbridge_icd.json -e VKBRIDGE_SOCKET=/run/vkbridge.sock \ + -e VKBRIDGE_DRM_RENDER=${VKBRIDGE_DRM_RENDER:-} -e VKBRIDGE_HIDE_EXTS=${VKBRIDGE_HIDE_EXTS:-} -e VKBRIDGE_MAX_API=${VKBRIDGE_MAX_API:-} -e VKBRIDGE_LOG_LEVEL=${VKBRIDGE_LOG_LEVEL:-2} -e VKBRIDGE_WSI_DUMP=${VKBRIDGE_WSI_DUMP:-} \ + vkb-arch-gamescope bash -c "ln -s /run/host-wayland /run/xdg/host-wayland; gamescope --backend wayland --expose-wayland -W 960 -H 540 -w 960 -h 540 -- $cmd" diff --git a/tools/vkbridge/host/mali_env.sh b/tools/vkbridge/host/mali_env.sh new file mode 100755 index 000000000..bb68a34fa --- /dev/null +++ b/tools/vkbridge/host/mali_env.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# Source this: a host bridge server that behaves like the Mali-G720 driver as far as Phase 0 +# found (no BCn, clip/cull distance, vertex attribute divisor, maintenance5, push descriptors, robustness2; Vulkan 1.3). +_vkb_host=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +export VKBRIDGE_SOCKET=${XDG_RUNTIME_DIR:-/tmp}/vkbridge-host.sock +pgrep -x vkbridge-server >/dev/null && kill $(pgrep -x vkbridge-server) 2>/dev/null; sleep 0.3 +rm -f "$VKBRIDGE_SOCKET" +VKBRIDGE_FAKE_MISSING=${VKB_MISSING:-bc,clip,cull,divisor,maint5,depthclip,push,robustness2} VK_DRIVER_FILES=${VKB_HOST_ICD:-/usr/share/vulkan/icd.d/radeon_icd.json} \ + nohup "$_vkb_host/out/vkbridge-server" --socket "$VKBRIDGE_SOCKET" --log "$_vkb_host/out/server.log" >/dev/null 2>&1 & +for _i in $(seq 50); do [ -S "$VKBRIDGE_SOCKET" ] && break; sleep 0.1; done +chmod 666 "$VKBRIDGE_SOCKET" +export VK_DRIVER_FILES=$_vkb_host/out/vkbridge_icd.json +export VKBRIDGE_HIDE_EXTS=VK_KHR_maintenance5,VK_KHR_push_descriptor,VK_EXT_robustness2,VK_KHR_robustness2,VK_EXT_vertex_attribute_divisor,VK_KHR_vertex_attribute_divisor,VK_EXT_depth_clip_enable +export VKBRIDGE_MAX_API=1.3 +echo "vkbridge server up, imitating Mali's gaps" diff --git a/tools/vkbridge/host/run_tests.sh b/tools/vkbridge/host/run_tests.sh new file mode 100755 index 000000000..23764fa65 --- /dev/null +++ b/tools/vkbridge/host/run_tests.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# Host regression suite for the bridge: every automated check, in two server modes - +# plain the desktop driver as it is (RADV) +# mali the desktop driver with Mali-G720's known gaps imitated (mali_env.sh) +# Needs: make (out/), Proton Experimental for the DXVK check (VKB_WINE_DIR prepared, see README), +# docker image vkb-arch-gamescope for the gamescope/Zink check (skipped if absent). +cd "$(dirname "$0")" +pass=0; fail=0 +result() { if [ "$1" = 0 ]; then pass=$((pass+1)); echo " ok $2"; else fail=$((fail+1)); echo " FAIL $2"; fi; } +run_mode() { + local mode=$1 + echo "== $mode" + if [ "$mode" = mali ]; then . ./mali_env.sh >/dev/null; else unset VKBRIDGE_HIDE_EXTS VKBRIDGE_MAX_API; . ./bridge_env.sh >/dev/null; fi + timeout 120 ./out/vkbridge-smoke >out/t-smoke.log 2>&1; result $? "smoke ($(tail -1 out/t-smoke.log))" + timeout 180 ./out/bcn_check >out/t-bcn.log 2>&1; result $? "bcn_check ($(tail -1 out/t-bcn.log))" + if [ -n "${VKB_WINE_DIR:-}" ] && [ -d "$VKB_WINE_DIR/app" ]; then + ./d3d11_test.sh >out/t-d3d11.log 2>&1; grep -q "^OK:" out/t-d3d11.log; result $? "d3d11_check via DXVK ($(grep -E '^(OK|FAILED)' out/t-d3d11.log))" + fi + timeout 60 vkcube-wayland --c 120 >out/t-vkcube.log 2>&1; result $? "vkcube-wayland (dma-buf)" + VKBRIDGE_WSI_SHM=1 timeout 60 vkcube-wayland --c 120 >>out/t-vkcube.log 2>&1; result $? "vkcube-wayland (wl_shm)" + timeout 60 vkcube --c 120 >>out/t-vkcube.log 2>&1; result $? "vkcube (X11)" + if docker image inspect vkb-arch-gamescope >/dev/null 2>&1; then + VKB_DOCKER_EXTRA="--device /dev/dri/renderD128" VKBRIDGE_DRM_RENDER=226:128 timeout 120 ./gamescope_test.sh \ + "bash -c 'export MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink LIBGL_KOPPER_DRI2=true; timeout 20 glxgears 2>&1 | grep -m1 frames'" \ + >out/t-gamescope-$mode.log 2>&1 + grep -q "frames in" out/t-gamescope-$mode.log; result $? "gamescope + Zink glxgears ($(grep -m1 -o '[0-9.]* FPS' out/t-gamescope-$mode.log))" + fi +} +run_mode plain +run_mode mali +echo "== $pass passed, $fail failed" +[ "$fail" = 0 ] diff --git a/tools/vkbridge/shaders/bc_decode.comp b/tools/vkbridge/shaders/bc_decode.comp new file mode 100644 index 000000000..c23487d48 --- /dev/null +++ b/tools/vkbridge/shaders/bc_decode.comp @@ -0,0 +1,364 @@ +#version 450 +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * BCn block decoder for the Mali bridge's BC texture emulation. One invocation decodes one 4x4 + * block from the copy's source buffer and stores it into the decoded image (a 2D array view of one + * mip level). The arithmetic follows bcdec (third_party/bcdec, MIT/Unlicense, Sergii Kudlai) so the + * output can be checked bit-for-bit against it. Built once per format family (FMT_BC1 ... FMT_BC7). + */ +layout(local_size_x = 8, local_size_y = 8) in; + +layout(std430, binding = 0) readonly buffer Src { uint w[]; } src; +#if defined(FMT_BC6H) +layout(rgba16f, binding = 1) uniform writeonly image2DArray dst; +#elif defined(FMT_BC4) +layout(r8, binding = 1) uniform writeonly image2DArray dst; +#elif defined(FMT_BC5) +layout(rg8, binding = 1) uniform writeonly image2DArray dst; +#else +layout(rgba8, binding = 1) uniform writeonly image2DArray dst; +#endif + +layout(push_constant) uniform PC { + uint src_word; /* first block, in 32-bit words from the bound range's start */ + uint row_blocks; /* blocks per row in the buffer */ + uint layer_blocks; /* blocks per layer in the buffer */ + uint flags; /* 1: BC1 without alpha (alpha forced to 1); 2: signed (BC4/5/6H); first layer << 8 */ + ivec2 dst_off; /* texel offset of the region in the image */ + uvec2 extent; /* texels to write */ +} pc; + +#extension GL_GOOGLE_include_directive : require +#include "bc_tables.glsl" + +uint bits(uvec4 b, uint pos, uint n) +{ + if (n == 0u) return 0u; + uint wi = pos >> 5, o = pos & 31u; + uint v = b[wi] >> o; + if (o + n > 32u && wi < 3u) v |= b[wi + 1u] << (32u - o); + return n == 32u ? v : (v & ((1u << n) - 1u)); +} + +int sext(int v, int n) { return (v << (32 - n)) >> (32 - n); } + +void put(uint tx, uint ty, vec4 v) +{ + uvec2 blk = gl_GlobalInvocationID.xy; + uvec2 p = blk * 4u + uvec2(tx, ty); + if (p.x < pc.extent.x && p.y < pc.extent.y) + imageStore(dst, ivec3(pc.dst_off + ivec2(p), int(gl_GlobalInvocationID.z + (pc.flags >> 8))), v); +} + +/* ------------------------------------------------------------------ BC1-3 */ + +uvec4 rgb565(uint c) +{ + uint r = (c >> 11) & 31u, g = (c >> 5) & 63u, b = c & 31u; + return uvec4((r * 527u + 23u) >> 6, (g * 259u + 33u) >> 6, (b * 527u + 23u) >> 6, 255u); +} + +void color_block(uint lo, uint idx, bool opaque, inout uvec4 texels[16]) +{ + uint c0 = lo & 0xffffu, c1 = lo >> 16; + uint r0 = (c0 >> 11) & 31u, g0 = (c0 >> 5) & 63u, b0 = c0 & 31u; + uint r1 = (c1 >> 11) & 31u, g1 = (c1 >> 5) & 63u, b1 = c1 & 31u; + uvec4 ref[4]; + ref[0] = rgb565(c0); + ref[1] = rgb565(c1); + if (c0 > c1 || opaque) { + ref[2] = uvec4(((2u * r0 + r1) * 351u + 61u) >> 7, ((2u * g0 + g1) * 2763u + 1039u) >> 11, ((2u * b0 + b1) * 351u + 61u) >> 7, 255u); + ref[3] = uvec4(((r0 + r1 * 2u) * 351u + 61u) >> 7, ((g0 + g1 * 2u) * 2763u + 1039u) >> 11, ((b0 + b1 * 2u) * 351u + 61u) >> 7, 255u); + } else { + ref[2] = uvec4(((r0 + r1) * 1053u + 125u) >> 8, ((g0 + g1) * 4145u + 1019u) >> 11, ((b0 + b1) * 1053u + 125u) >> 8, 255u); + ref[3] = uvec4(0u); + } + for (uint t = 0u; t < 16u; t++) texels[t] = ref[(idx >> (2u * t)) & 3u]; +} + +/* BC3's alpha block as bcdec decodes it (integer division). */ +void smooth_alpha(uint lo, uint hi, out uint a[16]) +{ + uint a0 = lo & 0xffu, a1 = (lo >> 8) & 0xffu; + uint pal[8]; + pal[0] = a0; + pal[1] = a1; + if (a0 > a1) { + pal[2] = (6u * a0 + a1) / 7u; pal[3] = (5u * a0 + 2u * a1) / 7u; pal[4] = (4u * a0 + 3u * a1) / 7u; + pal[5] = (3u * a0 + 4u * a1) / 7u; pal[6] = (2u * a0 + 5u * a1) / 7u; pal[7] = (a0 + 6u * a1) / 7u; + } else { + pal[2] = (4u * a0 + a1) / 5u; pal[3] = (3u * a0 + 2u * a1) / 5u; pal[4] = (2u * a0 + 3u * a1) / 5u; + pal[5] = (a0 + 4u * a1) / 5u; pal[6] = 0u; pal[7] = 255u; + } + uvec4 b = uvec4(lo, hi, 0u, 0u); + for (uint t = 0u; t < 16u; t++) a[t] = pal[bits(b, 16u + 3u * t, 3u)]; +} + +/* BC4/BC5 channel (bcdec's precise variant), as the byte pattern of the unsigned/signed value. */ +void bc4_channel(uint lo, uint hi, bool sgn, out uint v[16]) +{ + int e0, e1; + if (sgn) { + e0 = max(sext(int(lo & 0xffu), 8), -127); + e1 = max(sext(int((lo >> 8) & 0xffu), 8), -127); + } else { + e0 = int(lo & 0xffu); + e1 = int((lo >> 8) & 0xffu); + } + const int w6[6] = int[6](9363, 18724, 28086, 37450, 46812, 56173); + const int w4[4] = int[4](13107, 26215, 39321, 52429); + int pal[8]; + pal[0] = e0; + pal[1] = e1; + if (e0 > e1) { + for (int i = 0; i < 6; i++) pal[2 + i] = (w6[5 - i] * e0 + w6[i] * e1 + 32768) >> 16; + } else { + for (int i = 0; i < 4; i++) pal[2 + i] = (w4[3 - i] * e0 + w4[i] * e1 + 32768) >> 16; + pal[6] = sgn ? -127 : 0; + pal[7] = sgn ? 127 : 255; + } + uvec4 b = uvec4(lo, hi, 0u, 0u); + for (uint t = 0u; t < 16u; t++) v[t] = uint(pal[bits(b, 16u + 3u * t, 3u)]) & 0xffu; +} + +/* ------------------------------------------------------------------ BC6H */ + +int bc6_unquantize(int val, int nbits, bool sgn) +{ + if (!sgn) { + if (nbits >= 15) return val; + if (val == 0) return 0; + if (val == (1 << nbits) - 1) return 0xffff; + return ((val << 16) + 0x8000) >> nbits; + } + if (nbits >= 16) return val; + int s = 0; + if (val < 0) { s = 1; val = -val; } + int unq; + if (val == 0) unq = 0; + else if (val >= (1 << (nbits - 1)) - 1) unq = 0x7fff; + else unq = ((val << 15) + 0x4000) >> (nbits - 1); + return s != 0 ? -unq : unq; +} + +uint bc6_finish(int val, bool sgn) +{ + if (!sgn) return uint((val * 31) >> 6); + val = val < 0 ? -(((-val) * 31) >> 5) : (val * 31) >> 5; + uint s = 0u; + if (val < 0) { s = 0x8000u; val = -val; } + return s | uint(val); +} + +void bc6h(uvec4 blk, bool sgn) +{ + uint pos = 0u; + uint code = bits(blk, 0u, 2u); + pos = 2u; + if (code > 1u) { code |= bits(blk, 2u, 3u) << 2; pos = 5u; } + int mode = BC6_MODE_OF_CODE[code]; + if (mode < 0) { + for (uint t = 0u; t < 16u; t++) put(t & 3u, t >> 2, vec4(0.0, 0.0, 0.0, 1.0)); + return; + } + int ep[12]; + for (int i = 0; i < 12; i++) ep[i] = 0; + uint part_id = 0u; + for (uint e = BC6_LAYOUT_START[mode]; e < BC6_LAYOUT_START[mode + 1]; e++) { + uint d = BC6_LAYOUT[e]; + uint target = d & 15u, n = (d >> 4) & 31u, sh = (d >> 9) & 31u; + uint v = bits(blk, pos, n); + pos += n; + if ((d & (1u << 14)) != 0u) v = bitfieldReverse(v) >> (32u - n); + if (target == 12u) part_id = v; + else ep[target] |= int(v << sh); + } + bool two = mode < 10; + int npts = two ? 4 : 2; + int w = BC6_BITS_W[mode]; + if (sgn) { ep[0] = sext(ep[0], w); ep[4] = sext(ep[4], w); ep[8] = sext(ep[8], w); } + if ((mode != 9 && mode != 10) || sgn) { + for (int i = 1; i < npts; i++) { + ep[i] = sext(ep[i], BC6_BITS_DR[mode]); + ep[4 + i] = sext(ep[4 + i], BC6_BITS_DG[mode]); + ep[8 + i] = sext(ep[8 + i], BC6_BITS_DB[mode]); + } + } + if (mode != 9 && mode != 10) { + for (int i = 1; i < npts; i++) { + for (int c = 0; c < 3; c++) { + int v = (ep[c * 4 + i] + ep[c * 4]) & ((1 << w) - 1); + ep[c * 4 + i] = sgn ? sext(v, w) : v; + } + } + } + for (int i = 0; i < 12; i++) ep[i] = bc6_unquantize(ep[i], w, sgn); + const int w3[8] = int[8](0, 9, 18, 27, 37, 46, 55, 64); + const int w4[16] = int[16](0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64); + uint part = BC7_PART2[part_id], anchor = BC7_PART2_ANCHOR[part_id] & 15u; + for (uint t = 0u; t < 16u; t++) { + uint subset = two ? ((part >> (2u * t)) & 3u) : 0u; + uint nb = two ? 3u : 4u; + if (t == 0u || (two && subset == 1u && t == anchor)) nb--; + uint idx = bits(blk, pos, nb); + pos += nb; + int wt = two ? w3[idx] : w4[idx]; + int s2 = int(subset) * 2; + uvec3 h; + for (int c = 0; c < 3; c++) { + int a = ep[c * 4 + s2], b = ep[c * 4 + s2 + 1]; + h[c] = bc6_finish((a * (64 - wt) + b * wt + 32) >> 6, sgn); + } + put(t & 3u, t >> 2, vec4(unpackHalf2x16(h.x).x, unpackHalf2x16(h.y).x, unpackHalf2x16(h.z).x, 1.0)); + } +} + +/* ------------------------------------------------------------------ BC7 */ + +void bc7(uvec4 blk) +{ + uint mode = 0u; + while (mode < 8u && bits(blk, mode, 1u) == 0u) mode++; + if (mode >= 8u) { + for (uint t = 0u; t < 16u; t++) put(t & 3u, t >> 2, vec4(0.0)); + return; + } + uint pos = mode + 1u; + uint nparts = 1u, part_id = 0u, rotation = 0u, isel = 0u; + if (mode == 0u || mode == 1u || mode == 2u || mode == 3u || mode == 7u) { + nparts = (mode == 0u || mode == 2u) ? 3u : 2u; + uint pb = mode == 0u ? 4u : 6u; + part_id = bits(blk, pos, pb); + pos += pb; + } + uint neps = nparts * 2u; + if (mode == 4u || mode == 5u) { + rotation = bits(blk, pos, 2u); + pos += 2u; + if (mode == 4u) { isel = bits(blk, pos, 1u); pos += 1u; } + } + int cb = BC7_BITS_RGB[mode], ab = BC7_BITS_A[mode]; + uint ep[6][4]; + for (uint c = 0u; c < 3u; c++) + for (uint e = 0u; e < neps; e++) { ep[e][c] = bits(blk, pos, uint(cb)); pos += uint(cb); } + for (uint e = 0u; e < neps; e++) { + if (ab > 0) { ep[e][3] = bits(blk, pos, uint(ab)); pos += uint(ab); } + else ep[e][3] = 0u; + } + const uint has_pbits = 203u; /* 0b11001011 */ + bool pbits = ((has_pbits >> mode) & 1u) != 0u || mode == 1u; + if (mode == 0u || mode == 1u || mode == 3u || mode == 6u || mode == 7u) { + for (uint e = 0u; e < neps; e++) + for (uint c = 0u; c < 4u; c++) ep[e][c] <<= 1; + if (mode == 1u) { + uint p0 = bits(blk, pos, 1u), p1 = bits(blk, pos + 1u, 1u); + pos += 2u; + for (uint c = 0u; c < 3u; c++) { ep[0][c] |= p0; ep[1][c] |= p0; ep[2][c] |= p1; ep[3][c] |= p1; } + } else { + for (uint e = 0u; e < neps; e++) { + uint p = bits(blk, pos, 1u); + pos += 1u; + for (uint c = 0u; c < 4u; c++) ep[e][c] |= p; + } + } + } + for (uint e = 0u; e < neps; e++) { + uint j = uint(cb) + ((has_pbits >> mode) & 1u); + for (uint c = 0u; c < 3u; c++) { + ep[e][c] = ep[e][c] << (8u - j); + ep[e][c] = (ep[e][c] | (ep[e][c] >> j)) & 0xffu; + } + j = uint(ab) + ((has_pbits >> mode) & 1u); + ep[e][3] = ep[e][3] << (8u - j); + ep[e][3] = (ep[e][3] | (ep[e][3] >> j)) & 0xffu; + if (ab == 0) ep[e][3] = 255u; + } + const uint w2[4] = uint[4](0u, 21u, 43u, 64u); + const uint w3[8] = uint[8](0u, 9u, 18u, 27u, 37u, 46u, 55u, 64u); + const uint w4[16] = uint[16](0u, 4u, 9u, 13u, 17u, 21u, 26u, 30u, 34u, 38u, 43u, 47u, 51u, 55u, 60u, 64u); + uint ib = (mode == 0u || mode == 1u) ? 3u : (mode == 6u ? 4u : 2u); + uint ib2 = mode == 4u ? 3u : (mode == 5u ? 2u : 0u); + uint part = nparts == 2u ? BC7_PART2[part_id] : (nparts == 3u ? BC7_PART3[part_id] : 0u); + uint anchors = nparts == 2u ? BC7_PART2_ANCHOR[part_id] : (nparts == 3u ? BC7_PART3_ANCHOR[part_id] : 0u); + uint idx1[16]; + for (uint t = 0u; t < 16u; t++) { + uint subset = (part >> (2u * t)) & 3u; + uint nb = ib; + bool anchor = t == 0u || (subset == 1u && t == (anchors & 15u)) || (subset == 2u && t == (anchors >> 4)); + if (anchor) nb--; + idx1[t] = bits(blk, pos, nb); + pos += nb; + } + for (uint t = 0u; t < 16u; t++) { + uint subset = (part >> (2u * t)) & 3u; + uint e0 = subset * 2u, e1 = e0 + 1u; + uint i1 = idx1[t]; + uvec4 c; + if (ib2 == 0u) { + uint wt = ib == 2u ? w2[i1] : (ib == 3u ? w3[i1] : w4[i1]); + for (uint k = 0u; k < 4u; k++) c[k] = (ep[e0][k] * (64u - wt) + ep[e1][k] * wt + 32u) >> 6; + } else { + uint nb2 = t == 0u ? ib2 - 1u : ib2; + uint i2 = bits(blk, pos, nb2); + pos += nb2; + uint wa = ib == 2u ? w2[i1] : w3[i1]; + uint wb = ib2 == 2u ? w2[i2] : w3[i2]; + uint wc = isel == 0u ? wa : wb, wal = isel == 0u ? wb : wa; + for (uint k = 0u; k < 3u; k++) c[k] = (ep[e0][k] * (64u - wc) + ep[e1][k] * wc + 32u) >> 6; + c.w = (ep[e0][3] * (64u - wal) + ep[e1][3] * wal + 32u) >> 6; + } + if (rotation == 1u) c = c.agbr; + else if (rotation == 2u) c = c.rabg; + else if (rotation == 3u) c = c.rgab; + put(t & 3u, t >> 2, vec4(c) / 255.0); + } +} + +/* ------------------------------------------------------------------ main */ + +void main() +{ + uvec2 blk = gl_GlobalInvocationID.xy; + uvec2 nblk = (pc.extent + 3u) / 4u; + if (blk.x >= nblk.x || blk.y >= nblk.y) return; +#if defined(FMT_BC1) || defined(FMT_BC4) + uint words = 2u; +#else + uint words = 4u; +#endif + uint base = pc.src_word + (gl_GlobalInvocationID.z * pc.layer_blocks + blk.y * pc.row_blocks + blk.x) * words; + uvec4 b = uvec4(src.w[base], src.w[base + 1u], words > 2u ? src.w[base + 2u] : 0u, words > 2u ? src.w[base + 3u] : 0u); + bool sgn = (pc.flags & 2u) != 0u; +#if defined(FMT_BC1) + uvec4 tex[16]; + color_block(b.x, b.y, false, tex); + for (uint t = 0u; t < 16u; t++) { + uvec4 c = tex[t]; + if ((pc.flags & 1u) != 0u) c.w = 255u; + put(t & 3u, t >> 2, vec4(c) / 255.0); + } +#elif defined(FMT_BC2) || defined(FMT_BC3) + uvec4 tex[16]; + color_block(b.z, b.w, true, tex); + uint a[16]; +#if defined(FMT_BC2) + for (uint t = 0u; t < 16u; t++) a[t] = bits(b, 4u * t, 4u) * 17u; +#else + smooth_alpha(b.x, b.y, a); +#endif + for (uint t = 0u; t < 16u; t++) put(t & 3u, t >> 2, vec4(tex[t].rgb, a[t]) / 255.0); +#elif defined(FMT_BC4) + uint v[16]; + bc4_channel(b.x, b.y, sgn, v); + for (uint t = 0u; t < 16u; t++) put(t & 3u, t >> 2, vec4(float(v[t]) / 255.0, 0.0, 0.0, 1.0)); +#elif defined(FMT_BC5) + uint r[16], g[16]; + bc4_channel(b.x, b.y, sgn, r); + bc4_channel(b.z, b.w, sgn, g); + for (uint t = 0u; t < 16u; t++) put(t & 3u, t >> 2, vec4(float(r[t]) / 255.0, float(g[t]) / 255.0, 0.0, 1.0)); +#elif defined(FMT_BC6H) + bc6h(b, sgn); +#elif defined(FMT_BC7) + bc7(b); +#endif +} diff --git a/tools/vkbridge/shaders/bc_tables.glsl b/tools/vkbridge/shaders/bc_tables.glsl new file mode 100644 index 000000000..e0356c820 --- /dev/null +++ b/tools/vkbridge/shaders/bc_tables.glsl @@ -0,0 +1,14 @@ +/* Generated by gen_bc_tables.py from bcdec.h (MIT/Unlicense, Sergii Kudlai) - do not edit. */ +const int BC6_MODE_OF_CODE[32] = int[32](0, 1, 2, 10, -1, -1, 3, 11, -1, -1, 4, 12, -1, -1, 5, 13, -1, -1, 6, -1, -1, -1, 7, -1, -1, -1, 8, -1, -1, -1, 9, -1); +const uint BC6_LAYOUT_START[15] = uint[15](0u, 20u, 44u, 63u, 84u, 105u, 125u, 145u, 167u, 189u, 213u, 219u, 228u, 237u, 246u); +const uint BC6_LAYOUT[246] = uint[246](2070u, 2074u, 2075u, 160u, 164u, 168u, 81u, 2071u, 70u, 85u, 27u, 71u, 89u, 539u, 74u, 82u, 1051u, 83u, 1563u, 92u, 2582u, 2071u, 2583u, 112u, 27u, 539u, 2074u, 116u, 2586u, 1051u, 2070u, 120u, 1563u, 2587u, 2075u, 97u, 70u, 101u, 71u, 105u, 74u, 98u, 99u, 92u, 160u, 164u, 168u, 81u, 5136u, 70u, 69u, 5140u, 27u, 71u, 73u, 5144u, 539u, 74u, 82u, 1051u, 83u, 1563u, 92u, 160u, 164u, 168u, 65u, 5136u, 2071u, 70u, 85u, 5140u, 71u, 73u, 5144u, 539u, 74u, 66u, 27u, 1051u, 67u, 2070u, 1563u, 92u, 160u, 164u, 168u, 65u, 5136u, 2074u, 70u, 69u, 5140u, 27u, 71u, 89u, 5144u, 74u, 66u, 539u, 1051u, 67u, 2075u, 1563u, 92u, 144u, 2074u, 148u, 2070u, 152u, 2075u, 81u, 2071u, 70u, 85u, 27u, 71u, 89u, 539u, 74u, 82u, 1051u, 83u, 1563u, 92u, 128u, 2071u, 2074u, 132u, 1051u, 2070u, 136u, 1563u, 2075u, 97u, 70u, 85u, 27u, 71u, 89u, 539u, 74u, 98u, 99u, 92u, 128u, 27u, 2074u, 132u, 2582u, 2070u, 136u, 2583u, 2075u, 81u, 2071u, 70u, 101u, 71u, 89u, 539u, 74u, 82u, 1051u, 83u, 1563u, 92u, 128u, 539u, 2074u, 132u, 2586u, 2070u, 136u, 2587u, 2075u, 81u, 2071u, 70u, 85u, 27u, 71u, 105u, 74u, 82u, 1051u, 83u, 1563u, 92u, 96u, 2071u, 27u, 539u, 2074u, 100u, 2582u, 2586u, 1051u, 2070u, 104u, 2583u, 1563u, 2587u, 2075u, 97u, 70u, 101u, 71u, 105u, 74u, 98u, 99u, 92u, 160u, 164u, 168u, 161u, 165u, 169u, 160u, 164u, 168u, 145u, 5136u, 149u, 5140u, 153u, 5144u, 160u, 164u, 168u, 129u, 21536u, 133u, 21540u, 137u, 21544u, 160u, 164u, 168u, 65u, 21600u, 69u, 21604u, 73u, 21608u); +const int BC6_BITS_W[14] = int[14](10, 7, 11, 11, 11, 9, 8, 8, 8, 6, 10, 11, 12, 16); +const int BC6_BITS_DR[14] = int[14](5, 6, 5, 4, 4, 5, 6, 5, 5, 6, 10, 9, 8, 4); +const int BC6_BITS_DG[14] = int[14](5, 6, 4, 5, 4, 5, 5, 6, 5, 6, 10, 9, 8, 4); +const int BC6_BITS_DB[14] = int[14](5, 6, 4, 4, 5, 5, 5, 5, 6, 6, 10, 9, 8, 4); +const uint BC7_PART2[64] = uint[64](1347440720u, 1077952576u, 1414812756u, 1414549568u, 1346387968u, 1431589968u, 1431588928u, 1414545408u, 1346371584u, 1431655504u, 1431584768u, 1413480448u, 1431655488u, 1431633920u, 1431655680u, 1426063360u, 1427439872u, 16468u, 352387072u, 4214868u, 16464u, 352649472u, 83951616u, 1079005268u, 4210768u, 83951872u, 336860180u, 85202000u, 18175040u, 5592320u, 352403540u, 88162640u, 1145324612u, 1426085120u, 289673540u, 84234320u, 89130320u, 286344260u, 1091846420u, 1141969220u, 352669780u, 17125440u, 84152400u, 88428880u, 339820820u, 1342506320u, 1094784020u, 1315840u, 267524u, 1070096u, 273944576u, 68486144u, 1346438420u, 1090851920u, 88166420u, 335888720u, 1090848020u, 1095782420u, 1073812820u, 1410662720u, 1347441920u, 5591120u, 353701904u, 1414792196u); +const uint BC7_PART2_ANCHOR[64] = uint[64](15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 15u, 2u, 8u, 2u, 2u, 8u, 8u, 15u, 2u, 8u, 2u, 2u, 8u, 8u, 2u, 2u, 15u, 15u, 6u, 8u, 2u, 8u, 15u, 15u, 2u, 8u, 2u, 2u, 2u, 15u, 15u, 6u, 6u, 2u, 6u, 8u, 15u, 15u, 2u, 2u, 15u, 15u, 15u, 15u, 15u, 2u, 2u, 15u); +const uint BC7_PART3[64] = uint[64](2858963024u, 1784303680u, 1515864576u, 1414570152u, 2779054080u, 2694860880u, 1431675040u, 1515868240u, 2857697280u, 2857719040u, 2863289600u, 2425393296u, 2492765332u, 2762253476u, 2846200912u, 705315408u, 2777960512u, 172118100u, 2779096320u, 1436590240u, 2829603924u, 1785348160u, 2762231808u, 437912832u, 5285028u, 2862977168u, 342452500u, 1768494080u, 2693105056u, 2860651540u, 1352967248u, 1784283648u, 2846195712u, 1351655592u, 2829094992u, 606348324u, 11162880u, 613566756u, 608801316u, 1352993360u, 1342874960u, 2863285316u, 1717960704u, 2778768800u, 1352683680u, 1764256040u, 1152035396u, 1717986816u, 2856600644u, 1420317864u, 2508232064u, 2526451200u, 2824098984u, 2157286784u, 2853442580u, 2526412800u, 2863272980u, 2689618080u, 2695210400u, 2516582400u, 1082146944u, 2846402984u, 2863311428u, 709513812u); +const uint BC7_PART3_ANCHOR[64] = uint[64](243u, 131u, 143u, 63u, 248u, 243u, 63u, 143u, 248u, 248u, 246u, 246u, 246u, 245u, 243u, 131u, 243u, 131u, 248u, 63u, 243u, 131u, 246u, 138u, 53u, 248u, 104u, 166u, 248u, 245u, 175u, 143u, 248u, 63u, 243u, 165u, 166u, 138u, 152u, 175u, 111u, 243u, 143u, 245u, 63u, 111u, 111u, 143u, 243u, 63u, 245u, 245u, 245u, 248u, 245u, 250u, 245u, 250u, 248u, 253u, 63u, 252u, 243u, 131u); +const int BC7_BITS_RGB[8] = int[8](4, 6, 5, 7, 5, 7, 7, 5); +const int BC7_BITS_A[8] = int[8](0, 0, 0, 0, 6, 8, 7, 5); diff --git a/tools/vkbridge/shaders/build.sh b/tools/vkbridge/shaders/build.sh new file mode 100755 index 000000000..b4a217cc1 --- /dev/null +++ b/tools/vkbridge/shaders/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Compiles the BCn decoder variants into app/src/main/cpp/vkbridge/bc_spv.h (committed, so a build +# needs no shader compiler). Needs glslangValidator; regenerates bc_tables.glsl first. +set -eu +cd "$(dirname "$0")" +python3 gen_bc_tables.py +out=../../../app/src/main/cpp/vkbridge/bc_spv.h +tmp=$(mktemp -d) +{ + echo "/* Generated by tools/vkbridge/shaders/build.sh from bc_decode.comp - do not edit. */" + echo "#pragma once" + echo "#include " +} > "$out" +for f in BC1 BC2 BC3 BC4 BC5 BC6H BC7; do + name=spv_$(echo $f | tr A-Z a-z) + glslangValidator -V --target-env vulkan1.1 -DFMT_$f --vn "$name" -o "$tmp/$name.h" bc_decode.comp >/dev/null + grep -v '^ *//\|#pragma once' "$tmp/$name.h" | sed 's/^const uint32_t/static const uint32_t/' >> "$out" +done +rm -rf "$tmp" +echo "wrote $out" diff --git a/tools/vkbridge/shaders/gen_bc_tables.py b/tools/vkbridge/shaders/gen_bc_tables.py new file mode 100644 index 000000000..040f02429 --- /dev/null +++ b/tools/vkbridge/shaders/gen_bc_tables.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-3.0-or-later +""" +Generates bc_tables.glsl from bcdec.h (third_party/bcdec, MIT/Unlicense): the BC6H per-mode bit +layouts (as a table instead of 14 hand-written cases) and the BC6H/BC7 partition and anchor tables. + +BC6H layout entry (uint): target (r0..r3 = 0..3, g0..g3 = 4..7, b0..b3 = 8..11, partition = 12) +| nbits << 4 | shift << 9 | reversed << 14. +""" +import os +import re + +here = os.path.dirname(os.path.abspath(__file__)) +src = open(os.path.join(here, '..', 'third_party', 'bcdec', 'bcdec.h')).read() + +# ---- BC6H modes +bc6 = src[src.rindex('BCDECDEF void bcdec_bc6h_half('):src.rindex('BCDECDEF void bcdec_bc6h_float(')] +cases = re.findall(r'case (0b[01]+): \{(.*?)\} break;', bc6, re.S) +comp = {'r': 0, 'g': 4, 'b': 8} +modes = {} +for code, body in cases: + entries = [] + mode_idx = None + body = re.sub(r'/\*.*?\*/', '', body, flags=re.S) + for line in body.split('\n'): + line = line.split('/*')[0].strip() + if not line: + continue + m = re.match(r'mode = (\d+);', line) + if m: + mode_idx = int(m.group(1)) + continue + m = re.match(r'partition = bcdec__bitstream_read_bits\(&bstream, (\d+)\);', line) + if m: + entries.append((12, int(m.group(1)), 0, 0)) + continue + m = re.match(r'([rgb])\[(\d)\] \|= bcdec__bitstream_read_bit(s_r|s)?\(&bstream(?:, (\d+))?\)(?: << (\d+))?;', line) + if not m: + raise SystemExit(f'unparsed BC6H line: {line}') + c, i, kind, n, sh = m.groups() + nbits = int(n) if n else 1 + entries.append((comp[c] + int(i), nbits, int(sh) if sh else 0, 1 if kind == 's_r' else 0)) + modes[int(code, 2)] = (mode_idx, entries) + +out = [] +out.append('/* Generated by gen_bc_tables.py from bcdec.h (MIT/Unlicense, Sergii Kudlai) - do not edit. */') +code_to_mode = [-1] * 32 +offsets, flat = [0] * 14, [] +for code in sorted(modes, key=lambda c: modes[c][0]): + idx, entries = modes[code] + code_to_mode[code] = idx + offsets[idx] = len(flat) + for t, n, sh, rv in entries: + flat.append(t | (n << 4) | (sh << 9) | (rv << 14)) +offsets.append(len(flat)) +out.append(f'const int BC6_MODE_OF_CODE[32] = int[32]({", ".join(map(str, code_to_mode))});') +out.append(f'const uint BC6_LAYOUT_START[15] = uint[15]({", ".join(str(o) + "u" for o in offsets)});') +out.append(f'const uint BC6_LAYOUT[{len(flat)}] = uint[{len(flat)}]({", ".join(str(v) + "u" for v in flat)});') + +def actual_bits(fn_src, rows): + m = re.search(r'static char actual_bits_count\[\d\]\[\d+\] = \{(.*?)\};', fn_src, re.S) + return [list(map(int, re.findall(r'-?\d+', r.split('/*')[0]))) for r in re.findall(r'\{([^{}]*)\}', m.group(1))][:rows] + +ab6 = actual_bits(bc6, 4) +for k, name in enumerate(['W', 'DR', 'DG', 'DB']): + out.append(f'const int BC6_BITS_{name}[14] = int[14]({", ".join(map(str, ab6[k]))});') + +# ---- partition tables (BC7's 2- and 3-subset; BC6H uses the first 32 of the 2-subset table) +bc7 = src[src.rindex('BCDECDEF void bcdec_bc7('):] +table = bc7[bc7.index('partition_sets[2][64][4][4] = {'):bc7.index('static int aWeight2')] +rows = re.findall(r'\{ \{([^}]*)\}, \{([^}]*)\}, \{([^}]*)\}, \{([^}]*)\} \}', table) +assert len(rows) == 128, len(rows) +for name, part in (('BC7_PART2', rows[:64]), ('BC7_PART3', rows[64:])): + packed, anchors = [], [] + for r in part: + vals = [int(v) for row in r for v in row.split(',')] + word, anc = 0, [0, 0, 0] + for t, v in enumerate(vals): + word |= (v & 3) << (2 * t) + if v & 0x80: + anc[v & 3] = t + packed.append(word) + anchors.append(anc[1] | (anc[2] << 4)) + out.append(f'const uint {name}[64] = uint[64]({", ".join(str(p) + "u" for p in packed)});') + out.append(f'const uint {name}_ANCHOR[64] = uint[64]({", ".join(str(a) + "u" for a in anchors)});') +ab7 = actual_bits(bc7, 2) +out.append(f'const int BC7_BITS_RGB[8] = int[8]({", ".join(map(str, ab7[0]))});') +out.append(f'const int BC7_BITS_A[8] = int[8]({", ".join(map(str, ab7[1]))});') + +open(os.path.join(here, 'bc_tables.glsl'), 'w').write('\n'.join(out) + '\n') +print(f'bc_tables.glsl: {len(flat)} BC6H layout entries, {len(modes)} modes') diff --git a/tools/vkbridge/tests/bcn_check.c b/tools/vkbridge/tests/bcn_check.c new file mode 100644 index 000000000..d6da603a4 --- /dev/null +++ b/tools/vkbridge/tests/bcn_check.c @@ -0,0 +1,319 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * bcn_check: uploads random blocks of every BC format (every BC6H and BC7 mode forced in turn), + * blits the texture to RGBA32F and compares each texel with bcdec's CPU decode. Run it natively + * (the GPU's own BC decoder) and through the bridge with BC emulated. + */ +#define VK_NO_PROTOTYPES +#include + +#include +#include +#include +#include +#include + +#define BCDEC_IMPLEMENTATION +#define BCDEC_BC4BC5_PRECISE +#include "../third_party/bcdec/bcdec.h" + +#define TEX 64 /* 16x16 blocks */ + +static PFN_vkGetInstanceProcAddr gipa; +static VkInstance inst; +static VkPhysicalDevice pd; +static VkDevice dev; +static VkQueue queue; +static VkCommandPool pool; +static VkPhysicalDeviceMemoryProperties mp; +#define F(n) static PFN_##n n +F(vkCreateInstance); F(vkEnumeratePhysicalDevices); F(vkGetPhysicalDeviceMemoryProperties); F(vkCreateDevice); +F(vkGetDeviceProcAddr); F(vkGetPhysicalDeviceFeatures); F(vkGetPhysicalDeviceFormatProperties); F(vkGetDeviceQueue); +F(vkCreateCommandPool); F(vkAllocateCommandBuffers); F(vkBeginCommandBuffer); F(vkEndCommandBuffer); F(vkQueueSubmit); +F(vkQueueWaitIdle); F(vkCreateBuffer); F(vkGetBufferMemoryRequirements); F(vkAllocateMemory); F(vkBindBufferMemory); +F(vkMapMemory); F(vkCreateImage); F(vkGetImageMemoryRequirements); F(vkBindImageMemory); F(vkCmdPipelineBarrier); +F(vkCmdCopyBufferToImage); F(vkCmdBlitImage); F(vkCmdCopyImageToBuffer); F(vkDestroyImage); F(vkDestroyBuffer); +F(vkFreeMemory); F(vkGetPhysicalDeviceProperties); +#undef F + +static uint32_t find_type(uint32_t bits, VkMemoryPropertyFlags want) +{ + for (uint32_t i = 0; i < mp.memoryTypeCount; i++) + if ((bits & (1u << i)) && (mp.memoryTypes[i].propertyFlags & want) == want) return i; + for (uint32_t i = 0; i < mp.memoryTypeCount; i++) + if (bits & (1u << i)) return i; + return 0; +} + +static VkDeviceMemory bind_mem(VkMemoryRequirements r, VkMemoryPropertyFlags want) +{ + VkMemoryAllocateInfo ai = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, r.size, find_type(r.memoryTypeBits, want)}; + VkDeviceMemory m; + vkAllocateMemory(dev, &ai, NULL, &m); + return m; +} + +static uint64_t rng = 0x9E3779B97F4A7C15ull; +static uint32_t rnd(void) +{ + rng ^= rng << 13; + rng ^= rng >> 7; + rng ^= rng << 17; + return (uint32_t)(rng >> 16); +} + +/* Random block; for BC6H/BC7 the mode is chosen by `mode` (cycled per block). */ +static void make_block(VkFormat f, uint8_t *b, int bytes, int mode) +{ + for (int i = 0; i < bytes; i++) b[i] = (uint8_t)rnd(); + if (f == VK_FORMAT_BC7_UNORM_BLOCK) { + int m = mode % 8; + b[0] = (uint8_t)((b[0] & ~((1u << (m + 1)) - 1)) | (1u << m)); + } else if (f == VK_FORMAT_BC6H_UFLOAT_BLOCK || f == VK_FORMAT_BC6H_SFLOAT_BLOCK) { + static const uint8_t codes[14] = {0, 1, 2, 6, 10, 14, 18, 22, 26, 30, 3, 7, 11, 15}; + int c = codes[mode % 14]; + if (c < 2) b[0] = (uint8_t)((b[0] & ~3u) | c); + else b[0] = (uint8_t)((b[0] & ~31u) | c); + } +} + +static float h2f(uint16_t h) +{ + uint32_t s = (h >> 15) & 1, e = (h >> 10) & 31, m = h & 1023; + float v; + if (e == 0) v = ldexpf((float)m, -24); + else if (e == 31) v = m ? NAN : INFINITY; + else v = ldexpf((float)(m | 1024), (int)e - 25); + return s ? -v : v; +} + +/* Reference texel (RGBA float) at (x, y) of the texture made from `blocks`. */ +static void reference(VkFormat f, const uint8_t *blocks, int bytes, int x, int y, float out[4]) +{ + const uint8_t *b = blocks + ((y / 4) * (TEX / 4) + (x / 4)) * bytes; + int tx = x & 3, ty = y & 3; + uint8_t px8[16 * 4]; + int8_t spx[16 * 2]; + uint16_t px16[16 * 3]; + out[0] = out[1] = out[2] = 0; + out[3] = 1; + switch (f) { + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: bcdec_bc1(b, px8, 16); break; + case VK_FORMAT_BC2_UNORM_BLOCK: bcdec_bc2(b, px8, 16); break; + case VK_FORMAT_BC3_UNORM_BLOCK: bcdec_bc3(b, px8, 16); break; + case VK_FORMAT_BC7_UNORM_BLOCK: bcdec_bc7(b, px8, 16); break; + case VK_FORMAT_BC4_UNORM_BLOCK: bcdec_bc4(b, px8, 4, 0); out[0] = px8[ty * 4 + tx] / 255.0f; return; + case VK_FORMAT_BC4_SNORM_BLOCK: bcdec_bc4(b, spx, 4, 1); out[0] = fmaxf(spx[ty * 4 + tx] / 127.0f, -1.0f); return; + case VK_FORMAT_BC5_UNORM_BLOCK: + bcdec_bc5(b, px8, 8, 0); + out[0] = px8[(ty * 4 + tx) * 2] / 255.0f; + out[1] = px8[(ty * 4 + tx) * 2 + 1] / 255.0f; + return; + case VK_FORMAT_BC5_SNORM_BLOCK: + bcdec_bc5(b, spx, 8, 1); + out[0] = fmaxf(spx[(ty * 4 + tx) * 2] / 127.0f, -1.0f); + out[1] = fmaxf(spx[(ty * 4 + tx) * 2 + 1] / 127.0f, -1.0f); + return; + case VK_FORMAT_BC6H_UFLOAT_BLOCK: + case VK_FORMAT_BC6H_SFLOAT_BLOCK: + bcdec_bc6h_half(b, px16, 12, f == VK_FORMAT_BC6H_SFLOAT_BLOCK); + for (int c = 0; c < 3; c++) out[c] = h2f(px16[(ty * 4 + tx) * 3 + c]); + return; + default: return; + } + for (int c = 0; c < 4; c++) out[c] = px8[(ty * 4 + tx) * 4 + c] / 255.0f; +} + +static VkCommandBuffer begin(void) +{ + VkCommandBufferAllocateInfo ai = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL, pool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1}; + VkCommandBuffer cb; + vkAllocateCommandBuffers(dev, &ai, &cb); + VkCommandBufferBeginInfo bi = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, NULL}; + vkBeginCommandBuffer(cb, &bi); + return cb; +} + +static void barrier(VkCommandBuffer cb, VkImage img, VkImageLayout from, VkImageLayout to) +{ + VkImageMemoryBarrier b = {VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, VK_ACCESS_MEMORY_WRITE_BIT, + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, from, to, VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, img, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; + vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, NULL, 0, NULL, 1, &b); +} + +static int failures; + +static void test_format(VkFormat f, const char *name, float tol) +{ + int bytes = (f == VK_FORMAT_BC1_RGBA_UNORM_BLOCK || f == VK_FORMAT_BC4_UNORM_BLOCK || f == VK_FORMAT_BC4_SNORM_BLOCK) ? 8 : 16; + int nblocks = (TEX / 4) * (TEX / 4); + uint8_t *blocks = malloc((size_t)nblocks * bytes); + for (int i = 0; i < nblocks; i++) make_block(f, blocks + i * bytes, bytes, i); + VkFormatProperties fp; + vkGetPhysicalDeviceFormatProperties(pd, f, &fp); + if (!(fp.optimalTilingFeatures & VK_FORMAT_FEATURE_BLIT_SRC_BIT)) { + printf("SKIP %s: no blit from this format\n", name); + free(blocks); + return; + } + /* staging */ + VkBufferCreateInfo bci = {VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0, (VkDeviceSize)TEX * TEX * 16, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_SHARING_MODE_EXCLUSIVE, 0, NULL}; + VkBuffer up, down; + vkCreateBuffer(dev, &bci, NULL, &up); + vkCreateBuffer(dev, &bci, NULL, &down); + VkMemoryRequirements r; + vkGetBufferMemoryRequirements(dev, up, &r); + VkDeviceMemory upm = bind_mem(r, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + vkBindBufferMemory(dev, up, upm, 0); + vkGetBufferMemoryRequirements(dev, down, &r); + VkDeviceMemory downm = bind_mem(r, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + vkBindBufferMemory(dev, down, downm, 0); + void *upp, *downp; + vkMapMemory(dev, upm, 0, VK_WHOLE_SIZE, 0, &upp); + vkMapMemory(dev, downm, 0, VK_WHOLE_SIZE, 0, &downp); + /* upload at an odd 16-byte offset with a padded row, to exercise the decoder's addressing */ + const VkDeviceSize off = 48; + const uint32_t row_tex = TEX + 8; + memset(upp, 0xcd, (size_t)TEX * TEX * 16); + for (int by = 0; by < TEX / 4; by++) + memcpy((uint8_t *)upp + off + (size_t)by * (row_tex / 4) * bytes, blocks + (size_t)by * (TEX / 4) * bytes, (size_t)(TEX / 4) * bytes); + /* images */ + VkImageCreateInfo ici = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, NULL, 0, VK_IMAGE_TYPE_2D, f, {TEX, TEX, 1}, 1, 1, VK_SAMPLE_COUNT_1_BIT, + VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_SHARING_MODE_EXCLUSIVE, 0, NULL, VK_IMAGE_LAYOUT_UNDEFINED}; + VkImage bc, rgba; + if (vkCreateImage(dev, &ici, NULL, &bc) != VK_SUCCESS) { + printf("FAIL %s: cannot create the image\n", name); + failures++; + return; + } + VkMemoryRequirements ir; + vkGetImageMemoryRequirements(dev, bc, &ir); + VkDeviceMemory bcm = bind_mem(ir, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + vkBindImageMemory(dev, bc, bcm, 0); + ici.format = VK_FORMAT_R32G32B32A32_SFLOAT; + vkCreateImage(dev, &ici, NULL, &rgba); + vkGetImageMemoryRequirements(dev, rgba, &ir); + VkDeviceMemory rgbam = bind_mem(ir, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + vkBindImageMemory(dev, rgba, rgbam, 0); + VkCommandBuffer cb = begin(); + barrier(cb, bc, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + VkBufferImageCopy c = {off, row_tex, 0, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {TEX, TEX, 1}}; + vkCmdCopyBufferToImage(cb, up, bc, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &c); + barrier(cb, bc, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + barrier(cb, rgba, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + VkImageBlit bl = {{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {{0, 0, 0}, {TEX, TEX, 1}}, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {{0, 0, 0}, {TEX, TEX, 1}}}; + vkCmdBlitImage(cb, bc, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, rgba, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &bl, VK_FILTER_NEAREST); + barrier(cb, rgba, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + VkBufferImageCopy rb = {0, 0, 0, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {TEX, TEX, 1}}; + vkCmdCopyImageToBuffer(cb, rgba, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, down, 1, &rb); + VkMemoryBarrier mb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER, NULL, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT}; + vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &mb, 0, NULL, 0, NULL); + vkEndCommandBuffer(cb); + VkSubmitInfo si = {VK_STRUCTURE_TYPE_SUBMIT_INFO, NULL, 0, NULL, NULL, 1, &cb, 0, NULL}; + vkQueueSubmit(queue, 1, &si, VK_NULL_HANDLE); + vkQueueWaitIdle(queue); + const float *got = downp; + int bad = 0, nan_skip = 0; + float worst = 0; + int wx = 0, wy = 0, wc = 0; + for (int y = 0; y < TEX; y++) + for (int x = 0; x < TEX; x++) { + float want[4]; + reference(f, blocks, bytes, x, y, want); + for (int ch = 0; ch < 4; ch++) { + float g = got[(y * TEX + x) * 4 + ch], w = want[ch]; + if (isnan(w) || isinf(w)) { + nan_skip++; + continue; + } + float d = fabsf(g - w); + float lim = (f == VK_FORMAT_BC6H_UFLOAT_BLOCK || f == VK_FORMAT_BC6H_SFLOAT_BLOCK) ? tol * fmaxf(1.0f, fabsf(w)) : tol; + if (!(d <= lim)) { + bad++; + if (!(d <= worst)) { + worst = d; + wx = x; + wy = y; + wc = ch; + } + } + } + } + if (bad) { + float want[4]; + reference(f, blocks, bytes, wx, wy, want); + printf("FAIL %s: %d of %d values differ from bcdec; worst %.4f at (%d,%d) ch %d: got %g want %g (block mode byte 0x%02x)\n", name, bad, + TEX * TEX * 4, worst, wx, wy, wc, got[(wy * TEX + wx) * 4 + wc], want[wc], + blocks[((wy / 4) * (TEX / 4) + (wx / 4)) * bytes]); + failures++; + } else { + printf("PASS %s: %d texels match bcdec%s\n", name, TEX * TEX, nan_skip ? " (inf/nan references skipped)" : ""); + } + vkDestroyImage(dev, bc, NULL); + vkDestroyImage(dev, rgba, NULL); + vkDestroyBuffer(dev, up, NULL); + vkDestroyBuffer(dev, down, NULL); + vkFreeMemory(dev, upm, NULL); + vkFreeMemory(dev, downm, NULL); + vkFreeMemory(dev, bcm, NULL); + vkFreeMemory(dev, rgbam, NULL); + free(blocks); +} + +int main(int argc, char **argv) +{ + int gpu = argc > 1 ? atoi(argv[1]) : 0; + void *lib = dlopen("libvulkan.so.1", RTLD_NOW); + gipa = (PFN_vkGetInstanceProcAddr)dlsym(lib, "vkGetInstanceProcAddr"); +#define G(n) n = (PFN_##n)gipa(inst, #n) + G(vkCreateInstance); + VkApplicationInfo app = {VK_STRUCTURE_TYPE_APPLICATION_INFO, NULL, "bcn_check", 1, NULL, 0, VK_API_VERSION_1_1}; + VkInstanceCreateInfo ici = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, NULL, 0, &app, 0, NULL, 0, NULL}; + if (vkCreateInstance(&ici, NULL, &inst)) return 2; + G(vkEnumeratePhysicalDevices); G(vkGetPhysicalDeviceMemoryProperties); G(vkCreateDevice); G(vkGetDeviceProcAddr); + G(vkGetPhysicalDeviceFeatures); G(vkGetPhysicalDeviceFormatProperties); G(vkGetPhysicalDeviceProperties); + uint32_t n = 8; + VkPhysicalDevice pds[8]; + vkEnumeratePhysicalDevices(inst, &n, pds); + pd = pds[gpu]; + VkPhysicalDeviceProperties props; + vkGetPhysicalDeviceProperties(pd, &props); + VkPhysicalDeviceFeatures feats; + vkGetPhysicalDeviceFeatures(pd, &feats); + printf("%s, textureCompressionBC=%u\n", props.deviceName, feats.textureCompressionBC); + if (!feats.textureCompressionBC) return 1; + vkGetPhysicalDeviceMemoryProperties(pd, &mp); + float prio = 1; + VkDeviceQueueCreateInfo qci = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, NULL, 0, 0, 1, &prio}; + VkPhysicalDeviceFeatures en = {0}; + en.textureCompressionBC = VK_TRUE; + VkDeviceCreateInfo dci = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, NULL, 0, 1, &qci, 0, NULL, 0, NULL, &en}; + if (vkCreateDevice(pd, &dci, NULL, &dev)) return 2; +#undef G +#define G(n) n = (PFN_##n)vkGetDeviceProcAddr(dev, #n) + G(vkGetDeviceQueue); G(vkCreateCommandPool); G(vkAllocateCommandBuffers); G(vkBeginCommandBuffer); G(vkEndCommandBuffer); + G(vkQueueSubmit); G(vkQueueWaitIdle); G(vkCreateBuffer); G(vkGetBufferMemoryRequirements); G(vkAllocateMemory); + G(vkBindBufferMemory); G(vkMapMemory); G(vkCreateImage); G(vkGetImageMemoryRequirements); G(vkBindImageMemory); + G(vkCmdPipelineBarrier); G(vkCmdCopyBufferToImage); G(vkCmdBlitImage); G(vkCmdCopyImageToBuffer); G(vkDestroyImage); + G(vkDestroyBuffer); G(vkFreeMemory); +#undef G + vkGetDeviceQueue(dev, 0, 0, &queue); + VkCommandPoolCreateInfo pci = {VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, NULL, 0, 0}; + vkCreateCommandPool(dev, &pci, NULL, &pool); + float u8 = 2.5f / 255.0f; /* hardware decoders round differently from bcdec by up to 2 */ + test_format(VK_FORMAT_BC1_RGBA_UNORM_BLOCK, "BC1", u8); + test_format(VK_FORMAT_BC2_UNORM_BLOCK, "BC2", u8); + test_format(VK_FORMAT_BC3_UNORM_BLOCK, "BC3", u8); + test_format(VK_FORMAT_BC4_UNORM_BLOCK, "BC4 unorm", u8); + test_format(VK_FORMAT_BC4_SNORM_BLOCK, "BC4 snorm", 2.5f / 127.0f); + test_format(VK_FORMAT_BC5_UNORM_BLOCK, "BC5 unorm", u8); + test_format(VK_FORMAT_BC5_SNORM_BLOCK, "BC5 snorm", 2.5f / 127.0f); + test_format(VK_FORMAT_BC6H_UFLOAT_BLOCK, "BC6H ufloat (all 14 modes)", 0.002f); + test_format(VK_FORMAT_BC6H_SFLOAT_BLOCK, "BC6H sfloat (all 14 modes)", 0.002f); + test_format(VK_FORMAT_BC7_UNORM_BLOCK, "BC7 (all 8 modes)", u8); + printf("%s\n", failures ? "FAILED" : "OK"); + return failures ? 1 : 0; +} diff --git a/tools/vkbridge/tests/d3d11_bench.c b/tools/vkbridge/tests/d3d11_bench.c new file mode 100644 index 000000000..122cfc214 --- /dev/null +++ b/tools/vkbridge/tests/d3d11_bench.c @@ -0,0 +1,116 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * d3d11_bench.exe [draws] [frames]: a game-like D3D11 frame - many small draws, each with a + * Map(WRITE_DISCARD) constant buffer update and its own texture/sampler binding - rendered + * offscreen and flushed every frame (with a readback every 30th, so the GPU cannot fall behind). + * Prints milliseconds per frame: the bridge's overhead shows as the difference to native. + */ +#define COBJMACROS +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + int draws = argc > 1 ? atoi(argv[1]) : 1000; + int frames = argc > 2 ? atoi(argv[2]) : 300; + ID3D11Device *dev; + ID3D11DeviceContext *ctx; + D3D_FEATURE_LEVEL fl = D3D_FEATURE_LEVEL_11_0; + if (FAILED(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &fl, 1, D3D11_SDK_VERSION, &dev, NULL, &ctx))) { + printf("no device\n"); + return 1; + } + const char *vs = "cbuffer C : register(b0) { float4 pos; float4 col; };" + "struct O { float4 p : SV_Position; float4 c : COLOR; float2 uv : TEXCOORD; };" + "O main(uint id : SV_VertexID) { O o; float2 t = float2((id << 1) & 2, id & 2) * 0.05;" + "o.p = float4(pos.xy + t, 0, 1); o.c = col; o.uv = t * 20; return o; }"; + const char *ps = "Texture2D t : register(t0); SamplerState s : register(s0);" + "float4 main(float4 p : SV_Position, float4 c : COLOR, float2 uv : TEXCOORD) : SV_Target { return c * t.Sample(s, uv); }"; + ID3DBlob *vb, *pb; + D3DCompile(vs, strlen(vs), NULL, NULL, NULL, "main", "vs_5_0", 0, 0, &vb, NULL); + D3DCompile(ps, strlen(ps), NULL, NULL, NULL, "main", "ps_5_0", 0, 0, &pb, NULL); + ID3D11VertexShader *vsh; + ID3D11PixelShader *psh; + ID3D11Device_CreateVertexShader(dev, ID3D10Blob_GetBufferPointer(vb), ID3D10Blob_GetBufferSize(vb), NULL, &vsh); + ID3D11Device_CreatePixelShader(dev, ID3D10Blob_GetBufferPointer(pb), ID3D10Blob_GetBufferSize(pb), NULL, &psh); + D3D11_BUFFER_DESC bd = {32, D3D11_USAGE_DYNAMIC, D3D11_BIND_CONSTANT_BUFFER, D3D11_CPU_ACCESS_WRITE, 0, 0}; + ID3D11Buffer *cb; + ID3D11Device_CreateBuffer(dev, &bd, NULL, &cb); + /* 8 small BC1 textures (block-compressed like a game's) */ + ID3D11ShaderResourceView *srv[8]; + uint8_t blocks[16 * 8]; + for (int i = 0; i < (int)sizeof(blocks); i++) blocks[i] = (uint8_t)(i * 37 + 11); + for (int i = 0; i < 8; i++) { + D3D11_TEXTURE2D_DESC td = {16, 16, 1, 1, DXGI_FORMAT_BC1_UNORM, {1, 0}, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0}; + D3D11_SUBRESOURCE_DATA init = {blocks, 32, 0}; + ID3D11Texture2D *t; + ID3D11Device_CreateTexture2D(dev, &td, &init, &t); + ID3D11Device_CreateShaderResourceView(dev, (ID3D11Resource *)t, NULL, &srv[i]); + } + D3D11_SAMPLER_DESC sd = {D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_WRAP, D3D11_TEXTURE_ADDRESS_WRAP, D3D11_TEXTURE_ADDRESS_WRAP, + 0, 1, D3D11_COMPARISON_NEVER, {0}, 0, D3D11_FLOAT32_MAX}; + ID3D11SamplerState *smp; + ID3D11Device_CreateSamplerState(dev, &sd, &smp); + D3D11_TEXTURE2D_DESC rd = {1280, 720, 1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, {1, 0}, D3D11_USAGE_DEFAULT, D3D11_BIND_RENDER_TARGET, 0, 0}; + ID3D11Texture2D *rt, *st; + ID3D11Device_CreateTexture2D(dev, &rd, NULL, &rt); + rd.Usage = D3D11_USAGE_STAGING; + rd.BindFlags = 0; + rd.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + rd.Width = rd.Height = 16; + ID3D11Device_CreateTexture2D(dev, &rd, NULL, &st); + ID3D11RenderTargetView *rtv; + ID3D11Device_CreateRenderTargetView(dev, (ID3D11Resource *)rt, NULL, &rtv); + D3D11_VIEWPORT vp = {0, 0, 1280, 720, 0, 1}; + LARGE_INTEGER f, t0, t1; + QueryPerformanceFrequency(&f); + double total = 0, worst = 0; + for (int fr = 0; fr < frames + 10; fr++) { + QueryPerformanceCounter(&t0); + float clear[4] = {0.1f, 0.1f, 0.1f, 1}; + ID3D11DeviceContext_OMSetRenderTargets(ctx, 1, &rtv, NULL); + ID3D11DeviceContext_RSSetViewports(ctx, 1, &vp); + ID3D11DeviceContext_ClearRenderTargetView(ctx, rtv, clear); + ID3D11DeviceContext_IASetPrimitiveTopology(ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + ID3D11DeviceContext_VSSetShader(ctx, vsh, NULL, 0); + ID3D11DeviceContext_PSSetShader(ctx, psh, NULL, 0); + ID3D11DeviceContext_VSSetConstantBuffers(ctx, 0, 1, &cb); + ID3D11DeviceContext_PSSetSamplers(ctx, 0, 1, &smp); + for (int d = 0; d < draws; d++) { + D3D11_MAPPED_SUBRESOURCE m; + ID3D11DeviceContext_Map(ctx, (ID3D11Resource *)cb, 0, D3D11_MAP_WRITE_DISCARD, 0, &m); + float *p = m.pData; + p[0] = -1 + 2.0f * (d % 40) / 40; + p[1] = -1 + 2.0f * ((d / 40) % 40) / 40; + p[4] = (d & 1) ? 1.0f : 0.5f; + p[5] = (d & 2) ? 1.0f : 0.5f; + p[6] = (d & 4) ? 1.0f : 0.5f; + p[7] = 1; + ID3D11DeviceContext_Unmap(ctx, (ID3D11Resource *)cb, 0); + ID3D11DeviceContext_PSSetShaderResources(ctx, 0, 1, &srv[d & 7]); + ID3D11DeviceContext_Draw(ctx, 3, 0); + } + if (fr % 30 == 29) { + D3D11_BOX box = {0, 0, 0, 16, 16, 1}; + ID3D11DeviceContext_CopySubresourceRegion(ctx, (ID3D11Resource *)st, 0, 0, 0, 0, (ID3D11Resource *)rt, 0, &box); + D3D11_MAPPED_SUBRESOURCE m; + ID3D11DeviceContext_Map(ctx, (ID3D11Resource *)st, 0, D3D11_MAP_READ, 0, &m); + ID3D11DeviceContext_Unmap(ctx, (ID3D11Resource *)st, 0); + } else { + ID3D11DeviceContext_Flush(ctx); + } + QueryPerformanceCounter(&t1); + double ms = (double)(t1.QuadPart - t0.QuadPart) * 1000.0 / (double)f.QuadPart; + if (fr >= 10) { + total += ms; + if (ms > worst) worst = ms; + } + } + printf("%d draws/frame: %.2f ms/frame average (%.0f fps), worst %.2f ms\n", draws, total / frames, 1000.0 * frames / total, worst); + return 0; +} diff --git a/tools/vkbridge/tests/d3d11_check.c b/tools/vkbridge/tests/d3d11_check.c new file mode 100644 index 000000000..777676abc --- /dev/null +++ b/tools/vkbridge/tests/d3d11_check.c @@ -0,0 +1,366 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * d3d11_check.exe - checks the D3D11 features the Mali bridge emulates, through DXVK, by reading + * back pixels: BC1/BC3/BC4/BC5/BC7 sampling, SV_ClipDistance, instance data step rates + * (vertex attribute divisor), plus a plain clear and draw. Prints PASS/FAIL lines; exit 0 = all. + * + * Built with mingw-w64: x86_64-w64-mingw32-gcc -O2 d3d11_check.c -o d3d11_check.exe -ld3d11 -ld3dcompiler_47 -ldxgi + */ +#define COBJMACROS +#define INITGUID +#include +#include +#include +#include +#include +#include + +static ID3D11Device *dev; +static ID3D11DeviceContext *ctx; +static ID3D11Texture2D *rt, *staging; +static ID3D11RenderTargetView *rtv; +static int failures, checks; +#define TW 64 +#define TH 64 + +static void check(int ok, const char *what, const char *detail) +{ + checks++; + if (!ok) failures++; + printf("%s %s%s%s\n", ok ? "PASS" : "FAIL", what, detail && *detail ? ": " : "", detail ? detail : ""); + fflush(stdout); +} + +static ID3DBlob *compile(const char *src, const char *entry, const char *target) +{ + ID3DBlob *code = NULL, *err = NULL; + HRESULT hr = D3DCompile(src, strlen(src), NULL, NULL, NULL, entry, target, 0, 0, &code, &err); + if (FAILED(hr)) { + printf("shader %s failed: %s\n", entry, err ? (const char *)ID3D10Blob_GetBufferPointer(err) : "?"); + return NULL; + } + return code; +} + +/* Reads the render target back; returns a pointer valid until the next call. */ +static const uint32_t *readback(void) +{ + static uint32_t px[TW * TH]; + ID3D11DeviceContext_CopyResource(ctx, (ID3D11Resource *)staging, (ID3D11Resource *)rt); + D3D11_MAPPED_SUBRESOURCE m; + if (FAILED(ID3D11DeviceContext_Map(ctx, (ID3D11Resource *)staging, 0, D3D11_MAP_READ, 0, &m))) return NULL; + for (int y = 0; y < TH; y++) memcpy(px + y * TW, (const uint8_t *)m.pData + y * m.RowPitch, TW * 4); + ID3D11DeviceContext_Unmap(ctx, (ID3D11Resource *)staging, 0); + return px; +} + +static int close_to(uint32_t a, uint32_t b, int tol) +{ + for (int i = 0; i < 32; i += 8) { + int d = (int)((a >> i) & 0xff) - (int)((b >> i) & 0xff); + if (d < -tol || d > tol) return 0; + } + return 1; +} + +static void clear(float r, float g, float b) +{ + float c[4] = {r, g, b, 1}; + ID3D11DeviceContext_ClearRenderTargetView(ctx, rtv, c); +} + +static void bind_target(void) +{ + ID3D11DeviceContext_OMSetRenderTargets(ctx, 1, &rtv, NULL); + D3D11_VIEWPORT vp = {0, 0, TW, TH, 0, 1}; + ID3D11DeviceContext_RSSetViewports(ctx, 1, &vp); +} + +/* ------------------------------------------------------------------ textures */ + +static const char *tex_vs = + "struct O { float4 p : SV_Position; float2 uv : TEXCOORD; };" + "O main(uint id : SV_VertexID) { O o; float2 t = float2((id << 1) & 2, id & 2);" + "o.p = float4(t * float2(2, -2) + float2(-1, 1), 0, 1); o.uv = t; return o; }"; +static const char *tex_ps = + "Texture2D t : register(t0); SamplerState s : register(s0);" + "float4 main(float4 p : SV_Position, float2 uv : TEXCOORD) : SV_Target { return t.Sample(s, uv); }"; + +/* One 8x8 texture of 2x2 blocks, each block a solid colour. Returns RGBA8 (A in top byte). */ +static void test_bc(DXGI_FORMAT fmt, const char *name, const void *blocks, size_t block_bytes, const uint32_t want[4], int tol) +{ + D3D11_TEXTURE2D_DESC td = {8, 8, 1, 1, fmt, {1, 0}, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0}; + D3D11_SUBRESOURCE_DATA init = {blocks, (UINT)(block_bytes * 2), 0}; + ID3D11Texture2D *tex = NULL; + HRESULT hr = ID3D11Device_CreateTexture2D(dev, &td, &init, &tex); + if (FAILED(hr)) { + char d[64]; + snprintf(d, sizeof d, "CreateTexture2D 0x%08lx", (unsigned long)hr); + check(0, name, d); + return; + } + ID3D11ShaderResourceView *srv; + ID3D11Device_CreateShaderResourceView(dev, (ID3D11Resource *)tex, NULL, &srv); + D3D11_SAMPLER_DESC sd = {D3D11_FILTER_MIN_MAG_MIP_POINT, D3D11_TEXTURE_ADDRESS_CLAMP, D3D11_TEXTURE_ADDRESS_CLAMP, + D3D11_TEXTURE_ADDRESS_CLAMP, 0, 1, D3D11_COMPARISON_NEVER, {0}, 0, D3D11_FLOAT32_MAX}; + ID3D11SamplerState *smp; + ID3D11Device_CreateSamplerState(dev, &sd, &smp); + static ID3D11VertexShader *vs; + static ID3D11PixelShader *ps; + if (!vs) { + ID3DBlob *v = compile(tex_vs, "main", "vs_5_0"), *p = compile(tex_ps, "main", "ps_5_0"); + ID3D11Device_CreateVertexShader(dev, ID3D10Blob_GetBufferPointer(v), ID3D10Blob_GetBufferSize(v), NULL, &vs); + ID3D11Device_CreatePixelShader(dev, ID3D10Blob_GetBufferPointer(p), ID3D10Blob_GetBufferSize(p), NULL, &ps); + } + bind_target(); + clear(0, 0, 0); + ID3D11DeviceContext_IASetInputLayout(ctx, NULL); + ID3D11DeviceContext_IASetPrimitiveTopology(ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + ID3D11DeviceContext_VSSetShader(ctx, vs, NULL, 0); + ID3D11DeviceContext_PSSetShader(ctx, ps, NULL, 0); + ID3D11DeviceContext_PSSetShaderResources(ctx, 0, 1, &srv); + ID3D11DeviceContext_PSSetSamplers(ctx, 0, 1, &smp); + ID3D11DeviceContext_Draw(ctx, 3, 0); + const uint32_t *px = readback(); + /* quadrant centres: TL, TR, BL, BR */ + int pts[4][2] = {{TW / 4, TH / 4}, {3 * TW / 4, TH / 4}, {TW / 4, 3 * TH / 4}, {3 * TW / 4, 3 * TH / 4}}; + char d[160] = ""; + int ok = px != NULL; + for (int i = 0; ok && i < 4; i++) { + uint32_t v = px[pts[i][1] * TW + pts[i][0]]; + if (!close_to(v, want[i], tol)) { + snprintf(d, sizeof d, "block %d = 0x%08x, want 0x%08x", i, v, want[i]); + ok = 0; + } + } + check(ok, name, ok ? "4 blocks decode to the right colours" : d); +} + +static void tests_bc(void) +{ + /* BC1: colour0 = colour1 = solid; indices 0. RGB565 values -> 8-bit. */ + uint16_t c[4] = {0xF800, 0x07E0, 0x001F, 0xFFFF}; /* red, green, blue, white */ + uint8_t bc1[4][8]; + for (int i = 0; i < 4; i++) { + memcpy(bc1[i], &c[i], 2); + memcpy(bc1[i] + 2, &c[i], 2); + memset(bc1[i] + 4, 0, 4); + } + /* layout: block row 0 = blocks 0,1; row 1 = 2,3 */ + uint32_t want1[4] = {0xFF0000FF, 0xFF00FF00, 0xFFFF0000, 0xFFFFFFFF}; + test_bc(DXGI_FORMAT_BC1_UNORM, "BC1 texture", bc1, 8, want1, 8); + + /* BC3: alpha 255 (alpha endpoints 255,255) + BC1 colour block. */ + uint8_t bc3[4][16]; + for (int i = 0; i < 4; i++) { + memset(bc3[i], 0, 16); + bc3[i][0] = bc3[i][1] = 0xFF; + memcpy(bc3[i] + 8, bc1[i], 8); + } + test_bc(DXGI_FORMAT_BC3_UNORM, "BC3 texture", bc3, 16, want1, 8); + + /* BC4: single channel; endpoints = value. Sampled as R, G=B=0, A=1. */ + uint8_t vals[4] = {255, 128, 64, 0}; + uint8_t bc4[4][8]; + uint32_t want4[4]; + for (int i = 0; i < 4; i++) { + memset(bc4[i], 0, 8); + bc4[i][0] = bc4[i][1] = vals[i]; + want4[i] = 0xFF000000u | vals[i]; + } + test_bc(DXGI_FORMAT_BC4_UNORM, "BC4 texture", bc4, 8, want4, 2); + + /* BC5: two channels (R from first half, G from second). */ + uint8_t bc5[4][16]; + uint32_t want5[4]; + for (int i = 0; i < 4; i++) { + memset(bc5[i], 0, 16); + bc5[i][0] = bc5[i][1] = vals[i]; + bc5[i][8] = bc5[i][9] = vals[3 - i]; + want5[i] = 0xFF000000u | vals[i] | ((uint32_t)vals[3 - i] << 8); + } + test_bc(DXGI_FORMAT_BC5_UNORM, "BC5 texture", bc5, 16, want5, 2); + + /* BC7 mode 6: endpoints RGBA 7+1 bits; solid colour when both endpoints are equal. Encoded + * below by bit packing: mode 6 = bit 6 set (bits 0-6 = 1000000b). */ + uint8_t bc7[4][16]; + uint32_t want7[4]; + uint8_t cols[4][3] = {{255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 255}}; + for (int i = 0; i < 4; i++) { + uint8_t blk[16] = {0}; + int bit = 0; +#define PUT(v, n) do { for (int k_ = 0; k_ < (n); k_++, bit++) if (((v) >> k_) & 1) blk[bit >> 3] |= (uint8_t)(1u << (bit & 7)); } while (0) + PUT(1u << 6, 7); /* mode 6 */ + for (int ch = 0; ch < 3; ch++) { PUT(cols[i][ch] >> 1, 7); PUT(cols[i][ch] >> 1, 7); } + PUT(127, 7); PUT(127, 7); /* alpha endpoints */ + PUT(cols[i][0] & 1, 1); PUT(cols[i][0] & 1, 1); /* p-bits (same for all channels) */ +#undef PUT + memcpy(bc7[i], blk, 16); + uint8_t r = cols[i][0], g = cols[i][1], b = cols[i][2]; + /* 7-bit value + shared p-bit */ + uint8_t p = cols[i][0] & 1; + r = (uint8_t)(((r >> 1) << 1) | p); + g = (uint8_t)(((g >> 1) << 1) | p); + b = (uint8_t)(((b >> 1) << 1) | p); + want7[i] = 0xFF000000u | r | ((uint32_t)g << 8) | ((uint32_t)b << 16); + } + test_bc(DXGI_FORMAT_BC7_UNORM, "BC7 texture", bc7, 16, want7, 3); +} + +/* ------------------------------------------------------------------ clip distance */ + +static void test_clip(void) +{ + const char *vs = + "struct O { float4 p : SV_Position; float c : SV_ClipDistance0; };" + "O main(uint id : SV_VertexID) { O o; float2 t = float2((id << 1) & 2, id & 2);" + "o.p = float4(t * float2(2, -2) + float2(-1, 1), 0, 1); o.c = o.p.x; return o; }"; + const char *ps = "float4 main() : SV_Target { return float4(0, 1, 0, 1); }"; + ID3DBlob *v = compile(vs, "main", "vs_5_0"), *p = compile(ps, "main", "ps_5_0"); + if (!v || !p) { + check(0, "clip distance", "shader compile"); + return; + } + ID3D11VertexShader *vsh; + ID3D11PixelShader *psh; + ID3D11Device_CreateVertexShader(dev, ID3D10Blob_GetBufferPointer(v), ID3D10Blob_GetBufferSize(v), NULL, &vsh); + ID3D11Device_CreatePixelShader(dev, ID3D10Blob_GetBufferPointer(p), ID3D10Blob_GetBufferSize(p), NULL, &psh); + bind_target(); + clear(1, 0, 0); + ID3D11DeviceContext_IASetInputLayout(ctx, NULL); + ID3D11DeviceContext_IASetPrimitiveTopology(ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + ID3D11DeviceContext_VSSetShader(ctx, vsh, NULL, 0); + ID3D11DeviceContext_PSSetShader(ctx, psh, NULL, 0); + ID3D11DeviceContext_Draw(ctx, 3, 0); + const uint32_t *px = readback(); + int ok = px && close_to(px[TH / 2 * TW + TW / 4], 0xFF0000FF, 2) && close_to(px[TH / 2 * TW + 3 * TW / 4], 0xFF00FF00, 2); + char d[96]; + snprintf(d, sizeof d, "left 0x%08x (want red), right 0x%08x (want green)", px ? px[TH / 2 * TW + TW / 4] : 0, + px ? px[TH / 2 * TW + 3 * TW / 4] : 0); + check(ok, "SV_ClipDistance", d); +} + +/* ------------------------------------------------------------------ instance step rate */ + +static void test_step_rate(void) +{ + /* Four instances of a quad column; per-instance colour with step rate 2: instances 0-1 get + * colour 0 (blue), 2-3 colour 1 (yellow). Each instance covers a quarter of the width. */ + const char *vs = + "struct I { uint id : SV_VertexID; uint inst : SV_InstanceID; float4 col : COLOR; };" + "struct O { float4 p : SV_Position; float4 col : COLOR; };" + "O main(I i) { O o; float2 t = float2((i.id << 1) & 2, i.id & 2) * 0.5; /* 0..1 tri covering a quad's lower-left half */" + "float x0 = -1 + 0.5 * i.inst; float2 q = float2(i.id == 1 ? 1 : 0, i.id == 2 ? 1 : 0);" + "float2 pos[6] = { float2(0,0), float2(1,0), float2(0,1), float2(1,0), float2(1,1), float2(0,1) };" + "float2 v = pos[i.id]; o.p = float4(x0 + v.x * 0.5, -1 + v.y * 2, 0, 1); o.col = i.col; return o; }"; + const char *ps = "float4 main(float4 p : SV_Position, float4 c : COLOR) : SV_Target { return c; }"; + ID3DBlob *v = compile(vs, "main", "vs_5_0"), *p = compile(ps, "main", "ps_5_0"); + if (!v || !p) { + check(0, "instance step rate", "shader compile"); + return; + } + ID3D11VertexShader *vsh; + ID3D11PixelShader *psh; + ID3D11Device_CreateVertexShader(dev, ID3D10Blob_GetBufferPointer(v), ID3D10Blob_GetBufferSize(v), NULL, &vsh); + ID3D11Device_CreatePixelShader(dev, ID3D10Blob_GetBufferPointer(p), ID3D10Blob_GetBufferSize(p), NULL, &psh); + D3D11_INPUT_ELEMENT_DESC el = {"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_INSTANCE_DATA, 2}; + ID3D11InputLayout *il; + HRESULT hr = ID3D11Device_CreateInputLayout(dev, &el, 1, ID3D10Blob_GetBufferPointer(v), ID3D10Blob_GetBufferSize(v), &il); + if (FAILED(hr)) { + check(0, "instance step rate", "CreateInputLayout"); + return; + } + float cols[2][4] = {{0, 0, 1, 1}, {1, 1, 0, 1}}; + D3D11_BUFFER_DESC bd = {sizeof cols, D3D11_USAGE_DEFAULT, D3D11_BIND_VERTEX_BUFFER, 0, 0, 0}; + D3D11_SUBRESOURCE_DATA init = {cols, 0, 0}; + ID3D11Buffer *vb; + ID3D11Device_CreateBuffer(dev, &bd, &init, &vb); + UINT stride = 16, offset = 0; + D3D11_RASTERIZER_DESC rd = {D3D11_FILL_SOLID, D3D11_CULL_NONE, FALSE, 0, 0, 0, TRUE, FALSE, FALSE, FALSE}; + ID3D11RasterizerState *rs; + ID3D11Device_CreateRasterizerState(dev, &rd, &rs); + ID3D11DeviceContext_RSSetState(ctx, rs); + bind_target(); + clear(0, 0, 0); + ID3D11DeviceContext_IASetInputLayout(ctx, il); + ID3D11DeviceContext_IASetVertexBuffers(ctx, 0, 1, &vb, &stride, &offset); + ID3D11DeviceContext_IASetPrimitiveTopology(ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + ID3D11DeviceContext_VSSetShader(ctx, vsh, NULL, 0); + ID3D11DeviceContext_PSSetShader(ctx, psh, NULL, 0); + ID3D11DeviceContext_DrawInstanced(ctx, 6, 4, 0, 0); + const uint32_t *px = readback(); + uint32_t want[4] = {0xFFFF0000, 0xFFFF0000, 0xFF00FFFF, 0xFF00FFFF}; + int ok = px != NULL; + char d[128] = "instances 0-1 blue, 2-3 yellow"; + for (int i = 0; ok && i < 4; i++) { + uint32_t got = px[TH / 2 * TW + i * TW / 4 + TW / 8]; + if (!close_to(got, want[i], 2)) { + snprintf(d, sizeof d, "instance %d = 0x%08x, want 0x%08x", i, got, want[i]); + ok = 0; + } + } + check(ok, "instance step rate 2", d); +} + +/* ------------------------------------------------------------------ depth clip */ + +static void test_depth_clip(void) +{ + /* A full-screen triangle at z = 1.5 (beyond the far plane): clipped away with depth clip on, + * visible (clamped to the far plane) with it off. */ + const char *vs = "float4 main(uint id : SV_VertexID) : SV_Position { float2 t = float2((id << 1) & 2, id & 2);" + "return float4(t * float2(2, -2) + float2(-1, 1), 1.5, 1); }"; + const char *ps = "float4 main() : SV_Target { return float4(1, 1, 1, 1); }"; + ID3DBlob *v = compile(vs, "main", "vs_5_0"), *p = compile(ps, "main", "ps_5_0"); + ID3D11VertexShader *vsh; + ID3D11PixelShader *psh; + ID3D11Device_CreateVertexShader(dev, ID3D10Blob_GetBufferPointer(v), ID3D10Blob_GetBufferSize(v), NULL, &vsh); + ID3D11Device_CreatePixelShader(dev, ID3D10Blob_GetBufferPointer(p), ID3D10Blob_GetBufferSize(p), NULL, &psh); + uint32_t got[2]; + for (int on = 1; on >= 0; on--) { + D3D11_RASTERIZER_DESC rd = {D3D11_FILL_SOLID, D3D11_CULL_NONE, FALSE, 0, 0, 0, on ? TRUE : FALSE, FALSE, FALSE, FALSE}; + ID3D11RasterizerState *rs; + ID3D11Device_CreateRasterizerState(dev, &rd, &rs); + ID3D11DeviceContext_RSSetState(ctx, rs); + bind_target(); + clear(0, 0, 0); + ID3D11DeviceContext_IASetInputLayout(ctx, NULL); + ID3D11DeviceContext_IASetPrimitiveTopology(ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + ID3D11DeviceContext_VSSetShader(ctx, vsh, NULL, 0); + ID3D11DeviceContext_PSSetShader(ctx, psh, NULL, 0); + ID3D11DeviceContext_Draw(ctx, 3, 0); + const uint32_t *px = readback(); + got[on] = px ? px[TH / 2 * TW + TW / 2] : 0; + } + ID3D11DeviceContext_RSSetState(ctx, NULL); + char d[96]; + snprintf(d, sizeof d, "clip on 0x%08x (want black), off 0x%08x (want white)", got[1], got[0]); + check(close_to(got[1], 0xFF000000, 2) && close_to(got[0], 0xFFFFFFFF, 2), "DepthClipEnable", d); +} + +int main(void) +{ + D3D_FEATURE_LEVEL fl = D3D_FEATURE_LEVEL_11_0, got; + HRESULT hr = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &fl, 1, D3D11_SDK_VERSION, &dev, &got, &ctx); + char d[64]; + snprintf(d, sizeof d, "hr 0x%08lx", (unsigned long)hr); + check(SUCCEEDED(hr), "D3D11 device (feature level 11_0)", SUCCEEDED(hr) ? "" : d); + if (FAILED(hr)) return 1; + D3D11_TEXTURE2D_DESC td = {TW, TH, 1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, {1, 0}, D3D11_USAGE_DEFAULT, D3D11_BIND_RENDER_TARGET, 0, 0}; + ID3D11Device_CreateTexture2D(dev, &td, NULL, &rt); + ID3D11Device_CreateRenderTargetView(dev, (ID3D11Resource *)rt, NULL, &rtv); + td.Usage = D3D11_USAGE_STAGING; + td.BindFlags = 0; + td.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + ID3D11Device_CreateTexture2D(dev, &td, NULL, &staging); + bind_target(); + clear(0.25f, 0.5f, 0.75f); + const uint32_t *px = readback(); + check(px && close_to(px[0], 0xFFBF8040, 2), "clear + readback", ""); + tests_bc(); + test_clip(); + test_step_rate(); + test_depth_clip(); + printf("%s: %d of %d checks passed\n", failures ? "FAILED" : "OK", checks - failures, checks); + return failures ? 1 : 0; +} diff --git a/tools/vkbridge/tests/gen_shaders.sh b/tools/vkbridge/tests/gen_shaders.sh new file mode 100755 index 000000000..b856b8e36 --- /dev/null +++ b/tools/vkbridge/tests/gen_shaders.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Compiles the test shaders into C arrays (tests/smoke_spv.h). Needs glslangValidator. +set -eu +cd "$(dirname "$0")" +out=smoke_spv.h +echo "/* Generated by gen_shaders.sh from shaders/ - do not edit. */" > $out +for s in shaders/*.comp shaders/*.vert shaders/*.frag; do + name=$(basename "$s" | tr . _) + glslangValidator -V --vn "spv_$name" -o tmp.h "$s" >/dev/null + grep -v '^ *//' tmp.h | sed 's/^const uint32_t/static const uint32_t/' >> $out + rm -f tmp.h +done diff --git a/tools/vkbridge/tests/shaders/smoke.comp b/tools/vkbridge/tests/shaders/smoke.comp new file mode 100644 index 000000000..a12276b26 --- /dev/null +++ b/tools/vkbridge/tests/shaders/smoke.comp @@ -0,0 +1,9 @@ +#version 450 +layout(local_size_x = 64) in; +layout(std430, binding = 0) readonly buffer In { uint v[]; } src; +layout(std430, binding = 1) writeonly buffer Out { uint v[]; } dst; +layout(push_constant) uniform PC { uint mul; uint add; } pc; +void main() { + uint i = gl_GlobalInvocationID.x; + dst.v[i] = src.v[i] * pc.mul + pc.add; +} diff --git a/tools/vkbridge/tests/shaders/smoke.frag b/tools/vkbridge/tests/shaders/smoke.frag new file mode 100644 index 000000000..31de6fb23 --- /dev/null +++ b/tools/vkbridge/tests/shaders/smoke.frag @@ -0,0 +1,4 @@ +#version 450 +layout(push_constant) uniform PC { vec4 color; } pc; +layout(location = 0) out vec4 o; +void main() { o = pc.color; } diff --git a/tools/vkbridge/tests/shaders/smoke.vert b/tools/vkbridge/tests/shaders/smoke.vert new file mode 100644 index 000000000..d6fb0f0b8 --- /dev/null +++ b/tools/vkbridge/tests/shaders/smoke.vert @@ -0,0 +1,5 @@ +#version 450 +void main() { + vec2 p = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2); + gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0); +} diff --git a/tools/vkbridge/tests/smoke.c b/tools/vkbridge/tests/smoke.c new file mode 100644 index 000000000..ee87ed90d --- /dev/null +++ b/tools/vkbridge/tests/smoke.c @@ -0,0 +1,513 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * + * droiddeck-vkbridge-smoke: a self-checking Vulkan test, run at session start (Mali bridge on) + * and on the host against the bridge. Every check compares real bytes; output goes to stdout + * one line per check, exit status 0 only if all pass. + * + * droiddeck-vkbridge-smoke [--gpu N] [--quiet] + */ +#define VK_NO_PROTOTYPES +#include + +#include +#include +#include +#include +#include + +#include "smoke_spv.h" + +static PFN_vkGetInstanceProcAddr gipa; +static VkInstance inst; +static VkPhysicalDevice pd; +static VkDevice dev; +static VkQueue queue; +static uint32_t qfam; +static VkCommandPool pool; +static VkPhysicalDeviceMemoryProperties mp; +static int failures, checks; + +#define I(name) PFN_##name name +static I(vkCreateInstance); static I(vkEnumeratePhysicalDevices); static I(vkGetPhysicalDeviceProperties); +static I(vkGetPhysicalDeviceQueueFamilyProperties); static I(vkGetPhysicalDeviceMemoryProperties); static I(vkCreateDevice); +static I(vkGetDeviceProcAddr); static I(vkDestroyInstance); static I(vkGetPhysicalDeviceFeatures); +static I(vkGetDeviceQueue); static I(vkCreateCommandPool); static I(vkAllocateCommandBuffers); static I(vkBeginCommandBuffer); +static I(vkEndCommandBuffer); static I(vkQueueSubmit); static I(vkQueueWaitIdle); static I(vkCreateBuffer); +static I(vkGetBufferMemoryRequirements); static I(vkAllocateMemory); static I(vkBindBufferMemory); static I(vkMapMemory); +static I(vkCmdFillBuffer); static I(vkCmdCopyBuffer); static I(vkCmdUpdateBuffer); static I(vkCmdPipelineBarrier); +static I(vkCreateShaderModule); static I(vkCreateDescriptorSetLayout); static I(vkCreatePipelineLayout); +static I(vkCreateComputePipelines); static I(vkCreateDescriptorPool); static I(vkAllocateDescriptorSets); +static I(vkUpdateDescriptorSets); static I(vkCmdBindPipeline); static I(vkCmdBindDescriptorSets); static I(vkCmdPushConstants); +static I(vkCmdDispatch); static I(vkCreateImage); static I(vkGetImageMemoryRequirements); static I(vkBindImageMemory); +static I(vkCmdClearColorImage); static I(vkCmdCopyImageToBuffer); static I(vkCreateImageView); static I(vkCreateRenderPass); +static I(vkCreateFramebuffer); static I(vkCreateGraphicsPipelines); static I(vkCmdBeginRenderPass); static I(vkCmdEndRenderPass); +static I(vkCmdDraw); static I(vkCreateSemaphore); static I(vkSignalSemaphore); static I(vkWaitSemaphores); +static I(vkGetSemaphoreCounterValue); static I(vkDestroyDevice); static I(vkFlushMappedMemoryRanges); +static I(vkInvalidateMappedMemoryRanges); static I(vkCmdSetViewport); static I(vkCmdSetScissor); +static I(vkCreateFence); static I(vkWaitForFences); static I(vkCmdCopyBufferToImage); +#undef I + +static void check(int ok, const char *what, const char *detail) +{ + checks++; + if (!ok) failures++; + printf("%s %s%s%s\n", ok ? "PASS" : "FAIL", what, detail && *detail ? ": " : "", detail ? detail : ""); + fflush(stdout); +} + +static double now_ms(void) +{ + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + return t.tv_sec * 1e3 + t.tv_nsec / 1e6; +} + +static uint32_t find_type(uint32_t bits, VkMemoryPropertyFlags want) +{ + for (uint32_t i = 0; i < mp.memoryTypeCount; i++) + if ((bits & (1u << i)) && (mp.memoryTypes[i].propertyFlags & want) == want) return i; + return UINT32_MAX; +} + +typedef struct { + VkBuffer buf; + VkDeviceMemory mem; + void *ptr; + VkMemoryPropertyFlags flags; +} buffer; + +static int make_buffer(buffer *b, VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags want) +{ + VkBufferCreateInfo ci = {VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0, size, usage, VK_SHARING_MODE_EXCLUSIVE, 0, NULL}; + if (vkCreateBuffer(dev, &ci, NULL, &b->buf)) return 0; + VkMemoryRequirements r; + vkGetBufferMemoryRequirements(dev, b->buf, &r); + uint32_t t = find_type(r.memoryTypeBits, want); + if (t == UINT32_MAX) return 0; + b->flags = mp.memoryTypes[t].propertyFlags; + VkMemoryAllocateInfo ai = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, r.size, t}; + if (vkAllocateMemory(dev, &ai, NULL, &b->mem) || vkBindBufferMemory(dev, b->buf, b->mem, 0)) return 0; + b->ptr = NULL; + if (want & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { + if (vkMapMemory(dev, b->mem, 0, VK_WHOLE_SIZE, 0, &b->ptr)) return 0; + } + return 1; +} + +static void sync_to_gpu(buffer *b) +{ + if (b->flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) return; + VkMappedMemoryRange r = {VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, NULL, b->mem, 0, VK_WHOLE_SIZE}; + vkFlushMappedMemoryRanges(dev, 1, &r); +} + +static void sync_from_gpu(buffer *b) +{ + if (b->flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) return; + VkMappedMemoryRange r = {VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, NULL, b->mem, 0, VK_WHOLE_SIZE}; + vkInvalidateMappedMemoryRanges(dev, 1, &r); +} + +static VkCommandBuffer begin(void) +{ + VkCommandBufferAllocateInfo ai = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL, pool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1}; + VkCommandBuffer cb; + vkAllocateCommandBuffers(dev, &ai, &cb); + VkCommandBufferBeginInfo bi = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, NULL}; + vkBeginCommandBuffer(cb, &bi); + return cb; +} + +static int submit(VkCommandBuffer cb) +{ + VkMemoryBarrier mb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER, NULL, VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_HOST_READ_BIT}; + vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &mb, 0, NULL, 0, NULL); + if (vkEndCommandBuffer(cb)) return 0; + VkFenceCreateInfo fci = {VK_STRUCTURE_TYPE_FENCE_CREATE_INFO}; + VkFence f; + vkCreateFence(dev, &fci, NULL, &f); + VkSubmitInfo si = {VK_STRUCTURE_TYPE_SUBMIT_INFO, NULL, 0, NULL, NULL, 1, &cb, 0, NULL}; + return !vkQueueSubmit(queue, 1, &si, f) && !vkWaitForFences(dev, 1, &f, VK_TRUE, 10000000000ull); +} + +static VkShaderModule shader(const uint32_t *code, size_t size) +{ + VkShaderModuleCreateInfo ci = {VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, NULL, 0, size, code}; + VkShaderModule m = VK_NULL_HANDLE; + vkCreateShaderModule(dev, &ci, NULL, &m); + return m; +} + +/* ------------------------------------------------------------------ tests */ + +static void test_memory(void) +{ + char d[160]; + buffer b; + const uint32_t n = 1 << 16; + if (!make_buffer(&b, n * 4, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) { + check(0, "host-visible buffer", "cannot create/map"); + return; + } + uint32_t *p = b.ptr; + for (uint32_t i = 0; i < n; i++) p[i] = i ^ 0x5a5a0000u; + sync_to_gpu(&b); + VkCommandBuffer cb = begin(); + vkCmdFillBuffer(cb, b.buf, 0, n, 0xC0FFEE00u); /* words [0, n/4) */ + VkBufferCopy c = {n * 2, n * 3, n}; /* words [n/2, 3n/4) -> [3n/4, n) */ + vkCmdCopyBuffer(cb, b.buf, b.buf, 1, &c); + uint32_t upd[16]; + for (int i = 0; i < 16; i++) upd[i] = 0xABC00000u + (uint32_t)i; + vkCmdUpdateBuffer(cb, b.buf, n + 64, sizeof(upd), upd); /* words [n/4 + 16, +16) */ + int ok = submit(cb); + sync_from_gpu(&b); + int bad = -1; + for (uint32_t i = 0; ok && i < n; i++) { + uint32_t want; + if (i < n / 4) want = 0xC0FFEE00u; + else if (i >= n / 4 + 16 && i < n / 4 + 32) want = 0xABC00000u + (i - n / 4 - 16); + else if (i >= 3 * n / 4) want = (i - n / 4) ^ 0x5a5a0000u; + else want = i ^ 0x5a5a0000u; + if (p[i] != want) { + bad = (int)i; + break; + } + } + snprintf(d, sizeof(d), bad < 0 ? "fill/copy/update seen through the mapping (memory flags 0x%x)" : "word %d wrong", bad < 0 ? (int)b.flags : bad); + check(ok && bad < 0, "mapped memory + transfer commands", d); +} + +static void test_compute(void) +{ + char d[160]; + const uint32_t n = 4096; + buffer in, out; + if (!make_buffer(&in, n * 4, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) || + !make_buffer(&out, n * 4, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) { + check(0, "compute", "buffers"); + return; + } + for (uint32_t i = 0; i < n; i++) ((uint32_t *)in.ptr)[i] = i; + sync_to_gpu(&in); + VkDescriptorSetLayoutBinding binds[2] = {{0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, + {1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}}; + VkDescriptorSetLayoutCreateInfo lci = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, NULL, 0, 2, binds}; + VkDescriptorSetLayout dsl; + vkCreateDescriptorSetLayout(dev, &lci, NULL, &dsl); + VkPushConstantRange pcr = {VK_SHADER_STAGE_COMPUTE_BIT, 0, 8}; + VkPipelineLayoutCreateInfo plci = {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, NULL, 0, 1, &dsl, 1, &pcr}; + VkPipelineLayout pl; + vkCreatePipelineLayout(dev, &plci, NULL, &pl); + VkComputePipelineCreateInfo cpci = {VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + cpci.stage = (VkPipelineShaderStageCreateInfo){VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL, 0, VK_SHADER_STAGE_COMPUTE_BIT, + shader(spv_smoke_comp, sizeof(spv_smoke_comp)), "main", NULL}; + cpci.layout = pl; + VkPipeline pipe; + double t0 = now_ms(); + VkResult r = vkCreateComputePipelines(dev, VK_NULL_HANDLE, 1, &cpci, NULL, &pipe); + if (r) { + check(0, "compute pipeline", "creation failed"); + return; + } + VkDescriptorPoolSize ps = {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2}; + VkDescriptorPoolCreateInfo dpci = {VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, NULL, 0, 1, 1, &ps}; + VkDescriptorPool dp; + vkCreateDescriptorPool(dev, &dpci, NULL, &dp); + VkDescriptorSetAllocateInfo dsai = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, NULL, dp, 1, &dsl}; + VkDescriptorSet set; + vkAllocateDescriptorSets(dev, &dsai, &set); + VkDescriptorBufferInfo bi[2] = {{in.buf, 0, VK_WHOLE_SIZE}, {out.buf, 0, VK_WHOLE_SIZE}}; + VkWriteDescriptorSet w[2] = {{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, NULL, set, 0, 0, 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, NULL, &bi[0], NULL}, + {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, NULL, set, 1, 0, 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, NULL, &bi[1], NULL}}; + vkUpdateDescriptorSets(dev, 2, w, 0, NULL); + VkCommandBuffer cb = begin(); + vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_COMPUTE, pipe); + vkCmdBindDescriptorSets(cb, VK_PIPELINE_BIND_POINT_COMPUTE, pl, 0, 1, &set, 0, NULL); + uint32_t pc[2] = {3, 7}; + vkCmdPushConstants(cb, pl, VK_SHADER_STAGE_COMPUTE_BIT, 0, 8, pc); + vkCmdDispatch(cb, n / 64, 1, 1); + int ok = submit(cb); + sync_from_gpu(&out); + int bad = -1; + for (uint32_t i = 0; ok && i < n; i++) + if (((uint32_t *)out.ptr)[i] != i * 3 + 7) { + bad = (int)i; + break; + } + snprintf(d, sizeof(d), bad < 0 ? "%u invocations correct (%.1f ms incl. pipeline)" : "element %d wrong", bad < 0 ? n : (unsigned)bad, + now_ms() - t0); + check(ok && bad < 0, "compute shader", d); +} + +static VkImage make_image(VkFormat fmt, uint32_t w, uint32_t h, VkImageUsageFlags usage) +{ + VkImageCreateInfo ci = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, NULL, 0, VK_IMAGE_TYPE_2D, fmt, {w, h, 1}, 1, 1, VK_SAMPLE_COUNT_1_BIT, + VK_IMAGE_TILING_OPTIMAL, usage, VK_SHARING_MODE_EXCLUSIVE, 0, NULL, VK_IMAGE_LAYOUT_UNDEFINED}; + VkImage img; + if (vkCreateImage(dev, &ci, NULL, &img)) return VK_NULL_HANDLE; + VkMemoryRequirements r; + vkGetImageMemoryRequirements(dev, img, &r); + uint32_t t = find_type(r.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + if (t == UINT32_MAX) t = find_type(r.memoryTypeBits, 0); + VkMemoryAllocateInfo ai = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, r.size, t}; + VkDeviceMemory m; + if (vkAllocateMemory(dev, &ai, NULL, &m) || vkBindImageMemory(dev, img, m, 0)) return VK_NULL_HANDLE; + return img; +} + +static void barrier(VkCommandBuffer cb, VkImage img, VkImageLayout from, VkImageLayout to) +{ + VkImageMemoryBarrier b = {VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, VK_ACCESS_MEMORY_WRITE_BIT, + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, from, to, VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, img, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; + vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, NULL, 0, NULL, 1, &b); +} + +static void test_image_clear(void) +{ + const uint32_t w = 64, h = 64; + VkImage img = make_image(VK_FORMAT_R8G8B8A8_UNORM, w, h, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + buffer rb; + if (!img || !make_buffer(&rb, w * h * 4, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) { + check(0, "image clear + readback", "setup"); + return; + } + VkCommandBuffer cb = begin(); + barrier(cb, img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + VkClearColorValue col = {.float32 = {1.0f, 0.5f, 0.0f, 1.0f}}; + VkImageSubresourceRange rng = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + vkCmdClearColorImage(cb, img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &col, 1, &rng); + /* upload a 8x8 block from the buffer over the corner, to test buffer->image too */ + for (int i = 0; i < 64; i++) ((uint32_t *)rb.ptr)[i] = 0xFF112233u; + sync_to_gpu(&rb); + VkBufferImageCopy up = {0, 8, 8, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {8, 8, 1}}; + vkCmdCopyBufferToImage(cb, rb.buf, img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &up); + barrier(cb, img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + VkBufferImageCopy c = {0, 0, 0, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {w, h, 1}}; + VkMemoryBarrier mb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER, NULL, VK_ACCESS_TRANSFER_READ_BIT, VK_ACCESS_TRANSFER_WRITE_BIT}; + vkCmdPipelineBarrier(cb, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &mb, 0, NULL, 0, NULL); + vkCmdCopyImageToBuffer(cb, img, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, rb.buf, 1, &c); + int ok = submit(cb); + sync_from_gpu(&rb); + uint32_t *p = rb.ptr; + uint32_t want_clear = 0xFF0080FFu; /* R=255 G=128 B=0 A=255, little endian; 0.5 -> 127 or 128 */ + int bad = -1; + for (uint32_t y = 0; ok && y < h; y++) + for (uint32_t x = 0; x < w; x++) { + uint32_t v = p[y * w + x]; + int corner = x < 8 && y < 8; + int good = corner ? v == 0xFF112233u : ((v & 0xFFFF00FFu) == (want_clear & 0xFFFF00FFu) && ((v >> 8) & 0xFF) >= 127 && ((v >> 8) & 0xFF) <= 128); + if (!good && bad < 0) bad = (int)(y * w + x); + } + char d[128]; + snprintf(d, sizeof(d), bad < 0 ? "64x64 RGBA8 clear, upload and readback exact" : "pixel %d = 0x%08x", bad, bad < 0 ? 0 : p[bad]); + check(ok && bad < 0, "image clear/upload/readback", d); +} + +static void test_draw(void) +{ + const uint32_t w = 128, h = 96; + VkFormat fmt = VK_FORMAT_B8G8R8A8_UNORM; + VkImage img = make_image(fmt, w, h, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + buffer rb; + if (!img || !make_buffer(&rb, w * h * 4, VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) { + check(0, "draw", "setup"); + return; + } + VkImageViewCreateInfo vci = {VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, NULL, 0, img, VK_IMAGE_VIEW_TYPE_2D, fmt, {0}, + {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; + VkImageView view; + vkCreateImageView(dev, &vci, NULL, &view); + VkAttachmentDescription att = {0, fmt, VK_SAMPLE_COUNT_1_BIT, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE, + VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_STORE_OP_DONT_CARE, VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL}; + VkAttachmentReference ref = {0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}; + VkSubpassDescription sub = {0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0, NULL, 1, &ref, NULL, NULL, 0, NULL}; + VkRenderPassCreateInfo rpci = {VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, NULL, 0, 1, &att, 1, &sub, 0, NULL}; + VkRenderPass rp; + vkCreateRenderPass(dev, &rpci, NULL, &rp); + VkFramebufferCreateInfo fci = {VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, NULL, 0, rp, 1, &view, w, h, 1}; + VkFramebuffer fb; + vkCreateFramebuffer(dev, &fci, NULL, &fb); + VkPushConstantRange pcr = {VK_SHADER_STAGE_FRAGMENT_BIT, 0, 16}; + VkPipelineLayoutCreateInfo plci = {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, NULL, 0, 0, NULL, 1, &pcr}; + VkPipelineLayout pl; + vkCreatePipelineLayout(dev, &plci, NULL, &pl); + VkPipelineShaderStageCreateInfo st[2] = { + {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL, 0, VK_SHADER_STAGE_VERTEX_BIT, shader(spv_smoke_vert, sizeof(spv_smoke_vert)), "main", NULL}, + {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL, 0, VK_SHADER_STAGE_FRAGMENT_BIT, shader(spv_smoke_frag, sizeof(spv_smoke_frag)), "main", NULL}}; + VkPipelineVertexInputStateCreateInfo vi = {VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO}; + VkPipelineInputAssemblyStateCreateInfo ia = {VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, NULL, 0, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0}; + VkPipelineViewportStateCreateInfo vp = {VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, NULL, 0, 1, NULL, 1, NULL}; + VkPipelineRasterizationStateCreateInfo rs = {VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO}; + rs.polygonMode = VK_POLYGON_MODE_FILL; + rs.cullMode = VK_CULL_MODE_NONE; + rs.lineWidth = 1.0f; + VkPipelineMultisampleStateCreateInfo ms = {VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, NULL, 0, VK_SAMPLE_COUNT_1_BIT}; + VkPipelineColorBlendAttachmentState cba = {0}; + cba.colorWriteMask = 0xF; + VkPipelineColorBlendStateCreateInfo cb_ = {VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, NULL, 0, 0, 0, 1, &cba, {0}}; + VkDynamicState dyn[2] = {VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR}; + VkPipelineDynamicStateCreateInfo ds = {VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, NULL, 0, 2, dyn}; + VkGraphicsPipelineCreateInfo gpci = {VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, NULL, 0, 2, st, &vi, &ia, NULL, &vp, &rs, &ms, NULL, &cb_, &ds, + pl, rp, 0, VK_NULL_HANDLE, -1}; + VkPipeline pipe; + if (vkCreateGraphicsPipelines(dev, VK_NULL_HANDLE, 1, &gpci, NULL, &pipe)) { + check(0, "graphics pipeline", "creation failed"); + return; + } + VkCommandBuffer cb = begin(); + VkClearValue clear = {.color = {.float32 = {0, 0, 0, 1}}}; + VkRenderPassBeginInfo rbi = {VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, NULL, rp, fb, {{0, 0}, {w, h}}, 1, &clear}; + vkCmdBeginRenderPass(cb, &rbi, VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_GRAPHICS, pipe); + /* left half only: the right half keeps the clear colour */ + VkViewport v = {0, 0, (float)w, (float)h, 0, 1}; + VkRect2D sc = {{0, 0}, {w / 2, h}}; + vkCmdSetViewport(cb, 0, 1, &v); + vkCmdSetScissor(cb, 0, 1, &sc); + float color[4] = {0.0f, 1.0f, 0.0f, 1.0f}; + vkCmdPushConstants(cb, pl, VK_SHADER_STAGE_FRAGMENT_BIT, 0, 16, color); + vkCmdDraw(cb, 3, 1, 0, 0); + vkCmdEndRenderPass(cb); + VkBufferImageCopy c = {0, 0, 0, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {w, h, 1}}; + vkCmdCopyImageToBuffer(cb, img, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, rb.buf, 1, &c); + int ok = submit(cb); + sync_from_gpu(&rb); + uint32_t *p = rb.ptr; + int bad = -1; + for (uint32_t y = 0; ok && y < h; y++) + for (uint32_t x = 0; x < w; x++) { + uint32_t want = x < w / 2 ? 0xFF00FF00u : 0xFF000000u; /* BGRA: green / black */ + if (p[y * w + x] != want && bad < 0) bad = (int)(y * w + x); + } + char d[128]; + snprintf(d, sizeof(d), bad < 0 ? "render pass + pipeline + scissor exact (%ux%u)" : "pixel %d = 0x%08x", bad < 0 ? w : (unsigned)bad, + bad < 0 ? h : p[bad]); + check(ok && bad < 0, "draw", d); +} + +static void test_timeline(void) +{ + VkSemaphoreTypeCreateInfo t = {VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, NULL, VK_SEMAPHORE_TYPE_TIMELINE, 5}; + VkSemaphoreCreateInfo ci = {VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, &t, 0}; + VkSemaphore s; + if (!vkCreateSemaphore || vkCreateSemaphore(dev, &ci, NULL, &s) || !vkSignalSemaphore) { + check(1, "timeline semaphore", "skipped (Vulkan 1.2 not available)"); + return; + } + VkSemaphoreSignalInfo si = {VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, NULL, s, 9}; + vkSignalSemaphore(dev, &si); + uint64_t v = 0; + vkGetSemaphoreCounterValue(dev, s, &v); + uint64_t want = 9; + VkSemaphoreWaitInfo wi = {VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, NULL, 0, 1, &s, &want}; + VkResult r = vkWaitSemaphores(dev, &wi, 1000000000ull); + char d[64]; + snprintf(d, sizeof(d), "value %llu", (unsigned long long)v); + check(v == 9 && r == VK_SUCCESS, "timeline semaphore", d); +} + +static void test_roundtrip_rate(void) +{ + /* Bridge overhead: how many trivial synchronous calls per second. */ + VkFenceCreateInfo fci = {VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, NULL, VK_FENCE_CREATE_SIGNALED_BIT}; + VkFence f; + vkCreateFence(dev, &fci, NULL, &f); + PFN_vkGetFenceStatus gfs = (PFN_vkGetFenceStatus)vkGetDeviceProcAddr(dev, "vkGetFenceStatus"); + double t0 = now_ms(); + int n = 2000; + for (int i = 0; i < n; i++) gfs(dev, f); + double us = (now_ms() - t0) * 1000.0 / n; + char d[64]; + snprintf(d, sizeof(d), "%.1f us per synchronous call", us); + check(1, "call latency", d); +} + +int main(int argc, char **argv) +{ + int gpu = 0; + for (int i = 1; i < argc; i++) + if (!strcmp(argv[i], "--gpu") && i + 1 < argc) gpu = atoi(argv[++i]); + void *lib = dlopen("libvulkan.so.1", RTLD_NOW); + if (!lib) { + printf("FAIL loader: %s\n", dlerror()); + return 2; + } + gipa = (PFN_vkGetInstanceProcAddr)dlsym(lib, "vkGetInstanceProcAddr"); +#define G(n) n = (PFN_##n)gipa(inst, #n) + G(vkCreateInstance); + VkApplicationInfo app = {VK_STRUCTURE_TYPE_APPLICATION_INFO, NULL, "vkbridge-smoke", 1, "vkbridge", 1, VK_API_VERSION_1_2}; + VkInstanceCreateInfo ici = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, NULL, 0, &app, 0, NULL, 0, NULL}; + VkResult r = vkCreateInstance(&ici, NULL, &inst); + check(r == VK_SUCCESS, "instance", r ? "vkCreateInstance failed" : ""); + if (r) return 1; + G(vkEnumeratePhysicalDevices); G(vkGetPhysicalDeviceProperties); G(vkGetPhysicalDeviceQueueFamilyProperties); + G(vkGetPhysicalDeviceMemoryProperties); G(vkCreateDevice); G(vkGetDeviceProcAddr); G(vkDestroyInstance); + G(vkGetPhysicalDeviceFeatures); + uint32_t n = 0; + vkEnumeratePhysicalDevices(inst, &n, NULL); + VkPhysicalDevice pds[8]; + if (n > 8) n = 8; + vkEnumeratePhysicalDevices(inst, &n, pds); + if ((uint32_t)gpu >= n) { + check(0, "physical device", "none"); + return 1; + } + pd = pds[gpu]; + VkPhysicalDeviceProperties props; + vkGetPhysicalDeviceProperties(pd, &props); + char d[300]; + snprintf(d, sizeof(d), "%s, Vulkan %u.%u.%u", props.deviceName, VK_API_VERSION_MAJOR(props.apiVersion), + VK_API_VERSION_MINOR(props.apiVersion), VK_API_VERSION_PATCH(props.apiVersion)); + check(1, "physical device", d); + vkGetPhysicalDeviceMemoryProperties(pd, &mp); + for (uint32_t i = 0; i < mp.memoryTypeCount; i++) + printf(" memory type %u: heap %u flags 0x%x\n", i, mp.memoryTypes[i].heapIndex, mp.memoryTypes[i].propertyFlags); + uint32_t nq = 0; + vkGetPhysicalDeviceQueueFamilyProperties(pd, &nq, NULL); + VkQueueFamilyProperties qp[16]; + if (nq > 16) nq = 16; + vkGetPhysicalDeviceQueueFamilyProperties(pd, &nq, qp); + for (qfam = 0; qfam < nq; qfam++) + if (qp[qfam].queueFlags & VK_QUEUE_GRAPHICS_BIT) break; + float prio = 1.0f; + VkDeviceQueueCreateInfo qci = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, NULL, 0, qfam, 1, &prio}; + VkPhysicalDeviceVulkan12Features f12 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES}; + f12.timelineSemaphore = VK_TRUE; + VkDeviceCreateInfo dci = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, props.apiVersion >= VK_API_VERSION_1_2 ? &f12 : NULL, 0, 1, &qci, 0, NULL, 0, NULL, NULL}; + r = vkCreateDevice(pd, &dci, NULL, &dev); + check(r == VK_SUCCESS, "device", r ? "vkCreateDevice failed" : ""); + if (r) return 1; +#undef G +#define G(n) n = (PFN_##n)vkGetDeviceProcAddr(dev, #n) + G(vkGetDeviceQueue); G(vkCreateCommandPool); G(vkAllocateCommandBuffers); G(vkBeginCommandBuffer); G(vkEndCommandBuffer); + G(vkQueueSubmit); G(vkQueueWaitIdle); G(vkCreateBuffer); G(vkGetBufferMemoryRequirements); G(vkAllocateMemory); + G(vkBindBufferMemory); G(vkMapMemory); G(vkCmdFillBuffer); G(vkCmdCopyBuffer); G(vkCmdUpdateBuffer); G(vkCmdPipelineBarrier); + G(vkCreateShaderModule); G(vkCreateDescriptorSetLayout); G(vkCreatePipelineLayout); G(vkCreateComputePipelines); + G(vkCreateDescriptorPool); G(vkAllocateDescriptorSets); G(vkUpdateDescriptorSets); G(vkCmdBindPipeline); + G(vkCmdBindDescriptorSets); G(vkCmdPushConstants); G(vkCmdDispatch); G(vkCreateImage); G(vkGetImageMemoryRequirements); + G(vkBindImageMemory); G(vkCmdClearColorImage); G(vkCmdCopyImageToBuffer); G(vkCreateImageView); G(vkCreateRenderPass); + G(vkCreateFramebuffer); G(vkCreateGraphicsPipelines); G(vkCmdBeginRenderPass); G(vkCmdEndRenderPass); G(vkCmdDraw); + G(vkCreateSemaphore); G(vkSignalSemaphore); G(vkWaitSemaphores); G(vkGetSemaphoreCounterValue); G(vkDestroyDevice); + G(vkFlushMappedMemoryRanges); G(vkInvalidateMappedMemoryRanges); G(vkCmdSetViewport); G(vkCmdSetScissor); + G(vkCreateFence); G(vkWaitForFences); G(vkCmdCopyBufferToImage); +#undef G + vkGetDeviceQueue(dev, qfam, 0, &queue); + VkCommandPoolCreateInfo pci = {VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, NULL, 0, qfam}; + vkCreateCommandPool(dev, &pci, NULL, &pool); + + test_memory(); + test_compute(); + test_image_clear(); + test_draw(); + test_timeline(); + test_roundtrip_rate(); + + vkDestroyDevice(dev, NULL); + vkDestroyInstance(inst, NULL); + printf("%s: %d of %d checks passed\n", failures ? "FAILED" : "OK", checks - failures, checks); + return failures ? 1 : 0; +} diff --git a/tools/vkbridge/tests/smoke_spv.h b/tools/vkbridge/tests/smoke_spv.h new file mode 100644 index 000000000..6c6188854 --- /dev/null +++ b/tools/vkbridge/tests/smoke_spv.h @@ -0,0 +1,108 @@ +/* Generated by gen_shaders.sh from shaders/ - do not edit. */ + // 1115.1.0 + #pragma once +static const uint32_t spv_smoke_comp[] = { + 0x07230203,0x00010000,0x0008000b,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x00060010,0x00000004, + 0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00030005,0x00000008,0x00000069,0x00080005,0x0000000b, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00030005,0x00000011, + 0x0074754f,0x00040006,0x00000011,0x00000000,0x00000076,0x00030005,0x00000013,0x00747364, + 0x00030005,0x00000018,0x00006e49,0x00040006,0x00000018,0x00000000,0x00000076,0x00030005, + 0x0000001a,0x00637273,0x00030005,0x0000001f,0x00004350,0x00040006,0x0000001f,0x00000000, + 0x006c756d,0x00040006,0x0000001f,0x00000001,0x00646461,0x00030005,0x00000021,0x00006370, + 0x00040047,0x0000000b,0x0000000b,0x0000001c,0x00040047,0x00000010,0x00000006,0x00000004, + 0x00030047,0x00000011,0x00000003,0x00040048,0x00000011,0x00000000,0x00000019,0x00050048, + 0x00000011,0x00000000,0x00000023,0x00000000,0x00030047,0x00000013,0x00000019,0x00040047, + 0x00000013,0x00000021,0x00000001,0x00040047,0x00000013,0x00000022,0x00000000,0x00040047, + 0x00000017,0x00000006,0x00000004,0x00030047,0x00000018,0x00000003,0x00040048,0x00000018, + 0x00000000,0x00000018,0x00050048,0x00000018,0x00000000,0x00000023,0x00000000,0x00030047, + 0x0000001a,0x00000018,0x00040047,0x0000001a,0x00000021,0x00000000,0x00040047,0x0000001a, + 0x00000022,0x00000000,0x00030047,0x0000001f,0x00000002,0x00050048,0x0000001f,0x00000000, + 0x00000023,0x00000000,0x00050048,0x0000001f,0x00000001,0x00000023,0x00000004,0x00040047, + 0x0000002d,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00040017,0x00000009,0x00000006,0x00000003,0x00040020,0x0000000a,0x00000001,0x00000009, + 0x0004003b,0x0000000a,0x0000000b,0x00000001,0x0004002b,0x00000006,0x0000000c,0x00000000, + 0x00040020,0x0000000d,0x00000001,0x00000006,0x0003001d,0x00000010,0x00000006,0x0003001e, + 0x00000011,0x00000010,0x00040020,0x00000012,0x00000002,0x00000011,0x0004003b,0x00000012, + 0x00000013,0x00000002,0x00040015,0x00000014,0x00000020,0x00000001,0x0004002b,0x00000014, + 0x00000015,0x00000000,0x0003001d,0x00000017,0x00000006,0x0003001e,0x00000018,0x00000017, + 0x00040020,0x00000019,0x00000002,0x00000018,0x0004003b,0x00000019,0x0000001a,0x00000002, + 0x00040020,0x0000001c,0x00000002,0x00000006,0x0004001e,0x0000001f,0x00000006,0x00000006, + 0x00040020,0x00000020,0x00000009,0x0000001f,0x0004003b,0x00000020,0x00000021,0x00000009, + 0x00040020,0x00000022,0x00000009,0x00000006,0x0004002b,0x00000014,0x00000026,0x00000001, + 0x0004002b,0x00000006,0x0000002b,0x00000040,0x0004002b,0x00000006,0x0000002c,0x00000001, + 0x0006002c,0x00000009,0x0000002d,0x0000002b,0x0000002c,0x0000002c,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000008, + 0x00000007,0x00050041,0x0000000d,0x0000000e,0x0000000b,0x0000000c,0x0004003d,0x00000006, + 0x0000000f,0x0000000e,0x0003003e,0x00000008,0x0000000f,0x0004003d,0x00000006,0x00000016, + 0x00000008,0x0004003d,0x00000006,0x0000001b,0x00000008,0x00060041,0x0000001c,0x0000001d, + 0x0000001a,0x00000015,0x0000001b,0x0004003d,0x00000006,0x0000001e,0x0000001d,0x00050041, + 0x00000022,0x00000023,0x00000021,0x00000015,0x0004003d,0x00000006,0x00000024,0x00000023, + 0x00050084,0x00000006,0x00000025,0x0000001e,0x00000024,0x00050041,0x00000022,0x00000027, + 0x00000021,0x00000026,0x0004003d,0x00000006,0x00000028,0x00000027,0x00050080,0x00000006, + 0x00000029,0x00000025,0x00000028,0x00060041,0x0000001c,0x0000002a,0x00000013,0x00000015, + 0x00000016,0x0003003e,0x0000002a,0x00000029,0x000100fd,0x00010038 +}; + // 1115.1.0 + #pragma once +static const uint32_t spv_smoke_vert[] = { + 0x07230203,0x00010000,0x0008000b,0x0000002b,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0007000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000c,0x0000001d,0x00030003, + 0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00030005,0x00000009, + 0x00000070,0x00060005,0x0000000c,0x565f6c67,0x65747265,0x646e4978,0x00007865,0x00060005, + 0x0000001b,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x0000001b,0x00000000, + 0x505f6c67,0x7469736f,0x006e6f69,0x00070006,0x0000001b,0x00000001,0x505f6c67,0x746e696f, + 0x657a6953,0x00000000,0x00070006,0x0000001b,0x00000002,0x435f6c67,0x4470696c,0x61747369, + 0x0065636e,0x00070006,0x0000001b,0x00000003,0x435f6c67,0x446c6c75,0x61747369,0x0065636e, + 0x00030005,0x0000001d,0x00000000,0x00040047,0x0000000c,0x0000000b,0x0000002a,0x00030047, + 0x0000001b,0x00000002,0x00050048,0x0000001b,0x00000000,0x0000000b,0x00000000,0x00050048, + 0x0000001b,0x00000001,0x0000000b,0x00000001,0x00050048,0x0000001b,0x00000002,0x0000000b, + 0x00000003,0x00050048,0x0000001b,0x00000003,0x0000000b,0x00000004,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007, + 0x00000006,0x00000002,0x00040020,0x00000008,0x00000007,0x00000007,0x00040015,0x0000000a, + 0x00000020,0x00000001,0x00040020,0x0000000b,0x00000001,0x0000000a,0x0004003b,0x0000000b, + 0x0000000c,0x00000001,0x0004002b,0x0000000a,0x0000000e,0x00000001,0x0004002b,0x0000000a, + 0x00000010,0x00000002,0x00040017,0x00000017,0x00000006,0x00000004,0x00040015,0x00000018, + 0x00000020,0x00000000,0x0004002b,0x00000018,0x00000019,0x00000001,0x0004001c,0x0000001a, + 0x00000006,0x00000019,0x0006001e,0x0000001b,0x00000017,0x00000006,0x0000001a,0x0000001a, + 0x00040020,0x0000001c,0x00000003,0x0000001b,0x0004003b,0x0000001c,0x0000001d,0x00000003, + 0x0004002b,0x0000000a,0x0000001e,0x00000000,0x0004002b,0x00000006,0x00000020,0x40000000, + 0x0004002b,0x00000006,0x00000022,0x3f800000,0x0004002b,0x00000006,0x00000025,0x00000000, + 0x00040020,0x00000029,0x00000003,0x00000017,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,0x00000009,0x00000007,0x0004003d, + 0x0000000a,0x0000000d,0x0000000c,0x000500c4,0x0000000a,0x0000000f,0x0000000d,0x0000000e, + 0x000500c7,0x0000000a,0x00000011,0x0000000f,0x00000010,0x0004006f,0x00000006,0x00000012, + 0x00000011,0x0004003d,0x0000000a,0x00000013,0x0000000c,0x000500c7,0x0000000a,0x00000014, + 0x00000013,0x00000010,0x0004006f,0x00000006,0x00000015,0x00000014,0x00050050,0x00000007, + 0x00000016,0x00000012,0x00000015,0x0003003e,0x00000009,0x00000016,0x0004003d,0x00000007, + 0x0000001f,0x00000009,0x0005008e,0x00000007,0x00000021,0x0000001f,0x00000020,0x00050050, + 0x00000007,0x00000023,0x00000022,0x00000022,0x00050083,0x00000007,0x00000024,0x00000021, + 0x00000023,0x00050051,0x00000006,0x00000026,0x00000024,0x00000000,0x00050051,0x00000006, + 0x00000027,0x00000024,0x00000001,0x00070050,0x00000017,0x00000028,0x00000026,0x00000027, + 0x00000025,0x00000022,0x00050041,0x00000029,0x0000002a,0x0000001d,0x0000001e,0x0003003e, + 0x0000002a,0x00000028,0x000100fd,0x00010038 +}; + // 1115.1.0 + #pragma once +static const uint32_t spv_smoke_frag[] = { + 0x07230203,0x00010000,0x0008000b,0x00000012,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x00030010,0x00000004, + 0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000, + 0x00030005,0x00000009,0x0000006f,0x00030005,0x0000000a,0x00004350,0x00050006,0x0000000a, + 0x00000000,0x6f6c6f63,0x00000072,0x00030005,0x0000000c,0x00006370,0x00040047,0x00000009, + 0x0000001e,0x00000000,0x00030047,0x0000000a,0x00000002,0x00050048,0x0000000a,0x00000000, + 0x00000023,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008, + 0x00000003,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x0003001e,0x0000000a, + 0x00000007,0x00040020,0x0000000b,0x00000009,0x0000000a,0x0004003b,0x0000000b,0x0000000c, + 0x00000009,0x00040015,0x0000000d,0x00000020,0x00000001,0x0004002b,0x0000000d,0x0000000e, + 0x00000000,0x00040020,0x0000000f,0x00000009,0x00000007,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x0000000f,0x00000010,0x0000000c, + 0x0000000e,0x0004003d,0x00000007,0x00000011,0x00000010,0x0003003e,0x00000009,0x00000011, + 0x000100fd,0x00010038 +}; diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/LICENSE.md b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/LICENSE.md new file mode 100644 index 000000000..d6a0648b6 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/LICENSE.md @@ -0,0 +1,18 @@ +Copyright 2015-2023 The Khronos Group Inc. + +Files in this repository fall under one of these licenses: + +- `Apache-2.0` +- `MIT` + +Note: With the exception of `parse_dependency.py` the files using `MIT` license +also fall under `Apache-2.0`. Example: + +``` +SPDX-License-Identifier: Apache-2.0 OR MIT +``` + +Full license text of these licenses is available at: + + * Apache-2.0: https://opensource.org/licenses/Apache-2.0 + * MIT: https://opensource.org/licenses/MIT diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std.h new file mode 100644 index 000000000..75cebd74c --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std.h @@ -0,0 +1,394 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_AV1_NUM_REF_FRAMES 8U +#define STD_VIDEO_AV1_REFS_PER_FRAME 7U +#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8U +#define STD_VIDEO_AV1_MAX_TILE_COLS 64U +#define STD_VIDEO_AV1_MAX_TILE_ROWS 64U +#define STD_VIDEO_AV1_MAX_SEGMENTS 8U +#define STD_VIDEO_AV1_SEG_LVL_MAX 8U +#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7U +#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2U +#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2U +#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2U +#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4U +#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2U +#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8U +#define STD_VIDEO_AV1_MAX_NUM_PLANES 3U +#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6U +#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14U +#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10U +#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10U +#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24U +#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25U + +typedef enum StdVideoAV1Profile { + STD_VIDEO_AV1_PROFILE_MAIN = 0, + STD_VIDEO_AV1_PROFILE_HIGH = 1, + STD_VIDEO_AV1_PROFILE_PROFESSIONAL = 2, + STD_VIDEO_AV1_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1Profile; + +typedef enum StdVideoAV1Level { + STD_VIDEO_AV1_LEVEL_2_0 = 0, + STD_VIDEO_AV1_LEVEL_2_1 = 1, + STD_VIDEO_AV1_LEVEL_2_2 = 2, + STD_VIDEO_AV1_LEVEL_2_3 = 3, + STD_VIDEO_AV1_LEVEL_3_0 = 4, + STD_VIDEO_AV1_LEVEL_3_1 = 5, + STD_VIDEO_AV1_LEVEL_3_2 = 6, + STD_VIDEO_AV1_LEVEL_3_3 = 7, + STD_VIDEO_AV1_LEVEL_4_0 = 8, + STD_VIDEO_AV1_LEVEL_4_1 = 9, + STD_VIDEO_AV1_LEVEL_4_2 = 10, + STD_VIDEO_AV1_LEVEL_4_3 = 11, + STD_VIDEO_AV1_LEVEL_5_0 = 12, + STD_VIDEO_AV1_LEVEL_5_1 = 13, + STD_VIDEO_AV1_LEVEL_5_2 = 14, + STD_VIDEO_AV1_LEVEL_5_3 = 15, + STD_VIDEO_AV1_LEVEL_6_0 = 16, + STD_VIDEO_AV1_LEVEL_6_1 = 17, + STD_VIDEO_AV1_LEVEL_6_2 = 18, + STD_VIDEO_AV1_LEVEL_6_3 = 19, + STD_VIDEO_AV1_LEVEL_7_0 = 20, + STD_VIDEO_AV1_LEVEL_7_1 = 21, + STD_VIDEO_AV1_LEVEL_7_2 = 22, + STD_VIDEO_AV1_LEVEL_7_3 = 23, + STD_VIDEO_AV1_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1Level; + +typedef enum StdVideoAV1FrameType { + STD_VIDEO_AV1_FRAME_TYPE_KEY = 0, + STD_VIDEO_AV1_FRAME_TYPE_INTER = 1, + STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY = 2, + STD_VIDEO_AV1_FRAME_TYPE_SWITCH = 3, + STD_VIDEO_AV1_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1FrameType; + +typedef enum StdVideoAV1ReferenceName { + STD_VIDEO_AV1_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_AV1_REFERENCE_NAME_LAST2_FRAME = 2, + STD_VIDEO_AV1_REFERENCE_NAME_LAST3_FRAME = 3, + STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME = 4, + STD_VIDEO_AV1_REFERENCE_NAME_BWDREF_FRAME = 5, + STD_VIDEO_AV1_REFERENCE_NAME_ALTREF2_FRAME = 6, + STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME = 7, + STD_VIDEO_AV1_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ReferenceName; + +typedef enum StdVideoAV1InterpolationFilter { + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_AV1_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_AV1_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_AV1_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1InterpolationFilter; + +typedef enum StdVideoAV1TxMode { + STD_VIDEO_AV1_TX_MODE_ONLY_4X4 = 0, + STD_VIDEO_AV1_TX_MODE_LARGEST = 1, + STD_VIDEO_AV1_TX_MODE_SELECT = 2, + STD_VIDEO_AV1_TX_MODE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_TX_MODE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1TxMode; + +typedef enum StdVideoAV1FrameRestorationType { + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_NONE = 0, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_WIENER = 1, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SGRPROJ = 2, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SWITCHABLE = 3, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1FrameRestorationType; + +typedef enum StdVideoAV1ColorPrimaries { + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_709 = 1, + STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED = 2, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_M = 4, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_B_G = 5, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_601 = 6, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_240 = 7, + STD_VIDEO_AV1_COLOR_PRIMARIES_GENERIC_FILM = 8, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_2020 = 9, + STD_VIDEO_AV1_COLOR_PRIMARIES_XYZ = 10, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_431 = 11, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432 = 12, + STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213 = 22, + STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID = 0x7FFFFFFF, + // STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED is a legacy alias + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED, + STD_VIDEO_AV1_COLOR_PRIMARIES_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ColorPrimaries; + +typedef enum StdVideoAV1TransferCharacteristics { + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_0 = 0, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_709 = 1, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_UNSPECIFIED = 2, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_3 = 3, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_M = 4, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_B_G = 5, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_601 = 6, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_240 = 7, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LINEAR = 8, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100 = 9, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100_SQRT10 = 10, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_IEC_61966 = 11, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_1361 = 12, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SRGB = 13, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_10_BIT = 14, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_12_BIT = 15, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_2084 = 16, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_428 = 17, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_HLG = 18, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1TransferCharacteristics; + +typedef enum StdVideoAV1MatrixCoefficients { + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_IDENTITY = 0, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_709 = 1, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_UNSPECIFIED = 2, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_RESERVED_3 = 3, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_FCC = 4, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_470_B_G = 5, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_601 = 6, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_240 = 7, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_YCGCO = 8, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_NCL = 9, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_CL = 10, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_2085 = 11, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_NCL = 12, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_CL = 13, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_ICTCP = 14, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1MatrixCoefficients; + +typedef enum StdVideoAV1ChromaSamplePosition { + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_UNKNOWN = 0, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_VERTICAL = 1, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_COLOCATED = 2, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED = 3, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ChromaSamplePosition; +typedef struct StdVideoAV1ColorConfigFlags { + uint32_t mono_chrome : 1; + uint32_t color_range : 1; + uint32_t separate_uv_delta_q : 1; + uint32_t color_description_present_flag : 1; + uint32_t reserved : 28; +} StdVideoAV1ColorConfigFlags; + +typedef struct StdVideoAV1ColorConfig { + StdVideoAV1ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoAV1ColorPrimaries color_primaries; + StdVideoAV1TransferCharacteristics transfer_characteristics; + StdVideoAV1MatrixCoefficients matrix_coefficients; + StdVideoAV1ChromaSamplePosition chroma_sample_position; +} StdVideoAV1ColorConfig; + +typedef struct StdVideoAV1TimingInfoFlags { + uint32_t equal_picture_interval : 1; + uint32_t reserved : 31; +} StdVideoAV1TimingInfoFlags; + +typedef struct StdVideoAV1TimingInfo { + StdVideoAV1TimingInfoFlags flags; + uint32_t num_units_in_display_tick; + uint32_t time_scale; + uint32_t num_ticks_per_picture_minus_1; +} StdVideoAV1TimingInfo; + +typedef struct StdVideoAV1LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoAV1LoopFilterFlags; + +typedef struct StdVideoAV1LoopFilter { + StdVideoAV1LoopFilterFlags flags; + uint8_t loop_filter_level[STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS]; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoAV1LoopFilter; + +typedef struct StdVideoAV1QuantizationFlags { + uint32_t using_qmatrix : 1; + uint32_t diff_uv_delta : 1; + uint32_t reserved : 30; +} StdVideoAV1QuantizationFlags; + +typedef struct StdVideoAV1Quantization { + StdVideoAV1QuantizationFlags flags; + uint8_t base_q_idx; + int8_t DeltaQYDc; + int8_t DeltaQUDc; + int8_t DeltaQUAc; + int8_t DeltaQVDc; + int8_t DeltaQVAc; + uint8_t qm_y; + uint8_t qm_u; + uint8_t qm_v; +} StdVideoAV1Quantization; + +typedef struct StdVideoAV1Segmentation { + uint8_t FeatureEnabled[STD_VIDEO_AV1_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_AV1_MAX_SEGMENTS][STD_VIDEO_AV1_SEG_LVL_MAX]; +} StdVideoAV1Segmentation; + +typedef struct StdVideoAV1TileInfoFlags { + uint32_t uniform_tile_spacing_flag : 1; + uint32_t reserved : 31; +} StdVideoAV1TileInfoFlags; + +typedef struct StdVideoAV1TileInfo { + StdVideoAV1TileInfoFlags flags; + uint8_t TileCols; + uint8_t TileRows; + uint16_t context_update_tile_id; + uint8_t tile_size_bytes_minus_1; + uint8_t reserved1[7]; + const uint16_t* pMiColStarts; + const uint16_t* pMiRowStarts; + const uint16_t* pWidthInSbsMinus1; + const uint16_t* pHeightInSbsMinus1; +} StdVideoAV1TileInfo; + +typedef struct StdVideoAV1CDEF { + uint8_t cdef_damping_minus_3; + uint8_t cdef_bits; + uint8_t cdef_y_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_y_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_uv_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_uv_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; +} StdVideoAV1CDEF; + +typedef struct StdVideoAV1LoopRestoration { + StdVideoAV1FrameRestorationType FrameRestorationType[STD_VIDEO_AV1_MAX_NUM_PLANES]; + uint16_t LoopRestorationSize[STD_VIDEO_AV1_MAX_NUM_PLANES]; +} StdVideoAV1LoopRestoration; + +typedef struct StdVideoAV1GlobalMotion { + uint8_t GmType[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int32_t gm_params[STD_VIDEO_AV1_NUM_REF_FRAMES][STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS]; +} StdVideoAV1GlobalMotion; + +typedef struct StdVideoAV1FilmGrainFlags { + uint32_t chroma_scaling_from_luma : 1; + uint32_t overlap_flag : 1; + uint32_t clip_to_restricted_range : 1; + uint32_t update_grain : 1; + uint32_t reserved : 28; +} StdVideoAV1FilmGrainFlags; + +typedef struct StdVideoAV1FilmGrain { + StdVideoAV1FilmGrainFlags flags; + uint8_t grain_scaling_minus_8; + uint8_t ar_coeff_lag; + uint8_t ar_coeff_shift_minus_6; + uint8_t grain_scale_shift; + uint16_t grain_seed; + uint8_t film_grain_params_ref_idx; + uint8_t num_y_points; + uint8_t point_y_value[STD_VIDEO_AV1_MAX_NUM_Y_POINTS]; + uint8_t point_y_scaling[STD_VIDEO_AV1_MAX_NUM_Y_POINTS]; + uint8_t num_cb_points; + uint8_t point_cb_value[STD_VIDEO_AV1_MAX_NUM_CB_POINTS]; + uint8_t point_cb_scaling[STD_VIDEO_AV1_MAX_NUM_CB_POINTS]; + uint8_t num_cr_points; + uint8_t point_cr_value[STD_VIDEO_AV1_MAX_NUM_CR_POINTS]; + uint8_t point_cr_scaling[STD_VIDEO_AV1_MAX_NUM_CR_POINTS]; + int8_t ar_coeffs_y_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_LUMA]; + int8_t ar_coeffs_cb_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA]; + int8_t ar_coeffs_cr_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA]; + uint8_t cb_mult; + uint8_t cb_luma_mult; + uint16_t cb_offset; + uint8_t cr_mult; + uint8_t cr_luma_mult; + uint16_t cr_offset; +} StdVideoAV1FilmGrain; + +typedef struct StdVideoAV1SequenceHeaderFlags { + uint32_t still_picture : 1; + uint32_t reduced_still_picture_header : 1; + uint32_t use_128x128_superblock : 1; + uint32_t enable_filter_intra : 1; + uint32_t enable_intra_edge_filter : 1; + uint32_t enable_interintra_compound : 1; + uint32_t enable_masked_compound : 1; + uint32_t enable_warped_motion : 1; + uint32_t enable_dual_filter : 1; + uint32_t enable_order_hint : 1; + uint32_t enable_jnt_comp : 1; + uint32_t enable_ref_frame_mvs : 1; + uint32_t frame_id_numbers_present_flag : 1; + uint32_t enable_superres : 1; + uint32_t enable_cdef : 1; + uint32_t enable_restoration : 1; + uint32_t film_grain_params_present : 1; + uint32_t timing_info_present_flag : 1; + uint32_t initial_display_delay_present_flag : 1; + uint32_t reserved : 13; +} StdVideoAV1SequenceHeaderFlags; + +typedef struct StdVideoAV1SequenceHeader { + StdVideoAV1SequenceHeaderFlags flags; + StdVideoAV1Profile seq_profile; + uint8_t frame_width_bits_minus_1; + uint8_t frame_height_bits_minus_1; + uint16_t max_frame_width_minus_1; + uint16_t max_frame_height_minus_1; + uint8_t delta_frame_id_length_minus_2; + uint8_t additional_frame_id_length_minus_1; + uint8_t order_hint_bits_minus_1; + uint8_t seq_force_integer_mv; + uint8_t seq_force_screen_content_tools; + uint8_t reserved1[5]; + const StdVideoAV1ColorConfig* pColorConfig; + const StdVideoAV1TimingInfo* pTimingInfo; +} StdVideoAV1SequenceHeader; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std_decode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std_decode.h new file mode 100644 index 000000000..60bf2c039 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std_decode.h @@ -0,0 +1,109 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_decode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_decode" +typedef struct StdVideoDecodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t reference_select : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t apply_grain : 1; + uint32_t reserved : 3; +} StdVideoDecodeAV1PictureInfoFlags; + +typedef struct StdVideoDecodeAV1PictureInfo { + StdVideoDecodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t current_frame_id; + uint8_t OrderHint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t reserved1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t SkipModeFrame[STD_VIDEO_AV1_SKIP_MODE_FRAMES]; + uint8_t coded_denom; + uint8_t reserved2[3]; + uint8_t OrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES]; + uint32_t expectedFrameId[STD_VIDEO_AV1_NUM_REF_FRAMES]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoAV1FilmGrain* pFilmGrain; +} StdVideoDecodeAV1PictureInfo; + +typedef struct StdVideoDecodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoDecodeAV1ReferenceInfoFlags; + +typedef struct StdVideoDecodeAV1ReferenceInfo { + StdVideoDecodeAV1ReferenceInfoFlags flags; + uint8_t frame_type; + uint8_t RefFrameSignBias; + uint8_t OrderHint; + uint8_t SavedOrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES]; +} StdVideoDecodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std_encode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std_encode.h new file mode 100644 index 000000000..3602fe125 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_av1std_encode.h @@ -0,0 +1,143 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_encode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_encode" +typedef struct StdVideoEncodeAV1DecoderModelInfo { + uint8_t buffer_delay_length_minus_1; + uint8_t buffer_removal_time_length_minus_1; + uint8_t frame_presentation_time_length_minus_1; + uint8_t reserved1; + uint32_t num_units_in_decoding_tick; +} StdVideoEncodeAV1DecoderModelInfo; + +typedef struct StdVideoEncodeAV1ExtensionHeader { + uint8_t temporal_id; + uint8_t spatial_id; +} StdVideoEncodeAV1ExtensionHeader; + +typedef struct StdVideoEncodeAV1OperatingPointInfoFlags { + uint32_t decoder_model_present_for_this_op : 1; + uint32_t low_delay_mode_flag : 1; + uint32_t initial_display_delay_present_for_this_op : 1; + uint32_t reserved : 29; +} StdVideoEncodeAV1OperatingPointInfoFlags; + +typedef struct StdVideoEncodeAV1OperatingPointInfo { + StdVideoEncodeAV1OperatingPointInfoFlags flags; + uint16_t operating_point_idc; + uint8_t seq_level_idx; + uint8_t seq_tier; + uint32_t decoder_buffer_delay; + uint32_t encoder_buffer_delay; + uint8_t initial_display_delay_minus_1; +} StdVideoEncodeAV1OperatingPointInfo; + +typedef struct StdVideoEncodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t show_frame : 1; + uint32_t showable_frame : 1; + uint32_t reserved : 3; +} StdVideoEncodeAV1PictureInfoFlags; + +typedef struct StdVideoEncodeAV1PictureInfo { + StdVideoEncodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t frame_presentation_time; + uint32_t current_frame_id; + uint8_t order_hint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t coded_denom; + uint16_t render_width_minus_1; + uint16_t render_height_minus_1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t ref_order_hint[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int8_t ref_frame_idx[STD_VIDEO_AV1_REFS_PER_FRAME]; + uint8_t reserved1[3]; + uint32_t delta_frame_id_minus_1[STD_VIDEO_AV1_REFS_PER_FRAME]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; + const uint32_t* pBufferRemovalTimes; +} StdVideoEncodeAV1PictureInfo; + +typedef struct StdVideoEncodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoEncodeAV1ReferenceInfoFlags; + +typedef struct StdVideoEncodeAV1ReferenceInfo { + StdVideoEncodeAV1ReferenceInfoFlags flags; + uint32_t RefFrameId; + StdVideoAV1FrameType frame_type; + uint8_t OrderHint; + uint8_t reserved1[3]; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; +} StdVideoEncodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std.h new file mode 100644 index 000000000..48621b695 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std.h @@ -0,0 +1,312 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_H_ +#define VULKAN_VIDEO_CODEC_H264STD_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h264std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32U +#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6U +#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16U +#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6U +#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64U +#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32U +#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2U +#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFFU + +typedef enum StdVideoH264ChromaFormatIdc { + STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_420 = 1, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_422 = 2, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_444 = 3, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ChromaFormatIdc; + +typedef enum StdVideoH264ProfileIdc { + STD_VIDEO_H264_PROFILE_IDC_BASELINE = 66, + STD_VIDEO_H264_PROFILE_IDC_MAIN = 77, + STD_VIDEO_H264_PROFILE_IDC_HIGH = 100, + STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE = 244, + STD_VIDEO_H264_PROFILE_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ProfileIdc; + +typedef enum StdVideoH264LevelIdc { + STD_VIDEO_H264_LEVEL_IDC_1_0 = 0, + STD_VIDEO_H264_LEVEL_IDC_1_1 = 1, + STD_VIDEO_H264_LEVEL_IDC_1_2 = 2, + STD_VIDEO_H264_LEVEL_IDC_1_3 = 3, + STD_VIDEO_H264_LEVEL_IDC_2_0 = 4, + STD_VIDEO_H264_LEVEL_IDC_2_1 = 5, + STD_VIDEO_H264_LEVEL_IDC_2_2 = 6, + STD_VIDEO_H264_LEVEL_IDC_3_0 = 7, + STD_VIDEO_H264_LEVEL_IDC_3_1 = 8, + STD_VIDEO_H264_LEVEL_IDC_3_2 = 9, + STD_VIDEO_H264_LEVEL_IDC_4_0 = 10, + STD_VIDEO_H264_LEVEL_IDC_4_1 = 11, + STD_VIDEO_H264_LEVEL_IDC_4_2 = 12, + STD_VIDEO_H264_LEVEL_IDC_5_0 = 13, + STD_VIDEO_H264_LEVEL_IDC_5_1 = 14, + STD_VIDEO_H264_LEVEL_IDC_5_2 = 15, + STD_VIDEO_H264_LEVEL_IDC_6_0 = 16, + STD_VIDEO_H264_LEVEL_IDC_6_1 = 17, + STD_VIDEO_H264_LEVEL_IDC_6_2 = 18, + STD_VIDEO_H264_LEVEL_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_LEVEL_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264LevelIdc; + +typedef enum StdVideoH264PocType { + STD_VIDEO_H264_POC_TYPE_0 = 0, + STD_VIDEO_H264_POC_TYPE_1 = 1, + STD_VIDEO_H264_POC_TYPE_2 = 2, + STD_VIDEO_H264_POC_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_POC_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264PocType; + +typedef enum StdVideoH264AspectRatioIdc { + STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED = 0, + STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE = 1, + STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11 = 2, + STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11 = 3, + STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11 = 4, + STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33 = 5, + STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11 = 6, + STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11 = 7, + STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11 = 8, + STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33 = 9, + STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11 = 10, + STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11 = 11, + STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33 = 12, + STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99 = 13, + STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3 = 14, + STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2 = 15, + STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1 = 16, + STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, + STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264AspectRatioIdc; + +typedef enum StdVideoH264WeightedBipredIdc { + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT = 0, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT = 1, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT = 2, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264WeightedBipredIdc; + +typedef enum StdVideoH264ModificationOfPicNumsIdc { + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT = 0, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD = 1, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM = 2, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END = 3, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ModificationOfPicNumsIdc; + +typedef enum StdVideoH264MemMgmtControlOp { + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END = 0, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM = 1, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM = 2, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM = 3, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX = 4, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL = 5, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM = 6, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264MemMgmtControlOp; + +typedef enum StdVideoH264CabacInitIdc { + STD_VIDEO_H264_CABAC_INIT_IDC_0 = 0, + STD_VIDEO_H264_CABAC_INIT_IDC_1 = 1, + STD_VIDEO_H264_CABAC_INIT_IDC_2 = 2, + STD_VIDEO_H264_CABAC_INIT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_CABAC_INIT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264CabacInitIdc; + +typedef enum StdVideoH264DisableDeblockingFilterIdc { + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED = 0, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED = 1, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL = 2, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264DisableDeblockingFilterIdc; + +typedef enum StdVideoH264SliceType { + STD_VIDEO_H264_SLICE_TYPE_P = 0, + STD_VIDEO_H264_SLICE_TYPE_B = 1, + STD_VIDEO_H264_SLICE_TYPE_I = 2, + STD_VIDEO_H264_SLICE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264SliceType; + +typedef enum StdVideoH264PictureType { + STD_VIDEO_H264_PICTURE_TYPE_P = 0, + STD_VIDEO_H264_PICTURE_TYPE_B = 1, + STD_VIDEO_H264_PICTURE_TYPE_I = 2, + STD_VIDEO_H264_PICTURE_TYPE_IDR = 5, + STD_VIDEO_H264_PICTURE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264PictureType; + +typedef enum StdVideoH264NonVclNaluType { + STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS = 0, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS = 1, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD = 2, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX = 3, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE = 4, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM = 5, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED = 6, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264NonVclNaluType; +typedef struct StdVideoH264SpsVuiFlags { + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t color_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t timing_info_present_flag : 1; + uint32_t fixed_frame_rate_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; +} StdVideoH264SpsVuiFlags; + +typedef struct StdVideoH264HrdParameters { + uint8_t cpb_cnt_minus1; + uint8_t bit_rate_scale; + uint8_t cpb_size_scale; + uint8_t reserved1; + uint32_t bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint8_t cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint32_t initial_cpb_removal_delay_length_minus1; + uint32_t cpb_removal_delay_length_minus1; + uint32_t dpb_output_delay_length_minus1; + uint32_t time_offset_length; +} StdVideoH264HrdParameters; + +typedef struct StdVideoH264SequenceParameterSetVui { + StdVideoH264SpsVuiFlags flags; + StdVideoH264AspectRatioIdc aspect_ratio_idc; + uint16_t sar_width; + uint16_t sar_height; + uint8_t video_format; + uint8_t colour_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coefficients; + uint32_t num_units_in_tick; + uint32_t time_scale; + uint8_t max_num_reorder_frames; + uint8_t max_dec_frame_buffering; + uint8_t chroma_sample_loc_type_top_field; + uint8_t chroma_sample_loc_type_bottom_field; + uint32_t reserved1; + const StdVideoH264HrdParameters* pHrdParameters; +} StdVideoH264SequenceParameterSetVui; + +typedef struct StdVideoH264SpsFlags { + uint32_t constraint_set0_flag : 1; + uint32_t constraint_set1_flag : 1; + uint32_t constraint_set2_flag : 1; + uint32_t constraint_set3_flag : 1; + uint32_t constraint_set4_flag : 1; + uint32_t constraint_set5_flag : 1; + uint32_t direct_8x8_inference_flag : 1; + uint32_t mb_adaptive_frame_field_flag : 1; + uint32_t frame_mbs_only_flag : 1; + uint32_t delta_pic_order_always_zero_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t gaps_in_frame_num_value_allowed_flag : 1; + uint32_t qpprime_y_zero_transform_bypass_flag : 1; + uint32_t frame_cropping_flag : 1; + uint32_t seq_scaling_matrix_present_flag : 1; + uint32_t vui_parameters_present_flag : 1; +} StdVideoH264SpsFlags; + +typedef struct StdVideoH264ScalingLists { + uint16_t scaling_list_present_mask; + uint16_t use_default_scaling_matrix_mask; + uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS]; + uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS]; +} StdVideoH264ScalingLists; + +typedef struct StdVideoH264SequenceParameterSet { + StdVideoH264SpsFlags flags; + StdVideoH264ProfileIdc profile_idc; + StdVideoH264LevelIdc level_idc; + StdVideoH264ChromaFormatIdc chroma_format_idc; + uint8_t seq_parameter_set_id; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t log2_max_frame_num_minus4; + StdVideoH264PocType pic_order_cnt_type; + int32_t offset_for_non_ref_pic; + int32_t offset_for_top_to_bottom_field; + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t num_ref_frames_in_pic_order_cnt_cycle; + uint8_t max_num_ref_frames; + uint8_t reserved1; + uint32_t pic_width_in_mbs_minus1; + uint32_t pic_height_in_map_units_minus1; + uint32_t frame_crop_left_offset; + uint32_t frame_crop_right_offset; + uint32_t frame_crop_top_offset; + uint32_t frame_crop_bottom_offset; + uint32_t reserved2; + const int32_t* pOffsetForRefFrame; + const StdVideoH264ScalingLists* pScalingLists; + const StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui; +} StdVideoH264SequenceParameterSet; + +typedef struct StdVideoH264PpsFlags { + uint32_t transform_8x8_mode_flag : 1; + uint32_t redundant_pic_cnt_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t bottom_field_pic_order_in_frame_present_flag : 1; + uint32_t entropy_coding_mode_flag : 1; + uint32_t pic_scaling_matrix_present_flag : 1; +} StdVideoH264PpsFlags; + +typedef struct StdVideoH264PictureParameterSet { + StdVideoH264PpsFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + StdVideoH264WeightedBipredIdc weighted_bipred_idc; + int8_t pic_init_qp_minus26; + int8_t pic_init_qs_minus26; + int8_t chroma_qp_index_offset; + int8_t second_chroma_qp_index_offset; + const StdVideoH264ScalingLists* pScalingLists; +} StdVideoH264PictureParameterSet; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std_decode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std_decode.h new file mode 100644 index 000000000..a6bfe9d82 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std_decode.h @@ -0,0 +1,77 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h264std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std_decode 1 +#include "vulkan_video_codec_h264std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode" +#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2U + +typedef enum StdVideoDecodeH264FieldOrderCount { + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM = 1, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID = 0x7FFFFFFF, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_MAX_ENUM = 0x7FFFFFFF +} StdVideoDecodeH264FieldOrderCount; +typedef struct StdVideoDecodeH264PictureInfoFlags { + uint32_t field_pic_flag : 1; + uint32_t is_intra : 1; + uint32_t IdrPicFlag : 1; + uint32_t bottom_field_flag : 1; + uint32_t is_reference : 1; + uint32_t complementary_field_pair : 1; +} StdVideoDecodeH264PictureInfoFlags; + +typedef struct StdVideoDecodeH264PictureInfo { + StdVideoDecodeH264PictureInfoFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint8_t reserved1; + uint8_t reserved2; + uint16_t frame_num; + uint16_t idr_pic_id; + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; +} StdVideoDecodeH264PictureInfo; + +typedef struct StdVideoDecodeH264ReferenceInfoFlags { + uint32_t top_field_flag : 1; + uint32_t bottom_field_flag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t is_non_existing : 1; +} StdVideoDecodeH264ReferenceInfoFlags; + +typedef struct StdVideoDecodeH264ReferenceInfo { + StdVideoDecodeH264ReferenceInfoFlags flags; + uint16_t FrameNum; + uint16_t reserved; + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; +} StdVideoDecodeH264ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std_encode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std_encode.h new file mode 100644 index 000000000..2d42ac321 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h264std_encode.h @@ -0,0 +1,147 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h264std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std_encode 1 +#include "vulkan_video_codec_h264std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_encode" +typedef struct StdVideoEncodeH264WeightTableFlags { + uint32_t luma_weight_l0_flag; + uint32_t chroma_weight_l0_flag; + uint32_t luma_weight_l1_flag; + uint32_t chroma_weight_l1_flag; +} StdVideoEncodeH264WeightTableFlags; + +typedef struct StdVideoEncodeH264WeightTable { + StdVideoEncodeH264WeightTableFlags flags; + uint8_t luma_log2_weight_denom; + uint8_t chroma_log2_weight_denom; + int8_t luma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t luma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t chroma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t chroma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t luma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t luma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t chroma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t chroma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; +} StdVideoEncodeH264WeightTable; + +typedef struct StdVideoEncodeH264SliceHeaderFlags { + uint32_t direct_spatial_mv_pred_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t reserved : 30; +} StdVideoEncodeH264SliceHeaderFlags; + +typedef struct StdVideoEncodeH264PictureInfoFlags { + uint32_t IdrPicFlag : 1; + uint32_t is_reference : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t long_term_reference_flag : 1; + uint32_t adaptive_ref_pic_marking_mode_flag : 1; + uint32_t reserved : 27; +} StdVideoEncodeH264PictureInfoFlags; + +typedef struct StdVideoEncodeH264ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t reserved : 31; +} StdVideoEncodeH264ReferenceInfoFlags; + +typedef struct StdVideoEncodeH264ReferenceListsInfoFlags { + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; +} StdVideoEncodeH264ReferenceListsInfoFlags; + +typedef struct StdVideoEncodeH264RefListModEntry { + StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc; + uint16_t abs_diff_pic_num_minus1; + uint16_t long_term_pic_num; +} StdVideoEncodeH264RefListModEntry; + +typedef struct StdVideoEncodeH264RefPicMarkingEntry { + StdVideoH264MemMgmtControlOp memory_management_control_operation; + uint16_t difference_of_pic_nums_minus1; + uint16_t long_term_pic_num; + uint16_t long_term_frame_idx; + uint16_t max_long_term_frame_idx_plus1; +} StdVideoEncodeH264RefPicMarkingEntry; + +typedef struct StdVideoEncodeH264ReferenceListsInfo { + StdVideoEncodeH264ReferenceListsInfoFlags flags; + uint8_t num_ref_idx_l0_active_minus1; + uint8_t num_ref_idx_l1_active_minus1; + uint8_t RefPicList0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + uint8_t RefPicList1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + uint8_t refList0ModOpCount; + uint8_t refList1ModOpCount; + uint8_t refPicMarkingOpCount; + uint8_t reserved1[7]; + const StdVideoEncodeH264RefListModEntry* pRefList0ModOperations; + const StdVideoEncodeH264RefListModEntry* pRefList1ModOperations; + const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations; +} StdVideoEncodeH264ReferenceListsInfo; + +typedef struct StdVideoEncodeH264PictureInfo { + StdVideoEncodeH264PictureInfoFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint16_t idr_pic_id; + StdVideoH264PictureType primary_pic_type; + uint32_t frame_num; + int32_t PicOrderCnt; + uint8_t temporal_id; + uint8_t reserved1[3]; + const StdVideoEncodeH264ReferenceListsInfo* pRefLists; +} StdVideoEncodeH264PictureInfo; + +typedef struct StdVideoEncodeH264ReferenceInfo { + StdVideoEncodeH264ReferenceInfoFlags flags; + StdVideoH264PictureType primary_pic_type; + uint32_t FrameNum; + int32_t PicOrderCnt; + uint16_t long_term_pic_num; + uint16_t long_term_frame_idx; + uint8_t temporal_id; +} StdVideoEncodeH264ReferenceInfo; + +typedef struct StdVideoEncodeH264SliceHeader { + StdVideoEncodeH264SliceHeaderFlags flags; + uint32_t first_mb_in_slice; + StdVideoH264SliceType slice_type; + int8_t slice_alpha_c0_offset_div2; + int8_t slice_beta_offset_div2; + int8_t slice_qp_delta; + uint8_t reserved1; + StdVideoH264CabacInitIdc cabac_init_idc; + StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc; + const StdVideoEncodeH264WeightTable* pWeightTable; +} StdVideoEncodeH264SliceHeader; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std.h new file mode 100644 index 000000000..23617b8f9 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std.h @@ -0,0 +1,446 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_H_ +#define VULKAN_VIDEO_CODEC_H265STD_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h265std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32U +#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7U +#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6U +#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16U +#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6U +#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64U +#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6U +#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64U +#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2U +#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64U +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6U +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19U +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21U +#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3U +#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128U +#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15U +#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2U +#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64U +#define STD_VIDEO_H265_MAX_DPB_SIZE 16U +#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32U +#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16U +#define STD_VIDEO_H265_MAX_DELTA_POC 48U +#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFFU + +typedef enum StdVideoH265ChromaFormatIdc { + STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_420 = 1, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_422 = 2, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_444 = 3, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265ChromaFormatIdc; + +typedef enum StdVideoH265ProfileIdc { + STD_VIDEO_H265_PROFILE_IDC_MAIN = 1, + STD_VIDEO_H265_PROFILE_IDC_MAIN_10 = 2, + STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE = 3, + STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS = 4, + STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS = 9, + STD_VIDEO_H265_PROFILE_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265ProfileIdc; + +typedef enum StdVideoH265LevelIdc { + STD_VIDEO_H265_LEVEL_IDC_1_0 = 0, + STD_VIDEO_H265_LEVEL_IDC_2_0 = 1, + STD_VIDEO_H265_LEVEL_IDC_2_1 = 2, + STD_VIDEO_H265_LEVEL_IDC_3_0 = 3, + STD_VIDEO_H265_LEVEL_IDC_3_1 = 4, + STD_VIDEO_H265_LEVEL_IDC_4_0 = 5, + STD_VIDEO_H265_LEVEL_IDC_4_1 = 6, + STD_VIDEO_H265_LEVEL_IDC_5_0 = 7, + STD_VIDEO_H265_LEVEL_IDC_5_1 = 8, + STD_VIDEO_H265_LEVEL_IDC_5_2 = 9, + STD_VIDEO_H265_LEVEL_IDC_6_0 = 10, + STD_VIDEO_H265_LEVEL_IDC_6_1 = 11, + STD_VIDEO_H265_LEVEL_IDC_6_2 = 12, + STD_VIDEO_H265_LEVEL_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_LEVEL_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265LevelIdc; + +typedef enum StdVideoH265SliceType { + STD_VIDEO_H265_SLICE_TYPE_B = 0, + STD_VIDEO_H265_SLICE_TYPE_P = 1, + STD_VIDEO_H265_SLICE_TYPE_I = 2, + STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265SliceType; + +typedef enum StdVideoH265PictureType { + STD_VIDEO_H265_PICTURE_TYPE_P = 0, + STD_VIDEO_H265_PICTURE_TYPE_B = 1, + STD_VIDEO_H265_PICTURE_TYPE_I = 2, + STD_VIDEO_H265_PICTURE_TYPE_IDR = 3, + STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265PictureType; + +typedef enum StdVideoH265AspectRatioIdc { + STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED = 0, + STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE = 1, + STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11 = 2, + STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11 = 3, + STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11 = 4, + STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33 = 5, + STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11 = 6, + STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11 = 7, + STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11 = 8, + STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33 = 9, + STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11 = 10, + STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11 = 11, + STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33 = 12, + STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99 = 13, + STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3 = 14, + STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2 = 15, + STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1 = 16, + STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, + STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265AspectRatioIdc; +typedef struct StdVideoH265DecPicBufMgr { + uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint8_t max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint8_t max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; +} StdVideoH265DecPicBufMgr; + +typedef struct StdVideoH265SubLayerHrdParameters { + uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cbr_flag; +} StdVideoH265SubLayerHrdParameters; + +typedef struct StdVideoH265HrdFlags { + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; + uint32_t sub_pic_hrd_params_present_flag : 1; + uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1; + uint32_t fixed_pic_rate_general_flag : 8; + uint32_t fixed_pic_rate_within_cvs_flag : 8; + uint32_t low_delay_hrd_flag : 8; +} StdVideoH265HrdFlags; + +typedef struct StdVideoH265HrdParameters { + StdVideoH265HrdFlags flags; + uint8_t tick_divisor_minus2; + uint8_t du_cpb_removal_delay_increment_length_minus1; + uint8_t dpb_output_delay_du_length_minus1; + uint8_t bit_rate_scale; + uint8_t cpb_size_scale; + uint8_t cpb_size_du_scale; + uint8_t initial_cpb_removal_delay_length_minus1; + uint8_t au_cpb_removal_delay_length_minus1; + uint8_t dpb_output_delay_length_minus1; + uint8_t cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint16_t elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint16_t reserved[3]; + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal; + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl; +} StdVideoH265HrdParameters; + +typedef struct StdVideoH265VpsFlags { + uint32_t vps_temporal_id_nesting_flag : 1; + uint32_t vps_sub_layer_ordering_info_present_flag : 1; + uint32_t vps_timing_info_present_flag : 1; + uint32_t vps_poc_proportional_to_timing_flag : 1; +} StdVideoH265VpsFlags; + +typedef struct StdVideoH265ProfileTierLevelFlags { + uint32_t general_tier_flag : 1; + uint32_t general_progressive_source_flag : 1; + uint32_t general_interlaced_source_flag : 1; + uint32_t general_non_packed_constraint_flag : 1; + uint32_t general_frame_only_constraint_flag : 1; +} StdVideoH265ProfileTierLevelFlags; + +typedef struct StdVideoH265ProfileTierLevel { + StdVideoH265ProfileTierLevelFlags flags; + StdVideoH265ProfileIdc general_profile_idc; + StdVideoH265LevelIdc general_level_idc; +} StdVideoH265ProfileTierLevel; + +typedef struct StdVideoH265VideoParameterSet { + StdVideoH265VpsFlags flags; + uint8_t vps_video_parameter_set_id; + uint8_t vps_max_sub_layers_minus1; + uint8_t reserved1; + uint8_t reserved2; + uint32_t vps_num_units_in_tick; + uint32_t vps_time_scale; + uint32_t vps_num_ticks_poc_diff_one_minus1; + uint32_t reserved3; + const StdVideoH265DecPicBufMgr* pDecPicBufMgr; + const StdVideoH265HrdParameters* pHrdParameters; + const StdVideoH265ProfileTierLevel* pProfileTierLevel; +} StdVideoH265VideoParameterSet; + +typedef struct StdVideoH265ScalingLists { + uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS]; + uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS]; + uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS]; + uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS]; + uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS]; + uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS]; +} StdVideoH265ScalingLists; + +typedef struct StdVideoH265SpsVuiFlags { + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t colour_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t neutral_chroma_indication_flag : 1; + uint32_t field_seq_flag : 1; + uint32_t frame_field_info_present_flag : 1; + uint32_t default_display_window_flag : 1; + uint32_t vui_timing_info_present_flag : 1; + uint32_t vui_poc_proportional_to_timing_flag : 1; + uint32_t vui_hrd_parameters_present_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t tiles_fixed_structure_flag : 1; + uint32_t motion_vectors_over_pic_boundaries_flag : 1; + uint32_t restricted_ref_pic_lists_flag : 1; +} StdVideoH265SpsVuiFlags; + +typedef struct StdVideoH265SequenceParameterSetVui { + StdVideoH265SpsVuiFlags flags; + StdVideoH265AspectRatioIdc aspect_ratio_idc; + uint16_t sar_width; + uint16_t sar_height; + uint8_t video_format; + uint8_t colour_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coeffs; + uint8_t chroma_sample_loc_type_top_field; + uint8_t chroma_sample_loc_type_bottom_field; + uint8_t reserved1; + uint8_t reserved2; + uint16_t def_disp_win_left_offset; + uint16_t def_disp_win_right_offset; + uint16_t def_disp_win_top_offset; + uint16_t def_disp_win_bottom_offset; + uint32_t vui_num_units_in_tick; + uint32_t vui_time_scale; + uint32_t vui_num_ticks_poc_diff_one_minus1; + uint16_t min_spatial_segmentation_idc; + uint16_t reserved3; + uint8_t max_bytes_per_pic_denom; + uint8_t max_bits_per_min_cu_denom; + uint8_t log2_max_mv_length_horizontal; + uint8_t log2_max_mv_length_vertical; + const StdVideoH265HrdParameters* pHrdParameters; +} StdVideoH265SequenceParameterSetVui; + +typedef struct StdVideoH265PredictorPaletteEntries { + uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE]; +} StdVideoH265PredictorPaletteEntries; + +typedef struct StdVideoH265SpsFlags { + uint32_t sps_temporal_id_nesting_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t conformance_window_flag : 1; + uint32_t sps_sub_layer_ordering_info_present_flag : 1; + uint32_t scaling_list_enabled_flag : 1; + uint32_t sps_scaling_list_data_present_flag : 1; + uint32_t amp_enabled_flag : 1; + uint32_t sample_adaptive_offset_enabled_flag : 1; + uint32_t pcm_enabled_flag : 1; + uint32_t pcm_loop_filter_disabled_flag : 1; + uint32_t long_term_ref_pics_present_flag : 1; + uint32_t sps_temporal_mvp_enabled_flag : 1; + uint32_t strong_intra_smoothing_enabled_flag : 1; + uint32_t vui_parameters_present_flag : 1; + uint32_t sps_extension_present_flag : 1; + uint32_t sps_range_extension_flag : 1; + uint32_t transform_skip_rotation_enabled_flag : 1; + uint32_t transform_skip_context_enabled_flag : 1; + uint32_t implicit_rdpcm_enabled_flag : 1; + uint32_t explicit_rdpcm_enabled_flag : 1; + uint32_t extended_precision_processing_flag : 1; + uint32_t intra_smoothing_disabled_flag : 1; + uint32_t high_precision_offsets_enabled_flag : 1; + uint32_t persistent_rice_adaptation_enabled_flag : 1; + uint32_t cabac_bypass_alignment_enabled_flag : 1; + uint32_t sps_scc_extension_flag : 1; + uint32_t sps_curr_pic_ref_enabled_flag : 1; + uint32_t palette_mode_enabled_flag : 1; + uint32_t sps_palette_predictor_initializers_present_flag : 1; + uint32_t intra_boundary_filtering_disabled_flag : 1; +} StdVideoH265SpsFlags; + +typedef struct StdVideoH265ShortTermRefPicSetFlags { + uint32_t inter_ref_pic_set_prediction_flag : 1; + uint32_t delta_rps_sign : 1; +} StdVideoH265ShortTermRefPicSetFlags; + +typedef struct StdVideoH265ShortTermRefPicSet { + StdVideoH265ShortTermRefPicSetFlags flags; + uint32_t delta_idx_minus1; + uint16_t use_delta_flag; + uint16_t abs_delta_rps_minus1; + uint16_t used_by_curr_pic_flag; + uint16_t used_by_curr_pic_s0_flag; + uint16_t used_by_curr_pic_s1_flag; + uint16_t reserved1; + uint8_t reserved2; + uint8_t reserved3; + uint8_t num_negative_pics; + uint8_t num_positive_pics; + uint16_t delta_poc_s0_minus1[STD_VIDEO_H265_MAX_DPB_SIZE]; + uint16_t delta_poc_s1_minus1[STD_VIDEO_H265_MAX_DPB_SIZE]; +} StdVideoH265ShortTermRefPicSet; + +typedef struct StdVideoH265LongTermRefPicsSps { + uint32_t used_by_curr_pic_lt_sps_flag; + uint32_t lt_ref_pic_poc_lsb_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS]; +} StdVideoH265LongTermRefPicsSps; + +typedef struct StdVideoH265SequenceParameterSet { + StdVideoH265SpsFlags flags; + StdVideoH265ChromaFormatIdc chroma_format_idc; + uint32_t pic_width_in_luma_samples; + uint32_t pic_height_in_luma_samples; + uint8_t sps_video_parameter_set_id; + uint8_t sps_max_sub_layers_minus1; + uint8_t sps_seq_parameter_set_id; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t log2_min_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_luma_coding_block_size; + uint8_t log2_min_luma_transform_block_size_minus2; + uint8_t log2_diff_max_min_luma_transform_block_size; + uint8_t max_transform_hierarchy_depth_inter; + uint8_t max_transform_hierarchy_depth_intra; + uint8_t num_short_term_ref_pic_sets; + uint8_t num_long_term_ref_pics_sps; + uint8_t pcm_sample_bit_depth_luma_minus1; + uint8_t pcm_sample_bit_depth_chroma_minus1; + uint8_t log2_min_pcm_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_pcm_luma_coding_block_size; + uint8_t reserved1; + uint8_t reserved2; + uint8_t palette_max_size; + uint8_t delta_palette_max_predictor_size; + uint8_t motion_vector_resolution_control_idc; + uint8_t sps_num_palette_predictor_initializers_minus1; + uint32_t conf_win_left_offset; + uint32_t conf_win_right_offset; + uint32_t conf_win_top_offset; + uint32_t conf_win_bottom_offset; + const StdVideoH265ProfileTierLevel* pProfileTierLevel; + const StdVideoH265DecPicBufMgr* pDecPicBufMgr; + const StdVideoH265ScalingLists* pScalingLists; + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSet; + const StdVideoH265LongTermRefPicsSps* pLongTermRefPicsSps; + const StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui; + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; +} StdVideoH265SequenceParameterSet; + +typedef struct StdVideoH265PpsFlags { + uint32_t dependent_slice_segments_enabled_flag : 1; + uint32_t output_flag_present_flag : 1; + uint32_t sign_data_hiding_enabled_flag : 1; + uint32_t cabac_init_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t transform_skip_enabled_flag : 1; + uint32_t cu_qp_delta_enabled_flag : 1; + uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t weighted_bipred_flag : 1; + uint32_t transquant_bypass_enabled_flag : 1; + uint32_t tiles_enabled_flag : 1; + uint32_t entropy_coding_sync_enabled_flag : 1; + uint32_t uniform_spacing_flag : 1; + uint32_t loop_filter_across_tiles_enabled_flag : 1; + uint32_t pps_loop_filter_across_slices_enabled_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t deblocking_filter_override_enabled_flag : 1; + uint32_t pps_deblocking_filter_disabled_flag : 1; + uint32_t pps_scaling_list_data_present_flag : 1; + uint32_t lists_modification_present_flag : 1; + uint32_t slice_segment_header_extension_present_flag : 1; + uint32_t pps_extension_present_flag : 1; + uint32_t cross_component_prediction_enabled_flag : 1; + uint32_t chroma_qp_offset_list_enabled_flag : 1; + uint32_t pps_curr_pic_ref_enabled_flag : 1; + uint32_t residual_adaptive_colour_transform_enabled_flag : 1; + uint32_t pps_slice_act_qp_offsets_present_flag : 1; + uint32_t pps_palette_predictor_initializers_present_flag : 1; + uint32_t monochrome_palette_flag : 1; + uint32_t pps_range_extension_flag : 1; +} StdVideoH265PpsFlags; + +typedef struct StdVideoH265PictureParameterSet { + StdVideoH265PpsFlags flags; + uint8_t pps_pic_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t sps_video_parameter_set_id; + uint8_t num_extra_slice_header_bits; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + int8_t init_qp_minus26; + uint8_t diff_cu_qp_delta_depth; + int8_t pps_cb_qp_offset; + int8_t pps_cr_qp_offset; + int8_t pps_beta_offset_div2; + int8_t pps_tc_offset_div2; + uint8_t log2_parallel_merge_level_minus2; + uint8_t log2_max_transform_skip_block_size_minus2; + uint8_t diff_cu_chroma_qp_offset_depth; + uint8_t chroma_qp_offset_list_len_minus1; + int8_t cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; + int8_t cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; + uint8_t log2_sao_offset_scale_luma; + uint8_t log2_sao_offset_scale_chroma; + int8_t pps_act_y_qp_offset_plus5; + int8_t pps_act_cb_qp_offset_plus5; + int8_t pps_act_cr_qp_offset_plus3; + uint8_t pps_num_palette_predictor_initializers; + uint8_t luma_bit_depth_entry_minus8; + uint8_t chroma_bit_depth_entry_minus8; + uint8_t num_tile_columns_minus1; + uint8_t num_tile_rows_minus1; + uint8_t reserved1; + uint8_t reserved2; + uint16_t column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE]; + uint16_t row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE]; + uint32_t reserved3; + const StdVideoH265ScalingLists* pScalingLists; + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; +} StdVideoH265PictureParameterSet; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std_decode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std_decode.h new file mode 100644 index 000000000..1758d4a88 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std_decode.h @@ -0,0 +1,67 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h265std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std_decode 1 +#include "vulkan_video_codec_h265std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode" +#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8U +typedef struct StdVideoDecodeH265PictureInfoFlags { + uint32_t IrapPicFlag : 1; + uint32_t IdrPicFlag : 1; + uint32_t IsReference : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; +} StdVideoDecodeH265PictureInfoFlags; + +typedef struct StdVideoDecodeH265PictureInfo { + StdVideoDecodeH265PictureInfoFlags flags; + uint8_t sps_video_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t pps_pic_parameter_set_id; + uint8_t NumDeltaPocsOfRefRpsIdx; + int32_t PicOrderCntVal; + uint16_t NumBitsForSTRefPicSetInSlice; + uint16_t reserved; + uint8_t RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; + uint8_t RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; + uint8_t RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; +} StdVideoDecodeH265PictureInfo; + +typedef struct StdVideoDecodeH265ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; +} StdVideoDecodeH265ReferenceInfoFlags; + +typedef struct StdVideoDecodeH265ReferenceInfo { + StdVideoDecodeH265ReferenceInfoFlags flags; + int32_t PicOrderCntVal; +} StdVideoDecodeH265ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std_encode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std_encode.h new file mode 100644 index 000000000..e584a7262 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_h265std_encode.h @@ -0,0 +1,157 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_h265std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std_encode 1 +#include "vulkan_video_codec_h265std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_encode" +typedef struct StdVideoEncodeH265WeightTableFlags { + uint16_t luma_weight_l0_flag; + uint16_t chroma_weight_l0_flag; + uint16_t luma_weight_l1_flag; + uint16_t chroma_weight_l1_flag; +} StdVideoEncodeH265WeightTableFlags; + +typedef struct StdVideoEncodeH265WeightTable { + StdVideoEncodeH265WeightTableFlags flags; + uint8_t luma_log2_weight_denom; + int8_t delta_chroma_log2_weight_denom; + int8_t delta_luma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t luma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t delta_chroma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_chroma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_luma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t luma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t delta_chroma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_chroma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; +} StdVideoEncodeH265WeightTable; + +typedef struct StdVideoEncodeH265SliceSegmentHeaderFlags { + uint32_t first_slice_segment_in_pic_flag : 1; + uint32_t dependent_slice_segment_flag : 1; + uint32_t slice_sao_luma_flag : 1; + uint32_t slice_sao_chroma_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t mvd_l1_zero_flag : 1; + uint32_t cabac_init_flag : 1; + uint32_t cu_chroma_qp_offset_enabled_flag : 1; + uint32_t deblocking_filter_override_flag : 1; + uint32_t slice_deblocking_filter_disabled_flag : 1; + uint32_t collocated_from_l0_flag : 1; + uint32_t slice_loop_filter_across_slices_enabled_flag : 1; + uint32_t reserved : 20; +} StdVideoEncodeH265SliceSegmentHeaderFlags; + +typedef struct StdVideoEncodeH265SliceSegmentHeader { + StdVideoEncodeH265SliceSegmentHeaderFlags flags; + StdVideoH265SliceType slice_type; + uint32_t slice_segment_address; + uint8_t collocated_ref_idx; + uint8_t MaxNumMergeCand; + int8_t slice_cb_qp_offset; + int8_t slice_cr_qp_offset; + int8_t slice_beta_offset_div2; + int8_t slice_tc_offset_div2; + int8_t slice_act_y_qp_offset; + int8_t slice_act_cb_qp_offset; + int8_t slice_act_cr_qp_offset; + int8_t slice_qp_delta; + uint16_t reserved1; + const StdVideoEncodeH265WeightTable* pWeightTable; +} StdVideoEncodeH265SliceSegmentHeader; + +typedef struct StdVideoEncodeH265ReferenceListsInfoFlags { + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; +} StdVideoEncodeH265ReferenceListsInfoFlags; + +typedef struct StdVideoEncodeH265ReferenceListsInfo { + StdVideoEncodeH265ReferenceListsInfoFlags flags; + uint8_t num_ref_idx_l0_active_minus1; + uint8_t num_ref_idx_l1_active_minus1; + uint8_t RefPicList0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t RefPicList1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t list_entry_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t list_entry_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; +} StdVideoEncodeH265ReferenceListsInfo; + +typedef struct StdVideoEncodeH265PictureInfoFlags { + uint32_t is_reference : 1; + uint32_t IrapPicFlag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t discardable_flag : 1; + uint32_t cross_layer_bla_flag : 1; + uint32_t pic_output_flag : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; + uint32_t slice_temporal_mvp_enabled_flag : 1; + uint32_t reserved : 23; +} StdVideoEncodeH265PictureInfoFlags; + +typedef struct StdVideoEncodeH265LongTermRefPics { + uint8_t num_long_term_sps; + uint8_t num_long_term_pics; + uint8_t lt_idx_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS]; + uint8_t poc_lsb_lt[STD_VIDEO_H265_MAX_LONG_TERM_PICS]; + uint16_t used_by_curr_pic_lt_flag; + uint8_t delta_poc_msb_present_flag[STD_VIDEO_H265_MAX_DELTA_POC]; + uint8_t delta_poc_msb_cycle_lt[STD_VIDEO_H265_MAX_DELTA_POC]; +} StdVideoEncodeH265LongTermRefPics; + +typedef struct StdVideoEncodeH265PictureInfo { + StdVideoEncodeH265PictureInfoFlags flags; + StdVideoH265PictureType pic_type; + uint8_t sps_video_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t pps_pic_parameter_set_id; + uint8_t short_term_ref_pic_set_idx; + int32_t PicOrderCntVal; + uint8_t TemporalId; + uint8_t reserved1[7]; + const StdVideoEncodeH265ReferenceListsInfo* pRefLists; + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSet; + const StdVideoEncodeH265LongTermRefPics* pLongTermRefPics; +} StdVideoEncodeH265PictureInfo; + +typedef struct StdVideoEncodeH265ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; + uint32_t reserved : 30; +} StdVideoEncodeH265ReferenceInfoFlags; + +typedef struct StdVideoEncodeH265ReferenceInfo { + StdVideoEncodeH265ReferenceInfoFlags flags; + StdVideoH265PictureType pic_type; + int32_t PicOrderCntVal; + uint8_t TemporalId; +} StdVideoEncodeH265ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_vp9std.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_vp9std.h new file mode 100644 index 000000000..3c62f287e --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_vp9std.h @@ -0,0 +1,151 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_vp9std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_VP9_NUM_REF_FRAMES 8U +#define STD_VIDEO_VP9_REFS_PER_FRAME 3U +#define STD_VIDEO_VP9_MAX_REF_FRAMES 4U +#define STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS 2U +#define STD_VIDEO_VP9_MAX_SEGMENTS 8U +#define STD_VIDEO_VP9_SEG_LVL_MAX 4U +#define STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS 7U +#define STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB 3U + +typedef enum StdVideoVP9Profile { + STD_VIDEO_VP9_PROFILE_0 = 0, + STD_VIDEO_VP9_PROFILE_1 = 1, + STD_VIDEO_VP9_PROFILE_2 = 2, + STD_VIDEO_VP9_PROFILE_3 = 3, + STD_VIDEO_VP9_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Profile; + +typedef enum StdVideoVP9Level { + STD_VIDEO_VP9_LEVEL_1_0 = 0, + STD_VIDEO_VP9_LEVEL_1_1 = 1, + STD_VIDEO_VP9_LEVEL_2_0 = 2, + STD_VIDEO_VP9_LEVEL_2_1 = 3, + STD_VIDEO_VP9_LEVEL_3_0 = 4, + STD_VIDEO_VP9_LEVEL_3_1 = 5, + STD_VIDEO_VP9_LEVEL_4_0 = 6, + STD_VIDEO_VP9_LEVEL_4_1 = 7, + STD_VIDEO_VP9_LEVEL_5_0 = 8, + STD_VIDEO_VP9_LEVEL_5_1 = 9, + STD_VIDEO_VP9_LEVEL_5_2 = 10, + STD_VIDEO_VP9_LEVEL_6_0 = 11, + STD_VIDEO_VP9_LEVEL_6_1 = 12, + STD_VIDEO_VP9_LEVEL_6_2 = 13, + STD_VIDEO_VP9_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Level; + +typedef enum StdVideoVP9FrameType { + STD_VIDEO_VP9_FRAME_TYPE_KEY = 0, + STD_VIDEO_VP9_FRAME_TYPE_NON_KEY = 1, + STD_VIDEO_VP9_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9FrameType; + +typedef enum StdVideoVP9ReferenceName { + STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME = 2, + STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME = 3, + STD_VIDEO_VP9_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ReferenceName; + +typedef enum StdVideoVP9InterpolationFilter { + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9InterpolationFilter; + +typedef enum StdVideoVP9ColorSpace { + STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN = 0, + STD_VIDEO_VP9_COLOR_SPACE_BT_601 = 1, + STD_VIDEO_VP9_COLOR_SPACE_BT_709 = 2, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170 = 3, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240 = 4, + STD_VIDEO_VP9_COLOR_SPACE_BT_2020 = 5, + STD_VIDEO_VP9_COLOR_SPACE_RESERVED = 6, + STD_VIDEO_VP9_COLOR_SPACE_RGB = 7, + STD_VIDEO_VP9_COLOR_SPACE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_COLOR_SPACE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ColorSpace; +typedef struct StdVideoVP9ColorConfigFlags { + uint32_t color_range : 1; + uint32_t reserved : 31; +} StdVideoVP9ColorConfigFlags; + +typedef struct StdVideoVP9ColorConfig { + StdVideoVP9ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoVP9ColorSpace color_space; +} StdVideoVP9ColorConfig; + +typedef struct StdVideoVP9LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoVP9LoopFilterFlags; + +typedef struct StdVideoVP9LoopFilter { + StdVideoVP9LoopFilterFlags flags; + uint8_t loop_filter_level; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_VP9_MAX_REF_FRAMES]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoVP9LoopFilter; + +typedef struct StdVideoVP9SegmentationFlags { + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t segmentation_abs_or_delta_update : 1; + uint32_t reserved : 28; +} StdVideoVP9SegmentationFlags; + +typedef struct StdVideoVP9Segmentation { + StdVideoVP9SegmentationFlags flags; + uint8_t segmentation_tree_probs[STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS]; + uint8_t segmentation_pred_prob[STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB]; + uint8_t FeatureEnabled[STD_VIDEO_VP9_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_VP9_MAX_SEGMENTS][STD_VIDEO_VP9_SEG_LVL_MAX]; +} StdVideoVP9Segmentation; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_vp9std_decode.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_vp9std_decode.h new file mode 100644 index 000000000..ac7fa7be8 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codec_vp9std_decode.h @@ -0,0 +1,68 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_vp9std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std_decode 1 +#include "vulkan_video_codec_vp9std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_vp9_decode" +typedef struct StdVideoDecodeVP9PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t intra_only : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t refresh_frame_context : 1; + uint32_t frame_parallel_decoding_mode : 1; + uint32_t segmentation_enabled : 1; + uint32_t show_frame : 1; + uint32_t UsePrevFrameMvs : 1; + uint32_t reserved : 24; +} StdVideoDecodeVP9PictureInfoFlags; + +typedef struct StdVideoDecodeVP9PictureInfo { + StdVideoDecodeVP9PictureInfoFlags flags; + StdVideoVP9Profile profile; + StdVideoVP9FrameType frame_type; + uint8_t frame_context_idx; + uint8_t reset_frame_context; + uint8_t refresh_frame_flags; + uint8_t ref_frame_sign_bias_mask; + StdVideoVP9InterpolationFilter interpolation_filter; + uint8_t base_q_idx; + int8_t delta_q_y_dc; + int8_t delta_q_uv_dc; + int8_t delta_q_uv_ac; + uint8_t tile_cols_log2; + uint8_t tile_rows_log2; + uint16_t reserved1[3]; + const StdVideoVP9ColorConfig* pColorConfig; + const StdVideoVP9LoopFilter* pLoopFilter; + const StdVideoVP9Segmentation* pSegmentation; +} StdVideoDecodeVP9PictureInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codecs_common.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codecs_common.h new file mode 100644 index 000000000..3c4d0553d --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vk_video/vulkan_video_codecs_common.h @@ -0,0 +1,36 @@ +#ifndef VULKAN_VIDEO_CODECS_COMMON_H_ +#define VULKAN_VIDEO_CODECS_COMMON_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codecs_common is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codecs_common 1 +#if !defined(VK_NO_STDINT_H) + #include +#endif + +#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_icd.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_icd.h new file mode 100644 index 000000000..d71f5682a --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_icd.h @@ -0,0 +1,245 @@ +/* + * Copyright 2015-2023 The Khronos Group Inc. + * Copyright 2015-2023 Valve Corporation + * Copyright 2015-2023 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +#pragma once + +#include "vulkan.h" +#include + +// Loader-ICD version negotiation API. Versions add the following features: +// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr +// or vk_icdNegotiateLoaderICDInterfaceVersion. +// Version 1 - Add support for vk_icdGetInstanceProcAddr. +// Version 2 - Add Loader/ICD Interface version negotiation +// via vk_icdNegotiateLoaderICDInterfaceVersion. +// Version 3 - Add ICD creation/destruction of KHR_surface objects. +// Version 4 - Add unknown physical device extension querying via +// vk_icdGetPhysicalDeviceProcAddr. +// Version 5 - Tells ICDs that the loader is now paying attention to the +// application version of Vulkan passed into the ApplicationInfo +// structure during vkCreateInstance. This will tell the ICD +// that if the loader is older, it should automatically fail a +// call for any API version > 1.0. Otherwise, the loader will +// manually determine if it can support the expected version. +// Version 6 - Add support for vk_icdEnumerateAdapterPhysicalDevices. +// Version 7 - If an ICD supports any of the following functions, they must be +// queryable with vk_icdGetInstanceProcAddr: +// vk_icdNegotiateLoaderICDInterfaceVersion +// vk_icdGetPhysicalDeviceProcAddr +// vk_icdEnumerateAdapterPhysicalDevices (Windows only) +// In addition, these functions no longer need to be exported directly. +// This version allows drivers provided through the extension +// VK_LUNARG_direct_driver_loading be able to support the entire +// Driver-Loader interface. + +#define CURRENT_LOADER_ICD_INTERFACE_VERSION 7 +#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0 +#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4 + +// Old typedefs that don't follow a proper naming convention but are preserved for compatibility +typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion); +// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this +// file directly, it won't be found. +#ifndef IS_DEFINED_PFN_GetPhysicalDeviceProcAddr +typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName); +#define IS_DEFINED_PFN_GetPhysicalDeviceProcAddr +#endif + +// Typedefs for loader/ICD interface +typedef VkResult (VKAPI_PTR *PFN_vk_icdNegotiateLoaderICDInterfaceVersion)(uint32_t* pVersion); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetInstanceProcAddr)(VkInstance instance, const char* pName); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (VKAPI_PTR *PFN_vk_icdEnumerateAdapterPhysicalDevices)(VkInstance instance, LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +#endif + +// Prototypes for loader/ICD interface +#if !defined(VK_NO_PROTOTYPES) +#ifdef __cplusplus +extern "C" { +#endif + VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pVersion); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char* pName); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +#endif +#ifdef __cplusplus +} +#endif +#endif + +/* + * The ICD must reserve space for a pointer for the loader's dispatch + * table, at the start of . + * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro. + */ + +#define ICD_LOADER_MAGIC 0x01CDC0DE + +typedef union { + uintptr_t loaderMagic; + void *loaderData; +} VK_LOADER_DATA; + +static inline void set_loader_magic_value(void *pNewObject) { + VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; + loader_info->loaderMagic = ICD_LOADER_MAGIC; +} + +static inline bool valid_loader_magic_value(void *pNewObject) { + const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; + return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC; +} + +/* + * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that + * contains the platform-specific connection and surface information. + */ +typedef enum { + VK_ICD_WSI_PLATFORM_MIR, + VK_ICD_WSI_PLATFORM_WAYLAND, + VK_ICD_WSI_PLATFORM_WIN32, + VK_ICD_WSI_PLATFORM_XCB, + VK_ICD_WSI_PLATFORM_XLIB, + VK_ICD_WSI_PLATFORM_ANDROID, + VK_ICD_WSI_PLATFORM_MACOS, + VK_ICD_WSI_PLATFORM_IOS, + VK_ICD_WSI_PLATFORM_DISPLAY, + VK_ICD_WSI_PLATFORM_HEADLESS, + VK_ICD_WSI_PLATFORM_METAL, + VK_ICD_WSI_PLATFORM_DIRECTFB, + VK_ICD_WSI_PLATFORM_VI, + VK_ICD_WSI_PLATFORM_GGP, + VK_ICD_WSI_PLATFORM_SCREEN, + VK_ICD_WSI_PLATFORM_FUCHSIA, +} VkIcdWsiPlatform; + +typedef struct { + VkIcdWsiPlatform platform; +} VkIcdSurfaceBase; + +#ifdef VK_USE_PLATFORM_MIR_KHR +typedef struct { + VkIcdSurfaceBase base; + MirConnection *connection; + MirSurface *mirSurface; +} VkIcdSurfaceMir; +#endif // VK_USE_PLATFORM_MIR_KHR + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +typedef struct { + VkIcdSurfaceBase base; + struct wl_display *display; + struct wl_surface *surface; +} VkIcdSurfaceWayland; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#ifdef VK_USE_PLATFORM_WIN32_KHR +typedef struct { + VkIcdSurfaceBase base; + HINSTANCE hinstance; + HWND hwnd; +} VkIcdSurfaceWin32; +#endif // VK_USE_PLATFORM_WIN32_KHR + +#ifdef VK_USE_PLATFORM_XCB_KHR +typedef struct { + VkIcdSurfaceBase base; + xcb_connection_t *connection; + xcb_window_t window; +} VkIcdSurfaceXcb; +#endif // VK_USE_PLATFORM_XCB_KHR + +#ifdef VK_USE_PLATFORM_XLIB_KHR +typedef struct { + VkIcdSurfaceBase base; + Display *dpy; + Window window; +} VkIcdSurfaceXlib; +#endif // VK_USE_PLATFORM_XLIB_KHR + +#ifdef VK_USE_PLATFORM_DIRECTFB_EXT +typedef struct { + VkIcdSurfaceBase base; + IDirectFB *dfb; + IDirectFBSurface *surface; +} VkIcdSurfaceDirectFB; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +typedef struct { + VkIcdSurfaceBase base; + struct ANativeWindow *window; +} VkIcdSurfaceAndroid; +#endif // VK_USE_PLATFORM_ANDROID_KHR + +#ifdef VK_USE_PLATFORM_MACOS_MVK +typedef struct { + VkIcdSurfaceBase base; + const void *pView; +} VkIcdSurfaceMacOS; +#endif // VK_USE_PLATFORM_MACOS_MVK + +#ifdef VK_USE_PLATFORM_IOS_MVK +typedef struct { + VkIcdSurfaceBase base; + const void *pView; +} VkIcdSurfaceIOS; +#endif // VK_USE_PLATFORM_IOS_MVK + +#ifdef VK_USE_PLATFORM_GGP +typedef struct { + VkIcdSurfaceBase base; + GgpStreamDescriptor streamDescriptor; +} VkIcdSurfaceGgp; +#endif // VK_USE_PLATFORM_GGP + +typedef struct { + VkIcdSurfaceBase base; + VkDisplayModeKHR displayMode; + uint32_t planeIndex; + uint32_t planeStackIndex; + VkSurfaceTransformFlagBitsKHR transform; + float globalAlpha; + VkDisplayPlaneAlphaFlagBitsKHR alphaMode; + VkExtent2D imageExtent; +} VkIcdSurfaceDisplay; + +typedef struct { + VkIcdSurfaceBase base; +} VkIcdSurfaceHeadless; + +#ifdef VK_USE_PLATFORM_METAL_EXT +typedef struct { + VkIcdSurfaceBase base; + const CAMetalLayer *pLayer; +} VkIcdSurfaceMetal; +#endif // VK_USE_PLATFORM_METAL_EXT + +#ifdef VK_USE_PLATFORM_VI_NN +typedef struct { + VkIcdSurfaceBase base; + void *window; +} VkIcdSurfaceVi; +#endif // VK_USE_PLATFORM_VI_NN + +#ifdef VK_USE_PLATFORM_SCREEN_QNX +typedef struct { + VkIcdSurfaceBase base; + struct _screen_context *context; + struct _screen_window *window; +} VkIcdSurfaceScreen; +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#ifdef VK_USE_PLATFORM_FUCHSIA +typedef struct { + VkIcdSurfaceBase base; +} VkIcdSurfaceImagePipe; +#endif // VK_USE_PLATFORM_FUCHSIA diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_layer.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_layer.h new file mode 100644 index 000000000..19cf5880c --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_layer.h @@ -0,0 +1,192 @@ +/* + * Copyright 2015-2023 The Khronos Group Inc. + * Copyright 2015-2023 Valve Corporation + * Copyright 2015-2023 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +#pragma once + +/* Need to define dispatch table + * Core struct can then have ptr to dispatch table at the top + * Along with object ptrs for current and next OBJ + */ + +#include "vulkan_core.h" + +#define MAX_NUM_UNKNOWN_EXTS 250 + + // Loader-Layer version negotiation API. Versions add the following features: + // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr + // or vk_icdNegotiateLoaderLayerInterfaceVersion. + // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and + // vk_icdNegotiateLoaderLayerInterfaceVersion. +#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2 +#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1 + +#define VK_CURRENT_CHAIN_VERSION 1 + +// Typedef for use in the interfaces below +#ifndef IS_DEFINED_PFN_GetPhysicalDeviceProcAddr +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); +#define IS_DEFINED_PFN_GetPhysicalDeviceProcAddr +#endif + +// Version negotiation values +typedef enum VkNegotiateLayerStructType { + LAYER_NEGOTIATE_UNINTIALIZED = 0, + LAYER_NEGOTIATE_INTERFACE_STRUCT = 1, +} VkNegotiateLayerStructType; + +// Version negotiation structures +typedef struct VkNegotiateLayerInterface { + VkNegotiateLayerStructType sType; + void *pNext; + uint32_t loaderLayerInterfaceVersion; + PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr; + PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr; +} VkNegotiateLayerInterface; + +// Version negotiation functions +typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct); + +// Function prototype for unknown physical device extension command +typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device); + +// ------------------------------------------------------------------------------------------------ +// CreateInstance and CreateDevice support structures + +/* Sub type of structure for instance and device loader ext of CreateInfo. + * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO + * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO + * then VkLayerFunction indicates struct type pointed to by pNext + */ +typedef enum VkLayerFunction_ { + VK_LAYER_LINK_INFO = 0, + VK_LOADER_DATA_CALLBACK = 1, + VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2, + VK_LOADER_FEATURES = 3, +} VkLayerFunction; + +typedef struct VkLayerInstanceLink_ { + struct VkLayerInstanceLink_ *pNext; + PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; + PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr; +} VkLayerInstanceLink; + +/* + * When creating the device chain the loader needs to pass + * down information about it's device structure needed at + * the end of the chain. Passing the data via the + * VkLayerDeviceInfo avoids issues with finding the + * exact instance being used. + */ +typedef struct VkLayerDeviceInfo_ { + void *device_info; + PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; +} VkLayerDeviceInfo; + +typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance, + void *object); +typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device, + void *object); +typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA); +typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction); + +typedef enum VkLoaderFeastureFlagBits { + VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING = 0x00000001, +} VkLoaderFlagBits; +typedef VkFlags VkLoaderFeatureFlags; + +typedef struct { + VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO + const void *pNext; + VkLayerFunction function; + union { + VkLayerInstanceLink *pLayerInfo; + PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData; + struct { + PFN_vkLayerCreateDevice pfnLayerCreateDevice; + PFN_vkLayerDestroyDevice pfnLayerDestroyDevice; + } layerDevice; + VkLoaderFeatureFlags loaderFeatures; + } u; +} VkLayerInstanceCreateInfo; + +typedef struct VkLayerDeviceLink_ { + struct VkLayerDeviceLink_ *pNext; + PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr; +} VkLayerDeviceLink; + +typedef struct { + VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO + const void *pNext; + VkLayerFunction function; + union { + VkLayerDeviceLink *pLayerInfo; + PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData; + } u; +} VkLayerDeviceCreateInfo; + +#ifdef __cplusplus +extern "C" { +#endif + +VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct); + +typedef enum VkChainType { + VK_CHAIN_TYPE_UNKNOWN = 0, + VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1, + VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2, + VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3, +} VkChainType; + +typedef struct VkChainHeader { + VkChainType type; + uint32_t version; + uint32_t size; +} VkChainHeader; + +typedef struct VkEnumerateInstanceExtensionPropertiesChain { + VkChainHeader header; + VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *, + VkExtensionProperties *); + const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink; + +#if defined(__cplusplus) + inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const { + return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties); + } +#endif +} VkEnumerateInstanceExtensionPropertiesChain; + +typedef struct VkEnumerateInstanceLayerPropertiesChain { + VkChainHeader header; + VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *); + const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink; + +#if defined(__cplusplus) + inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const { + return pfnNextLayer(pNextLink, pPropertyCount, pProperties); + } +#endif +} VkEnumerateInstanceLayerPropertiesChain; + +typedef struct VkEnumerateInstanceVersionChain { + VkChainHeader header; + VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *); + const struct VkEnumerateInstanceVersionChain *pNextLink; + +#if defined(__cplusplus) + inline VkResult CallDown(uint32_t *pApiVersion) const { + return pfnNextLayer(pNextLink, pApiVersion); + } +#endif +} VkEnumerateInstanceVersionChain; + +#ifdef __cplusplus +} +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_platform.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_platform.h new file mode 100644 index 000000000..e431c7631 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vk_platform.h @@ -0,0 +1,84 @@ +// +// File: vk_platform.h +// +/* +** Copyright 2014-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + + +#ifndef VK_PLATFORM_H_ +#define VK_PLATFORM_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/* +*************************************************************************************************** +* Platform-specific directives and type declarations +*************************************************************************************************** +*/ + +/* Platform-specific calling convention macros. + * + * Platforms should define these so that Vulkan clients call Vulkan commands + * with the same calling conventions that the Vulkan implementation expects. + * + * VKAPI_ATTR - Placed before the return type in function declarations. + * Useful for C++11 and GCC/Clang-style function attribute syntax. + * VKAPI_CALL - Placed after the return type in function declarations. + * Useful for MSVC-style calling convention syntax. + * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. + * + * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); + * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); + */ +#if defined(_WIN32) + // On Windows, Vulkan commands use the stdcall convention + #define VKAPI_ATTR + #define VKAPI_CALL __stdcall + #define VKAPI_PTR VKAPI_CALL +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 + #error "Vulkan is not supported for the 'armeabi' NDK ABI" +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) + // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" + // calling convention, i.e. float parameters are passed in registers. This + // is true even if the rest of the application passes floats on the stack, + // as it does by default when compiling for the armeabi-v7a NDK ABI. + #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) + #define VKAPI_CALL + #define VKAPI_PTR VKAPI_ATTR +#else + // On other platforms, use the default calling convention + #define VKAPI_ATTR + #define VKAPI_CALL + #define VKAPI_PTR +#endif + +#if !defined(VK_NO_STDDEF_H) + #include +#endif // !defined(VK_NO_STDDEF_H) + +#if !defined(VK_NO_STDINT_H) + #if defined(_MSC_VER) && (_MSC_VER < 1600) + typedef signed __int8 int8_t; + typedef unsigned __int8 uint8_t; + typedef signed __int16 int16_t; + typedef unsigned __int16 uint16_t; + typedef signed __int32 int32_t; + typedef unsigned __int32 uint32_t; + typedef signed __int64 int64_t; + typedef unsigned __int64 uint64_t; + #else + #include + #endif +#endif // !defined(VK_NO_STDINT_H) + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan.h new file mode 100644 index 000000000..2ed8d9c7a --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan.h @@ -0,0 +1,103 @@ +#ifndef VULKAN_H_ +#define VULKAN_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +#include "vk_platform.h" +#include "vulkan_core.h" + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +#include "vulkan_android.h" +#endif + +#ifdef VK_USE_PLATFORM_FUCHSIA +#include +#include "vulkan_fuchsia.h" +#endif + +#ifdef VK_USE_PLATFORM_IOS_MVK +#include "vulkan_ios.h" +#endif + + +#ifdef VK_USE_PLATFORM_MACOS_MVK +#include "vulkan_macos.h" +#endif + +#ifdef VK_USE_PLATFORM_METAL_EXT +#include "vulkan_metal.h" +#endif + +#ifdef VK_USE_PLATFORM_VI_NN +#include "vulkan_vi.h" +#endif + + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +#include "vulkan_wayland.h" +#endif + + +#ifdef VK_USE_PLATFORM_WIN32_KHR +#include +#include "vulkan_win32.h" +#endif + + +#ifdef VK_USE_PLATFORM_XCB_KHR +#include +#include "vulkan_xcb.h" +#endif + + +#ifdef VK_USE_PLATFORM_XLIB_KHR +#include +#include "vulkan_xlib.h" +#endif + + +#ifdef VK_USE_PLATFORM_DIRECTFB_EXT +#include +#include "vulkan_directfb.h" +#endif + + +#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT +#include +#include +#include "vulkan_xlib_xrandr.h" +#endif + + +#ifdef VK_USE_PLATFORM_GGP +#include +#include "vulkan_ggp.h" +#endif + + +#ifdef VK_USE_PLATFORM_SCREEN_QNX +#include +#include "vulkan_screen.h" +#endif + + +#ifdef VK_USE_PLATFORM_SCI +#include +#include +#include "vulkan_sci.h" +#endif + + +#ifdef VK_ENABLE_BETA_EXTENSIONS +#include "vulkan_beta.h" +#endif + +#ifdef VK_USE_PLATFORM_OHOS +#include "vulkan_ohos.h" +#endif + +#endif // VULKAN_H_ diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_android.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_android.h new file mode 100644 index 000000000..1d8265e87 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_android.h @@ -0,0 +1,159 @@ +#ifndef VULKAN_ANDROID_H_ +#define VULKAN_ANDROID_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_android_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_android_surface 1 +struct ANativeWindow; +#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 +#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface" +typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; +typedef struct VkAndroidSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkAndroidSurfaceCreateFlagsKHR flags; + struct ANativeWindow* window; +} VkAndroidSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( + VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_ANDROID_external_memory_android_hardware_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_ANDROID_external_memory_android_hardware_buffer 1 +struct AHardwareBuffer; +#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 5 +#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer" +typedef struct VkAndroidHardwareBufferUsageANDROID { + VkStructureType sType; + void* pNext; + uint64_t androidHardwareBufferUsage; +} VkAndroidHardwareBufferUsageANDROID; + +typedef struct VkAndroidHardwareBufferPropertiesANDROID { + VkStructureType sType; + void* pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkAndroidHardwareBufferPropertiesANDROID; + +typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkAndroidHardwareBufferFormatPropertiesANDROID; + +typedef struct VkImportAndroidHardwareBufferInfoANDROID { + VkStructureType sType; + const void* pNext; + struct AHardwareBuffer* buffer; +} VkImportAndroidHardwareBufferInfoANDROID; + +typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkMemoryGetAndroidHardwareBufferInfoANDROID; + +typedef struct VkExternalFormatANDROID { + VkStructureType sType; + void* pNext; + uint64_t externalFormat; +} VkExternalFormatANDROID; + +typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags2 formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkAndroidHardwareBufferFormatProperties2ANDROID; + +typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( + VkDevice device, + const struct AHardwareBuffer* buffer, + VkAndroidHardwareBufferPropertiesANDROID* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( + VkDevice device, + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, + struct AHardwareBuffer** pBuffer); +#endif +#endif + + +// VK_ANDROID_external_format_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_ANDROID_external_format_resolve 1 +#define VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION 1 +#define VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME "VK_ANDROID_external_format_resolve" +typedef struct VkPhysicalDeviceExternalFormatResolveFeaturesANDROID { + VkStructureType sType; + void* pNext; + VkBool32 externalFormatResolve; +} VkPhysicalDeviceExternalFormatResolveFeaturesANDROID; + +typedef struct VkPhysicalDeviceExternalFormatResolvePropertiesANDROID { + VkStructureType sType; + void* pNext; + VkBool32 nullColorAttachmentWithExternalFormatResolve; + VkChromaLocation externalFormatResolveChromaOffsetX; + VkChromaLocation externalFormatResolveChromaOffsetY; +} VkPhysicalDeviceExternalFormatResolvePropertiesANDROID; + +typedef struct VkAndroidHardwareBufferFormatResolvePropertiesANDROID { + VkStructureType sType; + void* pNext; + VkFormat colorAttachmentFormat; +} VkAndroidHardwareBufferFormatResolvePropertiesANDROID; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_beta.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_beta.h new file mode 100644 index 000000000..147a3f3cc --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_beta.h @@ -0,0 +1,375 @@ +#ifndef VULKAN_BETA_H_ +#define VULKAN_BETA_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_portability_subset is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_portability_subset 1 +#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1 +#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset" +typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 constantAlphaColorBlendFactors; + VkBool32 events; + VkBool32 imageViewFormatReinterpretation; + VkBool32 imageViewFormatSwizzle; + VkBool32 imageView2DOn3DImage; + VkBool32 multisampleArrayImage; + VkBool32 mutableComparisonSamplers; + VkBool32 pointPolygons; + VkBool32 samplerMipLodBias; + VkBool32 separateStencilMaskRef; + VkBool32 shaderSampleRateInterpolationFunctions; + VkBool32 tessellationIsolines; + VkBool32 tessellationPointMode; + VkBool32 triangleFans; + VkBool32 vertexAttributeAccessBeyondStride; +} VkPhysicalDevicePortabilitySubsetFeaturesKHR; + +typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t minVertexInputBindingStrideAlignment; +} VkPhysicalDevicePortabilitySubsetPropertiesKHR; + + + +// VK_AMDX_shader_enqueue is a preprocessor guard. Do not pass it to API calls. +#define VK_AMDX_shader_enqueue 1 +#define VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION 2 +#define VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME "VK_AMDX_shader_enqueue" +#define VK_SHADER_INDEX_UNUSED_AMDX (~0U) +typedef struct VkPhysicalDeviceShaderEnqueueFeaturesAMDX { + VkStructureType sType; + void* pNext; + VkBool32 shaderEnqueue; + VkBool32 shaderMeshEnqueue; +} VkPhysicalDeviceShaderEnqueueFeaturesAMDX; + +typedef struct VkPhysicalDeviceShaderEnqueuePropertiesAMDX { + VkStructureType sType; + void* pNext; + uint32_t maxExecutionGraphDepth; + uint32_t maxExecutionGraphShaderOutputNodes; + uint32_t maxExecutionGraphShaderPayloadSize; + uint32_t maxExecutionGraphShaderPayloadCount; + uint32_t executionGraphDispatchAddressAlignment; + uint32_t maxExecutionGraphWorkgroupCount[3]; + uint32_t maxExecutionGraphWorkgroups; +} VkPhysicalDeviceShaderEnqueuePropertiesAMDX; + +typedef struct VkExecutionGraphPipelineScratchSizeAMDX { + VkStructureType sType; + void* pNext; + VkDeviceSize minSize; + VkDeviceSize maxSize; + VkDeviceSize sizeGranularity; +} VkExecutionGraphPipelineScratchSizeAMDX; + +typedef struct VkExecutionGraphPipelineCreateInfoAMDX { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkExecutionGraphPipelineCreateInfoAMDX; + +typedef union VkDeviceOrHostAddressConstAMDX { + VkDeviceAddress deviceAddress; + const void* hostAddress; +} VkDeviceOrHostAddressConstAMDX; + +typedef struct VkDispatchGraphInfoAMDX { + uint32_t nodeIndex; + uint32_t payloadCount; + VkDeviceOrHostAddressConstAMDX payloads; + uint64_t payloadStride; +} VkDispatchGraphInfoAMDX; + +typedef struct VkDispatchGraphCountInfoAMDX { + uint32_t count; + VkDeviceOrHostAddressConstAMDX infos; + uint64_t stride; +} VkDispatchGraphCountInfoAMDX; + +typedef struct VkPipelineShaderStageNodeCreateInfoAMDX { + VkStructureType sType; + const void* pNext; + const char* pName; + uint32_t index; +} VkPipelineShaderStageNodeCreateInfoAMDX; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateExecutionGraphPipelinesAMDX)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)(VkDevice device, VkPipeline executionGraph, VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)(VkDevice device, VkPipeline executionGraph, const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo, uint32_t* pNodeIndex); +typedef void (VKAPI_PTR *PFN_vkCmdInitializeGraphScratchMemoryAMDX)(VkCommandBuffer commandBuffer, VkPipeline executionGraph, VkDeviceAddress scratch, VkDeviceSize scratchSize); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, const VkDispatchGraphCountInfoAMDX* pCountInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, const VkDispatchGraphCountInfoAMDX* pCountInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectCountAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, VkDeviceAddress countInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineScratchSizeAMDX( + VkDevice device, + VkPipeline executionGraph, + VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineNodeIndexAMDX( + VkDevice device, + VkPipeline executionGraph, + const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo, + uint32_t* pNodeIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdInitializeGraphScratchMemoryAMDX( + VkCommandBuffer commandBuffer, + VkPipeline executionGraph, + VkDeviceAddress scratch, + VkDeviceSize scratchSize); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX* pCountInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX* pCountInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + VkDeviceAddress countInfo); +#endif +#endif + + +// VK_NV_cuda_kernel_launch is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cuda_kernel_launch 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) +#define VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION 2 +#define VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME "VK_NV_cuda_kernel_launch" +typedef struct VkCudaModuleCreateInfoNV { + VkStructureType sType; + const void* pNext; + size_t dataSize; + const void* pData; +} VkCudaModuleCreateInfoNV; + +typedef struct VkCudaFunctionCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkCudaModuleNV module; + const char* pName; +} VkCudaFunctionCreateInfoNV; + +typedef struct VkCudaLaunchInfoNV { + VkStructureType sType; + const void* pNext; + VkCudaFunctionNV function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void* const * pParams; + size_t extraCount; + const void* const * pExtras; +} VkCudaLaunchInfoNV; + +typedef struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cudaKernelLaunchFeatures; +} VkPhysicalDeviceCudaKernelLaunchFeaturesNV; + +typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t computeCapabilityMinor; + uint32_t computeCapabilityMajor; +} VkPhysicalDeviceCudaKernelLaunchPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaModuleNV)(VkDevice device, const VkCudaModuleCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaModuleNV* pModule); +typedef VkResult (VKAPI_PTR *PFN_vkGetCudaModuleCacheNV)(VkDevice device, VkCudaModuleNV module, size_t* pCacheSize, void* pCacheData); +typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaFunctionNV)(VkDevice device, const VkCudaFunctionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaFunctionNV* pFunction); +typedef void (VKAPI_PTR *PFN_vkDestroyCudaModuleNV)(VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDestroyCudaFunctionNV)(VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdCudaLaunchKernelNV)(VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV* pLaunchInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaModuleNV( + VkDevice device, + const VkCudaModuleCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaModuleNV* pModule); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetCudaModuleCacheNV( + VkDevice device, + VkCudaModuleNV module, + size_t* pCacheSize, + void* pCacheData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaFunctionNV( + VkDevice device, + const VkCudaFunctionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaFunctionNV* pFunction); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCudaModuleNV( + VkDevice device, + VkCudaModuleNV module, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCudaFunctionNV( + VkDevice device, + VkCudaFunctionNV function, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCudaLaunchKernelNV( + VkCommandBuffer commandBuffer, + const VkCudaLaunchInfoNV* pLaunchInfo); +#endif +#endif + + +// VK_NV_displacement_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_displacement_micromap 1 +#define VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION 2 +#define VK_NV_DISPLACEMENT_MICROMAP_EXTENSION_NAME "VK_NV_displacement_micromap" + +typedef enum VkDisplacementMicromapFormatNV { + VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV = 1, + VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV = 2, + VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV = 3, + VK_DISPLACEMENT_MICROMAP_FORMAT_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplacementMicromapFormatNV; +typedef struct VkPhysicalDeviceDisplacementMicromapFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 displacementMicromap; +} VkPhysicalDeviceDisplacementMicromapFeaturesNV; + +typedef struct VkPhysicalDeviceDisplacementMicromapPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxDisplacementMicromapSubdivisionLevel; +} VkPhysicalDeviceDisplacementMicromapPropertiesNV; + +typedef struct VkAccelerationStructureTrianglesDisplacementMicromapNV { + VkStructureType sType; + void* pNext; + VkFormat displacementBiasAndScaleFormat; + VkFormat displacementVectorFormat; + VkDeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer; + VkDeviceSize displacementBiasAndScaleStride; + VkDeviceOrHostAddressConstKHR displacementVectorBuffer; + VkDeviceSize displacementVectorStride; + VkDeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags; + VkDeviceSize displacedMicromapPrimitiveFlagsStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexBuffer; + VkDeviceSize indexStride; + uint32_t baseTriangle; + uint32_t usageCountsCount; + const VkMicromapUsageEXT* pUsageCounts; + const VkMicromapUsageEXT* const* ppUsageCounts; + VkMicromapEXT micromap; +} VkAccelerationStructureTrianglesDisplacementMicromapNV; + + + +// VK_AMDX_dense_geometry_format is a preprocessor guard. Do not pass it to API calls. +#define VK_AMDX_dense_geometry_format 1 +#define VK_AMDX_DENSE_GEOMETRY_FORMAT_SPEC_VERSION 1 +#define VK_AMDX_DENSE_GEOMETRY_FORMAT_EXTENSION_NAME "VK_AMDX_dense_geometry_format" +#define VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_BYTE_ALIGNMENT_AMDX 128U +#define VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_BYTE_STRIDE_AMDX 128U + +typedef enum VkCompressedTriangleFormatAMDX { + VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_AMDX = 0, + VK_COMPRESSED_TRIANGLE_FORMAT_MAX_ENUM_AMDX = 0x7FFFFFFF +} VkCompressedTriangleFormatAMDX; +typedef struct VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX { + VkStructureType sType; + void* pNext; + VkBool32 denseGeometryFormat; +} VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX; + +typedef struct VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR compressedData; + VkDeviceSize dataSize; + uint32_t numTriangles; + uint32_t numVertices; + uint32_t maxPrimitiveIndex; + uint32_t maxGeometryIndex; + VkCompressedTriangleFormatAMDX format; +} VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_core.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_core.h new file mode 100644 index 000000000..32507d29e --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_core.h @@ -0,0 +1,25278 @@ +#ifndef VULKAN_CORE_H_ +#define VULKAN_CORE_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_VERSION_1_0 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_0 1 +#include "vk_platform.h" + +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + + +#ifndef VK_USE_64_BIT_PTR_DEFINES + #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64) + #define VK_USE_64_BIT_PTR_DEFINES 1 + #else + #define VK_USE_64_BIT_PTR_DEFINES 0 + #endif +#endif + + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) + #define VK_NULL_HANDLE nullptr + #else + #define VK_NULL_HANDLE ((void*)0) + #endif + #else + #define VK_NULL_HANDLE 0ULL + #endif +#endif +#ifndef VK_NULL_HANDLE + #define VK_NULL_HANDLE 0 +#endif + + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; + #else + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; + #endif +#endif + +#define VK_MAKE_API_VERSION(variant, major, minor, patch) \ + ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + + +//#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 + +// Version of this file +#define VK_HEADER_VERSION 341 + +// Complete version of this file +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) + + +#define VK_MAKE_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + + +#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) + + +#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) + + +#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) + +#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) +#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU) +#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) +#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) +// Vulkan 1.0 version number +#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 + +typedef uint32_t VkBool32; +typedef uint64_t VkDeviceAddress; +typedef uint64_t VkDeviceSize; +typedef uint32_t VkFlags; +typedef uint32_t VkSampleMask; +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) +VK_DEFINE_HANDLE(VkInstance) +VK_DEFINE_HANDLE(VkPhysicalDevice) +VK_DEFINE_HANDLE(VkDevice) +VK_DEFINE_HANDLE(VkQueue) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) +VK_DEFINE_HANDLE(VkCommandBuffer) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) +#define VK_FALSE 0U +#define VK_LOD_CLAMP_NONE 1000.0F +#define VK_QUEUE_FAMILY_IGNORED (~0U) +#define VK_REMAINING_ARRAY_LAYERS (~0U) +#define VK_REMAINING_MIP_LEVELS (~0U) +#define VK_TRUE 1U +#define VK_WHOLE_SIZE (~0ULL) +#define VK_MAX_MEMORY_TYPES 32U +#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256U +#define VK_UUID_SIZE 16U +#define VK_MAX_EXTENSION_NAME_SIZE 256U +#define VK_MAX_DESCRIPTION_SIZE 256U +#define VK_MAX_MEMORY_HEAPS 16U +#define VK_ATTACHMENT_UNUSED (~0U) +#define VK_SUBPASS_EXTERNAL (~0U) + +typedef enum VkResult { + VK_SUCCESS = 0, + VK_NOT_READY = 1, + VK_TIMEOUT = 2, + VK_EVENT_SET = 3, + VK_EVENT_RESET = 4, + VK_INCOMPLETE = 5, + VK_ERROR_OUT_OF_HOST_MEMORY = -1, + VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, + VK_ERROR_INITIALIZATION_FAILED = -3, + VK_ERROR_DEVICE_LOST = -4, + VK_ERROR_MEMORY_MAP_FAILED = -5, + VK_ERROR_LAYER_NOT_PRESENT = -6, + VK_ERROR_EXTENSION_NOT_PRESENT = -7, + VK_ERROR_FEATURE_NOT_PRESENT = -8, + VK_ERROR_INCOMPATIBLE_DRIVER = -9, + VK_ERROR_TOO_MANY_OBJECTS = -10, + VK_ERROR_FORMAT_NOT_SUPPORTED = -11, + VK_ERROR_FRAGMENTED_POOL = -12, + VK_ERROR_UNKNOWN = -13, + VK_ERROR_VALIDATION_FAILED = -1000011001, + VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000, + VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003, + VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000, + VK_ERROR_FRAGMENTATION = -1000161000, + VK_PIPELINE_COMPILE_REQUIRED = 1000297000, + VK_ERROR_NOT_PERMITTED = -1000174001, + VK_ERROR_SURFACE_LOST_KHR = -1000000000, + VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, + VK_SUBOPTIMAL_KHR = 1000001003, + VK_ERROR_OUT_OF_DATE_KHR = -1000001004, + VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, + VK_ERROR_INVALID_SHADER_NV = -1000012000, + VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR = -1000023000, + VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR = -1000023001, + VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR = -1000023002, + VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR = -1000023003, + VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000023004, + VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000023005, + VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000, + VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT = -1000208000, + VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000, + VK_THREAD_IDLE_KHR = 1000268000, + VK_THREAD_DONE_KHR = 1000268001, + VK_OPERATION_DEFERRED_KHR = 1000268002, + VK_OPERATION_NOT_DEFERRED_KHR = 1000268003, + VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR = -1000299000, + VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000, + VK_INCOMPATIBLE_SHADER_BINARY_EXT = 1000482000, + VK_PIPELINE_BINARY_MISSING_KHR = 1000483000, + VK_ERROR_NOT_ENOUGH_SPACE_KHR = -1000483000, + VK_ERROR_VALIDATION_FAILED_EXT = VK_ERROR_VALIDATION_FAILED, + VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY, + VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE, + VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, + VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED, + VK_ERROR_NOT_PERMITTED_KHR = VK_ERROR_NOT_PERMITTED, + VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, + VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, + // VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT is a legacy alias + VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT = VK_INCOMPATIBLE_SHADER_BINARY_EXT, + VK_RESULT_MAX_ENUM = 0x7FFFFFFF +} VkResult; + +typedef enum VkStructureType { + VK_STRUCTURE_TYPE_APPLICATION_INFO = 0, + VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2, + VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3, + VK_STRUCTURE_TYPE_SUBMIT_INFO = 4, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5, + VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6, + VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7, + VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8, + VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9, + VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10, + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11, + VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12, + VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13, + VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14, + VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15, + VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16, + VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19, + VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23, + VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24, + VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26, + VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29, + VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30, + VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35, + VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36, + VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38, + VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42, + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45, + VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46, + VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47, + VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000, + VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005, + VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000, + VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001, + VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002, + VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008, + VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002, + VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000, + VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002, + VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000, + VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001, + VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000, + VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000, + VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001, + VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002, + VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005, + VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000, + VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003, + VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001, + VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002, + VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003, + VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004, + VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001, + VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002, + VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000, + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002, + VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004, + VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005, + VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001, + VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002, + VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES = 53, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES = 54, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES = 1000245000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES = 1000295000, + VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO = 1000295001, + VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO = 1000295002, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_2 = 1000314000, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2 = 1000314001, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 = 1000314002, + VK_STRUCTURE_TYPE_DEPENDENCY_INFO = 1000314003, + VK_STRUCTURE_TYPE_SUBMIT_INFO_2 = 1000314004, + VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO = 1000314005, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO = 1000314006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES = 1000314007, + VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 = 1000337000, + VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2 = 1000337001, + VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2 = 1000337002, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2 = 1000337003, + VK_STRUCTURE_TYPE_BUFFER_COPY_2 = 1000337006, + VK_STRUCTURE_TYPE_IMAGE_COPY_2 = 1000337007, + VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2 = 1000337009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES = 1000066000, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 = 1000360000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES = 1000413000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES = 1000413001, + VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS = 1000413002, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS = 1000413003, + VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO = 1000192000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES = 1000215000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES = 1000276000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES = 1000297000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES = 1000325000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES = 1000335000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES = 1000225000, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO = 1000225001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES = 1000225002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES = 1000138000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES = 1000138001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK = 1000138002, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO = 1000138003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES = 1000280000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES = 1000280001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES = 1000281001, + VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2 = 1000337004, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2 = 1000337005, + VK_STRUCTURE_TYPE_IMAGE_BLIT_2 = 1000337008, + VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2 = 1000337010, + VK_STRUCTURE_TYPE_RENDERING_INFO = 1000044000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO = 1000044001, + VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO = 1000044002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES = 1000044003, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO = 1000044004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES = 55, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES = 56, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO = 1000174000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES = 1000388000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES = 1000388001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES = 1000265000, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO = 1000271000, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO = 1000271001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES = 1000470000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES = 1000470001, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO = 1000470004, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2 = 1000338002, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2 = 1000338003, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO = 1000470006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES = 1000545000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES = 1000545001, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS = 1000545002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES = 1000270000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES = 1000270001, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY = 1000270002, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY = 1000270003, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO = 1000270004, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO = 1000270005, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO = 1000270006, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO = 1000270007, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE = 1000270008, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY = 1000270009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES = 1000416000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES = 1000528000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES = 1000544000, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO = 1000470005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES = 1000080000, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO = 1000545003, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO = 1000545004, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO = 1000545005, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO = 1000545006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES = 1000466000, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO = 1000068000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES = 1000068001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES = 1000068002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES = 1000259000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO = 1000259001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES = 1000259002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES = 1000525000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO = 1000190001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES = 1000190002, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO = 1000470003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES = 1000232000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO = 1000232001, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO = 1000232002, + VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000, + VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001, + VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007, + VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009, + VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010, + VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012, + VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000, + VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001, + VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000, + VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, + VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, + VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, + VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, + VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, + VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, + VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, + VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR = 1000023000, + VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001, + VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR = 1000023002, + VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR = 1000023003, + VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR = 1000023004, + VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005, + VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006, + VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007, + VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008, + VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009, + VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010, + VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR = 1000023011, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR = 1000023012, + VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR = 1000023013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR = 1000023016, + VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR = 1000024001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR = 1000024002, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002, + VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX = 1000029000, + VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX = 1000029001, + VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX = 1000029002, + VK_STRUCTURE_TYPE_CU_MODULE_TEXTURING_MODE_CREATE_INFO_NVX = 1000029004, + VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_KHR = 1000038000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000038001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR = 1000038002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_KHR = 1000038003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR = 1000038004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_KHR = 1000038005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR = 1000038006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_KHR = 1000038007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR = 1000038008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR = 1000038009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_KHR = 1000038010, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_KHR = 1000038011, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR = 1000038012, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000038013, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR = 1000039000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000039001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR = 1000039002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR = 1000039003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR = 1000039004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR = 1000039005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR = 1000039006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR = 1000039007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR = 1000039009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR = 1000039010, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR = 1000039011, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR = 1000039012, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR = 1000039013, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000039014, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR = 1000040000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR = 1000040001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR = 1000040003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000040004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR = 1000040005, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR = 1000040006, + VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000, + VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001, + VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000, + VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000, + VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, + VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, + VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000, + VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001, + VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002, + VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001, + VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001, + VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002, + VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000, + VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000, + VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001, + VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002, + VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003, + VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000, + VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = 1000044009, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000, + VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001, + VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG = 1000110000, + VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000, + VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000, + VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001, + VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002, + VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000, + VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = 1000116000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = 1000116001, + VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = 1000116002, + VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = 1000116003, + VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = 1000116004, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = 1000116005, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = 1000116006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001, + VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002, + VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000, + VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001, + VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002, + VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003, + VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004, + VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, + VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, + VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000, + VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001, + VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002, + VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003, + VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002, + VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003, + VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID = 1000129006, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX = 1000134000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX = 1000134001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX = 1000134002, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX = 1000134003, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX = 1000134004, +#endif + VK_STRUCTURE_TYPE_TEXEL_BUFFER_DESCRIPTOR_INFO_EXT = 1000135000, + VK_STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT = 1000135001, + VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT = 1000135002, + VK_STRUCTURE_TYPE_BIND_HEAP_INFO_EXT = 1000135003, + VK_STRUCTURE_TYPE_PUSH_DATA_INFO_EXT = 1000135004, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT = 1000135005, + VK_STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT = 1000135006, + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT = 1000135007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_PROPERTIES_EXT = 1000135008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT = 1000135009, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT = 1000135010, + VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_INDEX_CREATE_INFO_EXT = 1000135011, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV = 1000135012, + VK_STRUCTURE_TYPE_SUBSAMPLED_IMAGE_FORMAT_PROPERTIES_EXT = 1000135013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_TENSOR_PROPERTIES_ARM = 1000135014, + VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR = 1000141000, + VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000, + VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001, + VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003, + VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001, + VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002, + VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003, + VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004, + VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005, + VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT = 1000158006, + VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000, + VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001, +#endif + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001, + VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003, + VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004, + VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005, + VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000, + VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000, + VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000, + VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000, + VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR = 1000187000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000187001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR = 1000187002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR = 1000187003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR = 1000187004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR = 1000187005, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, + VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002, + VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008, + VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT = 1000208000, + VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT = 1000208001, + VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT = 1000208002, + VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT = 1000208003, + VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT = 1000208004, + VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT = 1000208005, + VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT = 1000208006, + VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT = 1000208007, + VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT = 1000208008, + VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT = 1000208009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000, + VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = 1000210000, + VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001, + VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002, + VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003, + VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004, + VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000, + VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000, + VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001, + VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000, + VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002, + VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = 1000044007, + VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004, + VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR = 1000235000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000, + VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001, + VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002, + VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = 1000248000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001, + VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT = 1000254000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT = 1000254001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT = 1000254002, + VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002, + VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001, + VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, + VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT = 1000272000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT = 1000272001, + VK_STRUCTURE_TYPE_MEMORY_MAP_PLACED_INFO_EXT = 1000272002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = 1000273000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000, + VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = 1000277003, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = 1000277004, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000, + VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT = 1000283000, + VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT = 1000283001, + VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT = 1000283002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000, + VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002, + VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT = 1000288000, + VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV = 1000292000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV = 1000292001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV = 1000292002, + VK_STRUCTURE_TYPE_PRESENT_ID_KHR = 1000294000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR = 1000294001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR = 1000299002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR = 1000299003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR = 1000299004, + VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR = 1000299005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR = 1000299006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR = 1000299007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR = 1000299008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR = 1000299009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000299010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000, + VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV = 1000307000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV = 1000307001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV = 1000307002, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV = 1000307003, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV = 1000307004, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM = 1000309000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM = 1000309001, + VK_STRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM = 1000309002, + VK_STRUCTURE_TYPE_PER_TILE_BEGIN_INFO_QCOM = 1000309003, + VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM = 1000309004, + VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM = 1000309005, + VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV = 1000310000, + VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT = 1000311000, + VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT = 1000311001, + VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT = 1000311002, + VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT = 1000311003, + VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT = 1000311004, + VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT = 1000311005, + VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT = 1000311006, + VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT = 1000311007, + VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT = 1000311008, + VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT = 1000311009, + VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311010, + VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311011, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT = 1000316000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT = 1000316001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT = 1000316002, + VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT = 1000316003, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT = 1000316004, + VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316005, + VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316006, + VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316007, + VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316008, + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT = 1000316010, + VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT = 1000316011, + VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT = 1000316012, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT = 1000320000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT = 1000320001, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT = 1000320002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD = 1000321000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR = 1000203000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR = 1000322000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = 1000327000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = 1000327001, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV = 1000327002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT = 1000328000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT = 1000328001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001, + VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT = 1000338000, + VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT = 1000338001, + VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT = 1000338004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT = 1000339000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT = 1000341000, + VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT = 1000341001, + VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT = 1000341002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000, + VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000, + VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001, + VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = 1000353000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT = 1000354000, + VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT = 1000354001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT = 1000355000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT = 1000355001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 1000356000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000, + VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001, + VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1000366000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1000366001, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1000366002, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1000366003, + VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1000366004, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1000366005, + VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA = 1000366006, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA = 1000366007, + VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA = 1000366008, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA = 1000366009, + VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI = 1000369000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI = 1000369001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI = 1000369002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000, + VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001, + VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT = 1000372000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT = 1000372001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT = 1000375000, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT = 1000375001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT = 1000376000, + VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT = 1000376001, + VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT = 1000376002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000, + VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 1000382000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR = 1000386000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR = 1000387000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE = 1000390000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE = 1000390001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE = 1000390002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE = 1000390003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = 1000392001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT = 1000393000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT = 1000395000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT = 1000395001, + VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT = 1000396000, + VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT = 1000396001, + VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT = 1000396002, + VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT = 1000396003, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT = 1000396004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT = 1000396005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT = 1000396006, + VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT = 1000396007, + VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT = 1000396008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT = 1000396009, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV = 1000397000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV = 1000397001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV = 1000397002, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI = 1000404000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI = 1000404001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_VRS_FEATURES_HUAWEI = 1000404002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT = 1000411000, + VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM = 1000415000, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM = 1000417000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM = 1000417001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM = 1000417002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT = 1000418000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT = 1000418001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = 1000420000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE = 1000420001, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = 1000420002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT = 1000422000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM = 1000424000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM = 1000424001, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM = 1000424002, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM = 1000424003, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM = 1000424004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV = 1000426000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV = 1000428000, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV = 1000428001, + VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV = 1000428002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV = 1000429008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_LINEAR_SWEPT_SPHERES_DATA_NV = 1000429009, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_SPHERES_DATA_NV = 1000429010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR = 1000434000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM = 1000440000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM = 1000440001, + VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM = 1000440002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT = 1000451000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT = 1000451001, + VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS = 1000452000, + VK_STRUCTURE_TYPE_NATIVE_BUFFER_PROPERTIES_OHOS = 1000452001, + VK_STRUCTURE_TYPE_NATIVE_BUFFER_FORMAT_PROPERTIES_OHOS = 1000452002, + VK_STRUCTURE_TYPE_IMPORT_NATIVE_BUFFER_INFO_OHOS = 1000452003, + VK_STRUCTURE_TYPE_MEMORY_GET_NATIVE_BUFFER_INFO_OHOS = 1000452004, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_OHOS = 1000452005, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT = 1000453000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT = 1000455000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT = 1000455001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT = 1000458000, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT = 1000458001, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000458002, + VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT = 1000458003, + VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG = 1000459000, + VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG = 1000459001, + VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM = 1000460000, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM = 1000460001, + VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM = 1000460002, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM = 1000460003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM = 1000460004, + VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM = 1000460005, + VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM = 1000460006, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM = 1000460007, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM = 1000460008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM = 1000460009, + VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM = 1000460010, + VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM = 1000460011, + VK_STRUCTURE_TYPE_TENSOR_COPY_ARM = 1000460012, + VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM = 1000460013, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM = 1000460014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM = 1000460015, + VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM = 1000460016, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM = 1000460017, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM = 1000460018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_PROPERTIES_ARM = 1000460019, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_TENSOR_INFO_ARM = 1000460020, + VK_STRUCTURE_TYPE_TENSOR_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460021, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460022, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM = 1000460023, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT = 1000462000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT = 1000462001, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT = 1000462002, + VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT = 1000462003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT = 1000342000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV = 1000464000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV = 1000464001, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV = 1000464002, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV = 1000464003, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV = 1000464004, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV = 1000464005, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV = 1000464010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT = 1000465000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID = 1000468000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468001, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD = 1000476000, + VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD = 1000476001, + VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD = 1000476002, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX = 1000478000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DENSE_GEOMETRY_FORMAT_TRIANGLES_DATA_AMDX = 1000478001, +#endif + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR = 1000479000, + VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR = 1000479001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR = 1000479002, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR = 1000480000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR = 1000480001, + VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR = 1000480002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR = 1000481000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT = 1000482000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT = 1000482001, + VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT = 1000482002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR = 1000483000, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_CREATE_INFO_KHR = 1000483001, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_INFO_KHR = 1000483002, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_KEY_KHR = 1000483003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_PROPERTIES_KHR = 1000483004, + VK_STRUCTURE_TYPE_RELEASE_CAPTURED_PIPELINE_DATA_INFO_KHR = 1000483005, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_DATA_INFO_KHR = 1000483006, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_INFO_KHR = 1000483007, + VK_STRUCTURE_TYPE_DEVICE_PIPELINE_BINARY_INTERNAL_CACHE_CONTROL_KHR = 1000483008, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR = 1000483009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM = 1000484000, + VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM = 1000484001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC = 1000485000, + VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC = 1000485001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR = 1000274000, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR = 1000274001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR = 1000274002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR = 1000275000, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR = 1000275001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR = 1000275002, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR = 1000275003, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR = 1000275004, + VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR = 1000275005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM = 1000488000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV = 1000490000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV = 1000490001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV = 1000491000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491001, + VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491002, + VK_STRUCTURE_TYPE_CONVERT_COOPERATIVE_VECTOR_MATRIX_INFO_NV = 1000491004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV = 1000492000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV = 1000492001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT = 1000351000, + VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT = 1000351002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT = 1000495000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT = 1000495001, + VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT = 1000496000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM = 1000497000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM = 1000497001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT = 1000498000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT = 1000499000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR = 1000504000, + VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV = 1000505000, + VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV = 1000505001, + VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV = 1000505002, + VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV = 1000505003, + VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV = 1000505004, + VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV = 1000505005, + VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV = 1000505006, + VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV = 1000505007, + VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV = 1000505008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR = 1000506000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR = 1000506001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR = 1000506002, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM = 1000507000, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM = 1000507001, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM = 1000507002, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM = 1000507003, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM = 1000507004, + VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM = 1000507005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM = 1000507006, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM = 1000507007, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM = 1000507008, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM = 1000507009, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM = 1000507010, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM = 1000507011, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM = 1000507012, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM = 1000507013, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM = 1000507014, + VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM = 1000507016, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM = 1000507017, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM = 1000507018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM = 1000507019, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM = 1000507015, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM = 1000510000, + VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM = 1000510001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR = 1000201000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR = 1000511000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR = 1000512000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR = 1000512001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR = 1000512003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000512004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR = 1000512005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR = 1000513000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000513001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR = 1000513002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR = 1000513003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR = 1000513004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PROFILE_INFO_KHR = 1000513005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR = 1000513006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR = 1000513007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUALITY_LEVEL_PROPERTIES_KHR = 1000513008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_CREATE_INFO_KHR = 1000513009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR = 1000513010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR = 1000514000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_CAPABILITIES_KHR = 1000514001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PICTURE_INFO_KHR = 1000514002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PROFILE_INFO_KHR = 1000514003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR = 1000515000, + VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR = 1000515001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV = 1000516000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM = 1000518000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM = 1000518001, + VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM = 1000518002, + VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM = 1000519000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM = 1000519001, + VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM = 1000519002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM = 1000520000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM = 1000520001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM = 1000521000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT = 1000524000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR = 1000527000, + VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT = 1000527001, + VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX = 1000529000, + VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX = 1000529001, + VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX = 1000529002, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX = 1000529003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX = 1000529004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT = 1000530000, + VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR = 1000184000, + VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT = 1000545007, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT = 1000545008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV = 1000546000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM = 1000547000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_PROPERTIES_QCOM = 1000547001, + VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM = 1000547002, + VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM = 1000547003, + VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM = 1000547004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR = 1000549000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR = 1000426001, + VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR = 1000549002, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR = 1000549003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT = 1000427000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT = 1000427001, + VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT = 1000550002, + VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV = 1000551000, + VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV = 1000551001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR = 1000552000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR = 1000552001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR = 1000552002, + VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR = 1000552003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR = 1000552004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553000, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR = 1000553002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000553005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR = 1000553009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553004, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_H265_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553007, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_AV1_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV = 1000555000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV = 1000556000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV = 1000556001, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV = 1000556002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV = 1000556003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR = 1000558000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV = 1000559000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR = 1000562000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR = 1000562001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR = 1000562002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR = 1000562003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR = 1000562004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV = 1000563000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT = 1000564000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT = 1000567000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV = 1000568000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV = 1000569000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000569001, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV = 1000569002, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_TRIANGLE_CLUSTER_INPUT_NV = 1000569003, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_MOVE_OBJECTS_INPUT_NV = 1000569004, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV = 1000569005, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV = 1000569006, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CLUSTER_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000569007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV = 1000570000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000570001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570002, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCES_INPUT_NV = 1000570003, + VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV = 1000570004, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_FLAGS_NV = 1000570005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT = 1000572000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT = 1000572001, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT = 1000572002, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT = 1000572003, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT = 1000572004, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT = 1000572006, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT = 1000572007, + VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT = 1000572008, + VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT = 1000572009, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT = 1000572010, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT = 1000572011, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT = 1000572012, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT = 1000572013, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT = 1000572014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR = 1000574000, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR = 1000574002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA = 1000575000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA = 1000575001, + VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA = 1000575002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR = 1000579000, + VK_STRUCTURE_TYPE_PUSH_CONSTANT_BANK_INFO_NV = 1000580000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_CONSTANT_BANK_FEATURES_NV = 1000580001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_CONSTANT_BANK_PROPERTIES_NV = 1000580002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT = 1000581000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT = 1000581001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT = 1000582000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT = 1000582001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR = 1000584000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR = 1000584001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR = 1000584002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR = 1000586000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586003, + VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS = 1000685000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI = 1000590000, + VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI = 1000590001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV = 1000593000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV = 1000593001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV = 1000593002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM = 1000596000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT = 1000602000, + VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT = 1000602001, + VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT = 1000602002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR = 1000421000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM = 1000605000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM = 1000605001, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM = 1000605002, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM = 1000605003, + VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM = 1000605004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT = 1000608000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM = 1000609000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE = 1000611000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE = 1000611001, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE = 1000611002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR = 1000286000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR = 1000286001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV = 1000613000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV = 1000613001, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT = 1000425000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT = 1000425001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT = 1000425002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT = 1000620000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR = 1000361000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT = 1000627000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT = 1000628000, + VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT = 1000628001, + VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT = 1000628002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM = 1000629000, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM = 1000629001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR = 1000630000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR = 1000630001, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR = 1000630002, + VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR = 1000619003, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR = 1000630004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT = 1000635000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT = 1000635001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC = 1000637000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT = 1000642000, + VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV = 1000645000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV = 1000645001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT = 1000662000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, + // VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT is a legacy alias + VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, + VK_STRUCTURE_TYPE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INFO, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO, + VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, + VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, + // VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT is a legacy alias + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, + VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, + VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, + VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, + VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, + VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, + VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, + VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, + VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, + VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, + VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, + VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, + VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, + VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, + VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, + // VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL is a legacy alias + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES, + VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, + VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR, + VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT = VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, + VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, + VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, + VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, + VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2, + VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2, + VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, + VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, + VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR, + VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT, + VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_AREA_INFO, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS_KHR = VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO, + VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT = VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR, + VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkStructureType; + +typedef enum VkImageLayout { + VK_IMAGE_LAYOUT_UNDEFINED = 0, + VK_IMAGE_LAYOUT_GENERAL = 1, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7, + VK_IMAGE_LAYOUT_PREINITIALIZED = 8, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002, + VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003, + VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL = 1000314000, + VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL = 1000314001, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ = 1000232000, + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, + VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000, + VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001, + VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002, + VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, + VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000, + VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = 1000164003, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002, + VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT = 1000339000, + VK_IMAGE_LAYOUT_TENSOR_ALIASING_ARM = 1000460000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR = 1000553000, + VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT = 1000620000, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR = VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF +} VkImageLayout; + +typedef enum VkObjectType { + VK_OBJECT_TYPE_UNKNOWN = 0, + VK_OBJECT_TYPE_INSTANCE = 1, + VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2, + VK_OBJECT_TYPE_DEVICE = 3, + VK_OBJECT_TYPE_QUEUE = 4, + VK_OBJECT_TYPE_SEMAPHORE = 5, + VK_OBJECT_TYPE_COMMAND_BUFFER = 6, + VK_OBJECT_TYPE_FENCE = 7, + VK_OBJECT_TYPE_DEVICE_MEMORY = 8, + VK_OBJECT_TYPE_BUFFER = 9, + VK_OBJECT_TYPE_IMAGE = 10, + VK_OBJECT_TYPE_EVENT = 11, + VK_OBJECT_TYPE_QUERY_POOL = 12, + VK_OBJECT_TYPE_BUFFER_VIEW = 13, + VK_OBJECT_TYPE_IMAGE_VIEW = 14, + VK_OBJECT_TYPE_SHADER_MODULE = 15, + VK_OBJECT_TYPE_PIPELINE_CACHE = 16, + VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17, + VK_OBJECT_TYPE_RENDER_PASS = 18, + VK_OBJECT_TYPE_PIPELINE = 19, + VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20, + VK_OBJECT_TYPE_SAMPLER = 21, + VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22, + VK_OBJECT_TYPE_DESCRIPTOR_SET = 23, + VK_OBJECT_TYPE_FRAMEBUFFER = 24, + VK_OBJECT_TYPE_COMMAND_POOL = 25, + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000, + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000, + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT = 1000295000, + VK_OBJECT_TYPE_SURFACE_KHR = 1000000000, + VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000, + VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000, + VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001, + VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000, + VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000, + VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001, + VK_OBJECT_TYPE_CU_MODULE_NVX = 1000029000, + VK_OBJECT_TYPE_CU_FUNCTION_NVX = 1000029001, + VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, + VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, + VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000, + VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_OBJECT_TYPE_CUDA_MODULE_NV = 1000307000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_OBJECT_TYPE_CUDA_FUNCTION_NV = 1000307001, +#endif + VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000, + VK_OBJECT_TYPE_MICROMAP_EXT = 1000396000, + VK_OBJECT_TYPE_TENSOR_ARM = 1000460000, + VK_OBJECT_TYPE_TENSOR_VIEW_ARM = 1000460001, + VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV = 1000464000, + VK_OBJECT_TYPE_SHADER_EXT = 1000482000, + VK_OBJECT_TYPE_PIPELINE_BINARY_KHR = 1000483000, + VK_OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM = 1000507000, + VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV = 1000556000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT = 1000572000, + VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT = 1000572001, + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, + VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkObjectType; + +typedef enum VkVendorId { + VK_VENDOR_ID_KHRONOS = 0x10000, + VK_VENDOR_ID_VIV = 0x10001, + VK_VENDOR_ID_VSI = 0x10002, + VK_VENDOR_ID_KAZAN = 0x10003, + VK_VENDOR_ID_CODEPLAY = 0x10004, + VK_VENDOR_ID_MESA = 0x10005, + VK_VENDOR_ID_POCL = 0x10006, + VK_VENDOR_ID_MOBILEYE = 0x10007, + VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF +} VkVendorId; + +typedef enum VkSystemAllocationScope { + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1, + VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2, + VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4, + VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF +} VkSystemAllocationScope; + +typedef enum VkInternalAllocationType { + VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0, + VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkInternalAllocationType; + +typedef enum VkFormat { + VK_FORMAT_UNDEFINED = 0, + VK_FORMAT_R4G4_UNORM_PACK8 = 1, + VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2, + VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3, + VK_FORMAT_R5G6B5_UNORM_PACK16 = 4, + VK_FORMAT_B5G6R5_UNORM_PACK16 = 5, + VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6, + VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7, + VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8, + VK_FORMAT_R8_UNORM = 9, + VK_FORMAT_R8_SNORM = 10, + VK_FORMAT_R8_USCALED = 11, + VK_FORMAT_R8_SSCALED = 12, + VK_FORMAT_R8_UINT = 13, + VK_FORMAT_R8_SINT = 14, + VK_FORMAT_R8_SRGB = 15, + VK_FORMAT_R8G8_UNORM = 16, + VK_FORMAT_R8G8_SNORM = 17, + VK_FORMAT_R8G8_USCALED = 18, + VK_FORMAT_R8G8_SSCALED = 19, + VK_FORMAT_R8G8_UINT = 20, + VK_FORMAT_R8G8_SINT = 21, + VK_FORMAT_R8G8_SRGB = 22, + VK_FORMAT_R8G8B8_UNORM = 23, + VK_FORMAT_R8G8B8_SNORM = 24, + VK_FORMAT_R8G8B8_USCALED = 25, + VK_FORMAT_R8G8B8_SSCALED = 26, + VK_FORMAT_R8G8B8_UINT = 27, + VK_FORMAT_R8G8B8_SINT = 28, + VK_FORMAT_R8G8B8_SRGB = 29, + VK_FORMAT_B8G8R8_UNORM = 30, + VK_FORMAT_B8G8R8_SNORM = 31, + VK_FORMAT_B8G8R8_USCALED = 32, + VK_FORMAT_B8G8R8_SSCALED = 33, + VK_FORMAT_B8G8R8_UINT = 34, + VK_FORMAT_B8G8R8_SINT = 35, + VK_FORMAT_B8G8R8_SRGB = 36, + VK_FORMAT_R8G8B8A8_UNORM = 37, + VK_FORMAT_R8G8B8A8_SNORM = 38, + VK_FORMAT_R8G8B8A8_USCALED = 39, + VK_FORMAT_R8G8B8A8_SSCALED = 40, + VK_FORMAT_R8G8B8A8_UINT = 41, + VK_FORMAT_R8G8B8A8_SINT = 42, + VK_FORMAT_R8G8B8A8_SRGB = 43, + VK_FORMAT_B8G8R8A8_UNORM = 44, + VK_FORMAT_B8G8R8A8_SNORM = 45, + VK_FORMAT_B8G8R8A8_USCALED = 46, + VK_FORMAT_B8G8R8A8_SSCALED = 47, + VK_FORMAT_B8G8R8A8_UINT = 48, + VK_FORMAT_B8G8R8A8_SINT = 49, + VK_FORMAT_B8G8R8A8_SRGB = 50, + VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51, + VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52, + VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53, + VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54, + VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55, + VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56, + VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57, + VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58, + VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59, + VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60, + VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61, + VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62, + VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63, + VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64, + VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65, + VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66, + VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67, + VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68, + VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69, + VK_FORMAT_R16_UNORM = 70, + VK_FORMAT_R16_SNORM = 71, + VK_FORMAT_R16_USCALED = 72, + VK_FORMAT_R16_SSCALED = 73, + VK_FORMAT_R16_UINT = 74, + VK_FORMAT_R16_SINT = 75, + VK_FORMAT_R16_SFLOAT = 76, + VK_FORMAT_R16G16_UNORM = 77, + VK_FORMAT_R16G16_SNORM = 78, + VK_FORMAT_R16G16_USCALED = 79, + VK_FORMAT_R16G16_SSCALED = 80, + VK_FORMAT_R16G16_UINT = 81, + VK_FORMAT_R16G16_SINT = 82, + VK_FORMAT_R16G16_SFLOAT = 83, + VK_FORMAT_R16G16B16_UNORM = 84, + VK_FORMAT_R16G16B16_SNORM = 85, + VK_FORMAT_R16G16B16_USCALED = 86, + VK_FORMAT_R16G16B16_SSCALED = 87, + VK_FORMAT_R16G16B16_UINT = 88, + VK_FORMAT_R16G16B16_SINT = 89, + VK_FORMAT_R16G16B16_SFLOAT = 90, + VK_FORMAT_R16G16B16A16_UNORM = 91, + VK_FORMAT_R16G16B16A16_SNORM = 92, + VK_FORMAT_R16G16B16A16_USCALED = 93, + VK_FORMAT_R16G16B16A16_SSCALED = 94, + VK_FORMAT_R16G16B16A16_UINT = 95, + VK_FORMAT_R16G16B16A16_SINT = 96, + VK_FORMAT_R16G16B16A16_SFLOAT = 97, + VK_FORMAT_R32_UINT = 98, + VK_FORMAT_R32_SINT = 99, + VK_FORMAT_R32_SFLOAT = 100, + VK_FORMAT_R32G32_UINT = 101, + VK_FORMAT_R32G32_SINT = 102, + VK_FORMAT_R32G32_SFLOAT = 103, + VK_FORMAT_R32G32B32_UINT = 104, + VK_FORMAT_R32G32B32_SINT = 105, + VK_FORMAT_R32G32B32_SFLOAT = 106, + VK_FORMAT_R32G32B32A32_UINT = 107, + VK_FORMAT_R32G32B32A32_SINT = 108, + VK_FORMAT_R32G32B32A32_SFLOAT = 109, + VK_FORMAT_R64_UINT = 110, + VK_FORMAT_R64_SINT = 111, + VK_FORMAT_R64_SFLOAT = 112, + VK_FORMAT_R64G64_UINT = 113, + VK_FORMAT_R64G64_SINT = 114, + VK_FORMAT_R64G64_SFLOAT = 115, + VK_FORMAT_R64G64B64_UINT = 116, + VK_FORMAT_R64G64B64_SINT = 117, + VK_FORMAT_R64G64B64_SFLOAT = 118, + VK_FORMAT_R64G64B64A64_UINT = 119, + VK_FORMAT_R64G64B64A64_SINT = 120, + VK_FORMAT_R64G64B64A64_SFLOAT = 121, + VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122, + VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123, + VK_FORMAT_D16_UNORM = 124, + VK_FORMAT_X8_D24_UNORM_PACK32 = 125, + VK_FORMAT_D32_SFLOAT = 126, + VK_FORMAT_S8_UINT = 127, + VK_FORMAT_D16_UNORM_S8_UINT = 128, + VK_FORMAT_D24_UNORM_S8_UINT = 129, + VK_FORMAT_D32_SFLOAT_S8_UINT = 130, + VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131, + VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132, + VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133, + VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134, + VK_FORMAT_BC2_UNORM_BLOCK = 135, + VK_FORMAT_BC2_SRGB_BLOCK = 136, + VK_FORMAT_BC3_UNORM_BLOCK = 137, + VK_FORMAT_BC3_SRGB_BLOCK = 138, + VK_FORMAT_BC4_UNORM_BLOCK = 139, + VK_FORMAT_BC4_SNORM_BLOCK = 140, + VK_FORMAT_BC5_UNORM_BLOCK = 141, + VK_FORMAT_BC5_SNORM_BLOCK = 142, + VK_FORMAT_BC6H_UFLOAT_BLOCK = 143, + VK_FORMAT_BC6H_SFLOAT_BLOCK = 144, + VK_FORMAT_BC7_UNORM_BLOCK = 145, + VK_FORMAT_BC7_SRGB_BLOCK = 146, + VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147, + VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148, + VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149, + VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150, + VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151, + VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152, + VK_FORMAT_EAC_R11_UNORM_BLOCK = 153, + VK_FORMAT_EAC_R11_SNORM_BLOCK = 154, + VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155, + VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156, + VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157, + VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158, + VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159, + VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160, + VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161, + VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162, + VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163, + VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164, + VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165, + VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166, + VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167, + VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168, + VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169, + VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170, + VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171, + VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172, + VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173, + VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174, + VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175, + VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176, + VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177, + VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178, + VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179, + VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180, + VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181, + VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182, + VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183, + VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184, + VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000, + VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006, + VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016, + VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026, + VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027, + VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033, + VK_FORMAT_G8_B8R8_2PLANE_444_UNORM = 1000330000, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 = 1000330001, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 = 1000330002, + VK_FORMAT_G16_B16R16_2PLANE_444_UNORM = 1000330003, + VK_FORMAT_A4R4G4B4_UNORM_PACK16 = 1000340000, + VK_FORMAT_A4B4G4R4_UNORM_PACK16 = 1000340001, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK = 1000066000, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK = 1000066001, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK = 1000066002, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK = 1000066003, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK = 1000066004, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK = 1000066005, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK = 1000066006, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK = 1000066007, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK = 1000066008, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK = 1000066009, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK = 1000066010, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013, + VK_FORMAT_A1B5G5R5_UNORM_PACK16 = 1000470000, + VK_FORMAT_A8_UNORM = 1000470001, + VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, + VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, + VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, + VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003, + VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004, + VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, + VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, + VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, + VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT = 1000288000, + VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT = 1000288001, + VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT = 1000288002, + VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT = 1000288003, + VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT = 1000288004, + VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT = 1000288005, + VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT = 1000288006, + VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT = 1000288007, + VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT = 1000288008, + VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT = 1000288009, + VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT = 1000288010, + VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT = 1000288011, + VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT = 1000288012, + VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT = 1000288013, + VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT = 1000288014, + VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT = 1000288015, + VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT = 1000288016, + VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT = 1000288017, + VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT = 1000288018, + VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT = 1000288019, + VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT = 1000288020, + VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT = 1000288021, + VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT = 1000288022, + VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT = 1000288023, + VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT = 1000288024, + VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT = 1000288025, + VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT = 1000288026, + VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT = 1000288027, + VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT = 1000288028, + VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT = 1000288029, + VK_FORMAT_R8_BOOL_ARM = 1000460000, + VK_FORMAT_R16G16_SFIXED5_NV = 1000464000, + VK_FORMAT_R10X6_UINT_PACK16_ARM = 1000609000, + VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM = 1000609001, + VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM = 1000609002, + VK_FORMAT_R12X4_UINT_PACK16_ARM = 1000609003, + VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM = 1000609004, + VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM = 1000609005, + VK_FORMAT_R14X2_UINT_PACK16_ARM = 1000609006, + VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM = 1000609007, + VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM = 1000609008, + VK_FORMAT_R14X2_UNORM_PACK16_ARM = 1000609009, + VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM = 1000609010, + VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM = 1000609011, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM = 1000609012, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM = 1000609013, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, + VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM, + VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, + VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, + VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, + VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM, + VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, + VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, + VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16, + VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16, + // VK_FORMAT_R16G16_S10_5_NV is a legacy alias + VK_FORMAT_R16G16_S10_5_NV = VK_FORMAT_R16G16_SFIXED5_NV, + VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR = VK_FORMAT_A1B5G5R5_UNORM_PACK16, + VK_FORMAT_A8_UNORM_KHR = VK_FORMAT_A8_UNORM, + VK_FORMAT_MAX_ENUM = 0x7FFFFFFF +} VkFormat; + +typedef enum VkImageTiling { + VK_IMAGE_TILING_OPTIMAL = 0, + VK_IMAGE_TILING_LINEAR = 1, + VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000, + VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF +} VkImageTiling; + +typedef enum VkImageType { + VK_IMAGE_TYPE_1D = 0, + VK_IMAGE_TYPE_2D = 1, + VK_IMAGE_TYPE_3D = 2, + VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkImageType; + +typedef enum VkPhysicalDeviceType { + VK_PHYSICAL_DEVICE_TYPE_OTHER = 0, + VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1, + VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2, + VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3, + VK_PHYSICAL_DEVICE_TYPE_CPU = 4, + VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkPhysicalDeviceType; + +typedef enum VkQueryType { + VK_QUERY_TYPE_OCCLUSION = 0, + VK_QUERY_TYPE_PIPELINE_STATISTICS = 1, + VK_QUERY_TYPE_TIMESTAMP = 2, + VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000, + VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004, + VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000, + VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000, + VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR = 1000299000, + VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT = 1000328000, + VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT = 1000382000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR = 1000386000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR = 1000386001, + VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT = 1000396000, + VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT = 1000396001, + VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkQueryType; + +typedef enum VkSharingMode { + VK_SHARING_MODE_EXCLUSIVE = 0, + VK_SHARING_MODE_CONCURRENT = 1, + VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSharingMode; + +typedef enum VkComponentSwizzle { + VK_COMPONENT_SWIZZLE_IDENTITY = 0, + VK_COMPONENT_SWIZZLE_ZERO = 1, + VK_COMPONENT_SWIZZLE_ONE = 2, + VK_COMPONENT_SWIZZLE_R = 3, + VK_COMPONENT_SWIZZLE_G = 4, + VK_COMPONENT_SWIZZLE_B = 5, + VK_COMPONENT_SWIZZLE_A = 6, + VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF +} VkComponentSwizzle; + +typedef enum VkImageViewType { + VK_IMAGE_VIEW_TYPE_1D = 0, + VK_IMAGE_VIEW_TYPE_2D = 1, + VK_IMAGE_VIEW_TYPE_3D = 2, + VK_IMAGE_VIEW_TYPE_CUBE = 3, + VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4, + VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5, + VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6, + VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkImageViewType; + +typedef enum VkCommandBufferLevel { + VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0, + VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1, + VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF +} VkCommandBufferLevel; + +typedef enum VkIndexType { + VK_INDEX_TYPE_UINT16 = 0, + VK_INDEX_TYPE_UINT32 = 1, + VK_INDEX_TYPE_UINT8 = 1000265000, + VK_INDEX_TYPE_NONE_KHR = 1000165000, + VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR, + VK_INDEX_TYPE_UINT8_EXT = VK_INDEX_TYPE_UINT8, + VK_INDEX_TYPE_UINT8_KHR = VK_INDEX_TYPE_UINT8, + VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkIndexType; + +typedef enum VkPipelineCacheHeaderVersion { + VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1, + VK_PIPELINE_CACHE_HEADER_VERSION_DATA_GRAPH_QCOM = 1000629000, + VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCacheHeaderVersion; + +typedef enum VkBorderColor { + VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0, + VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1, + VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2, + VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3, + VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4, + VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5, + VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003, + VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004, + VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF +} VkBorderColor; + +typedef enum VkFilter { + VK_FILTER_NEAREST = 0, + VK_FILTER_LINEAR = 1, + VK_FILTER_CUBIC_EXT = 1000015000, + VK_FILTER_CUBIC_IMG = VK_FILTER_CUBIC_EXT, + VK_FILTER_MAX_ENUM = 0x7FFFFFFF +} VkFilter; + +typedef enum VkSamplerAddressMode { + VK_SAMPLER_ADDRESS_MODE_REPEAT = 0, + VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3, + VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4, + // VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR is a legacy alias + VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, + VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerAddressMode; + +typedef enum VkSamplerMipmapMode { + VK_SAMPLER_MIPMAP_MODE_NEAREST = 0, + VK_SAMPLER_MIPMAP_MODE_LINEAR = 1, + VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerMipmapMode; + +typedef enum VkCompareOp { + VK_COMPARE_OP_NEVER = 0, + VK_COMPARE_OP_LESS = 1, + VK_COMPARE_OP_EQUAL = 2, + VK_COMPARE_OP_LESS_OR_EQUAL = 3, + VK_COMPARE_OP_GREATER = 4, + VK_COMPARE_OP_NOT_EQUAL = 5, + VK_COMPARE_OP_GREATER_OR_EQUAL = 6, + VK_COMPARE_OP_ALWAYS = 7, + VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF +} VkCompareOp; + +typedef enum VkDescriptorType { + VK_DESCRIPTOR_TYPE_SAMPLER = 0, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1, + VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2, + VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3, + VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4, + VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6, + VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8, + VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9, + VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10, + VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK = 1000138000, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, + VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM = 1000440000, + VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM = 1000440001, + VK_DESCRIPTOR_TYPE_TENSOR_ARM = 1000460000, + VK_DESCRIPTOR_TYPE_MUTABLE_EXT = 1000351000, + VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570000, + VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, + VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = VK_DESCRIPTOR_TYPE_MUTABLE_EXT, + VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorType; + +typedef enum VkPipelineBindPoint { + VK_PIPELINE_BIND_POINT_GRAPHICS = 0, + VK_PIPELINE_BIND_POINT_COMPUTE = 1, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX = 1000134000, +#endif + VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000, + VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI = 1000369003, + VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM = 1000507000, + VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, + VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF +} VkPipelineBindPoint; + +typedef enum VkBlendFactor { + VK_BLEND_FACTOR_ZERO = 0, + VK_BLEND_FACTOR_ONE = 1, + VK_BLEND_FACTOR_SRC_COLOR = 2, + VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3, + VK_BLEND_FACTOR_DST_COLOR = 4, + VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5, + VK_BLEND_FACTOR_SRC_ALPHA = 6, + VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7, + VK_BLEND_FACTOR_DST_ALPHA = 8, + VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9, + VK_BLEND_FACTOR_CONSTANT_COLOR = 10, + VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11, + VK_BLEND_FACTOR_CONSTANT_ALPHA = 12, + VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13, + VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14, + VK_BLEND_FACTOR_SRC1_COLOR = 15, + VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16, + VK_BLEND_FACTOR_SRC1_ALPHA = 17, + VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18, + VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF +} VkBlendFactor; + +typedef enum VkBlendOp { + VK_BLEND_OP_ADD = 0, + VK_BLEND_OP_SUBTRACT = 1, + VK_BLEND_OP_REVERSE_SUBTRACT = 2, + VK_BLEND_OP_MIN = 3, + VK_BLEND_OP_MAX = 4, + VK_BLEND_OP_ZERO_EXT = 1000148000, + VK_BLEND_OP_SRC_EXT = 1000148001, + VK_BLEND_OP_DST_EXT = 1000148002, + VK_BLEND_OP_SRC_OVER_EXT = 1000148003, + VK_BLEND_OP_DST_OVER_EXT = 1000148004, + VK_BLEND_OP_SRC_IN_EXT = 1000148005, + VK_BLEND_OP_DST_IN_EXT = 1000148006, + VK_BLEND_OP_SRC_OUT_EXT = 1000148007, + VK_BLEND_OP_DST_OUT_EXT = 1000148008, + VK_BLEND_OP_SRC_ATOP_EXT = 1000148009, + VK_BLEND_OP_DST_ATOP_EXT = 1000148010, + VK_BLEND_OP_XOR_EXT = 1000148011, + VK_BLEND_OP_MULTIPLY_EXT = 1000148012, + VK_BLEND_OP_SCREEN_EXT = 1000148013, + VK_BLEND_OP_OVERLAY_EXT = 1000148014, + VK_BLEND_OP_DARKEN_EXT = 1000148015, + VK_BLEND_OP_LIGHTEN_EXT = 1000148016, + VK_BLEND_OP_COLORDODGE_EXT = 1000148017, + VK_BLEND_OP_COLORBURN_EXT = 1000148018, + VK_BLEND_OP_HARDLIGHT_EXT = 1000148019, + VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020, + VK_BLEND_OP_DIFFERENCE_EXT = 1000148021, + VK_BLEND_OP_EXCLUSION_EXT = 1000148022, + VK_BLEND_OP_INVERT_EXT = 1000148023, + VK_BLEND_OP_INVERT_RGB_EXT = 1000148024, + VK_BLEND_OP_LINEARDODGE_EXT = 1000148025, + VK_BLEND_OP_LINEARBURN_EXT = 1000148026, + VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027, + VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028, + VK_BLEND_OP_PINLIGHT_EXT = 1000148029, + VK_BLEND_OP_HARDMIX_EXT = 1000148030, + VK_BLEND_OP_HSL_HUE_EXT = 1000148031, + VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032, + VK_BLEND_OP_HSL_COLOR_EXT = 1000148033, + VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034, + VK_BLEND_OP_PLUS_EXT = 1000148035, + VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036, + VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037, + VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038, + VK_BLEND_OP_MINUS_EXT = 1000148039, + VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040, + VK_BLEND_OP_CONTRAST_EXT = 1000148041, + VK_BLEND_OP_INVERT_OVG_EXT = 1000148042, + VK_BLEND_OP_RED_EXT = 1000148043, + VK_BLEND_OP_GREEN_EXT = 1000148044, + VK_BLEND_OP_BLUE_EXT = 1000148045, + VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF +} VkBlendOp; + +typedef enum VkDynamicState { + VK_DYNAMIC_STATE_VIEWPORT = 0, + VK_DYNAMIC_STATE_SCISSOR = 1, + VK_DYNAMIC_STATE_LINE_WIDTH = 2, + VK_DYNAMIC_STATE_DEPTH_BIAS = 3, + VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4, + VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5, + VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6, + VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7, + VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, + VK_DYNAMIC_STATE_CULL_MODE = 1000267000, + VK_DYNAMIC_STATE_FRONT_FACE = 1000267001, + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY = 1000267002, + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT = 1000267003, + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT = 1000267004, + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE = 1000267005, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE = 1000267006, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE = 1000267007, + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP = 1000267008, + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE = 1000267009, + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE = 1000267010, + VK_DYNAMIC_STATE_STENCIL_OP = 1000267011, + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001, + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002, + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004, + VK_DYNAMIC_STATE_LINE_STIPPLE = 1000259000, + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT = 1000099001, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT = 1000099002, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, + VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000, + VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004, + VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006, + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV = 1000205000, + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001, + VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000, + VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000, + VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000, + VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003, + VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000, + VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT = 1000455003, + VK_DYNAMIC_STATE_POLYGON_MODE_EXT = 1000455004, + VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT = 1000455005, + VK_DYNAMIC_STATE_SAMPLE_MASK_EXT = 1000455006, + VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT = 1000455007, + VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT = 1000455008, + VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT = 1000455009, + VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT = 1000455010, + VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT = 1000455011, + VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT = 1000455012, + VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT = 1000455002, + VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT = 1000455013, + VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT = 1000455014, + VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT = 1000455015, + VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT = 1000455016, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT = 1000455017, + VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT = 1000455018, + VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT = 1000455019, + VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT = 1000455020, + VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT = 1000455021, + VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT = 1000455022, + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV = 1000455023, + VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV = 1000455024, + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV = 1000455025, + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV = 1000455026, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV = 1000455027, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV = 1000455028, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV = 1000455029, + VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV = 1000455030, + VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV = 1000455031, + VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV = 1000455032, + VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT = 1000524000, + VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT = 1000582000, + VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = VK_DYNAMIC_STATE_LINE_STIPPLE, + VK_DYNAMIC_STATE_CULL_MODE_EXT = VK_DYNAMIC_STATE_CULL_MODE, + VK_DYNAMIC_STATE_FRONT_FACE_EXT = VK_DYNAMIC_STATE_FRONT_FACE, + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, + VK_DYNAMIC_STATE_STENCIL_OP_EXT = VK_DYNAMIC_STATE_STENCIL_OP, + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, + VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = VK_DYNAMIC_STATE_LINE_STIPPLE, + VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF +} VkDynamicState; + +typedef enum VkFrontFace { + VK_FRONT_FACE_COUNTER_CLOCKWISE = 0, + VK_FRONT_FACE_CLOCKWISE = 1, + VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF +} VkFrontFace; + +typedef enum VkVertexInputRate { + VK_VERTEX_INPUT_RATE_VERTEX = 0, + VK_VERTEX_INPUT_RATE_INSTANCE = 1, + VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF +} VkVertexInputRate; + +typedef enum VkPrimitiveTopology { + VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0, + VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1, + VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5, + VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6, + VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8, + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9, + VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10, + VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF +} VkPrimitiveTopology; + +typedef enum VkPolygonMode { + VK_POLYGON_MODE_FILL = 0, + VK_POLYGON_MODE_LINE = 1, + VK_POLYGON_MODE_POINT = 2, + VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000, + VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF +} VkPolygonMode; + +typedef enum VkStencilOp { + VK_STENCIL_OP_KEEP = 0, + VK_STENCIL_OP_ZERO = 1, + VK_STENCIL_OP_REPLACE = 2, + VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3, + VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4, + VK_STENCIL_OP_INVERT = 5, + VK_STENCIL_OP_INCREMENT_AND_WRAP = 6, + VK_STENCIL_OP_DECREMENT_AND_WRAP = 7, + VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF +} VkStencilOp; + +typedef enum VkLogicOp { + VK_LOGIC_OP_CLEAR = 0, + VK_LOGIC_OP_AND = 1, + VK_LOGIC_OP_AND_REVERSE = 2, + VK_LOGIC_OP_COPY = 3, + VK_LOGIC_OP_AND_INVERTED = 4, + VK_LOGIC_OP_NO_OP = 5, + VK_LOGIC_OP_XOR = 6, + VK_LOGIC_OP_OR = 7, + VK_LOGIC_OP_NOR = 8, + VK_LOGIC_OP_EQUIVALENT = 9, + VK_LOGIC_OP_INVERT = 10, + VK_LOGIC_OP_OR_REVERSE = 11, + VK_LOGIC_OP_COPY_INVERTED = 12, + VK_LOGIC_OP_OR_INVERTED = 13, + VK_LOGIC_OP_NAND = 14, + VK_LOGIC_OP_SET = 15, + VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF +} VkLogicOp; + +typedef enum VkAttachmentLoadOp { + VK_ATTACHMENT_LOAD_OP_LOAD = 0, + VK_ATTACHMENT_LOAD_OP_CLEAR = 1, + VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2, + VK_ATTACHMENT_LOAD_OP_NONE = 1000400000, + VK_ATTACHMENT_LOAD_OP_NONE_EXT = VK_ATTACHMENT_LOAD_OP_NONE, + VK_ATTACHMENT_LOAD_OP_NONE_KHR = VK_ATTACHMENT_LOAD_OP_NONE, + VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentLoadOp; + +typedef enum VkAttachmentStoreOp { + VK_ATTACHMENT_STORE_OP_STORE = 0, + VK_ATTACHMENT_STORE_OP_DONT_CARE = 1, + VK_ATTACHMENT_STORE_OP_NONE = 1000301000, + VK_ATTACHMENT_STORE_OP_NONE_KHR = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_NONE_EXT = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentStoreOp; + +typedef enum VkSubpassContents { + VK_SUBPASS_CONTENTS_INLINE = 0, + VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1, + VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR = 1000451000, + VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT = VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR, + VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF +} VkSubpassContents; + +typedef enum VkAccessFlagBits { + VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001, + VK_ACCESS_INDEX_READ_BIT = 0x00000002, + VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004, + VK_ACCESS_UNIFORM_READ_BIT = 0x00000008, + VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010, + VK_ACCESS_SHADER_READ_BIT = 0x00000020, + VK_ACCESS_SHADER_WRITE_BIT = 0x00000040, + VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080, + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100, + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200, + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400, + VK_ACCESS_TRANSFER_READ_BIT = 0x00000800, + VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000, + VK_ACCESS_HOST_READ_BIT = 0x00002000, + VK_ACCESS_HOST_WRITE_BIT = 0x00004000, + VK_ACCESS_MEMORY_READ_BIT = 0x00008000, + VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000, + VK_ACCESS_NONE = 0, + VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000, + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000, + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000, + VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000, + VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000, + VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000, + VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = 0x00020000, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = 0x00040000, + VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT, + VK_ACCESS_NONE_KHR = VK_ACCESS_NONE, + VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkAccessFlagBits; +typedef VkFlags VkAccessFlags; + +typedef enum VkImageAspectFlagBits { + VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001, + VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002, + VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004, + VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008, + VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010, + VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020, + VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040, + VK_IMAGE_ASPECT_NONE = 0, + VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080, + VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100, + VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200, + VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400, + VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT, + VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT, + VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT, + VK_IMAGE_ASPECT_NONE_KHR = VK_IMAGE_ASPECT_NONE, + VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageAspectFlagBits; +typedef VkFlags VkImageAspectFlags; + +typedef enum VkFormatFeatureFlagBits { + VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, + VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, + VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, + VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, + VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, + VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, + VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, + VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000, + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000, + VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000, + VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000, + VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000, + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000, + VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000, + VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000, + VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000, + VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000, + VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000, + VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000, + VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT, + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, + VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, + VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, + VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT, + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, + VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFormatFeatureFlagBits; +typedef VkFlags VkFormatFeatureFlags; + +typedef enum VkImageCreateFlagBits { + VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, + VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, + VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004, + VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, + VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010, + VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400, + VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040, + VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020, + VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080, + VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100, + VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800, + VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200, + VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000, + VK_IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT = 0x00010000, + VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000, + VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000, + VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT = 0x00040000, + VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = 0x00020000, + VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 0x00100000, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT = 0x00008000, + VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, + VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, + VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, + VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, + VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT, + VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT, + VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = VK_IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, + VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageCreateFlagBits; +typedef VkFlags VkImageCreateFlags; + +typedef enum VkSampleCountFlagBits { + VK_SAMPLE_COUNT_1_BIT = 0x00000001, + VK_SAMPLE_COUNT_2_BIT = 0x00000002, + VK_SAMPLE_COUNT_4_BIT = 0x00000004, + VK_SAMPLE_COUNT_8_BIT = 0x00000008, + VK_SAMPLE_COUNT_16_BIT = 0x00000010, + VK_SAMPLE_COUNT_32_BIT = 0x00000020, + VK_SAMPLE_COUNT_64_BIT = 0x00000040, + VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSampleCountFlagBits; +typedef VkFlags VkSampleCountFlags; + +typedef enum VkImageUsageFlagBits { + VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001, + VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002, + VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, + VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, + VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, + VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT = 0x00400000, + VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400, + VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800, + VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000, + VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200, + VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00000100, + VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000, + VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000, + VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000, + VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x00080000, + VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000, + VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM = 0x00100000, + VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM = 0x00200000, + VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARM = 0x00800000, + VK_IMAGE_USAGE_TILE_MEMORY_BIT_QCOM = 0x08000000, + VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x02000000, + VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x04000000, + VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT = VK_IMAGE_USAGE_HOST_TRANSFER_BIT, + VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageUsageFlagBits; +typedef VkFlags VkImageUsageFlags; + +typedef enum VkInstanceCreateFlagBits { + VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR = 0x00000001, + VK_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkInstanceCreateFlagBits; +typedef VkFlags VkInstanceCreateFlags; + +typedef enum VkMemoryHeapFlagBits { + VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, + VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002, + VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM = 0x00000008, + VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, + VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryHeapFlagBits; +typedef VkFlags VkMemoryHeapFlags; + +typedef enum VkMemoryPropertyFlagBits { + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002, + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004, + VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008, + VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010, + VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020, + VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 0x00000040, + VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 0x00000080, + VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV = 0x00000100, + VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryPropertyFlagBits; +typedef VkFlags VkMemoryPropertyFlags; + +typedef enum VkQueueFlagBits { + VK_QUEUE_GRAPHICS_BIT = 0x00000001, + VK_QUEUE_COMPUTE_BIT = 0x00000002, + VK_QUEUE_TRANSFER_BIT = 0x00000004, + VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, + VK_QUEUE_PROTECTED_BIT = 0x00000010, + VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020, + VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040, + VK_QUEUE_OPTICAL_FLOW_BIT_NV = 0x00000100, + VK_QUEUE_DATA_GRAPH_BIT_ARM = 0x00000400, + VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueueFlagBits; +typedef VkFlags VkQueueFlags; +typedef VkFlags VkDeviceCreateFlags; + +typedef enum VkDeviceQueueCreateFlagBits { + VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001, + VK_DEVICE_QUEUE_CREATE_INTERNALLY_SYNCHRONIZED_BIT_KHR = 0x00000004, + VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDeviceQueueCreateFlagBits; +typedef VkFlags VkDeviceQueueCreateFlags; + +typedef enum VkPipelineStageFlagBits { + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, + VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, + VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, + VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, + VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, + VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, + VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, + VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, + VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, + VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, + VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000, + VK_PIPELINE_STAGE_HOST_BIT = 0x00004000, + VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000, + VK_PIPELINE_STAGE_NONE = 0, + VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000, + VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 0x00200000, + VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000, + VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000, + VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT = 0x00080000, + VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT = 0x00100000, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = 0x00020000, + VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT, + VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT, + VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE, + VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineStageFlagBits; +typedef VkFlags VkPipelineStageFlags; + +typedef enum VkMemoryMapFlagBits { + VK_MEMORY_MAP_PLACED_BIT_EXT = 0x00000001, + VK_MEMORY_MAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryMapFlagBits; +typedef VkFlags VkMemoryMapFlags; + +typedef enum VkSparseMemoryBindFlagBits { + VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001, + VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSparseMemoryBindFlagBits; +typedef VkFlags VkSparseMemoryBindFlags; + +typedef enum VkSparseImageFormatFlagBits { + VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001, + VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002, + VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004, + VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSparseImageFormatFlagBits; +typedef VkFlags VkSparseImageFormatFlags; + +typedef enum VkFenceCreateFlagBits { + VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001, + VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFenceCreateFlagBits; +typedef VkFlags VkFenceCreateFlags; +typedef VkFlags VkSemaphoreCreateFlags; + +typedef enum VkQueryPoolCreateFlagBits { + VK_QUERY_POOL_CREATE_RESET_BIT_KHR = 0x00000001, + VK_QUERY_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPoolCreateFlagBits; +typedef VkFlags VkQueryPoolCreateFlags; + +typedef enum VkQueryPipelineStatisticFlagBits { + VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, + VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, + VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, + VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, + VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, + VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, + VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, + VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, + VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, + VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, + VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, + VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT = 0x00000800, + VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT = 0x00001000, + VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI = 0x00002000, + VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPipelineStatisticFlagBits; +typedef VkFlags VkQueryPipelineStatisticFlags; + +typedef enum VkQueryResultFlagBits { + VK_QUERY_RESULT_64_BIT = 0x00000001, + VK_QUERY_RESULT_WAIT_BIT = 0x00000002, + VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, + VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, + VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 0x00000010, + VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryResultFlagBits; +typedef VkFlags VkQueryResultFlags; + +typedef enum VkBufferCreateFlagBits { + VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, + VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, + VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, + VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000010, + VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000020, + VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 0x00000040, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkBufferCreateFlagBits; +typedef VkFlags VkBufferCreateFlags; + +typedef enum VkBufferUsageFlagBits { + VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001, + VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002, + VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, + VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, + VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, + VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, + VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000, + VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000, + VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000, + VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800, + VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000, + VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 0x02000000, +#endif + VK_BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT = 0x10000000, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000, + VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400, + VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000, + VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000, + VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000, + VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000, + VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000, + VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000, + VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT = 0x01000000, + VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM = 0x08000000, + VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkBufferUsageFlagBits; +typedef VkFlags VkBufferUsageFlags; + +typedef enum VkImageViewCreateFlagBits { + VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 0x00000001, + VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000004, + VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT = 0x00000002, + VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageViewCreateFlagBits; +typedef VkFlags VkImageViewCreateFlags; + +typedef enum VkDependencyFlagBits { + VK_DEPENDENCY_BY_REGION_BIT = 0x00000001, + VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004, + VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002, + VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT = 0x00000008, + VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR = 0x00000020, + VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR = 0x00000040, + VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT, + VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT, + VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDependencyFlagBits; +typedef VkFlags VkDependencyFlags; + +typedef enum VkCommandPoolCreateFlagBits { + VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001, + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, + VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004, + VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandPoolCreateFlagBits; +typedef VkFlags VkCommandPoolCreateFlags; + +typedef enum VkCommandPoolResetFlagBits { + VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, + VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandPoolResetFlagBits; +typedef VkFlags VkCommandPoolResetFlags; + +typedef enum VkCommandBufferUsageFlagBits { + VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001, + VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002, + VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004, + VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandBufferUsageFlagBits; +typedef VkFlags VkCommandBufferUsageFlags; + +typedef enum VkQueryControlFlagBits { + VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001, + VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryControlFlagBits; +typedef VkFlags VkQueryControlFlags; + +typedef enum VkCommandBufferResetFlagBits { + VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, + VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCommandBufferResetFlagBits; +typedef VkFlags VkCommandBufferResetFlags; + +typedef enum VkEventCreateFlagBits { + VK_EVENT_CREATE_DEVICE_ONLY_BIT = 0x00000001, + VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT, + VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkEventCreateFlagBits; +typedef VkFlags VkEventCreateFlags; +typedef VkFlags VkBufferViewCreateFlags; +typedef VkFlags VkShaderModuleCreateFlags; + +typedef enum VkPipelineCacheCreateFlagBits { + VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, + VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR = 0x00000008, + VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, + VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCacheCreateFlagBits; +typedef VkFlags VkPipelineCacheCreateFlags; + +typedef enum VkPipelineCreateFlagBits { + VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001, + VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002, + VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004, + VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010, + VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008, + VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100, + VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT = 0x08000000, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT = 0x40000000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000, + VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000, + VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020, + VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000, + VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000, + VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040, + VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080, + VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00040000, + VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 0x00000800, + VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000, + VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000, + VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400, + VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000, + VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000, + VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000, + VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000, +#endif + // VK_PIPELINE_CREATE_DISPATCH_BASE is a legacy alias + VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, + VK_PIPELINE_CREATE_DISPATCH_BASE_BIT_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + // VK_PIPELINE_CREATE_DISPATCH_BASE_KHR is a legacy alias + VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + // VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT is a legacy alias + VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + // VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR is a legacy alias + VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, + VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT = VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT = VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT, + VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCreateFlagBits; +typedef VkFlags VkPipelineCreateFlags; + +typedef enum VkPipelineShaderStageCreateFlagBits { + VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT = 0x00000001, + VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT = 0x00000002, + VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT, + VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, + VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineShaderStageCreateFlagBits; +typedef VkFlags VkPipelineShaderStageCreateFlags; + +typedef enum VkShaderStageFlagBits { + VK_SHADER_STAGE_VERTEX_BIT = 0x00000001, + VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002, + VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004, + VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, + VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, + VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, + VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, + VK_SHADER_STAGE_ALL = 0x7FFFFFFF, + VK_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, + VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, + VK_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, + VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, + VK_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, + VK_SHADER_STAGE_TASK_BIT_EXT = 0x00000040, + VK_SHADER_STAGE_MESH_BIT_EXT = 0x00000080, + VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI = 0x00004000, + VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI = 0x00080000, + VK_SHADER_STAGE_RAYGEN_BIT_NV = VK_SHADER_STAGE_RAYGEN_BIT_KHR, + VK_SHADER_STAGE_ANY_HIT_BIT_NV = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, + VK_SHADER_STAGE_MISS_BIT_NV = VK_SHADER_STAGE_MISS_BIT_KHR, + VK_SHADER_STAGE_INTERSECTION_BIT_NV = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, + VK_SHADER_STAGE_CALLABLE_BIT_NV = VK_SHADER_STAGE_CALLABLE_BIT_KHR, + VK_SHADER_STAGE_TASK_BIT_NV = VK_SHADER_STAGE_TASK_BIT_EXT, + VK_SHADER_STAGE_MESH_BIT_NV = VK_SHADER_STAGE_MESH_BIT_EXT, + VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkShaderStageFlagBits; + +typedef enum VkPipelineLayoutCreateFlagBits { + VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT = 0x00000002, + VK_PIPELINE_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineLayoutCreateFlagBits; +typedef VkFlags VkPipelineLayoutCreateFlags; +typedef VkFlags VkShaderStageFlags; + +typedef enum VkSamplerCreateFlagBits { + VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001, + VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002, + VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008, + VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT = 0x00000004, + VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM = 0x00000010, + VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSamplerCreateFlagBits; +typedef VkFlags VkSamplerCreateFlags; + +typedef enum VkDescriptorPoolCreateFlagBits { + VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001, + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 0x00000002, + VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT = 0x00000004, + VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV = 0x00000008, + VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV = 0x00000010, + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT, + VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorPoolCreateFlagBits; +typedef VkFlags VkDescriptorPoolCreateFlags; +typedef VkFlags VkDescriptorPoolResetFlags; + +typedef enum VkDescriptorSetLayoutCreateFlagBits { + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT = 0x00000001, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00000010, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x00000020, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00000080, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT = 0x00000004, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV = 0x00000040, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorSetLayoutCreateFlagBits; +typedef VkFlags VkDescriptorSetLayoutCreateFlags; + +typedef enum VkColorComponentFlagBits { + VK_COLOR_COMPONENT_R_BIT = 0x00000001, + VK_COLOR_COMPONENT_G_BIT = 0x00000002, + VK_COLOR_COMPONENT_B_BIT = 0x00000004, + VK_COLOR_COMPONENT_A_BIT = 0x00000008, + VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkColorComponentFlagBits; +typedef VkFlags VkColorComponentFlags; + +typedef enum VkCullModeFlagBits { + VK_CULL_MODE_NONE = 0, + VK_CULL_MODE_FRONT_BIT = 0x00000001, + VK_CULL_MODE_BACK_BIT = 0x00000002, + VK_CULL_MODE_FRONT_AND_BACK = 0x00000003, + VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkCullModeFlagBits; +typedef VkFlags VkCullModeFlags; +typedef VkFlags VkPipelineVertexInputStateCreateFlags; +typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; +typedef VkFlags VkPipelineTessellationStateCreateFlags; +typedef VkFlags VkPipelineViewportStateCreateFlags; +typedef VkFlags VkPipelineRasterizationStateCreateFlags; +typedef VkFlags VkPipelineMultisampleStateCreateFlags; + +typedef enum VkPipelineDepthStencilStateCreateFlagBits { + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000001, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000002, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineDepthStencilStateCreateFlagBits; +typedef VkFlags VkPipelineDepthStencilStateCreateFlags; + +typedef enum VkPipelineColorBlendStateCreateFlagBits { + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT = 0x00000001, + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT, + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineColorBlendStateCreateFlagBits; +typedef VkFlags VkPipelineColorBlendStateCreateFlags; +typedef VkFlags VkPipelineDynamicStateCreateFlags; + +typedef enum VkAttachmentDescriptionFlagBits { + VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001, + VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR = 0x00000002, + VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR = 0x00000004, + VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentDescriptionFlagBits; +typedef VkFlags VkAttachmentDescriptionFlags; + +typedef enum VkFramebufferCreateFlagBits { + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001, + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, + VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFramebufferCreateFlagBits; +typedef VkFlags VkFramebufferCreateFlags; + +typedef enum VkRenderPassCreateFlagBits { + VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = 0x00000002, + VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 0x00000004, + VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkRenderPassCreateFlagBits; +typedef VkFlags VkRenderPassCreateFlags; + +typedef enum VkSubpassDescriptionFlagBits { + VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001, + VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002, + VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM = 0x00000100, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT = 0x00000010, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000020, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000040, + VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x00000080, + VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT = 0x00000004, + VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT = 0x00000008, + VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT, + VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, + VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubpassDescriptionFlagBits; +typedef VkFlags VkSubpassDescriptionFlags; + +typedef enum VkStencilFaceFlagBits { + VK_STENCIL_FACE_FRONT_BIT = 0x00000001, + VK_STENCIL_FACE_BACK_BIT = 0x00000002, + VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003, + // VK_STENCIL_FRONT_AND_BACK is a legacy alias + VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK, + VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkStencilFaceFlagBits; +typedef VkFlags VkStencilFaceFlags; +typedef struct VkExtent2D { + uint32_t width; + uint32_t height; +} VkExtent2D; + +typedef struct VkExtent3D { + uint32_t width; + uint32_t height; + uint32_t depth; +} VkExtent3D; + +typedef struct VkOffset2D { + int32_t x; + int32_t y; +} VkOffset2D; + +typedef struct VkOffset3D { + int32_t x; + int32_t y; + int32_t z; +} VkOffset3D; + +typedef struct VkRect2D { + VkOffset2D offset; + VkExtent2D extent; +} VkRect2D; + +typedef struct VkBaseInStructure { + VkStructureType sType; + const struct VkBaseInStructure* pNext; +} VkBaseInStructure; + +typedef struct VkBaseOutStructure { + VkStructureType sType; + struct VkBaseOutStructure* pNext; +} VkBaseOutStructure; + +typedef struct VkBufferMemoryBarrier { + VkStructureType sType; + const void* pNext; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; +} VkBufferMemoryBarrier; + +typedef struct VkImageSubresourceRange { + VkImageAspectFlags aspectMask; + uint32_t baseMipLevel; + uint32_t levelCount; + uint32_t baseArrayLayer; + uint32_t layerCount; +} VkImageSubresourceRange; + +typedef struct VkImageMemoryBarrier { + VkStructureType sType; + const void* pNext; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + VkImageLayout oldLayout; + VkImageLayout newLayout; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkImage image; + VkImageSubresourceRange subresourceRange; +} VkImageMemoryBarrier; + +typedef struct VkMemoryBarrier { + VkStructureType sType; + const void* pNext; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; +} VkMemoryBarrier; + +typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)( + void* pUserData, + size_t size, + size_t alignment, + VkSystemAllocationScope allocationScope); + +typedef void (VKAPI_PTR *PFN_vkFreeFunction)( + void* pUserData, + void* pMemory); + +typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( + void* pUserData, + size_t size, + VkInternalAllocationType allocationType, + VkSystemAllocationScope allocationScope); + +typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)( + void* pUserData, + size_t size, + VkInternalAllocationType allocationType, + VkSystemAllocationScope allocationScope); + +typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)( + void* pUserData, + void* pOriginal, + size_t size, + size_t alignment, + VkSystemAllocationScope allocationScope); + +typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); +typedef struct VkAllocationCallbacks { + void* pUserData; + PFN_vkAllocationFunction pfnAllocation; + PFN_vkReallocationFunction pfnReallocation; + PFN_vkFreeFunction pfnFree; + PFN_vkInternalAllocationNotification pfnInternalAllocation; + PFN_vkInternalFreeNotification pfnInternalFree; +} VkAllocationCallbacks; + +typedef struct VkApplicationInfo { + VkStructureType sType; + const void* pNext; + const char* pApplicationName; + uint32_t applicationVersion; + const char* pEngineName; + uint32_t engineVersion; + uint32_t apiVersion; +} VkApplicationInfo; + +typedef struct VkFormatProperties { + VkFormatFeatureFlags linearTilingFeatures; + VkFormatFeatureFlags optimalTilingFeatures; + VkFormatFeatureFlags bufferFeatures; +} VkFormatProperties; + +typedef struct VkImageFormatProperties { + VkExtent3D maxExtent; + uint32_t maxMipLevels; + uint32_t maxArrayLayers; + VkSampleCountFlags sampleCounts; + VkDeviceSize maxResourceSize; +} VkImageFormatProperties; + +typedef struct VkInstanceCreateInfo { + VkStructureType sType; + const void* pNext; + VkInstanceCreateFlags flags; + const VkApplicationInfo* pApplicationInfo; + uint32_t enabledLayerCount; + const char* const* ppEnabledLayerNames; + uint32_t enabledExtensionCount; + const char* const* ppEnabledExtensionNames; +} VkInstanceCreateInfo; + +typedef struct VkMemoryHeap { + VkDeviceSize size; + VkMemoryHeapFlags flags; +} VkMemoryHeap; + +typedef struct VkMemoryType { + VkMemoryPropertyFlags propertyFlags; + uint32_t heapIndex; +} VkMemoryType; + +typedef struct VkPhysicalDeviceFeatures { + VkBool32 robustBufferAccess; + VkBool32 fullDrawIndexUint32; + VkBool32 imageCubeArray; + VkBool32 independentBlend; + VkBool32 geometryShader; + VkBool32 tessellationShader; + VkBool32 sampleRateShading; + VkBool32 dualSrcBlend; + VkBool32 logicOp; + VkBool32 multiDrawIndirect; + VkBool32 drawIndirectFirstInstance; + VkBool32 depthClamp; + VkBool32 depthBiasClamp; + VkBool32 fillModeNonSolid; + VkBool32 depthBounds; + VkBool32 wideLines; + VkBool32 largePoints; + VkBool32 alphaToOne; + VkBool32 multiViewport; + VkBool32 samplerAnisotropy; + VkBool32 textureCompressionETC2; + VkBool32 textureCompressionASTC_LDR; + VkBool32 textureCompressionBC; + VkBool32 occlusionQueryPrecise; + VkBool32 pipelineStatisticsQuery; + VkBool32 vertexPipelineStoresAndAtomics; + VkBool32 fragmentStoresAndAtomics; + VkBool32 shaderTessellationAndGeometryPointSize; + VkBool32 shaderImageGatherExtended; + VkBool32 shaderStorageImageExtendedFormats; + VkBool32 shaderStorageImageMultisample; + VkBool32 shaderStorageImageReadWithoutFormat; + VkBool32 shaderStorageImageWriteWithoutFormat; + VkBool32 shaderUniformBufferArrayDynamicIndexing; + VkBool32 shaderSampledImageArrayDynamicIndexing; + VkBool32 shaderStorageBufferArrayDynamicIndexing; + VkBool32 shaderStorageImageArrayDynamicIndexing; + VkBool32 shaderClipDistance; + VkBool32 shaderCullDistance; + VkBool32 shaderFloat64; + VkBool32 shaderInt64; + VkBool32 shaderInt16; + VkBool32 shaderResourceResidency; + VkBool32 shaderResourceMinLod; + VkBool32 sparseBinding; + VkBool32 sparseResidencyBuffer; + VkBool32 sparseResidencyImage2D; + VkBool32 sparseResidencyImage3D; + VkBool32 sparseResidency2Samples; + VkBool32 sparseResidency4Samples; + VkBool32 sparseResidency8Samples; + VkBool32 sparseResidency16Samples; + VkBool32 sparseResidencyAliased; + VkBool32 variableMultisampleRate; + VkBool32 inheritedQueries; +} VkPhysicalDeviceFeatures; + +typedef struct VkPhysicalDeviceLimits { + uint32_t maxImageDimension1D; + uint32_t maxImageDimension2D; + uint32_t maxImageDimension3D; + uint32_t maxImageDimensionCube; + uint32_t maxImageArrayLayers; + uint32_t maxTexelBufferElements; + uint32_t maxUniformBufferRange; + uint32_t maxStorageBufferRange; + uint32_t maxPushConstantsSize; + uint32_t maxMemoryAllocationCount; + uint32_t maxSamplerAllocationCount; + VkDeviceSize bufferImageGranularity; + VkDeviceSize sparseAddressSpaceSize; + uint32_t maxBoundDescriptorSets; + uint32_t maxPerStageDescriptorSamplers; + uint32_t maxPerStageDescriptorUniformBuffers; + uint32_t maxPerStageDescriptorStorageBuffers; + uint32_t maxPerStageDescriptorSampledImages; + uint32_t maxPerStageDescriptorStorageImages; + uint32_t maxPerStageDescriptorInputAttachments; + uint32_t maxPerStageResources; + uint32_t maxDescriptorSetSamplers; + uint32_t maxDescriptorSetUniformBuffers; + uint32_t maxDescriptorSetUniformBuffersDynamic; + uint32_t maxDescriptorSetStorageBuffers; + uint32_t maxDescriptorSetStorageBuffersDynamic; + uint32_t maxDescriptorSetSampledImages; + uint32_t maxDescriptorSetStorageImages; + uint32_t maxDescriptorSetInputAttachments; + uint32_t maxVertexInputAttributes; + uint32_t maxVertexInputBindings; + uint32_t maxVertexInputAttributeOffset; + uint32_t maxVertexInputBindingStride; + uint32_t maxVertexOutputComponents; + uint32_t maxTessellationGenerationLevel; + uint32_t maxTessellationPatchSize; + uint32_t maxTessellationControlPerVertexInputComponents; + uint32_t maxTessellationControlPerVertexOutputComponents; + uint32_t maxTessellationControlPerPatchOutputComponents; + uint32_t maxTessellationControlTotalOutputComponents; + uint32_t maxTessellationEvaluationInputComponents; + uint32_t maxTessellationEvaluationOutputComponents; + uint32_t maxGeometryShaderInvocations; + uint32_t maxGeometryInputComponents; + uint32_t maxGeometryOutputComponents; + uint32_t maxGeometryOutputVertices; + uint32_t maxGeometryTotalOutputComponents; + uint32_t maxFragmentInputComponents; + uint32_t maxFragmentOutputAttachments; + uint32_t maxFragmentDualSrcAttachments; + uint32_t maxFragmentCombinedOutputResources; + uint32_t maxComputeSharedMemorySize; + uint32_t maxComputeWorkGroupCount[3]; + uint32_t maxComputeWorkGroupInvocations; + uint32_t maxComputeWorkGroupSize[3]; + uint32_t subPixelPrecisionBits; + uint32_t subTexelPrecisionBits; + uint32_t mipmapPrecisionBits; + uint32_t maxDrawIndexedIndexValue; + uint32_t maxDrawIndirectCount; + float maxSamplerLodBias; + float maxSamplerAnisotropy; + uint32_t maxViewports; + uint32_t maxViewportDimensions[2]; + float viewportBoundsRange[2]; + uint32_t viewportSubPixelBits; + size_t minMemoryMapAlignment; + VkDeviceSize minTexelBufferOffsetAlignment; + VkDeviceSize minUniformBufferOffsetAlignment; + VkDeviceSize minStorageBufferOffsetAlignment; + int32_t minTexelOffset; + uint32_t maxTexelOffset; + int32_t minTexelGatherOffset; + uint32_t maxTexelGatherOffset; + float minInterpolationOffset; + float maxInterpolationOffset; + uint32_t subPixelInterpolationOffsetBits; + uint32_t maxFramebufferWidth; + uint32_t maxFramebufferHeight; + uint32_t maxFramebufferLayers; + VkSampleCountFlags framebufferColorSampleCounts; + VkSampleCountFlags framebufferDepthSampleCounts; + VkSampleCountFlags framebufferStencilSampleCounts; + VkSampleCountFlags framebufferNoAttachmentsSampleCounts; + uint32_t maxColorAttachments; + VkSampleCountFlags sampledImageColorSampleCounts; + VkSampleCountFlags sampledImageIntegerSampleCounts; + VkSampleCountFlags sampledImageDepthSampleCounts; + VkSampleCountFlags sampledImageStencilSampleCounts; + VkSampleCountFlags storageImageSampleCounts; + uint32_t maxSampleMaskWords; + VkBool32 timestampComputeAndGraphics; + float timestampPeriod; + uint32_t maxClipDistances; + uint32_t maxCullDistances; + uint32_t maxCombinedClipAndCullDistances; + uint32_t discreteQueuePriorities; + float pointSizeRange[2]; + float lineWidthRange[2]; + float pointSizeGranularity; + float lineWidthGranularity; + VkBool32 strictLines; + VkBool32 standardSampleLocations; + VkDeviceSize optimalBufferCopyOffsetAlignment; + VkDeviceSize optimalBufferCopyRowPitchAlignment; + VkDeviceSize nonCoherentAtomSize; +} VkPhysicalDeviceLimits; + +typedef struct VkPhysicalDeviceMemoryProperties { + uint32_t memoryTypeCount; + VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES]; + uint32_t memoryHeapCount; + VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS]; +} VkPhysicalDeviceMemoryProperties; + +typedef struct VkPhysicalDeviceSparseProperties { + VkBool32 residencyStandard2DBlockShape; + VkBool32 residencyStandard2DMultisampleBlockShape; + VkBool32 residencyStandard3DBlockShape; + VkBool32 residencyAlignedMipSize; + VkBool32 residencyNonResidentStrict; +} VkPhysicalDeviceSparseProperties; + +typedef struct VkPhysicalDeviceProperties { + uint32_t apiVersion; + uint32_t driverVersion; + uint32_t vendorID; + uint32_t deviceID; + VkPhysicalDeviceType deviceType; + char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; + uint8_t pipelineCacheUUID[VK_UUID_SIZE]; + VkPhysicalDeviceLimits limits; + VkPhysicalDeviceSparseProperties sparseProperties; +} VkPhysicalDeviceProperties; + +typedef struct VkQueueFamilyProperties { + VkQueueFlags queueFlags; + uint32_t queueCount; + uint32_t timestampValidBits; + VkExtent3D minImageTransferGranularity; +} VkQueueFamilyProperties; + +typedef struct VkDeviceQueueCreateInfo { + VkStructureType sType; + const void* pNext; + VkDeviceQueueCreateFlags flags; + uint32_t queueFamilyIndex; + uint32_t queueCount; + const float* pQueuePriorities; +} VkDeviceQueueCreateInfo; + +typedef struct VkDeviceCreateInfo { + VkStructureType sType; + const void* pNext; + VkDeviceCreateFlags flags; + uint32_t queueCreateInfoCount; + const VkDeviceQueueCreateInfo* pQueueCreateInfos; + // enabledLayerCount is legacy and should not be used + uint32_t enabledLayerCount; + // ppEnabledLayerNames is legacy and should not be used + const char* const* ppEnabledLayerNames; + uint32_t enabledExtensionCount; + const char* const* ppEnabledExtensionNames; + const VkPhysicalDeviceFeatures* pEnabledFeatures; +} VkDeviceCreateInfo; + +typedef struct VkExtensionProperties { + char extensionName[VK_MAX_EXTENSION_NAME_SIZE]; + uint32_t specVersion; +} VkExtensionProperties; + +typedef struct VkLayerProperties { + char layerName[VK_MAX_EXTENSION_NAME_SIZE]; + uint32_t specVersion; + uint32_t implementationVersion; + char description[VK_MAX_DESCRIPTION_SIZE]; +} VkLayerProperties; + +typedef struct VkSubmitInfo { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreCount; + const VkSemaphore* pWaitSemaphores; + const VkPipelineStageFlags* pWaitDstStageMask; + uint32_t commandBufferCount; + const VkCommandBuffer* pCommandBuffers; + uint32_t signalSemaphoreCount; + const VkSemaphore* pSignalSemaphores; +} VkSubmitInfo; + +typedef struct VkMappedMemoryRange { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkDeviceSize offset; + VkDeviceSize size; +} VkMappedMemoryRange; + +typedef struct VkMemoryAllocateInfo { + VkStructureType sType; + const void* pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeIndex; +} VkMemoryAllocateInfo; + +typedef struct VkMemoryRequirements { + VkDeviceSize size; + VkDeviceSize alignment; + uint32_t memoryTypeBits; +} VkMemoryRequirements; + +typedef struct VkSparseMemoryBind { + VkDeviceSize resourceOffset; + VkDeviceSize size; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkSparseMemoryBindFlags flags; +} VkSparseMemoryBind; + +typedef struct VkSparseBufferMemoryBindInfo { + VkBuffer buffer; + uint32_t bindCount; + const VkSparseMemoryBind* pBinds; +} VkSparseBufferMemoryBindInfo; + +typedef struct VkSparseImageOpaqueMemoryBindInfo { + VkImage image; + uint32_t bindCount; + const VkSparseMemoryBind* pBinds; +} VkSparseImageOpaqueMemoryBindInfo; + +typedef struct VkImageSubresource { + VkImageAspectFlags aspectMask; + uint32_t mipLevel; + uint32_t arrayLayer; +} VkImageSubresource; + +typedef struct VkSparseImageMemoryBind { + VkImageSubresource subresource; + VkOffset3D offset; + VkExtent3D extent; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkSparseMemoryBindFlags flags; +} VkSparseImageMemoryBind; + +typedef struct VkSparseImageMemoryBindInfo { + VkImage image; + uint32_t bindCount; + const VkSparseImageMemoryBind* pBinds; +} VkSparseImageMemoryBindInfo; + +typedef struct VkBindSparseInfo { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreCount; + const VkSemaphore* pWaitSemaphores; + uint32_t bufferBindCount; + const VkSparseBufferMemoryBindInfo* pBufferBinds; + uint32_t imageOpaqueBindCount; + const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds; + uint32_t imageBindCount; + const VkSparseImageMemoryBindInfo* pImageBinds; + uint32_t signalSemaphoreCount; + const VkSemaphore* pSignalSemaphores; +} VkBindSparseInfo; + +typedef struct VkSparseImageFormatProperties { + VkImageAspectFlags aspectMask; + VkExtent3D imageGranularity; + VkSparseImageFormatFlags flags; +} VkSparseImageFormatProperties; + +typedef struct VkSparseImageMemoryRequirements { + VkSparseImageFormatProperties formatProperties; + uint32_t imageMipTailFirstLod; + VkDeviceSize imageMipTailSize; + VkDeviceSize imageMipTailOffset; + VkDeviceSize imageMipTailStride; +} VkSparseImageMemoryRequirements; + +typedef struct VkFenceCreateInfo { + VkStructureType sType; + const void* pNext; + VkFenceCreateFlags flags; +} VkFenceCreateInfo; + +typedef struct VkSemaphoreCreateInfo { + VkStructureType sType; + const void* pNext; + VkSemaphoreCreateFlags flags; +} VkSemaphoreCreateInfo; + +typedef struct VkQueryPoolCreateInfo { + VkStructureType sType; + const void* pNext; + VkQueryPoolCreateFlags flags; + VkQueryType queryType; + uint32_t queryCount; + VkQueryPipelineStatisticFlags pipelineStatistics; +} VkQueryPoolCreateInfo; + +typedef struct VkBufferCreateInfo { + VkStructureType sType; + const void* pNext; + VkBufferCreateFlags flags; + VkDeviceSize size; + VkBufferUsageFlags usage; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; +} VkBufferCreateInfo; + +typedef struct VkImageCreateInfo { + VkStructureType sType; + const void* pNext; + VkImageCreateFlags flags; + VkImageType imageType; + VkFormat format; + VkExtent3D extent; + uint32_t mipLevels; + uint32_t arrayLayers; + VkSampleCountFlagBits samples; + VkImageTiling tiling; + VkImageUsageFlags usage; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; + VkImageLayout initialLayout; +} VkImageCreateInfo; + +typedef struct VkSubresourceLayout { + VkDeviceSize offset; + VkDeviceSize size; + VkDeviceSize rowPitch; + VkDeviceSize arrayPitch; + VkDeviceSize depthPitch; +} VkSubresourceLayout; + +typedef struct VkComponentMapping { + VkComponentSwizzle r; + VkComponentSwizzle g; + VkComponentSwizzle b; + VkComponentSwizzle a; +} VkComponentMapping; + +typedef struct VkImageViewCreateInfo { + VkStructureType sType; + const void* pNext; + VkImageViewCreateFlags flags; + VkImage image; + VkImageViewType viewType; + VkFormat format; + VkComponentMapping components; + VkImageSubresourceRange subresourceRange; +} VkImageViewCreateInfo; + +typedef struct VkCommandPoolCreateInfo { + VkStructureType sType; + const void* pNext; + VkCommandPoolCreateFlags flags; + uint32_t queueFamilyIndex; +} VkCommandPoolCreateInfo; + +typedef struct VkCommandBufferAllocateInfo { + VkStructureType sType; + const void* pNext; + VkCommandPool commandPool; + VkCommandBufferLevel level; + uint32_t commandBufferCount; +} VkCommandBufferAllocateInfo; + +typedef struct VkCommandBufferInheritanceInfo { + VkStructureType sType; + const void* pNext; + VkRenderPass renderPass; + uint32_t subpass; + VkFramebuffer framebuffer; + VkBool32 occlusionQueryEnable; + VkQueryControlFlags queryFlags; + VkQueryPipelineStatisticFlags pipelineStatistics; +} VkCommandBufferInheritanceInfo; + +typedef struct VkCommandBufferBeginInfo { + VkStructureType sType; + const void* pNext; + VkCommandBufferUsageFlags flags; + const VkCommandBufferInheritanceInfo* pInheritanceInfo; +} VkCommandBufferBeginInfo; + +typedef struct VkBufferCopy { + VkDeviceSize srcOffset; + VkDeviceSize dstOffset; + VkDeviceSize size; +} VkBufferCopy; + +typedef struct VkImageSubresourceLayers { + VkImageAspectFlags aspectMask; + uint32_t mipLevel; + uint32_t baseArrayLayer; + uint32_t layerCount; +} VkImageSubresourceLayers; + +typedef struct VkBufferImageCopy { + VkDeviceSize bufferOffset; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkBufferImageCopy; + +typedef struct VkImageCopy { + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageCopy; + +typedef struct VkDispatchIndirectCommand { + uint32_t x; + uint32_t y; + uint32_t z; +} VkDispatchIndirectCommand; + +typedef struct VkPipelineCacheHeaderVersionOne { + uint32_t headerSize; + VkPipelineCacheHeaderVersion headerVersion; + uint32_t vendorID; + uint32_t deviceID; + uint8_t pipelineCacheUUID[VK_UUID_SIZE]; +} VkPipelineCacheHeaderVersionOne; + +typedef struct VkEventCreateInfo { + VkStructureType sType; + const void* pNext; + VkEventCreateFlags flags; +} VkEventCreateInfo; + +typedef struct VkBufferViewCreateInfo { + VkStructureType sType; + const void* pNext; + VkBufferViewCreateFlags flags; + VkBuffer buffer; + VkFormat format; + VkDeviceSize offset; + VkDeviceSize range; +} VkBufferViewCreateInfo; + +typedef struct VkShaderModuleCreateInfo { + VkStructureType sType; + const void* pNext; + VkShaderModuleCreateFlags flags; + size_t codeSize; + const uint32_t* pCode; +} VkShaderModuleCreateInfo; + +typedef struct VkPipelineCacheCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCacheCreateFlags flags; + size_t initialDataSize; + const void* pInitialData; +} VkPipelineCacheCreateInfo; + +typedef struct VkSpecializationMapEntry { + uint32_t constantID; + uint32_t offset; + size_t size; +} VkSpecializationMapEntry; + +typedef struct VkSpecializationInfo { + uint32_t mapEntryCount; + const VkSpecializationMapEntry* pMapEntries; + size_t dataSize; + const void* pData; +} VkSpecializationInfo; + +typedef struct VkPipelineShaderStageCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineShaderStageCreateFlags flags; + VkShaderStageFlagBits stage; + VkShaderModule module; + const char* pName; + const VkSpecializationInfo* pSpecializationInfo; +} VkPipelineShaderStageCreateInfo; + +typedef struct VkComputePipelineCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + VkPipelineShaderStageCreateInfo stage; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkComputePipelineCreateInfo; + +typedef struct VkPushConstantRange { + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; +} VkPushConstantRange; + +typedef struct VkPipelineLayoutCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineLayoutCreateFlags flags; + uint32_t setLayoutCount; + const VkDescriptorSetLayout* pSetLayouts; + uint32_t pushConstantRangeCount; + const VkPushConstantRange* pPushConstantRanges; +} VkPipelineLayoutCreateInfo; + +typedef struct VkSamplerCreateInfo { + VkStructureType sType; + const void* pNext; + VkSamplerCreateFlags flags; + VkFilter magFilter; + VkFilter minFilter; + VkSamplerMipmapMode mipmapMode; + VkSamplerAddressMode addressModeU; + VkSamplerAddressMode addressModeV; + VkSamplerAddressMode addressModeW; + float mipLodBias; + VkBool32 anisotropyEnable; + float maxAnisotropy; + VkBool32 compareEnable; + VkCompareOp compareOp; + float minLod; + float maxLod; + VkBorderColor borderColor; + VkBool32 unnormalizedCoordinates; +} VkSamplerCreateInfo; + +typedef struct VkCopyDescriptorSet { + VkStructureType sType; + const void* pNext; + VkDescriptorSet srcSet; + uint32_t srcBinding; + uint32_t srcArrayElement; + VkDescriptorSet dstSet; + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; +} VkCopyDescriptorSet; + +typedef struct VkDescriptorBufferInfo { + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize range; +} VkDescriptorBufferInfo; + +typedef struct VkDescriptorImageInfo { + VkSampler sampler; + VkImageView imageView; + VkImageLayout imageLayout; +} VkDescriptorImageInfo; + +typedef struct VkDescriptorPoolSize { + VkDescriptorType type; + uint32_t descriptorCount; +} VkDescriptorPoolSize; + +typedef struct VkDescriptorPoolCreateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorPoolCreateFlags flags; + uint32_t maxSets; + uint32_t poolSizeCount; + const VkDescriptorPoolSize* pPoolSizes; +} VkDescriptorPoolCreateInfo; + +typedef struct VkDescriptorSetAllocateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorPool descriptorPool; + uint32_t descriptorSetCount; + const VkDescriptorSetLayout* pSetLayouts; +} VkDescriptorSetAllocateInfo; + +typedef struct VkDescriptorSetLayoutBinding { + uint32_t binding; + VkDescriptorType descriptorType; + uint32_t descriptorCount; + VkShaderStageFlags stageFlags; + const VkSampler* pImmutableSamplers; +} VkDescriptorSetLayoutBinding; + +typedef struct VkDescriptorSetLayoutCreateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorSetLayoutCreateFlags flags; + uint32_t bindingCount; + const VkDescriptorSetLayoutBinding* pBindings; +} VkDescriptorSetLayoutCreateInfo; + +typedef struct VkWriteDescriptorSet { + VkStructureType sType; + const void* pNext; + VkDescriptorSet dstSet; + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; + VkDescriptorType descriptorType; + const VkDescriptorImageInfo* pImageInfo; + const VkDescriptorBufferInfo* pBufferInfo; + const VkBufferView* pTexelBufferView; +} VkWriteDescriptorSet; + +typedef union VkClearColorValue { + float float32[4]; + int32_t int32[4]; + uint32_t uint32[4]; +} VkClearColorValue; + +typedef struct VkDrawIndexedIndirectCommand { + uint32_t indexCount; + uint32_t instanceCount; + uint32_t firstIndex; + int32_t vertexOffset; + uint32_t firstInstance; +} VkDrawIndexedIndirectCommand; + +typedef struct VkDrawIndirectCommand { + uint32_t vertexCount; + uint32_t instanceCount; + uint32_t firstVertex; + uint32_t firstInstance; +} VkDrawIndirectCommand; + +typedef struct VkVertexInputBindingDescription { + uint32_t binding; + uint32_t stride; + VkVertexInputRate inputRate; +} VkVertexInputBindingDescription; + +typedef struct VkVertexInputAttributeDescription { + uint32_t location; + uint32_t binding; + VkFormat format; + uint32_t offset; +} VkVertexInputAttributeDescription; + +typedef struct VkPipelineVertexInputStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineVertexInputStateCreateFlags flags; + uint32_t vertexBindingDescriptionCount; + const VkVertexInputBindingDescription* pVertexBindingDescriptions; + uint32_t vertexAttributeDescriptionCount; + const VkVertexInputAttributeDescription* pVertexAttributeDescriptions; +} VkPipelineVertexInputStateCreateInfo; + +typedef struct VkPipelineInputAssemblyStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineInputAssemblyStateCreateFlags flags; + VkPrimitiveTopology topology; + VkBool32 primitiveRestartEnable; +} VkPipelineInputAssemblyStateCreateInfo; + +typedef struct VkPipelineTessellationStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineTessellationStateCreateFlags flags; + uint32_t patchControlPoints; +} VkPipelineTessellationStateCreateInfo; + +typedef struct VkViewport { + float x; + float y; + float width; + float height; + float minDepth; + float maxDepth; +} VkViewport; + +typedef struct VkPipelineViewportStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineViewportStateCreateFlags flags; + uint32_t viewportCount; + const VkViewport* pViewports; + uint32_t scissorCount; + const VkRect2D* pScissors; +} VkPipelineViewportStateCreateInfo; + +typedef struct VkPipelineRasterizationStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineRasterizationStateCreateFlags flags; + VkBool32 depthClampEnable; + VkBool32 rasterizerDiscardEnable; + VkPolygonMode polygonMode; + VkCullModeFlags cullMode; + VkFrontFace frontFace; + VkBool32 depthBiasEnable; + float depthBiasConstantFactor; + float depthBiasClamp; + float depthBiasSlopeFactor; + float lineWidth; +} VkPipelineRasterizationStateCreateInfo; + +typedef struct VkPipelineMultisampleStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineMultisampleStateCreateFlags flags; + VkSampleCountFlagBits rasterizationSamples; + VkBool32 sampleShadingEnable; + float minSampleShading; + const VkSampleMask* pSampleMask; + VkBool32 alphaToCoverageEnable; + VkBool32 alphaToOneEnable; +} VkPipelineMultisampleStateCreateInfo; + +typedef struct VkStencilOpState { + VkStencilOp failOp; + VkStencilOp passOp; + VkStencilOp depthFailOp; + VkCompareOp compareOp; + uint32_t compareMask; + uint32_t writeMask; + uint32_t reference; +} VkStencilOpState; + +typedef struct VkPipelineDepthStencilStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineDepthStencilStateCreateFlags flags; + VkBool32 depthTestEnable; + VkBool32 depthWriteEnable; + VkCompareOp depthCompareOp; + VkBool32 depthBoundsTestEnable; + VkBool32 stencilTestEnable; + VkStencilOpState front; + VkStencilOpState back; + float minDepthBounds; + float maxDepthBounds; +} VkPipelineDepthStencilStateCreateInfo; + +typedef struct VkPipelineColorBlendAttachmentState { + VkBool32 blendEnable; + VkBlendFactor srcColorBlendFactor; + VkBlendFactor dstColorBlendFactor; + VkBlendOp colorBlendOp; + VkBlendFactor srcAlphaBlendFactor; + VkBlendFactor dstAlphaBlendFactor; + VkBlendOp alphaBlendOp; + VkColorComponentFlags colorWriteMask; +} VkPipelineColorBlendAttachmentState; + +typedef struct VkPipelineColorBlendStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineColorBlendStateCreateFlags flags; + VkBool32 logicOpEnable; + VkLogicOp logicOp; + uint32_t attachmentCount; + const VkPipelineColorBlendAttachmentState* pAttachments; + float blendConstants[4]; +} VkPipelineColorBlendStateCreateInfo; + +typedef struct VkPipelineDynamicStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineDynamicStateCreateFlags flags; + uint32_t dynamicStateCount; + const VkDynamicState* pDynamicStates; +} VkPipelineDynamicStateCreateInfo; + +typedef struct VkGraphicsPipelineCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + const VkPipelineVertexInputStateCreateInfo* pVertexInputState; + const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState; + const VkPipelineTessellationStateCreateInfo* pTessellationState; + const VkPipelineViewportStateCreateInfo* pViewportState; + const VkPipelineRasterizationStateCreateInfo* pRasterizationState; + const VkPipelineMultisampleStateCreateInfo* pMultisampleState; + const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState; + const VkPipelineColorBlendStateCreateInfo* pColorBlendState; + const VkPipelineDynamicStateCreateInfo* pDynamicState; + VkPipelineLayout layout; + VkRenderPass renderPass; + uint32_t subpass; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkGraphicsPipelineCreateInfo; + +typedef struct VkAttachmentDescription { + VkAttachmentDescriptionFlags flags; + VkFormat format; + VkSampleCountFlagBits samples; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkAttachmentLoadOp stencilLoadOp; + VkAttachmentStoreOp stencilStoreOp; + VkImageLayout initialLayout; + VkImageLayout finalLayout; +} VkAttachmentDescription; + +typedef struct VkAttachmentReference { + uint32_t attachment; + VkImageLayout layout; +} VkAttachmentReference; + +typedef struct VkFramebufferCreateInfo { + VkStructureType sType; + const void* pNext; + VkFramebufferCreateFlags flags; + VkRenderPass renderPass; + uint32_t attachmentCount; + const VkImageView* pAttachments; + uint32_t width; + uint32_t height; + uint32_t layers; +} VkFramebufferCreateInfo; + +typedef struct VkSubpassDescription { + VkSubpassDescriptionFlags flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t inputAttachmentCount; + const VkAttachmentReference* pInputAttachments; + uint32_t colorAttachmentCount; + const VkAttachmentReference* pColorAttachments; + const VkAttachmentReference* pResolveAttachments; + const VkAttachmentReference* pDepthStencilAttachment; + uint32_t preserveAttachmentCount; + const uint32_t* pPreserveAttachments; +} VkSubpassDescription; + +typedef struct VkSubpassDependency { + uint32_t srcSubpass; + uint32_t dstSubpass; + VkPipelineStageFlags srcStageMask; + VkPipelineStageFlags dstStageMask; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + VkDependencyFlags dependencyFlags; +} VkSubpassDependency; + +typedef struct VkRenderPassCreateInfo { + VkStructureType sType; + const void* pNext; + VkRenderPassCreateFlags flags; + uint32_t attachmentCount; + const VkAttachmentDescription* pAttachments; + uint32_t subpassCount; + const VkSubpassDescription* pSubpasses; + uint32_t dependencyCount; + const VkSubpassDependency* pDependencies; +} VkRenderPassCreateInfo; + +typedef struct VkClearDepthStencilValue { + float depth; + uint32_t stencil; +} VkClearDepthStencilValue; + +typedef union VkClearValue { + VkClearColorValue color; + VkClearDepthStencilValue depthStencil; +} VkClearValue; + +typedef struct VkClearAttachment { + VkImageAspectFlags aspectMask; + uint32_t colorAttachment; + VkClearValue clearValue; +} VkClearAttachment; + +typedef struct VkClearRect { + VkRect2D rect; + uint32_t baseArrayLayer; + uint32_t layerCount; +} VkClearRect; + +typedef struct VkImageBlit { + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffsets[2]; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffsets[2]; +} VkImageBlit; + +typedef struct VkImageResolve { + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageResolve; + +typedef struct VkRenderPassBeginInfo { + VkStructureType sType; + const void* pNext; + VkRenderPass renderPass; + VkFramebuffer framebuffer; + VkRect2D renderArea; + uint32_t clearValueCount; + const VkClearValue* pClearValues; +} VkRenderPassBeginInfo; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); +typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice); +typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties); +typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); +typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue); +typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device); +typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory); +typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData); +typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory); +typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); +typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); +typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes); +typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); +typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); +typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); +typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); +typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences); +typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence); +typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); +typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore); +typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool); +typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags); +typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer); +typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage); +typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout); +typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView); +typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool); +typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); +typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); +typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); +typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer); +typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions); +typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data); +typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); +typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); +typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query); +typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query); +typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags); +typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent); +typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event); +typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event); +typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event); +typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView); +typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule); +typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache); +typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches); +typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout); +typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler); +typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout); +typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool); +typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); +typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets); +typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); +typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies); +typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); +typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); +typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); +typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); +typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues); +typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer); +typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); +typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports); +typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors); +typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor); +typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference); +typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType); +typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter); +typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); +typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects); +typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions); +typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents); +typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents); +typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( + const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance); + +VKAPI_ATTR void VKAPI_CALL vkDestroyInstance( + VkInstance instance, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices( + VkInstance instance, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures* pFeatures); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties* pFormatProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkImageFormatProperties* pImageFormatProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties* pProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties* pQueueFamilyProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties* pMemoryProperties); + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr( + VkInstance instance, + const char* pName); + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr( + VkDevice device, + const char* pName); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice( + VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDevice( + VkDevice device, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties( + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties( + VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties( + uint32_t* pPropertyCount, + VkLayerProperties* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue( + VkDevice device, + uint32_t queueFamilyIndex, + uint32_t queueIndex, + VkQueue* pQueue); + +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo* pSubmits, + VkFence fence); + +VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle( + VkQueue queue); + +VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle( + VkDevice device); + +VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory( + VkDevice device, + const VkMemoryAllocateInfo* pAllocateInfo, + const VkAllocationCallbacks* pAllocator, + VkDeviceMemory* pMemory); + +VKAPI_ATTR void VKAPI_CALL vkFreeMemory( + VkDevice device, + VkDeviceMemory memory, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory( + VkDevice device, + VkDeviceMemory memory, + VkDeviceSize offset, + VkDeviceSize size, + VkMemoryMapFlags flags, + void** ppData); + +VKAPI_ATTR void VKAPI_CALL vkUnmapMemory( + VkDevice device, + VkDeviceMemory memory); + +VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges( + VkDevice device, + uint32_t memoryRangeCount, + const VkMappedMemoryRange* pMemoryRanges); + +VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges( + VkDevice device, + uint32_t memoryRangeCount, + const VkMappedMemoryRange* pMemoryRanges); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment( + VkDevice device, + VkDeviceMemory memory, + VkDeviceSize* pCommittedMemoryInBytes); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory( + VkDevice device, + VkBuffer buffer, + VkDeviceMemory memory, + VkDeviceSize memoryOffset); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory( + VkDevice device, + VkImage image, + VkDeviceMemory memory, + VkDeviceSize memoryOffset); + +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements( + VkDevice device, + VkBuffer buffer, + VkMemoryRequirements* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements( + VkDevice device, + VkImage image, + VkMemoryRequirements* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements( + VkDevice device, + VkImage image, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements* pSparseMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkSampleCountFlagBits samples, + VkImageUsageFlags usage, + VkImageTiling tiling, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse( + VkQueue queue, + uint32_t bindInfoCount, + const VkBindSparseInfo* pBindInfo, + VkFence fence); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence( + VkDevice device, + const VkFenceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence); + +VKAPI_ATTR void VKAPI_CALL vkDestroyFence( + VkDevice device, + VkFence fence, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetFences( + VkDevice device, + uint32_t fenceCount, + const VkFence* pFences); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus( + VkDevice device, + VkFence fence); + +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences( + VkDevice device, + uint32_t fenceCount, + const VkFence* pFences, + VkBool32 waitAll, + uint64_t timeout); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore( + VkDevice device, + const VkSemaphoreCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSemaphore* pSemaphore); + +VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore( + VkDevice device, + VkSemaphore semaphore, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( + VkDevice device, + const VkQueryPoolCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkQueryPool* pQueryPool); + +VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool( + VkDevice device, + VkQueryPool queryPool, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + void* pData, + VkDeviceSize stride, + VkQueryResultFlags flags); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer( + VkDevice device, + const VkBufferCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBuffer* pBuffer); + +VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( + VkDevice device, + VkBuffer buffer, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( + VkDevice device, + const VkImageCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkImage* pImage); + +VKAPI_ATTR void VKAPI_CALL vkDestroyImage( + VkDevice device, + VkImage image, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( + VkDevice device, + VkImage image, + const VkImageSubresource* pSubresource, + VkSubresourceLayout* pLayout); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView( + VkDevice device, + const VkImageViewCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkImageView* pView); + +VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( + VkDevice device, + VkImageView imageView, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( + VkDevice device, + const VkCommandPoolCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCommandPool* pCommandPool); + +VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( + VkDevice device, + VkCommandPool commandPool, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolResetFlags flags); + +VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( + VkDevice device, + const VkCommandBufferAllocateInfo* pAllocateInfo, + VkCommandBuffer* pCommandBuffers); + +VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( + VkDevice device, + VkCommandPool commandPool, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers); + +VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( + VkCommandBuffer commandBuffer, + const VkCommandBufferBeginInfo* pBeginInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( + VkCommandBuffer commandBuffer); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( + VkCommandBuffer commandBuffer, + VkCommandBufferResetFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( + VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( + VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkBufferImageCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferImageCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + const void* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data); + +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); + +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, + uint32_t query); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( + VkCommandBuffer commandBuffer, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( + VkDevice device, + const VkEventCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkEvent* pEvent); + +VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( + VkDevice device, + VkEvent event, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( + VkDevice device, + VkEvent event); + +VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( + VkDevice device, + VkEvent event); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( + VkDevice device, + VkEvent event); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( + VkDevice device, + const VkBufferViewCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBufferView* pView); + +VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( + VkDevice device, + VkBufferView bufferView, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkShaderModule* pShaderModule); + +VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( + VkDevice device, + VkShaderModule shaderModule, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache( + VkDevice device, + const VkPipelineCacheCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPipelineCache* pPipelineCache); + +VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache( + VkDevice device, + VkPipelineCache pipelineCache, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData( + VkDevice device, + VkPipelineCache pipelineCache, + size_t* pDataSize, + void* pData); + +VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches( + VkDevice device, + VkPipelineCache dstCache, + uint32_t srcCacheCount, + const VkPipelineCache* pSrcCaches); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkComputePipelineCreateInfo* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); + +VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline( + VkDevice device, + VkPipeline pipeline, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout( + VkDevice device, + const VkPipelineLayoutCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPipelineLayout* pPipelineLayout); + +VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout( + VkDevice device, + VkPipelineLayout pipelineLayout, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler( + VkDevice device, + const VkSamplerCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSampler* pSampler); + +VKAPI_ATTR void VKAPI_CALL vkDestroySampler( + VkDevice device, + VkSampler sampler, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorSetLayout* pSetLayout); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout( + VkDevice device, + VkDescriptorSetLayout descriptorSetLayout, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool( + VkDevice device, + const VkDescriptorPoolCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorPool* pDescriptorPool); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool( + VkDevice device, + VkDescriptorPool descriptorPool, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool( + VkDevice device, + VkDescriptorPool descriptorPool, + VkDescriptorPoolResetFlags flags); + +VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets( + VkDevice device, + const VkDescriptorSetAllocateInfo* pAllocateInfo, + VkDescriptorSet* pDescriptorSets); + +VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets( + VkDevice device, + VkDescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const VkDescriptorSet* pDescriptorSets); + +VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets( + VkDevice device, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites, + uint32_t descriptorCopyCount, + const VkCopyDescriptorSet* pDescriptorCopies); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + const VkDescriptorSet* pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t* pDynamicOffsets); + +VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( + VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearColorValue* pColor, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( + VkCommandBuffer commandBuffer, + VkPipelineLayout layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void* pValues); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkGraphicsPipelineCreateInfo* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( + VkDevice device, + const VkFramebufferCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkFramebuffer* pFramebuffer); + +VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer( + VkDevice device, + VkFramebuffer framebuffer, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( + VkDevice device, + const VkRenderPassCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass); + +VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( + VkDevice device, + VkRenderPass renderPass, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( + VkDevice device, + VkRenderPass renderPass, + VkExtent2D* pGranularity); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewport* pViewports); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor( + VkCommandBuffer commandBuffer, + uint32_t firstScissor, + uint32_t scissorCount, + const VkRect2D* pScissors); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth( + VkCommandBuffer commandBuffer, + float lineWidth); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias( + VkCommandBuffer commandBuffer, + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants( + VkCommandBuffer commandBuffer, + const float blendConstants[4]); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds( + VkCommandBuffer commandBuffer, + float minDepthBounds, + float maxDepthBounds); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t compareMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t writeMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t reference); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkIndexType indexType); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets); + +VKAPI_ATTR void VKAPI_CALL vkCmdDraw( + VkCommandBuffer commandBuffer, + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance); + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed( + VkCommandBuffer commandBuffer, + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance); + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride); + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride); + +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageBlit* pRegions, + VkFilter filter); + +VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( + VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearDepthStencilValue* pDepthStencil, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges); + +VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments( + VkCommandBuffer commandBuffer, + uint32_t attachmentCount, + const VkClearAttachment* pAttachments, + uint32_t rectCount, + const VkClearRect* pRects); + +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageResolve* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + VkSubpassContents contents); + +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( + VkCommandBuffer commandBuffer, + VkSubpassContents contents); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( + VkCommandBuffer commandBuffer); +#endif + + +// VK_VERSION_1_1 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_1 1 +// Vulkan 1.1 version number +#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0 + +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) +#define VK_MAX_DEVICE_GROUP_SIZE 32U +#define VK_LUID_SIZE 8U +#define VK_QUEUE_FAMILY_EXTERNAL (~1U) + +typedef enum VkDescriptorUpdateTemplateType { + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS = 1, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorUpdateTemplateType; + +typedef enum VkSamplerYcbcrModelConversion { + VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF +} VkSamplerYcbcrModelConversion; + +typedef enum VkSamplerYcbcrRange { + VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1, + VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, + VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerYcbcrRange; + +typedef enum VkChromaLocation { + VK_CHROMA_LOCATION_COSITED_EVEN = 0, + VK_CHROMA_LOCATION_MIDPOINT = 1, + VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN, + VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT, + VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF +} VkChromaLocation; + +typedef enum VkPointClippingBehavior { + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1, + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY, + VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPointClippingBehavior; + +typedef enum VkTessellationDomainOrigin { + VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0, + VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1, + VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, + VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT, + VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF +} VkTessellationDomainOrigin; + +typedef enum VkPeerMemoryFeatureFlagBits { + VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001, + VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002, + VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004, + VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008, + VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, + VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, + VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, + VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT, + VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPeerMemoryFeatureFlagBits; +typedef VkFlags VkPeerMemoryFeatureFlags; + +typedef enum VkMemoryAllocateFlagBits { + VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004, + VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT = 0x00000008, + VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryAllocateFlagBits; +typedef VkFlags VkMemoryAllocateFlags; +typedef VkFlags VkCommandPoolTrimFlags; + +typedef enum VkExternalMemoryHandleTypeFlagBits { + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS = 0x00008000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX = 0x00004000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT = 0x00010000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT = 0x00020000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT = 0x00040000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalMemoryHandleTypeFlagBits; +typedef VkFlags VkExternalMemoryHandleTypeFlags; + +typedef enum VkExternalMemoryFeatureFlagBits { + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004, + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT, + VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalMemoryFeatureFlagBits; +typedef VkFlags VkExternalMemoryFeatureFlags; + +typedef enum VkExternalFenceHandleTypeFlagBits { + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalFenceHandleTypeFlagBits; +typedef VkFlags VkExternalFenceHandleTypeFlags; + +typedef enum VkExternalFenceFeatureFlagBits { + VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001, + VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002, + VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT, + VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalFenceFeatureFlagBits; +typedef VkFlags VkExternalFenceFeatureFlags; + +typedef enum VkFenceImportFlagBits { + VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001, + VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT, + VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFenceImportFlagBits; +typedef VkFlags VkFenceImportFlags; + +typedef enum VkSemaphoreImportFlagBits { + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001, + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, + VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSemaphoreImportFlagBits; +typedef VkFlags VkSemaphoreImportFlags; + +typedef enum VkExternalSemaphoreHandleTypeFlagBits { + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalSemaphoreHandleTypeFlagBits; +typedef VkFlags VkExternalSemaphoreHandleTypeFlags; + +typedef enum VkExternalSemaphoreFeatureFlagBits { + VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001, + VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002, + VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT, + VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkExternalSemaphoreFeatureFlagBits; +typedef VkFlags VkExternalSemaphoreFeatureFlags; + +typedef enum VkSubgroupFeatureFlagBits { + VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001, + VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002, + VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004, + VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008, + VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010, + VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020, + VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040, + VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080, + VK_SUBGROUP_FEATURE_ROTATE_BIT = 0x00000200, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT = 0x00000400, + VK_SUBGROUP_FEATURE_PARTITIONED_BIT_EXT = 0x00000100, + VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = VK_SUBGROUP_FEATURE_PARTITIONED_BIT_EXT, + VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_BIT, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT, + VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubgroupFeatureFlagBits; +typedef VkFlags VkSubgroupFeatureFlags; +typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; +typedef struct VkBindBufferMemoryInfo { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindBufferMemoryInfo; + +typedef struct VkBindImageMemoryInfo { + VkStructureType sType; + const void* pNext; + VkImage image; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindImageMemoryInfo; + +typedef struct VkMemoryDedicatedRequirements { + VkStructureType sType; + void* pNext; + VkBool32 prefersDedicatedAllocation; + VkBool32 requiresDedicatedAllocation; +} VkMemoryDedicatedRequirements; + +typedef struct VkMemoryDedicatedAllocateInfo { + VkStructureType sType; + const void* pNext; + VkImage image; + VkBuffer buffer; +} VkMemoryDedicatedAllocateInfo; + +typedef struct VkMemoryAllocateFlagsInfo { + VkStructureType sType; + const void* pNext; + VkMemoryAllocateFlags flags; + uint32_t deviceMask; +} VkMemoryAllocateFlagsInfo; + +typedef struct VkDeviceGroupCommandBufferBeginInfo { + VkStructureType sType; + const void* pNext; + uint32_t deviceMask; +} VkDeviceGroupCommandBufferBeginInfo; + +typedef struct VkDeviceGroupSubmitInfo { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreCount; + const uint32_t* pWaitSemaphoreDeviceIndices; + uint32_t commandBufferCount; + const uint32_t* pCommandBufferDeviceMasks; + uint32_t signalSemaphoreCount; + const uint32_t* pSignalSemaphoreDeviceIndices; +} VkDeviceGroupSubmitInfo; + +typedef struct VkDeviceGroupBindSparseInfo { + VkStructureType sType; + const void* pNext; + uint32_t resourceDeviceIndex; + uint32_t memoryDeviceIndex; +} VkDeviceGroupBindSparseInfo; + +typedef struct VkBindBufferMemoryDeviceGroupInfo { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndexCount; + const uint32_t* pDeviceIndices; +} VkBindBufferMemoryDeviceGroupInfo; + +typedef struct VkBindImageMemoryDeviceGroupInfo { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndexCount; + const uint32_t* pDeviceIndices; + uint32_t splitInstanceBindRegionCount; + const VkRect2D* pSplitInstanceBindRegions; +} VkBindImageMemoryDeviceGroupInfo; + +typedef struct VkPhysicalDeviceGroupProperties { + VkStructureType sType; + void* pNext; + uint32_t physicalDeviceCount; + VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE]; + VkBool32 subsetAllocation; +} VkPhysicalDeviceGroupProperties; + +typedef struct VkDeviceGroupDeviceCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t physicalDeviceCount; + const VkPhysicalDevice* pPhysicalDevices; +} VkDeviceGroupDeviceCreateInfo; + +typedef struct VkBufferMemoryRequirementsInfo2 { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkBufferMemoryRequirementsInfo2; + +typedef struct VkImageMemoryRequirementsInfo2 { + VkStructureType sType; + const void* pNext; + VkImage image; +} VkImageMemoryRequirementsInfo2; + +typedef struct VkImageSparseMemoryRequirementsInfo2 { + VkStructureType sType; + const void* pNext; + VkImage image; +} VkImageSparseMemoryRequirementsInfo2; + +typedef struct VkMemoryRequirements2 { + VkStructureType sType; + void* pNext; + VkMemoryRequirements memoryRequirements; +} VkMemoryRequirements2; + +typedef struct VkSparseImageMemoryRequirements2 { + VkStructureType sType; + void* pNext; + VkSparseImageMemoryRequirements memoryRequirements; +} VkSparseImageMemoryRequirements2; + +typedef struct VkPhysicalDeviceFeatures2 { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceFeatures features; +} VkPhysicalDeviceFeatures2; + +typedef struct VkPhysicalDeviceProperties2 { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceProperties properties; +} VkPhysicalDeviceProperties2; + +typedef struct VkFormatProperties2 { + VkStructureType sType; + void* pNext; + VkFormatProperties formatProperties; +} VkFormatProperties2; + +typedef struct VkImageFormatProperties2 { + VkStructureType sType; + void* pNext; + VkImageFormatProperties imageFormatProperties; +} VkImageFormatProperties2; + +typedef struct VkPhysicalDeviceImageFormatInfo2 { + VkStructureType sType; + const void* pNext; + VkFormat format; + VkImageType type; + VkImageTiling tiling; + VkImageUsageFlags usage; + VkImageCreateFlags flags; +} VkPhysicalDeviceImageFormatInfo2; + +typedef struct VkQueueFamilyProperties2 { + VkStructureType sType; + void* pNext; + VkQueueFamilyProperties queueFamilyProperties; +} VkQueueFamilyProperties2; + +typedef struct VkPhysicalDeviceMemoryProperties2 { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceMemoryProperties memoryProperties; +} VkPhysicalDeviceMemoryProperties2; + +typedef struct VkSparseImageFormatProperties2 { + VkStructureType sType; + void* pNext; + VkSparseImageFormatProperties properties; +} VkSparseImageFormatProperties2; + +typedef struct VkPhysicalDeviceSparseImageFormatInfo2 { + VkStructureType sType; + const void* pNext; + VkFormat format; + VkImageType type; + VkSampleCountFlagBits samples; + VkImageUsageFlags usage; + VkImageTiling tiling; +} VkPhysicalDeviceSparseImageFormatInfo2; + +typedef struct VkImageViewUsageCreateInfo { + VkStructureType sType; + const void* pNext; + VkImageUsageFlags usage; +} VkImageViewUsageCreateInfo; + +typedef struct VkPhysicalDeviceProtectedMemoryFeatures { + VkStructureType sType; + void* pNext; + VkBool32 protectedMemory; +} VkPhysicalDeviceProtectedMemoryFeatures; + +typedef struct VkPhysicalDeviceProtectedMemoryProperties { + VkStructureType sType; + void* pNext; + VkBool32 protectedNoFault; +} VkPhysicalDeviceProtectedMemoryProperties; + +typedef struct VkDeviceQueueInfo2 { + VkStructureType sType; + const void* pNext; + VkDeviceQueueCreateFlags flags; + uint32_t queueFamilyIndex; + uint32_t queueIndex; +} VkDeviceQueueInfo2; + +typedef struct VkProtectedSubmitInfo { + VkStructureType sType; + const void* pNext; + VkBool32 protectedSubmit; +} VkProtectedSubmitInfo; + +typedef struct VkBindImagePlaneMemoryInfo { + VkStructureType sType; + const void* pNext; + VkImageAspectFlagBits planeAspect; +} VkBindImagePlaneMemoryInfo; + +typedef struct VkImagePlaneMemoryRequirementsInfo { + VkStructureType sType; + const void* pNext; + VkImageAspectFlagBits planeAspect; +} VkImagePlaneMemoryRequirementsInfo; + +typedef struct VkExternalMemoryProperties { + VkExternalMemoryFeatureFlags externalMemoryFeatures; + VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes; + VkExternalMemoryHandleTypeFlags compatibleHandleTypes; +} VkExternalMemoryProperties; + +typedef struct VkPhysicalDeviceExternalImageFormatInfo { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalImageFormatInfo; + +typedef struct VkExternalImageFormatProperties { + VkStructureType sType; + void* pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalImageFormatProperties; + +typedef struct VkPhysicalDeviceExternalBufferInfo { + VkStructureType sType; + const void* pNext; + VkBufferCreateFlags flags; + VkBufferUsageFlags usage; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalBufferInfo; + +typedef struct VkExternalBufferProperties { + VkStructureType sType; + void* pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalBufferProperties; + +typedef struct VkPhysicalDeviceIDProperties { + VkStructureType sType; + void* pNext; + uint8_t deviceUUID[VK_UUID_SIZE]; + uint8_t driverUUID[VK_UUID_SIZE]; + uint8_t deviceLUID[VK_LUID_SIZE]; + uint32_t deviceNodeMask; + VkBool32 deviceLUIDValid; +} VkPhysicalDeviceIDProperties; + +typedef struct VkExternalMemoryImageCreateInfo { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryImageCreateInfo; + +typedef struct VkExternalMemoryBufferCreateInfo { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryBufferCreateInfo; + +typedef struct VkExportMemoryAllocateInfo { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExportMemoryAllocateInfo; + +typedef struct VkPhysicalDeviceExternalFenceInfo { + VkStructureType sType; + const void* pNext; + VkExternalFenceHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalFenceInfo; + +typedef struct VkExternalFenceProperties { + VkStructureType sType; + void* pNext; + VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes; + VkExternalFenceHandleTypeFlags compatibleHandleTypes; + VkExternalFenceFeatureFlags externalFenceFeatures; +} VkExternalFenceProperties; + +typedef struct VkExportFenceCreateInfo { + VkStructureType sType; + const void* pNext; + VkExternalFenceHandleTypeFlags handleTypes; +} VkExportFenceCreateInfo; + +typedef struct VkExportSemaphoreCreateInfo { + VkStructureType sType; + const void* pNext; + VkExternalSemaphoreHandleTypeFlags handleTypes; +} VkExportSemaphoreCreateInfo; + +typedef struct VkPhysicalDeviceExternalSemaphoreInfo { + VkStructureType sType; + const void* pNext; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalSemaphoreInfo; + +typedef struct VkExternalSemaphoreProperties { + VkStructureType sType; + void* pNext; + VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes; + VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes; + VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures; +} VkExternalSemaphoreProperties; + +typedef struct VkPhysicalDeviceSubgroupProperties { + VkStructureType sType; + void* pNext; + uint32_t subgroupSize; + VkShaderStageFlags supportedStages; + VkSubgroupFeatureFlags supportedOperations; + VkBool32 quadOperationsInAllStages; +} VkPhysicalDeviceSubgroupProperties; + +typedef struct VkPhysicalDevice16BitStorageFeatures { + VkStructureType sType; + void* pNext; + VkBool32 storageBuffer16BitAccess; + VkBool32 uniformAndStorageBuffer16BitAccess; + VkBool32 storagePushConstant16; + VkBool32 storageInputOutput16; +} VkPhysicalDevice16BitStorageFeatures; + +typedef struct VkPhysicalDeviceVariablePointersFeatures { + VkStructureType sType; + void* pNext; + VkBool32 variablePointersStorageBuffer; + VkBool32 variablePointers; +} VkPhysicalDeviceVariablePointersFeatures; + +typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures; + +typedef struct VkDescriptorUpdateTemplateEntry { + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; + VkDescriptorType descriptorType; + size_t offset; + size_t stride; +} VkDescriptorUpdateTemplateEntry; + +typedef struct VkDescriptorUpdateTemplateCreateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorUpdateTemplateCreateFlags flags; + uint32_t descriptorUpdateEntryCount; + const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntries; + VkDescriptorUpdateTemplateType templateType; + VkDescriptorSetLayout descriptorSetLayout; + VkPipelineBindPoint pipelineBindPoint; + VkPipelineLayout pipelineLayout; + uint32_t set; +} VkDescriptorUpdateTemplateCreateInfo; + +typedef struct VkPhysicalDeviceMaintenance3Properties { + VkStructureType sType; + void* pNext; + uint32_t maxPerSetDescriptors; + VkDeviceSize maxMemoryAllocationSize; +} VkPhysicalDeviceMaintenance3Properties; + +typedef struct VkDescriptorSetLayoutSupport { + VkStructureType sType; + void* pNext; + VkBool32 supported; +} VkDescriptorSetLayoutSupport; + +typedef struct VkSamplerYcbcrConversionCreateInfo { + VkStructureType sType; + const void* pNext; + VkFormat format; + VkSamplerYcbcrModelConversion ycbcrModel; + VkSamplerYcbcrRange ycbcrRange; + VkComponentMapping components; + VkChromaLocation xChromaOffset; + VkChromaLocation yChromaOffset; + VkFilter chromaFilter; + VkBool32 forceExplicitReconstruction; +} VkSamplerYcbcrConversionCreateInfo; + +typedef struct VkSamplerYcbcrConversionInfo { + VkStructureType sType; + const void* pNext; + VkSamplerYcbcrConversion conversion; +} VkSamplerYcbcrConversionInfo; + +typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures { + VkStructureType sType; + void* pNext; + VkBool32 samplerYcbcrConversion; +} VkPhysicalDeviceSamplerYcbcrConversionFeatures; + +typedef struct VkSamplerYcbcrConversionImageFormatProperties { + VkStructureType sType; + void* pNext; + uint32_t combinedImageSamplerDescriptorCount; +} VkSamplerYcbcrConversionImageFormatProperties; + +typedef struct VkDeviceGroupRenderPassBeginInfo { + VkStructureType sType; + const void* pNext; + uint32_t deviceMask; + uint32_t deviceRenderAreaCount; + const VkRect2D* pDeviceRenderAreas; +} VkDeviceGroupRenderPassBeginInfo; + +typedef struct VkPhysicalDevicePointClippingProperties { + VkStructureType sType; + void* pNext; + VkPointClippingBehavior pointClippingBehavior; +} VkPhysicalDevicePointClippingProperties; + +typedef struct VkInputAttachmentAspectReference { + uint32_t subpass; + uint32_t inputAttachmentIndex; + VkImageAspectFlags aspectMask; +} VkInputAttachmentAspectReference; + +typedef struct VkRenderPassInputAttachmentAspectCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t aspectReferenceCount; + const VkInputAttachmentAspectReference* pAspectReferences; +} VkRenderPassInputAttachmentAspectCreateInfo; + +typedef struct VkPipelineTessellationDomainOriginStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkTessellationDomainOrigin domainOrigin; +} VkPipelineTessellationDomainOriginStateCreateInfo; + +typedef struct VkRenderPassMultiviewCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t subpassCount; + const uint32_t* pViewMasks; + uint32_t dependencyCount; + const int32_t* pViewOffsets; + uint32_t correlationMaskCount; + const uint32_t* pCorrelationMasks; +} VkRenderPassMultiviewCreateInfo; + +typedef struct VkPhysicalDeviceMultiviewFeatures { + VkStructureType sType; + void* pNext; + VkBool32 multiview; + VkBool32 multiviewGeometryShader; + VkBool32 multiviewTessellationShader; +} VkPhysicalDeviceMultiviewFeatures; + +typedef struct VkPhysicalDeviceMultiviewProperties { + VkStructureType sType; + void* pNext; + uint32_t maxMultiviewViewCount; + uint32_t maxMultiviewInstanceIndex; +} VkPhysicalDeviceMultiviewProperties; + +typedef struct VkPhysicalDeviceShaderDrawParametersFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderDrawParameters; +} VkPhysicalDeviceShaderDrawParametersFeatures; + +typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures; + +typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion); +typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); +typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); +typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask); +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); +typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); +typedef void (VKAPI_PTR *PFN_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); +typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); +typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); +typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion( + uint32_t* pApiVersion); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo* pBindInfos); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfo* pBindInfos); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( + VkCommandBuffer commandBuffer, + uint32_t deviceMask); + +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( + VkInstance instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties); + +VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( + VkDevice device, + const VkDeviceQueueInfo2* pQueueInfo, + VkQueue* pQueue); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( + VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate( + VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void* pData); + +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( + VkDevice device, + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSamplerYcbcrConversion* pYcbcrConversion); + +VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( + VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks* pAllocator); +#endif + + +// VK_VERSION_1_2 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_2 1 +// Vulkan 1.2 version number +#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0 + +#define VK_MAX_DRIVER_NAME_SIZE 256U +#define VK_MAX_DRIVER_INFO_SIZE 256U + +typedef enum VkDriverId { + VK_DRIVER_ID_AMD_PROPRIETARY = 1, + VK_DRIVER_ID_AMD_OPEN_SOURCE = 2, + VK_DRIVER_ID_MESA_RADV = 3, + VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4, + VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5, + VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6, + VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7, + VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8, + VK_DRIVER_ID_ARM_PROPRIETARY = 9, + VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10, + VK_DRIVER_ID_GGP_PROPRIETARY = 11, + VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12, + VK_DRIVER_ID_MESA_LLVMPIPE = 13, + VK_DRIVER_ID_MOLTENVK = 14, + VK_DRIVER_ID_COREAVI_PROPRIETARY = 15, + VK_DRIVER_ID_JUICE_PROPRIETARY = 16, + VK_DRIVER_ID_VERISILICON_PROPRIETARY = 17, + VK_DRIVER_ID_MESA_TURNIP = 18, + VK_DRIVER_ID_MESA_V3DV = 19, + VK_DRIVER_ID_MESA_PANVK = 20, + VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21, + VK_DRIVER_ID_MESA_VENUS = 22, + VK_DRIVER_ID_MESA_DOZEN = 23, + VK_DRIVER_ID_MESA_NVK = 24, + VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA = 25, + VK_DRIVER_ID_MESA_HONEYKRISP = 26, + VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN = 27, + VK_DRIVER_ID_MESA_KOSMICKRISP = 28, + VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY, + VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE, + VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV, + VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = VK_DRIVER_ID_NVIDIA_PROPRIETARY, + VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, + VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, + VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, + VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, + VK_DRIVER_ID_ARM_PROPRIETARY_KHR = VK_DRIVER_ID_ARM_PROPRIETARY, + VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, + VK_DRIVER_ID_GGP_PROPRIETARY_KHR = VK_DRIVER_ID_GGP_PROPRIETARY, + VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY, + VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF +} VkDriverId; + +typedef enum VkShaderFloatControlsIndependence { + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF +} VkShaderFloatControlsIndependence; + +typedef enum VkSemaphoreType { + VK_SEMAPHORE_TYPE_BINARY = 0, + VK_SEMAPHORE_TYPE_TIMELINE = 1, + VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY, + VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE, + VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkSemaphoreType; + +typedef enum VkSamplerReductionMode { + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0, + VK_SAMPLER_REDUCTION_MODE_MIN = 1, + VK_SAMPLER_REDUCTION_MODE_MAX = 2, + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM = 1000521000, + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, + VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VK_SAMPLER_REDUCTION_MODE_MIN, + VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VK_SAMPLER_REDUCTION_MODE_MAX, + VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerReductionMode; + +typedef enum VkResolveModeFlagBits { + VK_RESOLVE_MODE_NONE = 0, + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 0x00000001, + VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002, + VK_RESOLVE_MODE_MIN_BIT = 0x00000004, + VK_RESOLVE_MODE_MAX_BIT = 0x00000008, + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID = 0x00000010, + VK_RESOLVE_MODE_CUSTOM_BIT_EXT = 0x00000020, + VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE, + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, + VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT, + VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT, + VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT, + // VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID is a legacy alias + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID = VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, + VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkResolveModeFlagBits; +typedef VkFlags VkResolveModeFlags; + +typedef enum VkSemaphoreWaitFlagBits { + VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001, + VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT, + VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSemaphoreWaitFlagBits; +typedef VkFlags VkSemaphoreWaitFlags; + +typedef enum VkDescriptorBindingFlagBits { + VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 0x00000001, + VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 0x00000002, + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 0x00000004, + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 0x00000008, + VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, + VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorBindingFlagBits; +typedef VkFlags VkDescriptorBindingFlags; +typedef struct VkPhysicalDeviceVulkan11Features { + VkStructureType sType; + void* pNext; + VkBool32 storageBuffer16BitAccess; + VkBool32 uniformAndStorageBuffer16BitAccess; + VkBool32 storagePushConstant16; + VkBool32 storageInputOutput16; + VkBool32 multiview; + VkBool32 multiviewGeometryShader; + VkBool32 multiviewTessellationShader; + VkBool32 variablePointersStorageBuffer; + VkBool32 variablePointers; + VkBool32 protectedMemory; + VkBool32 samplerYcbcrConversion; + VkBool32 shaderDrawParameters; +} VkPhysicalDeviceVulkan11Features; + +typedef struct VkPhysicalDeviceVulkan11Properties { + VkStructureType sType; + void* pNext; + uint8_t deviceUUID[VK_UUID_SIZE]; + uint8_t driverUUID[VK_UUID_SIZE]; + uint8_t deviceLUID[VK_LUID_SIZE]; + uint32_t deviceNodeMask; + VkBool32 deviceLUIDValid; + uint32_t subgroupSize; + VkShaderStageFlags subgroupSupportedStages; + VkSubgroupFeatureFlags subgroupSupportedOperations; + VkBool32 subgroupQuadOperationsInAllStages; + VkPointClippingBehavior pointClippingBehavior; + uint32_t maxMultiviewViewCount; + uint32_t maxMultiviewInstanceIndex; + VkBool32 protectedNoFault; + uint32_t maxPerSetDescriptors; + VkDeviceSize maxMemoryAllocationSize; +} VkPhysicalDeviceVulkan11Properties; + +typedef struct VkPhysicalDeviceVulkan12Features { + VkStructureType sType; + void* pNext; + VkBool32 samplerMirrorClampToEdge; + VkBool32 drawIndirectCount; + VkBool32 storageBuffer8BitAccess; + VkBool32 uniformAndStorageBuffer8BitAccess; + VkBool32 storagePushConstant8; + VkBool32 shaderBufferInt64Atomics; + VkBool32 shaderSharedInt64Atomics; + VkBool32 shaderFloat16; + VkBool32 shaderInt8; + VkBool32 descriptorIndexing; + VkBool32 shaderInputAttachmentArrayDynamicIndexing; + VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; + VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; + VkBool32 shaderUniformBufferArrayNonUniformIndexing; + VkBool32 shaderSampledImageArrayNonUniformIndexing; + VkBool32 shaderStorageBufferArrayNonUniformIndexing; + VkBool32 shaderStorageImageArrayNonUniformIndexing; + VkBool32 shaderInputAttachmentArrayNonUniformIndexing; + VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; + VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; + VkBool32 descriptorBindingUniformBufferUpdateAfterBind; + VkBool32 descriptorBindingSampledImageUpdateAfterBind; + VkBool32 descriptorBindingStorageImageUpdateAfterBind; + VkBool32 descriptorBindingStorageBufferUpdateAfterBind; + VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingUpdateUnusedWhilePending; + VkBool32 descriptorBindingPartiallyBound; + VkBool32 descriptorBindingVariableDescriptorCount; + VkBool32 runtimeDescriptorArray; + VkBool32 samplerFilterMinmax; + VkBool32 scalarBlockLayout; + VkBool32 imagelessFramebuffer; + VkBool32 uniformBufferStandardLayout; + VkBool32 shaderSubgroupExtendedTypes; + VkBool32 separateDepthStencilLayouts; + VkBool32 hostQueryReset; + VkBool32 timelineSemaphore; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; + VkBool32 vulkanMemoryModel; + VkBool32 vulkanMemoryModelDeviceScope; + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; + VkBool32 shaderOutputViewportIndex; + VkBool32 shaderOutputLayer; + VkBool32 subgroupBroadcastDynamicId; +} VkPhysicalDeviceVulkan12Features; + +typedef struct VkConformanceVersion { + uint8_t major; + uint8_t minor; + uint8_t subminor; + uint8_t patch; +} VkConformanceVersion; + +typedef struct VkPhysicalDeviceVulkan12Properties { + VkStructureType sType; + void* pNext; + VkDriverId driverID; + char driverName[VK_MAX_DRIVER_NAME_SIZE]; + char driverInfo[VK_MAX_DRIVER_INFO_SIZE]; + VkConformanceVersion conformanceVersion; + VkShaderFloatControlsIndependence denormBehaviorIndependence; + VkShaderFloatControlsIndependence roundingModeIndependence; + VkBool32 shaderSignedZeroInfNanPreserveFloat16; + VkBool32 shaderSignedZeroInfNanPreserveFloat32; + VkBool32 shaderSignedZeroInfNanPreserveFloat64; + VkBool32 shaderDenormPreserveFloat16; + VkBool32 shaderDenormPreserveFloat32; + VkBool32 shaderDenormPreserveFloat64; + VkBool32 shaderDenormFlushToZeroFloat16; + VkBool32 shaderDenormFlushToZeroFloat32; + VkBool32 shaderDenormFlushToZeroFloat64; + VkBool32 shaderRoundingModeRTEFloat16; + VkBool32 shaderRoundingModeRTEFloat32; + VkBool32 shaderRoundingModeRTEFloat64; + VkBool32 shaderRoundingModeRTZFloat16; + VkBool32 shaderRoundingModeRTZFloat32; + VkBool32 shaderRoundingModeRTZFloat64; + uint32_t maxUpdateAfterBindDescriptorsInAllPools; + VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; + VkBool32 shaderSampledImageArrayNonUniformIndexingNative; + VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; + VkBool32 shaderStorageImageArrayNonUniformIndexingNative; + VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; + VkBool32 robustBufferAccessUpdateAfterBind; + VkBool32 quadDivergentImplicitLod; + uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; + uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; + uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; + uint32_t maxPerStageUpdateAfterBindResources; + uint32_t maxDescriptorSetUpdateAfterBindSamplers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindSampledImages; + uint32_t maxDescriptorSetUpdateAfterBindStorageImages; + uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; + VkResolveModeFlags supportedDepthResolveModes; + VkResolveModeFlags supportedStencilResolveModes; + VkBool32 independentResolveNone; + VkBool32 independentResolve; + VkBool32 filterMinmaxSingleComponentFormats; + VkBool32 filterMinmaxImageComponentMapping; + uint64_t maxTimelineSemaphoreValueDifference; + VkSampleCountFlags framebufferIntegerColorSampleCounts; +} VkPhysicalDeviceVulkan12Properties; + +typedef struct VkImageFormatListCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t viewFormatCount; + const VkFormat* pViewFormats; +} VkImageFormatListCreateInfo; + +typedef struct VkPhysicalDeviceDriverProperties { + VkStructureType sType; + void* pNext; + VkDriverId driverID; + char driverName[VK_MAX_DRIVER_NAME_SIZE]; + char driverInfo[VK_MAX_DRIVER_INFO_SIZE]; + VkConformanceVersion conformanceVersion; +} VkPhysicalDeviceDriverProperties; + +typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures { + VkStructureType sType; + void* pNext; + VkBool32 vulkanMemoryModel; + VkBool32 vulkanMemoryModelDeviceScope; + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; +} VkPhysicalDeviceVulkanMemoryModelFeatures; + +typedef struct VkPhysicalDeviceHostQueryResetFeatures { + VkStructureType sType; + void* pNext; + VkBool32 hostQueryReset; +} VkPhysicalDeviceHostQueryResetFeatures; + +typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures { + VkStructureType sType; + void* pNext; + VkBool32 timelineSemaphore; +} VkPhysicalDeviceTimelineSemaphoreFeatures; + +typedef struct VkPhysicalDeviceTimelineSemaphoreProperties { + VkStructureType sType; + void* pNext; + uint64_t maxTimelineSemaphoreValueDifference; +} VkPhysicalDeviceTimelineSemaphoreProperties; + +typedef struct VkSemaphoreTypeCreateInfo { + VkStructureType sType; + const void* pNext; + VkSemaphoreType semaphoreType; + uint64_t initialValue; +} VkSemaphoreTypeCreateInfo; + +typedef struct VkTimelineSemaphoreSubmitInfo { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreValueCount; + const uint64_t* pWaitSemaphoreValues; + uint32_t signalSemaphoreValueCount; + const uint64_t* pSignalSemaphoreValues; +} VkTimelineSemaphoreSubmitInfo; + +typedef struct VkSemaphoreWaitInfo { + VkStructureType sType; + const void* pNext; + VkSemaphoreWaitFlags flags; + uint32_t semaphoreCount; + const VkSemaphore* pSemaphores; + const uint64_t* pValues; +} VkSemaphoreWaitInfo; + +typedef struct VkSemaphoreSignalInfo { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + uint64_t value; +} VkSemaphoreSignalInfo; + +typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures { + VkStructureType sType; + void* pNext; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; +} VkPhysicalDeviceBufferDeviceAddressFeatures; + +typedef struct VkBufferDeviceAddressInfo { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkBufferDeviceAddressInfo; + +typedef struct VkBufferOpaqueCaptureAddressCreateInfo { + VkStructureType sType; + const void* pNext; + uint64_t opaqueCaptureAddress; +} VkBufferOpaqueCaptureAddressCreateInfo; + +typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo { + VkStructureType sType; + const void* pNext; + uint64_t opaqueCaptureAddress; +} VkMemoryOpaqueCaptureAddressAllocateInfo; + +typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkDeviceMemoryOpaqueCaptureAddressInfo; + +typedef struct VkPhysicalDevice8BitStorageFeatures { + VkStructureType sType; + void* pNext; + VkBool32 storageBuffer8BitAccess; + VkBool32 uniformAndStorageBuffer8BitAccess; + VkBool32 storagePushConstant8; +} VkPhysicalDevice8BitStorageFeatures; + +typedef struct VkPhysicalDeviceShaderAtomicInt64Features { + VkStructureType sType; + void* pNext; + VkBool32 shaderBufferInt64Atomics; + VkBool32 shaderSharedInt64Atomics; +} VkPhysicalDeviceShaderAtomicInt64Features; + +typedef struct VkPhysicalDeviceShaderFloat16Int8Features { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloat16; + VkBool32 shaderInt8; +} VkPhysicalDeviceShaderFloat16Int8Features; + +typedef struct VkPhysicalDeviceFloatControlsProperties { + VkStructureType sType; + void* pNext; + VkShaderFloatControlsIndependence denormBehaviorIndependence; + VkShaderFloatControlsIndependence roundingModeIndependence; + VkBool32 shaderSignedZeroInfNanPreserveFloat16; + VkBool32 shaderSignedZeroInfNanPreserveFloat32; + VkBool32 shaderSignedZeroInfNanPreserveFloat64; + VkBool32 shaderDenormPreserveFloat16; + VkBool32 shaderDenormPreserveFloat32; + VkBool32 shaderDenormPreserveFloat64; + VkBool32 shaderDenormFlushToZeroFloat16; + VkBool32 shaderDenormFlushToZeroFloat32; + VkBool32 shaderDenormFlushToZeroFloat64; + VkBool32 shaderRoundingModeRTEFloat16; + VkBool32 shaderRoundingModeRTEFloat32; + VkBool32 shaderRoundingModeRTEFloat64; + VkBool32 shaderRoundingModeRTZFloat16; + VkBool32 shaderRoundingModeRTZFloat32; + VkBool32 shaderRoundingModeRTZFloat64; +} VkPhysicalDeviceFloatControlsProperties; + +typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t bindingCount; + const VkDescriptorBindingFlags* pBindingFlags; +} VkDescriptorSetLayoutBindingFlagsCreateInfo; + +typedef struct VkPhysicalDeviceDescriptorIndexingFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderInputAttachmentArrayDynamicIndexing; + VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; + VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; + VkBool32 shaderUniformBufferArrayNonUniformIndexing; + VkBool32 shaderSampledImageArrayNonUniformIndexing; + VkBool32 shaderStorageBufferArrayNonUniformIndexing; + VkBool32 shaderStorageImageArrayNonUniformIndexing; + VkBool32 shaderInputAttachmentArrayNonUniformIndexing; + VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; + VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; + VkBool32 descriptorBindingUniformBufferUpdateAfterBind; + VkBool32 descriptorBindingSampledImageUpdateAfterBind; + VkBool32 descriptorBindingStorageImageUpdateAfterBind; + VkBool32 descriptorBindingStorageBufferUpdateAfterBind; + VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; + VkBool32 descriptorBindingUpdateUnusedWhilePending; + VkBool32 descriptorBindingPartiallyBound; + VkBool32 descriptorBindingVariableDescriptorCount; + VkBool32 runtimeDescriptorArray; +} VkPhysicalDeviceDescriptorIndexingFeatures; + +typedef struct VkPhysicalDeviceDescriptorIndexingProperties { + VkStructureType sType; + void* pNext; + uint32_t maxUpdateAfterBindDescriptorsInAllPools; + VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; + VkBool32 shaderSampledImageArrayNonUniformIndexingNative; + VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; + VkBool32 shaderStorageImageArrayNonUniformIndexingNative; + VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; + VkBool32 robustBufferAccessUpdateAfterBind; + VkBool32 quadDivergentImplicitLod; + uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; + uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; + uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; + uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; + uint32_t maxPerStageUpdateAfterBindResources; + uint32_t maxDescriptorSetUpdateAfterBindSamplers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindSampledImages; + uint32_t maxDescriptorSetUpdateAfterBindStorageImages; + uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; +} VkPhysicalDeviceDescriptorIndexingProperties; + +typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo { + VkStructureType sType; + const void* pNext; + uint32_t descriptorSetCount; + const uint32_t* pDescriptorCounts; +} VkDescriptorSetVariableDescriptorCountAllocateInfo; + +typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport { + VkStructureType sType; + void* pNext; + uint32_t maxVariableDescriptorCount; +} VkDescriptorSetVariableDescriptorCountLayoutSupport; + +typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures { + VkStructureType sType; + void* pNext; + VkBool32 scalarBlockLayout; +} VkPhysicalDeviceScalarBlockLayoutFeatures; + +typedef struct VkSamplerReductionModeCreateInfo { + VkStructureType sType; + const void* pNext; + VkSamplerReductionMode reductionMode; +} VkSamplerReductionModeCreateInfo; + +typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties { + VkStructureType sType; + void* pNext; + VkBool32 filterMinmaxSingleComponentFormats; + VkBool32 filterMinmaxImageComponentMapping; +} VkPhysicalDeviceSamplerFilterMinmaxProperties; + +typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures { + VkStructureType sType; + void* pNext; + VkBool32 uniformBufferStandardLayout; +} VkPhysicalDeviceUniformBufferStandardLayoutFeatures; + +typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupExtendedTypes; +} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; + +typedef struct VkAttachmentDescription2 { + VkStructureType sType; + const void* pNext; + VkAttachmentDescriptionFlags flags; + VkFormat format; + VkSampleCountFlagBits samples; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkAttachmentLoadOp stencilLoadOp; + VkAttachmentStoreOp stencilStoreOp; + VkImageLayout initialLayout; + VkImageLayout finalLayout; +} VkAttachmentDescription2; + +typedef struct VkAttachmentReference2 { + VkStructureType sType; + const void* pNext; + uint32_t attachment; + VkImageLayout layout; + VkImageAspectFlags aspectMask; +} VkAttachmentReference2; + +typedef struct VkSubpassDescription2 { + VkStructureType sType; + const void* pNext; + VkSubpassDescriptionFlags flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t viewMask; + uint32_t inputAttachmentCount; + const VkAttachmentReference2* pInputAttachments; + uint32_t colorAttachmentCount; + const VkAttachmentReference2* pColorAttachments; + const VkAttachmentReference2* pResolveAttachments; + const VkAttachmentReference2* pDepthStencilAttachment; + uint32_t preserveAttachmentCount; + const uint32_t* pPreserveAttachments; +} VkSubpassDescription2; + +typedef struct VkSubpassDependency2 { + VkStructureType sType; + const void* pNext; + uint32_t srcSubpass; + uint32_t dstSubpass; + VkPipelineStageFlags srcStageMask; + VkPipelineStageFlags dstStageMask; + VkAccessFlags srcAccessMask; + VkAccessFlags dstAccessMask; + VkDependencyFlags dependencyFlags; + int32_t viewOffset; +} VkSubpassDependency2; + +typedef struct VkRenderPassCreateInfo2 { + VkStructureType sType; + const void* pNext; + VkRenderPassCreateFlags flags; + uint32_t attachmentCount; + const VkAttachmentDescription2* pAttachments; + uint32_t subpassCount; + const VkSubpassDescription2* pSubpasses; + uint32_t dependencyCount; + const VkSubpassDependency2* pDependencies; + uint32_t correlatedViewMaskCount; + const uint32_t* pCorrelatedViewMasks; +} VkRenderPassCreateInfo2; + +typedef struct VkSubpassBeginInfo { + VkStructureType sType; + const void* pNext; + VkSubpassContents contents; +} VkSubpassBeginInfo; + +typedef struct VkSubpassEndInfo { + VkStructureType sType; + const void* pNext; +} VkSubpassEndInfo; + +typedef struct VkSubpassDescriptionDepthStencilResolve { + VkStructureType sType; + const void* pNext; + VkResolveModeFlagBits depthResolveMode; + VkResolveModeFlagBits stencilResolveMode; + const VkAttachmentReference2* pDepthStencilResolveAttachment; +} VkSubpassDescriptionDepthStencilResolve; + +typedef struct VkPhysicalDeviceDepthStencilResolveProperties { + VkStructureType sType; + void* pNext; + VkResolveModeFlags supportedDepthResolveModes; + VkResolveModeFlags supportedStencilResolveModes; + VkBool32 independentResolveNone; + VkBool32 independentResolve; +} VkPhysicalDeviceDepthStencilResolveProperties; + +typedef struct VkImageStencilUsageCreateInfo { + VkStructureType sType; + const void* pNext; + VkImageUsageFlags stencilUsage; +} VkImageStencilUsageCreateInfo; + +typedef struct VkPhysicalDeviceImagelessFramebufferFeatures { + VkStructureType sType; + void* pNext; + VkBool32 imagelessFramebuffer; +} VkPhysicalDeviceImagelessFramebufferFeatures; + +typedef struct VkFramebufferAttachmentImageInfo { + VkStructureType sType; + const void* pNext; + VkImageCreateFlags flags; + VkImageUsageFlags usage; + uint32_t width; + uint32_t height; + uint32_t layerCount; + uint32_t viewFormatCount; + const VkFormat* pViewFormats; +} VkFramebufferAttachmentImageInfo; + +typedef struct VkFramebufferAttachmentsCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t attachmentImageInfoCount; + const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos; +} VkFramebufferAttachmentsCreateInfo; + +typedef struct VkRenderPassAttachmentBeginInfo { + VkStructureType sType; + const void* pNext; + uint32_t attachmentCount; + const VkImageView* pAttachments; +} VkRenderPassAttachmentBeginInfo; + +typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures { + VkStructureType sType; + void* pNext; + VkBool32 separateDepthStencilLayouts; +} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; + +typedef struct VkAttachmentReferenceStencilLayout { + VkStructureType sType; + void* pNext; + VkImageLayout stencilLayout; +} VkAttachmentReferenceStencilLayout; + +typedef struct VkAttachmentDescriptionStencilLayout { + VkStructureType sType; + void* pNext; + VkImageLayout stencilInitialLayout; + VkImageLayout stencilFinalLayout; +} VkAttachmentDescriptionStencilLayout; + +typedef void (VKAPI_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); +typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); +typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); +typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( + VkDevice device, + VkSemaphore semaphore, + uint64_t* pValue); + +VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( + VkDevice device, + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout); + +VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( + VkDevice device, + const VkSemaphoreSignalInfo* pSignalInfo); + +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); + +VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); + +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( + VkDevice device, + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2( + VkDevice device, + const VkRenderPassCreateInfo2* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + const VkSubpassBeginInfo* pSubpassBeginInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2( + VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo* pSubpassBeginInfo, + const VkSubpassEndInfo* pSubpassEndInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( + VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo); +#endif + + +// VK_VERSION_1_3 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_3 1 +// Vulkan 1.3 version number +#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0 + +typedef uint64_t VkFlags64; +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot) + +typedef enum VkToolPurposeFlagBits { + VK_TOOL_PURPOSE_VALIDATION_BIT = 0x00000001, + VK_TOOL_PURPOSE_PROFILING_BIT = 0x00000002, + VK_TOOL_PURPOSE_TRACING_BIT = 0x00000004, + VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT = 0x00000008, + VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT = 0x00000010, + VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020, + VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040, + VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = VK_TOOL_PURPOSE_VALIDATION_BIT, + VK_TOOL_PURPOSE_PROFILING_BIT_EXT = VK_TOOL_PURPOSE_PROFILING_BIT, + VK_TOOL_PURPOSE_TRACING_BIT_EXT = VK_TOOL_PURPOSE_TRACING_BIT, + VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT, + VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT, + VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkToolPurposeFlagBits; +typedef VkFlags VkToolPurposeFlags; +typedef VkFlags VkPrivateDataSlotCreateFlags; +typedef VkFlags64 VkPipelineStageFlags2; + +// Flag bits for VkPipelineStageFlagBits2 +typedef VkFlags64 VkPipelineStageFlagBits2; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE = 0ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 0x00000001ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 0x00000002ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT = 0x00000004ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT = 0x00000008ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT = 0x00000040ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT = 0x00000080ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT = 0x00000100ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT = 0x00000200ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT = 0x00000800ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT = 0x00002000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT = 0x00004000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT = 0x00008000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT = 0x00010000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT = 0x100000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT = 0x200000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT = 0x400000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT = 0x800000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT = 0x1000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT = 0x2000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT = 0x4000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT = 0x00020000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT = 0x00080000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT = 0x00100000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI = 0x8000000000ULL; +// VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI is a legacy alias +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR = 0x10000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT = 0x40000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI = 0x20000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV = 0x20000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV = 0x100000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM = 0x40000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR = 0x400000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT = 0x200000000000ULL; + +typedef VkFlags64 VkAccessFlags2; + +// Flag bits for VkAccessFlagBits2 +typedef VkFlags64 VkAccessFlagBits2; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE = 0ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT = 0x00000001ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT = 0x00000002ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT = 0x00000008ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT = 0x00000010ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT = 0x00000020ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT = 0x00000040ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT = 0x00000080ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT = 0x00000800ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT = 0x00001000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT = 0x00002000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT = 0x00004000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT = 0x00008000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT = 0x00010000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT = 0x100000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT = 0x200000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT = 0x400000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SAMPLER_HEAP_READ_BIT_EXT = 0x200000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_RESOURCE_HEAP_READ_BIT_EXT = 0x400000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM = 0x8000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM = 0x10000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_EXT = 0x00020000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_EXT = 0x00040000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT = 0x20000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR = 0x10000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MICROMAP_READ_BIT_EXT = 0x100000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT = 0x200000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV = 0x40000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV = 0x80000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM = 0x800000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM = 0x1000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT = 0x80000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT = 0x100000000000000ULL; + + +typedef enum VkSubmitFlagBits { + VK_SUBMIT_PROTECTED_BIT = 0x00000001, + VK_SUBMIT_PROTECTED_BIT_KHR = VK_SUBMIT_PROTECTED_BIT, + VK_SUBMIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubmitFlagBits; +typedef VkFlags VkSubmitFlags; +typedef VkFlags64 VkFormatFeatureFlags2; + +// Flag bits for VkFormatFeatureFlagBits2 +typedef VkFlags64 VkFormatFeatureFlagBits2; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 0x00000001ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 0x00000002ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000010ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 0x00000040ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 0x00000080ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 0x00000400ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 0x00000800ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 0x00004000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 0x00008000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 0x00400000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 0x00800000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 0x80000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 0x100000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 0x200000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT = 0x400000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT = 0x400000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV = 0x8000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 0x4000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM = 0x400000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM = 0x800000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM = 0x1000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM = 0x2000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM = 0x8000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM = 0x80000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV = 0x10000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV = 0x20000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV = 0x40000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM = 0x1000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR = 0x800000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x2000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x4000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR = 0x10000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR = 0x20000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR = 0x40000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR = 0x80000000000000ULL; + + +typedef enum VkPipelineCreationFeedbackFlagBits { + VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT = 0x00000001, + VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT = 0x00000002, + VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT = 0x00000004, + VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT, + VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT, + VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT, + VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCreationFeedbackFlagBits; +typedef VkFlags VkPipelineCreationFeedbackFlags; + +typedef enum VkRenderingFlagBits { + VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT = 0x00000001, + VK_RENDERING_SUSPENDING_BIT = 0x00000002, + VK_RENDERING_RESUMING_BIT = 0x00000004, + VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x00000008, + VK_RENDERING_CONTENTS_INLINE_BIT_KHR = 0x00000010, + VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 0x00000020, + VK_RENDERING_FRAGMENT_REGION_BIT_EXT = 0x00000040, + VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT = 0x00000080, + VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR = 0x00000100, + VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT, + VK_RENDERING_SUSPENDING_BIT_KHR = VK_RENDERING_SUSPENDING_BIT, + VK_RENDERING_RESUMING_BIT_KHR = VK_RENDERING_RESUMING_BIT, + VK_RENDERING_CONTENTS_INLINE_BIT_EXT = VK_RENDERING_CONTENTS_INLINE_BIT_KHR, + VK_RENDERING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkRenderingFlagBits; +typedef VkFlags VkRenderingFlags; +typedef struct VkPhysicalDeviceVulkan13Features { + VkStructureType sType; + void* pNext; + VkBool32 robustImageAccess; + VkBool32 inlineUniformBlock; + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; + VkBool32 pipelineCreationCacheControl; + VkBool32 privateData; + VkBool32 shaderDemoteToHelperInvocation; + VkBool32 shaderTerminateInvocation; + VkBool32 subgroupSizeControl; + VkBool32 computeFullSubgroups; + VkBool32 synchronization2; + VkBool32 textureCompressionASTC_HDR; + VkBool32 shaderZeroInitializeWorkgroupMemory; + VkBool32 dynamicRendering; + VkBool32 shaderIntegerDotProduct; + VkBool32 maintenance4; +} VkPhysicalDeviceVulkan13Features; + +typedef struct VkPhysicalDeviceVulkan13Properties { + VkStructureType sType; + void* pNext; + uint32_t minSubgroupSize; + uint32_t maxSubgroupSize; + uint32_t maxComputeWorkgroupSubgroups; + VkShaderStageFlags requiredSubgroupSizeStages; + uint32_t maxInlineUniformBlockSize; + uint32_t maxPerStageDescriptorInlineUniformBlocks; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; + uint32_t maxDescriptorSetInlineUniformBlocks; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; + uint32_t maxInlineUniformTotalSize; + VkBool32 integerDotProduct8BitUnsignedAccelerated; + VkBool32 integerDotProduct8BitSignedAccelerated; + VkBool32 integerDotProduct8BitMixedSignednessAccelerated; + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProduct16BitUnsignedAccelerated; + VkBool32 integerDotProduct16BitSignedAccelerated; + VkBool32 integerDotProduct16BitMixedSignednessAccelerated; + VkBool32 integerDotProduct32BitUnsignedAccelerated; + VkBool32 integerDotProduct32BitSignedAccelerated; + VkBool32 integerDotProduct32BitMixedSignednessAccelerated; + VkBool32 integerDotProduct64BitUnsignedAccelerated; + VkBool32 integerDotProduct64BitSignedAccelerated; + VkBool32 integerDotProduct64BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; + VkDeviceSize storageTexelBufferOffsetAlignmentBytes; + VkBool32 storageTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize maxBufferSize; +} VkPhysicalDeviceVulkan13Properties; + +typedef struct VkPhysicalDeviceToolProperties { + VkStructureType sType; + void* pNext; + char name[VK_MAX_EXTENSION_NAME_SIZE]; + char version[VK_MAX_EXTENSION_NAME_SIZE]; + VkToolPurposeFlags purposes; + char description[VK_MAX_DESCRIPTION_SIZE]; + char layer[VK_MAX_EXTENSION_NAME_SIZE]; +} VkPhysicalDeviceToolProperties; + +typedef struct VkPhysicalDevicePrivateDataFeatures { + VkStructureType sType; + void* pNext; + VkBool32 privateData; +} VkPhysicalDevicePrivateDataFeatures; + +typedef struct VkDevicePrivateDataCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t privateDataSlotRequestCount; +} VkDevicePrivateDataCreateInfo; + +typedef struct VkPrivateDataSlotCreateInfo { + VkStructureType sType; + const void* pNext; + VkPrivateDataSlotCreateFlags flags; +} VkPrivateDataSlotCreateInfo; + +typedef struct VkMemoryBarrier2 { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; +} VkMemoryBarrier2; + +typedef struct VkBufferMemoryBarrier2 { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; +} VkBufferMemoryBarrier2; + +typedef struct VkImageMemoryBarrier2 { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + VkImageLayout oldLayout; + VkImageLayout newLayout; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkImage image; + VkImageSubresourceRange subresourceRange; +} VkImageMemoryBarrier2; + +typedef struct VkDependencyInfo { + VkStructureType sType; + const void* pNext; + VkDependencyFlags dependencyFlags; + uint32_t memoryBarrierCount; + const VkMemoryBarrier2* pMemoryBarriers; + uint32_t bufferMemoryBarrierCount; + const VkBufferMemoryBarrier2* pBufferMemoryBarriers; + uint32_t imageMemoryBarrierCount; + const VkImageMemoryBarrier2* pImageMemoryBarriers; +} VkDependencyInfo; + +typedef struct VkSemaphoreSubmitInfo { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + uint64_t value; + VkPipelineStageFlags2 stageMask; + uint32_t deviceIndex; +} VkSemaphoreSubmitInfo; + +typedef struct VkCommandBufferSubmitInfo { + VkStructureType sType; + const void* pNext; + VkCommandBuffer commandBuffer; + uint32_t deviceMask; +} VkCommandBufferSubmitInfo; + +typedef struct VkSubmitInfo2 { + VkStructureType sType; + const void* pNext; + VkSubmitFlags flags; + uint32_t waitSemaphoreInfoCount; + const VkSemaphoreSubmitInfo* pWaitSemaphoreInfos; + uint32_t commandBufferInfoCount; + const VkCommandBufferSubmitInfo* pCommandBufferInfos; + uint32_t signalSemaphoreInfoCount; + const VkSemaphoreSubmitInfo* pSignalSemaphoreInfos; +} VkSubmitInfo2; + +typedef struct VkPhysicalDeviceSynchronization2Features { + VkStructureType sType; + void* pNext; + VkBool32 synchronization2; +} VkPhysicalDeviceSynchronization2Features; + +typedef struct VkBufferCopy2 { + VkStructureType sType; + const void* pNext; + VkDeviceSize srcOffset; + VkDeviceSize dstOffset; + VkDeviceSize size; +} VkBufferCopy2; + +typedef struct VkCopyBufferInfo2 { + VkStructureType sType; + const void* pNext; + VkBuffer srcBuffer; + VkBuffer dstBuffer; + uint32_t regionCount; + const VkBufferCopy2* pRegions; +} VkCopyBufferInfo2; + +typedef struct VkImageCopy2 { + VkStructureType sType; + const void* pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageCopy2; + +typedef struct VkCopyImageInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2* pRegions; +} VkCopyImageInfo2; + +typedef struct VkBufferImageCopy2 { + VkStructureType sType; + const void* pNext; + VkDeviceSize bufferOffset; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkBufferImageCopy2; + +typedef struct VkCopyBufferToImageInfo2 { + VkStructureType sType; + const void* pNext; + VkBuffer srcBuffer; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkBufferImageCopy2* pRegions; +} VkCopyBufferToImageInfo2; + +typedef struct VkCopyImageToBufferInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkBuffer dstBuffer; + uint32_t regionCount; + const VkBufferImageCopy2* pRegions; +} VkCopyImageToBufferInfo2; + +typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures { + VkStructureType sType; + void* pNext; + VkBool32 textureCompressionASTC_HDR; +} VkPhysicalDeviceTextureCompressionASTCHDRFeatures; + +typedef struct VkFormatProperties3 { + VkStructureType sType; + void* pNext; + VkFormatFeatureFlags2 linearTilingFeatures; + VkFormatFeatureFlags2 optimalTilingFeatures; + VkFormatFeatureFlags2 bufferFeatures; +} VkFormatProperties3; + +typedef struct VkPhysicalDeviceMaintenance4Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance4; +} VkPhysicalDeviceMaintenance4Features; + +typedef struct VkPhysicalDeviceMaintenance4Properties { + VkStructureType sType; + void* pNext; + VkDeviceSize maxBufferSize; +} VkPhysicalDeviceMaintenance4Properties; + +typedef struct VkDeviceBufferMemoryRequirements { + VkStructureType sType; + const void* pNext; + const VkBufferCreateInfo* pCreateInfo; +} VkDeviceBufferMemoryRequirements; + +typedef struct VkDeviceImageMemoryRequirements { + VkStructureType sType; + const void* pNext; + const VkImageCreateInfo* pCreateInfo; + VkImageAspectFlagBits planeAspect; +} VkDeviceImageMemoryRequirements; + +typedef struct VkPipelineCreationFeedback { + VkPipelineCreationFeedbackFlags flags; + uint64_t duration; +} VkPipelineCreationFeedback; + +typedef struct VkPipelineCreationFeedbackCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreationFeedback* pPipelineCreationFeedback; + uint32_t pipelineStageCreationFeedbackCount; + VkPipelineCreationFeedback* pPipelineStageCreationFeedbacks; +} VkPipelineCreationFeedbackCreateInfo; + +typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderTerminateInvocation; +} VkPhysicalDeviceShaderTerminateInvocationFeatures; + +typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderDemoteToHelperInvocation; +} VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; + +typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineCreationCacheControl; +} VkPhysicalDevicePipelineCreationCacheControlFeatures; + +typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderZeroInitializeWorkgroupMemory; +} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + +typedef struct VkPhysicalDeviceImageRobustnessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 robustImageAccess; +} VkPhysicalDeviceImageRobustnessFeatures; + +typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures { + VkStructureType sType; + void* pNext; + VkBool32 subgroupSizeControl; + VkBool32 computeFullSubgroups; +} VkPhysicalDeviceSubgroupSizeControlFeatures; + +typedef struct VkPhysicalDeviceSubgroupSizeControlProperties { + VkStructureType sType; + void* pNext; + uint32_t minSubgroupSize; + uint32_t maxSubgroupSize; + uint32_t maxComputeWorkgroupSubgroups; + VkShaderStageFlags requiredSubgroupSizeStages; +} VkPhysicalDeviceSubgroupSizeControlProperties; + +typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t requiredSubgroupSize; +} VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; + +typedef struct VkPhysicalDeviceInlineUniformBlockFeatures { + VkStructureType sType; + void* pNext; + VkBool32 inlineUniformBlock; + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; +} VkPhysicalDeviceInlineUniformBlockFeatures; + +typedef struct VkPhysicalDeviceInlineUniformBlockProperties { + VkStructureType sType; + void* pNext; + uint32_t maxInlineUniformBlockSize; + uint32_t maxPerStageDescriptorInlineUniformBlocks; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; + uint32_t maxDescriptorSetInlineUniformBlocks; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; +} VkPhysicalDeviceInlineUniformBlockProperties; + +typedef struct VkWriteDescriptorSetInlineUniformBlock { + VkStructureType sType; + const void* pNext; + uint32_t dataSize; + const void* pData; +} VkWriteDescriptorSetInlineUniformBlock; + +typedef struct VkDescriptorPoolInlineUniformBlockCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t maxInlineUniformBlockBindings; +} VkDescriptorPoolInlineUniformBlockCreateInfo; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderIntegerDotProduct; +} VkPhysicalDeviceShaderIntegerDotProductFeatures; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductProperties { + VkStructureType sType; + void* pNext; + VkBool32 integerDotProduct8BitUnsignedAccelerated; + VkBool32 integerDotProduct8BitSignedAccelerated; + VkBool32 integerDotProduct8BitMixedSignednessAccelerated; + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProduct16BitUnsignedAccelerated; + VkBool32 integerDotProduct16BitSignedAccelerated; + VkBool32 integerDotProduct16BitMixedSignednessAccelerated; + VkBool32 integerDotProduct32BitUnsignedAccelerated; + VkBool32 integerDotProduct32BitSignedAccelerated; + VkBool32 integerDotProduct32BitMixedSignednessAccelerated; + VkBool32 integerDotProduct64BitUnsignedAccelerated; + VkBool32 integerDotProduct64BitSignedAccelerated; + VkBool32 integerDotProduct64BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; +} VkPhysicalDeviceShaderIntegerDotProductProperties; + +typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties { + VkStructureType sType; + void* pNext; + VkDeviceSize storageTexelBufferOffsetAlignmentBytes; + VkBool32 storageTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; +} VkPhysicalDeviceTexelBufferAlignmentProperties; + +typedef struct VkImageBlit2 { + VkStructureType sType; + const void* pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffsets[2]; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffsets[2]; +} VkImageBlit2; + +typedef struct VkBlitImageInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageBlit2* pRegions; + VkFilter filter; +} VkBlitImageInfo2; + +typedef struct VkImageResolve2 { + VkStructureType sType; + const void* pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageResolve2; + +typedef struct VkResolveImageInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageResolve2* pRegions; +} VkResolveImageInfo2; + +typedef struct VkRenderingAttachmentInfo { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkImageLayout imageLayout; + VkResolveModeFlagBits resolveMode; + VkImageView resolveImageView; + VkImageLayout resolveImageLayout; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkClearValue clearValue; +} VkRenderingAttachmentInfo; + +typedef struct VkRenderingInfo { + VkStructureType sType; + const void* pNext; + VkRenderingFlags flags; + VkRect2D renderArea; + uint32_t layerCount; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkRenderingAttachmentInfo* pColorAttachments; + const VkRenderingAttachmentInfo* pDepthAttachment; + const VkRenderingAttachmentInfo* pStencilAttachment; +} VkRenderingInfo; + +typedef struct VkPipelineRenderingCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkPipelineRenderingCreateInfo; + +typedef struct VkPhysicalDeviceDynamicRenderingFeatures { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRendering; +} VkPhysicalDeviceDynamicRenderingFeatures; + +typedef struct VkCommandBufferInheritanceRenderingInfo { + VkStructureType sType; + const void* pNext; + VkRenderingFlags flags; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; + VkSampleCountFlagBits rasterizationSamples; +} VkCommandBufferInheritanceRenderingInfo; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolProperties)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlot)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); +typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlot)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +typedef void (VKAPI_PTR *PFN_vkGetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); +typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirements)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); +typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginRendering)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRendering)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdSetCullMode)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFace)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopology)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCount)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); +typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCount)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); +typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnable)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOp)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnable)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOp)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnable)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnable)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot( + VkDevice device, + const VkPrivateDataSlotCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPrivateDataSlot* pPrivateDataSlot); + +VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot( + VkDevice device, + VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data); + +VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( + VkCommandBuffer commandBuffer, + const VkDependencyInfo* pDependencyInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query); + +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2( + VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( + VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( + VkDevice device, + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos); + +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering( + VkCommandBuffer commandBuffer); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes, + const VkDeviceSize* pStrides); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthWriteEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp( + VkCommandBuffer commandBuffer, + VkCompareOp depthCompareOp); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 stencilTestEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable( + VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthBiasEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( + VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable); +#endif + + +// VK_VERSION_1_4 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_4 1 +// Vulkan 1.4 version number +#define VK_API_VERSION_1_4 VK_MAKE_API_VERSION(0, 1, 4, 0)// Patch version should always be set to 0 + +#define VK_MAX_GLOBAL_PRIORITY_SIZE 16U + +typedef enum VkPipelineRobustnessBufferBehavior { + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessBufferBehavior; + +typedef enum VkPipelineRobustnessImageBehavior { + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessImageBehavior; + +typedef enum VkQueueGlobalPriority { + VK_QUEUE_GLOBAL_PRIORITY_LOW = 128, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM = 256, + VK_QUEUE_GLOBAL_PRIORITY_HIGH = 512, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME = 1024, + VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM = 0x7FFFFFFF +} VkQueueGlobalPriority; + +typedef enum VkLineRasterizationMode { + VK_LINE_RASTERIZATION_MODE_DEFAULT = 0, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR = 1, + VK_LINE_RASTERIZATION_MODE_BRESENHAM = 2, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH = 3, + VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkLineRasterizationMode; + +typedef enum VkMemoryUnmapFlagBits { + VK_MEMORY_UNMAP_RESERVE_BIT_EXT = 0x00000001, + VK_MEMORY_UNMAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryUnmapFlagBits; +typedef VkFlags VkMemoryUnmapFlags; +typedef VkFlags64 VkBufferUsageFlags2; + +// Flag bits for VkBufferUsageFlagBits2 +typedef VkFlags64 VkBufferUsageFlagBits2; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT = 0x00000001ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT = 0x00000002ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000008ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT = 0x00000010ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT = 0x00000020ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT = 0x00000040ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT = 0x00000080ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT = 0x00000100ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT = 0x00020000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 0x02000000ULL; +#endif +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT = 0x10000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR = 0x00000001ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR = 0x00000002ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000004ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR = 0x00000010ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR = 0x00000020ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR = 0x00000040ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR = 0x00000080ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = 0x00000100ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV = 0x00000400ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR = 0x00004000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR = 0x00020000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = 0x01000000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX = 0x200000000ULL; +#endif +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM = 0x20000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM = 0x08000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT = 0x100000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT = 0x80000000ULL; + + +typedef enum VkHostImageCopyFlagBits { + VK_HOST_IMAGE_COPY_MEMCPY_BIT = 0x00000001, + // VK_HOST_IMAGE_COPY_MEMCPY is a legacy alias + VK_HOST_IMAGE_COPY_MEMCPY = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_MEMCPY_BIT_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + // VK_HOST_IMAGE_COPY_MEMCPY_EXT is a legacy alias + VK_HOST_IMAGE_COPY_MEMCPY_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkHostImageCopyFlagBits; +typedef VkFlags VkHostImageCopyFlags; +typedef VkFlags64 VkPipelineCreateFlags2; + +// Flag bits for VkPipelineCreateFlagBits2 +typedef VkFlags64 VkPipelineCreateFlagBits2; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT = 0x00000001ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT = 0x00000002ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT = 0x00000004ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT = 0x00000010ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT = 0x08000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT = 0x40000000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX = 0x100000000ULL; +#endif +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT = 0x1000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR = 0x00001000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_SPHERES_AND_LINEAR_SWEPT_SPHERES_BIT_NV = 0x200000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x400000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR = 0x00000001ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR = 0x00000002ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR = 0x00000004ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 0x00000008ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR = 0x00000010ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV = 0x00000020ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR = 0x00000040ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR = 0x00000100ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR = 0x00000200ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR = 0x00000800ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV = 0x00040000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT = 0x08000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT = 0x40000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM = 0x2000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 0x80000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT = 0x4000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 0x10000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT = 0x80000000000ULL; + +typedef struct VkPhysicalDeviceVulkan14Features { + VkStructureType sType; + void* pNext; + VkBool32 globalPriorityQuery; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; + VkBool32 shaderFloatControls2; + VkBool32 shaderExpectAssume; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; + VkBool32 indexTypeUint8; + VkBool32 dynamicRenderingLocalRead; + VkBool32 maintenance5; + VkBool32 maintenance6; + VkBool32 pipelineProtectedAccess; + VkBool32 pipelineRobustness; + VkBool32 hostImageCopy; + VkBool32 pushDescriptor; +} VkPhysicalDeviceVulkan14Features; + +typedef struct VkPhysicalDeviceVulkan14Properties { + VkStructureType sType; + void* pNext; + uint32_t lineSubPixelPrecisionBits; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; + uint32_t maxPushDescriptors; + VkBool32 dynamicRenderingLocalReadDepthStencilAttachments; + VkBool32 dynamicRenderingLocalReadMultisampledAttachments; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; + uint32_t copySrcLayoutCount; + VkImageLayout* pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout* pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceVulkan14Properties; + +typedef struct VkDeviceQueueGlobalPriorityCreateInfo { + VkStructureType sType; + const void* pNext; + VkQueueGlobalPriority globalPriority; +} VkDeviceQueueGlobalPriorityCreateInfo; + +typedef struct VkPhysicalDeviceGlobalPriorityQueryFeatures { + VkStructureType sType; + void* pNext; + VkBool32 globalPriorityQuery; +} VkPhysicalDeviceGlobalPriorityQueryFeatures; + +typedef struct VkQueueFamilyGlobalPriorityProperties { + VkStructureType sType; + void* pNext; + uint32_t priorityCount; + VkQueueGlobalPriority priorities[VK_MAX_GLOBAL_PRIORITY_SIZE]; +} VkQueueFamilyGlobalPriorityProperties; + +typedef struct VkPhysicalDeviceIndexTypeUint8Features { + VkStructureType sType; + void* pNext; + VkBool32 indexTypeUint8; +} VkPhysicalDeviceIndexTypeUint8Features; + +typedef struct VkMemoryMapInfo { + VkStructureType sType; + const void* pNext; + VkMemoryMapFlags flags; + VkDeviceMemory memory; + VkDeviceSize offset; + VkDeviceSize size; +} VkMemoryMapInfo; + +typedef struct VkMemoryUnmapInfo { + VkStructureType sType; + const void* pNext; + VkMemoryUnmapFlags flags; + VkDeviceMemory memory; +} VkMemoryUnmapInfo; + +typedef struct VkPhysicalDeviceMaintenance5Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance5; +} VkPhysicalDeviceMaintenance5Features; + +typedef struct VkPhysicalDeviceMaintenance5Properties { + VkStructureType sType; + void* pNext; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; +} VkPhysicalDeviceMaintenance5Properties; + +typedef struct VkImageSubresource2 { + VkStructureType sType; + void* pNext; + VkImageSubresource imageSubresource; +} VkImageSubresource2; + +typedef struct VkDeviceImageSubresourceInfo { + VkStructureType sType; + const void* pNext; + const VkImageCreateInfo* pCreateInfo; + const VkImageSubresource2* pSubresource; +} VkDeviceImageSubresourceInfo; + +typedef struct VkSubresourceLayout2 { + VkStructureType sType; + void* pNext; + VkSubresourceLayout subresourceLayout; +} VkSubresourceLayout2; + +typedef struct VkBufferUsageFlags2CreateInfo { + VkStructureType sType; + const void* pNext; + VkBufferUsageFlags2 usage; +} VkBufferUsageFlags2CreateInfo; + +typedef struct VkPhysicalDeviceMaintenance6Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance6; +} VkPhysicalDeviceMaintenance6Features; + +typedef struct VkPhysicalDeviceMaintenance6Properties { + VkStructureType sType; + void* pNext; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; +} VkPhysicalDeviceMaintenance6Properties; + +typedef struct VkBindMemoryStatus { + VkStructureType sType; + const void* pNext; + VkResult* pResult; +} VkBindMemoryStatus; + +typedef struct VkPhysicalDeviceHostImageCopyFeatures { + VkStructureType sType; + void* pNext; + VkBool32 hostImageCopy; +} VkPhysicalDeviceHostImageCopyFeatures; + +typedef struct VkPhysicalDeviceHostImageCopyProperties { + VkStructureType sType; + void* pNext; + uint32_t copySrcLayoutCount; + VkImageLayout* pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout* pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceHostImageCopyProperties; + +typedef struct VkMemoryToImageCopy { + VkStructureType sType; + const void* pNext; + const void* pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkMemoryToImageCopy; + +typedef struct VkImageToMemoryCopy { + VkStructureType sType; + const void* pNext; + void* pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkImageToMemoryCopy; + +typedef struct VkCopyMemoryToImageInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkMemoryToImageCopy* pRegions; +} VkCopyMemoryToImageInfo; + +typedef struct VkCopyImageToMemoryInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + uint32_t regionCount; + const VkImageToMemoryCopy* pRegions; +} VkCopyImageToMemoryInfo; + +typedef struct VkCopyImageToImageInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2* pRegions; +} VkCopyImageToImageInfo; + +typedef struct VkHostImageLayoutTransitionInfo { + VkStructureType sType; + const void* pNext; + VkImage image; + VkImageLayout oldLayout; + VkImageLayout newLayout; + VkImageSubresourceRange subresourceRange; +} VkHostImageLayoutTransitionInfo; + +typedef struct VkSubresourceHostMemcpySize { + VkStructureType sType; + void* pNext; + VkDeviceSize size; +} VkSubresourceHostMemcpySize; + +typedef struct VkHostImageCopyDevicePerformanceQuery { + VkStructureType sType; + void* pNext; + VkBool32 optimalDeviceAccess; + VkBool32 identicalMemoryLayout; +} VkHostImageCopyDevicePerformanceQuery; + +typedef struct VkPhysicalDeviceShaderSubgroupRotateFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; +} VkPhysicalDeviceShaderSubgroupRotateFeatures; + +typedef struct VkPhysicalDeviceShaderFloatControls2Features { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloatControls2; +} VkPhysicalDeviceShaderFloatControls2Features; + +typedef struct VkPhysicalDeviceShaderExpectAssumeFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderExpectAssume; +} VkPhysicalDeviceShaderExpectAssumeFeatures; + +typedef struct VkPipelineCreateFlags2CreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags2 flags; +} VkPipelineCreateFlags2CreateInfo; + +typedef struct VkPhysicalDevicePushDescriptorProperties { + VkStructureType sType; + void* pNext; + uint32_t maxPushDescriptors; +} VkPhysicalDevicePushDescriptorProperties; + +typedef struct VkBindDescriptorSetsInfo { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t descriptorSetCount; + const VkDescriptorSet* pDescriptorSets; + uint32_t dynamicOffsetCount; + const uint32_t* pDynamicOffsets; +} VkBindDescriptorSetsInfo; + +typedef struct VkPushConstantsInfo { + VkStructureType sType; + const void* pNext; + VkPipelineLayout layout; + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; + const void* pValues; +} VkPushConstantsInfo; + +typedef struct VkPushDescriptorSetInfo { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; + uint32_t descriptorWriteCount; + const VkWriteDescriptorSet* pDescriptorWrites; +} VkPushDescriptorSetInfo; + +typedef struct VkPushDescriptorSetWithTemplateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorUpdateTemplate descriptorUpdateTemplate; + VkPipelineLayout layout; + uint32_t set; + const void* pData; +} VkPushDescriptorSetWithTemplateInfo; + +typedef struct VkPhysicalDevicePipelineProtectedAccessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineProtectedAccess; +} VkPhysicalDevicePipelineProtectedAccessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineRobustness; +} VkPhysicalDevicePipelineRobustnessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessProperties { + VkStructureType sType; + void* pNext; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; +} VkPhysicalDevicePipelineRobustnessProperties; + +typedef struct VkPipelineRobustnessCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineRobustnessBufferBehavior storageBuffers; + VkPipelineRobustnessBufferBehavior uniformBuffers; + VkPipelineRobustnessBufferBehavior vertexInputs; + VkPipelineRobustnessImageBehavior images; +} VkPipelineRobustnessCreateInfo; + +typedef struct VkPhysicalDeviceLineRasterizationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; +} VkPhysicalDeviceLineRasterizationFeatures; + +typedef struct VkPhysicalDeviceLineRasterizationProperties { + VkStructureType sType; + void* pNext; + uint32_t lineSubPixelPrecisionBits; +} VkPhysicalDeviceLineRasterizationProperties; + +typedef struct VkPipelineRasterizationLineStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkLineRasterizationMode lineRasterizationMode; + VkBool32 stippledLineEnable; + uint32_t lineStippleFactor; + uint16_t lineStipplePattern; +} VkPipelineRasterizationLineStateCreateInfo; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorProperties { + VkStructureType sType; + void* pNext; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; +} VkPhysicalDeviceVertexAttributeDivisorProperties; + +typedef struct VkVertexInputBindingDivisorDescription { + uint32_t binding; + uint32_t divisor; +} VkVertexInputBindingDivisorDescription; + +typedef struct VkPipelineVertexInputDivisorStateCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t vertexBindingDivisorCount; + const VkVertexInputBindingDivisorDescription* pVertexBindingDivisors; +} VkPipelineVertexInputDivisorStateCreateInfo; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorFeatures { + VkStructureType sType; + void* pNext; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; +} VkPhysicalDeviceVertexAttributeDivisorFeatures; + +typedef struct VkRenderingAreaInfo { + VkStructureType sType; + const void* pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkRenderingAreaInfo; + +typedef struct VkPhysicalDeviceDynamicRenderingLocalReadFeatures { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRenderingLocalRead; +} VkPhysicalDeviceDynamicRenderingLocalReadFeatures; + +typedef struct VkRenderingAttachmentLocationInfo { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const uint32_t* pColorAttachmentLocations; +} VkRenderingAttachmentLocationInfo; + +typedef struct VkRenderingInputAttachmentIndexInfo { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const uint32_t* pColorAttachmentInputIndices; + const uint32_t* pDepthInputAttachmentIndex; + const uint32_t* pStencilInputAttachmentIndex; +} VkRenderingInputAttachmentIndexInfo; + +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2)(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2)(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayout)(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImage)(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemory)(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImage)(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayout)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStipple)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer2)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularity)(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocations)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndices)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData); + +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate( + VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( + VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2( + VkCommandBuffer commandBuffer, + const VkPushConstantsInfo* pPushConstantsInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); + +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); +#endif + + +// VK_KHR_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_surface 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) +#define VK_KHR_SURFACE_SPEC_VERSION 25 +#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" + +typedef enum VkPresentModeKHR { + VK_PRESENT_MODE_IMMEDIATE_KHR = 0, + VK_PRESENT_MODE_MAILBOX_KHR = 1, + VK_PRESENT_MODE_FIFO_KHR = 2, + VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, + VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, + VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, + VK_PRESENT_MODE_FIFO_LATEST_READY_KHR = 1000361000, + VK_PRESENT_MODE_FIFO_LATEST_READY_EXT = VK_PRESENT_MODE_FIFO_LATEST_READY_KHR, + VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentModeKHR; + +typedef enum VkColorSpaceKHR { + VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, + VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, + VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003, + VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, + VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, + VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, + VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, + VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, + // VK_COLOR_SPACE_DOLBYVISION_EXT is legacy, but no reason was given in the API XML + VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, + VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, + VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, + VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, + VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, + VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, + VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, + // VK_COLORSPACE_SRGB_NONLINEAR_KHR is a legacy alias + VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + // VK_COLOR_SPACE_DCI_P3_LINEAR_EXT is a legacy alias + VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, + VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkColorSpaceKHR; + +typedef enum VkSurfaceTransformFlagBitsKHR { + VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001, + VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002, + VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004, + VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080, + VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100, + VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSurfaceTransformFlagBitsKHR; + +typedef enum VkCompositeAlphaFlagBitsKHR { + VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, + VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002, + VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004, + VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008, + VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkCompositeAlphaFlagBitsKHR; +typedef VkFlags VkCompositeAlphaFlagsKHR; +typedef VkFlags VkSurfaceTransformFlagsKHR; +typedef struct VkSurfaceCapabilitiesKHR { + uint32_t minImageCount; + uint32_t maxImageCount; + VkExtent2D currentExtent; + VkExtent2D minImageExtent; + VkExtent2D maxImageExtent; + uint32_t maxImageArrayLayers; + VkSurfaceTransformFlagsKHR supportedTransforms; + VkSurfaceTransformFlagBitsKHR currentTransform; + VkCompositeAlphaFlagsKHR supportedCompositeAlpha; + VkImageUsageFlags supportedUsageFlags; +} VkSurfaceCapabilitiesKHR; + +typedef struct VkSurfaceFormatKHR { + VkFormat format; + VkColorSpaceKHR colorSpace; +} VkSurfaceFormatKHR; + +typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( + VkInstance instance, + VkSurfaceKHR surface, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32* pSupported); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); +#endif +#endif + + +// VK_KHR_swapchain is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_swapchain 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) +#define VK_KHR_SWAPCHAIN_SPEC_VERSION 70 +#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" + +typedef enum VkSwapchainCreateFlagBitsKHR { + VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001, + VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002, + VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004, + VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT = 0x00000200, + VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR = 0x00000040, + VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR = 0x00000080, + VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR = 0x00000008, + VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT = VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR, + VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSwapchainCreateFlagBitsKHR; +typedef VkFlags VkSwapchainCreateFlagsKHR; + +typedef enum VkDeviceGroupPresentModeFlagBitsKHR { + VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001, + VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002, + VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004, + VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008, + VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDeviceGroupPresentModeFlagBitsKHR; +typedef VkFlags VkDeviceGroupPresentModeFlagsKHR; +typedef struct VkSwapchainCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkSwapchainCreateFlagsKHR flags; + VkSurfaceKHR surface; + uint32_t minImageCount; + VkFormat imageFormat; + VkColorSpaceKHR imageColorSpace; + VkExtent2D imageExtent; + uint32_t imageArrayLayers; + VkImageUsageFlags imageUsage; + VkSharingMode imageSharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; + VkSurfaceTransformFlagBitsKHR preTransform; + VkCompositeAlphaFlagBitsKHR compositeAlpha; + VkPresentModeKHR presentMode; + VkBool32 clipped; + VkSwapchainKHR oldSwapchain; +} VkSwapchainCreateInfoKHR; + +typedef struct VkPresentInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreCount; + const VkSemaphore* pWaitSemaphores; + uint32_t swapchainCount; + const VkSwapchainKHR* pSwapchains; + const uint32_t* pImageIndices; + VkResult* pResults; +} VkPresentInfoKHR; + +typedef struct VkImageSwapchainCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkSwapchainKHR swapchain; +} VkImageSwapchainCreateInfoKHR; + +typedef struct VkBindImageMemorySwapchainInfoKHR { + VkStructureType sType; + const void* pNext; + VkSwapchainKHR swapchain; + uint32_t imageIndex; +} VkBindImageMemorySwapchainInfoKHR; + +typedef struct VkAcquireNextImageInfoKHR { + VkStructureType sType; + const void* pNext; + VkSwapchainKHR swapchain; + uint64_t timeout; + VkSemaphore semaphore; + VkFence fence; + uint32_t deviceMask; +} VkAcquireNextImageInfoKHR; + +typedef struct VkDeviceGroupPresentCapabilitiesKHR { + VkStructureType sType; + void* pNext; + uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE]; + VkDeviceGroupPresentModeFlagsKHR modes; +} VkDeviceGroupPresentCapabilitiesKHR; + +typedef struct VkDeviceGroupPresentInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const uint32_t* pDeviceMasks; + VkDeviceGroupPresentModeFlagBitsKHR mode; +} VkDeviceGroupPresentInfoKHR; + +typedef struct VkDeviceGroupSwapchainCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceGroupPresentModeFlagsKHR modes; +} VkDeviceGroupSwapchainCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain); +typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex); +typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( + VkDevice device, + const VkSwapchainCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchain); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( + VkDevice device, + VkSwapchainKHR swapchain, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pSwapchainImageCount, + VkImage* pSwapchainImages); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint64_t timeout, + VkSemaphore semaphore, + VkFence fence, + uint32_t* pImageIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( + VkQueue queue, + const VkPresentInfoKHR* pPresentInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( + VkDevice device, + VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( + VkDevice device, + VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR* pModes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pRectCount, + VkRect2D* pRects); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( + VkDevice device, + const VkAcquireNextImageInfoKHR* pAcquireInfo, + uint32_t* pImageIndex); +#endif +#endif + + +// VK_KHR_display is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_display 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) +#define VK_KHR_DISPLAY_SPEC_VERSION 23 +#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display" +typedef VkFlags VkDisplayModeCreateFlagsKHR; + +typedef enum VkDisplayPlaneAlphaFlagBitsKHR { + VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, + VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002, + VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004, + VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008, + VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDisplayPlaneAlphaFlagBitsKHR; +typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; +typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; +typedef struct VkDisplayModeParametersKHR { + VkExtent2D visibleRegion; + uint32_t refreshRate; +} VkDisplayModeParametersKHR; + +typedef struct VkDisplayModeCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkDisplayModeCreateFlagsKHR flags; + VkDisplayModeParametersKHR parameters; +} VkDisplayModeCreateInfoKHR; + +typedef struct VkDisplayModePropertiesKHR { + VkDisplayModeKHR displayMode; + VkDisplayModeParametersKHR parameters; +} VkDisplayModePropertiesKHR; + +typedef struct VkDisplayPlaneCapabilitiesKHR { + VkDisplayPlaneAlphaFlagsKHR supportedAlpha; + VkOffset2D minSrcPosition; + VkOffset2D maxSrcPosition; + VkExtent2D minSrcExtent; + VkExtent2D maxSrcExtent; + VkOffset2D minDstPosition; + VkOffset2D maxDstPosition; + VkExtent2D minDstExtent; + VkExtent2D maxDstExtent; +} VkDisplayPlaneCapabilitiesKHR; + +typedef struct VkDisplayPlanePropertiesKHR { + VkDisplayKHR currentDisplay; + uint32_t currentStackIndex; +} VkDisplayPlanePropertiesKHR; + +typedef struct VkDisplayPropertiesKHR { + VkDisplayKHR display; + const char* displayName; + VkExtent2D physicalDimensions; + VkExtent2D physicalResolution; + VkSurfaceTransformFlagsKHR supportedTransforms; + VkBool32 planeReorderPossible; + VkBool32 persistentContent; +} VkDisplayPropertiesKHR; + +typedef struct VkDisplaySurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkDisplaySurfaceCreateFlagsKHR flags; + VkDisplayModeKHR displayMode; + uint32_t planeIndex; + uint32_t planeStackIndex; + VkSurfaceTransformFlagBitsKHR transform; + float globalAlpha; + VkDisplayPlaneAlphaFlagBitsKHR alphaMode; + VkExtent2D imageExtent; +} VkDisplaySurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays); +typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); +typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( + VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t* pDisplayCount, + VkDisplayKHR* pDisplays); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDisplayModeKHR* pMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( + VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_KHR_display_swapchain is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_display_swapchain 1 +#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10 +#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain" +typedef struct VkDisplayPresentInfoKHR { + VkStructureType sType; + const void* pNext; + VkRect2D srcRect; + VkRect2D dstRect; + VkBool32 persistent; +} VkDisplayPresentInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchains); +#endif +#endif + + +// VK_KHR_sampler_mirror_clamp_to_edge is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_sampler_mirror_clamp_to_edge 1 +#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3 +#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge" + + +// VK_KHR_video_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_queue 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) +#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 8 +#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue" + +typedef enum VkQueryResultStatusKHR { + VK_QUERY_RESULT_STATUS_ERROR_KHR = -1, + VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0, + VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1, + VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR = -1000299000, + VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkQueryResultStatusKHR; + +typedef enum VkVideoCodecOperationFlagBitsKHR { + VK_VIDEO_CODEC_OPERATION_NONE_KHR = 0, + VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR = 0x00010000, + VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR = 0x00020000, + VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR = 0x00000001, + VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR = 0x00000002, + VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR = 0x00000004, + VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR = 0x00040000, + VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR = 0x00000008, + VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCodecOperationFlagBitsKHR; +typedef VkFlags VkVideoCodecOperationFlagsKHR; + +typedef enum VkVideoChromaSubsamplingFlagBitsKHR { + VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR = 0, + VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001, + VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002, + VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004, + VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008, + VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoChromaSubsamplingFlagBitsKHR; +typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; + +typedef enum VkVideoComponentBitDepthFlagBitsKHR { + VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0, + VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001, + VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004, + VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010, + VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoComponentBitDepthFlagBitsKHR; +typedef VkFlags VkVideoComponentBitDepthFlagsKHR; + +typedef enum VkVideoCapabilityFlagBitsKHR { + VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001, + VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002, + VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCapabilityFlagBitsKHR; +typedef VkFlags VkVideoCapabilityFlagsKHR; + +typedef enum VkVideoSessionCreateFlagBitsKHR { + VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR = 0x00000002, + VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR = 0x00000004, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000008, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x00000010, + VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR = 0x00000020, + VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionCreateFlagBitsKHR; +typedef VkFlags VkVideoSessionCreateFlagsKHR; + +typedef enum VkVideoSessionParametersCreateFlagBitsKHR { + VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR = 0x00000001, + VK_VIDEO_SESSION_PARAMETERS_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionParametersCreateFlagBitsKHR; +typedef VkFlags VkVideoSessionParametersCreateFlagsKHR; +typedef VkFlags VkVideoBeginCodingFlagsKHR; +typedef VkFlags VkVideoEndCodingFlagsKHR; + +typedef enum VkVideoCodingControlFlagBitsKHR { + VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001, + VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR = 0x00000002, + VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR = 0x00000004, + VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCodingControlFlagBitsKHR; +typedef VkFlags VkVideoCodingControlFlagsKHR; +typedef struct VkQueueFamilyQueryResultStatusPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 queryResultStatusSupport; +} VkQueueFamilyQueryResultStatusPropertiesKHR; + +typedef struct VkQueueFamilyVideoPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoCodecOperationFlagsKHR videoCodecOperations; +} VkQueueFamilyVideoPropertiesKHR; + +typedef struct VkVideoProfileInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoCodecOperationFlagBitsKHR videoCodecOperation; + VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; + VkVideoComponentBitDepthFlagsKHR lumaBitDepth; + VkVideoComponentBitDepthFlagsKHR chromaBitDepth; +} VkVideoProfileInfoKHR; + +typedef struct VkVideoProfileListInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t profileCount; + const VkVideoProfileInfoKHR* pProfiles; +} VkVideoProfileListInfoKHR; + +typedef struct VkVideoCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoCapabilityFlagsKHR flags; + VkDeviceSize minBitstreamBufferOffsetAlignment; + VkDeviceSize minBitstreamBufferSizeAlignment; + VkExtent2D pictureAccessGranularity; + VkExtent2D minCodedExtent; + VkExtent2D maxCodedExtent; + uint32_t maxDpbSlots; + uint32_t maxActiveReferencePictures; + VkExtensionProperties stdHeaderVersion; +} VkVideoCapabilitiesKHR; + +typedef struct VkPhysicalDeviceVideoFormatInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageUsageFlags imageUsage; +} VkPhysicalDeviceVideoFormatInfoKHR; + +typedef struct VkVideoFormatPropertiesKHR { + VkStructureType sType; + void* pNext; + VkFormat format; + VkComponentMapping componentMapping; + VkImageCreateFlags imageCreateFlags; + VkImageType imageType; + VkImageTiling imageTiling; + VkImageUsageFlags imageUsageFlags; +} VkVideoFormatPropertiesKHR; + +typedef struct VkVideoPictureResourceInfoKHR { + VkStructureType sType; + const void* pNext; + VkOffset2D codedOffset; + VkExtent2D codedExtent; + uint32_t baseArrayLayer; + VkImageView imageViewBinding; +} VkVideoPictureResourceInfoKHR; + +typedef struct VkVideoReferenceSlotInfoKHR { + VkStructureType sType; + const void* pNext; + int32_t slotIndex; + const VkVideoPictureResourceInfoKHR* pPictureResource; +} VkVideoReferenceSlotInfoKHR; + +typedef struct VkVideoSessionMemoryRequirementsKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryBindIndex; + VkMemoryRequirements memoryRequirements; +} VkVideoSessionMemoryRequirementsKHR; + +typedef struct VkBindVideoSessionMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t memoryBindIndex; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkDeviceSize memorySize; +} VkBindVideoSessionMemoryInfoKHR; + +typedef struct VkVideoSessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + VkVideoSessionCreateFlagsKHR flags; + const VkVideoProfileInfoKHR* pVideoProfile; + VkFormat pictureFormat; + VkExtent2D maxCodedExtent; + VkFormat referencePictureFormat; + uint32_t maxDpbSlots; + uint32_t maxActiveReferencePictures; + const VkExtensionProperties* pStdHeaderVersion; +} VkVideoSessionCreateInfoKHR; + +typedef struct VkVideoSessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoSessionParametersCreateFlagsKHR flags; + VkVideoSessionParametersKHR videoSessionParametersTemplate; + VkVideoSessionKHR videoSession; +} VkVideoSessionParametersCreateInfoKHR; + +typedef struct VkVideoSessionParametersUpdateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t updateSequenceCount; +} VkVideoSessionParametersUpdateInfoKHR; + +typedef struct VkVideoBeginCodingInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoBeginCodingFlagsKHR flags; + VkVideoSessionKHR videoSession; + VkVideoSessionParametersKHR videoSessionParameters; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR* pReferenceSlots; +} VkVideoBeginCodingInfoKHR; + +typedef struct VkVideoEndCodingInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEndCodingFlagsKHR flags; +} VkVideoEndCodingInfoKHR; + +typedef struct VkVideoCodingControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoCodingControlFlagsKHR flags; +} VkVideoCodingControlInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileInfoKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession); +typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pMemoryRequirementsCount, VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t bindSessionMemoryInfoCount, const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos); +typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters); +typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); +typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo); +typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + const VkVideoProfileInfoKHR* pVideoProfile, + VkVideoCapabilitiesKHR* pCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, + uint32_t* pVideoFormatPropertyCount, + VkVideoFormatPropertiesKHR* pVideoFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( + VkDevice device, + const VkVideoSessionCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionKHR* pVideoSession); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t* pMemoryRequirementsCount, + VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( + VkDevice device, + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionParametersKHR* pVideoSessionParameters); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoBeginCodingInfoKHR* pBeginInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoEndCodingInfoKHR* pEndCodingInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoCodingControlInfoKHR* pCodingControlInfo); +#endif +#endif + + +// VK_KHR_video_decode_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_queue 1 +#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 8 +#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue" + +typedef enum VkVideoDecodeCapabilityFlagBitsKHR { + VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR = 0x00000001, + VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR = 0x00000002, + VK_VIDEO_DECODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeCapabilityFlagBitsKHR; +typedef VkFlags VkVideoDecodeCapabilityFlagsKHR; + +typedef enum VkVideoDecodeUsageFlagBitsKHR { + VK_VIDEO_DECODE_USAGE_DEFAULT_KHR = 0, + VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR = 0x00000001, + VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR = 0x00000002, + VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR = 0x00000004, + VK_VIDEO_DECODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeUsageFlagBitsKHR; +typedef VkFlags VkVideoDecodeUsageFlagsKHR; +typedef VkFlags VkVideoDecodeFlagsKHR; +typedef struct VkVideoDecodeCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoDecodeCapabilityFlagsKHR flags; +} VkVideoDecodeCapabilitiesKHR; + +typedef struct VkVideoDecodeUsageInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoDecodeUsageFlagsKHR videoUsageHints; +} VkVideoDecodeUsageInfoKHR; + +typedef struct VkVideoDecodeInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoDecodeFlagsKHR flags; + VkBuffer srcBuffer; + VkDeviceSize srcBufferOffset; + VkDeviceSize srcBufferRange; + VkVideoPictureResourceInfoKHR dstPictureResource; + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR* pReferenceSlots; +} VkVideoDecodeInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pDecodeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoDecodeInfoKHR* pDecodeInfo); +#endif +#endif + + +// VK_KHR_video_encode_h264 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_h264 1 +#include "vk_video/vulkan_video_codec_h264std.h" +#include "vk_video/vulkan_video_codec_h264std_encode.h" +#define VK_KHR_VIDEO_ENCODE_H264_SPEC_VERSION 14 +#define VK_KHR_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_KHR_video_encode_h264" + +typedef enum VkVideoEncodeH264CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H264_CAPABILITY_MB_QP_DIFF_WRAPAROUND_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeH264CapabilityFlagsKHR; + +typedef enum VkVideoEncodeH264StdFlagBitsKHR { + VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR = 0x00000800, + VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR = 0x00001000, + VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR = 0x00002000, + VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR = 0x00004000, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR = 0x00008000, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR = 0x00010000, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR = 0x00020000, + VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR = 0x00080000, + VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR = 0x00100000, + VK_VIDEO_ENCODE_H264_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeH264StdFlagsKHR; + +typedef enum VkVideoEncodeH264RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeH264RateControlFlagsKHR; +typedef struct VkVideoEncodeH264CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH264CapabilityFlagsKHR flags; + StdVideoH264LevelIdc maxLevelIdc; + uint32_t maxSliceCount; + uint32_t maxPPictureL0ReferenceCount; + uint32_t maxBPictureL0ReferenceCount; + uint32_t maxL1ReferenceCount; + uint32_t maxTemporalLayerCount; + VkBool32 expectDyadicTemporalLayerPattern; + int32_t minQp; + int32_t maxQp; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeH264CapabilitiesKHR; + +typedef struct VkVideoEncodeH264QpKHR { + int32_t qpI; + int32_t qpP; + int32_t qpB; +} VkVideoEncodeH264QpKHR; + +typedef struct VkVideoEncodeH264QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH264RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredIdrPeriod; + uint32_t preferredConsecutiveBFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeH264QpKHR preferredConstantQp; + uint32_t preferredMaxL0ReferenceCount; + uint32_t preferredMaxL1ReferenceCount; + VkBool32 preferredStdEntropyCodingModeFlag; +} VkVideoEncodeH264QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeH264SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevelIdc; + StdVideoH264LevelIdc maxLevelIdc; +} VkVideoEncodeH264SessionCreateInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdSPSCount; + const StdVideoH264SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH264PictureParameterSet* pStdPPSs; +} VkVideoEncodeH264SessionParametersAddInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoEncodeH264SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoEncodeH264SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersGetInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 writeStdSPS; + VkBool32 writeStdPPS; + uint32_t stdSPSId; + uint32_t stdPPSId; +} VkVideoEncodeH264SessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersFeedbackInfoKHR { + VkStructureType sType; + void* pNext; + VkBool32 hasStdSPSOverrides; + VkBool32 hasStdPPSOverrides; +} VkVideoEncodeH264SessionParametersFeedbackInfoKHR; + +typedef struct VkVideoEncodeH264NaluSliceInfoKHR { + VkStructureType sType; + const void* pNext; + int32_t constantQp; + const StdVideoEncodeH264SliceHeader* pStdSliceHeader; +} VkVideoEncodeH264NaluSliceInfoKHR; + +typedef struct VkVideoEncodeH264PictureInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t naluSliceEntryCount; + const VkVideoEncodeH264NaluSliceInfoKHR* pNaluSliceEntries; + const StdVideoEncodeH264PictureInfo* pStdPictureInfo; + VkBool32 generatePrefixNalu; +} VkVideoEncodeH264PictureInfoKHR; + +typedef struct VkVideoEncodeH264DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeH264ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeH264DpbSlotInfoKHR; + +typedef struct VkVideoEncodeH264ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH264ProfileIdc stdProfileIdc; +} VkVideoEncodeH264ProfileInfoKHR; + +typedef struct VkVideoEncodeH264RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeH264RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t idrPeriod; + uint32_t consecutiveBFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeH264RateControlInfoKHR; + +typedef struct VkVideoEncodeH264FrameSizeKHR { + uint32_t frameISize; + uint32_t framePSize; + uint32_t frameBSize; +} VkVideoEncodeH264FrameSizeKHR; + +typedef struct VkVideoEncodeH264RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQp; + VkVideoEncodeH264QpKHR minQp; + VkBool32 useMaxQp; + VkVideoEncodeH264QpKHR maxQp; + VkBool32 useMaxFrameSize; + VkVideoEncodeH264FrameSizeKHR maxFrameSize; +} VkVideoEncodeH264RateControlLayerInfoKHR; + +typedef struct VkVideoEncodeH264GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingI; + uint32_t gopRemainingP; + uint32_t gopRemainingB; +} VkVideoEncodeH264GopRemainingFrameInfoKHR; + + + +// VK_KHR_video_encode_h265 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_h265 1 +#include "vk_video/vulkan_video_codec_h265std.h" +#include "vk_video/vulkan_video_codec_h265std_encode.h" +#define VK_KHR_VIDEO_ENCODE_H265_SPEC_VERSION 14 +#define VK_KHR_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_KHR_video_encode_h265" + +typedef enum VkVideoEncodeH265CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR = 0x00000800, + VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265CapabilityFlagsKHR; + +typedef enum VkVideoEncodeH265StdFlagBitsKHR { + VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR = 0x00000800, + VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR = 0x00001000, + VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR = 0x00002000, + VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR = 0x00004000, + VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR = 0x00008000, + VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR = 0x00010000, + VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR = 0x00020000, + VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR = 0x00040000, + VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR = 0x00080000, + VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR = 0x00100000, + VK_VIDEO_ENCODE_H265_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265StdFlagsKHR; + +typedef enum VkVideoEncodeH265CtbSizeFlagBitsKHR { + VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265CtbSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265CtbSizeFlagsKHR; + +typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265TransformBlockSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsKHR; + +typedef enum VkVideoEncodeH265RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265RateControlFlagsKHR; +typedef struct VkVideoEncodeH265CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265CapabilityFlagsKHR flags; + StdVideoH265LevelIdc maxLevelIdc; + uint32_t maxSliceSegmentCount; + VkExtent2D maxTiles; + VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes; + VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes; + uint32_t maxPPictureL0ReferenceCount; + uint32_t maxBPictureL0ReferenceCount; + uint32_t maxL1ReferenceCount; + uint32_t maxSubLayerCount; + VkBool32 expectDyadicTemporalSubLayerPattern; + int32_t minQp; + int32_t maxQp; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeH265CapabilitiesKHR; + +typedef struct VkVideoEncodeH265SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevelIdc; + StdVideoH265LevelIdc maxLevelIdc; +} VkVideoEncodeH265SessionCreateInfoKHR; + +typedef struct VkVideoEncodeH265QpKHR { + int32_t qpI; + int32_t qpP; + int32_t qpB; +} VkVideoEncodeH265QpKHR; + +typedef struct VkVideoEncodeH265QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredIdrPeriod; + uint32_t preferredConsecutiveBFrameCount; + uint32_t preferredSubLayerCount; + VkVideoEncodeH265QpKHR preferredConstantQp; + uint32_t preferredMaxL0ReferenceCount; + uint32_t preferredMaxL1ReferenceCount; +} VkVideoEncodeH265QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeH265SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdVPSCount; + const StdVideoH265VideoParameterSet* pStdVPSs; + uint32_t stdSPSCount; + const StdVideoH265SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH265PictureParameterSet* pStdPPSs; +} VkVideoEncodeH265SessionParametersAddInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdVPSCount; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoEncodeH265SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoEncodeH265SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersGetInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 writeStdVPS; + VkBool32 writeStdSPS; + VkBool32 writeStdPPS; + uint32_t stdVPSId; + uint32_t stdSPSId; + uint32_t stdPPSId; +} VkVideoEncodeH265SessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersFeedbackInfoKHR { + VkStructureType sType; + void* pNext; + VkBool32 hasStdVPSOverrides; + VkBool32 hasStdSPSOverrides; + VkBool32 hasStdPPSOverrides; +} VkVideoEncodeH265SessionParametersFeedbackInfoKHR; + +typedef struct VkVideoEncodeH265NaluSliceSegmentInfoKHR { + VkStructureType sType; + const void* pNext; + int32_t constantQp; + const StdVideoEncodeH265SliceSegmentHeader* pStdSliceSegmentHeader; +} VkVideoEncodeH265NaluSliceSegmentInfoKHR; + +typedef struct VkVideoEncodeH265PictureInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t naluSliceSegmentEntryCount; + const VkVideoEncodeH265NaluSliceSegmentInfoKHR* pNaluSliceSegmentEntries; + const StdVideoEncodeH265PictureInfo* pStdPictureInfo; +} VkVideoEncodeH265PictureInfoKHR; + +typedef struct VkVideoEncodeH265DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeH265ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeH265DpbSlotInfoKHR; + +typedef struct VkVideoEncodeH265ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH265ProfileIdc stdProfileIdc; +} VkVideoEncodeH265ProfileInfoKHR; + +typedef struct VkVideoEncodeH265RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeH265RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t idrPeriod; + uint32_t consecutiveBFrameCount; + uint32_t subLayerCount; +} VkVideoEncodeH265RateControlInfoKHR; + +typedef struct VkVideoEncodeH265FrameSizeKHR { + uint32_t frameISize; + uint32_t framePSize; + uint32_t frameBSize; +} VkVideoEncodeH265FrameSizeKHR; + +typedef struct VkVideoEncodeH265RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQp; + VkVideoEncodeH265QpKHR minQp; + VkBool32 useMaxQp; + VkVideoEncodeH265QpKHR maxQp; + VkBool32 useMaxFrameSize; + VkVideoEncodeH265FrameSizeKHR maxFrameSize; +} VkVideoEncodeH265RateControlLayerInfoKHR; + +typedef struct VkVideoEncodeH265GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingI; + uint32_t gopRemainingP; + uint32_t gopRemainingB; +} VkVideoEncodeH265GopRemainingFrameInfoKHR; + + + +// VK_KHR_video_decode_h264 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_h264 1 +#include "vk_video/vulkan_video_codec_h264std_decode.h" +#define VK_KHR_VIDEO_DECODE_H264_SPEC_VERSION 9 +#define VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME "VK_KHR_video_decode_h264" + +typedef enum VkVideoDecodeH264PictureLayoutFlagBitsKHR { + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR = 0, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR = 0x00000001, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR = 0x00000002, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeH264PictureLayoutFlagBitsKHR; +typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsKHR; +typedef struct VkVideoDecodeH264ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH264ProfileIdc stdProfileIdc; + VkVideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout; +} VkVideoDecodeH264ProfileInfoKHR; + +typedef struct VkVideoDecodeH264CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoH264LevelIdc maxLevelIdc; + VkOffset2D fieldOffsetGranularity; +} VkVideoDecodeH264CapabilitiesKHR; + +typedef struct VkVideoDecodeH264SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdSPSCount; + const StdVideoH264SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH264PictureParameterSet* pStdPPSs; +} VkVideoDecodeH264SessionParametersAddInfoKHR; + +typedef struct VkVideoDecodeH264SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoDecodeH264SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoDecodeH264SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeH264PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH264PictureInfo* pStdPictureInfo; + uint32_t sliceCount; + const uint32_t* pSliceOffsets; +} VkVideoDecodeH264PictureInfoKHR; + +typedef struct VkVideoDecodeH264DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH264ReferenceInfo* pStdReferenceInfo; +} VkVideoDecodeH264DpbSlotInfoKHR; + + + +// VK_KHR_dynamic_rendering is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_dynamic_rendering 1 +#define VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION 1 +#define VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME "VK_KHR_dynamic_rendering" +typedef VkRenderingFlags VkRenderingFlagsKHR; + +typedef VkRenderingFlagBits VkRenderingFlagBitsKHR; + +typedef VkRenderingInfo VkRenderingInfoKHR; + +typedef VkRenderingAttachmentInfo VkRenderingAttachmentInfoKHR; + +typedef VkPipelineRenderingCreateInfo VkPipelineRenderingCreateInfoKHR; + +typedef VkPhysicalDeviceDynamicRenderingFeatures VkPhysicalDeviceDynamicRenderingFeaturesKHR; + +typedef VkCommandBufferInheritanceRenderingInfo VkCommandBufferInheritanceRenderingInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderingKHR)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRenderingKHR)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR( + VkCommandBuffer commandBuffer); +#endif +#endif + + +// VK_KHR_multiview is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_multiview 1 +#define VK_KHR_MULTIVIEW_SPEC_VERSION 1 +#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview" +typedef VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR; + +typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR; + +typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR; + + + +// VK_KHR_get_physical_device_properties2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_get_physical_device_properties2 1 +#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2 +#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2" +typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR; + +typedef VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR; + +typedef VkFormatProperties2 VkFormatProperties2KHR; + +typedef VkImageFormatProperties2 VkImageFormatProperties2KHR; + +typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR; + +typedef VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR; + +typedef VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR; + +typedef VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR; + +typedef VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties); +#endif +#endif + + +// VK_KHR_device_group is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_device_group 1 +#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4 +#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group" +typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR; + +typedef VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR; + +typedef VkMemoryAllocateFlags VkMemoryAllocateFlagsKHR; + +typedef VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR; + +typedef VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR; + +typedef VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR; + +typedef VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR; + +typedef VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR; + +typedef VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR; + +typedef VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR; + +typedef VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); +typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( + VkCommandBuffer commandBuffer, + uint32_t deviceMask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( + VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); +#endif +#endif + + +// VK_KHR_shader_draw_parameters is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_draw_parameters 1 +#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1 +#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters" + + +// VK_KHR_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance1 1 +#define VK_KHR_MAINTENANCE_1_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_maintenance1" +// VK_KHR_MAINTENANCE1_SPEC_VERSION is a legacy alias +#define VK_KHR_MAINTENANCE1_SPEC_VERSION VK_KHR_MAINTENANCE_1_SPEC_VERSION +// VK_KHR_MAINTENANCE1_EXTENSION_NAME is a legacy alias +#define VK_KHR_MAINTENANCE1_EXTENSION_NAME VK_KHR_MAINTENANCE_1_EXTENSION_NAME +typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR; + +typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags); +#endif +#endif + + +// VK_KHR_device_group_creation is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_device_group_creation 1 +#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1 +#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation" +#define VK_MAX_DEVICE_GROUP_SIZE_KHR VK_MAX_DEVICE_GROUP_SIZE +typedef VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR; + +typedef VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( + VkInstance instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); +#endif +#endif + + +// VK_KHR_external_memory_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory_capabilities 1 +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities" +#define VK_LUID_SIZE_KHR VK_LUID_SIZE +typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR; + +typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR; + +typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR; + +typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR; + +typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR; + +typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR; + +typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR; + +typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR; + +typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR; + +typedef VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties); +#endif +#endif + + +// VK_KHR_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory 1 +#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory" +#define VK_QUEUE_FAMILY_EXTERNAL_KHR VK_QUEUE_FAMILY_EXTERNAL +typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR; + +typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR; + +typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR; + + + +// VK_KHR_external_memory_fd is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory_fd 1 +#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd" +typedef struct VkImportMemoryFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + int fd; +} VkImportMemoryFdInfoKHR; + +typedef struct VkMemoryFdPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryFdPropertiesKHR; + +typedef struct VkMemoryGetFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetFdInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( + VkDevice device, + const VkMemoryGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + int fd, + VkMemoryFdPropertiesKHR* pMemoryFdProperties); +#endif +#endif + + +// VK_KHR_external_semaphore_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore_capabilities 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities" +typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR; + +typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR; + +typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR; + +typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR; + +typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR; + +typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +#endif +#endif + + +// VK_KHR_external_semaphore is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore" +typedef VkSemaphoreImportFlags VkSemaphoreImportFlagsKHR; + +typedef VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR; + +typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR; + + + +// VK_KHR_external_semaphore_fd is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore_fd 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd" +typedef struct VkImportSemaphoreFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + int fd; +} VkImportSemaphoreFdInfoKHR; + +typedef struct VkSemaphoreGetFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetFdInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( + VkDevice device, + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( + VkDevice device, + const VkSemaphoreGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif +#endif + + +// VK_KHR_push_descriptor is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_push_descriptor 1 +#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2 +#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" +typedef VkPhysicalDevicePushDescriptorProperties VkPhysicalDevicePushDescriptorPropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR( + VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData); +#endif +#endif + + +// VK_KHR_shader_float16_int8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_float16_int8 1 +#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8" +typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR; + +typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR; + + + +// VK_KHR_16bit_storage is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_16bit_storage 1 +#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" +typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR; + + + +// VK_KHR_incremental_present is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_incremental_present 1 +#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2 +#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present" +typedef struct VkRectLayerKHR { + VkOffset2D offset; + VkExtent2D extent; + uint32_t layer; +} VkRectLayerKHR; + +typedef struct VkPresentRegionKHR { + uint32_t rectangleCount; + const VkRectLayerKHR* pRectangles; +} VkPresentRegionKHR; + +typedef struct VkPresentRegionsKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentRegionKHR* pRegions; +} VkPresentRegionsKHR; + + + +// VK_KHR_descriptor_update_template is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_descriptor_update_template 1 +typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR; + +#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1 +#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template" +typedef VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR; + +typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR; + +typedef VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR; + +typedef VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR( + VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void* pData); +#endif +#endif + + +// VK_KHR_imageless_framebuffer is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_imageless_framebuffer 1 +#define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1 +#define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer" +typedef VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR; + +typedef VkFramebufferAttachmentsCreateInfo VkFramebufferAttachmentsCreateInfoKHR; + +typedef VkFramebufferAttachmentImageInfo VkFramebufferAttachmentImageInfoKHR; + +typedef VkRenderPassAttachmentBeginInfo VkRenderPassAttachmentBeginInfoKHR; + + + +// VK_KHR_create_renderpass2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_create_renderpass2 1 +#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1 +#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2" +typedef VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR; + +typedef VkAttachmentDescription2 VkAttachmentDescription2KHR; + +typedef VkAttachmentReference2 VkAttachmentReference2KHR; + +typedef VkSubpassDescription2 VkSubpassDescription2KHR; + +typedef VkSubpassDependency2 VkSubpassDependency2KHR; + +typedef VkSubpassBeginInfo VkSubpassBeginInfoKHR; + +typedef VkSubpassEndInfo VkSubpassEndInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); +typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( + VkDevice device, + const VkRenderPassCreateInfo2* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + const VkSubpassBeginInfo* pSubpassBeginInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo* pSubpassBeginInfo, + const VkSubpassEndInfo* pSubpassEndInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo); +#endif +#endif + + +// VK_KHR_shared_presentable_image is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shared_presentable_image 1 +#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1 +#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image" +typedef struct VkSharedPresentSurfaceCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkImageUsageFlags sharedPresentSupportedUsageFlags; +} VkSharedPresentSurfaceCapabilitiesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( + VkDevice device, + VkSwapchainKHR swapchain); +#endif +#endif + + +// VK_KHR_external_fence_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence_capabilities 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities" +typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR; + +typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR; + +typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR; + +typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR; + +typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR; + +typedef VkExternalFenceProperties VkExternalFencePropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties); +#endif +#endif + + +// VK_KHR_external_fence is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence 1 +#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence" +typedef VkFenceImportFlags VkFenceImportFlagsKHR; + +typedef VkFenceImportFlagBits VkFenceImportFlagBitsKHR; + +typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR; + + + +// VK_KHR_external_fence_fd is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence_fd 1 +#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd" +typedef struct VkImportFenceFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkFenceImportFlags flags; + VkExternalFenceHandleTypeFlagBits handleType; + int fd; +} VkImportFenceFdInfoKHR; + +typedef struct VkFenceGetFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBits handleType; +} VkFenceGetFdInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( + VkDevice device, + const VkImportFenceFdInfoKHR* pImportFenceFdInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( + VkDevice device, + const VkFenceGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif +#endif + + +// VK_KHR_performance_query is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_performance_query 1 +#define VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION 1 +#define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query" + +typedef enum VkPerformanceCounterUnitKHR { + VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0, + VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1, + VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2, + VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3, + VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4, + VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5, + VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6, + VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7, + VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8, + VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9, + VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10, + VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterUnitKHR; + +typedef enum VkPerformanceCounterScopeKHR { + VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0, + VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1, + VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2, + // VK_QUERY_SCOPE_COMMAND_BUFFER_KHR is a legacy alias + VK_QUERY_SCOPE_COMMAND_BUFFER_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, + // VK_QUERY_SCOPE_RENDER_PASS_KHR is a legacy alias + VK_QUERY_SCOPE_RENDER_PASS_KHR = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, + // VK_QUERY_SCOPE_COMMAND_KHR is a legacy alias + VK_QUERY_SCOPE_COMMAND_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, + VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterScopeKHR; + +typedef enum VkPerformanceCounterStorageKHR { + VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0, + VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1, + VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2, + VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3, + VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4, + VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5, + VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterStorageKHR; + +typedef enum VkPerformanceCounterDescriptionFlagBitsKHR { + VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR = 0x00000001, + VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR = 0x00000002, + // VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR is a legacy alias + VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, + // VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR is a legacy alias + VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR, + VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterDescriptionFlagBitsKHR; +typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; + +typedef enum VkAcquireProfilingLockFlagBitsKHR { + VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAcquireProfilingLockFlagBitsKHR; +typedef VkFlags VkAcquireProfilingLockFlagsKHR; +typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 performanceCounterQueryPools; + VkBool32 performanceCounterMultipleQueryPools; +} VkPhysicalDevicePerformanceQueryFeaturesKHR; + +typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 allowCommandBufferQueryCopies; +} VkPhysicalDevicePerformanceQueryPropertiesKHR; + +typedef struct VkPerformanceCounterKHR { + VkStructureType sType; + void* pNext; + VkPerformanceCounterUnitKHR unit; + VkPerformanceCounterScopeKHR scope; + VkPerformanceCounterStorageKHR storage; + uint8_t uuid[VK_UUID_SIZE]; +} VkPerformanceCounterKHR; + +typedef struct VkPerformanceCounterDescriptionKHR { + VkStructureType sType; + void* pNext; + VkPerformanceCounterDescriptionFlagsKHR flags; + char name[VK_MAX_DESCRIPTION_SIZE]; + char category[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; +} VkPerformanceCounterDescriptionKHR; + +typedef struct VkQueryPoolPerformanceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + uint32_t counterIndexCount; + const uint32_t* pCounterIndices; +} VkQueryPoolPerformanceCreateInfoKHR; + +typedef union VkPerformanceCounterResultKHR { + int32_t int32; + int64_t int64; + uint32_t uint32; + uint64_t uint64; + float float32; + double float64; +} VkPerformanceCounterResultKHR; + +typedef struct VkAcquireProfilingLockInfoKHR { + VkStructureType sType; + const void* pNext; + VkAcquireProfilingLockFlagsKHR flags; + uint64_t timeout; +} VkAcquireProfilingLockInfoKHR; + +typedef struct VkPerformanceQuerySubmitInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t counterPassIndex; +} VkPerformanceQuerySubmitInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterKHR* pCounters, VkPerformanceCounterDescriptionKHR* pCounterDescriptions); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)(VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, uint32_t* pNumPasses); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireProfilingLockKHR)(VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkReleaseProfilingLockKHR)(VkDevice device); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterKHR* pCounters, + VkPerformanceCounterDescriptionKHR* pCounterDescriptions); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + VkPhysicalDevice physicalDevice, + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, + uint32_t* pNumPasses); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( + VkDevice device, + const VkAcquireProfilingLockInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( + VkDevice device); +#endif +#endif + + +// VK_KHR_maintenance2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance2 1 +#define VK_KHR_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_maintenance2" +// VK_KHR_MAINTENANCE2_SPEC_VERSION is a legacy alias +#define VK_KHR_MAINTENANCE2_SPEC_VERSION VK_KHR_MAINTENANCE_2_SPEC_VERSION +// VK_KHR_MAINTENANCE2_EXTENSION_NAME is a legacy alias +#define VK_KHR_MAINTENANCE2_EXTENSION_NAME VK_KHR_MAINTENANCE_2_EXTENSION_NAME +typedef VkPointClippingBehavior VkPointClippingBehaviorKHR; + +typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR; + +typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR; + +typedef VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR; + +typedef VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR; + +typedef VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR; + +typedef VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR; + + + +// VK_KHR_get_surface_capabilities2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_get_surface_capabilities2 1 +#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1 +#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2" +typedef struct VkPhysicalDeviceSurfaceInfo2KHR { + VkStructureType sType; + const void* pNext; + VkSurfaceKHR surface; +} VkPhysicalDeviceSurfaceInfo2KHR; + +typedef struct VkSurfaceCapabilities2KHR { + VkStructureType sType; + void* pNext; + VkSurfaceCapabilitiesKHR surfaceCapabilities; +} VkSurfaceCapabilities2KHR; + +typedef struct VkSurfaceFormat2KHR { + VkStructureType sType; + void* pNext; + VkSurfaceFormatKHR surfaceFormat; +} VkSurfaceFormat2KHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats); +#endif +#endif + + +// VK_KHR_variable_pointers is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_variable_pointers 1 +#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1 +#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers" +typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR; + +typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR; + + + +// VK_KHR_get_display_properties2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_get_display_properties2 1 +#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1 +#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2" +typedef struct VkDisplayProperties2KHR { + VkStructureType sType; + void* pNext; + VkDisplayPropertiesKHR displayProperties; +} VkDisplayProperties2KHR; + +typedef struct VkDisplayPlaneProperties2KHR { + VkStructureType sType; + void* pNext; + VkDisplayPlanePropertiesKHR displayPlaneProperties; +} VkDisplayPlaneProperties2KHR; + +typedef struct VkDisplayModeProperties2KHR { + VkStructureType sType; + void* pNext; + VkDisplayModePropertiesKHR displayModeProperties; +} VkDisplayModeProperties2KHR; + +typedef struct VkDisplayPlaneInfo2KHR { + VkStructureType sType; + const void* pNext; + VkDisplayModeKHR mode; + uint32_t planeIndex; +} VkDisplayPlaneInfo2KHR; + +typedef struct VkDisplayPlaneCapabilities2KHR { + VkStructureType sType; + void* pNext; + VkDisplayPlaneCapabilitiesKHR capabilities; +} VkDisplayPlaneCapabilities2KHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayProperties2KHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlaneProperties2KHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModeProperties2KHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR* pCapabilities); +#endif +#endif + + +// VK_KHR_dedicated_allocation is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_dedicated_allocation 1 +#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 +#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" +typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR; + +typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR; + + + +// VK_KHR_storage_buffer_storage_class is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_storage_buffer_storage_class 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" + + +// VK_KHR_shader_bfloat16 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_bfloat16 1 +#define VK_KHR_SHADER_BFLOAT16_SPEC_VERSION 1 +#define VK_KHR_SHADER_BFLOAT16_EXTENSION_NAME "VK_KHR_shader_bfloat16" +typedef struct VkPhysicalDeviceShaderBfloat16FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderBFloat16Type; + VkBool32 shaderBFloat16DotProduct; + VkBool32 shaderBFloat16CooperativeMatrix; +} VkPhysicalDeviceShaderBfloat16FeaturesKHR; + + + +// VK_KHR_relaxed_block_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_relaxed_block_layout 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout" + + +// VK_KHR_get_memory_requirements2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_get_memory_requirements2 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" +typedef VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR; + +typedef VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR; + +typedef VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR; + +typedef VkMemoryRequirements2 VkMemoryRequirements2KHR; + +typedef VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR; + +typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +#endif +#endif + + +// VK_KHR_image_format_list is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_image_format_list 1 +#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1 +#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list" +typedef VkImageFormatListCreateInfo VkImageFormatListCreateInfoKHR; + + + +// VK_KHR_sampler_ycbcr_conversion is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_sampler_ycbcr_conversion 1 +typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR; + +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14 +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" +typedef VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR; + +typedef VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR; + +typedef VkChromaLocation VkChromaLocationKHR; + +typedef VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR; + +typedef VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR; + +typedef VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR; + +typedef VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR; + +typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR; + +typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); +typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( + VkDevice device, + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSamplerYcbcrConversion* pYcbcrConversion); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( + VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks* pAllocator); +#endif +#endif + + +// VK_KHR_bind_memory2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_bind_memory2 1 +#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2" +typedef VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR; + +typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); +typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfo* pBindInfos); +#endif +#endif + + +// VK_KHR_maintenance3 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance3 1 +#define VK_KHR_MAINTENANCE_3_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_3_EXTENSION_NAME "VK_KHR_maintenance3" +// VK_KHR_MAINTENANCE3_SPEC_VERSION is a legacy alias +#define VK_KHR_MAINTENANCE3_SPEC_VERSION VK_KHR_MAINTENANCE_3_SPEC_VERSION +// VK_KHR_MAINTENANCE3_EXTENSION_NAME is a legacy alias +#define VK_KHR_MAINTENANCE3_EXTENSION_NAME VK_KHR_MAINTENANCE_3_EXTENSION_NAME +typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR; + +typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR; + +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport); +#endif +#endif + + +// VK_KHR_draw_indirect_count is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_draw_indirect_count 1 +#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1 +#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count" +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + + +// VK_KHR_shader_subgroup_extended_types is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_subgroup_extended_types 1 +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1 +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types" +typedef VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR; + + + +// VK_KHR_8bit_storage is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_8bit_storage 1 +#define VK_KHR_8BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage" +typedef VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR; + + + +// VK_KHR_shader_atomic_int64 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_atomic_int64 1 +#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1 +#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64" +typedef VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR; + + + +// VK_KHR_shader_clock is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_clock 1 +#define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1 +#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock" +typedef struct VkPhysicalDeviceShaderClockFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupClock; + VkBool32 shaderDeviceClock; +} VkPhysicalDeviceShaderClockFeaturesKHR; + + + +// VK_KHR_video_decode_h265 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_h265 1 +#include "vk_video/vulkan_video_codec_h265std_decode.h" +#define VK_KHR_VIDEO_DECODE_H265_SPEC_VERSION 8 +#define VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME "VK_KHR_video_decode_h265" +typedef struct VkVideoDecodeH265ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH265ProfileIdc stdProfileIdc; +} VkVideoDecodeH265ProfileInfoKHR; + +typedef struct VkVideoDecodeH265CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoH265LevelIdc maxLevelIdc; +} VkVideoDecodeH265CapabilitiesKHR; + +typedef struct VkVideoDecodeH265SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdVPSCount; + const StdVideoH265VideoParameterSet* pStdVPSs; + uint32_t stdSPSCount; + const StdVideoH265SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH265PictureParameterSet* pStdPPSs; +} VkVideoDecodeH265SessionParametersAddInfoKHR; + +typedef struct VkVideoDecodeH265SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdVPSCount; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoDecodeH265SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoDecodeH265SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeH265PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH265PictureInfo* pStdPictureInfo; + uint32_t sliceSegmentCount; + const uint32_t* pSliceSegmentOffsets; +} VkVideoDecodeH265PictureInfoKHR; + +typedef struct VkVideoDecodeH265DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH265ReferenceInfo* pStdReferenceInfo; +} VkVideoDecodeH265DpbSlotInfoKHR; + + + +// VK_KHR_global_priority is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_global_priority 1 +#define VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION 1 +#define VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME "VK_KHR_global_priority" +#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR VK_MAX_GLOBAL_PRIORITY_SIZE +typedef VkQueueGlobalPriority VkQueueGlobalPriorityKHR; + +typedef VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoKHR; + +typedef VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; + +typedef VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesKHR; + + + +// VK_KHR_driver_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_driver_properties 1 +#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1 +#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties" +#define VK_MAX_DRIVER_NAME_SIZE_KHR VK_MAX_DRIVER_NAME_SIZE +#define VK_MAX_DRIVER_INFO_SIZE_KHR VK_MAX_DRIVER_INFO_SIZE +typedef VkDriverId VkDriverIdKHR; + +typedef VkConformanceVersion VkConformanceVersionKHR; + +typedef VkPhysicalDeviceDriverProperties VkPhysicalDeviceDriverPropertiesKHR; + + + +// VK_KHR_shader_float_controls is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_float_controls 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4 +#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls" +typedef VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR; + +typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR; + + + +// VK_KHR_depth_stencil_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_depth_stencil_resolve 1 +#define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1 +#define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve" +typedef VkResolveModeFlagBits VkResolveModeFlagBitsKHR; + +typedef VkResolveModeFlags VkResolveModeFlagsKHR; + +typedef VkSubpassDescriptionDepthStencilResolve VkSubpassDescriptionDepthStencilResolveKHR; + +typedef VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR; + + + +// VK_KHR_swapchain_mutable_format is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_swapchain_mutable_format 1 +#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1 +#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format" + + +// VK_KHR_timeline_semaphore is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_timeline_semaphore 1 +#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2 +#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore" +typedef VkSemaphoreType VkSemaphoreTypeKHR; + +typedef VkSemaphoreWaitFlagBits VkSemaphoreWaitFlagBitsKHR; + +typedef VkSemaphoreWaitFlags VkSemaphoreWaitFlagsKHR; + +typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR; + +typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR; + +typedef VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR; + +typedef VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR; + +typedef VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR; + +typedef VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); +typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); +typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( + VkDevice device, + VkSemaphore semaphore, + uint64_t* pValue); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( + VkDevice device, + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( + VkDevice device, + const VkSemaphoreSignalInfo* pSignalInfo); +#endif +#endif + + +// VK_KHR_vulkan_memory_model is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_vulkan_memory_model 1 +#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3 +#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model" +typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR; + + + +// VK_KHR_shader_terminate_invocation is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_terminate_invocation 1 +#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1 +#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation" +typedef VkPhysicalDeviceShaderTerminateInvocationFeatures VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR; + + + +// VK_KHR_fragment_shading_rate is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_fragment_shading_rate 1 +#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 2 +#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate" + +typedef enum VkFragmentShadingRateCombinerOpKHR { + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4, + VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF +} VkFragmentShadingRateCombinerOpKHR; +typedef struct VkFragmentShadingRateAttachmentInfoKHR { + VkStructureType sType; + const void* pNext; + const VkAttachmentReference2* pFragmentShadingRateAttachment; + VkExtent2D shadingRateAttachmentTexelSize; +} VkFragmentShadingRateAttachmentInfoKHR; + +typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExtent2D fragmentSize; + VkFragmentShadingRateCombinerOpKHR combinerOps[2]; +} VkPipelineFragmentShadingRateStateCreateInfoKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineFragmentShadingRate; + VkBool32 primitiveFragmentShadingRate; + VkBool32 attachmentFragmentShadingRate; +} VkPhysicalDeviceFragmentShadingRateFeaturesKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D minFragmentShadingRateAttachmentTexelSize; + VkExtent2D maxFragmentShadingRateAttachmentTexelSize; + uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio; + VkBool32 primitiveFragmentShadingRateWithMultipleViewports; + VkBool32 layeredShadingRateAttachments; + VkBool32 fragmentShadingRateNonTrivialCombinerOps; + VkExtent2D maxFragmentSize; + uint32_t maxFragmentSizeAspectRatio; + uint32_t maxFragmentShadingRateCoverageSamples; + VkSampleCountFlagBits maxFragmentShadingRateRasterizationSamples; + VkBool32 fragmentShadingRateWithShaderDepthStencilWrites; + VkBool32 fragmentShadingRateWithSampleMask; + VkBool32 fragmentShadingRateWithShaderSampleMask; + VkBool32 fragmentShadingRateWithConservativeRasterization; + VkBool32 fragmentShadingRateWithFragmentShaderInterlock; + VkBool32 fragmentShadingRateWithCustomSampleLocations; + VkBool32 fragmentShadingRateStrictMultiplyCombiner; +} VkPhysicalDeviceFragmentShadingRatePropertiesKHR; + +typedef struct VkPhysicalDeviceFragmentShadingRateKHR { + VkStructureType sType; + void* pNext; + VkSampleCountFlags sampleCounts; + VkExtent2D fragmentSize; +} VkPhysicalDeviceFragmentShadingRateKHR; + +typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkImageLayout imageLayout; + VkExtent2D shadingRateAttachmentTexelSize; +} VkRenderingFragmentShadingRateAttachmentInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); +typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pFragmentShadingRateCount, + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( + VkCommandBuffer commandBuffer, + const VkExtent2D* pFragmentSize, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); +#endif +#endif + + +// VK_KHR_dynamic_rendering_local_read is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_dynamic_rendering_local_read 1 +#define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION 1 +#define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME "VK_KHR_dynamic_rendering_local_read" +typedef VkPhysicalDeviceDynamicRenderingLocalReadFeatures VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR; + +typedef VkRenderingAttachmentLocationInfo VkRenderingAttachmentLocationInfoKHR; + +typedef VkRenderingInputAttachmentIndexInfo VkRenderingInputAttachmentIndexInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocationsKHR)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); +#endif +#endif + + +// VK_KHR_shader_quad_control is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_quad_control 1 +#define VK_KHR_SHADER_QUAD_CONTROL_SPEC_VERSION 1 +#define VK_KHR_SHADER_QUAD_CONTROL_EXTENSION_NAME "VK_KHR_shader_quad_control" +typedef struct VkPhysicalDeviceShaderQuadControlFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderQuadControl; +} VkPhysicalDeviceShaderQuadControlFeaturesKHR; + + + +// VK_KHR_spirv_1_4 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_spirv_1_4 1 +#define VK_KHR_SPIRV_1_4_SPEC_VERSION 1 +#define VK_KHR_SPIRV_1_4_EXTENSION_NAME "VK_KHR_spirv_1_4" + + +// VK_KHR_surface_protected_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_surface_protected_capabilities 1 +#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities" +typedef struct VkSurfaceProtectedCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 supportsProtected; +} VkSurfaceProtectedCapabilitiesKHR; + + + +// VK_KHR_separate_depth_stencil_layouts is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_separate_depth_stencil_layouts 1 +#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "VK_KHR_separate_depth_stencil_layouts" +typedef VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR; + +typedef VkAttachmentReferenceStencilLayout VkAttachmentReferenceStencilLayoutKHR; + +typedef VkAttachmentDescriptionStencilLayout VkAttachmentDescriptionStencilLayoutKHR; + + + +// VK_KHR_present_wait is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_wait 1 +#define VK_KHR_PRESENT_WAIT_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_EXTENSION_NAME "VK_KHR_present_wait" +typedef struct VkPhysicalDevicePresentWaitFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait; +} VkPhysicalDevicePresentWaitFeaturesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresentKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint64_t presentId, + uint64_t timeout); +#endif +#endif + + +// VK_KHR_uniform_buffer_standard_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_uniform_buffer_standard_layout 1 +#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout" +typedef VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR; + + + +// VK_KHR_buffer_device_address is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_buffer_device_address 1 +#define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1 +#define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address" +typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR; + +typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR; + +typedef VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR; + +typedef VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR; + +typedef VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR; + +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( + VkDevice device, + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); +#endif +#endif + + +// VK_KHR_deferred_host_operations is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_deferred_host_operations 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) +#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4 +#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations" +typedef VkResult (VKAPI_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation); +typedef void (VKAPI_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator); +typedef uint32_t (VKAPI_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef VkResult (VKAPI_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef VkResult (VKAPI_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( + VkDevice device, + const VkAllocationCallbacks* pAllocator, + VkDeferredOperationKHR* pDeferredOperation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( + VkDevice device, + VkDeferredOperationKHR operation, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( + VkDevice device, + VkDeferredOperationKHR operation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( + VkDevice device, + VkDeferredOperationKHR operation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( + VkDevice device, + VkDeferredOperationKHR operation); +#endif +#endif + + +// VK_KHR_pipeline_executable_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_pipeline_executable_properties 1 +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties" + +typedef enum VkPipelineExecutableStatisticFormatKHR { + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPipelineExecutableStatisticFormatKHR; +typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineExecutableInfo; +} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + +typedef struct VkPipelineInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipeline pipeline; +} VkPipelineInfoKHR; + +typedef struct VkPipelineExecutablePropertiesKHR { + VkStructureType sType; + void* pNext; + VkShaderStageFlags stages; + char name[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; + uint32_t subgroupSize; +} VkPipelineExecutablePropertiesKHR; + +typedef struct VkPipelineExecutableInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipeline pipeline; + uint32_t executableIndex; +} VkPipelineExecutableInfoKHR; + +typedef union VkPipelineExecutableStatisticValueKHR { + VkBool32 b32; + int64_t i64; + uint64_t u64; + double f64; +} VkPipelineExecutableStatisticValueKHR; + +typedef struct VkPipelineExecutableStatisticKHR { + VkStructureType sType; + void* pNext; + char name[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; + VkPipelineExecutableStatisticFormatKHR format; + VkPipelineExecutableStatisticValueKHR value; +} VkPipelineExecutableStatisticKHR; + +typedef struct VkPipelineExecutableInternalRepresentationKHR { + VkStructureType sType; + void* pNext; + char name[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; + VkBool32 isText; + size_t dataSize; + void* pData; +} VkPipelineExecutableInternalRepresentationKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( + VkDevice device, + const VkPipelineInfoKHR* pPipelineInfo, + uint32_t* pExecutableCount, + VkPipelineExecutablePropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( + VkDevice device, + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pStatisticCount, + VkPipelineExecutableStatisticKHR* pStatistics); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR( + VkDevice device, + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pInternalRepresentationCount, + VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); +#endif +#endif + + +// VK_KHR_map_memory2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_map_memory2 1 +#define VK_KHR_MAP_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_MAP_MEMORY_2_EXTENSION_NAME "VK_KHR_map_memory2" +typedef VkMemoryUnmapFlagBits VkMemoryUnmapFlagBitsKHR; + +typedef VkMemoryUnmapFlags VkMemoryUnmapFlagsKHR; + +typedef VkMemoryMapInfo VkMemoryMapInfoKHR; + +typedef VkMemoryUnmapInfo VkMemoryUnmapInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2KHR)(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2KHR)(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo); +#endif +#endif + + +// VK_KHR_shader_integer_dot_product is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_integer_dot_product 1 +#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1 +#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product" +typedef VkPhysicalDeviceShaderIntegerDotProductFeatures VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR; + +typedef VkPhysicalDeviceShaderIntegerDotProductProperties VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR; + + + +// VK_KHR_pipeline_library is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_pipeline_library 1 +#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library" +typedef struct VkPipelineLibraryCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t libraryCount; + const VkPipeline* pLibraries; +} VkPipelineLibraryCreateInfoKHR; + + + +// VK_KHR_shader_non_semantic_info is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_non_semantic_info 1 +#define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1 +#define VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME "VK_KHR_shader_non_semantic_info" + + +// VK_KHR_present_id is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_id 1 +#define VK_KHR_PRESENT_ID_SPEC_VERSION 1 +#define VK_KHR_PRESENT_ID_EXTENSION_NAME "VK_KHR_present_id" +typedef struct VkPresentIdKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const uint64_t* pPresentIds; +} VkPresentIdKHR; + +typedef struct VkPhysicalDevicePresentIdFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId; +} VkPhysicalDevicePresentIdFeaturesKHR; + + + +// VK_KHR_video_encode_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_queue 1 +#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 12 +#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue" + +typedef enum VkVideoEncodeTuningModeKHR { + VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR = 1, + VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR = 2, + VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR = 3, + VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR = 4, + VK_VIDEO_ENCODE_TUNING_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeTuningModeKHR; + +typedef enum VkVideoEncodeFlagBitsKHR { + VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFlagBitsKHR; +typedef VkFlags VkVideoEncodeFlagsKHR; + +typedef enum VkVideoEncodeCapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeCapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; + +typedef enum VkVideoEncodeRateControlModeFlagBitsKHR { + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeRateControlModeFlagBitsKHR; +typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; + +typedef enum VkVideoEncodeFeedbackFlagBitsKHR { + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_FEEDBACK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFeedbackFlagBitsKHR; +typedef VkFlags VkVideoEncodeFeedbackFlagsKHR; + +typedef enum VkVideoEncodeUsageFlagBitsKHR { + VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeUsageFlagBitsKHR; +typedef VkFlags VkVideoEncodeUsageFlagsKHR; + +typedef enum VkVideoEncodeContentFlagBitsKHR { + VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_CONTENT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeContentFlagBitsKHR; +typedef VkFlags VkVideoEncodeContentFlagsKHR; +typedef VkFlags VkVideoEncodeRateControlFlagsKHR; +typedef struct VkVideoEncodeInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeFlagsKHR flags; + VkBuffer dstBuffer; + VkDeviceSize dstBufferOffset; + VkDeviceSize dstBufferRange; + VkVideoPictureResourceInfoKHR srcPictureResource; + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR* pReferenceSlots; + uint32_t precedingExternallyEncodedBytes; +} VkVideoEncodeInfoKHR; + +typedef struct VkVideoEncodeCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeCapabilityFlagsKHR flags; + VkVideoEncodeRateControlModeFlagsKHR rateControlModes; + uint32_t maxRateControlLayers; + uint64_t maxBitrate; + uint32_t maxQualityLevels; + VkExtent2D encodeInputPictureGranularity; + VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags; +} VkVideoEncodeCapabilitiesKHR; + +typedef struct VkQueryPoolVideoEncodeFeedbackCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeFeedbackFlagsKHR encodeFeedbackFlags; +} VkQueryPoolVideoEncodeFeedbackCreateInfoKHR; + +typedef struct VkVideoEncodeUsageInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeUsageFlagsKHR videoUsageHints; + VkVideoEncodeContentFlagsKHR videoContentHints; + VkVideoEncodeTuningModeKHR tuningMode; +} VkVideoEncodeUsageInfoKHR; + +typedef struct VkVideoEncodeRateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + uint64_t averageBitrate; + uint64_t maxBitrate; + uint32_t frameRateNumerator; + uint32_t frameRateDenominator; +} VkVideoEncodeRateControlLayerInfoKHR; + +typedef struct VkVideoEncodeRateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeRateControlFlagsKHR flags; + VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode; + uint32_t layerCount; + const VkVideoEncodeRateControlLayerInfoKHR* pLayers; + uint32_t virtualBufferSizeInMs; + uint32_t initialVirtualBufferSizeInMs; +} VkVideoEncodeRateControlInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR { + VkStructureType sType; + const void* pNext; + const VkVideoProfileInfoKHR* pVideoProfile; + uint32_t qualityLevel; +} VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR; + +typedef struct VkVideoEncodeQualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode; + uint32_t preferredRateControlLayerCount; +} VkVideoEncodeQualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeQualityLevelInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t qualityLevel; +} VkVideoEncodeQualityLevelInfoKHR; + +typedef struct VkVideoEncodeSessionParametersGetInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoSessionParametersKHR videoSessionParameters; +} VkVideoEncodeSessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeSessionParametersFeedbackInfoKHR { + VkStructureType sType; + void* pNext; + VkBool32 hasOverrides; +} VkVideoEncodeSessionParametersFeedbackInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetEncodedVideoSessionParametersKHR)(VkDevice device, const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, size_t* pDataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetEncodedVideoSessionParametersKHR( + VkDevice device, + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, + VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, + size_t* pDataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoEncodeInfoKHR* pEncodeInfo); +#endif +#endif + + +// VK_KHR_synchronization2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_synchronization2 1 +#define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1 +#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2" +typedef VkPipelineStageFlags2 VkPipelineStageFlags2KHR; + +typedef VkPipelineStageFlagBits2 VkPipelineStageFlagBits2KHR; + +typedef VkAccessFlags2 VkAccessFlags2KHR; + +typedef VkAccessFlagBits2 VkAccessFlagBits2KHR; + +typedef VkSubmitFlagBits VkSubmitFlagBitsKHR; + +typedef VkSubmitFlags VkSubmitFlagsKHR; + +typedef VkMemoryBarrier2 VkMemoryBarrier2KHR; + +typedef VkBufferMemoryBarrier2 VkBufferMemoryBarrier2KHR; + +typedef VkImageMemoryBarrier2 VkImageMemoryBarrier2KHR; + +typedef VkDependencyInfo VkDependencyInfoKHR; + +typedef VkSubmitInfo2 VkSubmitInfo2KHR; + +typedef VkSemaphoreSubmitInfo VkSemaphoreSubmitInfoKHR; + +typedef VkCommandBufferSubmitInfo VkCommandBufferSubmitInfoKHR; + +typedef VkPhysicalDeviceSynchronization2Features VkPhysicalDeviceSynchronization2FeaturesKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); +typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( + VkCommandBuffer commandBuffer, + const VkDependencyInfo* pDependencyInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence); +#endif +#endif + + +// VK_KHR_fragment_shader_barycentric is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_fragment_shader_barycentric 1 +#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 +#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_KHR_fragment_shader_barycentric" +typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 fragmentShaderBarycentric; +} VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + +typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 triStripVertexOrderIndependentOfProvokingVertex; +} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + + + +// VK_KHR_shader_subgroup_uniform_control_flow is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_subgroup_uniform_control_flow 1 +#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1 +#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow" +typedef struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupUniformControlFlow; +} VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + + + +// VK_KHR_zero_initialize_workgroup_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_zero_initialize_workgroup_memory 1 +#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1 +#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory" +typedef VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR; + + + +// VK_KHR_workgroup_memory_explicit_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_workgroup_memory_explicit_layout 1 +#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout" +typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 workgroupMemoryExplicitLayout; + VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout; + VkBool32 workgroupMemoryExplicitLayout8BitAccess; + VkBool32 workgroupMemoryExplicitLayout16BitAccess; +} VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + + + +// VK_KHR_copy_commands2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_copy_commands2 1 +#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1 +#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2" +typedef VkCopyBufferInfo2 VkCopyBufferInfo2KHR; + +typedef VkCopyImageInfo2 VkCopyImageInfo2KHR; + +typedef VkCopyBufferToImageInfo2 VkCopyBufferToImageInfo2KHR; + +typedef VkCopyImageToBufferInfo2 VkCopyImageToBufferInfo2KHR; + +typedef VkBlitImageInfo2 VkBlitImageInfo2KHR; + +typedef VkResolveImageInfo2 VkResolveImageInfo2KHR; + +typedef VkBufferCopy2 VkBufferCopy2KHR; + +typedef VkImageCopy2 VkImageCopy2KHR; + +typedef VkImageBlit2 VkImageBlit2KHR; + +typedef VkBufferImageCopy2 VkBufferImageCopy2KHR; + +typedef VkImageResolve2 VkImageResolve2KHR; + +typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo); +#endif +#endif + + +// VK_KHR_format_feature_flags2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_format_feature_flags2 1 +#define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 2 +#define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2" +typedef VkFormatFeatureFlags2 VkFormatFeatureFlags2KHR; + +typedef VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2KHR; + +typedef VkFormatProperties3 VkFormatProperties3KHR; + + + +// VK_KHR_ray_tracing_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_tracing_maintenance1 1 +#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1" +typedef struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingMaintenance1; + VkBool32 rayTracingPipelineTraceRaysIndirect2; +} VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; + +typedef struct VkTraceRaysIndirectCommand2KHR { + VkDeviceAddress raygenShaderRecordAddress; + VkDeviceSize raygenShaderRecordSize; + VkDeviceAddress missShaderBindingTableAddress; + VkDeviceSize missShaderBindingTableSize; + VkDeviceSize missShaderBindingTableStride; + VkDeviceAddress hitShaderBindingTableAddress; + VkDeviceSize hitShaderBindingTableSize; + VkDeviceSize hitShaderBindingTableStride; + VkDeviceAddress callableShaderBindingTableAddress; + VkDeviceSize callableShaderBindingTableSize; + VkDeviceSize callableShaderBindingTableStride; + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommand2KHR; + +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirect2KHR)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectDeviceAddress); +#endif +#endif + + +// VK_KHR_shader_untyped_pointers is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_untyped_pointers 1 +#define VK_KHR_SHADER_UNTYPED_POINTERS_SPEC_VERSION 1 +#define VK_KHR_SHADER_UNTYPED_POINTERS_EXTENSION_NAME "VK_KHR_shader_untyped_pointers" +typedef struct VkPhysicalDeviceShaderUntypedPointersFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderUntypedPointers; +} VkPhysicalDeviceShaderUntypedPointersFeaturesKHR; + + + +// VK_KHR_portability_enumeration is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_portability_enumeration 1 +#define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1 +#define VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME "VK_KHR_portability_enumeration" + + +// VK_KHR_maintenance4 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance4 1 +#define VK_KHR_MAINTENANCE_4_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4" +typedef VkPhysicalDeviceMaintenance4Features VkPhysicalDeviceMaintenance4FeaturesKHR; + +typedef VkPhysicalDeviceMaintenance4Properties VkPhysicalDeviceMaintenance4PropertiesKHR; + +typedef VkDeviceBufferMemoryRequirements VkDeviceBufferMemoryRequirementsKHR; + +typedef VkDeviceImageMemoryRequirements VkDeviceImageMemoryRequirementsKHR; + +typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirementsKHR)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR( + VkDevice device, + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +#endif +#endif + + +// VK_KHR_shader_subgroup_rotate is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_subgroup_rotate 1 +#define VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION 2 +#define VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME "VK_KHR_shader_subgroup_rotate" +typedef VkPhysicalDeviceShaderSubgroupRotateFeatures VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR; + + + +// VK_KHR_shader_maximal_reconvergence is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_maximal_reconvergence 1 +#define VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_SPEC_VERSION 1 +#define VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_EXTENSION_NAME "VK_KHR_shader_maximal_reconvergence" +typedef struct VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderMaximalReconvergence; +} VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + + + +// VK_KHR_maintenance5 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance5 1 +#define VK_KHR_MAINTENANCE_5_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_5_EXTENSION_NAME "VK_KHR_maintenance5" +typedef VkPipelineCreateFlags2 VkPipelineCreateFlags2KHR; + +typedef VkPipelineCreateFlagBits2 VkPipelineCreateFlagBits2KHR; + +typedef VkBufferUsageFlags2 VkBufferUsageFlags2KHR; + +typedef VkBufferUsageFlagBits2 VkBufferUsageFlagBits2KHR; + +typedef VkPhysicalDeviceMaintenance5Features VkPhysicalDeviceMaintenance5FeaturesKHR; + +typedef VkPhysicalDeviceMaintenance5Properties VkPhysicalDeviceMaintenance5PropertiesKHR; + +typedef VkRenderingAreaInfo VkRenderingAreaInfoKHR; + +typedef VkDeviceImageSubresourceInfo VkDeviceImageSubresourceInfoKHR; + +typedef VkImageSubresource2 VkImageSubresource2KHR; + +typedef VkSubresourceLayout2 VkSubresourceLayout2KHR; + +typedef VkPipelineCreateFlags2CreateInfo VkPipelineCreateFlags2CreateInfoKHR; + +typedef VkBufferUsageFlags2CreateInfo VkBufferUsageFlags2CreateInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer2KHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularityKHR)(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayoutKHR)(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2KHR)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); +#endif +#endif + + +// VK_KHR_present_id2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_id2 1 +#define VK_KHR_PRESENT_ID_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_ID_2_EXTENSION_NAME "VK_KHR_present_id2" +typedef struct VkSurfaceCapabilitiesPresentId2KHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId2Supported; +} VkSurfaceCapabilitiesPresentId2KHR; + +typedef struct VkPresentId2KHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const uint64_t* pPresentIds; +} VkPresentId2KHR; + +typedef struct VkPhysicalDevicePresentId2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId2; +} VkPhysicalDevicePresentId2FeaturesKHR; + + + +// VK_KHR_present_wait2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_wait2 1 +#define VK_KHR_PRESENT_WAIT_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME "VK_KHR_present_wait2" +typedef struct VkSurfaceCapabilitiesPresentWait2KHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait2Supported; +} VkSurfaceCapabilitiesPresentWait2KHR; + +typedef struct VkPhysicalDevicePresentWait2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait2; +} VkPhysicalDevicePresentWait2FeaturesKHR; + +typedef struct VkPresentWait2InfoKHR { + VkStructureType sType; + const void* pNext; + uint64_t presentId; + uint64_t timeout; +} VkPresentWait2InfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresent2KHR)(VkDevice device, VkSwapchainKHR swapchain, const VkPresentWait2InfoKHR* pPresentWait2Info); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresent2KHR( + VkDevice device, + VkSwapchainKHR swapchain, + const VkPresentWait2InfoKHR* pPresentWait2Info); +#endif +#endif + + +// VK_KHR_ray_tracing_position_fetch is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_tracing_position_fetch 1 +#define VK_KHR_RAY_TRACING_POSITION_FETCH_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME "VK_KHR_ray_tracing_position_fetch" +typedef struct VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingPositionFetch; +} VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR; + + + +// VK_KHR_pipeline_binary is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_pipeline_binary 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineBinaryKHR) +#define VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR 32U +#define VK_KHR_PIPELINE_BINARY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_BINARY_EXTENSION_NAME "VK_KHR_pipeline_binary" +typedef struct VkPhysicalDevicePipelineBinaryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineBinaries; +} VkPhysicalDevicePipelineBinaryFeaturesKHR; + +typedef struct VkPhysicalDevicePipelineBinaryPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineBinaryInternalCache; + VkBool32 pipelineBinaryInternalCacheControl; + VkBool32 pipelineBinaryPrefersInternalCache; + VkBool32 pipelineBinaryPrecompiledInternalCache; + VkBool32 pipelineBinaryCompressedData; +} VkPhysicalDevicePipelineBinaryPropertiesKHR; + +typedef struct VkDevicePipelineBinaryInternalCacheControlKHR { + VkStructureType sType; + const void* pNext; + VkBool32 disableInternalCache; +} VkDevicePipelineBinaryInternalCacheControlKHR; + +typedef struct VkPipelineBinaryKeyKHR { + VkStructureType sType; + void* pNext; + uint32_t keySize; + uint8_t key[VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR]; +} VkPipelineBinaryKeyKHR; + +typedef struct VkPipelineBinaryDataKHR { + size_t dataSize; + void* pData; +} VkPipelineBinaryDataKHR; + +typedef struct VkPipelineBinaryKeysAndDataKHR { + uint32_t binaryCount; + const VkPipelineBinaryKeyKHR* pPipelineBinaryKeys; + const VkPipelineBinaryDataKHR* pPipelineBinaryData; +} VkPipelineBinaryKeysAndDataKHR; + +typedef struct VkPipelineCreateInfoKHR { + VkStructureType sType; + void* pNext; +} VkPipelineCreateInfoKHR; + +typedef struct VkPipelineBinaryCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const VkPipelineBinaryKeysAndDataKHR* pKeysAndDataInfo; + VkPipeline pipeline; + const VkPipelineCreateInfoKHR* pPipelineCreateInfo; +} VkPipelineBinaryCreateInfoKHR; + +typedef struct VkPipelineBinaryInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t binaryCount; + const VkPipelineBinaryKHR* pPipelineBinaries; +} VkPipelineBinaryInfoKHR; + +typedef struct VkReleaseCapturedPipelineDataInfoKHR { + VkStructureType sType; + void* pNext; + VkPipeline pipeline; +} VkReleaseCapturedPipelineDataInfoKHR; + +typedef struct VkPipelineBinaryDataInfoKHR { + VkStructureType sType; + void* pNext; + VkPipelineBinaryKHR pipelineBinary; +} VkPipelineBinaryDataInfoKHR; + +typedef struct VkPipelineBinaryHandlesInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t pipelineBinaryCount; + VkPipelineBinaryKHR* pPipelineBinaries; +} VkPipelineBinaryHandlesInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineBinariesKHR)(VkDevice device, const VkPipelineBinaryCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineBinaryHandlesInfoKHR* pBinaries); +typedef void (VKAPI_PTR *PFN_vkDestroyPipelineBinaryKHR)(VkDevice device, VkPipelineBinaryKHR pipelineBinary, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineKeyKHR)(VkDevice device, const VkPipelineCreateInfoKHR* pPipelineCreateInfo, VkPipelineBinaryKeyKHR* pPipelineKey); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineBinaryDataKHR)(VkDevice device, const VkPipelineBinaryDataInfoKHR* pInfo, VkPipelineBinaryKeyKHR* pPipelineBinaryKey, size_t* pPipelineBinaryDataSize, void* pPipelineBinaryData); +typedef VkResult (VKAPI_PTR *PFN_vkReleaseCapturedPipelineDataKHR)(VkDevice device, const VkReleaseCapturedPipelineDataInfoKHR* pInfo, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineBinariesKHR( + VkDevice device, + const VkPipelineBinaryCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPipelineBinaryHandlesInfoKHR* pBinaries); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineBinaryKHR( + VkDevice device, + VkPipelineBinaryKHR pipelineBinary, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineKeyKHR( + VkDevice device, + const VkPipelineCreateInfoKHR* pPipelineCreateInfo, + VkPipelineBinaryKeyKHR* pPipelineKey); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineBinaryDataKHR( + VkDevice device, + const VkPipelineBinaryDataInfoKHR* pInfo, + VkPipelineBinaryKeyKHR* pPipelineBinaryKey, + size_t* pPipelineBinaryDataSize, + void* pPipelineBinaryData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseCapturedPipelineDataKHR( + VkDevice device, + const VkReleaseCapturedPipelineDataInfoKHR* pInfo, + const VkAllocationCallbacks* pAllocator); +#endif +#endif + + +// VK_KHR_surface_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_surface_maintenance1 1 +#define VK_KHR_SURFACE_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_surface_maintenance1" + +typedef enum VkPresentScalingFlagBitsKHR { + VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR = 0x00000001, + VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR = 0x00000002, + VK_PRESENT_SCALING_STRETCH_BIT_KHR = 0x00000004, + VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT = VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR, + VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT = VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR, + VK_PRESENT_SCALING_STRETCH_BIT_EXT = VK_PRESENT_SCALING_STRETCH_BIT_KHR, + VK_PRESENT_SCALING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentScalingFlagBitsKHR; +typedef VkFlags VkPresentScalingFlagsKHR; + +typedef enum VkPresentGravityFlagBitsKHR { + VK_PRESENT_GRAVITY_MIN_BIT_KHR = 0x00000001, + VK_PRESENT_GRAVITY_MAX_BIT_KHR = 0x00000002, + VK_PRESENT_GRAVITY_CENTERED_BIT_KHR = 0x00000004, + VK_PRESENT_GRAVITY_MIN_BIT_EXT = VK_PRESENT_GRAVITY_MIN_BIT_KHR, + VK_PRESENT_GRAVITY_MAX_BIT_EXT = VK_PRESENT_GRAVITY_MAX_BIT_KHR, + VK_PRESENT_GRAVITY_CENTERED_BIT_EXT = VK_PRESENT_GRAVITY_CENTERED_BIT_KHR, + VK_PRESENT_GRAVITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentGravityFlagBitsKHR; +typedef VkFlags VkPresentGravityFlagsKHR; +typedef struct VkSurfacePresentModeKHR { + VkStructureType sType; + void* pNext; + VkPresentModeKHR presentMode; +} VkSurfacePresentModeKHR; + +typedef struct VkSurfacePresentScalingCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkPresentScalingFlagsKHR supportedPresentScaling; + VkPresentGravityFlagsKHR supportedPresentGravityX; + VkPresentGravityFlagsKHR supportedPresentGravityY; + VkExtent2D minScaledImageExtent; + VkExtent2D maxScaledImageExtent; +} VkSurfacePresentScalingCapabilitiesKHR; + +typedef struct VkSurfacePresentModeCompatibilityKHR { + VkStructureType sType; + void* pNext; + uint32_t presentModeCount; + VkPresentModeKHR* pPresentModes; +} VkSurfacePresentModeCompatibilityKHR; + + + +// VK_KHR_swapchain_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_swapchain_maintenance1 1 +#define VK_KHR_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_swapchain_maintenance1" +typedef struct VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 swapchainMaintenance1; +} VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR; + +typedef struct VkSwapchainPresentFenceInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkFence* pFences; +} VkSwapchainPresentFenceInfoKHR; + +typedef struct VkSwapchainPresentModesCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t presentModeCount; + const VkPresentModeKHR* pPresentModes; +} VkSwapchainPresentModesCreateInfoKHR; + +typedef struct VkSwapchainPresentModeInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentModeKHR* pPresentModes; +} VkSwapchainPresentModeInfoKHR; + +typedef struct VkSwapchainPresentScalingCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkPresentScalingFlagsKHR scalingBehavior; + VkPresentGravityFlagsKHR presentGravityX; + VkPresentGravityFlagsKHR presentGravityY; +} VkSwapchainPresentScalingCreateInfoKHR; + +typedef struct VkReleaseSwapchainImagesInfoKHR { + VkStructureType sType; + const void* pNext; + VkSwapchainKHR swapchain; + uint32_t imageIndexCount; + const uint32_t* pImageIndices; +} VkReleaseSwapchainImagesInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkReleaseSwapchainImagesKHR)(VkDevice device, const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesKHR( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); +#endif +#endif + + +// VK_KHR_internally_synchronized_queues is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_internally_synchronized_queues 1 +#define VK_KHR_INTERNALLY_SYNCHRONIZED_QUEUES_SPEC_VERSION 1 +#define VK_KHR_INTERNALLY_SYNCHRONIZED_QUEUES_EXTENSION_NAME "VK_KHR_internally_synchronized_queues" +typedef struct VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 internallySynchronizedQueues; +} VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR; + + + +// VK_KHR_cooperative_matrix is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_cooperative_matrix 1 +#define VK_KHR_COOPERATIVE_MATRIX_SPEC_VERSION 2 +#define VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_KHR_cooperative_matrix" + +typedef enum VkComponentTypeKHR { + VK_COMPONENT_TYPE_FLOAT16_KHR = 0, + VK_COMPONENT_TYPE_FLOAT32_KHR = 1, + VK_COMPONENT_TYPE_FLOAT64_KHR = 2, + VK_COMPONENT_TYPE_SINT8_KHR = 3, + VK_COMPONENT_TYPE_SINT16_KHR = 4, + VK_COMPONENT_TYPE_SINT32_KHR = 5, + VK_COMPONENT_TYPE_SINT64_KHR = 6, + VK_COMPONENT_TYPE_UINT8_KHR = 7, + VK_COMPONENT_TYPE_UINT16_KHR = 8, + VK_COMPONENT_TYPE_UINT32_KHR = 9, + VK_COMPONENT_TYPE_UINT64_KHR = 10, + VK_COMPONENT_TYPE_BFLOAT16_KHR = 1000141000, + VK_COMPONENT_TYPE_SINT8_PACKED_NV = 1000491000, + VK_COMPONENT_TYPE_UINT8_PACKED_NV = 1000491001, + VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT = 1000491002, + VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT = 1000491003, + VK_COMPONENT_TYPE_FLOAT16_NV = VK_COMPONENT_TYPE_FLOAT16_KHR, + VK_COMPONENT_TYPE_FLOAT32_NV = VK_COMPONENT_TYPE_FLOAT32_KHR, + VK_COMPONENT_TYPE_FLOAT64_NV = VK_COMPONENT_TYPE_FLOAT64_KHR, + VK_COMPONENT_TYPE_SINT8_NV = VK_COMPONENT_TYPE_SINT8_KHR, + VK_COMPONENT_TYPE_SINT16_NV = VK_COMPONENT_TYPE_SINT16_KHR, + VK_COMPONENT_TYPE_SINT32_NV = VK_COMPONENT_TYPE_SINT32_KHR, + VK_COMPONENT_TYPE_SINT64_NV = VK_COMPONENT_TYPE_SINT64_KHR, + VK_COMPONENT_TYPE_UINT8_NV = VK_COMPONENT_TYPE_UINT8_KHR, + VK_COMPONENT_TYPE_UINT16_NV = VK_COMPONENT_TYPE_UINT16_KHR, + VK_COMPONENT_TYPE_UINT32_NV = VK_COMPONENT_TYPE_UINT32_KHR, + VK_COMPONENT_TYPE_UINT64_NV = VK_COMPONENT_TYPE_UINT64_KHR, + VK_COMPONENT_TYPE_FLOAT_E4M3_NV = VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT, + VK_COMPONENT_TYPE_FLOAT_E5M2_NV = VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT, + VK_COMPONENT_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkComponentTypeKHR; + +typedef enum VkScopeKHR { + VK_SCOPE_DEVICE_KHR = 1, + VK_SCOPE_WORKGROUP_KHR = 2, + VK_SCOPE_SUBGROUP_KHR = 3, + VK_SCOPE_QUEUE_FAMILY_KHR = 5, + VK_SCOPE_DEVICE_NV = VK_SCOPE_DEVICE_KHR, + VK_SCOPE_WORKGROUP_NV = VK_SCOPE_WORKGROUP_KHR, + VK_SCOPE_SUBGROUP_NV = VK_SCOPE_SUBGROUP_KHR, + VK_SCOPE_QUEUE_FAMILY_NV = VK_SCOPE_QUEUE_FAMILY_KHR, + VK_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkScopeKHR; +typedef struct VkCooperativeMatrixPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t MSize; + uint32_t NSize; + uint32_t KSize; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; +} VkCooperativeMatrixPropertiesKHR; + +typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrix; + VkBool32 cooperativeMatrixRobustBufferAccess; +} VkPhysicalDeviceCooperativeMatrixFeaturesKHR; + +typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesKHR { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeMatrixSupportedStages; +} VkPhysicalDeviceCooperativeMatrixPropertiesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesKHR* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesKHR* pProperties); +#endif +#endif + + +// VK_KHR_compute_shader_derivatives is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_compute_shader_derivatives 1 +#define VK_KHR_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 +#define VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_KHR_compute_shader_derivatives" +typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 computeDerivativeGroupQuads; + VkBool32 computeDerivativeGroupLinear; +} VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR; + +typedef struct VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 meshAndTaskShaderDerivatives; +} VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR; + + + +// VK_KHR_video_decode_av1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_av1 1 +#include "vk_video/vulkan_video_codec_av1std.h" +#include "vk_video/vulkan_video_codec_av1std_decode.h" +#define VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR 7U +#define VK_KHR_VIDEO_DECODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_AV1_EXTENSION_NAME "VK_KHR_video_decode_av1" +typedef struct VkVideoDecodeAV1ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoAV1Profile stdProfile; + VkBool32 filmGrainSupport; +} VkVideoDecodeAV1ProfileInfoKHR; + +typedef struct VkVideoDecodeAV1CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoAV1Level maxLevel; +} VkVideoDecodeAV1CapabilitiesKHR; + +typedef struct VkVideoDecodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; +} VkVideoDecodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeAV1PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeAV1PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR]; + uint32_t frameHeaderOffset; + uint32_t tileCount; + const uint32_t* pTileOffsets; + const uint32_t* pTileSizes; +} VkVideoDecodeAV1PictureInfoKHR; + +typedef struct VkVideoDecodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeAV1ReferenceInfo* pStdReferenceInfo; +} VkVideoDecodeAV1DpbSlotInfoKHR; + + + +// VK_KHR_video_encode_av1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_av1 1 +#include "vk_video/vulkan_video_codec_av1std_encode.h" +#define VK_KHR_VIDEO_ENCODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_AV1_EXTENSION_NAME "VK_KHR_video_encode_av1" + +typedef enum VkVideoEncodeAV1PredictionModeKHR { + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR = 0, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR = 1, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR = 2, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR = 3, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1PredictionModeKHR; + +typedef enum VkVideoEncodeAV1RateControlGroupKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_INTRA_KHR = 0, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_PREDICTIVE_KHR = 1, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_BIPREDICTIVE_KHR = 2, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlGroupKHR; + +typedef enum VkVideoEncodeAV1CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_CAPABILITY_GENERATE_OBU_EXTENSION_HEADER_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_CAPABILITY_PRIMARY_REFERENCE_CDF_ONLY_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_CAPABILITY_MOTION_VECTOR_SCALING_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_AV1_CAPABILITY_COMPOUND_PREDICTION_INTRA_REFRESH_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1CapabilityFlagsKHR; + +typedef enum VkVideoEncodeAV1StdFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_STD_UNIFORM_TILE_SPACING_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_STD_SKIP_MODE_PRESENT_UNSET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_STD_PRIMARY_REF_FRAME_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_STD_DELTA_Q_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1StdFlagsKHR; + +typedef enum VkVideoEncodeAV1SuperblockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_64_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_128_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1SuperblockSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1SuperblockSizeFlagsKHR; + +typedef enum VkVideoEncodeAV1RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1RateControlFlagsKHR; +typedef struct VkPhysicalDeviceVideoEncodeAV1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeAV1; +} VkPhysicalDeviceVideoEncodeAV1FeaturesKHR; + +typedef struct VkVideoEncodeAV1CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1CapabilityFlagsKHR flags; + StdVideoAV1Level maxLevel; + VkExtent2D codedPictureAlignment; + VkExtent2D maxTiles; + VkExtent2D minTileSize; + VkExtent2D maxTileSize; + VkVideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes; + uint32_t maxSingleReferenceCount; + uint32_t singleReferenceNameMask; + uint32_t maxUnidirectionalCompoundReferenceCount; + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t unidirectionalCompoundReferenceNameMask; + uint32_t maxBidirectionalCompoundReferenceCount; + uint32_t maxBidirectionalCompoundGroup1ReferenceCount; + uint32_t maxBidirectionalCompoundGroup2ReferenceCount; + uint32_t bidirectionalCompoundReferenceNameMask; + uint32_t maxTemporalLayerCount; + uint32_t maxSpatialLayerCount; + uint32_t maxOperatingPoints; + uint32_t minQIndex; + uint32_t maxQIndex; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeAV1StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeAV1CapabilitiesKHR; + +typedef struct VkVideoEncodeAV1QIndexKHR { + uint32_t intraQIndex; + uint32_t predictiveQIndex; + uint32_t bipredictiveQIndex; +} VkVideoEncodeAV1QIndexKHR; + +typedef struct VkVideoEncodeAV1QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredKeyFramePeriod; + uint32_t preferredConsecutiveBipredictiveFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeAV1QIndexKHR preferredConstantQIndex; + uint32_t preferredMaxSingleReferenceCount; + uint32_t preferredSingleReferenceNameMask; + uint32_t preferredMaxUnidirectionalCompoundReferenceCount; + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredUnidirectionalCompoundReferenceNameMask; + uint32_t preferredMaxBidirectionalCompoundReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount; + uint32_t preferredBidirectionalCompoundReferenceNameMask; +} VkVideoEncodeAV1QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeAV1SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevel; + StdVideoAV1Level maxLevel; +} VkVideoEncodeAV1SessionCreateInfoKHR; + +typedef struct VkVideoEncodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; + const StdVideoEncodeAV1DecoderModelInfo* pStdDecoderModelInfo; + uint32_t stdOperatingPointCount; + const StdVideoEncodeAV1OperatingPointInfo* pStdOperatingPoints; +} VkVideoEncodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeAV1PictureInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeAV1PredictionModeKHR predictionMode; + VkVideoEncodeAV1RateControlGroupKHR rateControlGroup; + uint32_t constantQIndex; + const StdVideoEncodeAV1PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR]; + VkBool32 primaryReferenceCdfOnly; + VkBool32 generateObuExtensionHeader; +} VkVideoEncodeAV1PictureInfoKHR; + +typedef struct VkVideoEncodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeAV1ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeAV1DpbSlotInfoKHR; + +typedef struct VkVideoEncodeAV1ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoAV1Profile stdProfile; +} VkVideoEncodeAV1ProfileInfoKHR; + +typedef struct VkVideoEncodeAV1FrameSizeKHR { + uint32_t intraFrameSize; + uint32_t predictiveFrameSize; + uint32_t bipredictiveFrameSize; +} VkVideoEncodeAV1FrameSizeKHR; + +typedef struct VkVideoEncodeAV1GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingIntra; + uint32_t gopRemainingPredictive; + uint32_t gopRemainingBipredictive; +} VkVideoEncodeAV1GopRemainingFrameInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeAV1RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t keyFramePeriod; + uint32_t consecutiveBipredictiveFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeAV1RateControlInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQIndex; + VkVideoEncodeAV1QIndexKHR minQIndex; + VkBool32 useMaxQIndex; + VkVideoEncodeAV1QIndexKHR maxQIndex; + VkBool32 useMaxFrameSize; + VkVideoEncodeAV1FrameSizeKHR maxFrameSize; +} VkVideoEncodeAV1RateControlLayerInfoKHR; + + + +// VK_KHR_video_decode_vp9 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_vp9 1 +#include "vk_video/vulkan_video_codec_vp9std.h" +#include "vk_video/vulkan_video_codec_vp9std_decode.h" +#define VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR 3U +#define VK_KHR_VIDEO_DECODE_VP9_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_VP9_EXTENSION_NAME "VK_KHR_video_decode_vp9" +typedef struct VkPhysicalDeviceVideoDecodeVP9FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoDecodeVP9; +} VkPhysicalDeviceVideoDecodeVP9FeaturesKHR; + +typedef struct VkVideoDecodeVP9ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoVP9Profile stdProfile; +} VkVideoDecodeVP9ProfileInfoKHR; + +typedef struct VkVideoDecodeVP9CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoVP9Level maxLevel; +} VkVideoDecodeVP9CapabilitiesKHR; + +typedef struct VkVideoDecodeVP9PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeVP9PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR]; + uint32_t uncompressedHeaderOffset; + uint32_t compressedHeaderOffset; + uint32_t tilesOffset; +} VkVideoDecodeVP9PictureInfoKHR; + + + +// VK_KHR_video_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_maintenance1 1 +#define VK_KHR_VIDEO_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_video_maintenance1" +typedef struct VkPhysicalDeviceVideoMaintenance1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoMaintenance1; +} VkPhysicalDeviceVideoMaintenance1FeaturesKHR; + +typedef struct VkVideoInlineQueryInfoKHR { + VkStructureType sType; + const void* pNext; + VkQueryPool queryPool; + uint32_t firstQuery; + uint32_t queryCount; +} VkVideoInlineQueryInfoKHR; + + + +// VK_KHR_vertex_attribute_divisor is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_vertex_attribute_divisor 1 +#define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 1 +#define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_KHR_vertex_attribute_divisor" +typedef VkPhysicalDeviceVertexAttributeDivisorProperties VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR; + +typedef VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionKHR; + +typedef VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoKHR; + +typedef VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR; + + + +// VK_KHR_load_store_op_none is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_load_store_op_none 1 +#define VK_KHR_LOAD_STORE_OP_NONE_SPEC_VERSION 1 +#define VK_KHR_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_KHR_load_store_op_none" + + +// VK_KHR_unified_image_layouts is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_unified_image_layouts 1 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME "VK_KHR_unified_image_layouts" +typedef struct VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 unifiedImageLayouts; + VkBool32 unifiedImageLayoutsVideo; +} VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + +typedef struct VkAttachmentFeedbackLoopInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 feedbackLoopEnable; +} VkAttachmentFeedbackLoopInfoEXT; + + + +// VK_KHR_shader_float_controls2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_float_controls2 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_2_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_2_EXTENSION_NAME "VK_KHR_shader_float_controls2" +typedef VkPhysicalDeviceShaderFloatControls2Features VkPhysicalDeviceShaderFloatControls2FeaturesKHR; + + + +// VK_KHR_index_type_uint8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_index_type_uint8 1 +#define VK_KHR_INDEX_TYPE_UINT8_SPEC_VERSION 1 +#define VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_KHR_index_type_uint8" +typedef VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesKHR; + + + +// VK_KHR_line_rasterization is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_line_rasterization 1 +#define VK_KHR_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME "VK_KHR_line_rasterization" +typedef VkLineRasterizationMode VkLineRasterizationModeKHR; + +typedef VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesKHR; + +typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesKHR; + +typedef VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleKHR)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleKHR( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); +#endif +#endif + + +// VK_KHR_calibrated_timestamps is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_calibrated_timestamps 1 +#define VK_KHR_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1 +#define VK_KHR_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_KHR_calibrated_timestamps" + +typedef enum VkTimeDomainKHR { + VK_TIME_DOMAIN_DEVICE_KHR = 0, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR = 1, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR = 2, + VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR = 3, + VK_TIME_DOMAIN_PRESENT_STAGE_LOCAL_EXT = 1000208000, + VK_TIME_DOMAIN_SWAPCHAIN_LOCAL_EXT = 1000208001, + VK_TIME_DOMAIN_DEVICE_EXT = VK_TIME_DOMAIN_DEVICE_KHR, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR, + VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR, + VK_TIME_DOMAIN_MAX_ENUM_KHR = 0x7FFFFFFF +} VkTimeDomainKHR; +typedef struct VkCalibratedTimestampInfoKHR { + VkStructureType sType; + const void* pNext; + VkTimeDomainKHR timeDomain; +} VkCalibratedTimestampInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains); +typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsKHR)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsKHR( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation); +#endif +#endif + + +// VK_KHR_shader_expect_assume is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_expect_assume 1 +#define VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION 1 +#define VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME "VK_KHR_shader_expect_assume" +typedef VkPhysicalDeviceShaderExpectAssumeFeatures VkPhysicalDeviceShaderExpectAssumeFeaturesKHR; + + + +// VK_KHR_maintenance6 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance6 1 +#define VK_KHR_MAINTENANCE_6_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_6_EXTENSION_NAME "VK_KHR_maintenance6" +typedef VkPhysicalDeviceMaintenance6Features VkPhysicalDeviceMaintenance6FeaturesKHR; + +typedef VkPhysicalDeviceMaintenance6Properties VkPhysicalDeviceMaintenance6PropertiesKHR; + +typedef VkBindMemoryStatus VkBindMemoryStatusKHR; + +typedef VkBindDescriptorSetsInfo VkBindDescriptorSetsInfoKHR; + +typedef VkPushConstantsInfo VkPushConstantsInfoKHR; + +typedef VkPushDescriptorSetInfo VkPushDescriptorSetInfoKHR; + +typedef VkPushDescriptorSetWithTemplateInfo VkPushDescriptorSetWithTemplateInfoKHR; + +typedef struct VkSetDescriptorBufferOffsetsInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t setCount; + const uint32_t* pBufferIndices; + const VkDeviceSize* pOffsets; +} VkSetDescriptorBufferOffsetsInfoEXT; + +typedef struct VkBindDescriptorBufferEmbeddedSamplersInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; +} VkBindDescriptorBufferEmbeddedSamplersInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2KHR)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2KHR)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetDescriptorBufferOffsets2EXT)(VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT)(VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2KHR( + VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2KHR( + VkCommandBuffer commandBuffer, + const VkPushConstantsInfo* pPushConstantsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2KHR( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT( + VkCommandBuffer commandBuffer, + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + VkCommandBuffer commandBuffer, + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); +#endif +#endif + + +// VK_KHR_copy_memory_indirect is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_copy_memory_indirect 1 +#define VK_KHR_COPY_MEMORY_INDIRECT_SPEC_VERSION 1 +#define VK_KHR_COPY_MEMORY_INDIRECT_EXTENSION_NAME "VK_KHR_copy_memory_indirect" + +typedef enum VkAddressCopyFlagBitsKHR { + VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR = 0x00000001, + VK_ADDRESS_COPY_SPARSE_BIT_KHR = 0x00000002, + VK_ADDRESS_COPY_PROTECTED_BIT_KHR = 0x00000004, + VK_ADDRESS_COPY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAddressCopyFlagBitsKHR; +typedef VkFlags VkAddressCopyFlagsKHR; +typedef struct VkStridedDeviceAddressRangeKHR { + VkDeviceAddress address; + VkDeviceSize size; + VkDeviceSize stride; +} VkStridedDeviceAddressRangeKHR; + +typedef struct VkCopyMemoryIndirectCommandKHR { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize size; +} VkCopyMemoryIndirectCommandKHR; + +typedef struct VkCopyMemoryIndirectInfoKHR { + VkStructureType sType; + const void* pNext; + VkAddressCopyFlagsKHR srcCopyFlags; + VkAddressCopyFlagsKHR dstCopyFlags; + uint32_t copyCount; + VkStridedDeviceAddressRangeKHR copyAddressRange; +} VkCopyMemoryIndirectInfoKHR; + +typedef struct VkCopyMemoryToImageIndirectCommandKHR { + VkDeviceAddress srcAddress; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkCopyMemoryToImageIndirectCommandKHR; + +typedef struct VkCopyMemoryToImageIndirectInfoKHR { + VkStructureType sType; + const void* pNext; + VkAddressCopyFlagsKHR srcCopyFlags; + uint32_t copyCount; + VkStridedDeviceAddressRangeKHR copyAddressRange; + VkImage dstImage; + VkImageLayout dstImageLayout; + const VkImageSubresourceLayers* pImageSubresources; +} VkCopyMemoryToImageIndirectInfoKHR; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 indirectMemoryCopy; + VkBool32 indirectMemoryToImageCopy; +} VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR { + VkStructureType sType; + void* pNext; + VkQueueFlags supportedQueues; +} VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryIndirectKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToImageIndirectKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryIndirectKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToImageIndirectKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo); +#endif +#endif + + +// VK_KHR_video_encode_intra_refresh is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_intra_refresh 1 +#define VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_EXTENSION_NAME "VK_KHR_video_encode_intra_refresh" + +typedef enum VkVideoEncodeIntraRefreshModeFlagBitsKHR { + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR = 0, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeIntraRefreshModeFlagBitsKHR; +typedef VkFlags VkVideoEncodeIntraRefreshModeFlagsKHR; +typedef struct VkVideoEncodeIntraRefreshCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes; + uint32_t maxIntraRefreshCycleDuration; + uint32_t maxIntraRefreshActiveReferencePictures; + VkBool32 partitionIndependentIntraRefreshRegions; + VkBool32 nonRectangularIntraRefreshRegions; +} VkVideoEncodeIntraRefreshCapabilitiesKHR; + +typedef struct VkVideoEncodeSessionIntraRefreshCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode; +} VkVideoEncodeSessionIntraRefreshCreateInfoKHR; + +typedef struct VkVideoEncodeIntraRefreshInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t intraRefreshCycleDuration; + uint32_t intraRefreshIndex; +} VkVideoEncodeIntraRefreshInfoKHR; + +typedef struct VkVideoReferenceIntraRefreshInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t dirtyIntraRefreshRegions; +} VkVideoReferenceIntraRefreshInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeIntraRefresh; +} VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + + + +// VK_KHR_video_encode_quantization_map is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_quantization_map 1 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_SPEC_VERSION 2 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_EXTENSION_NAME "VK_KHR_video_encode_quantization_map" +typedef struct VkVideoEncodeQuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D maxQuantizationMapExtent; +} VkVideoEncodeQuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatQuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoFormatQuantizationMapPropertiesKHR; + +typedef struct VkVideoEncodeQuantizationMapInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageView quantizationMap; + VkExtent2D quantizationMapExtent; +} VkVideoEncodeQuantizationMapInfoKHR; + +typedef struct VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeQuantizationMap; +} VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + +typedef struct VkVideoEncodeH264QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH264QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoEncodeH265QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH265QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatH265QuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes; +} VkVideoFormatH265QuantizationMapPropertiesKHR; + +typedef struct VkVideoEncodeAV1QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQIndexDelta; + int32_t maxQIndexDelta; +} VkVideoEncodeAV1QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatAV1QuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes; +} VkVideoFormatAV1QuantizationMapPropertiesKHR; + + + +// VK_KHR_shader_relaxed_extended_instruction is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_relaxed_extended_instruction 1 +#define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION 1 +#define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME "VK_KHR_shader_relaxed_extended_instruction" +typedef struct VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderRelaxedExtendedInstruction; +} VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + + + +// VK_KHR_maintenance7 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance7 1 +#define VK_KHR_MAINTENANCE_7_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_7_EXTENSION_NAME "VK_KHR_maintenance7" + +typedef enum VkPhysicalDeviceLayeredApiKHR { + VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR = 0, + VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR = 1, + VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR = 2, + VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR = 3, + VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR = 4, + VK_PHYSICAL_DEVICE_LAYERED_API_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPhysicalDeviceLayeredApiKHR; +typedef struct VkPhysicalDeviceMaintenance7FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance7; +} VkPhysicalDeviceMaintenance7FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance7PropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 robustFragmentShadingRateAttachmentAccess; + VkBool32 separateDepthStencilAttachmentAccess; + uint32_t maxDescriptorSetTotalUniformBuffersDynamic; + uint32_t maxDescriptorSetTotalStorageBuffersDynamic; + uint32_t maxDescriptorSetTotalBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic; +} VkPhysicalDeviceMaintenance7PropertiesKHR; + +typedef struct VkPhysicalDeviceLayeredApiPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t vendorID; + uint32_t deviceID; + VkPhysicalDeviceLayeredApiKHR layeredAPI; + char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; +} VkPhysicalDeviceLayeredApiPropertiesKHR; + +typedef struct VkPhysicalDeviceLayeredApiPropertiesListKHR { + VkStructureType sType; + void* pNext; + uint32_t layeredApiCount; + VkPhysicalDeviceLayeredApiPropertiesKHR* pLayeredApis; +} VkPhysicalDeviceLayeredApiPropertiesListKHR; + +typedef struct VkPhysicalDeviceLayeredApiVulkanPropertiesKHR { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceProperties2 properties; +} VkPhysicalDeviceLayeredApiVulkanPropertiesKHR; + + + +// VK_KHR_maintenance8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance8 1 +#define VK_KHR_MAINTENANCE_8_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_8_EXTENSION_NAME "VK_KHR_maintenance8" +typedef VkFlags64 VkAccessFlags3KHR; + +// Flag bits for VkAccessFlagBits3KHR +typedef VkFlags64 VkAccessFlagBits3KHR; +static const VkAccessFlagBits3KHR VK_ACCESS_3_NONE_KHR = 0ULL; + +typedef struct VkMemoryBarrierAccessFlags3KHR { + VkStructureType sType; + const void* pNext; + VkAccessFlags3KHR srcAccessMask3; + VkAccessFlags3KHR dstAccessMask3; +} VkMemoryBarrierAccessFlags3KHR; + +typedef struct VkPhysicalDeviceMaintenance8FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance8; +} VkPhysicalDeviceMaintenance8FeaturesKHR; + + + +// VK_KHR_shader_fma is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_fma 1 +#define VK_KHR_SHADER_FMA_SPEC_VERSION 1 +#define VK_KHR_SHADER_FMA_EXTENSION_NAME "VK_KHR_shader_fma" +typedef struct VkPhysicalDeviceShaderFmaFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderFmaFloat16; + VkBool32 shaderFmaFloat32; + VkBool32 shaderFmaFloat64; +} VkPhysicalDeviceShaderFmaFeaturesKHR; + + + +// VK_KHR_maintenance9 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance9 1 +#define VK_KHR_MAINTENANCE_9_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_9_EXTENSION_NAME "VK_KHR_maintenance9" + +typedef enum VkDefaultVertexAttributeValueKHR { + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR = 0, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR = 1, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDefaultVertexAttributeValueKHR; +typedef struct VkPhysicalDeviceMaintenance9FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance9; +} VkPhysicalDeviceMaintenance9FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance9PropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 image2DViewOf3DSparse; + VkDefaultVertexAttributeValueKHR defaultVertexAttributeValue; +} VkPhysicalDeviceMaintenance9PropertiesKHR; + +typedef struct VkQueueFamilyOwnershipTransferPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t optimalImageTransferToQueueFamilies; +} VkQueueFamilyOwnershipTransferPropertiesKHR; + + + +// VK_KHR_video_maintenance2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_maintenance2 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_video_maintenance2" +typedef struct VkPhysicalDeviceVideoMaintenance2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoMaintenance2; +} VkPhysicalDeviceVideoMaintenance2FeaturesKHR; + +typedef struct VkVideoDecodeH264InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoH264SequenceParameterSet* pStdSPS; + const StdVideoH264PictureParameterSet* pStdPPS; +} VkVideoDecodeH264InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeH265InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoH265VideoParameterSet* pStdVPS; + const StdVideoH265SequenceParameterSet* pStdSPS; + const StdVideoH265PictureParameterSet* pStdPPS; +} VkVideoDecodeH265InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeAV1InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; +} VkVideoDecodeAV1InlineSessionParametersInfoKHR; + + + +// VK_KHR_depth_clamp_zero_one is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_depth_clamp_zero_one 1 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_KHR_depth_clamp_zero_one" +typedef struct VkPhysicalDeviceDepthClampZeroOneFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 depthClampZeroOne; +} VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; + + + +// VK_KHR_robustness2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_robustness2 1 +#define VK_KHR_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_KHR_ROBUSTNESS_2_EXTENSION_NAME "VK_KHR_robustness2" +typedef struct VkPhysicalDeviceRobustness2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 robustBufferAccess2; + VkBool32 robustImageAccess2; + VkBool32 nullDescriptor; +} VkPhysicalDeviceRobustness2FeaturesKHR; + +typedef struct VkPhysicalDeviceRobustness2PropertiesKHR { + VkStructureType sType; + void* pNext; + VkDeviceSize robustStorageBufferAccessSizeAlignment; + VkDeviceSize robustUniformBufferAccessSizeAlignment; +} VkPhysicalDeviceRobustness2PropertiesKHR; + + + +// VK_KHR_present_mode_fifo_latest_ready is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_mode_fifo_latest_ready 1 +#define VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION 1 +#define VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME "VK_KHR_present_mode_fifo_latest_ready" +typedef struct VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentModeFifoLatestReady; +} VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + + + +// VK_KHR_maintenance10 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance10 1 +#define VK_KHR_MAINTENANCE_10_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_10_EXTENSION_NAME "VK_KHR_maintenance10" + +typedef enum VkRenderingAttachmentFlagBitsKHR { + VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR = 0x00000001, + VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR = 0x00000002, + VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR = 0x00000004, + VK_RENDERING_ATTACHMENT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkRenderingAttachmentFlagBitsKHR; +typedef VkFlags VkRenderingAttachmentFlagsKHR; + +typedef enum VkResolveImageFlagBitsKHR { + VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR = 0x00000001, + VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR = 0x00000002, + VK_RESOLVE_IMAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkResolveImageFlagBitsKHR; +typedef VkFlags VkResolveImageFlagsKHR; +typedef struct VkPhysicalDeviceMaintenance10FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance10; +} VkPhysicalDeviceMaintenance10FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance10PropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rgba4OpaqueBlackSwizzled; + VkBool32 resolveSrgbFormatAppliesTransferFunction; + VkBool32 resolveSrgbFormatSupportsTransferFunctionControl; +} VkPhysicalDeviceMaintenance10PropertiesKHR; + +typedef struct VkRenderingEndInfoKHR { + VkStructureType sType; + const void* pNext; +} VkRenderingEndInfoKHR; + +typedef struct VkRenderingAttachmentFlagsInfoKHR { + VkStructureType sType; + const void* pNext; + VkRenderingAttachmentFlagsKHR flags; +} VkRenderingAttachmentFlagsInfoKHR; + +typedef struct VkResolveImageModeInfoKHR { + VkStructureType sType; + const void* pNext; + VkResolveImageFlagsKHR flags; + VkResolveModeFlagBits resolveMode; + VkResolveModeFlagBits stencilResolveMode; +} VkResolveImageModeInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdEndRendering2KHR)(VkCommandBuffer commandBuffer, const VkRenderingEndInfoKHR* pRenderingEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2KHR( + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoKHR* pRenderingEndInfo); +#endif +#endif + + +// VK_EXT_debug_report is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_debug_report 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) +#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 10 +#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report" + +typedef enum VkDebugReportObjectTypeEXT { + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0, + VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1, + VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3, + VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4, + VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6, + VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10, + VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11, + VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14, + VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17, + VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23, + VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, + VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, + VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28, + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29, + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30, + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000, + VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT = 1000029000, + VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT = 1000029001, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000, + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT = 1000307000, + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT = 1000307001, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT = 1000366000, + // VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT is a legacy alias + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, + // VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT is a legacy alias + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugReportObjectTypeEXT; + +typedef enum VkDebugReportFlagBitsEXT { + VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001, + VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002, + VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004, + VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008, + VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010, + VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugReportFlagBitsEXT; +typedef VkFlags VkDebugReportFlagsEXT; +typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage, + void* pUserData); + +typedef struct VkDebugReportCallbackCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportFlagsEXT flags; + PFN_vkDebugReportCallbackEXT pfnCallback; + void* pUserData; +} VkDebugReportCallbackCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); +typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( + VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugReportCallbackEXT* pCallback); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( + VkInstance instance, + VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( + VkInstance instance, + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage); +#endif +#endif + + +// VK_NV_glsl_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_glsl_shader 1 +#define VK_NV_GLSL_SHADER_SPEC_VERSION 1 +#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" + + +// VK_EXT_depth_range_unrestricted is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_range_unrestricted 1 +#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1 +#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted" + + +// VK_IMG_filter_cubic is a preprocessor guard. Do not pass it to API calls. +#define VK_IMG_filter_cubic 1 +#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 +#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" + + +// VK_AMD_rasterization_order is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_rasterization_order 1 +#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 +#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order" + +typedef enum VkRasterizationOrderAMD { + VK_RASTERIZATION_ORDER_STRICT_AMD = 0, + VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, + VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF +} VkRasterizationOrderAMD; +typedef struct VkPipelineRasterizationStateRasterizationOrderAMD { + VkStructureType sType; + const void* pNext; + VkRasterizationOrderAMD rasterizationOrder; +} VkPipelineRasterizationStateRasterizationOrderAMD; + + + +// VK_AMD_shader_trinary_minmax is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_trinary_minmax 1 +#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1 +#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax" + + +// VK_AMD_shader_explicit_vertex_parameter is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_explicit_vertex_parameter 1 +#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1 +#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter" + + +// VK_EXT_debug_marker is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_debug_marker 1 +#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4 +#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker" +typedef struct VkDebugMarkerObjectNameInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + const char* pObjectName; +} VkDebugMarkerObjectNameInfoEXT; + +typedef struct VkDebugMarkerObjectTagInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkDebugMarkerObjectTagInfoEXT; + +typedef struct VkDebugMarkerMarkerInfoEXT { + VkStructureType sType; + const void* pNext; + const char* pMarkerName; + float color[4]; +} VkDebugMarkerMarkerInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo); +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( + VkDevice device, + const VkDebugMarkerObjectTagInfoEXT* pTagInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( + VkDevice device, + const VkDebugMarkerObjectNameInfoEXT* pNameInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( + VkCommandBuffer commandBuffer); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +#endif +#endif + + +// VK_AMD_gcn_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_gcn_shader 1 +#define VK_AMD_GCN_SHADER_SPEC_VERSION 1 +#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader" + + +// VK_NV_dedicated_allocation is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_dedicated_allocation 1 +#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1 +#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation" +typedef struct VkDedicatedAllocationImageCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 dedicatedAllocation; +} VkDedicatedAllocationImageCreateInfoNV; + +typedef struct VkDedicatedAllocationBufferCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 dedicatedAllocation; +} VkDedicatedAllocationBufferCreateInfoNV; + +typedef struct VkDedicatedAllocationMemoryAllocateInfoNV { + VkStructureType sType; + const void* pNext; + VkImage image; + VkBuffer buffer; +} VkDedicatedAllocationMemoryAllocateInfoNV; + + + +// VK_EXT_transform_feedback is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_transform_feedback 1 +#define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1 +#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback" +typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; +typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 transformFeedback; + VkBool32 geometryStreams; +} VkPhysicalDeviceTransformFeedbackFeaturesEXT; + +typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxTransformFeedbackStreams; + uint32_t maxTransformFeedbackBuffers; + VkDeviceSize maxTransformFeedbackBufferSize; + uint32_t maxTransformFeedbackStreamDataSize; + uint32_t maxTransformFeedbackBufferDataSize; + uint32_t maxTransformFeedbackBufferDataStride; + VkBool32 transformFeedbackQueries; + VkBool32 transformFeedbackStreamsLinesTriangles; + VkBool32 transformFeedbackRasterizationStreamSelect; + VkBool32 transformFeedbackDraw; +} VkPhysicalDeviceTransformFeedbackPropertiesEXT; + +typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipelineRasterizationStateStreamCreateFlagsEXT flags; + uint32_t rasterizationStream; +} VkPipelineRasterizationStateStreamCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes); +typedef void (VKAPI_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); +typedef void (VKAPI_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags, + uint32_t index); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + uint32_t index); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( + VkCommandBuffer commandBuffer, + uint32_t instanceCount, + uint32_t firstInstance, + VkBuffer counterBuffer, + VkDeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride); +#endif +#endif + + +// VK_NVX_binary_import is a preprocessor guard. Do not pass it to API calls. +#define VK_NVX_binary_import 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) +#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 2 +#define VK_NVX_BINARY_IMPORT_EXTENSION_NAME "VK_NVX_binary_import" +typedef struct VkCuModuleCreateInfoNVX { + VkStructureType sType; + const void* pNext; + size_t dataSize; + const void* pData; +} VkCuModuleCreateInfoNVX; + +typedef struct VkCuModuleTexturingModeCreateInfoNVX { + VkStructureType sType; + const void* pNext; + VkBool32 use64bitTexturing; +} VkCuModuleTexturingModeCreateInfoNVX; + +typedef struct VkCuFunctionCreateInfoNVX { + VkStructureType sType; + const void* pNext; + VkCuModuleNVX module; + const char* pName; +} VkCuFunctionCreateInfoNVX; + +typedef struct VkCuLaunchInfoNVX { + VkStructureType sType; + const void* pNext; + VkCuFunctionNVX function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void* const * pParams; + size_t extraCount; + const void* const * pExtras; +} VkCuLaunchInfoNVX; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateCuModuleNVX)(VkDevice device, const VkCuModuleCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuModuleNVX* pModule); +typedef VkResult (VKAPI_PTR *PFN_vkCreateCuFunctionNVX)(VkDevice device, const VkCuFunctionCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuFunctionNVX* pFunction); +typedef void (VKAPI_PTR *PFN_vkDestroyCuModuleNVX)(VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDestroyCuFunctionNVX)(VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdCuLaunchKernelNVX)(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX* pLaunchInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuModuleNVX( + VkDevice device, + const VkCuModuleCreateInfoNVX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCuModuleNVX* pModule); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuFunctionNVX( + VkDevice device, + const VkCuFunctionCreateInfoNVX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCuFunctionNVX* pFunction); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCuModuleNVX( + VkDevice device, + VkCuModuleNVX module, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCuFunctionNVX( + VkDevice device, + VkCuFunctionNVX function, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCuLaunchKernelNVX( + VkCommandBuffer commandBuffer, + const VkCuLaunchInfoNVX* pLaunchInfo); +#endif +#endif + + +// VK_NVX_image_view_handle is a preprocessor guard. Do not pass it to API calls. +#define VK_NVX_image_view_handle 1 +#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 4 +#define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle" +typedef struct VkImageViewHandleInfoNVX { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkDescriptorType descriptorType; + VkSampler sampler; +} VkImageViewHandleInfoNVX; + +typedef struct VkImageViewAddressPropertiesNVX { + VkStructureType sType; + void* pNext; + VkDeviceAddress deviceAddress; + VkDeviceSize size; +} VkImageViewAddressPropertiesNVX; + +typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetImageViewHandle64NVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties); +typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceCombinedImageSamplerIndexNVX)(VkDevice device, uint64_t imageViewIndex, uint64_t samplerIndex); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetImageViewHandle64NVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( + VkDevice device, + VkImageView imageView, + VkImageViewAddressPropertiesNVX* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceCombinedImageSamplerIndexNVX( + VkDevice device, + uint64_t imageViewIndex, + uint64_t samplerIndex); +#endif +#endif + + +// VK_AMD_draw_indirect_count is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_draw_indirect_count 1 +#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2 +#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count" +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + + +// VK_AMD_negative_viewport_height is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_negative_viewport_height 1 +#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1 +#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height" + + +// VK_AMD_gpu_shader_half_float is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_gpu_shader_half_float 1 +#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2 +#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float" + + +// VK_AMD_shader_ballot is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_ballot 1 +#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1 +#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot" + + +// VK_AMD_texture_gather_bias_lod is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_texture_gather_bias_lod 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod" +typedef struct VkTextureLODGatherFormatPropertiesAMD { + VkStructureType sType; + void* pNext; + VkBool32 supportsTextureGatherLODBiasAMD; +} VkTextureLODGatherFormatPropertiesAMD; + + + +// VK_AMD_shader_info is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_info 1 +#define VK_AMD_SHADER_INFO_SPEC_VERSION 1 +#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info" + +typedef enum VkShaderInfoTypeAMD { + VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0, + VK_SHADER_INFO_TYPE_BINARY_AMD = 1, + VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2, + VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkShaderInfoTypeAMD; +typedef struct VkShaderResourceUsageAMD { + uint32_t numUsedVgprs; + uint32_t numUsedSgprs; + uint32_t ldsSizePerLocalWorkGroup; + size_t ldsUsageSizeInBytes; + size_t scratchMemUsageInBytes; +} VkShaderResourceUsageAMD; + +typedef struct VkShaderStatisticsInfoAMD { + VkShaderStageFlags shaderStageMask; + VkShaderResourceUsageAMD resourceUsage; + uint32_t numPhysicalVgprs; + uint32_t numPhysicalSgprs; + uint32_t numAvailableVgprs; + uint32_t numAvailableSgprs; + uint32_t computeWorkGroupSize[3]; +} VkShaderStatisticsInfoAMD; + +typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( + VkDevice device, + VkPipeline pipeline, + VkShaderStageFlagBits shaderStage, + VkShaderInfoTypeAMD infoType, + size_t* pInfoSize, + void* pInfo); +#endif +#endif + + +// VK_AMD_shader_image_load_store_lod is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_image_load_store_lod 1 +#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1 +#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod" + + +// VK_NV_corner_sampled_image is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_corner_sampled_image 1 +#define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2 +#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image" +typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cornerSampledImage; +} VkPhysicalDeviceCornerSampledImageFeaturesNV; + + + +// VK_IMG_format_pvrtc is a preprocessor guard. Do not pass it to API calls. +#define VK_IMG_format_pvrtc 1 +#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1 +#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc" + + +// VK_NV_external_memory_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory_capabilities 1 +#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities" + +typedef enum VkExternalMemoryHandleTypeFlagBitsNV { + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkExternalMemoryHandleTypeFlagBitsNV; +typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; + +typedef enum VkExternalMemoryFeatureFlagBitsNV { + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004, + VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkExternalMemoryFeatureFlagBitsNV; +typedef VkFlags VkExternalMemoryFeatureFlagsNV; +typedef struct VkExternalImageFormatPropertiesNV { + VkImageFormatProperties imageFormatProperties; + VkExternalMemoryFeatureFlagsNV externalMemoryFeatures; + VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes; + VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes; +} VkExternalImageFormatPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); +#endif +#endif + + +// VK_NV_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory 1 +#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory" +typedef struct VkExternalMemoryImageCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsNV handleTypes; +} VkExternalMemoryImageCreateInfoNV; + +typedef struct VkExportMemoryAllocateInfoNV { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsNV handleTypes; +} VkExportMemoryAllocateInfoNV; + + + +// VK_EXT_validation_flags is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_validation_flags 1 +#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 3 +#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags" + +typedef enum VkValidationCheckEXT { + VK_VALIDATION_CHECK_ALL_EXT = 0, + VK_VALIDATION_CHECK_SHADERS_EXT = 1, + VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCheckEXT; +typedef struct VkValidationFlagsEXT { + VkStructureType sType; + const void* pNext; + uint32_t disabledValidationCheckCount; + const VkValidationCheckEXT* pDisabledValidationChecks; +} VkValidationFlagsEXT; + + + +// VK_EXT_shader_subgroup_ballot is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_subgroup_ballot 1 +#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot" + + +// VK_EXT_shader_subgroup_vote is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_subgroup_vote 1 +#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote" + + +// VK_EXT_texture_compression_astc_hdr is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_texture_compression_astc_hdr 1 +#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1 +#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr" +typedef VkPhysicalDeviceTextureCompressionASTCHDRFeatures VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT; + + + +// VK_EXT_astc_decode_mode is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_astc_decode_mode 1 +#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1 +#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode" +typedef struct VkImageViewASTCDecodeModeEXT { + VkStructureType sType; + const void* pNext; + VkFormat decodeMode; +} VkImageViewASTCDecodeModeEXT; + +typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 decodeModeSharedExponent; +} VkPhysicalDeviceASTCDecodeFeaturesEXT; + + + +// VK_EXT_pipeline_robustness is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_robustness 1 +#define VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_pipeline_robustness" +typedef VkPipelineRobustnessBufferBehavior VkPipelineRobustnessBufferBehaviorEXT; + +typedef VkPipelineRobustnessImageBehavior VkPipelineRobustnessImageBehaviorEXT; + +typedef VkPhysicalDevicePipelineRobustnessFeatures VkPhysicalDevicePipelineRobustnessFeaturesEXT; + +typedef VkPhysicalDevicePipelineRobustnessProperties VkPhysicalDevicePipelineRobustnessPropertiesEXT; + +typedef VkPipelineRobustnessCreateInfo VkPipelineRobustnessCreateInfoEXT; + + + +// VK_EXT_conditional_rendering is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_conditional_rendering 1 +#define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2 +#define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering" + +typedef enum VkConditionalRenderingFlagBitsEXT { + VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 0x00000001, + VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkConditionalRenderingFlagBitsEXT; +typedef VkFlags VkConditionalRenderingFlagsEXT; +typedef struct VkConditionalRenderingBeginInfoEXT { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; + VkDeviceSize offset; + VkConditionalRenderingFlagsEXT flags; +} VkConditionalRenderingBeginInfoEXT; + +typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 conditionalRendering; + VkBool32 inheritedConditionalRendering; +} VkPhysicalDeviceConditionalRenderingFeaturesEXT; + +typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 conditionalRenderingEnable; +} VkCommandBufferInheritanceConditionalRenderingInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); +typedef void (VKAPI_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( + VkCommandBuffer commandBuffer, + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( + VkCommandBuffer commandBuffer); +#endif +#endif + + +// VK_NV_clip_space_w_scaling is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_clip_space_w_scaling 1 +#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1 +#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling" +typedef struct VkViewportWScalingNV { + float xcoeff; + float ycoeff; +} VkViewportWScalingNV; + +typedef struct VkPipelineViewportWScalingStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 viewportWScalingEnable; + uint32_t viewportCount; + const VkViewportWScalingNV* pViewportWScalings; +} VkPipelineViewportWScalingStateCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportWScalingNV* pViewportWScalings); +#endif +#endif + + +// VK_EXT_direct_mode_display is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_direct_mode_display 1 +#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1 +#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display" +typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display); +#endif +#endif + + +// VK_EXT_display_surface_counter is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_display_surface_counter 1 +#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1 +#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter" + +typedef enum VkSurfaceCounterFlagBitsEXT { + VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 0x00000001, + // VK_SURFACE_COUNTER_VBLANK_EXT is a legacy alias + VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT, + VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSurfaceCounterFlagBitsEXT; +typedef VkFlags VkSurfaceCounterFlagsEXT; +typedef struct VkSurfaceCapabilities2EXT { + VkStructureType sType; + void* pNext; + uint32_t minImageCount; + uint32_t maxImageCount; + VkExtent2D currentExtent; + VkExtent2D minImageExtent; + VkExtent2D maxImageExtent; + uint32_t maxImageArrayLayers; + VkSurfaceTransformFlagsKHR supportedTransforms; + VkSurfaceTransformFlagBitsKHR currentTransform; + VkCompositeAlphaFlagsKHR supportedCompositeAlpha; + VkImageUsageFlags supportedUsageFlags; + VkSurfaceCounterFlagsEXT supportedSurfaceCounters; +} VkSurfaceCapabilities2EXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT* pSurfaceCapabilities); +#endif +#endif + + +// VK_EXT_display_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_display_control 1 +#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control" + +typedef enum VkDisplayPowerStateEXT { + VK_DISPLAY_POWER_STATE_OFF_EXT = 0, + VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1, + VK_DISPLAY_POWER_STATE_ON_EXT = 2, + VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDisplayPowerStateEXT; + +typedef enum VkDeviceEventTypeEXT { + VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0, + VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceEventTypeEXT; + +typedef enum VkDisplayEventTypeEXT { + VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0, + VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDisplayEventTypeEXT; +typedef struct VkDisplayPowerInfoEXT { + VkStructureType sType; + const void* pNext; + VkDisplayPowerStateEXT powerState; +} VkDisplayPowerInfoEXT; + +typedef struct VkDeviceEventInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceEventTypeEXT deviceEvent; +} VkDeviceEventInfoEXT; + +typedef struct VkDisplayEventInfoEXT { + VkStructureType sType; + const void* pNext; + VkDisplayEventTypeEXT displayEvent; +} VkDisplayEventInfoEXT; + +typedef struct VkSwapchainCounterCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkSurfaceCounterFlagsEXT surfaceCounters; +} VkSwapchainCounterCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo); +typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); +typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); +typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayPowerInfoEXT* pDisplayPowerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( + VkDevice device, + const VkDeviceEventInfoEXT* pDeviceEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayEventInfoEXT* pDisplayEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSurfaceCounterFlagBitsEXT counter, + uint64_t* pCounterValue); +#endif +#endif + + +// VK_GOOGLE_display_timing is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_display_timing 1 +#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1 +#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing" +typedef struct VkRefreshCycleDurationGOOGLE { + uint64_t refreshDuration; +} VkRefreshCycleDurationGOOGLE; + +typedef struct VkPastPresentationTimingGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; + uint64_t actualPresentTime; + uint64_t earliestPresentTime; + uint64_t presentMargin; +} VkPastPresentationTimingGOOGLE; + +typedef struct VkPresentTimeGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; +} VkPresentTimeGOOGLE; + +typedef struct VkPresentTimesInfoGOOGLE { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentTimeGOOGLE* pTimes; +} VkPresentTimesInfoGOOGLE; + +typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pPresentationTimingCount, + VkPastPresentationTimingGOOGLE* pPresentationTimings); +#endif +#endif + + +// VK_NV_sample_mask_override_coverage is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_sample_mask_override_coverage 1 +#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1 +#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage" + + +// VK_NV_geometry_shader_passthrough is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_geometry_shader_passthrough 1 +#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1 +#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough" + + +// VK_NV_viewport_array2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_viewport_array2 1 +#define VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION 1 +#define VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME "VK_NV_viewport_array2" +// VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION is a legacy alias +#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION +// VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME is a legacy alias +#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME + + +// VK_NVX_multiview_per_view_attributes is a preprocessor guard. Do not pass it to API calls. +#define VK_NVX_multiview_per_view_attributes 1 +#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1 +#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes" +typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX { + VkStructureType sType; + void* pNext; + VkBool32 perViewPositionAllComponents; +} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + +typedef struct VkMultiviewPerViewAttributesInfoNVX { + VkStructureType sType; + const void* pNext; + VkBool32 perViewAttributes; + VkBool32 perViewAttributesPositionXOnly; +} VkMultiviewPerViewAttributesInfoNVX; + + + +// VK_NV_viewport_swizzle is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_viewport_swizzle 1 +#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1 +#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle" + +typedef enum VkViewportCoordinateSwizzleNV { + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7, + VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF +} VkViewportCoordinateSwizzleNV; +typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; +typedef struct VkViewportSwizzleNV { + VkViewportCoordinateSwizzleNV x; + VkViewportCoordinateSwizzleNV y; + VkViewportCoordinateSwizzleNV z; + VkViewportCoordinateSwizzleNV w; +} VkViewportSwizzleNV; + +typedef struct VkPipelineViewportSwizzleStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineViewportSwizzleStateCreateFlagsNV flags; + uint32_t viewportCount; + const VkViewportSwizzleNV* pViewportSwizzles; +} VkPipelineViewportSwizzleStateCreateInfoNV; + + + +// VK_EXT_discard_rectangles is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_discard_rectangles 1 +#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 2 +#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles" + +typedef enum VkDiscardRectangleModeEXT { + VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0, + VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1, + VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDiscardRectangleModeEXT; +typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; +typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxDiscardRectangles; +} VkPhysicalDeviceDiscardRectanglePropertiesEXT; + +typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipelineDiscardRectangleStateCreateFlagsEXT flags; + VkDiscardRectangleModeEXT discardRectangleMode; + uint32_t discardRectangleCount; + const VkRect2D* pDiscardRectangles; +} VkPipelineDiscardRectangleStateCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles); +typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleModeEXT)(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( + VkCommandBuffer commandBuffer, + uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const VkRect2D* pDiscardRectangles); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 discardRectangleEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleModeEXT( + VkCommandBuffer commandBuffer, + VkDiscardRectangleModeEXT discardRectangleMode); +#endif +#endif + + +// VK_EXT_conservative_rasterization is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_conservative_rasterization 1 +#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1 +#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization" + +typedef enum VkConservativeRasterizationModeEXT { + VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0, + VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1, + VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2, + VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkConservativeRasterizationModeEXT; +typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT; +typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT { + VkStructureType sType; + void* pNext; + float primitiveOverestimationSize; + float maxExtraPrimitiveOverestimationSize; + float extraPrimitiveOverestimationSizeGranularity; + VkBool32 primitiveUnderestimation; + VkBool32 conservativePointAndLineRasterization; + VkBool32 degenerateTrianglesRasterized; + VkBool32 degenerateLinesRasterized; + VkBool32 fullyCoveredFragmentShaderInputVariable; + VkBool32 conservativeRasterizationPostDepthCoverage; +} VkPhysicalDeviceConservativeRasterizationPropertiesEXT; + +typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipelineRasterizationConservativeStateCreateFlagsEXT flags; + VkConservativeRasterizationModeEXT conservativeRasterizationMode; + float extraPrimitiveOverestimationSize; +} VkPipelineRasterizationConservativeStateCreateInfoEXT; + + + +// VK_EXT_depth_clip_enable is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clip_enable 1 +#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable" +typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT; +typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthClipEnable; +} VkPhysicalDeviceDepthClipEnableFeaturesEXT; + +typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipelineRasterizationDepthClipStateCreateFlagsEXT flags; + VkBool32 depthClipEnable; +} VkPipelineRasterizationDepthClipStateCreateInfoEXT; + + + +// VK_EXT_swapchain_colorspace is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_swapchain_colorspace 1 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 5 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace" + + +// VK_EXT_hdr_metadata is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_hdr_metadata 1 +#define VK_EXT_HDR_METADATA_SPEC_VERSION 3 +#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata" +typedef struct VkXYColorEXT { + float x; + float y; +} VkXYColorEXT; + +typedef struct VkHdrMetadataEXT { + VkStructureType sType; + const void* pNext; + VkXYColorEXT displayPrimaryRed; + VkXYColorEXT displayPrimaryGreen; + VkXYColorEXT displayPrimaryBlue; + VkXYColorEXT whitePoint; + float maxLuminance; + float minLuminance; + float maxContentLightLevel; + float maxFrameAverageLightLevel; +} VkHdrMetadataEXT; + +typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainKHR* pSwapchains, + const VkHdrMetadataEXT* pMetadata); +#endif +#endif + + +// VK_IMG_relaxed_line_rasterization is a preprocessor guard. Do not pass it to API calls. +#define VK_IMG_relaxed_line_rasterization 1 +#define VK_IMG_RELAXED_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_IMG_RELAXED_LINE_RASTERIZATION_EXTENSION_NAME "VK_IMG_relaxed_line_rasterization" +typedef struct VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG { + VkStructureType sType; + void* pNext; + VkBool32 relaxedLineRasterization; +} VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + + + +// VK_EXT_external_memory_dma_buf is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_dma_buf 1 +#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf" + + +// VK_EXT_queue_family_foreign is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_queue_family_foreign 1 +#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1 +#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign" +#define VK_QUEUE_FAMILY_FOREIGN_EXT (~2U) + + +// VK_EXT_debug_utils is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_debug_utils 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) +#define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2 +#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils" +typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; + +typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT { + VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugUtilsMessageSeverityFlagBitsEXT; + +typedef enum VkDebugUtilsMessageTypeFlagBitsEXT { + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001, + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002, + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004, + VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT = 0x00000008, + VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugUtilsMessageTypeFlagBitsEXT; +typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; +typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; +typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; +typedef struct VkDebugUtilsLabelEXT { + VkStructureType sType; + const void* pNext; + const char* pLabelName; + float color[4]; +} VkDebugUtilsLabelEXT; + +typedef struct VkDebugUtilsObjectNameInfoEXT { + VkStructureType sType; + const void* pNext; + VkObjectType objectType; + uint64_t objectHandle; + const char* pObjectName; +} VkDebugUtilsObjectNameInfoEXT; + +typedef struct VkDebugUtilsMessengerCallbackDataEXT { + VkStructureType sType; + const void* pNext; + VkDebugUtilsMessengerCallbackDataFlagsEXT flags; + const char* pMessageIdName; + int32_t messageIdNumber; + const char* pMessage; + uint32_t queueLabelCount; + const VkDebugUtilsLabelEXT* pQueueLabels; + uint32_t cmdBufLabelCount; + const VkDebugUtilsLabelEXT* pCmdBufLabels; + uint32_t objectCount; + const VkDebugUtilsObjectNameInfoEXT* pObjects; +} VkDebugUtilsMessengerCallbackDataEXT; + +typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)( + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData); + +typedef struct VkDebugUtilsMessengerCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugUtilsMessengerCreateFlagsEXT flags; + VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; + VkDebugUtilsMessageTypeFlagsEXT messageType; + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback; + void* pUserData; +} VkDebugUtilsMessengerCreateInfoEXT; + +typedef struct VkDebugUtilsObjectTagInfoEXT { + VkStructureType sType; + const void* pNext; + VkObjectType objectType; + uint64_t objectHandle; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkDebugUtilsObjectTagInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo); +typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo); +typedef void (VKAPI_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef void (VKAPI_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue); +typedef void (VKAPI_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger); +typedef void (VKAPI_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( + VkDevice device, + const VkDebugUtilsObjectNameInfoEXT* pNameInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( + VkDevice device, + const VkDebugUtilsObjectTagInfoEXT* pTagInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( + VkQueue queue); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( + VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugUtilsMessengerEXT* pMessenger); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( + VkInstance instance, + VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( + VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); +#endif +#endif + + +// VK_EXT_sampler_filter_minmax is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_sampler_filter_minmax 1 +#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2 +#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax" +typedef VkSamplerReductionMode VkSamplerReductionModeEXT; + +typedef VkSamplerReductionModeCreateInfo VkSamplerReductionModeCreateInfoEXT; + +typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT; + + + +// VK_AMD_gpu_shader_int16 is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_gpu_shader_int16 1 +#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2 +#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16" + + +// VK_EXT_descriptor_heap is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_descriptor_heap 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorARM) +#define VK_EXT_DESCRIPTOR_HEAP_SPEC_VERSION 1 +#define VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME "VK_EXT_descriptor_heap" + +typedef enum VkDescriptorMappingSourceEXT { + VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT = 0, + VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT = 1, + VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT = 2, + VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT = 3, + VK_DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT = 4, + VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT = 5, + VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT = 6, + VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT = 7, + VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT = 8, + VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT = 9, + VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT = 10, + VK_DESCRIPTOR_MAPPING_SOURCE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDescriptorMappingSourceEXT; +typedef VkFlags64 VkTensorViewCreateFlagsARM; + +// Flag bits for VkTensorViewCreateFlagBitsARM +typedef VkFlags64 VkTensorViewCreateFlagBitsARM; +static const VkTensorViewCreateFlagBitsARM VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 0x00000001ULL; + + +typedef enum VkSpirvResourceTypeFlagBitsEXT { + VK_SPIRV_RESOURCE_TYPE_ALL_EXT = 0x7FFFFFFF, + VK_SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT = 0x00000001, + VK_SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT = 0x00000002, + VK_SPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT = 0x00000004, + VK_SPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT = 0x00000008, + VK_SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT = 0x00000010, + VK_SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT = 0x00000020, + VK_SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT = 0x00000040, + VK_SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT = 0x00000080, + VK_SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT = 0x00000100, + VK_SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM = 0x00000200, + VK_SPIRV_RESOURCE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSpirvResourceTypeFlagBitsEXT; +typedef VkFlags VkSpirvResourceTypeFlagsEXT; +typedef struct VkHostAddressRangeEXT { + void* address; + size_t size; +} VkHostAddressRangeEXT; + +typedef struct VkHostAddressRangeConstEXT { + const void* address; + size_t size; +} VkHostAddressRangeConstEXT; + +typedef struct VkDeviceAddressRangeEXT { + VkDeviceAddress address; + VkDeviceSize size; +} VkDeviceAddressRangeEXT; + +typedef struct VkTexelBufferDescriptorInfoEXT { + VkStructureType sType; + const void* pNext; + VkFormat format; + VkDeviceAddressRangeEXT addressRange; +} VkTexelBufferDescriptorInfoEXT; + +typedef struct VkImageDescriptorInfoEXT { + VkStructureType sType; + const void* pNext; + const VkImageViewCreateInfo* pView; + VkImageLayout layout; +} VkImageDescriptorInfoEXT; + +typedef struct VkTensorViewCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewCreateFlagsARM flags; + VkTensorARM tensor; + VkFormat format; +} VkTensorViewCreateInfoARM; + +typedef union VkResourceDescriptorDataEXT { + const VkImageDescriptorInfoEXT* pImage; + const VkTexelBufferDescriptorInfoEXT* pTexelBuffer; + const VkDeviceAddressRangeEXT* pAddressRange; + const VkTensorViewCreateInfoARM* pTensorARM; +} VkResourceDescriptorDataEXT; + +typedef struct VkResourceDescriptorInfoEXT { + VkStructureType sType; + const void* pNext; + VkDescriptorType type; + VkResourceDescriptorDataEXT data; +} VkResourceDescriptorInfoEXT; + +typedef struct VkBindHeapInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceAddressRangeEXT heapRange; + VkDeviceSize reservedRangeOffset; + VkDeviceSize reservedRangeSize; +} VkBindHeapInfoEXT; + +typedef struct VkPushDataInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t offset; + VkHostAddressRangeConstEXT data; +} VkPushDataInfoEXT; + +typedef struct VkDescriptorMappingSourceConstantOffsetEXT { + uint32_t heapOffset; + uint32_t heapArrayStride; + const VkSamplerCreateInfo* pEmbeddedSampler; + uint32_t samplerHeapOffset; + uint32_t samplerHeapArrayStride; +} VkDescriptorMappingSourceConstantOffsetEXT; + +typedef struct VkDescriptorMappingSourcePushIndexEXT { + uint32_t heapOffset; + uint32_t pushOffset; + uint32_t heapIndexStride; + uint32_t heapArrayStride; + const VkSamplerCreateInfo* pEmbeddedSampler; + VkBool32 useCombinedImageSamplerIndex; + uint32_t samplerHeapOffset; + uint32_t samplerPushOffset; + uint32_t samplerHeapIndexStride; + uint32_t samplerHeapArrayStride; +} VkDescriptorMappingSourcePushIndexEXT; + +typedef struct VkDescriptorMappingSourceIndirectIndexEXT { + uint32_t heapOffset; + uint32_t pushOffset; + uint32_t addressOffset; + uint32_t heapIndexStride; + uint32_t heapArrayStride; + const VkSamplerCreateInfo* pEmbeddedSampler; + VkBool32 useCombinedImageSamplerIndex; + uint32_t samplerHeapOffset; + uint32_t samplerPushOffset; + uint32_t samplerAddressOffset; + uint32_t samplerHeapIndexStride; + uint32_t samplerHeapArrayStride; +} VkDescriptorMappingSourceIndirectIndexEXT; + +typedef struct VkDescriptorMappingSourceHeapDataEXT { + uint32_t heapOffset; + uint32_t pushOffset; +} VkDescriptorMappingSourceHeapDataEXT; + +typedef struct VkDescriptorMappingSourceIndirectAddressEXT { + uint32_t pushOffset; + uint32_t addressOffset; +} VkDescriptorMappingSourceIndirectAddressEXT; + +typedef struct VkDescriptorMappingSourceShaderRecordIndexEXT { + uint32_t heapOffset; + uint32_t shaderRecordOffset; + uint32_t heapIndexStride; + uint32_t heapArrayStride; + const VkSamplerCreateInfo* pEmbeddedSampler; + VkBool32 useCombinedImageSamplerIndex; + uint32_t samplerHeapOffset; + uint32_t samplerShaderRecordOffset; + uint32_t samplerHeapIndexStride; + uint32_t samplerHeapArrayStride; +} VkDescriptorMappingSourceShaderRecordIndexEXT; + +typedef struct VkDescriptorMappingSourceIndirectIndexArrayEXT { + uint32_t heapOffset; + uint32_t pushOffset; + uint32_t addressOffset; + uint32_t heapIndexStride; + const VkSamplerCreateInfo* pEmbeddedSampler; + VkBool32 useCombinedImageSamplerIndex; + uint32_t samplerHeapOffset; + uint32_t samplerPushOffset; + uint32_t samplerAddressOffset; + uint32_t samplerHeapIndexStride; +} VkDescriptorMappingSourceIndirectIndexArrayEXT; + +typedef union VkDescriptorMappingSourceDataEXT { + VkDescriptorMappingSourceConstantOffsetEXT constantOffset; + VkDescriptorMappingSourcePushIndexEXT pushIndex; + VkDescriptorMappingSourceIndirectIndexEXT indirectIndex; + VkDescriptorMappingSourceIndirectIndexArrayEXT indirectIndexArray; + VkDescriptorMappingSourceHeapDataEXT heapData; + uint32_t pushDataOffset; + uint32_t pushAddressOffset; + VkDescriptorMappingSourceIndirectAddressEXT indirectAddress; + VkDescriptorMappingSourceShaderRecordIndexEXT shaderRecordIndex; + uint32_t shaderRecordDataOffset; + uint32_t shaderRecordAddressOffset; +} VkDescriptorMappingSourceDataEXT; + +typedef struct VkDescriptorSetAndBindingMappingEXT { + VkStructureType sType; + const void* pNext; + uint32_t descriptorSet; + uint32_t firstBinding; + uint32_t bindingCount; + VkSpirvResourceTypeFlagsEXT resourceMask; + VkDescriptorMappingSourceEXT source; + VkDescriptorMappingSourceDataEXT sourceData; +} VkDescriptorSetAndBindingMappingEXT; + +typedef struct VkShaderDescriptorSetAndBindingMappingInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t mappingCount; + const VkDescriptorSetAndBindingMappingEXT* pMappings; +} VkShaderDescriptorSetAndBindingMappingInfoEXT; + +typedef struct VkOpaqueCaptureDataCreateInfoEXT { + VkStructureType sType; + const void* pNext; + const VkHostAddressRangeConstEXT* pData; +} VkOpaqueCaptureDataCreateInfoEXT; + +typedef struct VkPhysicalDeviceDescriptorHeapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 descriptorHeap; + VkBool32 descriptorHeapCaptureReplay; +} VkPhysicalDeviceDescriptorHeapFeaturesEXT; + +typedef struct VkPhysicalDeviceDescriptorHeapPropertiesEXT { + VkStructureType sType; + void* pNext; + VkDeviceSize samplerHeapAlignment; + VkDeviceSize resourceHeapAlignment; + VkDeviceSize maxSamplerHeapSize; + VkDeviceSize maxResourceHeapSize; + VkDeviceSize minSamplerHeapReservedRange; + VkDeviceSize minSamplerHeapReservedRangeWithEmbedded; + VkDeviceSize minResourceHeapReservedRange; + VkDeviceSize samplerDescriptorSize; + VkDeviceSize imageDescriptorSize; + VkDeviceSize bufferDescriptorSize; + VkDeviceSize samplerDescriptorAlignment; + VkDeviceSize imageDescriptorAlignment; + VkDeviceSize bufferDescriptorAlignment; + VkDeviceSize maxPushDataSize; + size_t imageCaptureReplayOpaqueDataSize; + uint32_t maxDescriptorHeapEmbeddedSamplers; + uint32_t samplerYcbcrConversionCount; + VkBool32 sparseDescriptorHeaps; + VkBool32 protectedDescriptorHeaps; +} VkPhysicalDeviceDescriptorHeapPropertiesEXT; + +typedef struct VkCommandBufferInheritanceDescriptorHeapInfoEXT { + VkStructureType sType; + const void* pNext; + const VkBindHeapInfoEXT* pSamplerHeapBindInfo; + const VkBindHeapInfoEXT* pResourceHeapBindInfo; +} VkCommandBufferInheritanceDescriptorHeapInfoEXT; + +typedef struct VkSamplerCustomBorderColorIndexCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t index; +} VkSamplerCustomBorderColorIndexCreateInfoEXT; + +typedef struct VkSamplerCustomBorderColorCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkClearColorValue customBorderColor; + VkFormat format; +} VkSamplerCustomBorderColorCreateInfoEXT; + +typedef struct VkIndirectCommandsLayoutPushDataTokenNV { + VkStructureType sType; + const void* pNext; + uint32_t pushDataOffset; + uint32_t pushDataSize; +} VkIndirectCommandsLayoutPushDataTokenNV; + +typedef struct VkSubsampledImageFormatPropertiesEXT { + VkStructureType sType; + const void* pNext; + uint32_t subsampledImageDescriptorCount; +} VkSubsampledImageFormatPropertiesEXT; + +typedef struct VkPhysicalDeviceDescriptorHeapTensorPropertiesARM { + VkStructureType sType; + void* pNext; + VkDeviceSize tensorDescriptorSize; + VkDeviceSize tensorDescriptorAlignment; + size_t tensorCaptureReplayOpaqueDataSize; +} VkPhysicalDeviceDescriptorHeapTensorPropertiesARM; + +typedef VkResult (VKAPI_PTR *PFN_vkWriteSamplerDescriptorsEXT)(VkDevice device, uint32_t samplerCount, const VkSamplerCreateInfo* pSamplers, const VkHostAddressRangeEXT* pDescriptors); +typedef VkResult (VKAPI_PTR *PFN_vkWriteResourceDescriptorsEXT)(VkDevice device, uint32_t resourceCount, const VkResourceDescriptorInfoEXT* pResources, const VkHostAddressRangeEXT* pDescriptors); +typedef void (VKAPI_PTR *PFN_vkCmdBindSamplerHeapEXT)(VkCommandBuffer commandBuffer, const VkBindHeapInfoEXT* pBindInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindResourceHeapEXT)(VkCommandBuffer commandBuffer, const VkBindHeapInfoEXT* pBindInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDataEXT)(VkCommandBuffer commandBuffer, const VkPushDataInfoEXT* pPushDataInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageOpaqueCaptureDataEXT)(VkDevice device, uint32_t imageCount, const VkImage* pImages, VkHostAddressRangeEXT* pDatas); +typedef VkDeviceSize (VKAPI_PTR *PFN_vkGetPhysicalDeviceDescriptorSizeEXT)(VkPhysicalDevice physicalDevice, VkDescriptorType descriptorType); +typedef VkResult (VKAPI_PTR *PFN_vkRegisterCustomBorderColorEXT)(VkDevice device, const VkSamplerCustomBorderColorCreateInfoEXT* pBorderColor, VkBool32 requestIndex, uint32_t* pIndex); +typedef void (VKAPI_PTR *PFN_vkUnregisterCustomBorderColorEXT)(VkDevice device, uint32_t index); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorOpaqueCaptureDataARM)(VkDevice device, uint32_t tensorCount, const VkTensorARM* pTensors, VkHostAddressRangeEXT* pDatas); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWriteSamplerDescriptorsEXT( + VkDevice device, + uint32_t samplerCount, + const VkSamplerCreateInfo* pSamplers, + const VkHostAddressRangeEXT* pDescriptors); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWriteResourceDescriptorsEXT( + VkDevice device, + uint32_t resourceCount, + const VkResourceDescriptorInfoEXT* pResources, + const VkHostAddressRangeEXT* pDescriptors); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindSamplerHeapEXT( + VkCommandBuffer commandBuffer, + const VkBindHeapInfoEXT* pBindInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindResourceHeapEXT( + VkCommandBuffer commandBuffer, + const VkBindHeapInfoEXT* pBindInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDataEXT( + VkCommandBuffer commandBuffer, + const VkPushDataInfoEXT* pPushDataInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageOpaqueCaptureDataEXT( + VkDevice device, + uint32_t imageCount, + const VkImage* pImages, + VkHostAddressRangeEXT* pDatas); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceSize VKAPI_CALL vkGetPhysicalDeviceDescriptorSizeEXT( + VkPhysicalDevice physicalDevice, + VkDescriptorType descriptorType); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterCustomBorderColorEXT( + VkDevice device, + const VkSamplerCustomBorderColorCreateInfoEXT* pBorderColor, + VkBool32 requestIndex, + uint32_t* pIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUnregisterCustomBorderColorEXT( + VkDevice device, + uint32_t index); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorOpaqueCaptureDataARM( + VkDevice device, + uint32_t tensorCount, + const VkTensorARM* pTensors, + VkHostAddressRangeEXT* pDatas); +#endif +#endif + + +// VK_AMD_mixed_attachment_samples is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_mixed_attachment_samples 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples" +typedef struct VkAttachmentSampleCountInfoAMD { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const VkSampleCountFlagBits* pColorAttachmentSamples; + VkSampleCountFlagBits depthStencilAttachmentSamples; +} VkAttachmentSampleCountInfoAMD; + + + +// VK_AMD_shader_fragment_mask is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_fragment_mask 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask" + + +// VK_EXT_inline_uniform_block is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_inline_uniform_block 1 +#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1 +#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block" +typedef VkPhysicalDeviceInlineUniformBlockFeatures VkPhysicalDeviceInlineUniformBlockFeaturesEXT; + +typedef VkPhysicalDeviceInlineUniformBlockProperties VkPhysicalDeviceInlineUniformBlockPropertiesEXT; + +typedef VkWriteDescriptorSetInlineUniformBlock VkWriteDescriptorSetInlineUniformBlockEXT; + +typedef VkDescriptorPoolInlineUniformBlockCreateInfo VkDescriptorPoolInlineUniformBlockCreateInfoEXT; + + + +// VK_EXT_shader_stencil_export is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_stencil_export 1 +#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1 +#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export" + + +// VK_EXT_sample_locations is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_sample_locations 1 +#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1 +#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations" +typedef struct VkSampleLocationEXT { + float x; + float y; +} VkSampleLocationEXT; + +typedef struct VkSampleLocationsInfoEXT { + VkStructureType sType; + const void* pNext; + VkSampleCountFlagBits sampleLocationsPerPixel; + VkExtent2D sampleLocationGridSize; + uint32_t sampleLocationsCount; + const VkSampleLocationEXT* pSampleLocations; +} VkSampleLocationsInfoEXT; + +typedef struct VkAttachmentSampleLocationsEXT { + uint32_t attachmentIndex; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkAttachmentSampleLocationsEXT; + +typedef struct VkSubpassSampleLocationsEXT { + uint32_t subpassIndex; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkSubpassSampleLocationsEXT; + +typedef struct VkRenderPassSampleLocationsBeginInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t attachmentInitialSampleLocationsCount; + const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations; + uint32_t postSubpassSampleLocationsCount; + const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations; +} VkRenderPassSampleLocationsBeginInfoEXT; + +typedef struct VkPipelineSampleLocationsStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 sampleLocationsEnable; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkPipelineSampleLocationsStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT { + VkStructureType sType; + void* pNext; + VkSampleCountFlags sampleLocationSampleCounts; + VkExtent2D maxSampleLocationGridSize; + float sampleLocationCoordinateRange[2]; + uint32_t sampleLocationSubPixelBits; + VkBool32 variableSampleLocations; +} VkPhysicalDeviceSampleLocationsPropertiesEXT; + +typedef struct VkMultisamplePropertiesEXT { + VkStructureType sType; + void* pNext; + VkExtent2D maxSampleLocationGridSize; +} VkMultisamplePropertiesEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( + VkCommandBuffer commandBuffer, + const VkSampleLocationsInfoEXT* pSampleLocationsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( + VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT* pMultisampleProperties); +#endif +#endif + + +// VK_EXT_blend_operation_advanced is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_blend_operation_advanced 1 +#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2 +#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced" + +typedef enum VkBlendOverlapEXT { + VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0, + VK_BLEND_OVERLAP_DISJOINT_EXT = 1, + VK_BLEND_OVERLAP_CONJOINT_EXT = 2, + VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBlendOverlapEXT; +typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 advancedBlendCoherentOperations; +} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; + +typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t advancedBlendMaxColorAttachments; + VkBool32 advancedBlendIndependentBlend; + VkBool32 advancedBlendNonPremultipliedSrcColor; + VkBool32 advancedBlendNonPremultipliedDstColor; + VkBool32 advancedBlendCorrelatedOverlap; + VkBool32 advancedBlendAllOperations; +} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; + +typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 srcPremultiplied; + VkBool32 dstPremultiplied; + VkBlendOverlapEXT blendOverlap; +} VkPipelineColorBlendAdvancedStateCreateInfoEXT; + + + +// VK_NV_fragment_coverage_to_color is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fragment_coverage_to_color 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color" +typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; +typedef struct VkPipelineCoverageToColorStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageToColorStateCreateFlagsNV flags; + VkBool32 coverageToColorEnable; + uint32_t coverageToColorLocation; +} VkPipelineCoverageToColorStateCreateInfoNV; + + + +// VK_NV_framebuffer_mixed_samples is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_framebuffer_mixed_samples 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples" + +typedef enum VkCoverageModulationModeNV { + VK_COVERAGE_MODULATION_MODE_NONE_NV = 0, + VK_COVERAGE_MODULATION_MODE_RGB_NV = 1, + VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2, + VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3, + VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageModulationModeNV; +typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; +typedef struct VkPipelineCoverageModulationStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageModulationStateCreateFlagsNV flags; + VkCoverageModulationModeNV coverageModulationMode; + VkBool32 coverageModulationTableEnable; + uint32_t coverageModulationTableCount; + const float* pCoverageModulationTable; +} VkPipelineCoverageModulationStateCreateInfoNV; + +typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV; + + + +// VK_NV_fill_rectangle is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fill_rectangle 1 +#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1 +#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle" + + +// VK_NV_shader_sm_builtins is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_sm_builtins 1 +#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1 +#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins" +typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t shaderSMCount; + uint32_t shaderWarpsPerSM; +} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; + +typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shaderSMBuiltins; +} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; + + + +// VK_EXT_post_depth_coverage is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_post_depth_coverage 1 +#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1 +#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage" + + +// VK_EXT_image_drm_format_modifier is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_drm_format_modifier 1 +#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 2 +#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier" +typedef struct VkDrmFormatModifierPropertiesEXT { + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + VkFormatFeatureFlags drmFormatModifierTilingFeatures; +} VkDrmFormatModifierPropertiesEXT; + +typedef struct VkDrmFormatModifierPropertiesListEXT { + VkStructureType sType; + void* pNext; + uint32_t drmFormatModifierCount; + VkDrmFormatModifierPropertiesEXT* pDrmFormatModifierProperties; +} VkDrmFormatModifierPropertiesListEXT; + +typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT { + VkStructureType sType; + const void* pNext; + uint64_t drmFormatModifier; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; +} VkPhysicalDeviceImageDrmFormatModifierInfoEXT; + +typedef struct VkImageDrmFormatModifierListCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t drmFormatModifierCount; + const uint64_t* pDrmFormatModifiers; +} VkImageDrmFormatModifierListCreateInfoEXT; + +typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + const VkSubresourceLayout* pPlaneLayouts; +} VkImageDrmFormatModifierExplicitCreateInfoEXT; + +typedef struct VkImageDrmFormatModifierPropertiesEXT { + VkStructureType sType; + void* pNext; + uint64_t drmFormatModifier; +} VkImageDrmFormatModifierPropertiesEXT; + +typedef struct VkDrmFormatModifierProperties2EXT { + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + VkFormatFeatureFlags2 drmFormatModifierTilingFeatures; +} VkDrmFormatModifierProperties2EXT; + +typedef struct VkDrmFormatModifierPropertiesList2EXT { + VkStructureType sType; + void* pNext; + uint32_t drmFormatModifierCount; + VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties; +} VkDrmFormatModifierPropertiesList2EXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( + VkDevice device, + VkImage image, + VkImageDrmFormatModifierPropertiesEXT* pProperties); +#endif +#endif + + +// VK_EXT_validation_cache is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_validation_cache 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) +#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1 +#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache" + +typedef enum VkValidationCacheHeaderVersionEXT { + VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1, + VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCacheHeaderVersionEXT; +typedef VkFlags VkValidationCacheCreateFlagsEXT; +typedef struct VkValidationCacheCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkValidationCacheCreateFlagsEXT flags; + size_t initialDataSize; + const void* pInitialData; +} VkValidationCacheCreateInfoEXT; + +typedef struct VkShaderModuleValidationCacheCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkValidationCacheEXT validationCache; +} VkShaderModuleValidationCacheCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache); +typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches); +typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( + VkDevice device, + const VkValidationCacheCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkValidationCacheEXT* pValidationCache); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( + VkDevice device, + VkValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const VkValidationCacheEXT* pSrcCaches); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + size_t* pDataSize, + void* pData); +#endif +#endif + + +// VK_EXT_descriptor_indexing is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_descriptor_indexing 1 +#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 +#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" +typedef VkDescriptorBindingFlagBits VkDescriptorBindingFlagBitsEXT; + +typedef VkDescriptorBindingFlags VkDescriptorBindingFlagsEXT; + +typedef VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT; + +typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT; + +typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT; + +typedef VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT; + +typedef VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT; + + + +// VK_EXT_shader_viewport_index_layer is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_viewport_index_layer 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" + + +// VK_NV_shading_rate_image is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shading_rate_image 1 +#define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3 +#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image" + +typedef enum VkShadingRatePaletteEntryNV { + VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0, + VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1, + VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2, + VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3, + VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11, + VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF +} VkShadingRatePaletteEntryNV; + +typedef enum VkCoarseSampleOrderTypeNV { + VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0, + VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1, + VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2, + VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3, + VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoarseSampleOrderTypeNV; +typedef struct VkShadingRatePaletteNV { + uint32_t shadingRatePaletteEntryCount; + const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries; +} VkShadingRatePaletteNV; + +typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 shadingRateImageEnable; + uint32_t viewportCount; + const VkShadingRatePaletteNV* pShadingRatePalettes; +} VkPipelineViewportShadingRateImageStateCreateInfoNV; + +typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shadingRateImage; + VkBool32 shadingRateCoarseSampleOrder; +} VkPhysicalDeviceShadingRateImageFeaturesNV; + +typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV { + VkStructureType sType; + void* pNext; + VkExtent2D shadingRateTexelSize; + uint32_t shadingRatePaletteSize; + uint32_t shadingRateMaxCoarseSamples; +} VkPhysicalDeviceShadingRateImagePropertiesNV; + +typedef struct VkCoarseSampleLocationNV { + uint32_t pixelX; + uint32_t pixelY; + uint32_t sample; +} VkCoarseSampleLocationNV; + +typedef struct VkCoarseSampleOrderCustomNV { + VkShadingRatePaletteEntryNV shadingRate; + uint32_t sampleCount; + uint32_t sampleLocationCount; + const VkCoarseSampleLocationNV* pSampleLocations; +} VkCoarseSampleOrderCustomNV; + +typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkCoarseSampleOrderTypeNV sampleOrderType; + uint32_t customSampleOrderCount; + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders; +} VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkShadingRatePaletteNV* pShadingRatePalettes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( + VkCommandBuffer commandBuffer, + VkCoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); +#endif +#endif + + +// VK_NV_ray_tracing is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) +#define VK_NV_RAY_TRACING_SPEC_VERSION 3 +#define VK_NV_RAY_TRACING_EXTENSION_NAME "VK_NV_ray_tracing" +#define VK_SHADER_UNUSED_KHR (~0U) +#define VK_SHADER_UNUSED_NV VK_SHADER_UNUSED_KHR + +typedef enum VkRayTracingShaderGroupTypeKHR { + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2, + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkRayTracingShaderGroupTypeKHR; +typedef VkRayTracingShaderGroupTypeKHR VkRayTracingShaderGroupTypeNV; + + +typedef enum VkGeometryTypeKHR { + VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, + VK_GEOMETRY_TYPE_AABBS_KHR = 1, + VK_GEOMETRY_TYPE_INSTANCES_KHR = 2, + VK_GEOMETRY_TYPE_SPHERES_NV = 1000429004, + VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV = 1000429005, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX = 1000478000, +#endif + VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR, + VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR, + VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryTypeKHR; +typedef VkGeometryTypeKHR VkGeometryTypeNV; + + +typedef enum VkAccelerationStructureTypeKHR { + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1, + VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2, + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, + VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureTypeKHR; +typedef VkAccelerationStructureTypeKHR VkAccelerationStructureTypeNV; + + +typedef enum VkCopyAccelerationStructureModeKHR { + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1, + VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2, + VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3, + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, + VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkCopyAccelerationStructureModeKHR; +typedef VkCopyAccelerationStructureModeKHR VkCopyAccelerationStructureModeNV; + + +typedef enum VkAccelerationStructureMemoryRequirementsTypeNV { + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkAccelerationStructureMemoryRequirementsTypeNV; + +typedef enum VkGeometryFlagBitsKHR { + VK_GEOMETRY_OPAQUE_BIT_KHR = 0x00000001, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 0x00000002, + VK_GEOMETRY_OPAQUE_BIT_NV = VK_GEOMETRY_OPAQUE_BIT_KHR, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR, + VK_GEOMETRY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryFlagBitsKHR; +typedef VkFlags VkGeometryFlagsKHR; +typedef VkGeometryFlagsKHR VkGeometryFlagsNV; + +typedef VkGeometryFlagBitsKHR VkGeometryFlagBitsNV; + + +typedef enum VkGeometryInstanceFlagBitsKHR { + VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 0x00000001, + VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR = 0x00000002, + VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 0x00000004, + VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 0x00000008, + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT = 0x00000010, + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 0x00000020, + VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, + VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, + VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, + // VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT is a legacy alias + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT = VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT, + // VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT is a legacy alias + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT = VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryInstanceFlagBitsKHR; +typedef VkFlags VkGeometryInstanceFlagsKHR; +typedef VkGeometryInstanceFlagsKHR VkGeometryInstanceFlagsNV; + +typedef VkGeometryInstanceFlagBitsKHR VkGeometryInstanceFlagBitsNV; + + +typedef enum VkBuildAccelerationStructureFlagBitsKHR { + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 0x00000001, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 0x00000002, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 0x00000004, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 0x00000008, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 0x00000010, + VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = 0x00000020, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT = 0x00000040, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 0x00000080, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT = 0x00000100, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV = 0x00000200, +#endif + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR = 0x00000800, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV = 0x00001000, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT is a legacy alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT is a legacy alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT is a legacy alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT, +#ifdef VK_ENABLE_BETA_EXTENSIONS + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV is a legacy alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV, +#endif + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR is a legacy alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkBuildAccelerationStructureFlagBitsKHR; +typedef VkFlags VkBuildAccelerationStructureFlagsKHR; +typedef VkBuildAccelerationStructureFlagsKHR VkBuildAccelerationStructureFlagsNV; + +typedef VkBuildAccelerationStructureFlagBitsKHR VkBuildAccelerationStructureFlagBitsNV; + +typedef struct VkRayTracingShaderGroupCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; +} VkRayTracingShaderGroupCreateInfoNV; + +typedef struct VkRayTracingPipelineCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoNV* pGroups; + uint32_t maxRecursionDepth; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoNV; + +typedef struct VkGeometryTrianglesNV { + VkStructureType sType; + const void* pNext; + VkBuffer vertexData; + VkDeviceSize vertexOffset; + uint32_t vertexCount; + VkDeviceSize vertexStride; + VkFormat vertexFormat; + VkBuffer indexData; + VkDeviceSize indexOffset; + uint32_t indexCount; + VkIndexType indexType; + VkBuffer transformData; + VkDeviceSize transformOffset; +} VkGeometryTrianglesNV; + +typedef struct VkGeometryAABBNV { + VkStructureType sType; + const void* pNext; + VkBuffer aabbData; + uint32_t numAABBs; + uint32_t stride; + VkDeviceSize offset; +} VkGeometryAABBNV; + +typedef struct VkGeometryDataNV { + VkGeometryTrianglesNV triangles; + VkGeometryAABBNV aabbs; +} VkGeometryDataNV; + +typedef struct VkGeometryNV { + VkStructureType sType; + const void* pNext; + VkGeometryTypeKHR geometryType; + VkGeometryDataNV geometry; + VkGeometryFlagsKHR flags; +} VkGeometryNV; + +typedef struct VkAccelerationStructureInfoNV { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureTypeNV type; + VkBuildAccelerationStructureFlagsNV flags; + uint32_t instanceCount; + uint32_t geometryCount; + const VkGeometryNV* pGeometries; +} VkAccelerationStructureInfoNV; + +typedef struct VkAccelerationStructureCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceSize compactedSize; + VkAccelerationStructureInfoNV info; +} VkAccelerationStructureCreateInfoNV; + +typedef struct VkBindAccelerationStructureMemoryInfoNV { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureNV accelerationStructure; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + uint32_t deviceIndexCount; + const uint32_t* pDeviceIndices; +} VkBindAccelerationStructureMemoryInfoNV; + +typedef struct VkWriteDescriptorSetAccelerationStructureNV { + VkStructureType sType; + const void* pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureNV* pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureNV; + +typedef struct VkAccelerationStructureMemoryRequirementsInfoNV { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureMemoryRequirementsTypeNV type; + VkAccelerationStructureNV accelerationStructure; +} VkAccelerationStructureMemoryRequirementsInfoNV; + +typedef struct VkPhysicalDeviceRayTracingPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxTriangleCount; + uint32_t maxDescriptorSetAccelerationStructures; +} VkPhysicalDeviceRayTracingPropertiesNV; + +typedef struct VkTransformMatrixKHR { + float matrix[3][4]; +} VkTransformMatrixKHR; + +typedef VkTransformMatrixKHR VkTransformMatrixNV; + +typedef struct VkAabbPositionsKHR { + float minX; + float minY; + float minZ; + float maxX; + float maxY; + float maxZ; +} VkAabbPositionsKHR; + +typedef VkAabbPositionsKHR VkAabbPositionsNV; + +typedef struct VkAccelerationStructureInstanceKHR { + VkTransformMatrixKHR transform; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureInstanceKHR; + +typedef VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure); +typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset); +typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode); +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); +typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef VkResult (VKAPI_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( + VkDevice device, + const VkAccelerationStructureCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureNV* pAccelerationStructure); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( + VkDevice device, + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2KHR* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( + VkDevice device, + uint32_t bindInfoCount, + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( + VkCommandBuffer commandBuffer, + const VkAccelerationStructureInfoNV* pInfo, + VkBuffer instanceData, + VkDeviceSize instanceOffset, + VkBool32 update, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkBuffer scratch, + VkDeviceSize scratchOffset); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( + VkCommandBuffer commandBuffer, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkCopyAccelerationStructureModeKHR mode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( + VkCommandBuffer commandBuffer, + VkBuffer raygenShaderBindingTableBuffer, + VkDeviceSize raygenShaderBindingOffset, + VkBuffer missShaderBindingTableBuffer, + VkDeviceSize missShaderBindingOffset, + VkDeviceSize missShaderBindingStride, + VkBuffer hitShaderBindingTableBuffer, + VkDeviceSize hitShaderBindingOffset, + VkDeviceSize hitShaderBindingStride, + VkBuffer callableShaderBindingTableBuffer, + VkDeviceSize callableShaderBindingOffset, + VkDeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesNV( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoNV* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( + VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureNV* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( + VkDevice device, + VkPipeline pipeline, + uint32_t shader); +#endif +#endif + + +// VK_NV_representative_fragment_test is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_representative_fragment_test 1 +#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2 +#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test" +typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 representativeFragmentTest; +} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; + +typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 representativeFragmentTestEnable; +} VkPipelineRepresentativeFragmentTestStateCreateInfoNV; + + + +// VK_EXT_filter_cubic is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_filter_cubic 1 +#define VK_EXT_FILTER_CUBIC_SPEC_VERSION 3 +#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic" +typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT { + VkStructureType sType; + void* pNext; + VkImageViewType imageViewType; +} VkPhysicalDeviceImageViewImageFormatInfoEXT; + +typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 filterCubic; + VkBool32 filterCubicMinmax; +} VkFilterCubicImageViewImageFormatPropertiesEXT; + + + +// VK_QCOM_render_pass_shader_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_render_pass_shader_resolve 1 +#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION 4 +#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME "VK_QCOM_render_pass_shader_resolve" + + +// VK_EXT_global_priority is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_global_priority 1 +#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2 +#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority" +typedef VkQueueGlobalPriority VkQueueGlobalPriorityEXT; + +typedef VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoEXT; + + + +// VK_EXT_external_memory_host is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_host 1 +#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host" +typedef struct VkImportMemoryHostPointerInfoEXT { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + void* pHostPointer; +} VkImportMemoryHostPointerInfoEXT; + +typedef struct VkMemoryHostPointerPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryHostPointerPropertiesEXT; + +typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT { + VkStructureType sType; + void* pNext; + VkDeviceSize minImportedHostPointerAlignment; +} VkPhysicalDeviceExternalMemoryHostPropertiesEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHostPointer, + VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); +#endif +#endif + + +// VK_AMD_buffer_marker is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_buffer_marker 1 +#define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1 +#define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker" +typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); +typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker); +#endif +#endif + + +// VK_AMD_pipeline_compiler_control is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_pipeline_compiler_control 1 +#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1 +#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control" + +typedef enum VkPipelineCompilerControlFlagBitsAMD { + VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF +} VkPipelineCompilerControlFlagBitsAMD; +typedef VkFlags VkPipelineCompilerControlFlagsAMD; +typedef struct VkPipelineCompilerControlCreateInfoAMD { + VkStructureType sType; + const void* pNext; + VkPipelineCompilerControlFlagsAMD compilerControlFlags; +} VkPipelineCompilerControlCreateInfoAMD; + + + +// VK_EXT_calibrated_timestamps is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_calibrated_timestamps 1 +#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2 +#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps" +typedef VkTimeDomainKHR VkTimeDomainEXT; + +typedef VkCalibratedTimestampInfoKHR VkCalibratedTimestampInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains); +typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation); +#endif +#endif + + +// VK_AMD_shader_core_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_core_properties 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2 +#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties" +typedef struct VkPhysicalDeviceShaderCorePropertiesAMD { + VkStructureType sType; + void* pNext; + uint32_t shaderEngineCount; + uint32_t shaderArraysPerEngineCount; + uint32_t computeUnitsPerShaderArray; + uint32_t simdPerComputeUnit; + uint32_t wavefrontsPerSimd; + uint32_t wavefrontSize; + uint32_t sgprsPerSimd; + uint32_t minSgprAllocation; + uint32_t maxSgprAllocation; + uint32_t sgprAllocationGranularity; + uint32_t vgprsPerSimd; + uint32_t minVgprAllocation; + uint32_t maxVgprAllocation; + uint32_t vgprAllocationGranularity; +} VkPhysicalDeviceShaderCorePropertiesAMD; + + + +// VK_AMD_memory_overallocation_behavior is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_memory_overallocation_behavior 1 +#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1 +#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior" + +typedef enum VkMemoryOverallocationBehaviorAMD { + VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF +} VkMemoryOverallocationBehaviorAMD; +typedef struct VkDeviceMemoryOverallocationCreateInfoAMD { + VkStructureType sType; + const void* pNext; + VkMemoryOverallocationBehaviorAMD overallocationBehavior; +} VkDeviceMemoryOverallocationCreateInfoAMD; + + + +// VK_EXT_vertex_attribute_divisor is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_vertex_attribute_divisor 1 +#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3 +#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor" +typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxVertexAttribDivisor; +} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; + +typedef VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionEXT; + +typedef VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoEXT; + +typedef VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; + + + +// VK_EXT_pipeline_creation_feedback is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_creation_feedback 1 +#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback" +typedef VkPipelineCreationFeedbackFlagBits VkPipelineCreationFeedbackFlagBitsEXT; + +typedef VkPipelineCreationFeedbackFlags VkPipelineCreationFeedbackFlagsEXT; + +typedef VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedbackCreateInfoEXT; + +typedef VkPipelineCreationFeedback VkPipelineCreationFeedbackEXT; + + + +// VK_NV_shader_subgroup_partitioned is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_subgroup_partitioned 1 +#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1 +#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned" + + +// VK_NV_compute_shader_derivatives is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_compute_shader_derivatives 1 +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives" +typedef VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR VkPhysicalDeviceComputeShaderDerivativesFeaturesNV; + + + +// VK_NV_mesh_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_mesh_shader 1 +#define VK_NV_MESH_SHADER_SPEC_VERSION 1 +#define VK_NV_MESH_SHADER_EXTENSION_NAME "VK_NV_mesh_shader" +typedef struct VkPhysicalDeviceMeshShaderFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 taskShader; + VkBool32 meshShader; +} VkPhysicalDeviceMeshShaderFeaturesNV; + +typedef struct VkPhysicalDeviceMeshShaderPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxDrawMeshTasksCount; + uint32_t maxTaskWorkGroupInvocations; + uint32_t maxTaskWorkGroupSize[3]; + uint32_t maxTaskTotalMemorySize; + uint32_t maxTaskOutputCount; + uint32_t maxMeshWorkGroupInvocations; + uint32_t maxMeshWorkGroupSize[3]; + uint32_t maxMeshTotalMemorySize; + uint32_t maxMeshOutputVertices; + uint32_t maxMeshOutputPrimitives; + uint32_t maxMeshMultiviewViewCount; + uint32_t meshOutputPerVertexGranularity; + uint32_t meshOutputPerPrimitiveGranularity; +} VkPhysicalDeviceMeshShaderPropertiesNV; + +typedef struct VkDrawMeshTasksIndirectCommandNV { + uint32_t taskCount; + uint32_t firstTask; +} VkDrawMeshTasksIndirectCommandNV; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( + VkCommandBuffer commandBuffer, + uint32_t taskCount, + uint32_t firstTask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + + +// VK_NV_fragment_shader_barycentric is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fragment_shader_barycentric 1 +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric" +typedef VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV; + + + +// VK_NV_shader_image_footprint is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_image_footprint 1 +#define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2 +#define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint" +typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 imageFootprint; +} VkPhysicalDeviceShaderImageFootprintFeaturesNV; + + + +// VK_NV_scissor_exclusive is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_scissor_exclusive 1 +#define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 2 +#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive" +typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t exclusiveScissorCount; + const VkRect2D* pExclusiveScissors; +} VkPipelineViewportExclusiveScissorStateCreateInfoNV; + +typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 exclusiveScissor; +} VkPhysicalDeviceExclusiveScissorFeaturesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorEnableNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkBool32* pExclusiveScissorEnables); +typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorEnableNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkBool32* pExclusiveScissorEnables); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkRect2D* pExclusiveScissors); +#endif +#endif + + +// VK_NV_device_diagnostic_checkpoints is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_diagnostic_checkpoints 1 +#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2 +#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints" +typedef struct VkQueueFamilyCheckpointPropertiesNV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlags checkpointExecutionStageMask; +} VkQueueFamilyCheckpointPropertiesNV; + +typedef struct VkCheckpointDataNV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlagBits stage; + void* pCheckpointMarker; +} VkCheckpointDataNV; + +typedef struct VkQueueFamilyCheckpointProperties2NV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlags2 checkpointExecutionStageMask; +} VkQueueFamilyCheckpointProperties2NV; + +typedef struct VkCheckpointData2NV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlags2 stage; + void* pCheckpointMarker; +} VkCheckpointData2NV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void* pCheckpointMarker); +typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData); +typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( + VkCommandBuffer commandBuffer, + const void* pCheckpointMarker); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointDataNV* pCheckpointData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointData2NV* pCheckpointData); +#endif +#endif + + +// VK_EXT_present_timing is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_present_timing 1 +#define VK_EXT_PRESENT_TIMING_SPEC_VERSION 3 +#define VK_EXT_PRESENT_TIMING_EXTENSION_NAME "VK_EXT_present_timing" + +typedef enum VkPresentStageFlagBitsEXT { + VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT = 0x00000001, + VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT = 0x00000002, + VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT = 0x00000004, + VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT = 0x00000008, + VK_PRESENT_STAGE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkPresentStageFlagBitsEXT; +typedef VkFlags VkPresentStageFlagsEXT; + +typedef enum VkPastPresentationTimingFlagBitsEXT { + VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT = 0x00000001, + VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT = 0x00000002, + VK_PAST_PRESENTATION_TIMING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkPastPresentationTimingFlagBitsEXT; +typedef VkFlags VkPastPresentationTimingFlagsEXT; + +typedef enum VkPresentTimingInfoFlagBitsEXT { + VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT = 0x00000001, + VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT = 0x00000002, + VK_PRESENT_TIMING_INFO_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkPresentTimingInfoFlagBitsEXT; +typedef VkFlags VkPresentTimingInfoFlagsEXT; +typedef struct VkPhysicalDevicePresentTimingFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 presentTiming; + VkBool32 presentAtAbsoluteTime; + VkBool32 presentAtRelativeTime; +} VkPhysicalDevicePresentTimingFeaturesEXT; + +typedef struct VkPresentTimingSurfaceCapabilitiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 presentTimingSupported; + VkBool32 presentAtAbsoluteTimeSupported; + VkBool32 presentAtRelativeTimeSupported; + VkPresentStageFlagsEXT presentStageQueries; +} VkPresentTimingSurfaceCapabilitiesEXT; + +typedef struct VkSwapchainCalibratedTimestampInfoEXT { + VkStructureType sType; + const void* pNext; + VkSwapchainKHR swapchain; + VkPresentStageFlagsEXT presentStage; + uint64_t timeDomainId; +} VkSwapchainCalibratedTimestampInfoEXT; + +typedef struct VkSwapchainTimingPropertiesEXT { + VkStructureType sType; + void* pNext; + uint64_t refreshDuration; + uint64_t refreshInterval; +} VkSwapchainTimingPropertiesEXT; + +typedef struct VkSwapchainTimeDomainPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t timeDomainCount; + VkTimeDomainKHR* pTimeDomains; + uint64_t* pTimeDomainIds; +} VkSwapchainTimeDomainPropertiesEXT; + +typedef struct VkPastPresentationTimingInfoEXT { + VkStructureType sType; + const void* pNext; + VkPastPresentationTimingFlagsEXT flags; + VkSwapchainKHR swapchain; +} VkPastPresentationTimingInfoEXT; + +typedef struct VkPresentStageTimeEXT { + VkPresentStageFlagsEXT stage; + uint64_t time; +} VkPresentStageTimeEXT; + +typedef struct VkPastPresentationTimingEXT { + VkStructureType sType; + void* pNext; + uint64_t presentId; + uint64_t targetTime; + uint32_t presentStageCount; + VkPresentStageTimeEXT* pPresentStages; + VkTimeDomainKHR timeDomain; + uint64_t timeDomainId; + VkBool32 reportComplete; +} VkPastPresentationTimingEXT; + +typedef struct VkPastPresentationTimingPropertiesEXT { + VkStructureType sType; + void* pNext; + uint64_t timingPropertiesCounter; + uint64_t timeDomainsCounter; + uint32_t presentationTimingCount; + VkPastPresentationTimingEXT* pPresentationTimings; +} VkPastPresentationTimingPropertiesEXT; + +typedef struct VkPresentTimingInfoEXT { + VkStructureType sType; + const void* pNext; + VkPresentTimingInfoFlagsEXT flags; + uint64_t targetTime; + uint64_t timeDomainId; + VkPresentStageFlagsEXT presentStageQueries; + VkPresentStageFlagsEXT targetTimeDomainPresentStage; +} VkPresentTimingInfoEXT; + +typedef struct VkPresentTimingsInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentTimingInfoEXT* pTimingInfos; +} VkPresentTimingsInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkSetSwapchainPresentTimingQueueSizeEXT)(VkDevice device, VkSwapchainKHR swapchain, uint32_t size); +typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainTimingPropertiesEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSwapchainTimingPropertiesEXT* pSwapchainTimingProperties, uint64_t* pSwapchainTimingPropertiesCounter); +typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainTimeDomainPropertiesEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSwapchainTimeDomainPropertiesEXT* pSwapchainTimeDomainProperties, uint64_t* pTimeDomainsCounter); +typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingEXT)(VkDevice device, const VkPastPresentationTimingInfoEXT* pPastPresentationTimingInfo, VkPastPresentationTimingPropertiesEXT* pPastPresentationTimingProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetSwapchainPresentTimingQueueSizeEXT( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t size); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimingPropertiesEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSwapchainTimingPropertiesEXT* pSwapchainTimingProperties, + uint64_t* pSwapchainTimingPropertiesCounter); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimeDomainPropertiesEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSwapchainTimeDomainPropertiesEXT* pSwapchainTimeDomainProperties, + uint64_t* pTimeDomainsCounter); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingEXT( + VkDevice device, + const VkPastPresentationTimingInfoEXT* pPastPresentationTimingInfo, + VkPastPresentationTimingPropertiesEXT* pPastPresentationTimingProperties); +#endif +#endif + + +// VK_INTEL_shader_integer_functions2 is a preprocessor guard. Do not pass it to API calls. +#define VK_INTEL_shader_integer_functions2 1 +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1 +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2" +typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL { + VkStructureType sType; + void* pNext; + VkBool32 shaderIntegerFunctions2; +} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + + + +// VK_INTEL_performance_query is a preprocessor guard. Do not pass it to API calls. +#define VK_INTEL_performance_query 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) +#define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 2 +#define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query" + +typedef enum VkPerformanceConfigurationTypeINTEL { + VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0, + VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceConfigurationTypeINTEL; + +typedef enum VkQueryPoolSamplingModeINTEL { + VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0, + VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkQueryPoolSamplingModeINTEL; + +typedef enum VkPerformanceOverrideTypeINTEL { + VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0, + VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1, + VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceOverrideTypeINTEL; + +typedef enum VkPerformanceParameterTypeINTEL { + VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0, + VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1, + VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceParameterTypeINTEL; + +typedef enum VkPerformanceValueTypeINTEL { + VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0, + VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1, + VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2, + VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3, + VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4, + VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceValueTypeINTEL; +typedef union VkPerformanceValueDataINTEL { + uint32_t value32; + uint64_t value64; + float valueFloat; + VkBool32 valueBool; + const char* valueString; +} VkPerformanceValueDataINTEL; + +typedef struct VkPerformanceValueINTEL { + VkPerformanceValueTypeINTEL type; + VkPerformanceValueDataINTEL data; +} VkPerformanceValueINTEL; + +typedef struct VkInitializePerformanceApiInfoINTEL { + VkStructureType sType; + const void* pNext; + void* pUserData; +} VkInitializePerformanceApiInfoINTEL; + +typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL { + VkStructureType sType; + const void* pNext; + VkQueryPoolSamplingModeINTEL performanceCountersSampling; +} VkQueryPoolPerformanceQueryCreateInfoINTEL; + +typedef VkQueryPoolPerformanceQueryCreateInfoINTEL VkQueryPoolCreateInfoINTEL; + +typedef struct VkPerformanceMarkerInfoINTEL { + VkStructureType sType; + const void* pNext; + uint64_t marker; +} VkPerformanceMarkerInfoINTEL; + +typedef struct VkPerformanceStreamMarkerInfoINTEL { + VkStructureType sType; + const void* pNext; + uint32_t marker; +} VkPerformanceStreamMarkerInfoINTEL; + +typedef struct VkPerformanceOverrideInfoINTEL { + VkStructureType sType; + const void* pNext; + VkPerformanceOverrideTypeINTEL type; + VkBool32 enable; + uint64_t parameter; +} VkPerformanceOverrideInfoINTEL; + +typedef struct VkPerformanceConfigurationAcquireInfoINTEL { + VkStructureType sType; + const void* pNext; + VkPerformanceConfigurationTypeINTEL type; +} VkPerformanceConfigurationAcquireInfoINTEL; + +typedef VkResult (VKAPI_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); +typedef void (VKAPI_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device); +typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo); +typedef VkResult (VKAPI_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration); +typedef VkResult (VKAPI_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration); +typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( + VkDevice device, + const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( + VkDevice device); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceMarkerInfoINTEL* pMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceOverrideInfoINTEL* pOverrideInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( + VkDevice device, + const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, + VkPerformanceConfigurationINTEL* pConfiguration); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( + VkDevice device, + VkPerformanceConfigurationINTEL configuration); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( + VkQueue queue, + VkPerformanceConfigurationINTEL configuration); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( + VkDevice device, + VkPerformanceParameterTypeINTEL parameter, + VkPerformanceValueINTEL* pValue); +#endif +#endif + + +// VK_EXT_pci_bus_info is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pci_bus_info 1 +#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION 2 +#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info" +typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t pciDomain; + uint32_t pciBus; + uint32_t pciDevice; + uint32_t pciFunction; +} VkPhysicalDevicePCIBusInfoPropertiesEXT; + + + +// VK_AMD_display_native_hdr is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_display_native_hdr 1 +#define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1 +#define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr" +typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD { + VkStructureType sType; + void* pNext; + VkBool32 localDimmingSupport; +} VkDisplayNativeHdrSurfaceCapabilitiesAMD; + +typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD { + VkStructureType sType; + const void* pNext; + VkBool32 localDimmingEnable; +} VkSwapchainDisplayNativeHdrCreateInfoAMD; + +typedef void (VKAPI_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( + VkDevice device, + VkSwapchainKHR swapChain, + VkBool32 localDimmingEnable); +#endif +#endif + + +// VK_EXT_fragment_density_map is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 3 +#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map" +typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMap; + VkBool32 fragmentDensityMapDynamic; + VkBool32 fragmentDensityMapNonSubsampledImages; +} VkPhysicalDeviceFragmentDensityMapFeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT { + VkStructureType sType; + void* pNext; + VkExtent2D minFragmentDensityTexelSize; + VkExtent2D maxFragmentDensityTexelSize; + VkBool32 fragmentDensityInvocations; +} VkPhysicalDeviceFragmentDensityMapPropertiesEXT; + +typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkAttachmentReference fragmentDensityMapAttachment; +} VkRenderPassFragmentDensityMapCreateInfoEXT; + +typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkImageLayout imageLayout; +} VkRenderingFragmentDensityMapAttachmentInfoEXT; + + + +// VK_EXT_scalar_block_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_scalar_block_layout 1 +#define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout" +typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT; + + + +// VK_GOOGLE_hlsl_functionality1 is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_hlsl_functionality1 1 +#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION 1 +#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1" +// VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION is a legacy alias +#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION +// VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME is a legacy alias +#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME + + +// VK_GOOGLE_decorate_string is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_decorate_string 1 +#define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1 +#define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string" + + +// VK_EXT_subgroup_size_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_subgroup_size_control 1 +#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2 +#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control" +typedef VkPhysicalDeviceSubgroupSizeControlFeatures VkPhysicalDeviceSubgroupSizeControlFeaturesEXT; + +typedef VkPhysicalDeviceSubgroupSizeControlProperties VkPhysicalDeviceSubgroupSizeControlPropertiesEXT; + +typedef VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT; + + + +// VK_AMD_shader_core_properties2 is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_core_properties2 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2" + +typedef enum VkShaderCorePropertiesFlagBitsAMD { + VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF +} VkShaderCorePropertiesFlagBitsAMD; +typedef VkFlags VkShaderCorePropertiesFlagsAMD; +typedef struct VkPhysicalDeviceShaderCoreProperties2AMD { + VkStructureType sType; + void* pNext; + VkShaderCorePropertiesFlagsAMD shaderCoreFeatures; + uint32_t activeComputeUnitCount; +} VkPhysicalDeviceShaderCoreProperties2AMD; + + + +// VK_AMD_device_coherent_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_device_coherent_memory 1 +#define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1 +#define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory" +typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD { + VkStructureType sType; + void* pNext; + VkBool32 deviceCoherentMemory; +} VkPhysicalDeviceCoherentMemoryFeaturesAMD; + + + +// VK_EXT_shader_image_atomic_int64 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_image_atomic_int64 1 +#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1 +#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64" +typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderImageInt64Atomics; + VkBool32 sparseImageInt64Atomics; +} VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + + + +// VK_EXT_memory_budget is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_memory_budget 1 +#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1 +#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget" +typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT { + VkStructureType sType; + void* pNext; + VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS]; + VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS]; +} VkPhysicalDeviceMemoryBudgetPropertiesEXT; + + + +// VK_EXT_memory_priority is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_memory_priority 1 +#define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1 +#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority" +typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 memoryPriority; +} VkPhysicalDeviceMemoryPriorityFeaturesEXT; + +typedef struct VkMemoryPriorityAllocateInfoEXT { + VkStructureType sType; + const void* pNext; + float priority; +} VkMemoryPriorityAllocateInfoEXT; + + + +// VK_NV_dedicated_allocation_image_aliasing is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_dedicated_allocation_image_aliasing 1 +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1 +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing" +typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 dedicatedAllocationImageAliasing; +} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + + + +// VK_EXT_buffer_device_address is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_buffer_device_address 1 +#define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2 +#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address" +typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; +} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; + +typedef VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT; + +typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoEXT; + +typedef struct VkBufferDeviceAddressCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceAddress deviceAddress; +} VkBufferDeviceAddressCreateInfoEXT; + +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); +#endif +#endif + + +// VK_EXT_tooling_info is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_tooling_info 1 +#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1 +#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info" +typedef VkToolPurposeFlagBits VkToolPurposeFlagBitsEXT; + +typedef VkToolPurposeFlags VkToolPurposeFlagsEXT; + +typedef VkPhysicalDeviceToolProperties VkPhysicalDeviceToolPropertiesEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties); +#endif +#endif + + +// VK_EXT_separate_stencil_usage is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_separate_stencil_usage 1 +#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1 +#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage" +typedef VkImageStencilUsageCreateInfo VkImageStencilUsageCreateInfoEXT; + + + +// VK_EXT_validation_features is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_validation_features 1 +#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 6 +#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features" + +typedef enum VkValidationFeatureEnableEXT { + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0, + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1, + VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2, + VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3, + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4, + VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationFeatureEnableEXT; + +typedef enum VkValidationFeatureDisableEXT { + VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0, + VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1, + VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2, + VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3, + VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4, + VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5, + VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6, + VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT = 7, + VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationFeatureDisableEXT; +typedef struct VkValidationFeaturesEXT { + VkStructureType sType; + const void* pNext; + uint32_t enabledValidationFeatureCount; + const VkValidationFeatureEnableEXT* pEnabledValidationFeatures; + uint32_t disabledValidationFeatureCount; + const VkValidationFeatureDisableEXT* pDisabledValidationFeatures; +} VkValidationFeaturesEXT; + + + +// VK_NV_cooperative_matrix is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_matrix 1 +#define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix" +typedef VkComponentTypeKHR VkComponentTypeNV; + +typedef VkScopeKHR VkScopeNV; + +typedef struct VkCooperativeMatrixPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t MSize; + uint32_t NSize; + uint32_t KSize; + VkComponentTypeNV AType; + VkComponentTypeNV BType; + VkComponentTypeNV CType; + VkComponentTypeNV DType; + VkScopeNV scope; +} VkCooperativeMatrixPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrix; + VkBool32 cooperativeMatrixRobustBufferAccess; +} VkPhysicalDeviceCooperativeMatrixFeaturesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeMatrixSupportedStages; +} VkPhysicalDeviceCooperativeMatrixPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesNV* pProperties); +#endif +#endif + + +// VK_NV_coverage_reduction_mode is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_coverage_reduction_mode 1 +#define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1 +#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode" + +typedef enum VkCoverageReductionModeNV { + VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0, + VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1, + VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageReductionModeNV; +typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; +typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 coverageReductionMode; +} VkPhysicalDeviceCoverageReductionModeFeaturesNV; + +typedef struct VkPipelineCoverageReductionStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageReductionStateCreateFlagsNV flags; + VkCoverageReductionModeNV coverageReductionMode; +} VkPipelineCoverageReductionStateCreateInfoNV; + +typedef struct VkFramebufferMixedSamplesCombinationNV { + VkStructureType sType; + void* pNext; + VkCoverageReductionModeNV coverageReductionMode; + VkSampleCountFlagBits rasterizationSamples; + VkSampleCountFlags depthStencilSamples; + VkSampleCountFlags colorSamples; +} VkFramebufferMixedSamplesCombinationNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + VkPhysicalDevice physicalDevice, + uint32_t* pCombinationCount, + VkFramebufferMixedSamplesCombinationNV* pCombinations); +#endif +#endif + + +// VK_EXT_fragment_shader_interlock is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_shader_interlock 1 +#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock" +typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentShaderSampleInterlock; + VkBool32 fragmentShaderPixelInterlock; + VkBool32 fragmentShaderShadingRateInterlock; +} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT; + + + +// VK_EXT_ycbcr_image_arrays is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_ycbcr_image_arrays 1 +#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1 +#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays" +typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 ycbcrImageArrays; +} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT; + + + +// VK_EXT_provoking_vertex is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_provoking_vertex 1 +#define VK_EXT_PROVOKING_VERTEX_SPEC_VERSION 1 +#define VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME "VK_EXT_provoking_vertex" + +typedef enum VkProvokingVertexModeEXT { + VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT = 0, + VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT = 1, + VK_PROVOKING_VERTEX_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkProvokingVertexModeEXT; +typedef struct VkPhysicalDeviceProvokingVertexFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 provokingVertexLast; + VkBool32 transformFeedbackPreservesProvokingVertex; +} VkPhysicalDeviceProvokingVertexFeaturesEXT; + +typedef struct VkPhysicalDeviceProvokingVertexPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 provokingVertexModePerPipeline; + VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex; +} VkPhysicalDeviceProvokingVertexPropertiesEXT; + +typedef struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkProvokingVertexModeEXT provokingVertexMode; +} VkPipelineRasterizationProvokingVertexStateCreateInfoEXT; + + + +// VK_EXT_headless_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_headless_surface 1 +#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1 +#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface" +typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT; +typedef struct VkHeadlessSurfaceCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkHeadlessSurfaceCreateFlagsEXT flags; +} VkHeadlessSurfaceCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( + VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_EXT_line_rasterization is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_line_rasterization 1 +#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization" +typedef VkLineRasterizationMode VkLineRasterizationModeEXT; + +typedef VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesEXT; + +typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesEXT; + +typedef VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); +#endif +#endif + + +// VK_EXT_shader_atomic_float is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_atomic_float 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float" +typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderBufferFloat32Atomics; + VkBool32 shaderBufferFloat32AtomicAdd; + VkBool32 shaderBufferFloat64Atomics; + VkBool32 shaderBufferFloat64AtomicAdd; + VkBool32 shaderSharedFloat32Atomics; + VkBool32 shaderSharedFloat32AtomicAdd; + VkBool32 shaderSharedFloat64Atomics; + VkBool32 shaderSharedFloat64AtomicAdd; + VkBool32 shaderImageFloat32Atomics; + VkBool32 shaderImageFloat32AtomicAdd; + VkBool32 sparseImageFloat32Atomics; + VkBool32 sparseImageFloat32AtomicAdd; +} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT; + + + +// VK_EXT_host_query_reset is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_host_query_reset 1 +#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1 +#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset" +typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); +#endif +#endif + + +// VK_EXT_index_type_uint8 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_index_type_uint8 1 +#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1 +#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8" +typedef VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesEXT; + + + +// VK_EXT_extended_dynamic_state is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_extended_dynamic_state 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state" +typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 extendedDynamicState; +} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); +typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); +typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes, + const VkDeviceSize* pStrides); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthWriteEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( + VkCommandBuffer commandBuffer, + VkCompareOp depthCompareOp); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stencilTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp); +#endif +#endif + + +// VK_EXT_host_image_copy is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_host_image_copy 1 +#define VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION 1 +#define VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME "VK_EXT_host_image_copy" +typedef VkHostImageCopyFlagBits VkHostImageCopyFlagBitsEXT; + +typedef VkHostImageCopyFlags VkHostImageCopyFlagsEXT; + +typedef VkPhysicalDeviceHostImageCopyFeatures VkPhysicalDeviceHostImageCopyFeaturesEXT; + +typedef VkPhysicalDeviceHostImageCopyProperties VkPhysicalDeviceHostImageCopyPropertiesEXT; + +typedef VkMemoryToImageCopy VkMemoryToImageCopyEXT; + +typedef VkImageToMemoryCopy VkImageToMemoryCopyEXT; + +typedef VkCopyMemoryToImageInfo VkCopyMemoryToImageInfoEXT; + +typedef VkCopyImageToMemoryInfo VkCopyImageToMemoryInfoEXT; + +typedef VkCopyImageToImageInfo VkCopyImageToImageInfoEXT; + +typedef VkHostImageLayoutTransitionInfo VkHostImageLayoutTransitionInfoEXT; + +typedef VkSubresourceHostMemcpySize VkSubresourceHostMemcpySizeEXT; + +typedef VkHostImageCopyDevicePerformanceQuery VkHostImageCopyDevicePerformanceQueryEXT; + +typedef VkSubresourceLayout2 VkSubresourceLayout2EXT; + +typedef VkImageSubresource2 VkImageSubresource2EXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImageEXT)(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemoryEXT)(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImageEXT)(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayoutEXT)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); +#endif +#endif + + +// VK_EXT_map_memory_placed is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_map_memory_placed 1 +#define VK_EXT_MAP_MEMORY_PLACED_SPEC_VERSION 1 +#define VK_EXT_MAP_MEMORY_PLACED_EXTENSION_NAME "VK_EXT_map_memory_placed" +typedef struct VkPhysicalDeviceMapMemoryPlacedFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 memoryMapPlaced; + VkBool32 memoryMapRangePlaced; + VkBool32 memoryUnmapReserve; +} VkPhysicalDeviceMapMemoryPlacedFeaturesEXT; + +typedef struct VkPhysicalDeviceMapMemoryPlacedPropertiesEXT { + VkStructureType sType; + void* pNext; + VkDeviceSize minPlacedMemoryMapAlignment; +} VkPhysicalDeviceMapMemoryPlacedPropertiesEXT; + +typedef struct VkMemoryMapPlacedInfoEXT { + VkStructureType sType; + const void* pNext; + void* pPlacedAddress; +} VkMemoryMapPlacedInfoEXT; + + + +// VK_EXT_shader_atomic_float2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_atomic_float2 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME "VK_EXT_shader_atomic_float2" +typedef struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderBufferFloat16Atomics; + VkBool32 shaderBufferFloat16AtomicAdd; + VkBool32 shaderBufferFloat16AtomicMinMax; + VkBool32 shaderBufferFloat32AtomicMinMax; + VkBool32 shaderBufferFloat64AtomicMinMax; + VkBool32 shaderSharedFloat16Atomics; + VkBool32 shaderSharedFloat16AtomicAdd; + VkBool32 shaderSharedFloat16AtomicMinMax; + VkBool32 shaderSharedFloat32AtomicMinMax; + VkBool32 shaderSharedFloat64AtomicMinMax; + VkBool32 shaderImageFloat32AtomicMinMax; + VkBool32 sparseImageFloat32AtomicMinMax; +} VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT; + + + +// VK_EXT_surface_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_surface_maintenance1 1 +#define VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME "VK_EXT_surface_maintenance1" +typedef VkPresentScalingFlagBitsKHR VkPresentScalingFlagBitsEXT; + +typedef VkPresentScalingFlagsKHR VkPresentScalingFlagsEXT; + +typedef VkPresentGravityFlagBitsKHR VkPresentGravityFlagBitsEXT; + +typedef VkPresentGravityFlagsKHR VkPresentGravityFlagsEXT; + +typedef VkSurfacePresentModeKHR VkSurfacePresentModeEXT; + +typedef VkSurfacePresentScalingCapabilitiesKHR VkSurfacePresentScalingCapabilitiesEXT; + +typedef VkSurfacePresentModeCompatibilityKHR VkSurfacePresentModeCompatibilityEXT; + + + +// VK_EXT_swapchain_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_swapchain_maintenance1 1 +#define VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME "VK_EXT_swapchain_maintenance1" +typedef VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT; + +typedef VkSwapchainPresentFenceInfoKHR VkSwapchainPresentFenceInfoEXT; + +typedef VkSwapchainPresentModesCreateInfoKHR VkSwapchainPresentModesCreateInfoEXT; + +typedef VkSwapchainPresentModeInfoKHR VkSwapchainPresentModeInfoEXT; + +typedef VkSwapchainPresentScalingCreateInfoKHR VkSwapchainPresentScalingCreateInfoEXT; + +typedef VkReleaseSwapchainImagesInfoKHR VkReleaseSwapchainImagesInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkReleaseSwapchainImagesEXT)(VkDevice device, const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); +#endif +#endif + + +// VK_EXT_shader_demote_to_helper_invocation is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_demote_to_helper_invocation 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" +typedef VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; + + + +// VK_NV_device_generated_commands is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_generated_commands 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) +#define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 +#define VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NV_device_generated_commands" + +typedef enum VkIndirectCommandsTokenTypeNV { + VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_NV = 1000135000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV = 1000428003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV = 1000428004, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectCommandsTokenTypeNV; + +typedef enum VkIndirectStateFlagBitsNV { + VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 0x00000001, + VK_INDIRECT_STATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectStateFlagBitsNV; +typedef VkFlags VkIndirectStateFlagsNV; + +typedef enum VkIndirectCommandsLayoutUsageFlagBitsNV { + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 0x00000001, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 0x00000002, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 0x00000004, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectCommandsLayoutUsageFlagBitsNV; +typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxGraphicsShaderGroupCount; + uint32_t maxIndirectSequenceCount; + uint32_t maxIndirectCommandsTokenCount; + uint32_t maxIndirectCommandsStreamCount; + uint32_t maxIndirectCommandsTokenOffset; + uint32_t maxIndirectCommandsStreamStride; + uint32_t minSequencesCountBufferOffsetAlignment; + uint32_t minSequencesIndexBufferOffsetAlignment; + uint32_t minIndirectCommandsBufferOffsetAlignment; +} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 deviceGeneratedCommands; +} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + +typedef struct VkGraphicsShaderGroupCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + const VkPipelineVertexInputStateCreateInfo* pVertexInputState; + const VkPipelineTessellationStateCreateInfo* pTessellationState; +} VkGraphicsShaderGroupCreateInfoNV; + +typedef struct VkGraphicsPipelineShaderGroupsCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t groupCount; + const VkGraphicsShaderGroupCreateInfoNV* pGroups; + uint32_t pipelineCount; + const VkPipeline* pPipelines; +} VkGraphicsPipelineShaderGroupsCreateInfoNV; + +typedef struct VkBindShaderGroupIndirectCommandNV { + uint32_t groupIndex; +} VkBindShaderGroupIndirectCommandNV; + +typedef struct VkBindIndexBufferIndirectCommandNV { + VkDeviceAddress bufferAddress; + uint32_t size; + VkIndexType indexType; +} VkBindIndexBufferIndirectCommandNV; + +typedef struct VkBindVertexBufferIndirectCommandNV { + VkDeviceAddress bufferAddress; + uint32_t size; + uint32_t stride; +} VkBindVertexBufferIndirectCommandNV; + +typedef struct VkSetStateFlagsIndirectCommandNV { + uint32_t data; +} VkSetStateFlagsIndirectCommandNV; + +typedef struct VkIndirectCommandsStreamNV { + VkBuffer buffer; + VkDeviceSize offset; +} VkIndirectCommandsStreamNV; + +typedef struct VkIndirectCommandsLayoutTokenNV { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsTokenTypeNV tokenType; + uint32_t stream; + uint32_t offset; + uint32_t vertexBindingUnit; + VkBool32 vertexDynamicStride; + VkPipelineLayout pushconstantPipelineLayout; + VkShaderStageFlags pushconstantShaderStageFlags; + uint32_t pushconstantOffset; + uint32_t pushconstantSize; + VkIndirectStateFlagsNV indirectStateFlags; + uint32_t indexTypeCount; + const VkIndexType* pIndexTypes; + const uint32_t* pIndexTypeValues; +} VkIndirectCommandsLayoutTokenNV; + +typedef struct VkIndirectCommandsLayoutCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsLayoutUsageFlagsNV flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t tokenCount; + const VkIndirectCommandsLayoutTokenNV* pTokens; + uint32_t streamCount; + const uint32_t* pStreamStrides; +} VkIndirectCommandsLayoutCreateInfoNV; + +typedef struct VkGeneratedCommandsInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; + VkIndirectCommandsLayoutNV indirectCommandsLayout; + uint32_t streamCount; + const VkIndirectCommandsStreamNV* pStreams; + uint32_t sequencesCount; + VkBuffer preprocessBuffer; + VkDeviceSize preprocessOffset; + VkDeviceSize preprocessSize; + VkBuffer sequencesCountBuffer; + VkDeviceSize sequencesCountOffset; + VkBuffer sequencesIndexBuffer; + VkDeviceSize sequencesIndexOffset; +} VkGeneratedCommandsInfoNV; + +typedef struct VkGeneratedCommandsMemoryRequirementsInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; + VkIndirectCommandsLayoutNV indirectCommandsLayout; + uint32_t maxSequencesCount; +} VkGeneratedCommandsMemoryRequirementsInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsNV)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsNV)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsNV)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindPipelineShaderGroupNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex); +typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNV)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); +typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNV)(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( + VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( + VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( + VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline, + uint32_t groupIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( + VkDevice device, + VkIndirectCommandsLayoutNV indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator); +#endif +#endif + + +// VK_NV_inherited_viewport_scissor is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_inherited_viewport_scissor 1 +#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1 +#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor" +typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 inheritedViewportScissor2D; +} VkPhysicalDeviceInheritedViewportScissorFeaturesNV; + +typedef struct VkCommandBufferInheritanceViewportScissorInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 viewportScissor2D; + uint32_t viewportDepthCount; + const VkViewport* pViewportDepths; +} VkCommandBufferInheritanceViewportScissorInfoNV; + + + +// VK_EXT_texel_buffer_alignment is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_texel_buffer_alignment 1 +#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1 +#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment" +typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 texelBufferAlignment; +} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT; + +typedef VkPhysicalDeviceTexelBufferAlignmentProperties VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT; + + + +// VK_QCOM_render_pass_transform is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_render_pass_transform 1 +#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 5 +#define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform" +typedef struct VkRenderPassTransformBeginInfoQCOM { + VkStructureType sType; + const void* pNext; + VkSurfaceTransformFlagBitsKHR transform; +} VkRenderPassTransformBeginInfoQCOM; + +typedef struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM { + VkStructureType sType; + const void* pNext; + VkSurfaceTransformFlagBitsKHR transform; + VkRect2D renderArea; +} VkCommandBufferInheritanceRenderPassTransformInfoQCOM; + + + +// VK_EXT_depth_bias_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_bias_control 1 +#define VK_EXT_DEPTH_BIAS_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME "VK_EXT_depth_bias_control" + +typedef enum VkDepthBiasRepresentationEXT { + VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT = 0, + VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT = 1, + VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT = 2, + VK_DEPTH_BIAS_REPRESENTATION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDepthBiasRepresentationEXT; +typedef struct VkPhysicalDeviceDepthBiasControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthBiasControl; + VkBool32 leastRepresentableValueForceUnormRepresentation; + VkBool32 floatRepresentation; + VkBool32 depthBiasExact; +} VkPhysicalDeviceDepthBiasControlFeaturesEXT; + +typedef struct VkDepthBiasInfoEXT { + VkStructureType sType; + const void* pNext; + float depthBiasConstantFactor; + float depthBiasClamp; + float depthBiasSlopeFactor; +} VkDepthBiasInfoEXT; + +typedef struct VkDepthBiasRepresentationInfoEXT { + VkStructureType sType; + const void* pNext; + VkDepthBiasRepresentationEXT depthBiasRepresentation; + VkBool32 depthBiasExact; +} VkDepthBiasRepresentationInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias2EXT)(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT* pDepthBiasInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias2EXT( + VkCommandBuffer commandBuffer, + const VkDepthBiasInfoEXT* pDepthBiasInfo); +#endif +#endif + + +// VK_EXT_device_memory_report is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_memory_report 1 +#define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2 +#define VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME "VK_EXT_device_memory_report" + +typedef enum VkDeviceMemoryReportEventTypeEXT { + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = 0, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = 1, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = 2, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = 3, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = 4, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceMemoryReportEventTypeEXT; +typedef VkFlags VkDeviceMemoryReportFlagsEXT; +typedef struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 deviceMemoryReport; +} VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; + +typedef struct VkDeviceMemoryReportCallbackDataEXT { + VkStructureType sType; + void* pNext; + VkDeviceMemoryReportFlagsEXT flags; + VkDeviceMemoryReportEventTypeEXT type; + uint64_t memoryObjectId; + VkDeviceSize size; + VkObjectType objectType; + uint64_t objectHandle; + uint32_t heapIndex; +} VkDeviceMemoryReportCallbackDataEXT; + +typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)( + const VkDeviceMemoryReportCallbackDataEXT* pCallbackData, + void* pUserData); + +typedef struct VkDeviceDeviceMemoryReportCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemoryReportFlagsEXT flags; + PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback; + void* pUserData; +} VkDeviceDeviceMemoryReportCreateInfoEXT; + + + +// VK_EXT_acquire_drm_display is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_acquire_drm_display 1 +#define VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION 1 +#define VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_drm_display" +typedef VkResult (VKAPI_PTR *PFN_vkAcquireDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display); +typedef VkResult (VKAPI_PTR *PFN_vkGetDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR* display); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + VkDisplayKHR display); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + uint32_t connectorId, + VkDisplayKHR* display); +#endif +#endif + + +// VK_EXT_robustness2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_robustness2 1 +#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2" +typedef VkPhysicalDeviceRobustness2FeaturesKHR VkPhysicalDeviceRobustness2FeaturesEXT; + +typedef VkPhysicalDeviceRobustness2PropertiesKHR VkPhysicalDeviceRobustness2PropertiesEXT; + + + +// VK_EXT_custom_border_color is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_custom_border_color 1 +#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12 +#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color" +typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxCustomBorderColorSamplers; +} VkPhysicalDeviceCustomBorderColorPropertiesEXT; + +typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 customBorderColors; + VkBool32 customBorderColorWithoutFormat; +} VkPhysicalDeviceCustomBorderColorFeaturesEXT; + + + +// VK_EXT_texture_compression_astc_3d is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_texture_compression_astc_3d 1 +#define VK_EXT_TEXTURE_COMPRESSION_ASTC_3D_SPEC_VERSION 1 +#define VK_EXT_TEXTURE_COMPRESSION_ASTC_3D_EXTENSION_NAME "VK_EXT_texture_compression_astc_3d" +typedef struct VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 textureCompressionASTC_3D; +} VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT; + + + +// VK_GOOGLE_user_type is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_user_type 1 +#define VK_GOOGLE_USER_TYPE_SPEC_VERSION 1 +#define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type" + + +// VK_NV_present_barrier is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_present_barrier 1 +#define VK_NV_PRESENT_BARRIER_SPEC_VERSION 1 +#define VK_NV_PRESENT_BARRIER_EXTENSION_NAME "VK_NV_present_barrier" +typedef struct VkPhysicalDevicePresentBarrierFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 presentBarrier; +} VkPhysicalDevicePresentBarrierFeaturesNV; + +typedef struct VkSurfaceCapabilitiesPresentBarrierNV { + VkStructureType sType; + void* pNext; + VkBool32 presentBarrierSupported; +} VkSurfaceCapabilitiesPresentBarrierNV; + +typedef struct VkSwapchainPresentBarrierCreateInfoNV { + VkStructureType sType; + void* pNext; + VkBool32 presentBarrierEnable; +} VkSwapchainPresentBarrierCreateInfoNV; + + + +// VK_EXT_private_data is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_private_data 1 +typedef VkPrivateDataSlot VkPrivateDataSlotEXT; + +#define VK_EXT_PRIVATE_DATA_SPEC_VERSION 1 +#define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data" +typedef VkPrivateDataSlotCreateFlags VkPrivateDataSlotCreateFlagsEXT; + +typedef VkPhysicalDevicePrivateDataFeatures VkPhysicalDevicePrivateDataFeaturesEXT; + +typedef VkDevicePrivateDataCreateInfo VkDevicePrivateDataCreateInfoEXT; + +typedef VkPrivateDataSlotCreateInfo VkPrivateDataSlotCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); +typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( + VkDevice device, + const VkPrivateDataSlotCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPrivateDataSlot* pPrivateDataSlot); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( + VkDevice device, + VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData); +#endif +#endif + + +// VK_EXT_pipeline_creation_cache_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_creation_cache_control 1 +#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3 +#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control" +typedef VkPhysicalDevicePipelineCreationCacheControlFeatures VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT; + + + +// VK_NV_device_diagnostics_config is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_diagnostics_config 1 +#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 2 +#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config" + +typedef enum VkDeviceDiagnosticsConfigFlagBitsNV { + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 0x00000001, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 0x00000002, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 0x00000004, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV = 0x00000008, + VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkDeviceDiagnosticsConfigFlagBitsNV; +typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; +typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 diagnosticsConfig; +} VkPhysicalDeviceDiagnosticsConfigFeaturesNV; + +typedef struct VkDeviceDiagnosticsConfigCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceDiagnosticsConfigFlagsNV flags; +} VkDeviceDiagnosticsConfigCreateInfoNV; + + + +// VK_QCOM_render_pass_store_ops is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_render_pass_store_ops 1 +#define VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION 2 +#define VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME "VK_QCOM_render_pass_store_ops" + + +// VK_QCOM_tile_shading is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_shading 1 +#define VK_QCOM_TILE_SHADING_SPEC_VERSION 2 +#define VK_QCOM_TILE_SHADING_EXTENSION_NAME "VK_QCOM_tile_shading" + +typedef enum VkTileShadingRenderPassFlagBitsQCOM { + VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM = 0x00000001, + VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM = 0x00000002, + VK_TILE_SHADING_RENDER_PASS_FLAG_BITS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkTileShadingRenderPassFlagBitsQCOM; +typedef VkFlags VkTileShadingRenderPassFlagsQCOM; +typedef struct VkPhysicalDeviceTileShadingFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileShading; + VkBool32 tileShadingFragmentStage; + VkBool32 tileShadingColorAttachments; + VkBool32 tileShadingDepthAttachments; + VkBool32 tileShadingStencilAttachments; + VkBool32 tileShadingInputAttachments; + VkBool32 tileShadingSampledAttachments; + VkBool32 tileShadingPerTileDraw; + VkBool32 tileShadingPerTileDispatch; + VkBool32 tileShadingDispatchTile; + VkBool32 tileShadingApron; + VkBool32 tileShadingAnisotropicApron; + VkBool32 tileShadingAtomicOps; + VkBool32 tileShadingImageProcessing; +} VkPhysicalDeviceTileShadingFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileShadingPropertiesQCOM { + VkStructureType sType; + void* pNext; + uint32_t maxApronSize; + VkBool32 preferNonCoherent; + VkExtent2D tileGranularity; + VkExtent2D maxTileShadingRate; +} VkPhysicalDeviceTileShadingPropertiesQCOM; + +typedef struct VkRenderPassTileShadingCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkTileShadingRenderPassFlagsQCOM flags; + VkExtent2D tileApronSize; +} VkRenderPassTileShadingCreateInfoQCOM; + +typedef struct VkPerTileBeginInfoQCOM { + VkStructureType sType; + const void* pNext; +} VkPerTileBeginInfoQCOM; + +typedef struct VkPerTileEndInfoQCOM { + VkStructureType sType; + const void* pNext; +} VkPerTileEndInfoQCOM; + +typedef struct VkDispatchTileInfoQCOM { + VkStructureType sType; + const void* pNext; +} VkDispatchTileInfoQCOM; + +typedef void (VKAPI_PTR *PFN_vkCmdDispatchTileQCOM)(VkCommandBuffer commandBuffer, const VkDispatchTileInfoQCOM* pDispatchTileInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileBeginInfoQCOM* pPerTileBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM* pPerTileEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM( + VkCommandBuffer commandBuffer, + const VkDispatchTileInfoQCOM* pDispatchTileInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileEndInfoQCOM* pPerTileEndInfo); +#endif +#endif + + +// VK_NV_low_latency is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_low_latency 1 +#define VK_NV_LOW_LATENCY_SPEC_VERSION 1 +#define VK_NV_LOW_LATENCY_EXTENSION_NAME "VK_NV_low_latency" +typedef struct VkQueryLowLatencySupportNV { + VkStructureType sType; + const void* pNext; + void* pQueriedLowLatencyData; +} VkQueryLowLatencySupportNV; + + + +// VK_EXT_descriptor_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_descriptor_buffer 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) +#define VK_EXT_DESCRIPTOR_BUFFER_SPEC_VERSION 1 +#define VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME "VK_EXT_descriptor_buffer" +typedef struct VkPhysicalDeviceDescriptorBufferPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 combinedImageSamplerDescriptorSingleArray; + VkBool32 bufferlessPushDescriptors; + VkBool32 allowSamplerImageViewPostSubmitCreation; + VkDeviceSize descriptorBufferOffsetAlignment; + uint32_t maxDescriptorBufferBindings; + uint32_t maxResourceDescriptorBufferBindings; + uint32_t maxSamplerDescriptorBufferBindings; + uint32_t maxEmbeddedImmutableSamplerBindings; + uint32_t maxEmbeddedImmutableSamplers; + size_t bufferCaptureReplayDescriptorDataSize; + size_t imageCaptureReplayDescriptorDataSize; + size_t imageViewCaptureReplayDescriptorDataSize; + size_t samplerCaptureReplayDescriptorDataSize; + size_t accelerationStructureCaptureReplayDescriptorDataSize; + size_t samplerDescriptorSize; + size_t combinedImageSamplerDescriptorSize; + size_t sampledImageDescriptorSize; + size_t storageImageDescriptorSize; + size_t uniformTexelBufferDescriptorSize; + size_t robustUniformTexelBufferDescriptorSize; + size_t storageTexelBufferDescriptorSize; + size_t robustStorageTexelBufferDescriptorSize; + size_t uniformBufferDescriptorSize; + size_t robustUniformBufferDescriptorSize; + size_t storageBufferDescriptorSize; + size_t robustStorageBufferDescriptorSize; + size_t inputAttachmentDescriptorSize; + size_t accelerationStructureDescriptorSize; + VkDeviceSize maxSamplerDescriptorBufferRange; + VkDeviceSize maxResourceDescriptorBufferRange; + VkDeviceSize samplerDescriptorBufferAddressSpaceSize; + VkDeviceSize resourceDescriptorBufferAddressSpaceSize; + VkDeviceSize descriptorBufferAddressSpaceSize; +} VkPhysicalDeviceDescriptorBufferPropertiesEXT; + +typedef struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT { + VkStructureType sType; + void* pNext; + size_t combinedImageSamplerDensityMapDescriptorSize; +} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + +typedef struct VkPhysicalDeviceDescriptorBufferFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 descriptorBuffer; + VkBool32 descriptorBufferCaptureReplay; + VkBool32 descriptorBufferImageLayoutIgnored; + VkBool32 descriptorBufferPushDescriptors; +} VkPhysicalDeviceDescriptorBufferFeaturesEXT; + +typedef struct VkDescriptorAddressInfoEXT { + VkStructureType sType; + void* pNext; + VkDeviceAddress address; + VkDeviceSize range; + VkFormat format; +} VkDescriptorAddressInfoEXT; + +typedef struct VkDescriptorBufferBindingInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceAddress address; + VkBufferUsageFlags usage; +} VkDescriptorBufferBindingInfoEXT; + +typedef struct VkDescriptorBufferBindingPushDescriptorBufferHandleEXT { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkDescriptorBufferBindingPushDescriptorBufferHandleEXT; + +typedef union VkDescriptorDataEXT { + const VkSampler* pSampler; + const VkDescriptorImageInfo* pCombinedImageSampler; + const VkDescriptorImageInfo* pInputAttachmentImage; + const VkDescriptorImageInfo* pSampledImage; + const VkDescriptorImageInfo* pStorageImage; + const VkDescriptorAddressInfoEXT* pUniformTexelBuffer; + const VkDescriptorAddressInfoEXT* pStorageTexelBuffer; + const VkDescriptorAddressInfoEXT* pUniformBuffer; + const VkDescriptorAddressInfoEXT* pStorageBuffer; + VkDeviceAddress accelerationStructure; +} VkDescriptorDataEXT; + +typedef struct VkDescriptorGetInfoEXT { + VkStructureType sType; + const void* pNext; + VkDescriptorType type; + VkDescriptorDataEXT data; +} VkDescriptorGetInfoEXT; + +typedef struct VkBufferCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkBufferCaptureDescriptorDataInfoEXT; + +typedef struct VkImageCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkImage image; +} VkImageCaptureDescriptorDataInfoEXT; + +typedef struct VkImageViewCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkImageView imageView; +} VkImageViewCaptureDescriptorDataInfoEXT; + +typedef struct VkSamplerCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkSampler sampler; +} VkSamplerCaptureDescriptorDataInfoEXT; + +typedef struct VkOpaqueCaptureDescriptorDataCreateInfoEXT { + VkStructureType sType; + const void* pNext; + const void* opaqueCaptureDescriptorData; +} VkOpaqueCaptureDescriptorDataCreateInfoEXT; + +typedef struct VkAccelerationStructureCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR accelerationStructure; + VkAccelerationStructureNV accelerationStructureNV; +} VkAccelerationStructureCaptureDescriptorDataInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSizeEXT)(VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize* pLayoutSizeInBytes); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutBindingOffsetEXT)(VkDevice device, VkDescriptorSetLayout layout, uint32_t binding, VkDeviceSize* pOffset); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorEXT)(VkDevice device, const VkDescriptorGetInfoEXT* pDescriptorInfo, size_t dataSize, void* pDescriptor); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT* pBindingInfos); +typedef void (VKAPI_PTR *PFN_vkCmdSetDescriptorBufferOffsetsEXT)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const uint32_t* pBufferIndices, const VkDeviceSize* pOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set); +typedef VkResult (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkImageCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSizeEXT( + VkDevice device, + VkDescriptorSetLayout layout, + VkDeviceSize* pLayoutSizeInBytes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutBindingOffsetEXT( + VkDevice device, + VkDescriptorSetLayout layout, + uint32_t binding, + VkDeviceSize* pOffset); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorEXT( + VkDevice device, + const VkDescriptorGetInfoEXT* pDescriptorInfo, + size_t dataSize, + void* pDescriptor); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsetsEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkBufferCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkImageCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSamplerOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif +#endif + + +// VK_EXT_graphics_pipeline_library is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_graphics_pipeline_library 1 +#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME "VK_EXT_graphics_pipeline_library" + +typedef enum VkGraphicsPipelineLibraryFlagBitsEXT { + VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT = 0x00000001, + VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT = 0x00000002, + VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT = 0x00000004, + VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT = 0x00000008, + VK_GRAPHICS_PIPELINE_LIBRARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkGraphicsPipelineLibraryFlagBitsEXT; +typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT; +typedef struct VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 graphicsPipelineLibrary; +} VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + +typedef struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 graphicsPipelineLibraryFastLinking; + VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration; +} VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + +typedef struct VkGraphicsPipelineLibraryCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkGraphicsPipelineLibraryFlagsEXT flags; +} VkGraphicsPipelineLibraryCreateInfoEXT; + + + +// VK_AMD_shader_early_and_late_fragment_tests is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_early_and_late_fragment_tests 1 +#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1 +#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests" +typedef struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD { + VkStructureType sType; + void* pNext; + VkBool32 shaderEarlyAndLateFragmentTests; +} VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + + + +// VK_NV_fragment_shading_rate_enums is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fragment_shading_rate_enums 1 +#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums" + +typedef enum VkFragmentShadingRateTypeNV { + VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = 0, + VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = 1, + VK_FRAGMENT_SHADING_RATE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkFragmentShadingRateTypeNV; + +typedef enum VkFragmentShadingRateNV { + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 1, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 4, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 5, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 6, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 9, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 10, + VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 11, + VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 12, + VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 13, + VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 14, + VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = 15, + VK_FRAGMENT_SHADING_RATE_MAX_ENUM_NV = 0x7FFFFFFF +} VkFragmentShadingRateNV; +typedef struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 fragmentShadingRateEnums; + VkBool32 supersampleFragmentShadingRates; + VkBool32 noInvocationFragmentShadingRates; +} VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + +typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV { + VkStructureType sType; + void* pNext; + VkSampleCountFlagBits maxFragmentShadingRateInvocationCount; +} VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + +typedef struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkFragmentShadingRateTypeNV shadingRateType; + VkFragmentShadingRateNV shadingRate; + VkFragmentShadingRateCombinerOpKHR combinerOps[2]; +} VkPipelineFragmentShadingRateEnumStateCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateEnumNV)(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( + VkCommandBuffer commandBuffer, + VkFragmentShadingRateNV shadingRate, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); +#endif +#endif + + +// VK_NV_ray_tracing_motion_blur is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_motion_blur 1 +#define VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME "VK_NV_ray_tracing_motion_blur" + +typedef enum VkAccelerationStructureMotionInstanceTypeNV { + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV = 0, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = 1, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV = 2, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkAccelerationStructureMotionInstanceTypeNV; +typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV; +typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV; +typedef union VkDeviceOrHostAddressConstKHR { + VkDeviceAddress deviceAddress; + const void* hostAddress; +} VkDeviceOrHostAddressConstKHR; + +typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR vertexData; +} VkAccelerationStructureGeometryMotionTrianglesDataNV; + +typedef struct VkAccelerationStructureMotionInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t maxInstances; + VkAccelerationStructureMotionInfoFlagsNV flags; +} VkAccelerationStructureMotionInfoNV; + +typedef struct VkAccelerationStructureMatrixMotionInstanceNV { + VkTransformMatrixKHR transformT0; + VkTransformMatrixKHR transformT1; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureMatrixMotionInstanceNV; + +typedef struct VkSRTDataNV { + float sx; + float a; + float b; + float pvx; + float sy; + float c; + float pvy; + float sz; + float pvz; + float qx; + float qy; + float qz; + float qw; + float tx; + float ty; + float tz; +} VkSRTDataNV; + +typedef struct VkAccelerationStructureSRTMotionInstanceNV { + VkSRTDataNV transformT0; + VkSRTDataNV transformT1; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureSRTMotionInstanceNV; + +typedef union VkAccelerationStructureMotionInstanceDataNV { + VkAccelerationStructureInstanceKHR staticInstance; + VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; + VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance; +} VkAccelerationStructureMotionInstanceDataNV; + +typedef struct VkAccelerationStructureMotionInstanceNV { + VkAccelerationStructureMotionInstanceTypeNV type; + VkAccelerationStructureMotionInstanceFlagsNV flags; + VkAccelerationStructureMotionInstanceDataNV data; +} VkAccelerationStructureMotionInstanceNV; + +typedef struct VkPhysicalDeviceRayTracingMotionBlurFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingMotionBlur; + VkBool32 rayTracingMotionBlurPipelineTraceRaysIndirect; +} VkPhysicalDeviceRayTracingMotionBlurFeaturesNV; + + + +// VK_EXT_ycbcr_2plane_444_formats is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_ycbcr_2plane_444_formats 1 +#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1 +#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats" +typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 ycbcr2plane444Formats; +} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + + + +// VK_EXT_fragment_density_map2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map2 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2" +typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMapDeferred; +} VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 subsampledLoads; + VkBool32 subsampledCoarseReconstructionEarlyAccess; + uint32_t maxSubsampledArrayLayers; + uint32_t maxDescriptorSetSubsampledSamplers; +} VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; + + + +// VK_QCOM_rotated_copy_commands is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_rotated_copy_commands 1 +#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 2 +#define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands" +typedef struct VkCopyCommandTransformInfoQCOM { + VkStructureType sType; + const void* pNext; + VkSurfaceTransformFlagBitsKHR transform; +} VkCopyCommandTransformInfoQCOM; + + + +// VK_EXT_image_robustness is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_robustness 1 +#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness" +typedef VkPhysicalDeviceImageRobustnessFeatures VkPhysicalDeviceImageRobustnessFeaturesEXT; + + + +// VK_EXT_image_compression_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_compression_control 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control" + +typedef enum VkImageCompressionFlagBitsEXT { + VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0, + VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x00000001, + VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 0x00000002, + VK_IMAGE_COMPRESSION_DISABLED_EXT = 0x00000004, + VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkImageCompressionFlagBitsEXT; +typedef VkFlags VkImageCompressionFlagsEXT; + +typedef enum VkImageCompressionFixedRateFlagBitsEXT { + VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0, + VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 0x00000001, + VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 0x00000002, + VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 0x00000004, + VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 0x00000008, + VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 0x00000010, + VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 0x00000020, + VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 0x00000040, + VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 0x00000080, + VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 0x00000100, + VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 0x00000200, + VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 0x00000400, + VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 0x00000800, + VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 0x00001000, + VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 0x00002000, + VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 0x00004000, + VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 0x00008000, + VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 0x00010000, + VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 0x00020000, + VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 0x00040000, + VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 0x00080000, + VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 0x00100000, + VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 0x00200000, + VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 0x00400000, + VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 0x00800000, + VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkImageCompressionFixedRateFlagBitsEXT; +typedef VkFlags VkImageCompressionFixedRateFlagsEXT; +typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 imageCompressionControl; +} VkPhysicalDeviceImageCompressionControlFeaturesEXT; + +typedef struct VkImageCompressionControlEXT { + VkStructureType sType; + const void* pNext; + VkImageCompressionFlagsEXT flags; + uint32_t compressionControlPlaneCount; + VkImageCompressionFixedRateFlagsEXT* pFixedRateFlags; +} VkImageCompressionControlEXT; + +typedef struct VkImageCompressionPropertiesEXT { + VkStructureType sType; + void* pNext; + VkImageCompressionFlagsEXT imageCompressionFlags; + VkImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags; +} VkImageCompressionPropertiesEXT; + + + +// VK_EXT_attachment_feedback_loop_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_attachment_feedback_loop_layout 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION 2 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_layout" +typedef struct VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 attachmentFeedbackLoopLayout; +} VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + + + +// VK_EXT_4444_formats is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_4444_formats 1 +#define VK_EXT_4444_FORMATS_SPEC_VERSION 1 +#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats" +typedef struct VkPhysicalDevice4444FormatsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 formatA4R4G4B4; + VkBool32 formatA4B4G4R4; +} VkPhysicalDevice4444FormatsFeaturesEXT; + + + +// VK_EXT_device_fault is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_fault 1 +#define VK_EXT_DEVICE_FAULT_SPEC_VERSION 2 +#define VK_EXT_DEVICE_FAULT_EXTENSION_NAME "VK_EXT_device_fault" + +typedef enum VkDeviceFaultAddressTypeEXT { + VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT = 0, + VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT = 1, + VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT = 2, + VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT = 3, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT = 4, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT = 5, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT = 6, + VK_DEVICE_FAULT_ADDRESS_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceFaultAddressTypeEXT; + +typedef enum VkDeviceFaultVendorBinaryHeaderVersionEXT { + VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT = 1, + VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceFaultVendorBinaryHeaderVersionEXT; +typedef struct VkPhysicalDeviceFaultFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 deviceFault; + VkBool32 deviceFaultVendorBinary; +} VkPhysicalDeviceFaultFeaturesEXT; + +typedef struct VkDeviceFaultCountsEXT { + VkStructureType sType; + void* pNext; + uint32_t addressInfoCount; + uint32_t vendorInfoCount; + VkDeviceSize vendorBinarySize; +} VkDeviceFaultCountsEXT; + +typedef struct VkDeviceFaultAddressInfoEXT { + VkDeviceFaultAddressTypeEXT addressType; + VkDeviceAddress reportedAddress; + VkDeviceSize addressPrecision; +} VkDeviceFaultAddressInfoEXT; + +typedef struct VkDeviceFaultVendorInfoEXT { + char description[VK_MAX_DESCRIPTION_SIZE]; + uint64_t vendorFaultCode; + uint64_t vendorFaultData; +} VkDeviceFaultVendorInfoEXT; + +typedef struct VkDeviceFaultInfoEXT { + VkStructureType sType; + void* pNext; + char description[VK_MAX_DESCRIPTION_SIZE]; + VkDeviceFaultAddressInfoEXT* pAddressInfos; + VkDeviceFaultVendorInfoEXT* pVendorInfos; + void* pVendorBinaryData; +} VkDeviceFaultInfoEXT; + +typedef struct VkDeviceFaultVendorBinaryHeaderVersionOneEXT { + uint32_t headerSize; + VkDeviceFaultVendorBinaryHeaderVersionEXT headerVersion; + uint32_t vendorID; + uint32_t deviceID; + uint32_t driverVersion; + uint8_t pipelineCacheUUID[VK_UUID_SIZE]; + uint32_t applicationNameOffset; + uint32_t applicationVersion; + uint32_t engineNameOffset; + uint32_t engineVersion; + uint32_t apiVersion; +} VkDeviceFaultVendorBinaryHeaderVersionOneEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceFaultInfoEXT)(VkDevice device, VkDeviceFaultCountsEXT* pFaultCounts, VkDeviceFaultInfoEXT* pFaultInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT( + VkDevice device, + VkDeviceFaultCountsEXT* pFaultCounts, + VkDeviceFaultInfoEXT* pFaultInfo); +#endif +#endif + + +// VK_ARM_rasterization_order_attachment_access is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_rasterization_order_attachment_access 1 +#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 +#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_ARM_rasterization_order_attachment_access" +typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 rasterizationOrderColorAttachmentAccess; + VkBool32 rasterizationOrderDepthAttachmentAccess; + VkBool32 rasterizationOrderStencilAttachmentAccess; +} VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + +typedef VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; + + + +// VK_EXT_rgba10x6_formats is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_rgba10x6_formats 1 +#define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1 +#define VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME "VK_EXT_rgba10x6_formats" +typedef struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 formatRgba10x6WithoutYCbCrSampler; +} VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT; + + + +// VK_VALVE_mutable_descriptor_type is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_mutable_descriptor_type 1 +#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 +#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_VALVE_mutable_descriptor_type" +typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 mutableDescriptorType; +} VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT; + +typedef VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE; + +typedef struct VkMutableDescriptorTypeListEXT { + uint32_t descriptorTypeCount; + const VkDescriptorType* pDescriptorTypes; +} VkMutableDescriptorTypeListEXT; + +typedef VkMutableDescriptorTypeListEXT VkMutableDescriptorTypeListVALVE; + +typedef struct VkMutableDescriptorTypeCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t mutableDescriptorTypeListCount; + const VkMutableDescriptorTypeListEXT* pMutableDescriptorTypeLists; +} VkMutableDescriptorTypeCreateInfoEXT; + +typedef VkMutableDescriptorTypeCreateInfoEXT VkMutableDescriptorTypeCreateInfoVALVE; + + + +// VK_EXT_vertex_input_dynamic_state is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_vertex_input_dynamic_state 1 +#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2 +#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state" +typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 vertexInputDynamicState; +} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; + +typedef struct VkVertexInputBindingDescription2EXT { + VkStructureType sType; + void* pNext; + uint32_t binding; + uint32_t stride; + VkVertexInputRate inputRate; + uint32_t divisor; +} VkVertexInputBindingDescription2EXT; + +typedef struct VkVertexInputAttributeDescription2EXT { + VkStructureType sType; + void* pNext; + uint32_t location; + uint32_t binding; + VkFormat format; + uint32_t offset; +} VkVertexInputAttributeDescription2EXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( + VkCommandBuffer commandBuffer, + uint32_t vertexBindingDescriptionCount, + const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); +#endif +#endif + + +// VK_EXT_physical_device_drm is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_physical_device_drm 1 +#define VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION 1 +#define VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME "VK_EXT_physical_device_drm" +typedef struct VkPhysicalDeviceDrmPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 hasPrimary; + VkBool32 hasRender; + int64_t primaryMajor; + int64_t primaryMinor; + int64_t renderMajor; + int64_t renderMinor; +} VkPhysicalDeviceDrmPropertiesEXT; + + + +// VK_EXT_device_address_binding_report is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_address_binding_report 1 +#define VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_SPEC_VERSION 1 +#define VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_EXTENSION_NAME "VK_EXT_device_address_binding_report" + +typedef enum VkDeviceAddressBindingTypeEXT { + VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT = 0, + VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT = 1, + VK_DEVICE_ADDRESS_BINDING_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceAddressBindingTypeEXT; + +typedef enum VkDeviceAddressBindingFlagBitsEXT { + VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT = 0x00000001, + VK_DEVICE_ADDRESS_BINDING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceAddressBindingFlagBitsEXT; +typedef VkFlags VkDeviceAddressBindingFlagsEXT; +typedef struct VkPhysicalDeviceAddressBindingReportFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 reportAddressBinding; +} VkPhysicalDeviceAddressBindingReportFeaturesEXT; + +typedef struct VkDeviceAddressBindingCallbackDataEXT { + VkStructureType sType; + void* pNext; + VkDeviceAddressBindingFlagsEXT flags; + VkDeviceAddress baseAddress; + VkDeviceSize size; + VkDeviceAddressBindingTypeEXT bindingType; +} VkDeviceAddressBindingCallbackDataEXT; + + + +// VK_EXT_depth_clip_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clip_control 1 +#define VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clip_control" +typedef struct VkPhysicalDeviceDepthClipControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthClipControl; +} VkPhysicalDeviceDepthClipControlFeaturesEXT; + +typedef struct VkPipelineViewportDepthClipControlCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 negativeOneToOne; +} VkPipelineViewportDepthClipControlCreateInfoEXT; + + + +// VK_EXT_primitive_topology_list_restart is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_primitive_topology_list_restart 1 +#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION 1 +#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME "VK_EXT_primitive_topology_list_restart" +typedef struct VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 primitiveTopologyListRestart; + VkBool32 primitiveTopologyPatchListRestart; +} VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + + + +// VK_EXT_present_mode_fifo_latest_ready is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_present_mode_fifo_latest_ready 1 +#define VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION 1 +#define VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME "VK_EXT_present_mode_fifo_latest_ready" +typedef VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR VkPhysicalDevicePresentModeFifoLatestReadyFeaturesEXT; + + + +// VK_HUAWEI_subpass_shading is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_subpass_shading 1 +#define VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION 3 +#define VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME "VK_HUAWEI_subpass_shading" +typedef struct VkSubpassShadingPipelineCreateInfoHUAWEI { + VkStructureType sType; + void* pNext; + VkRenderPass renderPass; + uint32_t subpass; +} VkSubpassShadingPipelineCreateInfoHUAWEI; + +typedef struct VkPhysicalDeviceSubpassShadingFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 subpassShading; +} VkPhysicalDeviceSubpassShadingFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI { + VkStructureType sType; + void* pNext; + uint32_t maxSubpassShadingWorkgroupSizeAspectRatio; +} VkPhysicalDeviceSubpassShadingPropertiesHUAWEI; + +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)(VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize); +typedef void (VKAPI_PTR *PFN_vkCmdSubpassShadingHUAWEI)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + VkDevice device, + VkRenderPass renderpass, + VkExtent2D* pMaxWorkgroupSize); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSubpassShadingHUAWEI( + VkCommandBuffer commandBuffer); +#endif +#endif + + +// VK_HUAWEI_invocation_mask is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_invocation_mask 1 +#define VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION 1 +#define VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME "VK_HUAWEI_invocation_mask" +typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 invocationMask; +} VkPhysicalDeviceInvocationMaskFeaturesHUAWEI; + +typedef void (VKAPI_PTR *PFN_vkCmdBindInvocationMaskHUAWEI)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout); +#endif +#endif + + +// VK_NV_external_memory_rdma is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory_rdma 1 +typedef void* VkRemoteAddressNV; +#define VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME "VK_NV_external_memory_rdma" +typedef struct VkMemoryGetRemoteAddressInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetRemoteAddressInfoNV; + +typedef struct VkPhysicalDeviceExternalMemoryRDMAFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 externalMemoryRDMA; +} VkPhysicalDeviceExternalMemoryRDMAFeaturesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryRemoteAddressNV)(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV( + VkDevice device, + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV* pAddress); +#endif +#endif + + +// VK_EXT_pipeline_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_properties 1 +#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties" +typedef VkPipelineInfoKHR VkPipelineInfoEXT; + +typedef struct VkPipelinePropertiesIdentifierEXT { + VkStructureType sType; + void* pNext; + uint8_t pipelineIdentifier[VK_UUID_SIZE]; +} VkPipelinePropertiesIdentifierEXT; + +typedef struct VkPhysicalDevicePipelinePropertiesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 pipelinePropertiesIdentifier; +} VkPhysicalDevicePipelinePropertiesFeaturesEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelinePropertiesEXT( + VkDevice device, + const VkPipelineInfoEXT* pPipelineInfo, + VkBaseOutStructure* pPipelineProperties); +#endif +#endif + + +// VK_EXT_frame_boundary is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_frame_boundary 1 +#define VK_EXT_FRAME_BOUNDARY_SPEC_VERSION 1 +#define VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME "VK_EXT_frame_boundary" + +typedef enum VkFrameBoundaryFlagBitsEXT { + VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT = 0x00000001, + VK_FRAME_BOUNDARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkFrameBoundaryFlagBitsEXT; +typedef VkFlags VkFrameBoundaryFlagsEXT; +typedef struct VkPhysicalDeviceFrameBoundaryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 frameBoundary; +} VkPhysicalDeviceFrameBoundaryFeaturesEXT; + +typedef struct VkFrameBoundaryEXT { + VkStructureType sType; + const void* pNext; + VkFrameBoundaryFlagsEXT flags; + uint64_t frameID; + uint32_t imageCount; + const VkImage* pImages; + uint32_t bufferCount; + const VkBuffer* pBuffers; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkFrameBoundaryEXT; + + + +// VK_EXT_multisampled_render_to_single_sampled is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_multisampled_render_to_single_sampled 1 +#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION 1 +#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME "VK_EXT_multisampled_render_to_single_sampled" +typedef struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 multisampledRenderToSingleSampled; +} VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + +typedef struct VkSubpassResolvePerformanceQueryEXT { + VkStructureType sType; + void* pNext; + VkBool32 optimal; +} VkSubpassResolvePerformanceQueryEXT; + +typedef struct VkMultisampledRenderToSingleSampledInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 multisampledRenderToSingleSampledEnable; + VkSampleCountFlagBits rasterizationSamples; +} VkMultisampledRenderToSingleSampledInfoEXT; + + + +// VK_EXT_extended_dynamic_state2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_extended_dynamic_state2 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2" +typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 extendedDynamicState2; + VkBool32 extendedDynamicState2LogicOp; + VkBool32 extendedDynamicState2PatchControlPoints; +} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( + VkCommandBuffer commandBuffer, + uint32_t patchControlPoints); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBiasEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( + VkCommandBuffer commandBuffer, + VkLogicOp logicOp); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable); +#endif +#endif + + +// VK_EXT_color_write_enable is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_color_write_enable 1 +#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1 +#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable" +typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 colorWriteEnable; +} VkPhysicalDeviceColorWriteEnableFeaturesEXT; + +typedef struct VkPipelineColorWriteCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t attachmentCount; + const VkBool32* pColorWriteEnables; +} VkPipelineColorWriteCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteEnableEXT( + VkCommandBuffer commandBuffer, + uint32_t attachmentCount, + const VkBool32* pColorWriteEnables); +#endif +#endif + + +// VK_EXT_primitives_generated_query is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_primitives_generated_query 1 +#define VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION 1 +#define VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME "VK_EXT_primitives_generated_query" +typedef struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 primitivesGeneratedQuery; + VkBool32 primitivesGeneratedQueryWithRasterizerDiscard; + VkBool32 primitivesGeneratedQueryWithNonZeroStreams; +} VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + + + +// VK_EXT_global_priority_query is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_global_priority_query 1 +#define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1 +#define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query" +#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT VK_MAX_GLOBAL_PRIORITY_SIZE +typedef VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT; + +typedef VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesEXT; + + + +// VK_VALVE_video_encode_rgb_conversion is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_video_encode_rgb_conversion 1 +#define VK_VALVE_VIDEO_ENCODE_RGB_CONVERSION_SPEC_VERSION 1 +#define VK_VALVE_VIDEO_ENCODE_RGB_CONVERSION_EXTENSION_NAME "VK_VALVE_video_encode_rgb_conversion" + +typedef enum VkVideoEncodeRgbModelConversionFlagBitsVALVE { + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE = 0x00000001, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE = 0x00000002, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE = 0x00000004, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE = 0x00000008, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE = 0x00000010, + VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_FLAG_BITS_MAX_ENUM_VALVE = 0x7FFFFFFF +} VkVideoEncodeRgbModelConversionFlagBitsVALVE; +typedef VkFlags VkVideoEncodeRgbModelConversionFlagsVALVE; + +typedef enum VkVideoEncodeRgbRangeCompressionFlagBitsVALVE { + VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE = 0x00000001, + VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE = 0x00000002, + VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FLAG_BITS_MAX_ENUM_VALVE = 0x7FFFFFFF +} VkVideoEncodeRgbRangeCompressionFlagBitsVALVE; +typedef VkFlags VkVideoEncodeRgbRangeCompressionFlagsVALVE; + +typedef enum VkVideoEncodeRgbChromaOffsetFlagBitsVALVE { + VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE = 0x00000001, + VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE = 0x00000002, + VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_FLAG_BITS_MAX_ENUM_VALVE = 0x7FFFFFFF +} VkVideoEncodeRgbChromaOffsetFlagBitsVALVE; +typedef VkFlags VkVideoEncodeRgbChromaOffsetFlagsVALVE; +typedef struct VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeRgbConversion; +} VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE; + +typedef struct VkVideoEncodeRgbConversionCapabilitiesVALVE { + VkStructureType sType; + void* pNext; + VkVideoEncodeRgbModelConversionFlagsVALVE rgbModels; + VkVideoEncodeRgbRangeCompressionFlagsVALVE rgbRanges; + VkVideoEncodeRgbChromaOffsetFlagsVALVE xChromaOffsets; + VkVideoEncodeRgbChromaOffsetFlagsVALVE yChromaOffsets; +} VkVideoEncodeRgbConversionCapabilitiesVALVE; + +typedef struct VkVideoEncodeProfileRgbConversionInfoVALVE { + VkStructureType sType; + const void* pNext; + VkBool32 performEncodeRgbConversion; +} VkVideoEncodeProfileRgbConversionInfoVALVE; + +typedef struct VkVideoEncodeSessionRgbConversionCreateInfoVALVE { + VkStructureType sType; + const void* pNext; + VkVideoEncodeRgbModelConversionFlagBitsVALVE rgbModel; + VkVideoEncodeRgbRangeCompressionFlagBitsVALVE rgbRange; + VkVideoEncodeRgbChromaOffsetFlagBitsVALVE xChromaOffset; + VkVideoEncodeRgbChromaOffsetFlagBitsVALVE yChromaOffset; +} VkVideoEncodeSessionRgbConversionCreateInfoVALVE; + + + +// VK_EXT_image_view_min_lod is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_view_min_lod 1 +#define VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION 1 +#define VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME "VK_EXT_image_view_min_lod" +typedef struct VkPhysicalDeviceImageViewMinLodFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 minLod; +} VkPhysicalDeviceImageViewMinLodFeaturesEXT; + +typedef struct VkImageViewMinLodCreateInfoEXT { + VkStructureType sType; + const void* pNext; + float minLod; +} VkImageViewMinLodCreateInfoEXT; + + + +// VK_EXT_multi_draw is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_multi_draw 1 +#define VK_EXT_MULTI_DRAW_SPEC_VERSION 1 +#define VK_EXT_MULTI_DRAW_EXTENSION_NAME "VK_EXT_multi_draw" +typedef struct VkPhysicalDeviceMultiDrawFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 multiDraw; +} VkPhysicalDeviceMultiDrawFeaturesEXT; + +typedef struct VkPhysicalDeviceMultiDrawPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxMultiDrawCount; +} VkPhysicalDeviceMultiDrawPropertiesEXT; + +typedef struct VkMultiDrawInfoEXT { + uint32_t firstVertex; + uint32_t vertexCount; +} VkMultiDrawInfoEXT; + +typedef struct VkMultiDrawIndexedInfoEXT { + uint32_t firstIndex; + uint32_t indexCount; + int32_t vertexOffset; +} VkMultiDrawIndexedInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiIndexedEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawInfoEXT* pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawIndexedInfoEXT* pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t* pVertexOffset); +#endif +#endif + + +// VK_EXT_image_2d_view_of_3d is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_2d_view_of_3d 1 +#define VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION 1 +#define VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_2d_view_of_3d" +typedef struct VkPhysicalDeviceImage2DViewOf3DFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 image2DViewOf3D; + VkBool32 sampler2DViewOf3D; +} VkPhysicalDeviceImage2DViewOf3DFeaturesEXT; + + + +// VK_EXT_shader_tile_image is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_tile_image 1 +#define VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION 1 +#define VK_EXT_SHADER_TILE_IMAGE_EXTENSION_NAME "VK_EXT_shader_tile_image" +typedef struct VkPhysicalDeviceShaderTileImageFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderTileImageColorReadAccess; + VkBool32 shaderTileImageDepthReadAccess; + VkBool32 shaderTileImageStencilReadAccess; +} VkPhysicalDeviceShaderTileImageFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderTileImagePropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderTileImageCoherentReadAccelerated; + VkBool32 shaderTileImageReadSampleFromPixelRateInvocation; + VkBool32 shaderTileImageReadFromHelperInvocation; +} VkPhysicalDeviceShaderTileImagePropertiesEXT; + + + +// VK_EXT_opacity_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_opacity_micromap 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkMicromapEXT) +#define VK_EXT_OPACITY_MICROMAP_SPEC_VERSION 2 +#define VK_EXT_OPACITY_MICROMAP_EXTENSION_NAME "VK_EXT_opacity_micromap" + +typedef enum VkMicromapTypeEXT { + VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT = 0, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV = 1000397000, +#endif + VK_MICROMAP_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkMicromapTypeEXT; + +typedef enum VkBuildMicromapModeEXT { + VK_BUILD_MICROMAP_MODE_BUILD_EXT = 0, + VK_BUILD_MICROMAP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBuildMicromapModeEXT; + +typedef enum VkCopyMicromapModeEXT { + VK_COPY_MICROMAP_MODE_CLONE_EXT = 0, + VK_COPY_MICROMAP_MODE_SERIALIZE_EXT = 1, + VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT = 2, + VK_COPY_MICROMAP_MODE_COMPACT_EXT = 3, + VK_COPY_MICROMAP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkCopyMicromapModeEXT; + +typedef enum VkOpacityMicromapFormatEXT { + VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT = 1, + VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT = 2, + VK_OPACITY_MICROMAP_FORMAT_MAX_ENUM_EXT = 0x7FFFFFFF +} VkOpacityMicromapFormatEXT; + +typedef enum VkOpacityMicromapSpecialIndexEXT { + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT = -1, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT = -2, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT = -3, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT = -4, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_CLUSTER_GEOMETRY_DISABLE_OPACITY_MICROMAP_NV = -5, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_MAX_ENUM_EXT = 0x7FFFFFFF +} VkOpacityMicromapSpecialIndexEXT; + +typedef enum VkAccelerationStructureCompatibilityKHR { + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureCompatibilityKHR; + +typedef enum VkAccelerationStructureBuildTypeKHR { + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureBuildTypeKHR; + +typedef enum VkBuildMicromapFlagBitsEXT { + VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT = 0x00000001, + VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT = 0x00000002, + VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT = 0x00000004, + VK_BUILD_MICROMAP_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBuildMicromapFlagBitsEXT; +typedef VkFlags VkBuildMicromapFlagsEXT; + +typedef enum VkMicromapCreateFlagBitsEXT { + VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = 0x00000001, + VK_MICROMAP_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkMicromapCreateFlagBitsEXT; +typedef VkFlags VkMicromapCreateFlagsEXT; +typedef struct VkMicromapUsageEXT { + uint32_t count; + uint32_t subdivisionLevel; + uint32_t format; +} VkMicromapUsageEXT; + +typedef union VkDeviceOrHostAddressKHR { + VkDeviceAddress deviceAddress; + void* hostAddress; +} VkDeviceOrHostAddressKHR; + +typedef struct VkMicromapBuildInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapTypeEXT type; + VkBuildMicromapFlagsEXT flags; + VkBuildMicromapModeEXT mode; + VkMicromapEXT dstMicromap; + uint32_t usageCountsCount; + const VkMicromapUsageEXT* pUsageCounts; + const VkMicromapUsageEXT* const* ppUsageCounts; + VkDeviceOrHostAddressConstKHR data; + VkDeviceOrHostAddressKHR scratchData; + VkDeviceOrHostAddressConstKHR triangleArray; + VkDeviceSize triangleArrayStride; +} VkMicromapBuildInfoEXT; + +typedef struct VkMicromapCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapCreateFlagsEXT createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkMicromapTypeEXT type; + VkDeviceAddress deviceAddress; +} VkMicromapCreateInfoEXT; + +typedef struct VkPhysicalDeviceOpacityMicromapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 micromap; + VkBool32 micromapCaptureReplay; + VkBool32 micromapHostCommands; +} VkPhysicalDeviceOpacityMicromapFeaturesEXT; + +typedef struct VkPhysicalDeviceOpacityMicromapPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxOpacity2StateSubdivisionLevel; + uint32_t maxOpacity4StateSubdivisionLevel; +} VkPhysicalDeviceOpacityMicromapPropertiesEXT; + +typedef struct VkMicromapVersionInfoEXT { + VkStructureType sType; + const void* pNext; + const uint8_t* pVersionData; +} VkMicromapVersionInfoEXT; + +typedef struct VkCopyMicromapToMemoryInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapEXT src; + VkDeviceOrHostAddressKHR dst; + VkCopyMicromapModeEXT mode; +} VkCopyMicromapToMemoryInfoEXT; + +typedef struct VkCopyMemoryToMicromapInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR src; + VkMicromapEXT dst; + VkCopyMicromapModeEXT mode; +} VkCopyMemoryToMicromapInfoEXT; + +typedef struct VkCopyMicromapInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapEXT src; + VkMicromapEXT dst; + VkCopyMicromapModeEXT mode; +} VkCopyMicromapInfoEXT; + +typedef struct VkMicromapBuildSizesInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceSize micromapSize; + VkDeviceSize buildScratchSize; + VkBool32 discardable; +} VkMicromapBuildSizesInfoEXT; + +typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT { + VkStructureType sType; + void* pNext; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexBuffer; + VkDeviceSize indexStride; + uint32_t baseTriangle; + uint32_t usageCountsCount; + const VkMicromapUsageEXT* pUsageCounts; + const VkMicromapUsageEXT* const* ppUsageCounts; + VkMicromapEXT micromap; +} VkAccelerationStructureTrianglesOpacityMicromapEXT; + +typedef struct VkMicromapTriangleEXT { + uint32_t dataOffset; + uint16_t subdivisionLevel; + uint16_t format; +} VkMicromapTriangleEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateMicromapEXT)(VkDevice device, const VkMicromapCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkMicromapEXT* pMicromap); +typedef void (VKAPI_PTR *PFN_vkDestroyMicromapEXT)(VkDevice device, VkMicromapEXT micromap, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdBuildMicromapsEXT)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos); +typedef VkResult (VKAPI_PTR *PFN_vkBuildMicromapsEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMicromapEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapInfoEXT* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMicromapToMemoryEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapToMemoryInfoEXT* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToMicromapEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToMicromapInfoEXT* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkWriteMicromapsPropertiesEXT)(VkDevice device, uint32_t micromapCount, const VkMicromapEXT* pMicromaps, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMicromapEXT)(VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMicromapToMemoryEXT)(VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToMicromapEXT)(VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteMicromapsPropertiesEXT)(VkCommandBuffer commandBuffer, uint32_t micromapCount, const VkMicromapEXT* pMicromaps, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (VKAPI_PTR *PFN_vkGetDeviceMicromapCompatibilityEXT)(VkDevice device, const VkMicromapVersionInfoEXT* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); +typedef void (VKAPI_PTR *PFN_vkGetMicromapBuildSizesEXT)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkMicromapBuildInfoEXT* pBuildInfo, VkMicromapBuildSizesInfoEXT* pSizeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMicromapEXT( + VkDevice device, + const VkMicromapCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkMicromapEXT* pMicromap); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyMicromapEXT( + VkDevice device, + VkMicromapEXT micromap, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildMicromapsEXT( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBuildMicromapsEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapToMemoryEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapToMemoryInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWriteMicromapsPropertiesEXT( + VkDevice device, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapToMemoryEXT( + VkCommandBuffer commandBuffer, + const VkCopyMicromapToMemoryInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteMicromapsPropertiesEXT( + VkCommandBuffer commandBuffer, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceMicromapCompatibilityEXT( + VkDevice device, + const VkMicromapVersionInfoEXT* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetMicromapBuildSizesEXT( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkMicromapBuildInfoEXT* pBuildInfo, + VkMicromapBuildSizesInfoEXT* pSizeInfo); +#endif +#endif + + +// VK_EXT_load_store_op_none is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_load_store_op_none 1 +#define VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION 1 +#define VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_EXT_load_store_op_none" + + +// VK_HUAWEI_cluster_culling_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_cluster_culling_shader 1 +#define VK_HUAWEI_CLUSTER_CULLING_SHADER_SPEC_VERSION 3 +#define VK_HUAWEI_CLUSTER_CULLING_SHADER_EXTENSION_NAME "VK_HUAWEI_cluster_culling_shader" +typedef struct VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 clustercullingShader; + VkBool32 multiviewClusterCullingShader; +} VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI { + VkStructureType sType; + void* pNext; + uint32_t maxWorkGroupCount[3]; + uint32_t maxWorkGroupSize[3]; + uint32_t maxOutputClusterCount; + VkDeviceSize indirectBufferOffsetAlignment; +} VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + +typedef struct VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 clusterShadingRate; +} VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawClusterHUAWEI)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (VKAPI_PTR *PFN_vkCmdDrawClusterIndirectHUAWEI)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterHUAWEI( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterIndirectHUAWEI( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset); +#endif +#endif + + +// VK_EXT_border_color_swizzle is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_border_color_swizzle 1 +#define VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION 1 +#define VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME "VK_EXT_border_color_swizzle" +typedef struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 borderColorSwizzle; + VkBool32 borderColorSwizzleFromImage; +} VkPhysicalDeviceBorderColorSwizzleFeaturesEXT; + +typedef struct VkSamplerBorderColorComponentMappingCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkComponentMapping components; + VkBool32 srgb; +} VkSamplerBorderColorComponentMappingCreateInfoEXT; + + + +// VK_EXT_pageable_device_local_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pageable_device_local_memory 1 +#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION 1 +#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME "VK_EXT_pageable_device_local_memory" +typedef struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 pageableDeviceLocalMemory; +} VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkSetDeviceMemoryPriorityEXT)(VkDevice device, VkDeviceMemory memory, float priority); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT( + VkDevice device, + VkDeviceMemory memory, + float priority); +#endif +#endif + + +// VK_ARM_shader_core_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_shader_core_properties 1 +#define VK_ARM_SHADER_CORE_PROPERTIES_SPEC_VERSION 1 +#define VK_ARM_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_ARM_shader_core_properties" +typedef struct VkPhysicalDeviceShaderCorePropertiesARM { + VkStructureType sType; + void* pNext; + uint32_t pixelRate; + uint32_t texelRate; + uint32_t fmaRate; +} VkPhysicalDeviceShaderCorePropertiesARM; + + + +// VK_ARM_scheduling_controls is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_scheduling_controls 1 +#define VK_ARM_SCHEDULING_CONTROLS_SPEC_VERSION 1 +#define VK_ARM_SCHEDULING_CONTROLS_EXTENSION_NAME "VK_ARM_scheduling_controls" +typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagsARM; + +// Flag bits for VkPhysicalDeviceSchedulingControlsFlagBitsARM +typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagBitsARM; +static const VkPhysicalDeviceSchedulingControlsFlagBitsARM VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM = 0x00000001ULL; + +typedef struct VkDeviceQueueShaderCoreControlCreateInfoARM { + VkStructureType sType; + void* pNext; + uint32_t shaderCoreCount; +} VkDeviceQueueShaderCoreControlCreateInfoARM; + +typedef struct VkPhysicalDeviceSchedulingControlsFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 schedulingControls; +} VkPhysicalDeviceSchedulingControlsFeaturesARM; + +typedef struct VkPhysicalDeviceSchedulingControlsPropertiesARM { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags; +} VkPhysicalDeviceSchedulingControlsPropertiesARM; + + + +// VK_EXT_image_sliced_view_of_3d is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_sliced_view_of_3d 1 +#define VK_EXT_IMAGE_SLICED_VIEW_OF_3D_SPEC_VERSION 1 +#define VK_EXT_IMAGE_SLICED_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_sliced_view_of_3d" +#define VK_REMAINING_3D_SLICES_EXT (~0U) +typedef struct VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 imageSlicedViewOf3D; +} VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + +typedef struct VkImageViewSlicedCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t sliceOffset; + uint32_t sliceCount; +} VkImageViewSlicedCreateInfoEXT; + + + +// VK_VALVE_descriptor_set_host_mapping is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_descriptor_set_host_mapping 1 +#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION 1 +#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME "VK_VALVE_descriptor_set_host_mapping" +typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE { + VkStructureType sType; + void* pNext; + VkBool32 descriptorSetHostMapping; +} VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + +typedef struct VkDescriptorSetBindingReferenceVALVE { + VkStructureType sType; + const void* pNext; + VkDescriptorSetLayout descriptorSetLayout; + uint32_t binding; +} VkDescriptorSetBindingReferenceVALVE; + +typedef struct VkDescriptorSetLayoutHostMappingInfoVALVE { + VkStructureType sType; + void* pNext; + size_t descriptorOffset; + uint32_t descriptorSize; +} VkDescriptorSetLayoutHostMappingInfoVALVE; + +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)(VkDevice device, const VkDescriptorSetBindingReferenceVALVE* pBindingReference, VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetHostMappingVALVE)(VkDevice device, VkDescriptorSet descriptorSet, void** ppData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutHostMappingInfoVALVE( + VkDevice device, + const VkDescriptorSetBindingReferenceVALVE* pBindingReference, + VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( + VkDevice device, + VkDescriptorSet descriptorSet, + void** ppData); +#endif +#endif + + +// VK_EXT_depth_clamp_zero_one is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clamp_zero_one 1 +#define VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_EXT_depth_clamp_zero_one" +typedef VkPhysicalDeviceDepthClampZeroOneFeaturesKHR VkPhysicalDeviceDepthClampZeroOneFeaturesEXT; + + + +// VK_EXT_non_seamless_cube_map is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_non_seamless_cube_map 1 +#define VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION 1 +#define VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME "VK_EXT_non_seamless_cube_map" +typedef struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 nonSeamlessCubeMap; +} VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + + + +// VK_ARM_render_pass_striped is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_render_pass_striped 1 +#define VK_ARM_RENDER_PASS_STRIPED_SPEC_VERSION 1 +#define VK_ARM_RENDER_PASS_STRIPED_EXTENSION_NAME "VK_ARM_render_pass_striped" +typedef struct VkPhysicalDeviceRenderPassStripedFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 renderPassStriped; +} VkPhysicalDeviceRenderPassStripedFeaturesARM; + +typedef struct VkPhysicalDeviceRenderPassStripedPropertiesARM { + VkStructureType sType; + void* pNext; + VkExtent2D renderPassStripeGranularity; + uint32_t maxRenderPassStripes; +} VkPhysicalDeviceRenderPassStripedPropertiesARM; + +typedef struct VkRenderPassStripeInfoARM { + VkStructureType sType; + const void* pNext; + VkRect2D stripeArea; +} VkRenderPassStripeInfoARM; + +typedef struct VkRenderPassStripeBeginInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t stripeInfoCount; + const VkRenderPassStripeInfoARM* pStripeInfos; +} VkRenderPassStripeBeginInfoARM; + +typedef struct VkRenderPassStripeSubmitInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t stripeSemaphoreInfoCount; + const VkSemaphoreSubmitInfo* pStripeSemaphoreInfos; +} VkRenderPassStripeSubmitInfoARM; + + + +// VK_QCOM_fragment_density_map_offset is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_fragment_density_map_offset 1 +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 3 +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset" +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMapOffset; +} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + +typedef VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT { + VkStructureType sType; + void* pNext; + VkExtent2D fragmentDensityOffsetGranularity; +} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + +typedef VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; + +typedef struct VkRenderPassFragmentDensityMapOffsetEndInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t fragmentDensityOffsetCount; + const VkOffset2D* pFragmentDensityOffsets; +} VkRenderPassFragmentDensityMapOffsetEndInfoEXT; + +typedef VkRenderPassFragmentDensityMapOffsetEndInfoEXT VkSubpassFragmentDensityMapOffsetEndInfoQCOM; + + + +// VK_NV_copy_memory_indirect is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_copy_memory_indirect 1 +#define VK_NV_COPY_MEMORY_INDIRECT_SPEC_VERSION 1 +#define VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME "VK_NV_copy_memory_indirect" +typedef VkCopyMemoryIndirectCommandKHR VkCopyMemoryIndirectCommandNV; + +typedef VkCopyMemoryToImageIndirectCommandKHR VkCopyMemoryToImageIndirectCommandNV; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 indirectCopy; +} VkPhysicalDeviceCopyMemoryIndirectFeaturesNV; + +typedef VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR VkPhysicalDeviceCopyMemoryIndirectPropertiesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryIndirectNV)(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToImageIndirectNV)(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride, VkImage dstImage, VkImageLayout dstImageLayout, const VkImageSubresourceLayers* pImageSubresources); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryIndirectNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToImageIndirectNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + VkImage dstImage, + VkImageLayout dstImageLayout, + const VkImageSubresourceLayers* pImageSubresources); +#endif +#endif + + +// VK_NV_memory_decompression is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_memory_decompression 1 +#define VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION 1 +#define VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME "VK_NV_memory_decompression" + +// Flag bits for VkMemoryDecompressionMethodFlagBitsEXT +typedef VkFlags64 VkMemoryDecompressionMethodFlagBitsEXT; +static const VkMemoryDecompressionMethodFlagBitsEXT VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT = 0x00000001ULL; +static const VkMemoryDecompressionMethodFlagBitsEXT VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV = 0x00000001ULL; + +typedef VkMemoryDecompressionMethodFlagBitsEXT VkMemoryDecompressionMethodFlagBitsNV; + +typedef VkFlags64 VkMemoryDecompressionMethodFlagsEXT; +typedef VkMemoryDecompressionMethodFlagsEXT VkMemoryDecompressionMethodFlagsNV; + +typedef struct VkDecompressMemoryRegionNV { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize compressedSize; + VkDeviceSize decompressedSize; + VkMemoryDecompressionMethodFlagsNV decompressionMethod; +} VkDecompressMemoryRegionNV; + +typedef struct VkPhysicalDeviceMemoryDecompressionFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 memoryDecompression; +} VkPhysicalDeviceMemoryDecompressionFeaturesEXT; + +typedef VkPhysicalDeviceMemoryDecompressionFeaturesEXT VkPhysicalDeviceMemoryDecompressionFeaturesNV; + +typedef struct VkPhysicalDeviceMemoryDecompressionPropertiesEXT { + VkStructureType sType; + void* pNext; + VkMemoryDecompressionMethodFlagsEXT decompressionMethods; + uint64_t maxDecompressionIndirectCount; +} VkPhysicalDeviceMemoryDecompressionPropertiesEXT; + +typedef VkPhysicalDeviceMemoryDecompressionPropertiesEXT VkPhysicalDeviceMemoryDecompressionPropertiesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdDecompressMemoryNV)(VkCommandBuffer commandBuffer, uint32_t decompressRegionCount, const VkDecompressMemoryRegionNV* pDecompressMemoryRegions); +typedef void (VKAPI_PTR *PFN_vkCmdDecompressMemoryIndirectCountNV)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectCommandsAddress, VkDeviceAddress indirectCommandsCountAddress, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryNV( + VkCommandBuffer commandBuffer, + uint32_t decompressRegionCount, + const VkDecompressMemoryRegionNV* pDecompressMemoryRegions); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryIndirectCountNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t stride); +#endif +#endif + + +// VK_NV_device_generated_commands_compute is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_generated_commands_compute 1 +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION 2 +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME "VK_NV_device_generated_commands_compute" +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 deviceGeneratedCompute; + VkBool32 deviceGeneratedComputePipelines; + VkBool32 deviceGeneratedComputeCaptureReplay; +} VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + +typedef struct VkComputePipelineIndirectBufferInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceAddress deviceAddress; + VkDeviceSize size; + VkDeviceAddress pipelineDeviceAddressCaptureReplay; +} VkComputePipelineIndirectBufferInfoNV; + +typedef struct VkPipelineIndirectDeviceAddressInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; +} VkPipelineIndirectDeviceAddressInfoNV; + +typedef struct VkBindPipelineIndirectCommandNV { + VkDeviceAddress pipelineAddress; +} VkBindPipelineIndirectCommandNV; + +typedef void (VKAPI_PTR *PFN_vkGetPipelineIndirectMemoryRequirementsNV)(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdUpdatePipelineIndirectBufferNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetPipelineIndirectDeviceAddressNV)(VkDevice device, const VkPipelineIndirectDeviceAddressInfoNV* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPipelineIndirectMemoryRequirementsNV( + VkDevice device, + const VkComputePipelineCreateInfo* pCreateInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdUpdatePipelineIndirectBufferNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV( + VkDevice device, + const VkPipelineIndirectDeviceAddressInfoNV* pInfo); +#endif +#endif + + +// VK_NV_ray_tracing_linear_swept_spheres is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_linear_swept_spheres 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_EXTENSION_NAME "VK_NV_ray_tracing_linear_swept_spheres" + +typedef enum VkRayTracingLssIndexingModeNV { + VK_RAY_TRACING_LSS_INDEXING_MODE_LIST_NV = 0, + VK_RAY_TRACING_LSS_INDEXING_MODE_SUCCESSIVE_NV = 1, + VK_RAY_TRACING_LSS_INDEXING_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssIndexingModeNV; + +typedef enum VkRayTracingLssPrimitiveEndCapsModeNV { + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_NONE_NV = 0, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_CHAINED_NV = 1, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssPrimitiveEndCapsModeNV; +typedef struct VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 spheres; + VkBool32 linearSweptSpheres; +} VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + +typedef struct VkAccelerationStructureGeometryLinearSweptSpheresDataNV { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; + VkRayTracingLssIndexingModeNV indexingMode; + VkRayTracingLssPrimitiveEndCapsModeNV endCapsMode; +} VkAccelerationStructureGeometryLinearSweptSpheresDataNV; + +typedef struct VkAccelerationStructureGeometrySpheresDataNV { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; +} VkAccelerationStructureGeometrySpheresDataNV; + + + +// VK_NV_linear_color_attachment is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_linear_color_attachment 1 +#define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1 +#define VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME "VK_NV_linear_color_attachment" +typedef struct VkPhysicalDeviceLinearColorAttachmentFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 linearColorAttachment; +} VkPhysicalDeviceLinearColorAttachmentFeaturesNV; + + + +// VK_GOOGLE_surfaceless_query is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_surfaceless_query 1 +#define VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION 2 +#define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query" + + +// VK_EXT_image_compression_control_swapchain is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_compression_control_swapchain 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain" +typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 imageCompressionControlSwapchain; +} VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + + + +// VK_QCOM_image_processing is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_image_processing 1 +#define VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION 1 +#define VK_QCOM_IMAGE_PROCESSING_EXTENSION_NAME "VK_QCOM_image_processing" +typedef struct VkImageViewSampleWeightCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkOffset2D filterCenter; + VkExtent2D filterSize; + uint32_t numPhases; +} VkImageViewSampleWeightCreateInfoQCOM; + +typedef struct VkPhysicalDeviceImageProcessingFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 textureSampleWeighted; + VkBool32 textureBoxFilter; + VkBool32 textureBlockMatch; +} VkPhysicalDeviceImageProcessingFeaturesQCOM; + +typedef struct VkPhysicalDeviceImageProcessingPropertiesQCOM { + VkStructureType sType; + void* pNext; + uint32_t maxWeightFilterPhases; + VkExtent2D maxWeightFilterDimension; + VkExtent2D maxBlockMatchRegion; + VkExtent2D maxBoxFilterBlockSize; +} VkPhysicalDeviceImageProcessingPropertiesQCOM; + + + +// VK_EXT_nested_command_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_nested_command_buffer 1 +#define VK_EXT_NESTED_COMMAND_BUFFER_SPEC_VERSION 1 +#define VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME "VK_EXT_nested_command_buffer" +typedef struct VkPhysicalDeviceNestedCommandBufferFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 nestedCommandBuffer; + VkBool32 nestedCommandBufferRendering; + VkBool32 nestedCommandBufferSimultaneousUse; +} VkPhysicalDeviceNestedCommandBufferFeaturesEXT; + +typedef struct VkPhysicalDeviceNestedCommandBufferPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxCommandBufferNestingLevel; +} VkPhysicalDeviceNestedCommandBufferPropertiesEXT; + + + +// VK_EXT_external_memory_acquire_unmodified is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_acquire_unmodified 1 +#define VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME "VK_EXT_external_memory_acquire_unmodified" +typedef struct VkExternalMemoryAcquireUnmodifiedEXT { + VkStructureType sType; + const void* pNext; + VkBool32 acquireUnmodifiedMemory; +} VkExternalMemoryAcquireUnmodifiedEXT; + + + +// VK_EXT_extended_dynamic_state3 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_extended_dynamic_state3 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_3_SPEC_VERSION 2 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME "VK_EXT_extended_dynamic_state3" +typedef struct VkPhysicalDeviceExtendedDynamicState3FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 extendedDynamicState3TessellationDomainOrigin; + VkBool32 extendedDynamicState3DepthClampEnable; + VkBool32 extendedDynamicState3PolygonMode; + VkBool32 extendedDynamicState3RasterizationSamples; + VkBool32 extendedDynamicState3SampleMask; + VkBool32 extendedDynamicState3AlphaToCoverageEnable; + VkBool32 extendedDynamicState3AlphaToOneEnable; + VkBool32 extendedDynamicState3LogicOpEnable; + VkBool32 extendedDynamicState3ColorBlendEnable; + VkBool32 extendedDynamicState3ColorBlendEquation; + VkBool32 extendedDynamicState3ColorWriteMask; + VkBool32 extendedDynamicState3RasterizationStream; + VkBool32 extendedDynamicState3ConservativeRasterizationMode; + VkBool32 extendedDynamicState3ExtraPrimitiveOverestimationSize; + VkBool32 extendedDynamicState3DepthClipEnable; + VkBool32 extendedDynamicState3SampleLocationsEnable; + VkBool32 extendedDynamicState3ColorBlendAdvanced; + VkBool32 extendedDynamicState3ProvokingVertexMode; + VkBool32 extendedDynamicState3LineRasterizationMode; + VkBool32 extendedDynamicState3LineStippleEnable; + VkBool32 extendedDynamicState3DepthClipNegativeOneToOne; + VkBool32 extendedDynamicState3ViewportWScalingEnable; + VkBool32 extendedDynamicState3ViewportSwizzle; + VkBool32 extendedDynamicState3CoverageToColorEnable; + VkBool32 extendedDynamicState3CoverageToColorLocation; + VkBool32 extendedDynamicState3CoverageModulationMode; + VkBool32 extendedDynamicState3CoverageModulationTableEnable; + VkBool32 extendedDynamicState3CoverageModulationTable; + VkBool32 extendedDynamicState3CoverageReductionMode; + VkBool32 extendedDynamicState3RepresentativeFragmentTestEnable; + VkBool32 extendedDynamicState3ShadingRateImageEnable; +} VkPhysicalDeviceExtendedDynamicState3FeaturesEXT; + +typedef struct VkPhysicalDeviceExtendedDynamicState3PropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 dynamicPrimitiveTopologyUnrestricted; +} VkPhysicalDeviceExtendedDynamicState3PropertiesEXT; + +typedef struct VkColorBlendEquationEXT { + VkBlendFactor srcColorBlendFactor; + VkBlendFactor dstColorBlendFactor; + VkBlendOp colorBlendOp; + VkBlendFactor srcAlphaBlendFactor; + VkBlendFactor dstAlphaBlendFactor; + VkBlendOp alphaBlendOp; +} VkColorBlendEquationEXT; + +typedef struct VkColorBlendAdvancedEXT { + VkBlendOp advancedBlendOp; + VkBool32 srcPremultiplied; + VkBool32 dstPremultiplied; + VkBlendOverlapEXT blendOverlap; + VkBool32 clampResults; +} VkColorBlendAdvancedEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClampEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetPolygonModeEXT)(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizationSamplesEXT)(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples); +typedef void (VKAPI_PTR *PFN_vkCmdSetSampleMaskEXT)(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask* pSampleMask); +typedef void (VKAPI_PTR *PFN_vkCmdSetAlphaToCoverageEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetAlphaToOneEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorBlendEnableEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorBlendEquationEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorWriteMaskEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks); +typedef void (VKAPI_PTR *PFN_vkCmdSetTessellationDomainOriginEXT)(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizationStreamEXT)(VkCommandBuffer commandBuffer, uint32_t rasterizationStream); +typedef void (VKAPI_PTR *PFN_vkCmdSetConservativeRasterizationModeEXT)(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClipEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorBlendAdvancedEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced); +typedef void (VKAPI_PTR *PFN_vkCmdSetProvokingVertexModeEXT)(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetLineRasterizationModeEXT)(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClipNegativeOneToOneEXT)(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingEnableNV)(VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportSwizzleNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportSwizzleNV* pViewportSwizzles); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageToColorEnableNV)(VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageToColorLocationNV)(VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageModulationModeNV)(VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageModulationTableEnableNV)(VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageModulationTableNV)(VkCommandBuffer commandBuffer, uint32_t coverageModulationTableCount, const float* pCoverageModulationTable); +typedef void (VKAPI_PTR *PFN_vkCmdSetShadingRateImageEnableNV)(VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetRepresentativeFragmentTestEnableNV)(VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageReductionModeNV)(VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClampEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPolygonModeEXT( + VkCommandBuffer commandBuffer, + VkPolygonMode polygonMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationSamplesEXT( + VkCommandBuffer commandBuffer, + VkSampleCountFlagBits rasterizationSamples); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleMaskEXT( + VkCommandBuffer commandBuffer, + VkSampleCountFlagBits samples, + const VkSampleMask* pSampleMask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToCoverageEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToCoverageEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToOneEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToOneEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 logicOpEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEnableEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkBool32* pColorBlendEnables); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEquationEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendEquationEXT* pColorBlendEquations); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteMaskEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorComponentFlags* pColorWriteMasks); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetTessellationDomainOriginEXT( + VkCommandBuffer commandBuffer, + VkTessellationDomainOrigin domainOrigin); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationStreamEXT( + VkCommandBuffer commandBuffer, + uint32_t rasterizationStream); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetConservativeRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkConservativeRasterizationModeEXT conservativeRasterizationMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetExtraPrimitiveOverestimationSizeEXT( + VkCommandBuffer commandBuffer, + float extraPrimitiveOverestimationSize); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClipEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 sampleLocationsEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendAdvancedEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendAdvancedEXT* pColorBlendAdvanced); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetProvokingVertexModeEXT( + VkCommandBuffer commandBuffer, + VkProvokingVertexModeEXT provokingVertexMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkLineRasterizationModeEXT lineRasterizationMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stippledLineEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipNegativeOneToOneEXT( + VkCommandBuffer commandBuffer, + VkBool32 negativeOneToOne); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 viewportWScalingEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportSwizzleNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportSwizzleNV* pViewportSwizzles); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 coverageToColorEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorLocationNV( + VkCommandBuffer commandBuffer, + uint32_t coverageToColorLocation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationModeNV( + VkCommandBuffer commandBuffer, + VkCoverageModulationModeNV coverageModulationMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 coverageModulationTableEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableNV( + VkCommandBuffer commandBuffer, + uint32_t coverageModulationTableCount, + const float* pCoverageModulationTable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetShadingRateImageEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 shadingRateImageEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRepresentativeFragmentTestEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 representativeFragmentTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageReductionModeNV( + VkCommandBuffer commandBuffer, + VkCoverageReductionModeNV coverageReductionMode); +#endif +#endif + + +// VK_EXT_subpass_merge_feedback is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_subpass_merge_feedback 1 +#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 2 +#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback" + +typedef enum VkSubpassMergeStatusEXT { + VK_SUBPASS_MERGE_STATUS_MERGED_EXT = 0, + VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT = 1, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT = 2, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT = 3, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT = 4, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT = 5, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT = 6, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT = 7, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT = 8, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT = 9, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT = 10, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT = 11, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT = 12, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT = 13, + VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSubpassMergeStatusEXT; +typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 subpassMergeFeedback; +} VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + +typedef struct VkRenderPassCreationControlEXT { + VkStructureType sType; + const void* pNext; + VkBool32 disallowMerging; +} VkRenderPassCreationControlEXT; + +typedef struct VkRenderPassCreationFeedbackInfoEXT { + uint32_t postMergeSubpassCount; +} VkRenderPassCreationFeedbackInfoEXT; + +typedef struct VkRenderPassCreationFeedbackCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkRenderPassCreationFeedbackInfoEXT* pRenderPassFeedback; +} VkRenderPassCreationFeedbackCreateInfoEXT; + +typedef struct VkRenderPassSubpassFeedbackInfoEXT { + VkSubpassMergeStatusEXT subpassMergeStatus; + char description[VK_MAX_DESCRIPTION_SIZE]; + uint32_t postMergeIndex; +} VkRenderPassSubpassFeedbackInfoEXT; + +typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkRenderPassSubpassFeedbackInfoEXT* pSubpassFeedback; +} VkRenderPassSubpassFeedbackCreateInfoEXT; + + + +// VK_LUNARG_direct_driver_loading is a preprocessor guard. Do not pass it to API calls. +#define VK_LUNARG_direct_driver_loading 1 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION 1 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME "VK_LUNARG_direct_driver_loading" + +typedef enum VkDirectDriverLoadingModeLUNARG { + VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = 0, + VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = 1, + VK_DIRECT_DRIVER_LOADING_MODE_MAX_ENUM_LUNARG = 0x7FFFFFFF +} VkDirectDriverLoadingModeLUNARG; +typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddrLUNARG)( + VkInstance instance, + const char* pName); + +typedef struct VkDirectDriverLoadingInfoLUNARG { + VkStructureType sType; + void* pNext; + VkDirectDriverLoadingFlagsLUNARG flags; + PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr; +} VkDirectDriverLoadingInfoLUNARG; + +typedef struct VkDirectDriverLoadingListLUNARG { + VkStructureType sType; + const void* pNext; + VkDirectDriverLoadingModeLUNARG mode; + uint32_t driverCount; + const VkDirectDriverLoadingInfoLUNARG* pDrivers; +} VkDirectDriverLoadingListLUNARG; + + + +// VK_ARM_tensors is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_tensors 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorViewARM) +#define VK_ARM_TENSORS_SPEC_VERSION 1 +#define VK_ARM_TENSORS_EXTENSION_NAME "VK_ARM_tensors" + +typedef enum VkTensorTilingARM { + VK_TENSOR_TILING_OPTIMAL_ARM = 0, + VK_TENSOR_TILING_LINEAR_ARM = 1, + VK_TENSOR_TILING_MAX_ENUM_ARM = 0x7FFFFFFF +} VkTensorTilingARM; +typedef VkFlags64 VkTensorCreateFlagsARM; + +// Flag bits for VkTensorCreateFlagBitsARM +typedef VkFlags64 VkTensorCreateFlagBitsARM; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM = 0x00000001ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_PROTECTED_BIT_ARM = 0x00000002ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_ARM = 0x00000008ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 0x00000004ULL; + +typedef VkFlags64 VkTensorUsageFlagsARM; + +// Flag bits for VkTensorUsageFlagBitsARM +typedef VkFlags64 VkTensorUsageFlagBitsARM; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_SHADER_BIT_ARM = 0x00000002ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARM = 0x00000004ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARM = 0x00000008ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM = 0x00000010ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM = 0x00000020ULL; + +typedef struct VkTensorDescriptionARM { + VkStructureType sType; + const void* pNext; + VkTensorTilingARM tiling; + VkFormat format; + uint32_t dimensionCount; + const int64_t* pDimensions; + const int64_t* pStrides; + VkTensorUsageFlagsARM usage; +} VkTensorDescriptionARM; + +typedef struct VkTensorCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM* pDescription; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; +} VkTensorCreateInfoARM; + +typedef struct VkTensorMemoryRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkTensorMemoryRequirementsInfoARM; + +typedef struct VkBindTensorMemoryInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindTensorMemoryInfoARM; + +typedef struct VkWriteDescriptorSetTensorARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorViewCount; + const VkTensorViewARM* pTensorViews; +} VkWriteDescriptorSetTensorARM; + +typedef struct VkTensorFormatPropertiesARM { + VkStructureType sType; + void* pNext; + VkFormatFeatureFlags2 optimalTilingTensorFeatures; + VkFormatFeatureFlags2 linearTilingTensorFeatures; +} VkTensorFormatPropertiesARM; + +typedef struct VkPhysicalDeviceTensorPropertiesARM { + VkStructureType sType; + void* pNext; + uint32_t maxTensorDimensionCount; + uint64_t maxTensorElements; + uint64_t maxPerDimensionTensorElements; + int64_t maxTensorStride; + uint64_t maxTensorSize; + uint32_t maxTensorShaderAccessArrayLength; + uint32_t maxTensorShaderAccessSize; + uint32_t maxDescriptorSetStorageTensors; + uint32_t maxPerStageDescriptorSetStorageTensors; + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors; + VkBool32 shaderStorageTensorArrayNonUniformIndexingNative; + VkShaderStageFlags shaderTensorSupportedStages; +} VkPhysicalDeviceTensorPropertiesARM; + +typedef struct VkTensorMemoryBarrierARM { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkTensorARM tensor; +} VkTensorMemoryBarrierARM; + +typedef struct VkTensorDependencyInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorMemoryBarrierCount; + const VkTensorMemoryBarrierARM* pTensorMemoryBarriers; +} VkTensorDependencyInfoARM; + +typedef struct VkPhysicalDeviceTensorFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 tensorNonPacked; + VkBool32 shaderTensorAccess; + VkBool32 shaderStorageTensorArrayDynamicIndexing; + VkBool32 shaderStorageTensorArrayNonUniformIndexing; + VkBool32 descriptorBindingStorageTensorUpdateAfterBind; + VkBool32 tensors; +} VkPhysicalDeviceTensorFeaturesARM; + +typedef struct VkDeviceTensorMemoryRequirementsARM { + VkStructureType sType; + const void* pNext; + const VkTensorCreateInfoARM* pCreateInfo; +} VkDeviceTensorMemoryRequirementsARM; + +typedef struct VkTensorCopyARM { + VkStructureType sType; + const void* pNext; + uint32_t dimensionCount; + const uint64_t* pSrcOffset; + const uint64_t* pDstOffset; + const uint64_t* pExtent; +} VkTensorCopyARM; + +typedef struct VkCopyTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM srcTensor; + VkTensorARM dstTensor; + uint32_t regionCount; + const VkTensorCopyARM* pRegions; +} VkCopyTensorInfoARM; + +typedef struct VkMemoryDedicatedAllocateInfoTensorARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkMemoryDedicatedAllocateInfoTensorARM; + +typedef struct VkPhysicalDeviceExternalTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM* pDescription; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalTensorInfoARM; + +typedef struct VkExternalTensorPropertiesARM { + VkStructureType sType; + const void* pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalTensorPropertiesARM; + +typedef struct VkExternalMemoryTensorCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryTensorCreateInfoARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 descriptorBufferTensorDescriptors; +} VkPhysicalDeviceDescriptorBufferTensorFeaturesARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorPropertiesARM { + VkStructureType sType; + void* pNext; + size_t tensorCaptureReplayDescriptorDataSize; + size_t tensorViewCaptureReplayDescriptorDataSize; + size_t tensorDescriptorSize; +} VkPhysicalDeviceDescriptorBufferTensorPropertiesARM; + +typedef struct VkDescriptorGetTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewARM tensorView; +} VkDescriptorGetTensorInfoARM; + +typedef struct VkTensorCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkTensorCaptureDescriptorDataInfoARM; + +typedef struct VkTensorViewCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewARM tensorView; +} VkTensorViewCaptureDescriptorDataInfoARM; + +typedef struct VkFrameBoundaryTensorsARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorCount; + const VkTensorARM* pTensors; +} VkFrameBoundaryTensorsARM; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateTensorARM)(VkDevice device, const VkTensorCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorARM* pTensor); +typedef void (VKAPI_PTR *PFN_vkDestroyTensorARM)(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateTensorViewARM)(VkDevice device, const VkTensorViewCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorViewARM* pView); +typedef void (VKAPI_PTR *PFN_vkDestroyTensorViewARM)(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetTensorMemoryRequirementsARM)(VkDevice device, const VkTensorMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindTensorMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkGetDeviceTensorMemoryRequirementsARM)(VkDevice device, const VkDeviceTensorMemoryRequirementsARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdCopyTensorARM)(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM* pCopyTensorInfo); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, VkExternalTensorPropertiesARM* pExternalTensorProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorCaptureDescriptorDataInfoARM* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateTensorARM( + VkDevice device, + const VkTensorCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorARM* pTensor); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyTensorARM( + VkDevice device, + VkTensorARM tensor, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateTensorViewARM( + VkDevice device, + const VkTensorViewCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorViewARM* pView); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyTensorViewARM( + VkDevice device, + VkTensorViewARM tensorView, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetTensorMemoryRequirementsARM( + VkDevice device, + const VkTensorMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindTensorMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindTensorMemoryInfoARM* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceTensorMemoryRequirementsARM( + VkDevice device, + const VkDeviceTensorMemoryRequirementsARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyTensorARM( + VkCommandBuffer commandBuffer, + const VkCopyTensorInfoARM* pCopyTensorInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalTensorPropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, + VkExternalTensorPropertiesARM* pExternalTensorProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorCaptureDescriptorDataInfoARM* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorViewOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, + void* pData); +#endif +#endif + + +// VK_EXT_shader_module_identifier is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_module_identifier 1 +#define VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT 32U +#define VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION 1 +#define VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME "VK_EXT_shader_module_identifier" +typedef struct VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderModuleIdentifier; +} VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT { + VkStructureType sType; + void* pNext; + uint8_t shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE]; +} VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT; + +typedef struct VkPipelineShaderStageModuleIdentifierCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t identifierSize; + const uint8_t* pIdentifier; +} VkPipelineShaderStageModuleIdentifierCreateInfoEXT; + +typedef struct VkShaderModuleIdentifierEXT { + VkStructureType sType; + void* pNext; + uint32_t identifierSize; + uint8_t identifier[VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT]; +} VkShaderModuleIdentifierEXT; + +typedef void (VKAPI_PTR *PFN_vkGetShaderModuleIdentifierEXT)(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier); +typedef void (VKAPI_PTR *PFN_vkGetShaderModuleCreateInfoIdentifierEXT)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT( + VkDevice device, + VkShaderModule shaderModule, + VkShaderModuleIdentifierEXT* pIdentifier); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + VkShaderModuleIdentifierEXT* pIdentifier); +#endif +#endif + + +// VK_EXT_rasterization_order_attachment_access is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_rasterization_order_attachment_access 1 +#define VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 +#define VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_EXT_rasterization_order_attachment_access" + + +// VK_NV_optical_flow is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_optical_flow 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkOpticalFlowSessionNV) +#define VK_NV_OPTICAL_FLOW_SPEC_VERSION 1 +#define VK_NV_OPTICAL_FLOW_EXTENSION_NAME "VK_NV_optical_flow" + +typedef enum VkOpticalFlowPerformanceLevelNV { + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV = 1, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV = 2, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV = 3, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowPerformanceLevelNV; + +typedef enum VkOpticalFlowSessionBindingPointNV { + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV = 1, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV = 2, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV = 3, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV = 4, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV = 5, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV = 6, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV = 7, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV = 8, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowSessionBindingPointNV; + +typedef enum VkOpticalFlowGridSizeFlagBitsNV { + VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV = 0x00000002, + VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV = 0x00000004, + VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV = 0x00000008, + VK_OPTICAL_FLOW_GRID_SIZE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowGridSizeFlagBitsNV; +typedef VkFlags VkOpticalFlowGridSizeFlagsNV; + +typedef enum VkOpticalFlowUsageFlagBitsNV { + VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV = 0x00000002, + VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV = 0x00000004, + VK_OPTICAL_FLOW_USAGE_COST_BIT_NV = 0x00000008, + VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV = 0x00000010, + VK_OPTICAL_FLOW_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowUsageFlagBitsNV; +typedef VkFlags VkOpticalFlowUsageFlagsNV; + +typedef enum VkOpticalFlowSessionCreateFlagBitsNV { + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV = 0x00000002, + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV = 0x00000004, + VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV = 0x00000008, + VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV = 0x00000010, + VK_OPTICAL_FLOW_SESSION_CREATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowSessionCreateFlagBitsNV; +typedef VkFlags VkOpticalFlowSessionCreateFlagsNV; + +typedef enum VkOpticalFlowExecuteFlagBitsNV { + VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_EXECUTE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowExecuteFlagBitsNV; +typedef VkFlags VkOpticalFlowExecuteFlagsNV; +typedef struct VkPhysicalDeviceOpticalFlowFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 opticalFlow; +} VkPhysicalDeviceOpticalFlowFeaturesNV; + +typedef struct VkPhysicalDeviceOpticalFlowPropertiesNV { + VkStructureType sType; + void* pNext; + VkOpticalFlowGridSizeFlagsNV supportedOutputGridSizes; + VkOpticalFlowGridSizeFlagsNV supportedHintGridSizes; + VkBool32 hintSupported; + VkBool32 costSupported; + VkBool32 bidirectionalFlowSupported; + VkBool32 globalFlowSupported; + uint32_t minWidth; + uint32_t minHeight; + uint32_t maxWidth; + uint32_t maxHeight; + uint32_t maxNumRegionsOfInterest; +} VkPhysicalDeviceOpticalFlowPropertiesNV; + +typedef struct VkOpticalFlowImageFormatInfoNV { + VkStructureType sType; + const void* pNext; + VkOpticalFlowUsageFlagsNV usage; +} VkOpticalFlowImageFormatInfoNV; + +typedef struct VkOpticalFlowImageFormatPropertiesNV { + VkStructureType sType; + void* pNext; + VkFormat format; +} VkOpticalFlowImageFormatPropertiesNV; + +typedef struct VkOpticalFlowSessionCreateInfoNV { + VkStructureType sType; + void* pNext; + uint32_t width; + uint32_t height; + VkFormat imageFormat; + VkFormat flowVectorFormat; + VkFormat costFormat; + VkOpticalFlowGridSizeFlagsNV outputGridSize; + VkOpticalFlowGridSizeFlagsNV hintGridSize; + VkOpticalFlowPerformanceLevelNV performanceLevel; + VkOpticalFlowSessionCreateFlagsNV flags; +} VkOpticalFlowSessionCreateInfoNV; + +typedef struct VkOpticalFlowSessionCreatePrivateDataInfoNV { + VkStructureType sType; + void* pNext; + uint32_t id; + uint32_t size; + const void* pPrivateData; +} VkOpticalFlowSessionCreatePrivateDataInfoNV; + +typedef struct VkOpticalFlowExecuteInfoNV { + VkStructureType sType; + void* pNext; + VkOpticalFlowExecuteFlagsNV flags; + uint32_t regionCount; + const VkRect2D* pRegions; +} VkOpticalFlowExecuteInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV)(VkPhysicalDevice physicalDevice, const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, uint32_t* pFormatCount, VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreateOpticalFlowSessionNV)(VkDevice device, const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkOpticalFlowSessionNV* pSession); +typedef void (VKAPI_PTR *PFN_vkDestroyOpticalFlowSessionNV)(VkDevice device, VkOpticalFlowSessionNV session, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkBindOpticalFlowSessionImageNV)(VkDevice device, VkOpticalFlowSessionNV session, VkOpticalFlowSessionBindingPointNV bindingPoint, VkImageView view, VkImageLayout layout); +typedef void (VKAPI_PTR *PFN_vkCmdOpticalFlowExecuteNV)(VkCommandBuffer commandBuffer, VkOpticalFlowSessionNV session, const VkOpticalFlowExecuteInfoNV* pExecuteInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + VkPhysicalDevice physicalDevice, + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, + uint32_t* pFormatCount, + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateOpticalFlowSessionNV( + VkDevice device, + const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkOpticalFlowSessionNV* pSession); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyOpticalFlowSessionNV( + VkDevice device, + VkOpticalFlowSessionNV session, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindOpticalFlowSessionImageNV( + VkDevice device, + VkOpticalFlowSessionNV session, + VkOpticalFlowSessionBindingPointNV bindingPoint, + VkImageView view, + VkImageLayout layout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdOpticalFlowExecuteNV( + VkCommandBuffer commandBuffer, + VkOpticalFlowSessionNV session, + const VkOpticalFlowExecuteInfoNV* pExecuteInfo); +#endif +#endif + + +// VK_EXT_legacy_dithering is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_legacy_dithering 1 +#define VK_EXT_LEGACY_DITHERING_SPEC_VERSION 2 +#define VK_EXT_LEGACY_DITHERING_EXTENSION_NAME "VK_EXT_legacy_dithering" +typedef struct VkPhysicalDeviceLegacyDitheringFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 legacyDithering; +} VkPhysicalDeviceLegacyDitheringFeaturesEXT; + + + +// VK_EXT_pipeline_protected_access is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_protected_access 1 +#define VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME "VK_EXT_pipeline_protected_access" +typedef VkPhysicalDevicePipelineProtectedAccessFeatures VkPhysicalDevicePipelineProtectedAccessFeaturesEXT; + + + +// VK_AMD_anti_lag is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_anti_lag 1 +#define VK_AMD_ANTI_LAG_SPEC_VERSION 1 +#define VK_AMD_ANTI_LAG_EXTENSION_NAME "VK_AMD_anti_lag" + +typedef enum VkAntiLagModeAMD { + VK_ANTI_LAG_MODE_DRIVER_CONTROL_AMD = 0, + VK_ANTI_LAG_MODE_ON_AMD = 1, + VK_ANTI_LAG_MODE_OFF_AMD = 2, + VK_ANTI_LAG_MODE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkAntiLagModeAMD; + +typedef enum VkAntiLagStageAMD { + VK_ANTI_LAG_STAGE_INPUT_AMD = 0, + VK_ANTI_LAG_STAGE_PRESENT_AMD = 1, + VK_ANTI_LAG_STAGE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkAntiLagStageAMD; +typedef struct VkPhysicalDeviceAntiLagFeaturesAMD { + VkStructureType sType; + void* pNext; + VkBool32 antiLag; +} VkPhysicalDeviceAntiLagFeaturesAMD; + +typedef struct VkAntiLagPresentationInfoAMD { + VkStructureType sType; + void* pNext; + VkAntiLagStageAMD stage; + uint64_t frameIndex; +} VkAntiLagPresentationInfoAMD; + +typedef struct VkAntiLagDataAMD { + VkStructureType sType; + const void* pNext; + VkAntiLagModeAMD mode; + uint32_t maxFPS; + const VkAntiLagPresentationInfoAMD* pPresentationInfo; +} VkAntiLagDataAMD; + +typedef void (VKAPI_PTR *PFN_vkAntiLagUpdateAMD)(VkDevice device, const VkAntiLagDataAMD* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkAntiLagUpdateAMD( + VkDevice device, + const VkAntiLagDataAMD* pData); +#endif +#endif + + +// VK_EXT_shader_object is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_object 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderEXT) +#define VK_EXT_SHADER_OBJECT_SPEC_VERSION 1 +#define VK_EXT_SHADER_OBJECT_EXTENSION_NAME "VK_EXT_shader_object" + +typedef enum VkShaderCodeTypeEXT { + VK_SHADER_CODE_TYPE_BINARY_EXT = 0, + VK_SHADER_CODE_TYPE_SPIRV_EXT = 1, + VK_SHADER_CODE_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkShaderCodeTypeEXT; + +typedef enum VkDepthClampModeEXT { + VK_DEPTH_CLAMP_MODE_VIEWPORT_RANGE_EXT = 0, + VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT = 1, + VK_DEPTH_CLAMP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDepthClampModeEXT; + +typedef enum VkShaderCreateFlagBitsEXT { + VK_SHADER_CREATE_LINK_STAGE_BIT_EXT = 0x00000001, + VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT = 0x00000400, + VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000002, + VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000004, + VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT = 0x00000008, + VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT = 0x00000010, + VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT = 0x00000020, + VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00000040, + VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT = 0x00000080, + VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT = 0x00008000, + VK_SHADER_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkShaderCreateFlagBitsEXT; +typedef VkFlags VkShaderCreateFlagsEXT; +typedef struct VkPhysicalDeviceShaderObjectFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderObject; +} VkPhysicalDeviceShaderObjectFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderObjectPropertiesEXT { + VkStructureType sType; + void* pNext; + uint8_t shaderBinaryUUID[VK_UUID_SIZE]; + uint32_t shaderBinaryVersion; +} VkPhysicalDeviceShaderObjectPropertiesEXT; + +typedef struct VkShaderCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderCreateFlagsEXT flags; + VkShaderStageFlagBits stage; + VkShaderStageFlags nextStage; + VkShaderCodeTypeEXT codeType; + size_t codeSize; + const void* pCode; + const char* pName; + uint32_t setLayoutCount; + const VkDescriptorSetLayout* pSetLayouts; + uint32_t pushConstantRangeCount; + const VkPushConstantRange* pPushConstantRanges; + const VkSpecializationInfo* pSpecializationInfo; +} VkShaderCreateInfoEXT; + +typedef VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkShaderRequiredSubgroupSizeCreateInfoEXT; + +typedef struct VkDepthClampRangeEXT { + float minDepthClamp; + float maxDepthClamp; +} VkDepthClampRangeEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateShadersEXT)(VkDevice device, uint32_t createInfoCount, const VkShaderCreateInfoEXT* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkShaderEXT* pShaders); +typedef void (VKAPI_PTR *PFN_vkDestroyShaderEXT)(VkDevice device, VkShaderEXT shader, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetShaderBinaryDataEXT)(VkDevice device, VkShaderEXT shader, size_t* pDataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdBindShadersEXT)(VkCommandBuffer commandBuffer, uint32_t stageCount, const VkShaderStageFlagBits* pStages, const VkShaderEXT* pShaders); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClampRangeEXT)(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateShadersEXT( + VkDevice device, + uint32_t createInfoCount, + const VkShaderCreateInfoEXT* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkShaderEXT* pShaders); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyShaderEXT( + VkDevice device, + VkShaderEXT shader, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderBinaryDataEXT( + VkDevice device, + VkShaderEXT shader, + size_t* pDataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindShadersEXT( + VkCommandBuffer commandBuffer, + uint32_t stageCount, + const VkShaderStageFlagBits* pStages, + const VkShaderEXT* pShaders); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampRangeEXT( + VkCommandBuffer commandBuffer, + VkDepthClampModeEXT depthClampMode, + const VkDepthClampRangeEXT* pDepthClampRange); +#endif +#endif + + +// VK_QCOM_tile_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_properties 1 +#define VK_QCOM_TILE_PROPERTIES_SPEC_VERSION 1 +#define VK_QCOM_TILE_PROPERTIES_EXTENSION_NAME "VK_QCOM_tile_properties" +typedef struct VkPhysicalDeviceTilePropertiesFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileProperties; +} VkPhysicalDeviceTilePropertiesFeaturesQCOM; + +typedef struct VkTilePropertiesQCOM { + VkStructureType sType; + void* pNext; + VkExtent3D tileSize; + VkExtent2D apronSize; + VkOffset2D origin; +} VkTilePropertiesQCOM; + +typedef VkResult (VKAPI_PTR *PFN_vkGetFramebufferTilePropertiesQCOM)(VkDevice device, VkFramebuffer framebuffer, uint32_t* pPropertiesCount, VkTilePropertiesQCOM* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDynamicRenderingTilePropertiesQCOM)(VkDevice device, const VkRenderingInfo* pRenderingInfo, VkTilePropertiesQCOM* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM( + VkDevice device, + VkFramebuffer framebuffer, + uint32_t* pPropertiesCount, + VkTilePropertiesQCOM* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM( + VkDevice device, + const VkRenderingInfo* pRenderingInfo, + VkTilePropertiesQCOM* pProperties); +#endif +#endif + + +// VK_SEC_amigo_profiling is a preprocessor guard. Do not pass it to API calls. +#define VK_SEC_amigo_profiling 1 +#define VK_SEC_AMIGO_PROFILING_SPEC_VERSION 1 +#define VK_SEC_AMIGO_PROFILING_EXTENSION_NAME "VK_SEC_amigo_profiling" +typedef struct VkPhysicalDeviceAmigoProfilingFeaturesSEC { + VkStructureType sType; + void* pNext; + VkBool32 amigoProfiling; +} VkPhysicalDeviceAmigoProfilingFeaturesSEC; + +typedef struct VkAmigoProfilingSubmitInfoSEC { + VkStructureType sType; + const void* pNext; + uint64_t firstDrawTimestamp; + uint64_t swapBufferTimestamp; +} VkAmigoProfilingSubmitInfoSEC; + + + +// VK_QCOM_multiview_per_view_viewports is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_multiview_per_view_viewports 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_SPEC_VERSION 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME "VK_QCOM_multiview_per_view_viewports" +typedef struct VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 multiviewPerViewViewports; +} VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + + + +// VK_NV_ray_tracing_invocation_reorder is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_invocation_reorder 1 +#define VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME "VK_NV_ray_tracing_invocation_reorder" + +typedef enum VkRayTracingInvocationReorderModeEXT { + VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT = 0, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT = 1, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV = VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV = VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkRayTracingInvocationReorderModeEXT; +typedef VkRayTracingInvocationReorderModeEXT VkRayTracingInvocationReorderModeNV; + +typedef struct VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV { + VkStructureType sType; + void* pNext; + VkRayTracingInvocationReorderModeEXT rayTracingInvocationReorderReorderingHint; +} VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV; + +typedef struct VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingInvocationReorder; +} VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV; + + + +// VK_NV_cooperative_vector is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_vector 1 +#define VK_NV_COOPERATIVE_VECTOR_SPEC_VERSION 4 +#define VK_NV_COOPERATIVE_VECTOR_EXTENSION_NAME "VK_NV_cooperative_vector" + +typedef enum VkCooperativeVectorMatrixLayoutNV { + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_ROW_MAJOR_NV = 0, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_COLUMN_MAJOR_NV = 1, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV = 2, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV = 3, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_MAX_ENUM_NV = 0x7FFFFFFF +} VkCooperativeVectorMatrixLayoutNV; +typedef struct VkPhysicalDeviceCooperativeVectorPropertiesNV { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeVectorSupportedStages; + VkBool32 cooperativeVectorTrainingFloat16Accumulation; + VkBool32 cooperativeVectorTrainingFloat32Accumulation; + uint32_t maxCooperativeVectorComponents; +} VkPhysicalDeviceCooperativeVectorPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeVectorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeVector; + VkBool32 cooperativeVectorTraining; +} VkPhysicalDeviceCooperativeVectorFeaturesNV; + +typedef struct VkCooperativeVectorPropertiesNV { + VkStructureType sType; + void* pNext; + VkComponentTypeKHR inputType; + VkComponentTypeKHR inputInterpretation; + VkComponentTypeKHR matrixInterpretation; + VkComponentTypeKHR biasInterpretation; + VkComponentTypeKHR resultType; + VkBool32 transpose; +} VkCooperativeVectorPropertiesNV; + +typedef struct VkConvertCooperativeVectorMatrixInfoNV { + VkStructureType sType; + const void* pNext; + size_t srcSize; + VkDeviceOrHostAddressConstKHR srcData; + size_t* pDstSize; + VkDeviceOrHostAddressKHR dstData; + VkComponentTypeKHR srcComponentType; + VkComponentTypeKHR dstComponentType; + uint32_t numRows; + uint32_t numColumns; + VkCooperativeVectorMatrixLayoutNV srcLayout; + size_t srcStride; + VkCooperativeVectorMatrixLayoutNV dstLayout; + size_t dstStride; +} VkConvertCooperativeVectorMatrixInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeVectorPropertiesNV* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkConvertCooperativeVectorMatrixNV)(VkDevice device, const VkConvertCooperativeVectorMatrixInfoNV* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdConvertCooperativeVectorMatrixNV)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV* pInfos); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeVectorPropertiesNV* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkConvertCooperativeVectorMatrixNV( + VkDevice device, + const VkConvertCooperativeVectorMatrixInfoNV* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdConvertCooperativeVectorMatrixNV( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkConvertCooperativeVectorMatrixInfoNV* pInfos); +#endif +#endif + + +// VK_NV_extended_sparse_address_space is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_extended_sparse_address_space 1 +#define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION 1 +#define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_EXTENSION_NAME "VK_NV_extended_sparse_address_space" +typedef struct VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 extendedSparseAddressSpace; +} VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + +typedef struct VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV { + VkStructureType sType; + void* pNext; + VkDeviceSize extendedSparseAddressSpaceSize; + VkImageUsageFlags extendedSparseImageUsageFlags; + VkBufferUsageFlags extendedSparseBufferUsageFlags; +} VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + + + +// VK_EXT_mutable_descriptor_type is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_mutable_descriptor_type 1 +#define VK_EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 +#define VK_EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_EXT_mutable_descriptor_type" + + +// VK_EXT_legacy_vertex_attributes is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_legacy_vertex_attributes 1 +#define VK_EXT_LEGACY_VERTEX_ATTRIBUTES_SPEC_VERSION 1 +#define VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME "VK_EXT_legacy_vertex_attributes" +typedef struct VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 legacyVertexAttributes; +} VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; + +typedef struct VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 nativeUnalignedPerformance; +} VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; + + + +// VK_EXT_layer_settings is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_layer_settings 1 +#define VK_EXT_LAYER_SETTINGS_SPEC_VERSION 2 +#define VK_EXT_LAYER_SETTINGS_EXTENSION_NAME "VK_EXT_layer_settings" + +typedef enum VkLayerSettingTypeEXT { + VK_LAYER_SETTING_TYPE_BOOL32_EXT = 0, + VK_LAYER_SETTING_TYPE_INT32_EXT = 1, + VK_LAYER_SETTING_TYPE_INT64_EXT = 2, + VK_LAYER_SETTING_TYPE_UINT32_EXT = 3, + VK_LAYER_SETTING_TYPE_UINT64_EXT = 4, + VK_LAYER_SETTING_TYPE_FLOAT32_EXT = 5, + VK_LAYER_SETTING_TYPE_FLOAT64_EXT = 6, + VK_LAYER_SETTING_TYPE_STRING_EXT = 7, + VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkLayerSettingTypeEXT; +typedef struct VkLayerSettingEXT { + const char* pLayerName; + const char* pSettingName; + VkLayerSettingTypeEXT type; + uint32_t valueCount; + const void* pValues; +} VkLayerSettingEXT; + +typedef struct VkLayerSettingsCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t settingCount; + const VkLayerSettingEXT* pSettings; +} VkLayerSettingsCreateInfoEXT; + + + +// VK_ARM_shader_core_builtins is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_shader_core_builtins 1 +#define VK_ARM_SHADER_CORE_BUILTINS_SPEC_VERSION 2 +#define VK_ARM_SHADER_CORE_BUILTINS_EXTENSION_NAME "VK_ARM_shader_core_builtins" +typedef struct VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 shaderCoreBuiltins; +} VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; + +typedef struct VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM { + VkStructureType sType; + void* pNext; + uint64_t shaderCoreMask; + uint32_t shaderCoreCount; + uint32_t shaderWarpsPerCore; +} VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; + + + +// VK_EXT_pipeline_library_group_handles is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_library_group_handles 1 +#define VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_EXTENSION_NAME "VK_EXT_pipeline_library_group_handles" +typedef struct VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 pipelineLibraryGroupHandles; +} VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + + + +// VK_EXT_dynamic_rendering_unused_attachments is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_dynamic_rendering_unused_attachments 1 +#define VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_SPEC_VERSION 1 +#define VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME "VK_EXT_dynamic_rendering_unused_attachments" +typedef struct VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRenderingUnusedAttachments; +} VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + + + +// VK_NV_low_latency2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_low_latency2 1 +#define VK_NV_LOW_LATENCY_2_SPEC_VERSION 2 +#define VK_NV_LOW_LATENCY_2_EXTENSION_NAME "VK_NV_low_latency2" + +typedef enum VkLatencyMarkerNV { + VK_LATENCY_MARKER_SIMULATION_START_NV = 0, + VK_LATENCY_MARKER_SIMULATION_END_NV = 1, + VK_LATENCY_MARKER_RENDERSUBMIT_START_NV = 2, + VK_LATENCY_MARKER_RENDERSUBMIT_END_NV = 3, + VK_LATENCY_MARKER_PRESENT_START_NV = 4, + VK_LATENCY_MARKER_PRESENT_END_NV = 5, + VK_LATENCY_MARKER_INPUT_SAMPLE_NV = 6, + VK_LATENCY_MARKER_TRIGGER_FLASH_NV = 7, + VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_START_NV = 8, + VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_END_NV = 9, + VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_START_NV = 10, + VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_END_NV = 11, + VK_LATENCY_MARKER_MAX_ENUM_NV = 0x7FFFFFFF +} VkLatencyMarkerNV; + +typedef enum VkOutOfBandQueueTypeNV { + VK_OUT_OF_BAND_QUEUE_TYPE_RENDER_NV = 0, + VK_OUT_OF_BAND_QUEUE_TYPE_PRESENT_NV = 1, + VK_OUT_OF_BAND_QUEUE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkOutOfBandQueueTypeNV; +typedef struct VkLatencySleepModeInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 lowLatencyMode; + VkBool32 lowLatencyBoost; + uint32_t minimumIntervalUs; +} VkLatencySleepModeInfoNV; + +typedef struct VkLatencySleepInfoNV { + VkStructureType sType; + const void* pNext; + VkSemaphore signalSemaphore; + uint64_t value; +} VkLatencySleepInfoNV; + +typedef struct VkSetLatencyMarkerInfoNV { + VkStructureType sType; + const void* pNext; + uint64_t presentID; + VkLatencyMarkerNV marker; +} VkSetLatencyMarkerInfoNV; + +typedef struct VkLatencyTimingsFrameReportNV { + VkStructureType sType; + void* pNext; + uint64_t presentID; + uint64_t inputSampleTimeUs; + uint64_t simStartTimeUs; + uint64_t simEndTimeUs; + uint64_t renderSubmitStartTimeUs; + uint64_t renderSubmitEndTimeUs; + uint64_t presentStartTimeUs; + uint64_t presentEndTimeUs; + uint64_t driverStartTimeUs; + uint64_t driverEndTimeUs; + uint64_t osRenderQueueStartTimeUs; + uint64_t osRenderQueueEndTimeUs; + uint64_t gpuRenderStartTimeUs; + uint64_t gpuRenderEndTimeUs; +} VkLatencyTimingsFrameReportNV; + +typedef struct VkGetLatencyMarkerInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t timingCount; + VkLatencyTimingsFrameReportNV* pTimings; +} VkGetLatencyMarkerInfoNV; + +typedef struct VkLatencySubmissionPresentIdNV { + VkStructureType sType; + const void* pNext; + uint64_t presentID; +} VkLatencySubmissionPresentIdNV; + +typedef struct VkSwapchainLatencyCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 latencyModeEnable; +} VkSwapchainLatencyCreateInfoNV; + +typedef struct VkOutOfBandQueueTypeInfoNV { + VkStructureType sType; + const void* pNext; + VkOutOfBandQueueTypeNV queueType; +} VkOutOfBandQueueTypeInfoNV; + +typedef struct VkLatencySurfaceCapabilitiesNV { + VkStructureType sType; + const void* pNext; + uint32_t presentModeCount; + VkPresentModeKHR* pPresentModes; +} VkLatencySurfaceCapabilitiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkSetLatencySleepModeNV)(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepModeInfoNV* pSleepModeInfo); +typedef VkResult (VKAPI_PTR *PFN_vkLatencySleepNV)(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepInfoNV* pSleepInfo); +typedef void (VKAPI_PTR *PFN_vkSetLatencyMarkerNV)(VkDevice device, VkSwapchainKHR swapchain, const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkGetLatencyTimingsNV)(VkDevice device, VkSwapchainKHR swapchain, VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkQueueNotifyOutOfBandNV)(VkQueue queue, const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetLatencySleepModeNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepModeInfoNV* pSleepModeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkLatencySleepNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepInfoNV* pSleepInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetLatencyMarkerNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetLatencyTimingsNV( + VkDevice device, + VkSwapchainKHR swapchain, + VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV( + VkQueue queue, + const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo); +#endif +#endif + + +// VK_ARM_data_graph is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_data_graph 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM) +#define VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM 128U +#define VK_ARM_DATA_GRAPH_SPEC_VERSION 1 +#define VK_ARM_DATA_GRAPH_EXTENSION_NAME "VK_ARM_data_graph" + +typedef enum VkDataGraphPipelineSessionBindPointARM { + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM = 0, + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelineSessionBindPointARM; + +typedef enum VkDataGraphPipelineSessionBindPointTypeARM { + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM = 0, + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelineSessionBindPointTypeARM; + +typedef enum VkDataGraphPipelinePropertyARM { + VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM = 0, + VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM = 1, + VK_DATA_GRAPH_PIPELINE_PROPERTY_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelinePropertyARM; + +typedef enum VkPhysicalDeviceDataGraphProcessingEngineTypeARM { + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM = 0, + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM = 1000629000, + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM = 1000629001, + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkPhysicalDeviceDataGraphProcessingEngineTypeARM; + +typedef enum VkPhysicalDeviceDataGraphOperationTypeARM { + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM = 0, + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM = 1000629000, + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM = 1000629001, + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkPhysicalDeviceDataGraphOperationTypeARM; +typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagsARM; + +// Flag bits for VkDataGraphPipelineSessionCreateFlagBitsARM +typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagBitsARM; +static const VkDataGraphPipelineSessionCreateFlagBitsARM VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM = 0x00000001ULL; + +typedef VkFlags64 VkDataGraphPipelineDispatchFlagsARM; + +// Flag bits for VkDataGraphPipelineDispatchFlagBitsARM +typedef VkFlags64 VkDataGraphPipelineDispatchFlagBitsARM; + +typedef struct VkPhysicalDeviceDataGraphFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 dataGraph; + VkBool32 dataGraphUpdateAfterBind; + VkBool32 dataGraphSpecializationConstants; + VkBool32 dataGraphDescriptorBuffer; + VkBool32 dataGraphShaderModule; +} VkPhysicalDeviceDataGraphFeaturesARM; + +typedef struct VkDataGraphPipelineConstantARM { + VkStructureType sType; + const void* pNext; + uint32_t id; + const void* pConstantData; +} VkDataGraphPipelineConstantARM; + +typedef struct VkDataGraphPipelineResourceInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t descriptorSet; + uint32_t binding; + uint32_t arrayElement; +} VkDataGraphPipelineResourceInfoARM; + +typedef struct VkDataGraphPipelineCompilerControlCreateInfoARM { + VkStructureType sType; + const void* pNext; + const char* pVendorOptions; +} VkDataGraphPipelineCompilerControlCreateInfoARM; + +typedef struct VkDataGraphPipelineCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags2KHR flags; + VkPipelineLayout layout; + uint32_t resourceInfoCount; + const VkDataGraphPipelineResourceInfoARM* pResourceInfos; +} VkDataGraphPipelineCreateInfoARM; + +typedef struct VkDataGraphPipelineShaderModuleCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkShaderModule module; + const char* pName; + const VkSpecializationInfo* pSpecializationInfo; + uint32_t constantCount; + const VkDataGraphPipelineConstantARM* pConstants; +} VkDataGraphPipelineShaderModuleCreateInfoARM; + +typedef struct VkDataGraphPipelineSessionCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionCreateFlagsARM flags; + VkPipeline dataGraphPipeline; +} VkDataGraphPipelineSessionCreateInfoARM; + +typedef struct VkDataGraphPipelineSessionBindPointRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionARM session; +} VkDataGraphPipelineSessionBindPointRequirementsInfoARM; + +typedef struct VkDataGraphPipelineSessionBindPointRequirementARM { + VkStructureType sType; + void* pNext; + VkDataGraphPipelineSessionBindPointARM bindPoint; + VkDataGraphPipelineSessionBindPointTypeARM bindPointType; + uint32_t numObjects; +} VkDataGraphPipelineSessionBindPointRequirementARM; + +typedef struct VkDataGraphPipelineSessionMemoryRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionARM session; + VkDataGraphPipelineSessionBindPointARM bindPoint; + uint32_t objectIndex; +} VkDataGraphPipelineSessionMemoryRequirementsInfoARM; + +typedef struct VkBindDataGraphPipelineSessionMemoryInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionARM session; + VkDataGraphPipelineSessionBindPointARM bindPoint; + uint32_t objectIndex; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindDataGraphPipelineSessionMemoryInfoARM; + +typedef struct VkDataGraphPipelineInfoARM { + VkStructureType sType; + const void* pNext; + VkPipeline dataGraphPipeline; +} VkDataGraphPipelineInfoARM; + +typedef struct VkDataGraphPipelinePropertyQueryResultARM { + VkStructureType sType; + void* pNext; + VkDataGraphPipelinePropertyARM property; + VkBool32 isText; + size_t dataSize; + void* pData; +} VkDataGraphPipelinePropertyQueryResultARM; + +typedef struct VkDataGraphPipelineIdentifierCreateInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t identifierSize; + const uint8_t* pIdentifier; +} VkDataGraphPipelineIdentifierCreateInfoARM; + +typedef struct VkDataGraphPipelineDispatchInfoARM { + VkStructureType sType; + void* pNext; + VkDataGraphPipelineDispatchFlagsARM flags; +} VkDataGraphPipelineDispatchInfoARM; + +typedef struct VkPhysicalDeviceDataGraphProcessingEngineARM { + VkPhysicalDeviceDataGraphProcessingEngineTypeARM type; + VkBool32 isForeign; +} VkPhysicalDeviceDataGraphProcessingEngineARM; + +typedef struct VkPhysicalDeviceDataGraphOperationSupportARM { + VkPhysicalDeviceDataGraphOperationTypeARM operationType; + char name[VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM]; + uint32_t version; +} VkPhysicalDeviceDataGraphOperationSupportARM; + +typedef struct VkQueueFamilyDataGraphPropertiesARM { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceDataGraphProcessingEngineARM engine; + VkPhysicalDeviceDataGraphOperationSupportARM operation; +} VkQueueFamilyDataGraphPropertiesARM; + +typedef struct VkDataGraphProcessingEngineCreateInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t processingEngineCount; + VkPhysicalDeviceDataGraphProcessingEngineARM* pProcessingEngines; +} VkDataGraphProcessingEngineCreateInfoARM; + +typedef struct VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + VkPhysicalDeviceDataGraphProcessingEngineTypeARM engineType; +} VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + +typedef struct VkQueueFamilyDataGraphProcessingEnginePropertiesARM { + VkStructureType sType; + void* pNext; + VkExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes; + VkExternalMemoryHandleTypeFlags foreignMemoryHandleTypes; +} VkQueueFamilyDataGraphProcessingEnginePropertiesARM; + +typedef struct VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t dimension; + uint32_t zeroCount; + uint32_t groupSize; +} VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDataGraphPipelinesARM)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkDataGraphPipelineCreateInfoARM* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDataGraphPipelineSessionARM)(VkDevice device, const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDataGraphPipelineSessionARM* pSession); +typedef VkResult (VKAPI_PTR *PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM)(VkDevice device, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, uint32_t* pBindPointRequirementCount, VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM)(VkDevice device, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindDataGraphPipelineSessionMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkDestroyDataGraphPipelineSessionARM)(VkDevice device, VkDataGraphPipelineSessionARM session, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchDataGraphARM)(VkCommandBuffer commandBuffer, VkDataGraphPipelineSessionARM session, const VkDataGraphPipelineDispatchInfoARM* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetDataGraphPipelineAvailablePropertiesARM)(VkDevice device, const VkDataGraphPipelineInfoARM* pPipelineInfo, uint32_t* pPropertiesCount, VkDataGraphPipelinePropertyARM* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDataGraphPipelinePropertiesARM)(VkDevice device, const VkDataGraphPipelineInfoARM* pPipelineInfo, uint32_t propertiesCount, VkDataGraphPipelinePropertyQueryResultARM* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pQueueFamilyDataGraphPropertyCount, VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelinesARM( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkDataGraphPipelineCreateInfoARM* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelineSessionARM( + VkDevice device, + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDataGraphPipelineSessionARM* pSession); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineSessionBindPointRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, + uint32_t* pBindPointRequirementCount, + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDataGraphPipelineSessionMemoryRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindDataGraphPipelineSessionMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDataGraphPipelineSessionARM( + VkDevice device, + VkDataGraphPipelineSessionARM session, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchDataGraphARM( + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineAvailablePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t* pPropertiesCount, + VkDataGraphPipelinePropertyARM* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelinePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t propertiesCount, + VkDataGraphPipelinePropertyQueryResultARM* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties); +#endif +#endif + + +// VK_QCOM_multiview_per_view_render_areas is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_multiview_per_view_render_areas 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_SPEC_VERSION 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_EXTENSION_NAME "VK_QCOM_multiview_per_view_render_areas" +typedef struct VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 multiviewPerViewRenderAreas; +} VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + +typedef struct VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM { + VkStructureType sType; + const void* pNext; + uint32_t perViewRenderAreaCount; + const VkRect2D* pPerViewRenderAreas; +} VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + + + +// VK_NV_per_stage_descriptor_set is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_per_stage_descriptor_set 1 +#define VK_NV_PER_STAGE_DESCRIPTOR_SET_SPEC_VERSION 1 +#define VK_NV_PER_STAGE_DESCRIPTOR_SET_EXTENSION_NAME "VK_NV_per_stage_descriptor_set" +typedef struct VkPhysicalDevicePerStageDescriptorSetFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 perStageDescriptorSet; + VkBool32 dynamicPipelineLayout; +} VkPhysicalDevicePerStageDescriptorSetFeaturesNV; + + + +// VK_QCOM_image_processing2 is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_image_processing2 1 +#define VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION 1 +#define VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME "VK_QCOM_image_processing2" + +typedef enum VkBlockMatchWindowCompareModeQCOM { + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM = 0, + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM = 1, + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkBlockMatchWindowCompareModeQCOM; +typedef struct VkPhysicalDeviceImageProcessing2FeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 textureBlockMatch2; +} VkPhysicalDeviceImageProcessing2FeaturesQCOM; + +typedef struct VkPhysicalDeviceImageProcessing2PropertiesQCOM { + VkStructureType sType; + void* pNext; + VkExtent2D maxBlockMatchWindow; +} VkPhysicalDeviceImageProcessing2PropertiesQCOM; + +typedef struct VkSamplerBlockMatchWindowCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkExtent2D windowExtent; + VkBlockMatchWindowCompareModeQCOM windowCompareMode; +} VkSamplerBlockMatchWindowCreateInfoQCOM; + + + +// VK_QCOM_filter_cubic_weights is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_filter_cubic_weights 1 +#define VK_QCOM_FILTER_CUBIC_WEIGHTS_SPEC_VERSION 1 +#define VK_QCOM_FILTER_CUBIC_WEIGHTS_EXTENSION_NAME "VK_QCOM_filter_cubic_weights" + +typedef enum VkCubicFilterWeightsQCOM { + VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM = 0, + VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM = 1, + VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM = 2, + VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM = 3, + VK_CUBIC_FILTER_WEIGHTS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkCubicFilterWeightsQCOM; +typedef struct VkPhysicalDeviceCubicWeightsFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 selectableCubicWeights; +} VkPhysicalDeviceCubicWeightsFeaturesQCOM; + +typedef struct VkSamplerCubicWeightsCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkCubicFilterWeightsQCOM cubicWeights; +} VkSamplerCubicWeightsCreateInfoQCOM; + +typedef struct VkBlitImageCubicWeightsInfoQCOM { + VkStructureType sType; + const void* pNext; + VkCubicFilterWeightsQCOM cubicWeights; +} VkBlitImageCubicWeightsInfoQCOM; + + + +// VK_QCOM_ycbcr_degamma is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_ycbcr_degamma 1 +#define VK_QCOM_YCBCR_DEGAMMA_SPEC_VERSION 1 +#define VK_QCOM_YCBCR_DEGAMMA_EXTENSION_NAME "VK_QCOM_ycbcr_degamma" +typedef struct VkPhysicalDeviceYcbcrDegammaFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 ycbcrDegamma; +} VkPhysicalDeviceYcbcrDegammaFeaturesQCOM; + +typedef struct VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM { + VkStructureType sType; + void* pNext; + VkBool32 enableYDegamma; + VkBool32 enableCbCrDegamma; +} VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + + + +// VK_QCOM_filter_cubic_clamp is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_filter_cubic_clamp 1 +#define VK_QCOM_FILTER_CUBIC_CLAMP_SPEC_VERSION 1 +#define VK_QCOM_FILTER_CUBIC_CLAMP_EXTENSION_NAME "VK_QCOM_filter_cubic_clamp" +typedef struct VkPhysicalDeviceCubicClampFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 cubicRangeClamp; +} VkPhysicalDeviceCubicClampFeaturesQCOM; + + + +// VK_EXT_attachment_feedback_loop_dynamic_state is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_attachment_feedback_loop_dynamic_state 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_SPEC_VERSION 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_dynamic_state" +typedef struct VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 attachmentFeedbackLoopDynamicState; +} VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT( + VkCommandBuffer commandBuffer, + VkImageAspectFlags aspectMask); +#endif +#endif + + +// VK_MSFT_layered_driver is a preprocessor guard. Do not pass it to API calls. +#define VK_MSFT_layered_driver 1 +#define VK_MSFT_LAYERED_DRIVER_SPEC_VERSION 1 +#define VK_MSFT_LAYERED_DRIVER_EXTENSION_NAME "VK_MSFT_layered_driver" + +typedef enum VkLayeredDriverUnderlyingApiMSFT { + VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT = 0, + VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT = 1, + VK_LAYERED_DRIVER_UNDERLYING_API_MAX_ENUM_MSFT = 0x7FFFFFFF +} VkLayeredDriverUnderlyingApiMSFT; +typedef struct VkPhysicalDeviceLayeredDriverPropertiesMSFT { + VkStructureType sType; + void* pNext; + VkLayeredDriverUnderlyingApiMSFT underlyingAPI; +} VkPhysicalDeviceLayeredDriverPropertiesMSFT; + + + +// VK_NV_descriptor_pool_overallocation is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_descriptor_pool_overallocation 1 +#define VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_SPEC_VERSION 1 +#define VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME "VK_NV_descriptor_pool_overallocation" +typedef struct VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 descriptorPoolOverallocation; +} VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + + + +// VK_QCOM_tile_memory_heap is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_memory_heap 1 +#define VK_QCOM_TILE_MEMORY_HEAP_SPEC_VERSION 1 +#define VK_QCOM_TILE_MEMORY_HEAP_EXTENSION_NAME "VK_QCOM_tile_memory_heap" +typedef struct VkPhysicalDeviceTileMemoryHeapFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileMemoryHeap; +} VkPhysicalDeviceTileMemoryHeapFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileMemoryHeapPropertiesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 queueSubmitBoundary; + VkBool32 tileBufferTransfers; +} VkPhysicalDeviceTileMemoryHeapPropertiesQCOM; + +typedef struct VkTileMemoryRequirementsQCOM { + VkStructureType sType; + void* pNext; + VkDeviceSize size; + VkDeviceSize alignment; +} VkTileMemoryRequirementsQCOM; + +typedef struct VkTileMemoryBindInfoQCOM { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkTileMemoryBindInfoQCOM; + +typedef struct VkTileMemorySizeInfoQCOM { + VkStructureType sType; + const void* pNext; + VkDeviceSize size; +} VkTileMemorySizeInfoQCOM; + +typedef void (VKAPI_PTR *PFN_vkCmdBindTileMemoryQCOM)(VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( + VkCommandBuffer commandBuffer, + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); +#endif +#endif + + +// VK_EXT_memory_decompression is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_memory_decompression 1 +#define VK_EXT_MEMORY_DECOMPRESSION_SPEC_VERSION 1 +#define VK_EXT_MEMORY_DECOMPRESSION_EXTENSION_NAME "VK_EXT_memory_decompression" +typedef struct VkDecompressMemoryRegionEXT { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize compressedSize; + VkDeviceSize decompressedSize; +} VkDecompressMemoryRegionEXT; + +typedef struct VkDecompressMemoryInfoEXT { + VkStructureType sType; + const void* pNext; + VkMemoryDecompressionMethodFlagsEXT decompressionMethod; + uint32_t regionCount; + const VkDecompressMemoryRegionEXT* pRegions; +} VkDecompressMemoryInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdDecompressMemoryEXT)(VkCommandBuffer commandBuffer, const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT); +typedef void (VKAPI_PTR *PFN_vkCmdDecompressMemoryIndirectCountEXT)(VkCommandBuffer commandBuffer, VkMemoryDecompressionMethodFlagsEXT decompressionMethod, VkDeviceAddress indirectCommandsAddress, VkDeviceAddress indirectCommandsCountAddress, uint32_t maxDecompressionCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryEXT( + VkCommandBuffer commandBuffer, + const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryIndirectCountEXT( + VkCommandBuffer commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride); +#endif +#endif + + +// VK_NV_display_stereo is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_display_stereo 1 +#define VK_NV_DISPLAY_STEREO_SPEC_VERSION 1 +#define VK_NV_DISPLAY_STEREO_EXTENSION_NAME "VK_NV_display_stereo" + +typedef enum VkDisplaySurfaceStereoTypeNV { + VK_DISPLAY_SURFACE_STEREO_TYPE_NONE_NV = 0, + VK_DISPLAY_SURFACE_STEREO_TYPE_ONBOARD_DIN_NV = 1, + VK_DISPLAY_SURFACE_STEREO_TYPE_HDMI_3D_NV = 2, + VK_DISPLAY_SURFACE_STEREO_TYPE_INBAND_DISPLAYPORT_NV = 3, + VK_DISPLAY_SURFACE_STEREO_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplaySurfaceStereoTypeNV; +typedef struct VkDisplaySurfaceStereoCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDisplaySurfaceStereoTypeNV stereoType; +} VkDisplaySurfaceStereoCreateInfoNV; + +typedef struct VkDisplayModeStereoPropertiesNV { + VkStructureType sType; + void* pNext; + VkBool32 hdmi3DSupported; +} VkDisplayModeStereoPropertiesNV; + + + +// VK_NV_raw_access_chains is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_raw_access_chains 1 +#define VK_NV_RAW_ACCESS_CHAINS_SPEC_VERSION 1 +#define VK_NV_RAW_ACCESS_CHAINS_EXTENSION_NAME "VK_NV_raw_access_chains" +typedef struct VkPhysicalDeviceRawAccessChainsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shaderRawAccessChains; +} VkPhysicalDeviceRawAccessChainsFeaturesNV; + + + +// VK_NV_external_compute_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_compute_queue 1 +VK_DEFINE_HANDLE(VkExternalComputeQueueNV) +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME "VK_NV_external_compute_queue" +typedef struct VkExternalComputeQueueDeviceCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t reservedExternalQueues; +} VkExternalComputeQueueDeviceCreateInfoNV; + +typedef struct VkExternalComputeQueueCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkQueue preferredQueue; +} VkExternalComputeQueueCreateInfoNV; + +typedef struct VkExternalComputeQueueDataParamsNV { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndex; +} VkExternalComputeQueueDataParamsNV; + +typedef struct VkPhysicalDeviceExternalComputeQueuePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t externalDataSize; + uint32_t maxExternalQueues; +} VkPhysicalDeviceExternalComputeQueuePropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateExternalComputeQueueNV)(VkDevice device, const VkExternalComputeQueueCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkExternalComputeQueueNV* pExternalQueue); +typedef void (VKAPI_PTR *PFN_vkDestroyExternalComputeQueueNV)(VkDevice device, VkExternalComputeQueueNV externalQueue, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetExternalComputeQueueDataNV)(VkExternalComputeQueueNV externalQueue, VkExternalComputeQueueDataParamsNV* params, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateExternalComputeQueueNV( + VkDevice device, + const VkExternalComputeQueueCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkExternalComputeQueueNV* pExternalQueue); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyExternalComputeQueueNV( + VkDevice device, + VkExternalComputeQueueNV externalQueue, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetExternalComputeQueueDataNV( + VkExternalComputeQueueNV externalQueue, + VkExternalComputeQueueDataParamsNV* params, + void* pData); +#endif +#endif + + +// VK_NV_command_buffer_inheritance is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_command_buffer_inheritance 1 +#define VK_NV_COMMAND_BUFFER_INHERITANCE_SPEC_VERSION 1 +#define VK_NV_COMMAND_BUFFER_INHERITANCE_EXTENSION_NAME "VK_NV_command_buffer_inheritance" +typedef struct VkPhysicalDeviceCommandBufferInheritanceFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 commandBufferInheritance; +} VkPhysicalDeviceCommandBufferInheritanceFeaturesNV; + + + +// VK_NV_shader_atomic_float16_vector is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_atomic_float16_vector 1 +#define VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_SPEC_VERSION 1 +#define VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_EXTENSION_NAME "VK_NV_shader_atomic_float16_vector" +typedef struct VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloat16VectorAtomics; +} VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + + + +// VK_EXT_shader_replicated_composites is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_replicated_composites 1 +#define VK_EXT_SHADER_REPLICATED_COMPOSITES_SPEC_VERSION 1 +#define VK_EXT_SHADER_REPLICATED_COMPOSITES_EXTENSION_NAME "VK_EXT_shader_replicated_composites" +typedef struct VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderReplicatedComposites; +} VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + + + +// VK_EXT_shader_float8 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_float8 1 +#define VK_EXT_SHADER_FLOAT8_SPEC_VERSION 1 +#define VK_EXT_SHADER_FLOAT8_EXTENSION_NAME "VK_EXT_shader_float8" +typedef struct VkPhysicalDeviceShaderFloat8FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloat8; + VkBool32 shaderFloat8CooperativeMatrix; +} VkPhysicalDeviceShaderFloat8FeaturesEXT; + + + +// VK_NV_ray_tracing_validation is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_validation 1 +#define VK_NV_RAY_TRACING_VALIDATION_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_VALIDATION_EXTENSION_NAME "VK_NV_ray_tracing_validation" +typedef struct VkPhysicalDeviceRayTracingValidationFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingValidation; +} VkPhysicalDeviceRayTracingValidationFeaturesNV; + + + +// VK_NV_cluster_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cluster_acceleration_structure 1 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_SPEC_VERSION 4 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_cluster_acceleration_structure" + +typedef enum VkClusterAccelerationStructureTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_CLUSTERS_BOTTOM_LEVEL_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_TEMPLATE_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureTypeNV; + +typedef enum VkClusterAccelerationStructureOpTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV = 3, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_GET_CLUSTER_TEMPLATE_INDICES_NV = 5, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpTypeNV; + +typedef enum VkClusterAccelerationStructureOpModeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_COMPUTE_SIZES_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpModeNV; + +typedef enum VkClusterAccelerationStructureAddressResolutionFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_NONE_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_IMPLICIT_DATA_BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SCRATCH_DATA_BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_ADDRESS_ARRAY_BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_SIZES_ARRAY_BIT_NV = 0x00000008, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_ARRAY_BIT_NV = 0x00000010, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_COUNT_BIT_NV = 0x00000020, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureAddressResolutionFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureAddressResolutionFlagsNV; + +typedef enum VkClusterAccelerationStructureClusterFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_ALLOW_DISABLE_OPACITY_MICROMAPS_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureClusterFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureClusterFlagsNV; + +typedef enum VkClusterAccelerationStructureGeometryFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_CULL_DISABLE_BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_NO_DUPLICATE_ANYHIT_INVOCATION_BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_OPAQUE_BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureGeometryFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureGeometryFlagsNV; + +typedef enum VkClusterAccelerationStructureIndexFormatFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_8BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_16BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_32BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureIndexFormatFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureIndexFormatFlagsNV; +typedef struct VkPhysicalDeviceClusterAccelerationStructureFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 clusterAccelerationStructure; +} VkPhysicalDeviceClusterAccelerationStructureFeaturesNV; + +typedef struct VkPhysicalDeviceClusterAccelerationStructurePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxVerticesPerCluster; + uint32_t maxTrianglesPerCluster; + uint32_t clusterScratchByteAlignment; + uint32_t clusterByteAlignment; + uint32_t clusterTemplateByteAlignment; + uint32_t clusterBottomLevelByteAlignment; + uint32_t clusterTemplateBoundsByteAlignment; + uint32_t maxClusterGeometryIndex; +} VkPhysicalDeviceClusterAccelerationStructurePropertiesNV; + +typedef struct VkClusterAccelerationStructureClustersBottomLevelInputNV { + VkStructureType sType; + void* pNext; + uint32_t maxTotalClusterCount; + uint32_t maxClusterCountPerAccelerationStructure; +} VkClusterAccelerationStructureClustersBottomLevelInputNV; + +typedef struct VkClusterAccelerationStructureTriangleClusterInputNV { + VkStructureType sType; + void* pNext; + VkFormat vertexFormat; + uint32_t maxGeometryIndexValue; + uint32_t maxClusterUniqueGeometryCount; + uint32_t maxClusterTriangleCount; + uint32_t maxClusterVertexCount; + uint32_t maxTotalTriangleCount; + uint32_t maxTotalVertexCount; + uint32_t minPositionTruncateBitCount; +} VkClusterAccelerationStructureTriangleClusterInputNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInputNV { + VkStructureType sType; + void* pNext; + VkClusterAccelerationStructureTypeNV type; + VkBool32 noMoveOverlap; + VkDeviceSize maxMovedBytes; +} VkClusterAccelerationStructureMoveObjectsInputNV; + +typedef union VkClusterAccelerationStructureOpInputNV { + VkClusterAccelerationStructureClustersBottomLevelInputNV* pClustersBottomLevel; + VkClusterAccelerationStructureTriangleClusterInputNV* pTriangleClusters; + VkClusterAccelerationStructureMoveObjectsInputNV* pMoveObjects; +} VkClusterAccelerationStructureOpInputNV; + +typedef struct VkClusterAccelerationStructureInputInfoNV { + VkStructureType sType; + void* pNext; + uint32_t maxAccelerationStructureCount; + VkBuildAccelerationStructureFlagsKHR flags; + VkClusterAccelerationStructureOpTypeNV opType; + VkClusterAccelerationStructureOpModeNV opMode; + VkClusterAccelerationStructureOpInputNV opInput; +} VkClusterAccelerationStructureInputInfoNV; + +typedef struct VkStridedDeviceAddressRegionKHR { + VkDeviceAddress deviceAddress; + VkDeviceSize stride; + VkDeviceSize size; +} VkStridedDeviceAddressRegionKHR; + +typedef struct VkClusterAccelerationStructureCommandsInfoNV { + VkStructureType sType; + void* pNext; + VkClusterAccelerationStructureInputInfoNV input; + VkDeviceAddress dstImplicitData; + VkDeviceAddress scratchData; + VkStridedDeviceAddressRegionKHR dstAddressesArray; + VkStridedDeviceAddressRegionKHR dstSizesArray; + VkStridedDeviceAddressRegionKHR srcInfosArray; + VkDeviceAddress srcInfosCount; + VkClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags; +} VkClusterAccelerationStructureCommandsInfoNV; + +typedef struct VkStridedDeviceAddressNV { + VkDeviceAddress startAddress; + VkDeviceSize strideInBytes; +} VkStridedDeviceAddressNV; + +typedef struct VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV { + uint32_t geometryIndex:24; + uint32_t reserved:5; + uint32_t geometryFlags:3; +} VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInfoNV { + VkDeviceAddress srcAccelerationStructure; +} VkClusterAccelerationStructureMoveObjectsInfoNV; + +typedef struct VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV { + uint32_t clusterReferencesCount; + uint32_t clusterReferencesStride; + VkDeviceAddress clusterReferences; +} VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount:9; + uint32_t vertexCount:9; + uint32_t positionTruncateBitCount:6; + uint32_t indexType:4; + uint32_t opacityMicromapIndexType:4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; +} VkClusterAccelerationStructureBuildTriangleClusterInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount:9; + uint32_t vertexCount:9; + uint32_t positionTruncateBitCount:6; + uint32_t indexType:4; + uint32_t opacityMicromapIndexType:4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; + VkDeviceAddress instantiationBoundingBoxLimit; +} VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + +typedef struct VkClusterAccelerationStructureInstantiateClusterInfoNV { + uint32_t clusterIdOffset; + uint32_t geometryIndexOffset:24; + uint32_t reserved:8; + VkDeviceAddress clusterTemplateAddress; + VkStridedDeviceAddressNV vertexBuffer; +} VkClusterAccelerationStructureInstantiateClusterInfoNV; + +typedef struct VkClusterAccelerationStructureGetTemplateIndicesInfoNV { + VkDeviceAddress clusterTemplateAddress; +} VkClusterAccelerationStructureGetTemplateIndicesInfoNV; + +typedef struct VkAccelerationStructureBuildSizesInfoKHR { + VkStructureType sType; + void* pNext; + VkDeviceSize accelerationStructureSize; + VkDeviceSize updateScratchSize; + VkDeviceSize buildScratchSize; +} VkAccelerationStructureBuildSizesInfoKHR; + +typedef struct VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV { + VkStructureType sType; + void* pNext; + VkBool32 allowClusterAccelerationStructure; +} VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetClusterAccelerationStructureBuildSizesNV)(VkDevice device, const VkClusterAccelerationStructureInputInfoNV* pInfo, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBuildClusterAccelerationStructureIndirectNV)(VkCommandBuffer commandBuffer, const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetClusterAccelerationStructureBuildSizesNV( + VkDevice device, + const VkClusterAccelerationStructureInputInfoNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildClusterAccelerationStructureIndirectNV( + VkCommandBuffer commandBuffer, + const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos); +#endif +#endif + + +// VK_NV_partitioned_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_partitioned_acceleration_structure 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_SPEC_VERSION 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_partitioned_acceleration_structure" +#define VK_PARTITIONED_ACCELERATION_STRUCTURE_PARTITION_INDEX_GLOBAL_NV (~0U) + +typedef enum VkPartitionedAccelerationStructureOpTypeNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_INSTANCE_NV = 0, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_UPDATE_INSTANCE_NV = 1, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_PARTITION_TRANSLATION_NV = 2, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureOpTypeNV; + +typedef enum VkPartitionedAccelerationStructureInstanceFlagBitsNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FACING_CULL_DISABLE_BIT_NV = 0x00000001, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FLIP_FACING_BIT_NV = 0x00000002, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_OPAQUE_BIT_NV = 0x00000004, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_NO_OPAQUE_BIT_NV = 0x00000008, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV = 0x00000010, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureInstanceFlagBitsNV; +typedef VkFlags VkPartitionedAccelerationStructureInstanceFlagsNV; +typedef struct VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 partitionedAccelerationStructure; +} VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV; + +typedef struct VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxPartitionCount; +} VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV; + +typedef struct VkPartitionedAccelerationStructureFlagsNV { + VkStructureType sType; + void* pNext; + VkBool32 enablePartitionTranslation; +} VkPartitionedAccelerationStructureFlagsNV; + +typedef struct VkBuildPartitionedAccelerationStructureIndirectCommandNV { + VkPartitionedAccelerationStructureOpTypeNV opType; + uint32_t argCount; + VkStridedDeviceAddressNV argData; +} VkBuildPartitionedAccelerationStructureIndirectCommandNV; + +typedef struct VkPartitionedAccelerationStructureWriteInstanceDataNV { + VkTransformMatrixKHR transform; + float explicitAABB[6]; + uint32_t instanceID; + uint32_t instanceMask; + uint32_t instanceContributionToHitGroupIndex; + VkPartitionedAccelerationStructureInstanceFlagsNV instanceFlags; + uint32_t instanceIndex; + uint32_t partitionIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureWriteInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureUpdateInstanceDataNV { + uint32_t instanceIndex; + uint32_t instanceContributionToHitGroupIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureUpdateInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureWritePartitionTranslationDataNV { + uint32_t partitionIndex; + float partitionTranslation[3]; +} VkPartitionedAccelerationStructureWritePartitionTranslationDataNV; + +typedef struct VkWriteDescriptorSetPartitionedAccelerationStructureNV { + VkStructureType sType; + void* pNext; + uint32_t accelerationStructureCount; + const VkDeviceAddress* pAccelerationStructures; +} VkWriteDescriptorSetPartitionedAccelerationStructureNV; + +typedef struct VkPartitionedAccelerationStructureInstancesInputNV { + VkStructureType sType; + void* pNext; + VkBuildAccelerationStructureFlagsKHR flags; + uint32_t instanceCount; + uint32_t maxInstancePerPartitionCount; + uint32_t partitionCount; + uint32_t maxInstanceInGlobalPartitionCount; +} VkPartitionedAccelerationStructureInstancesInputNV; + +typedef struct VkBuildPartitionedAccelerationStructureInfoNV { + VkStructureType sType; + void* pNext; + VkPartitionedAccelerationStructureInstancesInputNV input; + VkDeviceAddress srcAccelerationStructureData; + VkDeviceAddress dstAccelerationStructureData; + VkDeviceAddress scratchData; + VkDeviceAddress srcInfos; + VkDeviceAddress srcInfosCount; +} VkBuildPartitionedAccelerationStructureInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV)(VkDevice device, const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBuildPartitionedAccelerationStructuresNV)(VkCommandBuffer commandBuffer, const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPartitionedAccelerationStructuresBuildSizesNV( + VkDevice device, + const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildPartitionedAccelerationStructuresNV( + VkCommandBuffer commandBuffer, + const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo); +#endif +#endif + + +// VK_EXT_device_generated_commands is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_generated_commands 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectExecutionSetEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutEXT) +#define VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1 +#define VK_EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_EXT_device_generated_commands" + +typedef enum VkIndirectExecutionSetInfoTypeEXT { + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT = 0, + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT = 1, + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectExecutionSetInfoTypeEXT; + +typedef enum VkIndirectCommandsTokenTypeEXT { + VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT = 8, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT = 9, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_EXT = 1000135000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_SEQUENCE_INDEX_EXT = 1000135001, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT = 1000202002, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT = 1000202003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT = 1000328001, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT = 1000386004, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsTokenTypeEXT; + +typedef enum VkIndirectCommandsInputModeFlagBitsEXT { + VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT = 0x00000001, + VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT = 0x00000002, + VK_INDIRECT_COMMANDS_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsInputModeFlagBitsEXT; +typedef VkFlags VkIndirectCommandsInputModeFlagsEXT; + +typedef enum VkIndirectCommandsLayoutUsageFlagBitsEXT { + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT = 0x00000001, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT = 0x00000002, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsLayoutUsageFlagBitsEXT; +typedef VkFlags VkIndirectCommandsLayoutUsageFlagsEXT; +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 deviceGeneratedCommands; + VkBool32 dynamicGeneratedPipelineLayout; +} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxIndirectPipelineCount; + uint32_t maxIndirectShaderObjectCount; + uint32_t maxIndirectSequenceCount; + uint32_t maxIndirectCommandsTokenCount; + uint32_t maxIndirectCommandsTokenOffset; + uint32_t maxIndirectCommandsIndirectStride; + VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes; + VkShaderStageFlags supportedIndirectCommandsShaderStages; + VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding; + VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding; + VkBool32 deviceGeneratedCommandsTransformFeedback; + VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount; +} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + +typedef struct VkGeneratedCommandsMemoryRequirementsInfoEXT { + VkStructureType sType; + const void* pNext; + VkIndirectExecutionSetEXT indirectExecutionSet; + VkIndirectCommandsLayoutEXT indirectCommandsLayout; + uint32_t maxSequenceCount; + uint32_t maxDrawCount; +} VkGeneratedCommandsMemoryRequirementsInfoEXT; + +typedef struct VkIndirectExecutionSetPipelineInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipeline initialPipeline; + uint32_t maxPipelineCount; +} VkIndirectExecutionSetPipelineInfoEXT; + +typedef struct VkIndirectExecutionSetShaderLayoutInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t setLayoutCount; + const VkDescriptorSetLayout* pSetLayouts; +} VkIndirectExecutionSetShaderLayoutInfoEXT; + +typedef struct VkIndirectExecutionSetShaderInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t shaderCount; + const VkShaderEXT* pInitialShaders; + const VkIndirectExecutionSetShaderLayoutInfoEXT* pSetLayoutInfos; + uint32_t maxShaderCount; + uint32_t pushConstantRangeCount; + const VkPushConstantRange* pPushConstantRanges; +} VkIndirectExecutionSetShaderInfoEXT; + +typedef union VkIndirectExecutionSetInfoEXT { + const VkIndirectExecutionSetPipelineInfoEXT* pPipelineInfo; + const VkIndirectExecutionSetShaderInfoEXT* pShaderInfo; +} VkIndirectExecutionSetInfoEXT; + +typedef struct VkIndirectExecutionSetCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkIndirectExecutionSetInfoTypeEXT type; + VkIndirectExecutionSetInfoEXT info; +} VkIndirectExecutionSetCreateInfoEXT; + +typedef struct VkGeneratedCommandsInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags shaderStages; + VkIndirectExecutionSetEXT indirectExecutionSet; + VkIndirectCommandsLayoutEXT indirectCommandsLayout; + VkDeviceAddress indirectAddress; + VkDeviceSize indirectAddressSize; + VkDeviceAddress preprocessAddress; + VkDeviceSize preprocessSize; + uint32_t maxSequenceCount; + VkDeviceAddress sequenceCountAddress; + uint32_t maxDrawCount; +} VkGeneratedCommandsInfoEXT; + +typedef struct VkWriteIndirectExecutionSetPipelineEXT { + VkStructureType sType; + const void* pNext; + uint32_t index; + VkPipeline pipeline; +} VkWriteIndirectExecutionSetPipelineEXT; + +typedef struct VkIndirectCommandsPushConstantTokenEXT { + VkPushConstantRange updateRange; +} VkIndirectCommandsPushConstantTokenEXT; + +typedef struct VkIndirectCommandsVertexBufferTokenEXT { + uint32_t vertexBindingUnit; +} VkIndirectCommandsVertexBufferTokenEXT; + +typedef struct VkIndirectCommandsIndexBufferTokenEXT { + VkIndirectCommandsInputModeFlagBitsEXT mode; +} VkIndirectCommandsIndexBufferTokenEXT; + +typedef struct VkIndirectCommandsExecutionSetTokenEXT { + VkIndirectExecutionSetInfoTypeEXT type; + VkShaderStageFlags shaderStages; +} VkIndirectCommandsExecutionSetTokenEXT; + +typedef union VkIndirectCommandsTokenDataEXT { + const VkIndirectCommandsPushConstantTokenEXT* pPushConstant; + const VkIndirectCommandsVertexBufferTokenEXT* pVertexBuffer; + const VkIndirectCommandsIndexBufferTokenEXT* pIndexBuffer; + const VkIndirectCommandsExecutionSetTokenEXT* pExecutionSet; +} VkIndirectCommandsTokenDataEXT; + +typedef struct VkIndirectCommandsLayoutTokenEXT { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsTokenTypeEXT type; + VkIndirectCommandsTokenDataEXT data; + uint32_t offset; +} VkIndirectCommandsLayoutTokenEXT; + +typedef struct VkIndirectCommandsLayoutCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsLayoutUsageFlagsEXT flags; + VkShaderStageFlags shaderStages; + uint32_t indirectStride; + VkPipelineLayout pipelineLayout; + uint32_t tokenCount; + const VkIndirectCommandsLayoutTokenEXT* pTokens; +} VkIndirectCommandsLayoutCreateInfoEXT; + +typedef struct VkDrawIndirectCountIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t stride; + uint32_t commandCount; +} VkDrawIndirectCountIndirectCommandEXT; + +typedef struct VkBindVertexBufferIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t size; + uint32_t stride; +} VkBindVertexBufferIndirectCommandEXT; + +typedef struct VkBindIndexBufferIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t size; + VkIndexType indexType; +} VkBindIndexBufferIndirectCommandEXT; + +typedef struct VkGeneratedCommandsPipelineInfoEXT { + VkStructureType sType; + void* pNext; + VkPipeline pipeline; +} VkGeneratedCommandsPipelineInfoEXT; + +typedef struct VkGeneratedCommandsShaderInfoEXT { + VkStructureType sType; + void* pNext; + uint32_t shaderCount; + const VkShaderEXT* pShaders; +} VkGeneratedCommandsShaderInfoEXT; + +typedef struct VkWriteIndirectExecutionSetShaderEXT { + VkStructureType sType; + const void* pNext; + uint32_t index; + VkShaderEXT shader; +} VkWriteIndirectExecutionSetShaderEXT; + +typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsEXT)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsEXT)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsEXT)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutEXT)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout); +typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutEXT)(VkDevice device, VkIndirectCommandsLayoutEXT indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectExecutionSetEXT)(VkDevice device, const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectExecutionSetEXT* pIndirectExecutionSet); +typedef void (VKAPI_PTR *PFN_vkDestroyIndirectExecutionSetEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkUpdateIndirectExecutionSetPipelineEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, uint32_t executionSetWriteCount, const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites); +typedef void (VKAPI_PTR *PFN_vkUpdateIndirectExecutionSetShaderEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, uint32_t executionSetWriteCount, const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsEXT( + VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsEXT( + VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, + VkCommandBuffer stateCommandBuffer); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsEXT( + VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutEXT( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutEXT( + VkDevice device, + VkIndirectCommandsLayoutEXT indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectExecutionSetEXT( + VkDevice device, + const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectExecutionSetEXT* pIndirectExecutionSet); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectExecutionSetEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUpdateIndirectExecutionSetPipelineEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUpdateIndirectExecutionSetShaderEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites); +#endif +#endif + + +// VK_MESA_image_alignment_control is a preprocessor guard. Do not pass it to API calls. +#define VK_MESA_image_alignment_control 1 +#define VK_MESA_IMAGE_ALIGNMENT_CONTROL_SPEC_VERSION 1 +#define VK_MESA_IMAGE_ALIGNMENT_CONTROL_EXTENSION_NAME "VK_MESA_image_alignment_control" +typedef struct VkPhysicalDeviceImageAlignmentControlFeaturesMESA { + VkStructureType sType; + void* pNext; + VkBool32 imageAlignmentControl; +} VkPhysicalDeviceImageAlignmentControlFeaturesMESA; + +typedef struct VkPhysicalDeviceImageAlignmentControlPropertiesMESA { + VkStructureType sType; + void* pNext; + uint32_t supportedImageAlignmentMask; +} VkPhysicalDeviceImageAlignmentControlPropertiesMESA; + +typedef struct VkImageAlignmentControlCreateInfoMESA { + VkStructureType sType; + const void* pNext; + uint32_t maximumRequestedAlignment; +} VkImageAlignmentControlCreateInfoMESA; + + + +// VK_NV_push_constant_bank is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_push_constant_bank 1 +#define VK_NV_PUSH_CONSTANT_BANK_SPEC_VERSION 1 +#define VK_NV_PUSH_CONSTANT_BANK_EXTENSION_NAME "VK_NV_push_constant_bank" +typedef struct VkPushConstantBankInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t bank; +} VkPushConstantBankInfoNV; + +typedef struct VkPhysicalDevicePushConstantBankFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 pushConstantBank; +} VkPhysicalDevicePushConstantBankFeaturesNV; + +typedef struct VkPhysicalDevicePushConstantBankPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxGraphicsPushConstantBanks; + uint32_t maxComputePushConstantBanks; + uint32_t maxGraphicsPushDataBanks; + uint32_t maxComputePushDataBanks; +} VkPhysicalDevicePushConstantBankPropertiesNV; + + + +// VK_EXT_ray_tracing_invocation_reorder is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_ray_tracing_invocation_reorder 1 +#define VK_EXT_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION 1 +#define VK_EXT_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME "VK_EXT_ray_tracing_invocation_reorder" +typedef struct VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT { + VkStructureType sType; + void* pNext; + VkRayTracingInvocationReorderModeEXT rayTracingInvocationReorderReorderingHint; + uint32_t maxShaderBindingTableRecordIndex; +} VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT; + +typedef struct VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingInvocationReorder; +} VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT; + + + +// VK_EXT_depth_clamp_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clamp_control 1 +#define VK_EXT_DEPTH_CLAMP_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLAMP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clamp_control" +typedef struct VkPhysicalDeviceDepthClampControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthClampControl; +} VkPhysicalDeviceDepthClampControlFeaturesEXT; + +typedef struct VkPipelineViewportDepthClampControlCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDepthClampModeEXT depthClampMode; + const VkDepthClampRangeEXT* pDepthClampRange; +} VkPipelineViewportDepthClampControlCreateInfoEXT; + + + +// VK_HUAWEI_hdr_vivid is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_hdr_vivid 1 +#define VK_HUAWEI_HDR_VIVID_SPEC_VERSION 1 +#define VK_HUAWEI_HDR_VIVID_EXTENSION_NAME "VK_HUAWEI_hdr_vivid" +typedef struct VkPhysicalDeviceHdrVividFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 hdrVivid; +} VkPhysicalDeviceHdrVividFeaturesHUAWEI; + +typedef struct VkHdrVividDynamicMetadataHUAWEI { + VkStructureType sType; + const void* pNext; + size_t dynamicMetadataSize; + const void* pDynamicMetadata; +} VkHdrVividDynamicMetadataHUAWEI; + + + +// VK_NV_cooperative_matrix2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_matrix2 1 +#define VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME "VK_NV_cooperative_matrix2" +typedef struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t MGranularity; + uint32_t NGranularity; + uint32_t KGranularity; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; + uint32_t workgroupInvocations; +} VkCooperativeMatrixFlexibleDimensionsPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrixWorkgroupScope; + VkBool32 cooperativeMatrixFlexibleDimensions; + VkBool32 cooperativeMatrixReductions; + VkBool32 cooperativeMatrixConversions; + VkBool32 cooperativeMatrixPerElementOperations; + VkBool32 cooperativeMatrixTensorAddressing; + VkBool32 cooperativeMatrixBlockLoads; +} VkPhysicalDeviceCooperativeMatrix2FeaturesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize; + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension; + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory; +} VkPhysicalDeviceCooperativeMatrix2PropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties); +#endif +#endif + + +// VK_ARM_pipeline_opacity_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_pipeline_opacity_micromap 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_SPEC_VERSION 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_EXTENSION_NAME "VK_ARM_pipeline_opacity_micromap" +typedef struct VkPhysicalDevicePipelineOpacityMicromapFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 pipelineOpacityMicromap; +} VkPhysicalDevicePipelineOpacityMicromapFeaturesARM; + + + +// VK_ARM_performance_counters_by_region is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_performance_counters_by_region 1 +#define VK_ARM_PERFORMANCE_COUNTERS_BY_REGION_SPEC_VERSION 1 +#define VK_ARM_PERFORMANCE_COUNTERS_BY_REGION_EXTENSION_NAME "VK_ARM_performance_counters_by_region" +typedef VkFlags VkPerformanceCounterDescriptionFlagsARM; +typedef struct VkPhysicalDevicePerformanceCountersByRegionFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 performanceCountersByRegion; +} VkPhysicalDevicePerformanceCountersByRegionFeaturesARM; + +typedef struct VkPhysicalDevicePerformanceCountersByRegionPropertiesARM { + VkStructureType sType; + void* pNext; + uint32_t maxPerRegionPerformanceCounters; + VkExtent2D performanceCounterRegionSize; + uint32_t rowStrideAlignment; + uint32_t regionAlignment; + VkBool32 identityTransformOrder; +} VkPhysicalDevicePerformanceCountersByRegionPropertiesARM; + +typedef struct VkPerformanceCounterARM { + VkStructureType sType; + void* pNext; + uint32_t counterID; +} VkPerformanceCounterARM; + +typedef struct VkPerformanceCounterDescriptionARM { + VkStructureType sType; + void* pNext; + VkPerformanceCounterDescriptionFlagsARM flags; + char name[VK_MAX_DESCRIPTION_SIZE]; +} VkPerformanceCounterDescriptionARM; + +typedef struct VkRenderPassPerformanceCountersByRegionBeginInfoARM { + VkStructureType sType; + void* pNext; + uint32_t counterAddressCount; + const VkDeviceAddress* pCounterAddresses; + VkBool32 serializeRegions; + uint32_t counterIndexCount; + uint32_t* pCounterIndices; +} VkRenderPassPerformanceCountersByRegionBeginInfoARM; + +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterARM* pCounters, VkPerformanceCounterDescriptionARM* pCounterDescriptions); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterARM* pCounters, + VkPerformanceCounterDescriptionARM* pCounterDescriptions); +#endif +#endif + + +// VK_EXT_vertex_attribute_robustness is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_vertex_attribute_robustness 1 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_vertex_attribute_robustness" +typedef struct VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 vertexAttributeRobustness; +} VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + + + +// VK_ARM_format_pack is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_format_pack 1 +#define VK_ARM_FORMAT_PACK_SPEC_VERSION 1 +#define VK_ARM_FORMAT_PACK_EXTENSION_NAME "VK_ARM_format_pack" +typedef struct VkPhysicalDeviceFormatPackFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 formatPack; +} VkPhysicalDeviceFormatPackFeaturesARM; + + + +// VK_VALVE_fragment_density_map_layered is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_fragment_density_map_layered 1 +#define VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_SPEC_VERSION 1 +#define VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_EXTENSION_NAME "VK_VALVE_fragment_density_map_layered" +typedef struct VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMapLayered; +} VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + +typedef struct VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE { + VkStructureType sType; + void* pNext; + uint32_t maxFragmentDensityMapLayers; +} VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + +typedef struct VkPipelineFragmentDensityMapLayeredCreateInfoVALVE { + VkStructureType sType; + const void* pNext; + uint32_t maxFragmentDensityMapLayers; +} VkPipelineFragmentDensityMapLayeredCreateInfoVALVE; + + + +// VK_NV_present_metering is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_present_metering 1 +#define VK_NV_PRESENT_METERING_SPEC_VERSION 1 +#define VK_NV_PRESENT_METERING_EXTENSION_NAME "VK_NV_present_metering" +typedef struct VkSetPresentConfigNV { + VkStructureType sType; + const void* pNext; + uint32_t numFramesPerBatch; + uint32_t presentConfigFeedback; +} VkSetPresentConfigNV; + +typedef struct VkPhysicalDevicePresentMeteringFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 presentMetering; +} VkPhysicalDevicePresentMeteringFeaturesNV; + + + +// VK_EXT_fragment_density_map_offset is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map_offset 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_EXT_fragment_density_map_offset" +typedef VkRenderingEndInfoKHR VkRenderingEndInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdEndRendering2EXT)(VkCommandBuffer commandBuffer, const VkRenderingEndInfoKHR* pRenderingEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT( + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoKHR* pRenderingEndInfo); +#endif +#endif + + +// VK_EXT_zero_initialize_device_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_zero_initialize_device_memory 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_SPEC_VERSION 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME "VK_EXT_zero_initialize_device_memory" +typedef struct VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 zeroInitializeDeviceMemory; +} VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + + + +// VK_EXT_shader_64bit_indexing is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_64bit_indexing 1 +#define VK_EXT_SHADER_64BIT_INDEXING_SPEC_VERSION 1 +#define VK_EXT_SHADER_64BIT_INDEXING_EXTENSION_NAME "VK_EXT_shader_64bit_indexing" +typedef struct VkPhysicalDeviceShader64BitIndexingFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shader64BitIndexing; +} VkPhysicalDeviceShader64BitIndexingFeaturesEXT; + + + +// VK_EXT_custom_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_custom_resolve 1 +#define VK_EXT_CUSTOM_RESOLVE_SPEC_VERSION 1 +#define VK_EXT_CUSTOM_RESOLVE_EXTENSION_NAME "VK_EXT_custom_resolve" +typedef struct VkPhysicalDeviceCustomResolveFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 customResolve; +} VkPhysicalDeviceCustomResolveFeaturesEXT; + +typedef struct VkBeginCustomResolveInfoEXT { + VkStructureType sType; + void* pNext; +} VkBeginCustomResolveInfoEXT; + +typedef struct VkCustomResolveCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 customResolve; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkCustomResolveCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBeginCustomResolveEXT)(VkCommandBuffer commandBuffer, const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginCustomResolveEXT( + VkCommandBuffer commandBuffer, + const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo); +#endif +#endif + + +// VK_QCOM_data_graph_model is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_data_graph_model 1 +#define VK_DATA_GRAPH_MODEL_TOOLCHAIN_VERSION_LENGTH_QCOM 3U +#define VK_QCOM_DATA_GRAPH_MODEL_SPEC_VERSION 1 +#define VK_QCOM_DATA_GRAPH_MODEL_EXTENSION_NAME "VK_QCOM_data_graph_model" + +typedef enum VkDataGraphModelCacheTypeQCOM { + VK_DATA_GRAPH_MODEL_CACHE_TYPE_GENERIC_BINARY_QCOM = 0, + VK_DATA_GRAPH_MODEL_CACHE_TYPE_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkDataGraphModelCacheTypeQCOM; +typedef struct VkPipelineCacheHeaderVersionDataGraphQCOM { + uint32_t headerSize; + VkPipelineCacheHeaderVersion headerVersion; + VkDataGraphModelCacheTypeQCOM cacheType; + uint32_t cacheVersion; + uint32_t toolchainVersion[VK_DATA_GRAPH_MODEL_TOOLCHAIN_VERSION_LENGTH_QCOM]; +} VkPipelineCacheHeaderVersionDataGraphQCOM; + +typedef struct VkDataGraphPipelineBuiltinModelCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + const VkPhysicalDeviceDataGraphOperationSupportARM* pOperation; +} VkDataGraphPipelineBuiltinModelCreateInfoQCOM; + +typedef struct VkPhysicalDeviceDataGraphModelFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 dataGraphModel; +} VkPhysicalDeviceDataGraphModelFeaturesQCOM; + + + +// VK_EXT_shader_long_vector is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_long_vector 1 +#define VK_EXT_SHADER_LONG_VECTOR_SPEC_VERSION 1 +#define VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME "VK_EXT_shader_long_vector" +typedef struct VkPhysicalDeviceShaderLongVectorFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 longVector; +} VkPhysicalDeviceShaderLongVectorFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderLongVectorPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxVectorComponents; +} VkPhysicalDeviceShaderLongVectorPropertiesEXT; + + + +// VK_SEC_pipeline_cache_incremental_mode is a preprocessor guard. Do not pass it to API calls. +#define VK_SEC_pipeline_cache_incremental_mode 1 +#define VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_SPEC_VERSION 1 +#define VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_EXTENSION_NAME "VK_SEC_pipeline_cache_incremental_mode" +typedef struct VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC { + VkStructureType sType; + void* pNext; + VkBool32 pipelineCacheIncrementalMode; +} VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + + + +// VK_EXT_shader_uniform_buffer_unsized_array is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_uniform_buffer_unsized_array 1 +#define VK_EXT_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_SPEC_VERSION 1 +#define VK_EXT_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_EXTENSION_NAME "VK_EXT_shader_uniform_buffer_unsized_array" +typedef struct VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderUniformBufferUnsizedArray; +} VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT; + + + +// VK_NV_compute_occupancy_priority is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_compute_occupancy_priority 1 +#define VK_NV_COMPUTE_OCCUPANCY_PRIORITY_SPEC_VERSION 1 +#define VK_NV_COMPUTE_OCCUPANCY_PRIORITY_EXTENSION_NAME "VK_NV_compute_occupancy_priority" +#define VK_COMPUTE_OCCUPANCY_PRIORITY_LOW_NV 0.25f +#define VK_COMPUTE_OCCUPANCY_PRIORITY_NORMAL_NV 0.50f +#define VK_COMPUTE_OCCUPANCY_PRIORITY_HIGH_NV 0.75f +typedef struct VkComputeOccupancyPriorityParametersNV { + VkStructureType sType; + const void* pNext; + float occupancyPriority; + float occupancyThrottling; +} VkComputeOccupancyPriorityParametersNV; + +typedef struct VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 computeOccupancyPriority; +} VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetComputeOccupancyPriorityNV)(VkCommandBuffer commandBuffer, const VkComputeOccupancyPriorityParametersNV* pParameters); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetComputeOccupancyPriorityNV( + VkCommandBuffer commandBuffer, + const VkComputeOccupancyPriorityParametersNV* pParameters); +#endif +#endif + + +// VK_EXT_shader_subgroup_partitioned is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_subgroup_partitioned 1 +#define VK_EXT_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_EXT_shader_subgroup_partitioned" +typedef struct VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupPartitioned; +} VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT; + + + +// VK_KHR_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_acceleration_structure 1 +#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13 +#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure" + +typedef enum VkBuildAccelerationStructureModeKHR { + VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkBuildAccelerationStructureModeKHR; + +typedef enum VkAccelerationStructureCreateFlagBitsKHR { + VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 0x00000001, + VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008, + VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = 0x00000004, + VK_ACCELERATION_STRUCTURE_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureCreateFlagBitsKHR; +typedef VkFlags VkAccelerationStructureCreateFlagsKHR; +typedef struct VkAccelerationStructureBuildRangeInfoKHR { + uint32_t primitiveCount; + uint32_t primitiveOffset; + uint32_t firstVertex; + uint32_t transformOffset; +} VkAccelerationStructureBuildRangeInfoKHR; + +typedef struct VkAccelerationStructureGeometryTrianglesDataKHR { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + uint32_t maxVertex; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceOrHostAddressConstKHR transformData; +} VkAccelerationStructureGeometryTrianglesDataKHR; + +typedef struct VkAccelerationStructureGeometryAabbsDataKHR { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR data; + VkDeviceSize stride; +} VkAccelerationStructureGeometryAabbsDataKHR; + +typedef struct VkAccelerationStructureGeometryInstancesDataKHR { + VkStructureType sType; + const void* pNext; + VkBool32 arrayOfPointers; + VkDeviceOrHostAddressConstKHR data; +} VkAccelerationStructureGeometryInstancesDataKHR; + +typedef union VkAccelerationStructureGeometryDataKHR { + VkAccelerationStructureGeometryTrianglesDataKHR triangles; + VkAccelerationStructureGeometryAabbsDataKHR aabbs; + VkAccelerationStructureGeometryInstancesDataKHR instances; +} VkAccelerationStructureGeometryDataKHR; + +typedef struct VkAccelerationStructureGeometryKHR { + VkStructureType sType; + const void* pNext; + VkGeometryTypeKHR geometryType; + VkAccelerationStructureGeometryDataKHR geometry; + VkGeometryFlagsKHR flags; +} VkAccelerationStructureGeometryKHR; + +typedef struct VkAccelerationStructureBuildGeometryInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureTypeKHR type; + VkBuildAccelerationStructureFlagsKHR flags; + VkBuildAccelerationStructureModeKHR mode; + VkAccelerationStructureKHR srcAccelerationStructure; + VkAccelerationStructureKHR dstAccelerationStructure; + uint32_t geometryCount; + const VkAccelerationStructureGeometryKHR* pGeometries; + const VkAccelerationStructureGeometryKHR* const* ppGeometries; + VkDeviceOrHostAddressKHR scratchData; +} VkAccelerationStructureBuildGeometryInfoKHR; + +typedef struct VkAccelerationStructureCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureCreateFlagsKHR createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkAccelerationStructureTypeKHR type; + VkDeviceAddress deviceAddress; +} VkAccelerationStructureCreateInfoKHR; + +typedef struct VkWriteDescriptorSetAccelerationStructureKHR { + VkStructureType sType; + const void* pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureKHR* pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureKHR; + +typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 accelerationStructure; + VkBool32 accelerationStructureCaptureReplay; + VkBool32 accelerationStructureIndirectBuild; + VkBool32 accelerationStructureHostCommands; + VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind; +} VkPhysicalDeviceAccelerationStructureFeaturesKHR; + +typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR { + VkStructureType sType; + void* pNext; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxPrimitiveCount; + uint32_t maxPerStageDescriptorAccelerationStructures; + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures; + uint32_t maxDescriptorSetAccelerationStructures; + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures; + uint32_t minAccelerationStructureScratchOffsetAlignment; +} VkPhysicalDeviceAccelerationStructurePropertiesKHR; + +typedef struct VkAccelerationStructureDeviceAddressInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR accelerationStructure; +} VkAccelerationStructureDeviceAddressInfoKHR; + +typedef struct VkAccelerationStructureVersionInfoKHR { + VkStructureType sType; + const void* pNext; + const uint8_t* pVersionData; +} VkAccelerationStructureVersionInfoKHR; + +typedef struct VkCopyAccelerationStructureToMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR src; + VkDeviceOrHostAddressKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureToMemoryInfoKHR; + +typedef struct VkCopyMemoryToAccelerationStructureInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyMemoryToAccelerationStructureInfoKHR; + +typedef struct VkCopyAccelerationStructureInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure); +typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress* pIndirectDeviceAddresses, const uint32_t* pIndirectStrides, const uint32_t* const* ppMaxPrimitiveCounts); +typedef VkResult (VKAPI_PTR *PFN_vkBuildAccelerationStructuresKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (VKAPI_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionInfoKHR* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); +typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureBuildSizesKHR)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR( + VkDevice device, + const VkAccelerationStructureCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureKHR* pAccelerationStructure); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureKHR( + VkDevice device, + VkAccelerationStructureKHR accelerationStructure, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresKHR( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresIndirectKHR( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkDeviceAddress* pIndirectDeviceAddresses, + const uint32_t* pIndirectStrides, + const uint32_t* const* ppMaxPrimitiveCounts); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBuildAccelerationStructuresKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureToMemoryKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToAccelerationStructureKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWriteAccelerationStructuresPropertiesKHR( + VkDevice device, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR* pAccelerationStructures, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureKHR( + VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureToMemoryKHR( + VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToAccelerationStructureKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetAccelerationStructureDeviceAddressKHR( + VkDevice device, + const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesKHR( + VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceAccelerationStructureCompatibilityKHR( + VkDevice device, + const VkAccelerationStructureVersionInfoKHR* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureBuildSizesKHR( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, + const uint32_t* pMaxPrimitiveCounts, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +#endif +#endif + + +// VK_KHR_ray_tracing_pipeline is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_tracing_pipeline 1 +#define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline" + +typedef enum VkShaderGroupShaderKHR { + VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0, + VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1, + VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2, + VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3, + VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR = 0x7FFFFFFF +} VkShaderGroupShaderKHR; +typedef struct VkRayTracingShaderGroupCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; + const void* pShaderGroupCaptureReplayHandle; +} VkRayTracingShaderGroupCreateInfoKHR; + +typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxPipelineRayPayloadSize; + uint32_t maxPipelineRayHitAttributeSize; +} VkRayTracingPipelineInterfaceCreateInfoKHR; + +typedef struct VkRayTracingPipelineCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoKHR* pGroups; + uint32_t maxPipelineRayRecursionDepth; + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; + const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface; + const VkPipelineDynamicStateCreateInfo* pDynamicState; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingPipeline; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed; + VkBool32 rayTracingPipelineTraceRaysIndirect; + VkBool32 rayTraversalPrimitiveCulling; +} VkPhysicalDeviceRayTracingPipelineFeaturesKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRayRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint32_t shaderGroupHandleCaptureReplaySize; + uint32_t maxRayDispatchInvocationCount; + uint32_t shaderGroupHandleAlignment; + uint32_t maxRayHitAttributeSize; +} VkPhysicalDeviceRayTracingPipelinePropertiesKHR; + +typedef struct VkTraceRaysIndirectCommandKHR { + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommandKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); +typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress); +typedef VkDeviceSize (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupStackSizeKHR)(VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader); +typedef void (VKAPI_PTR *PFN_vkCmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysKHR( + VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirectKHR( + VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceSize VKAPI_CALL vkGetRayTracingShaderGroupStackSizeKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t group, + VkShaderGroupShaderKHR groupShader); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRayTracingPipelineStackSizeKHR( + VkCommandBuffer commandBuffer, + uint32_t pipelineStackSize); +#endif +#endif + + +// VK_KHR_ray_query is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_query 1 +#define VK_KHR_RAY_QUERY_SPEC_VERSION 1 +#define VK_KHR_RAY_QUERY_EXTENSION_NAME "VK_KHR_ray_query" +typedef struct VkPhysicalDeviceRayQueryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayQuery; +} VkPhysicalDeviceRayQueryFeaturesKHR; + + + +// VK_EXT_mesh_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_mesh_shader 1 +#define VK_EXT_MESH_SHADER_SPEC_VERSION 1 +#define VK_EXT_MESH_SHADER_EXTENSION_NAME "VK_EXT_mesh_shader" +typedef struct VkPhysicalDeviceMeshShaderFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 taskShader; + VkBool32 meshShader; + VkBool32 multiviewMeshShader; + VkBool32 primitiveFragmentShadingRateMeshShader; + VkBool32 meshShaderQueries; +} VkPhysicalDeviceMeshShaderFeaturesEXT; + +typedef struct VkPhysicalDeviceMeshShaderPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxTaskWorkGroupTotalCount; + uint32_t maxTaskWorkGroupCount[3]; + uint32_t maxTaskWorkGroupInvocations; + uint32_t maxTaskWorkGroupSize[3]; + uint32_t maxTaskPayloadSize; + uint32_t maxTaskSharedMemorySize; + uint32_t maxTaskPayloadAndSharedMemorySize; + uint32_t maxMeshWorkGroupTotalCount; + uint32_t maxMeshWorkGroupCount[3]; + uint32_t maxMeshWorkGroupInvocations; + uint32_t maxMeshWorkGroupSize[3]; + uint32_t maxMeshSharedMemorySize; + uint32_t maxMeshPayloadAndSharedMemorySize; + uint32_t maxMeshOutputMemorySize; + uint32_t maxMeshPayloadAndOutputMemorySize; + uint32_t maxMeshOutputComponents; + uint32_t maxMeshOutputVertices; + uint32_t maxMeshOutputPrimitives; + uint32_t maxMeshOutputLayers; + uint32_t maxMeshMultiviewViewCount; + uint32_t meshOutputPerVertexGranularity; + uint32_t meshOutputPerPrimitiveGranularity; + uint32_t maxPreferredTaskWorkGroupInvocations; + uint32_t maxPreferredMeshWorkGroupInvocations; + VkBool32 prefersLocalInvocationVertexOutput; + VkBool32 prefersLocalInvocationPrimitiveOutput; + VkBool32 prefersCompactVertexOutput; + VkBool32 prefersCompactPrimitiveOutput; +} VkPhysicalDeviceMeshShaderPropertiesEXT; + +typedef struct VkDrawMeshTasksIndirectCommandEXT { + uint32_t groupCountX; + uint32_t groupCountY; + uint32_t groupCountZ; +} VkDrawMeshTasksIndirectCommandEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksEXT)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectEXT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountEXT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksEXT( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectEXT( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountEXT( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_directfb.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_directfb.h new file mode 100644 index 000000000..b96e957e1 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_directfb.h @@ -0,0 +1,59 @@ +#ifndef VULKAN_DIRECTFB_H_ +#define VULKAN_DIRECTFB_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_EXT_directfb_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_directfb_surface 1 +#define VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION 1 +#define VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME "VK_EXT_directfb_surface" +typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; +typedef struct VkDirectFBSurfaceCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDirectFBSurfaceCreateFlagsEXT flags; + IDirectFB* dfb; + IDirectFBSurface* surface; +} VkDirectFBSurfaceCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( + VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + IDirectFB* dfb); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_fuchsia.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_fuchsia.h new file mode 100644 index 000000000..ccca6271f --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_fuchsia.h @@ -0,0 +1,282 @@ +#ifndef VULKAN_FUCHSIA_H_ +#define VULKAN_FUCHSIA_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_FUCHSIA_imagepipe_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_imagepipe_surface 1 +#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1 +#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface" +typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; +typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkImagePipeSurfaceCreateFlagsFUCHSIA flags; + zx_handle_t imagePipeHandle; +} VkImagePipeSurfaceCreateInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( + VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_FUCHSIA_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_external_memory 1 +#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory" +typedef struct VkImportMemoryZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + zx_handle_t handle; +} VkImportMemoryZirconHandleInfoFUCHSIA; + +typedef struct VkMemoryZirconHandlePropertiesFUCHSIA { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryZirconHandlePropertiesFUCHSIA; + +typedef struct VkMemoryGetZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetZirconHandleInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( + VkDevice device, + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); +#endif +#endif + + +// VK_FUCHSIA_external_semaphore is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_external_semaphore 1 +#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 +#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore" +typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + zx_handle_t zirconHandle; +} VkImportSemaphoreZirconHandleInfoFUCHSIA; + +typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetZirconHandleInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( + VkDevice device, + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( + VkDevice device, + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle); +#endif +#endif + + +// VK_FUCHSIA_buffer_collection is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_buffer_collection 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA) +#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 2 +#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection" +typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA; + +typedef enum VkImageConstraintsInfoFlagBitsFUCHSIA { + VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA = 0x00000001, + VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA = 0x00000002, + VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA = 0x00000004, + VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA = 0x00000008, + VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA = 0x00000010, + VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIA = 0x7FFFFFFF +} VkImageConstraintsInfoFlagBitsFUCHSIA; +typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA; +typedef struct VkBufferCollectionCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + zx_handle_t collectionToken; +} VkBufferCollectionCreateInfoFUCHSIA; + +typedef struct VkImportMemoryBufferCollectionFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkImportMemoryBufferCollectionFUCHSIA; + +typedef struct VkBufferCollectionImageCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkBufferCollectionImageCreateInfoFUCHSIA; + +typedef struct VkBufferCollectionConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + uint32_t minBufferCount; + uint32_t maxBufferCount; + uint32_t minBufferCountForCamping; + uint32_t minBufferCountForDedicatedSlack; + uint32_t minBufferCountForSharedSlack; +} VkBufferCollectionConstraintsInfoFUCHSIA; + +typedef struct VkBufferConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCreateInfo createInfo; + VkFormatFeatureFlags requiredFormatFeatures; + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; +} VkBufferConstraintsInfoFUCHSIA; + +typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkBufferCollectionBufferCreateInfoFUCHSIA; + +typedef struct VkSysmemColorSpaceFUCHSIA { + VkStructureType sType; + const void* pNext; + uint32_t colorSpace; +} VkSysmemColorSpaceFUCHSIA; + +typedef struct VkBufferCollectionPropertiesFUCHSIA { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; + uint32_t bufferCount; + uint32_t createInfoIndex; + uint64_t sysmemPixelFormat; + VkFormatFeatureFlags formatFeatures; + VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkBufferCollectionPropertiesFUCHSIA; + +typedef struct VkImageFormatConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkImageCreateInfo imageCreateInfo; + VkFormatFeatureFlags requiredFormatFeatures; + VkImageFormatConstraintsFlagsFUCHSIA flags; + uint64_t sysmemPixelFormat; + uint32_t colorSpaceCount; + const VkSysmemColorSpaceFUCHSIA* pColorSpaces; +} VkImageFormatConstraintsInfoFUCHSIA; + +typedef struct VkImageConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + uint32_t formatConstraintsCount; + const VkImageFormatConstraintsInfoFUCHSIA* pFormatConstraints; + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; + VkImageConstraintsInfoFlagsFUCHSIA flags; +} VkImageConstraintsInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection); +typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); +typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); +typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA( + VkDevice device, + const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBufferCollectionFUCHSIA* pCollection); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + VkBufferCollectionPropertiesFUCHSIA* pProperties); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ggp.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ggp.h new file mode 100644 index 000000000..f8a48ec87 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ggp.h @@ -0,0 +1,62 @@ +#ifndef VULKAN_GGP_H_ +#define VULKAN_GGP_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_GGP_stream_descriptor_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_GGP_stream_descriptor_surface 1 +#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1 +#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface" +typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; +typedef struct VkStreamDescriptorSurfaceCreateInfoGGP { + VkStructureType sType; + const void* pNext; + VkStreamDescriptorSurfaceCreateFlagsGGP flags; + GgpStreamDescriptor streamDescriptor; +} VkStreamDescriptorSurfaceCreateInfoGGP; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( + VkInstance instance, + const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_GGP_frame_token is a preprocessor guard. Do not pass it to API calls. +#define VK_GGP_frame_token 1 +#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1 +#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token" +typedef struct VkPresentFrameTokenGGP { + VkStructureType sType; + const void* pNext; + GgpFrameToken frameToken; +} VkPresentFrameTokenGGP; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ios.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ios.h new file mode 100644 index 000000000..089991a4f --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ios.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_IOS_H_ +#define VULKAN_IOS_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_MVK_ios_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_MVK_ios_surface 1 +#define VK_MVK_IOS_SURFACE_SPEC_VERSION 3 +#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface" +typedef VkFlags VkIOSSurfaceCreateFlagsMVK; +typedef struct VkIOSSurfaceCreateInfoMVK { + VkStructureType sType; + const void* pNext; + VkIOSSurfaceCreateFlagsMVK flags; + const void* pView; +} VkIOSSurfaceCreateInfoMVK; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( + VkInstance instance, + const VkIOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_macos.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_macos.h new file mode 100644 index 000000000..7d5d8a1b3 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_macos.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_MACOS_H_ +#define VULKAN_MACOS_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_MVK_macos_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_MVK_macos_surface 1 +#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 3 +#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" +typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; +typedef struct VkMacOSSurfaceCreateInfoMVK { + VkStructureType sType; + const void* pNext; + VkMacOSSurfaceCreateFlagsMVK flags; + const void* pView; +} VkMacOSSurfaceCreateInfoMVK; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( + VkInstance instance, + const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_metal.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_metal.h new file mode 100644 index 000000000..501c36388 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_metal.h @@ -0,0 +1,244 @@ +#ifndef VULKAN_METAL_H_ +#define VULKAN_METAL_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_EXT_metal_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_metal_surface 1 +#ifdef __OBJC__ +@class CAMetalLayer; +#else +typedef void CAMetalLayer; +#endif + +#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1 +#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface" +typedef VkFlags VkMetalSurfaceCreateFlagsEXT; +typedef struct VkMetalSurfaceCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkMetalSurfaceCreateFlagsEXT flags; + const CAMetalLayer* pLayer; +} VkMetalSurfaceCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( + VkInstance instance, + const VkMetalSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_EXT_metal_objects is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_metal_objects 1 +#ifdef __OBJC__ +@protocol MTLDevice; +typedef __unsafe_unretained id MTLDevice_id; +#else +typedef void* MTLDevice_id; +#endif + +#ifdef __OBJC__ +@protocol MTLCommandQueue; +typedef __unsafe_unretained id MTLCommandQueue_id; +#else +typedef void* MTLCommandQueue_id; +#endif + +#ifdef __OBJC__ +@protocol MTLBuffer; +typedef __unsafe_unretained id MTLBuffer_id; +#else +typedef void* MTLBuffer_id; +#endif + +#ifdef __OBJC__ +@protocol MTLTexture; +typedef __unsafe_unretained id MTLTexture_id; +#else +typedef void* MTLTexture_id; +#endif + +typedef struct __IOSurface* IOSurfaceRef; +#ifdef __OBJC__ +@protocol MTLSharedEvent; +typedef __unsafe_unretained id MTLSharedEvent_id; +#else +typedef void* MTLSharedEvent_id; +#endif + +#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 2 +#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects" + +typedef enum VkExportMetalObjectTypeFlagBitsEXT { + VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020, + VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkExportMetalObjectTypeFlagBitsEXT; +typedef VkFlags VkExportMetalObjectTypeFlagsEXT; +typedef struct VkExportMetalObjectCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkExportMetalObjectTypeFlagBitsEXT exportObjectType; +} VkExportMetalObjectCreateInfoEXT; + +typedef struct VkExportMetalObjectsInfoEXT { + VkStructureType sType; + const void* pNext; +} VkExportMetalObjectsInfoEXT; + +typedef struct VkExportMetalDeviceInfoEXT { + VkStructureType sType; + const void* pNext; + MTLDevice_id mtlDevice; +} VkExportMetalDeviceInfoEXT; + +typedef struct VkExportMetalCommandQueueInfoEXT { + VkStructureType sType; + const void* pNext; + VkQueue queue; + MTLCommandQueue_id mtlCommandQueue; +} VkExportMetalCommandQueueInfoEXT; + +typedef struct VkExportMetalBufferInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + MTLBuffer_id mtlBuffer; +} VkExportMetalBufferInfoEXT; + +typedef struct VkImportMetalBufferInfoEXT { + VkStructureType sType; + const void* pNext; + MTLBuffer_id mtlBuffer; +} VkImportMetalBufferInfoEXT; + +typedef struct VkExportMetalTextureInfoEXT { + VkStructureType sType; + const void* pNext; + VkImage image; + VkImageView imageView; + VkBufferView bufferView; + VkImageAspectFlagBits plane; + MTLTexture_id mtlTexture; +} VkExportMetalTextureInfoEXT; + +typedef struct VkImportMetalTextureInfoEXT { + VkStructureType sType; + const void* pNext; + VkImageAspectFlagBits plane; + MTLTexture_id mtlTexture; +} VkImportMetalTextureInfoEXT; + +typedef struct VkExportMetalIOSurfaceInfoEXT { + VkStructureType sType; + const void* pNext; + VkImage image; + IOSurfaceRef ioSurface; +} VkExportMetalIOSurfaceInfoEXT; + +typedef struct VkImportMetalIOSurfaceInfoEXT { + VkStructureType sType; + const void* pNext; + IOSurfaceRef ioSurface; +} VkImportMetalIOSurfaceInfoEXT; + +typedef struct VkExportMetalSharedEventInfoEXT { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkEvent event; + MTLSharedEvent_id mtlSharedEvent; +} VkExportMetalSharedEventInfoEXT; + +typedef struct VkImportMetalSharedEventInfoEXT { + VkStructureType sType; + const void* pNext; + MTLSharedEvent_id mtlSharedEvent; +} VkImportMetalSharedEventInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT( + VkDevice device, + VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); +#endif +#endif + + +// VK_EXT_external_memory_metal is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_metal 1 +#define VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_METAL_EXTENSION_NAME "VK_EXT_external_memory_metal" +typedef struct VkImportMemoryMetalHandleInfoEXT { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + void* handle; +} VkImportMemoryMetalHandleInfoEXT; + +typedef struct VkMemoryMetalHandlePropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryMetalHandlePropertiesEXT; + +typedef struct VkMemoryGetMetalHandleInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetMetalHandleInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandleEXT)(VkDevice device, const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, void** pHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandlePropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHandle, VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandleEXT( + VkDevice device, + const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, + void** pHandle); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHandle, + VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ohos.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ohos.h new file mode 100644 index 000000000..3bde0114f --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_ohos.h @@ -0,0 +1,120 @@ +#ifndef VULKAN_OHOS_H_ +#define VULKAN_OHOS_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_OHOS_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_OHOS_external_memory 1 +struct OH_NativeBuffer; +#define VK_OHOS_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_OHOS_EXTERNAL_MEMORY_EXTENSION_NAME "VK_OHOS_external_memory" +typedef struct VkNativeBufferUsageOHOS { + VkStructureType sType; + void* pNext; + uint64_t OHOSNativeBufferUsage; +} VkNativeBufferUsageOHOS; + +typedef struct VkNativeBufferPropertiesOHOS { + VkStructureType sType; + void* pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkNativeBufferPropertiesOHOS; + +typedef struct VkNativeBufferFormatPropertiesOHOS { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkNativeBufferFormatPropertiesOHOS; + +typedef struct VkImportNativeBufferInfoOHOS { + VkStructureType sType; + const void* pNext; + struct OH_NativeBuffer* buffer; +} VkImportNativeBufferInfoOHOS; + +typedef struct VkMemoryGetNativeBufferInfoOHOS { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkMemoryGetNativeBufferInfoOHOS; + +typedef struct VkExternalFormatOHOS { + VkStructureType sType; + void* pNext; + uint64_t externalFormat; +} VkExternalFormatOHOS; + +typedef VkResult (VKAPI_PTR *PFN_vkGetNativeBufferPropertiesOHOS)(VkDevice device, const struct OH_NativeBuffer* buffer, VkNativeBufferPropertiesOHOS* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryNativeBufferOHOS)(VkDevice device, const VkMemoryGetNativeBufferInfoOHOS* pInfo, struct OH_NativeBuffer** pBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetNativeBufferPropertiesOHOS( + VkDevice device, + const struct OH_NativeBuffer* buffer, + VkNativeBufferPropertiesOHOS* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryNativeBufferOHOS( + VkDevice device, + const VkMemoryGetNativeBufferInfoOHOS* pInfo, + struct OH_NativeBuffer** pBuffer); +#endif +#endif + + +// VK_OHOS_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_OHOS_surface 1 +typedef struct NativeWindow OHNativeWindow; +#define VK_OHOS_SURFACE_SPEC_VERSION 1 +#define VK_OHOS_SURFACE_EXTENSION_NAME "VK_OHOS_surface" +typedef VkFlags VkSurfaceCreateFlagsOHOS; +typedef struct VkSurfaceCreateInfoOHOS { + VkStructureType sType; + const void* pNext; + VkSurfaceCreateFlagsOHOS flags; + OHNativeWindow* window; +} VkSurfaceCreateInfoOHOS; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSurfaceOHOS)(VkInstance instance, const VkSurfaceCreateInfoOHOS* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSurfaceOHOS( + VkInstance instance, + const VkSurfaceCreateInfoOHOS* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_screen.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_screen.h new file mode 100644 index 000000000..15e9d0902 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_screen.h @@ -0,0 +1,114 @@ +#ifndef VULKAN_SCREEN_H_ +#define VULKAN_SCREEN_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_QNX_screen_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_QNX_screen_surface 1 +#define VK_QNX_SCREEN_SURFACE_SPEC_VERSION 1 +#define VK_QNX_SCREEN_SURFACE_EXTENSION_NAME "VK_QNX_screen_surface" +typedef VkFlags VkScreenSurfaceCreateFlagsQNX; +typedef struct VkScreenSurfaceCreateInfoQNX { + VkStructureType sType; + const void* pNext; + VkScreenSurfaceCreateFlagsQNX flags; + struct _screen_context* context; + struct _screen_window* window; +} VkScreenSurfaceCreateInfoQNX; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance, const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( + VkInstance instance, + const VkScreenSurfaceCreateInfoQNX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct _screen_window* window); +#endif +#endif + + +// VK_QNX_external_memory_screen_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_QNX_external_memory_screen_buffer 1 +#define VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_SPEC_VERSION 1 +#define VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_EXTENSION_NAME "VK_QNX_external_memory_screen_buffer" +typedef struct VkScreenBufferPropertiesQNX { + VkStructureType sType; + void* pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkScreenBufferPropertiesQNX; + +typedef struct VkScreenBufferFormatPropertiesQNX { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + uint64_t screenUsage; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkScreenBufferFormatPropertiesQNX; + +typedef struct VkImportScreenBufferInfoQNX { + VkStructureType sType; + const void* pNext; + struct _screen_buffer* buffer; +} VkImportScreenBufferInfoQNX; + +typedef struct VkExternalFormatQNX { + VkStructureType sType; + void* pNext; + uint64_t externalFormat; +} VkExternalFormatQNX; + +typedef struct VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX { + VkStructureType sType; + void* pNext; + VkBool32 screenBufferImport; +} VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + +typedef VkResult (VKAPI_PTR *PFN_vkGetScreenBufferPropertiesQNX)(VkDevice device, const struct _screen_buffer* buffer, VkScreenBufferPropertiesQNX* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetScreenBufferPropertiesQNX( + VkDevice device, + const struct _screen_buffer* buffer, + VkScreenBufferPropertiesQNX* pProperties); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_vi.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_vi.h new file mode 100644 index 000000000..97d1a3c5f --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_vi.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_VI_H_ +#define VULKAN_VI_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_NN_vi_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_NN_vi_surface 1 +#define VK_NN_VI_SURFACE_SPEC_VERSION 1 +#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface" +typedef VkFlags VkViSurfaceCreateFlagsNN; +typedef struct VkViSurfaceCreateInfoNN { + VkStructureType sType; + const void* pNext; + VkViSurfaceCreateFlagsNN flags; + void* window; +} VkViSurfaceCreateInfoNN; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( + VkInstance instance, + const VkViSurfaceCreateInfoNN* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_wayland.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_wayland.h new file mode 100644 index 000000000..41025db43 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_wayland.h @@ -0,0 +1,59 @@ +#ifndef VULKAN_WAYLAND_H_ +#define VULKAN_WAYLAND_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_wayland_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_wayland_surface 1 +#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6 +#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface" +typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; +typedef struct VkWaylandSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkWaylandSurfaceCreateFlagsKHR flags; + struct wl_display* display; + struct wl_surface* surface; +} VkWaylandSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( + VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display* display); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_win32.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_win32.h new file mode 100644 index 000000000..5c7e8bd6d --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_win32.h @@ -0,0 +1,372 @@ +#ifndef VULKAN_WIN32_H_ +#define VULKAN_WIN32_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_win32_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_win32_surface 1 +#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6 +#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface" +typedef VkFlags VkWin32SurfaceCreateFlagsKHR; +typedef struct VkWin32SurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkWin32SurfaceCreateFlagsKHR flags; + HINSTANCE hinstance; + HWND hwnd; +} VkWin32SurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( + VkInstance instance, + const VkWin32SurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex); +#endif +#endif + + +// VK_KHR_external_memory_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory_win32 1 +#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32" +typedef struct VkImportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportMemoryWin32HandleInfoKHR; + +typedef struct VkExportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportMemoryWin32HandleInfoKHR; + +typedef struct VkMemoryWin32HandlePropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryWin32HandlePropertiesKHR; + +typedef struct VkMemoryGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetWin32HandleInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( + VkDevice device, + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); +#endif +#endif + + +// VK_KHR_win32_keyed_mutex is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_win32_keyed_mutex 1 +#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1 +#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex" +typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t acquireCount; + const VkDeviceMemory* pAcquireSyncs; + const uint64_t* pAcquireKeys; + const uint32_t* pAcquireTimeouts; + uint32_t releaseCount; + const VkDeviceMemory* pReleaseSyncs; + const uint64_t* pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoKHR; + + + +// VK_KHR_external_semaphore_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore_win32 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32" +typedef struct VkImportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportSemaphoreWin32HandleInfoKHR; + +typedef struct VkExportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportSemaphoreWin32HandleInfoKHR; + +typedef struct VkD3D12FenceSubmitInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreValuesCount; + const uint64_t* pWaitSemaphoreValues; + uint32_t signalSemaphoreValuesCount; + const uint64_t* pSignalSemaphoreValues; +} VkD3D12FenceSubmitInfoKHR; + +typedef struct VkSemaphoreGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetWin32HandleInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( + VkDevice device, + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( + VkDevice device, + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif +#endif + + +// VK_KHR_external_fence_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence_win32 1 +#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32" +typedef struct VkImportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkFenceImportFlags flags; + VkExternalFenceHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportFenceWin32HandleInfoKHR; + +typedef struct VkExportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportFenceWin32HandleInfoKHR; + +typedef struct VkFenceGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBits handleType; +} VkFenceGetWin32HandleInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( + VkDevice device, + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( + VkDevice device, + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif +#endif + + +// VK_NV_external_memory_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory_win32 1 +#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32" +typedef struct VkImportMemoryWin32HandleInfoNV { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsNV handleType; + HANDLE handle; +} VkImportMemoryWin32HandleInfoNV; + +typedef struct VkExportMemoryWin32HandleInfoNV { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; +} VkExportMemoryWin32HandleInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( + VkDevice device, + VkDeviceMemory memory, + VkExternalMemoryHandleTypeFlagsNV handleType, + HANDLE* pHandle); +#endif +#endif + + +// VK_NV_win32_keyed_mutex is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_win32_keyed_mutex 1 +#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2 +#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex" +typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t acquireCount; + const VkDeviceMemory* pAcquireSyncs; + const uint64_t* pAcquireKeys; + const uint32_t* pAcquireTimeoutMilliseconds; + uint32_t releaseCount; + const VkDeviceMemory* pReleaseSyncs; + const uint64_t* pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoNV; + + + +// VK_EXT_full_screen_exclusive is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_full_screen_exclusive 1 +#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4 +#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive" + +typedef enum VkFullScreenExclusiveEXT { + VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0, + VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1, + VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2, + VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3, + VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkFullScreenExclusiveEXT; +typedef struct VkSurfaceFullScreenExclusiveInfoEXT { + VkStructureType sType; + void* pNext; + VkFullScreenExclusiveEXT fullScreenExclusive; +} VkSurfaceFullScreenExclusiveInfoEXT; + +typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT { + VkStructureType sType; + void* pNext; + VkBool32 fullScreenExclusiveSupported; +} VkSurfaceCapabilitiesFullScreenExclusiveEXT; + +typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT { + VkStructureType sType; + const void* pNext; + HMONITOR hmonitor; +} VkSurfaceFullScreenExclusiveWin32InfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); +typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes); +#endif +#endif + + +// VK_NV_acquire_winrt_display is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_acquire_winrt_display 1 +#define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1 +#define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display" +typedef VkResult (VKAPI_PTR *PFN_vkAcquireWinrtDisplayNV)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); +typedef VkResult (VKAPI_PTR *PFN_vkGetWinrtDisplayNV)(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + uint32_t deviceRelativeId, + VkDisplayKHR* pDisplay); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xcb.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xcb.h new file mode 100644 index 000000000..473f8c288 --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xcb.h @@ -0,0 +1,60 @@ +#ifndef VULKAN_XCB_H_ +#define VULKAN_XCB_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_xcb_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_xcb_surface 1 +#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 +#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface" +typedef VkFlags VkXcbSurfaceCreateFlagsKHR; +typedef struct VkXcbSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkXcbSurfaceCreateFlagsKHR flags; + xcb_connection_t* connection; + xcb_window_t window; +} VkXcbSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( + VkInstance instance, + const VkXcbSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t* connection, + xcb_visualid_t visual_id); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xlib.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xlib.h new file mode 100644 index 000000000..dfd107c3e --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xlib.h @@ -0,0 +1,60 @@ +#ifndef VULKAN_XLIB_H_ +#define VULKAN_XLIB_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_xlib_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_xlib_surface 1 +#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 +#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface" +typedef VkFlags VkXlibSurfaceCreateFlagsKHR; +typedef struct VkXlibSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkXlibSurfaceCreateFlagsKHR flags; + Display* dpy; + Window window; +} VkXlibSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( + VkInstance instance, + const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xlib_xrandr.h b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xlib_xrandr.h new file mode 100644 index 000000000..a272e246c --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/include/vulkan/vulkan_xlib_xrandr.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_XLIB_XRANDR_H_ +#define VULKAN_XLIB_XRANDR_H_ 1 + +/* +** Copyright 2015-2026 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_EXT_acquire_xlib_display is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_acquire_xlib_display 1 +#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1 +#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display" +typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display); +typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( + VkPhysicalDevice physicalDevice, + Display* dpy, + VkDisplayKHR display); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( + VkPhysicalDevice physicalDevice, + Display* dpy, + RROutput rrOutput, + VkDisplayKHR* pDisplay); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/registry/vk.xml b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/registry/vk.xml new file mode 100755 index 000000000..249a18aaf --- /dev/null +++ b/tools/vkbridge/third_party/Vulkan-Headers-1.4.341/registry/vk.xml @@ -0,0 +1,33264 @@ + + + +Copyright 2015-2026 The Khronos Group Inc. + +SPDX-License-Identifier: Apache-2.0 OR MIT + + + +This file, vk.xml, is the Vulkan API Registry. It is a critically important +and normative part of the Vulkan Specification, including a canonical +machine-readable definition of the API, parameter and member validation +language incorporated into the Specification and reference pages, and other +material which is registered by Khronos, such as tags used by extension and +layer authors. The authoritative public version of vk.xml is maintained in +the default branch (currently named main) of the Khronos Vulkan GitHub +project. The authoritative private version is maintained in the default +branch of the member gitlab server. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #include "vk_platform.h" + + WSI extensions + + + + + + + + + + + + + + In the current header structure, each platform's interfaces + are confined to a platform-specific header (vulkan_xlib.h, + vulkan_win32.h, etc.). These headers are not self-contained, + and should not include native headers (X11/Xlib.h, + windows.h, etc.). Code should either include vulkan.h after + defining the appropriate VK_USE_PLATFORM_platform + macros, or include the required native headers prior to + explicitly including the corresponding platform header. + + To accomplish this, the dependencies of native types require + native headers, but the XML defines the content for those + native headers as empty. The actual native header includes + can be restored by modifying the native header tags above + to #include the header file in the 'name' attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#define VK_MAKE_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + +#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) + +#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) + +#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) + + #define VK_MAKE_API_VERSION(variant, major, minor, patch) \ + ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + #define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) + #define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU) + #define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) + #define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) + + // Vulkan SC variant number +#define VKSC_API_VARIANT 1 + + +//#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 + // Vulkan 1.0 version number +#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 + // Vulkan 1.1 version number +#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0 + // Vulkan 1.2 version number +#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0 + // Vulkan 1.3 version number +#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0 + // Vulkan 1.4 version number +#define VK_API_VERSION_1_4 VK_MAKE_API_VERSION(0, 1, 4, 0)// Patch version should always be set to 0 + // Vulkan SC 1.0 version number +#define VKSC_API_VERSION_1_0 VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, 0)// Patch version should always be set to 0 + + // Version of this file +#define VK_HEADER_VERSION 341 + // Complete version of this file +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) + // Version of this file +#define VK_HEADER_VERSION 20 + // Complete version of this file +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, VK_HEADER_VERSION) + + +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* (object); + + +#ifndef VK_USE_64_BIT_PTR_DEFINES + #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64) + #define VK_USE_64_BIT_PTR_DEFINES 1 + #else + #define VK_USE_64_BIT_PTR_DEFINES 0 + #endif +#endif + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) + #define VK_NULL_HANDLE nullptr + #else + #define VK_NULL_HANDLE ((void*)0) + #endif + #else + #define VK_NULL_HANDLE 0ULL + #endif +#endif +#ifndef VK_NULL_HANDLE + #define VK_NULL_HANDLE 0 +#endif + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; + #else + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; + #endif +#endif + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *(object); + #else + #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t (object); + #endif +#endif + + struct ANativeWindow; + struct AHardwareBuffer; + #ifdef __OBJC__ +@class CAMetalLayer; +#else +typedef void CAMetalLayer; +#endif + #ifdef __OBJC__ +@protocol MTLDevice; +typedef __unsafe_unretained id<MTLDevice> MTLDevice_id; +#else +typedef void* MTLDevice_id; +#endif + #ifdef __OBJC__ +@protocol MTLCommandQueue; +typedef __unsafe_unretained id<MTLCommandQueue> MTLCommandQueue_id; +#else +typedef void* MTLCommandQueue_id; +#endif + #ifdef __OBJC__ +@protocol MTLBuffer; +typedef __unsafe_unretained id<MTLBuffer> MTLBuffer_id; +#else +typedef void* MTLBuffer_id; +#endif + #ifdef __OBJC__ +@protocol MTLTexture; +typedef __unsafe_unretained id<MTLTexture> MTLTexture_id; +#else +typedef void* MTLTexture_id; +#endif + #ifdef __OBJC__ +@protocol MTLSharedEvent; +typedef __unsafe_unretained id<MTLSharedEvent> MTLSharedEvent_id; +#else +typedef void* MTLSharedEvent_id; +#endif + typedef struct __IOSurface* IOSurfaceRef; + + typedef uint32_t VkSampleMask; + typedef uint32_t VkBool32; + typedef uint32_t VkFlags; + typedef uint64_t VkFlags64; + typedef uint64_t VkDeviceSize; + typedef uint64_t VkDeviceAddress; + + typedef struct NativeWindow OHNativeWindow; + struct OHBufferHandle; + struct OH_NativeBuffer; + + Basic C types, pulled in via vk_platform.h + + + + + + + + + + + + + + + + Bitmask types + typedef VkFlags VkFramebufferCreateFlags; + typedef VkFlags VkQueryPoolCreateFlags; + typedef VkFlags VkRenderPassCreateFlags; + typedef VkFlags VkSamplerCreateFlags; + typedef VkFlags VkPipelineLayoutCreateFlags; + typedef VkFlags VkPipelineCacheCreateFlags; + typedef VkFlags VkPipelineDepthStencilStateCreateFlags; + typedef VkFlags VkPipelineDepthStencilStateCreateFlags; + typedef VkFlags VkPipelineDynamicStateCreateFlags; + typedef VkFlags VkPipelineColorBlendStateCreateFlags; + typedef VkFlags VkPipelineColorBlendStateCreateFlags; + typedef VkFlags VkPipelineMultisampleStateCreateFlags; + typedef VkFlags VkPipelineRasterizationStateCreateFlags; + typedef VkFlags VkPipelineViewportStateCreateFlags; + typedef VkFlags VkPipelineTessellationStateCreateFlags; + typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; + typedef VkFlags VkPipelineVertexInputStateCreateFlags; + typedef VkFlags VkPipelineShaderStageCreateFlags; + typedef VkFlags VkDescriptorSetLayoutCreateFlags; + typedef VkFlags VkBufferViewCreateFlags; + typedef VkFlags VkInstanceCreateFlags; + typedef VkFlags VkDeviceCreateFlags; + typedef VkFlags VkDeviceQueueCreateFlags; + typedef VkFlags VkQueueFlags; + typedef VkFlags VkMemoryPropertyFlags; + typedef VkFlags VkMemoryHeapFlags; + typedef VkFlags VkAccessFlags; + typedef VkFlags VkBufferUsageFlags; + typedef VkFlags VkBufferCreateFlags; + typedef VkFlags VkShaderStageFlags; + typedef VkFlags VkImageUsageFlags; + typedef VkFlags VkImageCreateFlags; + typedef VkFlags VkImageViewCreateFlags; + typedef VkFlags VkPipelineCreateFlags; + typedef VkFlags VkColorComponentFlags; + typedef VkFlags VkFenceCreateFlags; + typedef VkFlags VkSemaphoreCreateFlags; + typedef VkFlags VkFormatFeatureFlags; + typedef VkFlags VkQueryControlFlags; + typedef VkFlags VkQueryResultFlags; + typedef VkFlags VkShaderModuleCreateFlags; + typedef VkFlags VkEventCreateFlags; + typedef VkFlags VkCommandPoolCreateFlags; + typedef VkFlags VkCommandPoolResetFlags; + typedef VkFlags VkCommandBufferResetFlags; + typedef VkFlags VkCommandBufferUsageFlags; + typedef VkFlags VkQueryPipelineStatisticFlags; + typedef VkFlags VkMemoryMapFlags; + typedef VkFlags VkMemoryUnmapFlags; + + typedef VkFlags VkImageAspectFlags; + typedef VkFlags VkSparseMemoryBindFlags; + typedef VkFlags VkSparseImageFormatFlags; + typedef VkFlags VkSubpassDescriptionFlags; + typedef VkFlags VkPipelineStageFlags; + typedef VkFlags VkSampleCountFlags; + typedef VkFlags VkAttachmentDescriptionFlags; + typedef VkFlags VkStencilFaceFlags; + typedef VkFlags VkCullModeFlags; + typedef VkFlags VkDescriptorPoolCreateFlags; + typedef VkFlags VkDescriptorPoolResetFlags; + typedef VkFlags VkDependencyFlags; + typedef VkFlags VkSubgroupFeatureFlags; + typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; + typedef VkFlags VkIndirectStateFlagsNV; + typedef VkFlags VkGeometryFlagsKHR; + + typedef VkFlags VkGeometryInstanceFlagsKHR; + + typedef VkFlags VkClusterAccelerationStructureGeometryFlagsNV; + typedef VkFlags VkClusterAccelerationStructureClusterFlagsNV; + typedef VkFlags VkClusterAccelerationStructureAddressResolutionFlagsNV; + typedef VkFlags VkBuildAccelerationStructureFlagsKHR; + + typedef VkFlags VkPrivateDataSlotCreateFlags; + + typedef VkFlags VkAccelerationStructureCreateFlagsKHR; + typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; + + typedef VkFlags VkPipelineCreationFeedbackFlags; + + typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; + typedef VkFlags VkAcquireProfilingLockFlagsKHR; + typedef VkFlags VkSemaphoreWaitFlags; + + typedef VkFlags VkPipelineCompilerControlFlagsAMD; + typedef VkFlags VkShaderCorePropertiesFlagsAMD; + typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; + typedef VkFlags VkRefreshObjectFlagsKHR; + typedef VkFlags64 VkAccessFlags2; + + typedef VkFlags64 VkPipelineStageFlags2; + + typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV; + typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV; + typedef VkFlags64 VkFormatFeatureFlags2; + + typedef VkFlags VkRenderingFlags; + typedef VkFlags64 VkMemoryDecompressionMethodFlagsEXT; + + + typedef VkFlags VkBuildMicromapFlagsEXT; + typedef VkFlags VkMicromapCreateFlagsEXT; + typedef VkFlags VkIndirectCommandsLayoutUsageFlagsEXT; + typedef VkFlags VkIndirectCommandsInputModeFlagsEXT; + typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; + typedef VkFlags64 VkPipelineCreateFlags2; + + typedef VkFlags64 VkBufferUsageFlags2; + + typedef VkFlags VkAddressCopyFlagsKHR; + typedef VkFlags64 VkTensorCreateFlagsARM; + typedef VkFlags64 VkTensorUsageFlagsARM; + typedef VkFlags64 VkTensorViewCreateFlagsARM; + typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagsARM; + typedef VkFlags64 VkDataGraphPipelineDispatchFlagsARM; + typedef VkFlags VkVideoEncodeRgbModelConversionFlagsVALVE; + typedef VkFlags VkVideoEncodeRgbRangeCompressionFlagsVALVE; + typedef VkFlags VkVideoEncodeRgbChromaOffsetFlagsVALVE; + typedef VkFlags VkSpirvResourceTypeFlagsEXT; + + WSI extensions + typedef VkFlags VkCompositeAlphaFlagsKHR; + typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; + typedef VkFlags VkSurfaceTransformFlagsKHR; + typedef VkFlags VkSwapchainCreateFlagsKHR; + typedef VkFlags VkDisplayModeCreateFlagsKHR; + typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; + typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; + typedef VkFlags VkViSurfaceCreateFlagsNN; + typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; + typedef VkFlags VkWin32SurfaceCreateFlagsKHR; + typedef VkFlags VkXlibSurfaceCreateFlagsKHR; + typedef VkFlags VkXcbSurfaceCreateFlagsKHR; + typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; + typedef VkFlags VkIOSSurfaceCreateFlagsMVK; + typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; + typedef VkFlags VkMetalSurfaceCreateFlagsEXT; + typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; + typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; + typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT; + typedef VkFlags VkScreenSurfaceCreateFlagsQNX; + typedef VkFlags VkPeerMemoryFeatureFlags; + + typedef VkFlags VkMemoryAllocateFlags; + + typedef VkFlags VkDeviceGroupPresentModeFlagsKHR; + + typedef VkFlags VkDebugReportFlagsEXT; + typedef VkFlags VkCommandPoolTrimFlags; + + typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; + typedef VkFlags VkClusterAccelerationStructureIndexFormatFlagsNV; + typedef VkFlags VkExternalMemoryFeatureFlagsNV; + typedef VkFlags VkExternalMemoryHandleTypeFlags; + + typedef VkFlags VkExternalMemoryFeatureFlags; + + typedef VkFlags VkExternalSemaphoreHandleTypeFlags; + + typedef VkFlags VkExternalSemaphoreFeatureFlags; + + typedef VkFlags VkSemaphoreImportFlags; + + typedef VkFlags VkExternalFenceHandleTypeFlags; + + typedef VkFlags VkExternalFenceFeatureFlags; + + typedef VkFlags VkFenceImportFlags; + + typedef VkFlags VkSurfaceCounterFlagsEXT; + typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; + typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; + typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; + typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; + typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; + typedef VkFlags VkValidationCacheCreateFlagsEXT; + typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; + typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; + typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; + typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; + typedef VkFlags VkDeviceMemoryReportFlagsEXT; + typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT; + typedef VkFlags VkDescriptorBindingFlags; + + typedef VkFlags VkConditionalRenderingFlagsEXT; + typedef VkFlags VkResolveModeFlags; + + typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; + typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT; + typedef VkFlags VkSwapchainImageUsageFlagsANDROID; + typedef VkFlags VkToolPurposeFlags; + + typedef VkFlags VkSubmitFlags; + + typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA; + typedef VkFlags VkHostImageCopyFlags; + + typedef VkFlags VkPartitionedAccelerationStructureInstanceFlagsNV; + typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA; + typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT; + typedef VkFlags VkImageCompressionFlagsEXT; + typedef VkFlags VkImageCompressionFixedRateFlagsEXT; + typedef VkFlags VkExportMetalObjectTypeFlagsEXT; + typedef VkFlags VkRenderingAttachmentFlagsKHR; + typedef VkFlags VkResolveImageFlagsKHR; + typedef VkFlags VkDeviceAddressBindingFlagsEXT; + typedef VkFlags VkOpticalFlowGridSizeFlagsNV; + typedef VkFlags VkOpticalFlowUsageFlagsNV; + typedef VkFlags VkOpticalFlowSessionCreateFlagsNV; + typedef VkFlags VkOpticalFlowExecuteFlagsNV; + typedef VkFlags VkFrameBoundaryFlagsEXT; + typedef VkFlags VkPresentScalingFlagsKHR; + + typedef VkFlags VkPresentGravityFlagsKHR; + + typedef VkFlags VkShaderCreateFlagsEXT; + typedef VkFlags VkTileShadingRenderPassFlagsQCOM; + typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagsARM; + typedef VkFlags VkSurfaceCreateFlagsOHOS; + typedef VkFlags VkPresentStageFlagsEXT; + typedef VkFlags VkPastPresentationTimingFlagsEXT; + typedef VkFlags VkPresentTimingInfoFlagsEXT; + typedef VkFlags VkSwapchainImageUsageFlagsOHOS; + typedef VkFlags VkPerformanceCounterDescriptionFlagsARM; + + Video Core extension + typedef VkFlags VkVideoCodecOperationFlagsKHR; + typedef VkFlags VkVideoCapabilityFlagsKHR; + typedef VkFlags VkVideoSessionCreateFlagsKHR; + typedef VkFlags VkVideoSessionParametersCreateFlagsKHR; + typedef VkFlags VkVideoBeginCodingFlagsKHR; + typedef VkFlags VkVideoEndCodingFlagsKHR; + typedef VkFlags VkVideoCodingControlFlagsKHR; + + Video Decode Core extension + typedef VkFlags VkVideoDecodeUsageFlagsKHR; + typedef VkFlags VkVideoDecodeCapabilityFlagsKHR; + typedef VkFlags VkVideoDecodeFlagsKHR; + + Video Decode H.264 extension + typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsKHR; + + Video Encode Core extension + typedef VkFlags VkVideoEncodeFlagsKHR; + typedef VkFlags VkVideoEncodeUsageFlagsKHR; + typedef VkFlags VkVideoEncodeContentFlagsKHR; + typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeFeedbackFlagsKHR; + typedef VkFlags VkVideoEncodeRateControlFlagsKHR; + typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; + typedef VkFlags VkVideoEncodeIntraRefreshModeFlagsKHR; + typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; + typedef VkFlags VkVideoComponentBitDepthFlagsKHR; + + Video Encode H.264 extension + typedef VkFlags VkVideoEncodeH264CapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeH264StdFlagsKHR; + typedef VkFlags VkVideoEncodeH264RateControlFlagsKHR; + + Video Encode H.265 extension + typedef VkFlags VkVideoEncodeH265CapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeH265StdFlagsKHR; + typedef VkFlags VkVideoEncodeH265RateControlFlagsKHR; + typedef VkFlags VkVideoEncodeH265CtbSizeFlagsKHR; + typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsKHR; + + Video Encode AV1 extension + typedef VkFlags VkVideoEncodeAV1CapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeAV1StdFlagsKHR; + typedef VkFlags VkVideoEncodeAV1RateControlFlagsKHR; + typedef VkFlags VkVideoEncodeAV1SuperblockSizeFlagsKHR; + + VK_KHR_maintenance8 + typedef VkFlags64 VkAccessFlags3KHR; + + Types which can be void pointers or class pointers, selected at compile time + VK_DEFINE_HANDLE(VkInstance) + VK_DEFINE_HANDLE(VkPhysicalDevice) + VK_DEFINE_HANDLE(VkDevice) + VK_DEFINE_HANDLE(VkQueue) + VK_DEFINE_HANDLE(VkCommandBuffer) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineBinaryKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectExecutionSetEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot) + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkOpticalFlowSessionNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkMicromapEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorARM) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorViewARM) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM) + + WSI extensions + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) + + Video extensions + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) + + VK_NV_external_sci_sync2 + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphoreSciSyncPoolNV) + + Types generated from corresponding enums tags below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSI extensions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enumerated types in the header, but not used by the API + + + + + + + + Video Core extensions + + + + + + + + + + Video Decode extensions + + + + Video H.264 Decode extensions + + + Video H.265 Decode extensions + + Video Encode extensions + + + + + + + + + + Video H.264 Encode extensions + + + + + Video H.265 Encode extensions + + + + + + + Video AV1 Encode extensions + + + + + + + + VK_KHR_maintenance8 + + + VK_KHR_maintenance9 + + + + void PFN_vkInternalAllocationNotification + void* pUserData + size_t size + VkInternalAllocationType allocationType + VkSystemAllocationScope allocationScope + + + void PFN_vkInternalFreeNotification + void* pUserData + size_t size + VkInternalAllocationType allocationType + VkSystemAllocationScope allocationScope + + + void* PFN_vkReallocationFunction + void* pUserData + void* pOriginal + size_t size + size_t alignment + VkSystemAllocationScope allocationScope + + + void* PFN_vkAllocationFunction + void* pUserData + size_t size + size_t alignment + VkSystemAllocationScope allocationScope + + + void PFN_vkFreeFunction + void* pUserData + void* pMemory + + + void PFN_vkVoidFunction + + + VkBool32 PFN_vkDebugReportCallbackEXT + VkDebugReportFlagsEXT flags + VkDebugReportObjectTypeEXT objectType + uint64_t object + size_t location + int32_t messageCode + const char* pLayerPrefix + const char* pMessage + void* pUserData + + + VkBool32 PFN_vkDebugUtilsMessengerCallbackEXT + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity + VkDebugUtilsMessageTypeFlagsEXT messageTypes + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData + void* pUserData + + + void PFN_vkFaultCallbackFunction + VkBool32 unrecordedFaults + uint32_t faultCount + const VkFaultData* pFaults + + + void PFN_vkDeviceMemoryReportCallbackEXT + const VkDeviceMemoryReportCallbackDataEXT* pCallbackData + void* pUserData + + The PFN_vkGetInstanceProcAddrLUNARG type is used by the + VkDirectDriverLoadingInfoLUNARG structure. + We cannot introduce an explicit dependency on the + equivalent PFN_vkGetInstanceProcAddr type, even though + it is implicitly generated in the C header, because + that results in multiple definitions. + + PFN_vkVoidFunction PFN_vkGetInstanceProcAddrLUNARG + VkInstance instance + const char* pName + + + Struct types + + VkStructureType sType + struct VkBaseOutStructure* pNext + + + VkStructureType sType + const struct VkBaseInStructure* pNext + + + int32_t x + int32_t y + + + int32_t x + int32_t y + int32_t z + + + uint32_t width + uint32_t height + + + uint32_t width + uint32_t height + uint32_t depth + + + float x + float y + float width + float height + float minDepth + float maxDepth + + + VkOffset2D offset + VkExtent2D extent + + + VkRect2D rect + uint32_t baseArrayLayer + uint32_t layerCount + + + VkComponentSwizzle r + VkComponentSwizzle g + VkComponentSwizzle b + VkComponentSwizzle a + + + uint32_t apiVersion + uint32_t driverVersion + uint32_t vendorID + uint32_t deviceID + VkPhysicalDeviceType deviceType + char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] + uint8_t pipelineCacheUUID[VK_UUID_SIZE] + VkPhysicalDeviceLimits limits + VkPhysicalDeviceSparseProperties sparseProperties + + + char extensionName[VK_MAX_EXTENSION_NAME_SIZE]extension name + uint32_t specVersionversion of the extension specification implemented + + + char layerName[VK_MAX_EXTENSION_NAME_SIZE]layer name + uint32_t specVersionversion of the layer specification implemented + uint32_t implementationVersionbuild or release version of the layer's library + char description[VK_MAX_DESCRIPTION_SIZE]Free-form description of the layer + + + VkStructureType sType + const void* pNext + const char* pApplicationName + uint32_t applicationVersion + const char* pEngineName + uint32_t engineVersion + uint32_t apiVersion + + + void* pUserData + PFN_vkAllocationFunction pfnAllocation + PFN_vkReallocationFunction pfnReallocation + PFN_vkFreeFunction pfnFree + PFN_vkInternalAllocationNotification pfnInternalAllocation + PFN_vkInternalFreeNotification pfnInternalFree + + + VkStructureType sType + const void* pNext + VkDeviceQueueCreateFlags flags + uint32_t queueFamilyIndex + uint32_t queueCount + const float* pQueuePriorities + + + VkStructureType sType + const void* pNext + VkDeviceCreateFlags flags + uint32_t queueCreateInfoCount + const VkDeviceQueueCreateInfo* pQueueCreateInfos + uint32_t enabledLayerCount + const char* const* ppEnabledLayerNamesOrdered list of layer names to be enabled + uint32_t enabledExtensionCount + const char* const* ppEnabledExtensionNames + const VkPhysicalDeviceFeatures* pEnabledFeatures + + + VkStructureType sType + const void* pNext + VkInstanceCreateFlags flags + const VkApplicationInfo* pApplicationInfo + uint32_t enabledLayerCount + const char* const* ppEnabledLayerNamesOrdered list of layer names to be enabled + uint32_t enabledExtensionCount + const char* const* ppEnabledExtensionNamesExtension names to be enabled + + + VkQueueFlags queueFlagsQueue flags + uint32_t queueCount + uint32_t timestampValidBits + VkExtent3D minImageTransferGranularityMinimum alignment requirement for image transfers + + + uint32_t memoryTypeCount + VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES] + uint32_t memoryHeapCount + VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS] + + + VkStructureType sType + const void* pNext + VkDeviceSize allocationSizeSize of memory allocation + uint32_t memoryTypeIndexIndex of the of the memory type to allocate from + + + VkDeviceSize sizeSpecified in bytes + VkDeviceSize alignmentSpecified in bytes + uint32_t memoryTypeBitsBitmask of the allowed memory type indices into memoryTypes[] for this object + + + VkImageAspectFlags aspectMask + VkExtent3D imageGranularity + VkSparseImageFormatFlags flags + + + VkSparseImageFormatProperties formatProperties + uint32_t imageMipTailFirstLod + VkDeviceSize imageMipTailSizeSpecified in bytes, must be a multiple of sparse block size in bytes / alignment + VkDeviceSize imageMipTailOffsetSpecified in bytes, must be a multiple of sparse block size in bytes / alignment + VkDeviceSize imageMipTailStrideSpecified in bytes, must be a multiple of sparse block size in bytes / alignment + + + VkMemoryPropertyFlags propertyFlagsMemory properties of this memory type + uint32_t heapIndexIndex of the memory heap allocations of this memory type are taken from + + + VkDeviceSize sizeAvailable memory in the heap + VkMemoryHeapFlags flagsFlags for the heap + + + VkStructureType sType + const void* pNext + VkDeviceMemory memoryMapped memory object + VkDeviceSize offsetOffset within the memory object where the range starts + VkDeviceSize sizeSize of the range within the memory object + + + VkFormatFeatureFlags linearTilingFeaturesFormat features in case of linear tiling + VkFormatFeatureFlags optimalTilingFeaturesFormat features in case of optimal tiling + VkFormatFeatureFlags bufferFeaturesFormat features supported by buffers + + + VkExtent3D maxExtentmax image dimensions for this resource type + uint32_t maxMipLevelsmax number of mipmap levels for this resource type + uint32_t maxArrayLayersmax array size for this resource type + VkSampleCountFlags sampleCountssupported sample counts for this resource type + VkDeviceSize maxResourceSizemax size (in bytes) of this resource type + + + VkBuffer bufferBuffer used for this descriptor slot. + VkDeviceSize offsetBase offset from buffer start in bytes to update in the descriptor set. + VkDeviceSize rangeSize in bytes of the buffer resource for this descriptor update. + + + VkSampler samplerSampler to write to the descriptor in case it is a SAMPLER or COMBINED_IMAGE_SAMPLER descriptor. Ignored otherwise. + VkImageView imageViewImage view to write to the descriptor in case it is a SAMPLED_IMAGE, STORAGE_IMAGE, COMBINED_IMAGE_SAMPLER, or INPUT_ATTACHMENT descriptor. Ignored otherwise. + VkImageLayout imageLayoutLayout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE). + + + VkStructureType sType + const void* pNext + VkDescriptorSet dstSetDestination descriptor set + uint32_t dstBindingBinding within the destination descriptor set to write + uint32_t dstArrayElementArray element within the destination binding to write + uint32_t descriptorCountNumber of descriptors to write (determines the size of the array pointed by pDescriptors) + VkDescriptorType descriptorTypeDescriptor type to write (determines which members of the array pointed by pDescriptors are going to be used) + const VkDescriptorImageInfo* pImageInfoSampler, image view, and layout for SAMPLER, COMBINED_IMAGE_SAMPLER, {SAMPLED,STORAGE}_IMAGE, and INPUT_ATTACHMENT descriptor types. + const VkDescriptorBufferInfo* pBufferInfoRaw buffer, size, and offset for {UNIFORM,STORAGE}_BUFFER[_DYNAMIC] descriptor types. + const VkBufferView* pTexelBufferViewBuffer view to write to the descriptor for {UNIFORM,STORAGE}_TEXEL_BUFFER descriptor types. + + + VkStructureType sType + const void* pNext + VkDescriptorSet srcSetSource descriptor set + uint32_t srcBindingBinding within the source descriptor set to copy from + uint32_t srcArrayElementArray element within the source binding to copy from + VkDescriptorSet dstSetDestination descriptor set + uint32_t dstBindingBinding within the destination descriptor set to copy to + uint32_t dstArrayElementArray element within the destination binding to copy to + uint32_t descriptorCountNumber of descriptors to write (determines the size of the array pointed by pDescriptors) + + + VkStructureType sType + const void* pNext + VkBufferUsageFlags2 usage + + + + VkStructureType sType + const void* pNext + VkBufferCreateFlags flagsBuffer creation flags + VkDeviceSize sizeSpecified in bytes + VkBufferUsageFlags usageBuffer usage flags + VkSharingMode sharingMode + uint32_t queueFamilyIndexCount + const uint32_t* pQueueFamilyIndices + + + VkStructureType sType + const void* pNext + VkBufferViewCreateFlags flags + VkBuffer buffer + VkFormat formatOptionally specifies format of elements + VkDeviceSize offsetSpecified in bytes + VkDeviceSize rangeView size specified in bytes + + + VkImageAspectFlags aspectMask + uint32_t mipLevel + uint32_t arrayLayer + + + VkImageAspectFlags aspectMask + uint32_t mipLevel + uint32_t baseArrayLayer + uint32_t layerCount + + + VkImageAspectFlags aspectMask + uint32_t baseMipLevel + uint32_t levelCount + uint32_t baseArrayLayer + uint32_t layerCount + + + VkStructureType sType + const void* pNext + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + + + VkStructureType sType + const void* pNext + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + uint32_t srcQueueFamilyIndexQueue family to transition ownership from + uint32_t dstQueueFamilyIndexQueue family to transition ownership to + VkBuffer bufferBuffer to sync + VkDeviceSize offsetOffset within the buffer to sync + VkDeviceSize sizeAmount of bytes to sync + + + VkStructureType sType + const void* pNext + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + VkImageLayout oldLayoutCurrent layout of the image + VkImageLayout newLayoutNew layout to transition the image to + uint32_t srcQueueFamilyIndexQueue family to transition ownership from + uint32_t dstQueueFamilyIndexQueue family to transition ownership to + VkImage imageImage to sync + VkImageSubresourceRange subresourceRangeSubresource range to sync + + + VkStructureType sType + const void* pNext + VkImageCreateFlags flagsImage creation flags + VkImageType imageType + VkFormat format + VkExtent3D extent + uint32_t mipLevels + uint32_t arrayLayers + VkSampleCountFlagBits samples + VkImageTiling tiling + VkImageUsageFlags usageImage usage flags + VkSharingMode sharingModeCross-queue-family sharing mode + uint32_t queueFamilyIndexCountNumber of queue families to share across + const uint32_t* pQueueFamilyIndicesArray of queue family indices to share across + VkImageLayout initialLayoutInitial image layout for all subresources + + + VkDeviceSize offsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + VkDeviceSize rowPitchSpecified in bytes + VkDeviceSize arrayPitchSpecified in bytes + VkDeviceSize depthPitchSpecified in bytes + + + VkStructureType sType + const void* pNext + VkImageViewCreateFlags flags + VkImage image + VkImageViewType viewType + VkFormat format + VkComponentMapping components + VkImageSubresourceRange subresourceRange + + + VkDeviceSize srcOffsetSpecified in bytes + VkDeviceSize dstOffsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + + + VkDeviceSize resourceOffsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + VkDeviceMemory memory + VkDeviceSize memoryOffsetSpecified in bytes + VkSparseMemoryBindFlags flags + + + VkImageSubresource subresource + VkOffset3D offset + VkExtent3D extent + VkDeviceMemory memory + VkDeviceSize memoryOffsetSpecified in bytes + VkSparseMemoryBindFlags flags + + + VkBuffer buffer + uint32_t bindCount + const VkSparseMemoryBind* pBinds + + + VkImage image + uint32_t bindCount + const VkSparseMemoryBind* pBinds + + + VkImage image + uint32_t bindCount + const VkSparseImageMemoryBind* pBinds + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreCount + const VkSemaphore* pWaitSemaphores + uint32_t bufferBindCount + const VkSparseBufferMemoryBindInfo* pBufferBinds + uint32_t imageOpaqueBindCount + const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds + uint32_t imageBindCount + const VkSparseImageMemoryBindInfo* pImageBinds + uint32_t signalSemaphoreCount + const VkSemaphore* pSignalSemaphores + + + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsetSpecified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D extentSpecified in pixels for both compressed and uncompressed images + + + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsets[2]Specified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsets[2]Specified in pixels for both compressed and uncompressed images + + + VkDeviceSize bufferOffsetSpecified in bytes + uint32_t bufferRowLengthSpecified in texels + uint32_t bufferImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D imageExtentSpecified in pixels for both compressed and uncompressed images + + + VkDeviceAddress address + VkDeviceSize size + VkDeviceSize stride + + + VkDeviceAddress srcAddress + VkDeviceAddress dstAddress + VkDeviceSize size + + + + VkStructureType sType + const void* pNext + VkAddressCopyFlagsKHR srcCopyFlags + VkAddressCopyFlagsKHR dstCopyFlags + uint32_t copyCount + VkStridedDeviceAddressRangeKHR copyAddressRange + + + VkDeviceAddress srcAddress + uint32_t bufferRowLength + uint32_t bufferImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffset + VkExtent3D imageExtent + + + + VkStructureType sType + const void* pNext + VkAddressCopyFlagsKHR srcCopyFlags + uint32_t copyCount + VkStridedDeviceAddressRangeKHR copyAddressRange + VkImage dstImage + VkImageLayout dstImageLayout + const VkImageSubresourceLayers* pImageSubresources + + + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffset + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffset + VkExtent3D extent + + + VkStructureType sType + const void* pNextnoautovalidity because this structure can be either an explicit parameter, or passed in a pNext chain + VkShaderModuleCreateFlags flags + size_t codeSizeSpecified in bytes + const uint32_t* pCodeBinary code of size codeSize + + + uint32_t bindingBinding number for this entry + VkDescriptorType descriptorTypeType of the descriptors in this binding + uint32_t descriptorCountNumber of descriptors in this binding + VkShaderStageFlags stageFlagsShader stages this binding is visible to + const VkSampler* pImmutableSamplersImmutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains count number of elements) + + + VkStructureType sType + const void* pNext + VkDescriptorSetLayoutCreateFlags flags + uint32_t bindingCountNumber of bindings in the descriptor set layout + const VkDescriptorSetLayoutBinding* pBindingsArray of descriptor set layout bindings + + + VkDescriptorType type + uint32_t descriptorCount + + + VkStructureType sType + const void* pNext + VkDescriptorPoolCreateFlags flags + uint32_t maxSets + uint32_t poolSizeCount + const VkDescriptorPoolSize* pPoolSizes + + + VkStructureType sType + const void* pNext + VkDescriptorPool descriptorPool + uint32_t descriptorSetCount + const VkDescriptorSetLayout* pSetLayouts + + + uint32_t constantIDThe SpecConstant ID specified in the BIL + uint32_t offsetOffset of the value in the data block + size_t sizeSize in bytes of the SpecConstant + + + uint32_t mapEntryCountNumber of entries in the map + const VkSpecializationMapEntry* pMapEntriesArray of map entries + size_t dataSizeSize in bytes of pData + const void* pDataPointer to SpecConstant data + + + VkStructureType sType + const void* pNext + VkPipelineShaderStageCreateFlags flags + VkShaderStageFlagBits stageShader stage + VkShaderModule moduleModule containing entry point + const char* pNameNull-terminated entry point name + const char* pNameNull-terminated entry point name + const VkSpecializationInfo* pSpecializationInfo + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + VkPipelineShaderStageCreateInfo stage + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkDeviceAddress deviceAddress + VkDeviceSize size + VkDeviceAddress pipelineDeviceAddressCaptureReplay + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags2 flags + + + + uint32_t bindingVertex buffer binding id + uint32_t strideDistance between vertices in bytes (0 = no advancement) + VkVertexInputRate inputRateThe rate at which the vertex data is consumed + + + uint32_t locationlocation of the shader vertex attrib + uint32_t bindingVertex buffer binding id + VkFormat formatformat of source data + uint32_t offsetOffset of first element in bytes from base of vertex + + + VkStructureType sType + const void* pNext + VkPipelineVertexInputStateCreateFlags flags + uint32_t vertexBindingDescriptionCountnumber of bindings + const VkVertexInputBindingDescription* pVertexBindingDescriptions + uint32_t vertexAttributeDescriptionCountnumber of attributes + const VkVertexInputAttributeDescription* pVertexAttributeDescriptions + + + VkStructureType sType + const void* pNext + VkPipelineInputAssemblyStateCreateFlags flags + VkPrimitiveTopology topology + VkBool32 primitiveRestartEnable + + + VkStructureType sType + const void* pNext + VkPipelineTessellationStateCreateFlags flags + uint32_t patchControlPoints + + + VkStructureType sType + const void* pNext + VkPipelineViewportStateCreateFlags flags + uint32_t viewportCount + const VkViewport* pViewports + uint32_t scissorCount + const VkRect2D* pScissors + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationStateCreateFlags flags + VkBool32 depthClampEnable + VkBool32 rasterizerDiscardEnable + VkPolygonMode polygonModeoptional (GL45) + VkCullModeFlags cullMode + VkFrontFace frontFace + VkBool32 depthBiasEnable + float depthBiasConstantFactor + float depthBiasClamp + float depthBiasSlopeFactor + float lineWidth + + + VkStructureType sType + const void* pNext + VkPipelineMultisampleStateCreateFlags flags + VkSampleCountFlagBits rasterizationSamplesNumber of samples used for rasterization + VkBool32 sampleShadingEnableoptional (GL45) + float minSampleShadingoptional (GL45) + const VkSampleMask* pSampleMaskArray of sampleMask words + VkBool32 alphaToCoverageEnable + VkBool32 alphaToOneEnable + + + VkBool32 blendEnable + VkBlendFactor srcColorBlendFactor + VkBlendFactor dstColorBlendFactor + VkBlendOp colorBlendOp + VkBlendFactor srcAlphaBlendFactor + VkBlendFactor dstAlphaBlendFactor + VkBlendOp alphaBlendOp + VkColorComponentFlags colorWriteMask + + + VkStructureType sType + const void* pNext + VkPipelineColorBlendStateCreateFlags flags + VkBool32 logicOpEnable + VkLogicOp logicOp + uint32_t attachmentCount# of pAttachments + const VkPipelineColorBlendAttachmentState* pAttachments + float blendConstants[4] + + + VkStructureType sType + const void* pNext + VkPipelineDynamicStateCreateFlags flags + uint32_t dynamicStateCount + const VkDynamicState* pDynamicStates + + + VkStencilOp failOp + VkStencilOp passOp + VkStencilOp depthFailOp + VkCompareOp compareOp + uint32_t compareMask + uint32_t writeMask + uint32_t reference + + + VkStructureType sType + const void* pNext + VkPipelineDepthStencilStateCreateFlags flags + VkBool32 depthTestEnable + VkBool32 depthWriteEnable + VkCompareOp depthCompareOp + VkBool32 depthBoundsTestEnableoptional (depth_bounds_test) + VkBool32 stencilTestEnable + VkStencilOpState front + VkStencilOpState back + float minDepthBounds + float maxDepthBounds + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + const VkPipelineVertexInputStateCreateInfo* pVertexInputState + const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState + const VkPipelineTessellationStateCreateInfo* pTessellationState + const VkPipelineViewportStateCreateInfo* pViewportState + const VkPipelineRasterizationStateCreateInfo* pRasterizationState + const VkPipelineMultisampleStateCreateInfo* pMultisampleState + const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState + const VkPipelineColorBlendStateCreateInfo* pColorBlendState + const VkPipelineDynamicStateCreateInfo* pDynamicState + VkPipelineLayout layoutInterface layout of the pipeline + VkRenderPass renderPass + uint32_t subpass + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkPipelineCacheCreateFlags flags + size_t initialDataSizeSize of initial data to populate cache, in bytes + size_t initialDataSizeSize of initial data to populate cache, in bytes + const void* pInitialDataInitial data to populate cache + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint32_t headerSize + VkPipelineCacheHeaderVersion headerVersion + uint32_t vendorID + uint32_t deviceID + uint8_t pipelineCacheUUID[VK_UUID_SIZE] + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint64_t codeSize + uint64_t codeOffset + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint8_t pipelineIdentifier[VK_UUID_SIZE] + uint64_t pipelineMemorySize + uint64_t jsonSize + uint64_t jsonOffset + uint32_t stageIndexCount + uint32_t stageIndexStride + uint64_t stageIndexOffset + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + VkPipelineCacheHeaderVersionOne headerVersionOne + VkPipelineCacheValidationVersion validationVersion + uint32_t implementationData + uint32_t pipelineIndexCount + uint32_t pipelineIndexStride + uint64_t pipelineIndexOffset + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint32_t headerSize + VkPipelineCacheHeaderVersion headerVersion + VkDataGraphModelCacheTypeQCOM cacheType + uint32_t cacheVersion + uint32_t toolchainVersion[VK_DATA_GRAPH_MODEL_TOOLCHAIN_VERSION_LENGTH_QCOM] + + + VkShaderStageFlags stageFlagsWhich stages use the range + uint32_t offsetStart of the range, in bytes + uint32_t sizeSize of the range, in bytes + + + VkStructureType sType + const void* pNext + const VkPipelineBinaryKeysAndDataKHR* pKeysAndDataInfo + VkPipeline pipeline + const VkPipelineCreateInfoKHR* pPipelineCreateInfo + + + VkStructureType sType + const void* pNext + uint32_t pipelineBinaryCount + VkPipelineBinaryKHR* pPipelineBinaries + + + size_t dataSize + void* pData + + + uint32_t binaryCount + const VkPipelineBinaryKeyKHR* pPipelineBinaryKeys + const VkPipelineBinaryDataKHR* pPipelineBinaryData + + + VkStructureType sType + void* pNext + uint32_t keySize + uint8_t key[VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR] + + + VkStructureType sType + const void* pNext + uint32_t binaryCount + const VkPipelineBinaryKHR* pPipelineBinaries + + + VkStructureType sType + void* pNext + VkPipeline pipeline + + + VkStructureType sType + void* pNext + VkPipelineBinaryKHR pipelineBinary + + + VkStructureType sType + void* pNext + + + VkStructureType sType + const void* pNext + VkPipelineLayoutCreateFlags flags + uint32_t setLayoutCountNumber of descriptor sets interfaced by the pipeline + const VkDescriptorSetLayout* pSetLayoutsArray of setCount number of descriptor set layout objects defining the layout of the + uint32_t pushConstantRangeCountNumber of push-constant ranges used by the pipeline + const VkPushConstantRange* pPushConstantRangesArray of pushConstantRangeCount number of ranges used by various shader stages + + + VkStructureType sType + const void* pNext + VkSamplerCreateFlags flags + VkFilter magFilterFilter mode for magnification + VkFilter minFilterFilter mode for minifiation + VkSamplerMipmapMode mipmapModeMipmap selection mode + VkSamplerAddressMode addressModeU + VkSamplerAddressMode addressModeV + VkSamplerAddressMode addressModeW + float mipLodBias + VkBool32 anisotropyEnable + float maxAnisotropy + VkBool32 compareEnable + VkCompareOp compareOp + float minLod + float maxLod + VkBorderColor borderColor + VkBool32 unnormalizedCoordinates + + + VkStructureType sType + const void* pNext + VkCommandPoolCreateFlags flagsCommand pool creation flags + uint32_t queueFamilyIndex + + + VkStructureType sType + const void* pNext + VkCommandPool commandPool + VkCommandBufferLevel level + uint32_t commandBufferCount + + + VkStructureType sType + const void* pNext + VkRenderPass renderPassRender pass for secondary command buffers + uint32_t subpass + VkFramebuffer framebufferFramebuffer for secondary command buffers + VkBool32 occlusionQueryEnableWhether this secondary command buffer may be executed during an occlusion query + VkQueryControlFlags queryFlagsQuery flags used by this secondary command buffer, if executed during an occlusion query + VkQueryPipelineStatisticFlags pipelineStatisticsPipeline statistics that may be counted for this secondary command buffer + + + VkStructureType sType + const void* pNext + VkCommandBufferUsageFlags flagsCommand buffer usage flags + const VkCommandBufferInheritanceInfo* pInheritanceInfoPointer to inheritance info for secondary command buffers + + + VkStructureType sType + const void* pNext + VkRenderPass renderPass + VkFramebuffer framebuffer + VkRect2D renderArea + uint32_t clearValueCount + const VkClearValue* pClearValues + + + float float32[4] + int32_t int32[4] + uint32_t uint32[4] + + + float depth + uint32_t stencil + + + VkClearColorValue color + VkClearDepthStencilValue depthStencil + + + VkImageAspectFlags aspectMask + uint32_t colorAttachment + VkClearValue clearValue + + + VkAttachmentDescriptionFlags flags + VkFormat format + VkSampleCountFlagBits samples + VkAttachmentLoadOp loadOpLoad operation for color or depth data + VkAttachmentStoreOp storeOpStore operation for color or depth data + VkAttachmentLoadOp stencilLoadOpLoad operation for stencil data + VkAttachmentStoreOp stencilStoreOpStore operation for stencil data + VkImageLayout initialLayout + VkImageLayout finalLayout + + + uint32_t attachment + VkImageLayout layout + + + VkSubpassDescriptionFlags flags + VkPipelineBindPoint pipelineBindPointMust be VK_PIPELINE_BIND_POINT_GRAPHICS for now + uint32_t inputAttachmentCount + const VkAttachmentReference* pInputAttachments + uint32_t colorAttachmentCount + const VkAttachmentReference* pColorAttachments + const VkAttachmentReference* pResolveAttachments + const VkAttachmentReference* pDepthStencilAttachment + uint32_t preserveAttachmentCount + const uint32_t* pPreserveAttachments + + + uint32_t srcSubpass + uint32_t dstSubpass + VkPipelineStageFlags srcStageMask + VkPipelineStageFlags dstStageMask + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + VkDependencyFlags dependencyFlags + + + VkStructureType sType + const void* pNext + VkRenderPassCreateFlags flags + uint32_t attachmentCount + const VkAttachmentDescription* pAttachments + uint32_t subpassCount + const VkSubpassDescription* pSubpasses + uint32_t dependencyCount + const VkSubpassDependency* pDependencies + + + VkStructureType sType + const void* pNext + VkEventCreateFlags flagsEvent creation flags + + + VkStructureType sType + const void* pNext + VkFenceCreateFlags flagsFence creation flags + + + VkBool32 robustBufferAccessout of bounds buffer accesses are well defined + VkBool32 fullDrawIndexUint32full 32-bit range of indices for indexed draw calls + VkBool32 imageCubeArrayimage views which are arrays of cube maps + VkBool32 independentBlendblending operations are controlled per-attachment + VkBool32 geometryShadergeometry stage + VkBool32 tessellationShadertessellation control and evaluation stage + VkBool32 sampleRateShadingper-sample shading and interpolation + VkBool32 dualSrcBlendblend operations which take two sources + VkBool32 logicOplogic operations + VkBool32 multiDrawIndirectmulti draw indirect + VkBool32 drawIndirectFirstInstanceindirect drawing can use non-zero firstInstance + VkBool32 depthClampdepth clamping + VkBool32 depthBiasClampdepth bias clamping + VkBool32 fillModeNonSolidpoint and wireframe fill modes + VkBool32 depthBoundsdepth bounds test + VkBool32 wideLineslines with width greater than 1 + VkBool32 largePointspoints with size greater than 1 + VkBool32 alphaToOnethe fragment alpha component can be forced to maximum representable alpha value + VkBool32 multiViewportviewport arrays + VkBool32 samplerAnisotropyanisotropic sampler filtering + VkBool32 textureCompressionETC2ETC texture compression formats + VkBool32 textureCompressionASTC_LDRASTC LDR texture compression formats + VkBool32 textureCompressionBCBC1-7 texture compressed formats + VkBool32 occlusionQueryPreciseprecise occlusion queries returning actual sample counts + VkBool32 pipelineStatisticsQuerypipeline statistics query + VkBool32 vertexPipelineStoresAndAtomicsstores and atomic ops on storage buffers and images are supported in vertex, tessellation, and geometry stages + VkBool32 fragmentStoresAndAtomicsstores and atomic ops on storage buffers and images are supported in the fragment stage + VkBool32 shaderTessellationAndGeometryPointSizetessellation and geometry stages can export point size + VkBool32 shaderImageGatherExtendedimage gather with runtime values and independent offsets + VkBool32 shaderStorageImageExtendedFormatsthe extended set of formats can be used for storage images + VkBool32 shaderStorageImageMultisamplemultisample images can be used for storage images + VkBool32 shaderStorageImageReadWithoutFormatread from storage image does not require format qualifier + VkBool32 shaderStorageImageWriteWithoutFormatwrite to storage image does not require format qualifier + VkBool32 shaderUniformBufferArrayDynamicIndexingarrays of uniform buffers can be accessed with dynamically uniform indices + VkBool32 shaderSampledImageArrayDynamicIndexingarrays of sampled images can be accessed with dynamically uniform indices + VkBool32 shaderStorageBufferArrayDynamicIndexingarrays of storage buffers can be accessed with dynamically uniform indices + VkBool32 shaderStorageImageArrayDynamicIndexingarrays of storage images can be accessed with dynamically uniform indices + VkBool32 shaderClipDistanceclip distance in shaders + VkBool32 shaderCullDistancecull distance in shaders + VkBool32 shaderFloat6464-bit floats (doubles) in shaders + VkBool32 shaderInt6464-bit integers in shaders + VkBool32 shaderInt1616-bit integers in shaders + VkBool32 shaderResourceResidencyshader can use texture operations that return resource residency information (requires sparseNonResident support) + VkBool32 shaderResourceMinLodshader can use texture operations that specify minimum resource LOD + VkBool32 sparseBindingSparse resources support: Resource memory can be managed at opaque page level rather than object level + VkBool32 sparseResidencyBufferSparse resources support: GPU can access partially resident buffers + VkBool32 sparseResidencyImage2DSparse resources support: GPU can access partially resident 2D (non-MSAA non-depth/stencil) images + VkBool32 sparseResidencyImage3DSparse resources support: GPU can access partially resident 3D images + VkBool32 sparseResidency2SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 2 samples + VkBool32 sparseResidency4SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 4 samples + VkBool32 sparseResidency8SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 8 samples + VkBool32 sparseResidency16SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 16 samples + VkBool32 sparseResidencyAliasedSparse resources support: GPU can correctly access data aliased into multiple locations (opt-in) + VkBool32 variableMultisampleRatemultisample rate must be the same for all pipelines in a subpass + VkBool32 inheritedQueriesQueries may be inherited from primary to secondary command buffers + + + VkBool32 residencyStandard2DBlockShapeSparse resources support: GPU will access all 2D (single sample) sparse resources using the standard sparse image block shapes (based on pixel format) + VkBool32 residencyStandard2DMultisampleBlockShapeSparse resources support: GPU will access all 2D (multisample) sparse resources using the standard sparse image block shapes (based on pixel format) + VkBool32 residencyStandard3DBlockShapeSparse resources support: GPU will access all 3D sparse resources using the standard sparse image block shapes (based on pixel format) + VkBool32 residencyAlignedMipSizeSparse resources support: Images with mip level dimensions that are NOT a multiple of the sparse image block dimensions will be placed in the mip tail + VkBool32 residencyNonResidentStrictSparse resources support: GPU can consistently access non-resident regions of a resource, all reads return as if data is 0, writes are discarded + + + resource maximum sizes + uint32_t maxImageDimension1Dmax 1D image dimension + uint32_t maxImageDimension2Dmax 2D image dimension + uint32_t maxImageDimension3Dmax 3D image dimension + uint32_t maxImageDimensionCubemax cube map image dimension + uint32_t maxImageArrayLayersmax layers for image arrays + uint32_t maxTexelBufferElementsmax texel buffer size (fstexels) + uint32_t maxUniformBufferRangemax uniform buffer range (bytes) + uint32_t maxStorageBufferRangemax storage buffer range (bytes) + uint32_t maxPushConstantsSizemax size of the push constants pool (bytes) + memory limits + uint32_t maxMemoryAllocationCountmax number of device memory allocations supported + uint32_t maxSamplerAllocationCountmax number of samplers that can be allocated on a device + VkDeviceSize bufferImageGranularityGranularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage + VkDeviceSize sparseAddressSpaceSizeTotal address space available for sparse allocations (bytes) + descriptor set limits + uint32_t maxBoundDescriptorSetsmax number of descriptors sets that can be bound to a pipeline + uint32_t maxPerStageDescriptorSamplersmax number of samplers allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorUniformBuffersmax number of uniform buffers allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorStorageBuffersmax number of storage buffers allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorSampledImagesmax number of sampled images allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorStorageImagesmax number of storage images allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorInputAttachmentsmax number of input attachments allowed per-stage in a descriptor set + uint32_t maxPerStageResourcesmax number of resources allowed by a single stage + uint32_t maxDescriptorSetSamplersmax number of samplers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetUniformBuffersmax number of uniform buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetUniformBuffersDynamicmax number of dynamic uniform buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetStorageBuffersmax number of storage buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetStorageBuffersDynamicmax number of dynamic storage buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetSampledImagesmax number of sampled images allowed in all stages in a descriptor set + uint32_t maxDescriptorSetStorageImagesmax number of storage images allowed in all stages in a descriptor set + uint32_t maxDescriptorSetInputAttachmentsmax number of input attachments allowed in all stages in a descriptor set + vertex stage limits + uint32_t maxVertexInputAttributesmax number of vertex input attribute slots + uint32_t maxVertexInputBindingsmax number of vertex input binding slots + uint32_t maxVertexInputAttributeOffsetmax vertex input attribute offset added to vertex buffer offset + uint32_t maxVertexInputBindingStridemax vertex input binding stride + uint32_t maxVertexOutputComponentsmax number of output components written by vertex shader + tessellation control stage limits + uint32_t maxTessellationGenerationLevelmax level supported by tessellation primitive generator + uint32_t maxTessellationPatchSizemax patch size (vertices) + uint32_t maxTessellationControlPerVertexInputComponentsmax number of input components per-vertex in TCS + uint32_t maxTessellationControlPerVertexOutputComponentsmax number of output components per-vertex in TCS + uint32_t maxTessellationControlPerPatchOutputComponentsmax number of output components per-patch in TCS + uint32_t maxTessellationControlTotalOutputComponentsmax total number of per-vertex and per-patch output components in TCS + tessellation evaluation stage limits + uint32_t maxTessellationEvaluationInputComponentsmax number of input components per vertex in TES + uint32_t maxTessellationEvaluationOutputComponentsmax number of output components per vertex in TES + geometry stage limits + uint32_t maxGeometryShaderInvocationsmax invocation count supported in geometry shader + uint32_t maxGeometryInputComponentsmax number of input components read in geometry stage + uint32_t maxGeometryOutputComponentsmax number of output components written in geometry stage + uint32_t maxGeometryOutputVerticesmax number of vertices that can be emitted in geometry stage + uint32_t maxGeometryTotalOutputComponentsmax total number of components (all vertices) written in geometry stage + fragment stage limits + uint32_t maxFragmentInputComponentsmax number of input components read in fragment stage + uint32_t maxFragmentOutputAttachmentsmax number of output attachments written in fragment stage + uint32_t maxFragmentDualSrcAttachmentsmax number of output attachments written when using dual source blending + uint32_t maxFragmentCombinedOutputResourcesmax total number of storage buffers, storage images and output buffers + compute stage limits + uint32_t maxComputeSharedMemorySizemax total storage size of work group local storage (bytes) + uint32_t maxComputeWorkGroupCount[3]max num of compute work groups that may be dispatched by a single command (x,y,z) + uint32_t maxComputeWorkGroupInvocationsmax total compute invocations in a single local work group + uint32_t maxComputeWorkGroupSize[3]max local size of a compute work group (x,y,z) + uint32_t subPixelPrecisionBitsnumber bits of subpixel precision in screen x and y + uint32_t subTexelPrecisionBitsnumber bits of precision for selecting texel weights + uint32_t mipmapPrecisionBitsnumber bits of precision for selecting mipmap weights + uint32_t maxDrawIndexedIndexValuemax index value for indexed draw calls (for 32-bit indices) + uint32_t maxDrawIndirectCountmax draw count for indirect drawing calls + float maxSamplerLodBiasmax absolute sampler LOD bias + float maxSamplerAnisotropymax degree of sampler anisotropy + uint32_t maxViewportsmax number of active viewports + uint32_t maxViewportDimensions[2]max viewport dimensions (x,y) + float viewportBoundsRange[2]viewport bounds range (min,max) + uint32_t viewportSubPixelBitsnumber bits of subpixel precision for viewport + size_t minMemoryMapAlignmentmin required alignment of pointers returned by MapMemory (bytes) + VkDeviceSize minTexelBufferOffsetAlignmentmin required alignment for texel buffer offsets (bytes) + VkDeviceSize minUniformBufferOffsetAlignmentmin required alignment for uniform buffer sizes and offsets (bytes) + VkDeviceSize minStorageBufferOffsetAlignmentmin required alignment for storage buffer offsets (bytes) + int32_t minTexelOffsetmin texel offset for OpTextureSampleOffset + uint32_t maxTexelOffsetmax texel offset for OpTextureSampleOffset + int32_t minTexelGatherOffsetmin texel offset for OpTextureGatherOffset + uint32_t maxTexelGatherOffsetmax texel offset for OpTextureGatherOffset + float minInterpolationOffsetfurthest negative offset for interpolateAtOffset + float maxInterpolationOffsetfurthest positive offset for interpolateAtOffset + uint32_t subPixelInterpolationOffsetBitsnumber of subpixel bits for interpolateAtOffset + uint32_t maxFramebufferWidthmax width for a framebuffer + uint32_t maxFramebufferHeightmax height for a framebuffer + uint32_t maxFramebufferLayersmax layer count for a layered framebuffer + VkSampleCountFlags framebufferColorSampleCountssupported color sample counts for a framebuffer + VkSampleCountFlags framebufferDepthSampleCountssupported depth sample counts for a framebuffer + VkSampleCountFlags framebufferStencilSampleCountssupported stencil sample counts for a framebuffer + VkSampleCountFlags framebufferNoAttachmentsSampleCountssupported sample counts for a subpass which uses no attachments + uint32_t maxColorAttachmentsmax number of color attachments per subpass + VkSampleCountFlags sampledImageColorSampleCountssupported color sample counts for a non-integer sampled image + VkSampleCountFlags sampledImageIntegerSampleCountssupported sample counts for an integer image + VkSampleCountFlags sampledImageDepthSampleCountssupported depth sample counts for a sampled image + VkSampleCountFlags sampledImageStencilSampleCountssupported stencil sample counts for a sampled image + VkSampleCountFlags storageImageSampleCountssupported sample counts for a storage image + uint32_t maxSampleMaskWordsmax number of sample mask words + VkBool32 timestampComputeAndGraphicstimestamps on graphics and compute queues + float timestampPeriodnumber of nanoseconds it takes for timestamp query value to increment by 1 + uint32_t maxClipDistancesmax number of clip distances + uint32_t maxCullDistancesmax number of cull distances + uint32_t maxCombinedClipAndCullDistancesmax combined number of user clipping + uint32_t discreteQueuePrioritiesdistinct queue priorities available + float pointSizeRange[2]range (min,max) of supported point sizes + float lineWidthRange[2]range (min,max) of supported line widths + float pointSizeGranularitygranularity of supported point sizes + float lineWidthGranularitygranularity of supported line widths + VkBool32 strictLinesline rasterization follows preferred rules + VkBool32 standardSampleLocationssupports standard sample locations for all supported sample counts + VkDeviceSize optimalBufferCopyOffsetAlignmentoptimal offset of buffer copies + VkDeviceSize optimalBufferCopyRowPitchAlignmentoptimal pitch of buffer copies + VkDeviceSize nonCoherentAtomSizeminimum size and alignment for non-coherent host-mapped device memory access + + + VkStructureType sType + const void* pNext + VkSemaphoreCreateFlags flagsSemaphore creation flags + + + VkStructureType sType + const void* pNext + VkQueryPoolCreateFlags flags + VkQueryType queryType + uint32_t queryCount + VkQueryPipelineStatisticFlags pipelineStatisticsOptional + + + VkStructureType sType + const void* pNext + VkFramebufferCreateFlags flags + VkRenderPass renderPass + uint32_t attachmentCount + const VkImageView* pAttachments + uint32_t width + uint32_t height + uint32_t layers + + + uint32_t vertexCount + uint32_t instanceCount + uint32_t firstVertex + uint32_t firstInstance + + + uint32_t indexCount + uint32_t instanceCount + uint32_t firstIndex + int32_t vertexOffset + uint32_t firstInstance + + + uint32_t x + uint32_t y + uint32_t z + + + uint32_t firstVertex + uint32_t vertexCount + + + uint32_t firstIndex + uint32_t indexCount + int32_t vertexOffset + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreCount + const VkSemaphore* pWaitSemaphores + const VkPipelineStageFlags* pWaitDstStageMask + uint32_t commandBufferCount + const VkCommandBuffer* pCommandBuffers + uint32_t signalSemaphoreCount + const VkSemaphore* pSignalSemaphores + + WSI extensions + + VkDisplayKHR displayHandle of the display object + const char* displayNameName of the display + VkExtent2D physicalDimensionsIn millimeters? + VkExtent2D physicalResolutionMax resolution for CRT? + VkSurfaceTransformFlagsKHR supportedTransformsone or more bits from VkSurfaceTransformFlagsKHR + VkBool32 planeReorderPossibleVK_TRUE if the overlay plane's z-order can be changed on this display. + VkBool32 persistentContentVK_TRUE if this is a "smart" display that supports self-refresh/internal buffering. + + + VkDisplayKHR currentDisplayDisplay the plane is currently associated with. Will be VK_NULL_HANDLE if the plane is not in use. + uint32_t currentStackIndexCurrent z-order of the plane. + + + VkExtent2D visibleRegionVisible scanout region. + uint32_t refreshRateNumber of times per second the display is updated. + + + VkDisplayModeKHR displayModeHandle of this display mode. + VkDisplayModeParametersKHR parametersThe parameters this mode uses. + + + VkStructureType sType + const void* pNext + VkDisplayModeCreateFlagsKHR flags + VkDisplayModeParametersKHR parametersThe parameters this mode uses. + + + VkDisplayPlaneAlphaFlagsKHR supportedAlphaTypes of alpha blending supported, if any. + VkOffset2D minSrcPositionDoes the plane have any position and extent restrictions? + VkOffset2D maxSrcPosition + VkExtent2D minSrcExtent + VkExtent2D maxSrcExtent + VkOffset2D minDstPosition + VkOffset2D maxDstPosition + VkExtent2D minDstExtent + VkExtent2D maxDstExtent + + + VkStructureType sType + const void* pNext + VkDisplaySurfaceCreateFlagsKHR flags + VkDisplayModeKHR displayModeThe mode to use when displaying this surface + uint32_t planeIndexThe plane on which this surface appears. Must be between 0 and the value returned by vkGetPhysicalDeviceDisplayPlanePropertiesKHR() in pPropertyCount. + uint32_t planeStackIndexThe z-order of the plane. + VkSurfaceTransformFlagBitsKHR transformTransform to apply to the images as part of the scanout operation + float globalAlphaGlobal alpha value. Must be between 0 and 1, inclusive. Ignored if alphaMode is not VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR + VkDisplayPlaneAlphaFlagBitsKHR alphaModeThe type of alpha blending to use. Must be one of the bits from VkDisplayPlaneCapabilitiesKHR::supportedAlpha for this display plane + VkExtent2D imageExtentsize of the images to use with this surface + + + VkStructureType sType + const void* pNext + VkDisplaySurfaceStereoTypeNV stereoTypeThe 3D stereo type to use when presenting this surface. + + + VkStructureType sType + const void* pNext + VkRect2D srcRectRectangle within the presentable image to read pixel data from when presenting to the display. + VkRect2D dstRectRectangle within the current display mode's visible region to display srcRectangle in. + VkBool32 persistentFor smart displays, use buffered mode. If the display properties member "persistentMode" is VK_FALSE, this member must always be VK_FALSE. + + + uint32_t minImageCountSupported minimum number of images for the surface + uint32_t maxImageCountSupported maximum number of images for the surface, 0 for unlimited + VkExtent2D currentExtentCurrent image width and height for the surface, (0, 0) if undefined + VkExtent2D minImageExtentSupported minimum image width and height for the surface + VkExtent2D maxImageExtentSupported maximum image width and height for the surface + uint32_t maxImageArrayLayersSupported maximum number of image layers for the surface + VkSurfaceTransformFlagsKHR supportedTransforms1 or more bits representing the transforms supported + VkSurfaceTransformFlagBitsKHR currentTransformThe surface's current transform relative to the device's natural orientation + VkCompositeAlphaFlagsKHR supportedCompositeAlpha1 or more bits representing the alpha compositing modes supported + VkImageUsageFlags supportedUsageFlagsSupported image usage flags for the surface + + + VkStructureType sType + const void* pNext + VkAndroidSurfaceCreateFlagsKHR flags + struct ANativeWindow* window + + + VkStructureType sType + const void* pNext + VkViSurfaceCreateFlagsNN flags + void* window + + + VkStructureType sType + const void* pNext + VkWaylandSurfaceCreateFlagsKHR flags + struct wl_display* display + struct wl_surface* surface + + + VkStructureType sType + const void* pNext + VkWin32SurfaceCreateFlagsKHR flags + HINSTANCE hinstance + HWND hwnd + + + VkStructureType sType + const void* pNext + VkXlibSurfaceCreateFlagsKHR flags + Display* dpy + Window window + + + VkStructureType sType + const void* pNext + VkXcbSurfaceCreateFlagsKHR flags + xcb_connection_t* connection + xcb_window_t window + + + VkStructureType sType + const void* pNext + VkDirectFBSurfaceCreateFlagsEXT flags + IDirectFB* dfb + IDirectFBSurface* surface + + + VkStructureType sType + const void* pNext + VkImagePipeSurfaceCreateFlagsFUCHSIA flags + zx_handle_t imagePipeHandle + + + VkStructureType sType + const void* pNext + VkStreamDescriptorSurfaceCreateFlagsGGP flags + GgpStreamDescriptor streamDescriptor + + + VkStructureType sType + const void* pNext + VkScreenSurfaceCreateFlagsQNX flags + struct _screen_context* context + struct _screen_window* window + + + VkFormat formatSupported pair of rendering format + VkColorSpaceKHR colorSpaceand color space for the surface + + + VkStructureType sType + const void* pNext + VkSwapchainCreateFlagsKHR flags + VkSurfaceKHR surfaceThe swapchain's target surface + uint32_t minImageCountMinimum number of presentation images the application needs + VkFormat imageFormatFormat of the presentation images + VkColorSpaceKHR imageColorSpaceColorspace of the presentation images + VkExtent2D imageExtentDimensions of the presentation images + uint32_t imageArrayLayersDetermines the number of views for multiview/stereo presentation + VkImageUsageFlags imageUsageBits indicating how the presentation images will be used + VkSharingMode imageSharingModeSharing mode used for the presentation images + uint32_t queueFamilyIndexCountNumber of queue families having access to the images in case of concurrent sharing mode + const uint32_t* pQueueFamilyIndicesArray of queue family indices having access to the images in case of concurrent sharing mode + VkSurfaceTransformFlagBitsKHR preTransformThe transform, relative to the device's natural orientation, applied to the image content prior to presentation + VkCompositeAlphaFlagBitsKHR compositeAlphaThe alpha blending mode used when compositing this surface with other surfaces in the window system + VkPresentModeKHR presentModeWhich presentation mode to use for presents on this swap chain + VkBool32 clippedSpecifies whether presentable images may be affected by window clip regions + VkSwapchainKHR oldSwapchainExisting swap chain to replace, if any + VkSwapchainKHR oldSwapchainExisting swap chain to replace, if any + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreCountNumber of semaphores to wait for before presenting + const VkSemaphore* pWaitSemaphoresSemaphores to wait for before presenting + uint32_t swapchainCountNumber of swapchains to present in this call + const VkSwapchainKHR* pSwapchainsSwapchains to present an image from + const uint32_t* pImageIndicesIndices of which presentable images to present + VkResult* pResultsOptional (i.e. if non-NULL) VkResult for each swapchain + + + VkStructureType sType + const void* pNext + VkDebugReportFlagsEXT flagsIndicates which events call this callback + PFN_vkDebugReportCallbackEXT pfnCallbackFunction pointer of a callback function + void* pUserDataData provided to callback function + + + VkStructureType sTypeMust be VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT + const void* pNext + uint32_t disabledValidationCheckCountNumber of validation checks to disable + const VkValidationCheckEXT* pDisabledValidationChecksValidation checks to disable + + + VkStructureType sTypeMust be VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT + const void* pNext + uint32_t enabledValidationFeatureCountNumber of validation features to enable + const VkValidationFeatureEnableEXT* pEnabledValidationFeaturesValidation features to enable + uint32_t disabledValidationFeatureCountNumber of validation features to disable + const VkValidationFeatureDisableEXT* pDisabledValidationFeaturesValidation features to disable + + + VkStructureType sTypeMust be VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT + const void* pNext + uint32_t settingCountNumber of settings to configure + const VkLayerSettingEXT* pSettingsValidation features to enable + + + const char* pLayerName + const char* pSettingName + VkLayerSettingTypeEXT typeThe type of the object + uint32_t valueCountNumber of values of the setting + const void* pValuesValues to pass for a setting + + + VkStructureType sType + const void* pNext + uint32_t vendorID + uint32_t deviceID + uint32_t key + uint64_t value + + + VkStructureType sType + const void* pNext + VkRasterizationOrderAMD rasterizationOrderRasterization order to use for the pipeline + + + VkStructureType sType + const void* pNext + VkDebugReportObjectTypeEXT objectTypeThe type of the object + uint64_t objectThe handle of the object, cast to uint64_t + const char* pObjectNameName to apply to the object + + + VkStructureType sType + const void* pNext + VkDebugReportObjectTypeEXT objectTypeThe type of the object + uint64_t objectThe handle of the object, cast to uint64_t + uint64_t tagNameThe name of the tag to set on the object + size_t tagSizeThe length in bytes of the tag data + const void* pTagTag data to attach to the object + + + VkStructureType sType + const void* pNext + const char* pMarkerNameName of the debug marker + float color[4]Optional color for debug marker + + + VkStructureType sType + const void* pNext + VkBool32 dedicatedAllocationWhether this image uses a dedicated allocation + + + VkStructureType sType + const void* pNext + VkBool32 dedicatedAllocationWhether this buffer uses a dedicated allocation + + + VkStructureType sType + const void* pNext + VkImage imageImage that this allocation will be bound to + VkBuffer bufferBuffer that this allocation will be bound to + + + VkImageFormatProperties imageFormatProperties + VkExternalMemoryFeatureFlagsNV externalMemoryFeatures + VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes + VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagsNV handleTypes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagsNV handleTypes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagsNV handleType + HANDLE handle + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + + + VkStructureType sType + const void* pNext + NvSciBufAttrList pAttributes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + NvSciBufObj handle + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkBool32 sciBufImport + VkBool32 sciBufExport + + + + VkStructureType sType + const void* pNext + uint32_t acquireCount + const VkDeviceMemory* pAcquireSyncs + const uint64_t* pAcquireKeys + const uint32_t* pAcquireTimeoutMilliseconds + uint32_t releaseCount + const VkDeviceMemory* pReleaseSyncs + const uint64_t* pReleaseKeys + + + VkStructureType sType + void* pNext + VkBool32 deviceGeneratedCommands + + + VkStructureType sType + const void* pNext + uint32_t bank + + + VkStructureType sType + void* pNext + VkBool32 pushConstantBank + + + VkStructureType sType + void* pNext + uint32_t maxGraphicsPushConstantBanks + uint32_t maxComputePushConstantBanks + uint32_t maxGraphicsPushDataBanks + uint32_t maxComputePushDataBanks + + + VkStructureType sType + void* pNext + VkBool32 deviceGeneratedCompute + VkBool32 deviceGeneratedComputePipelines + VkBool32 deviceGeneratedComputeCaptureReplay + + + VkStructureType sType + const void* pNext + uint32_t privateDataSlotRequestCount + + + + VkStructureType sType + const void* pNext + VkPrivateDataSlotCreateFlags flags + + + + VkStructureType sType + void* pNext + VkBool32 privateData + + + + VkStructureType sType + void* pNext + uint32_t maxGraphicsShaderGroupCount + uint32_t maxIndirectSequenceCount + uint32_t maxIndirectCommandsTokenCount + uint32_t maxIndirectCommandsStreamCount + uint32_t maxIndirectCommandsTokenOffset + uint32_t maxIndirectCommandsStreamStride + uint32_t minSequencesCountBufferOffsetAlignment + uint32_t minSequencesIndexBufferOffsetAlignment + uint32_t minIndirectCommandsBufferOffsetAlignment + + + VkStructureType sType + void* pNext + VkBool32 clusterAccelerationStructure + + + VkStructureType sType + void* pNext + uint32_t maxVerticesPerCluster + uint32_t maxTrianglesPerCluster + uint32_t clusterScratchByteAlignment + uint32_t clusterByteAlignment + uint32_t clusterTemplateByteAlignment + uint32_t clusterBottomLevelByteAlignment + uint32_t clusterTemplateBoundsByteAlignment + uint32_t maxClusterGeometryIndex + + + VkDeviceAddress startAddress + VkDeviceSize strideInBytesSpecified in bytes + + + VkStructureType sType + void* pNext + VkBool32 allowClusterAccelerationStructure + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + uint32_t geometryIndex:24 + uint32_t reserved:5 + uint32_t geometryFlags:3 + + + VkDeviceAddress srcAccelerationStructure + + + uint32_t clusterReferencesCount + uint32_t clusterReferencesStride + VkDeviceAddress clusterReferences + + + VkDeviceAddress clusterTemplateAddress + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + uint32_t clusterID + VkClusterAccelerationStructureClusterFlagsNV clusterFlags + uint32_t triangleCount:9 + uint32_t vertexCount:9 + uint32_t positionTruncateBitCount:6 + uint32_t indexType:4 + uint32_t opacityMicromapIndexType:4 + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags + uint16_t indexBufferStride + uint16_t vertexBufferStride + uint16_t geometryIndexAndFlagsBufferStride + uint16_t opacityMicromapIndexBufferStride + VkDeviceAddress indexBuffer + VkDeviceAddress vertexBuffer + VkDeviceAddress geometryIndexAndFlagsBuffer + VkDeviceAddress opacityMicromapArray + VkDeviceAddress opacityMicromapIndexBuffer + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + uint32_t clusterID + VkClusterAccelerationStructureClusterFlagsNV clusterFlags + uint32_t triangleCount:9 + uint32_t vertexCount:9 + uint32_t positionTruncateBitCount:6 + uint32_t indexType:4 + uint32_t opacityMicromapIndexType:4 + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags + uint16_t indexBufferStride + uint16_t vertexBufferStride + uint16_t geometryIndexAndFlagsBufferStride + uint16_t opacityMicromapIndexBufferStride + VkDeviceAddress indexBuffer + VkDeviceAddress vertexBuffer + VkDeviceAddress geometryIndexAndFlagsBuffer + VkDeviceAddress opacityMicromapArray + VkDeviceAddress opacityMicromapIndexBuffer + VkDeviceAddress instantiationBoundingBoxLimit + + + uint32_t clusterIdOffset + uint32_t geometryIndexOffset:24 + uint32_t reserved:8 + VkDeviceAddress clusterTemplateAddress + VkStridedDeviceAddressNV vertexBuffer + + + VkStructureType sType + void* pNext + uint32_t maxTotalClusterCount + uint32_t maxClusterCountPerAccelerationStructure + + + VkStructureType sType + void* pNext + VkFormat vertexFormat + uint32_t maxGeometryIndexValue + uint32_t maxClusterUniqueGeometryCount + uint32_t maxClusterTriangleCount + uint32_t maxClusterVertexCount + uint32_t maxTotalTriangleCount + uint32_t maxTotalVertexCount + uint32_t minPositionTruncateBitCount + + + VkStructureType sType + void* pNext + VkClusterAccelerationStructureTypeNV type + VkBool32 noMoveOverlap + VkDeviceSize maxMovedBytes + + + VkClusterAccelerationStructureClustersBottomLevelInputNV* pClustersBottomLevel + VkClusterAccelerationStructureTriangleClusterInputNV* pTriangleClusters + VkClusterAccelerationStructureMoveObjectsInputNV* pMoveObjects + + + VkStructureType sType + void* pNext + uint32_t maxAccelerationStructureCount + VkBuildAccelerationStructureFlagsKHR flags + VkClusterAccelerationStructureOpTypeNV opType + VkClusterAccelerationStructureOpModeNV opMode + VkClusterAccelerationStructureOpInputNV opInput + + + VkStructureType sType + void* pNext + VkClusterAccelerationStructureInputInfoNV input + VkDeviceAddress dstImplicitData + VkDeviceAddress scratchData + VkStridedDeviceAddressRegionKHR dstAddressesArray + VkStridedDeviceAddressRegionKHR dstSizesArray + VkStridedDeviceAddressRegionKHR srcInfosArray + VkDeviceAddress srcInfosCount + VkClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags + + + VkStructureType sType + void* pNext + uint32_t maxMultiDrawCount + + + VkStructureType sType + const void* pNext + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStages + const VkPipelineVertexInputStateCreateInfo* pVertexInputState + const VkPipelineTessellationStateCreateInfo* pTessellationState + + + VkStructureType sType + const void* pNext + uint32_t groupCount + const VkGraphicsShaderGroupCreateInfoNV* pGroups + uint32_t pipelineCount + const VkPipeline* pPipelines + + + uint32_t groupIndex + + + VkDeviceAddress bufferAddress + uint32_t size + VkIndexType indexType + + + VkDeviceAddress bufferAddress + uint32_t size + uint32_t stride + + + uint32_t data + + + VkBuffer buffer + VkDeviceSize offset + + + VkStructureType sType + const void* pNext + VkIndirectCommandsTokenTypeNV tokenType + uint32_t stream + uint32_t offset + uint32_t vertexBindingUnit + VkBool32 vertexDynamicStride + VkPipelineLayout pushconstantPipelineLayout + VkShaderStageFlags pushconstantShaderStageFlags + uint32_t pushconstantOffset + uint32_t pushconstantSize + VkIndirectStateFlagsNV indirectStateFlags + uint32_t indexTypeCount + const VkIndexType* pIndexTypes + const uint32_t* pIndexTypeValues + + + VkStructureType sType + const void* pNext + VkIndirectCommandsLayoutUsageFlagsNV flags + VkPipelineBindPoint pipelineBindPoint + uint32_t tokenCount + const VkIndirectCommandsLayoutTokenNV* pTokens + uint32_t streamCount + const uint32_t* pStreamStrides + + + VkStructureType sType + const void* pNext + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + VkIndirectCommandsLayoutNV indirectCommandsLayout + uint32_t streamCount + const VkIndirectCommandsStreamNV* pStreams + uint32_t sequencesCount + VkBuffer preprocessBuffer + VkDeviceSize preprocessOffset + VkDeviceSize preprocessSize + VkBuffer sequencesCountBuffer + VkDeviceSize sequencesCountOffset + VkBuffer sequencesIndexBuffer + VkDeviceSize sequencesIndexOffset + + + VkStructureType sType + const void* pNext + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + VkIndirectCommandsLayoutNV indirectCommandsLayout + uint32_t maxSequencesCount + + + VkStructureType sType + const void* pNext + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + + + VkDeviceAddress pipelineAddress + + + VkStructureType sType + void* pNext + VkPhysicalDeviceFeatures features + + + + VkStructureType sType + void* pNext + VkPhysicalDeviceProperties properties + + + + VkStructureType sType + void* pNext + VkFormatProperties formatProperties + + + + VkStructureType sType + void* pNext + VkImageFormatProperties imageFormatProperties + + + + VkStructureType sType + const void* pNext + VkFormat format + VkImageType type + VkImageTiling tiling + VkImageUsageFlags usage + VkImageCreateFlags flags + + + + VkStructureType sType + void* pNext + VkQueueFamilyProperties queueFamilyProperties + + + + VkStructureType sType + void* pNext + VkPhysicalDeviceMemoryProperties memoryProperties + + + + VkStructureType sType + void* pNext + VkSparseImageFormatProperties properties + + + + VkStructureType sType + const void* pNext + VkFormat format + VkImageType type + VkSampleCountFlagBits samples + VkImageUsageFlags usage + VkImageTiling tiling + + + + VkStructureType sType + void* pNext + uint32_t maxPushDescriptors + + + + uint8_t major + uint8_t minor + uint8_t subminor + uint8_t patch + + + + VkStructureType sType + void* pNext + VkDriverId driverID + char driverName[VK_MAX_DRIVER_NAME_SIZE] + char driverInfo[VK_MAX_DRIVER_INFO_SIZE] + VkConformanceVersion conformanceVersion + + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentRegionKHR* pRegionsThe regions that have changed + + + uint32_t rectangleCountNumber of rectangles in pRectangles + const VkRectLayerKHR* pRectanglesArray of rectangles that have changed in a swapchain's image(s) + + + VkOffset2D offsetupper-left corner of a rectangle that has not changed, in pixels of a presentation images + VkExtent2D extentDimensions of a rectangle that has not changed, in pixels of a presentation images + uint32_t layerLayer of a swapchain's image(s), for stereoscopic-3D images + + + VkStructureType sType + void* pNext + VkBool32 variablePointersStorageBuffer + VkBool32 variablePointers + + + + + + VkExternalMemoryFeatureFlags externalMemoryFeatures + VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes + VkExternalMemoryHandleTypeFlags compatibleHandleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalMemoryProperties externalMemoryProperties + + + + VkStructureType sType + const void* pNext + VkBufferCreateFlags flags + VkBufferUsageFlags usage + VkExternalMemoryHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalMemoryProperties externalMemoryProperties + + + + VkStructureType sType + void* pNext + uint8_t deviceUUID[VK_UUID_SIZE] + uint8_t driverUUID[VK_UUID_SIZE] + uint8_t deviceLUID[VK_LUID_SIZE] + uint32_t deviceNodeMask + VkBool32 deviceLUIDValid + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + HANDLE handle + LPCWSTR name + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + LPCWSTR name + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + zx_handle_t handle + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + int fd + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + uint32_t acquireCount + const VkDeviceMemory* pAcquireSyncs + const uint64_t* pAcquireKeys + const uint32_t* pAcquireTimeouts + uint32_t releaseCount + const VkDeviceMemory* pReleaseSyncs + const uint64_t* pReleaseKeys + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + void* handle + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalSemaphoreHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes + VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes + VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures + + + + VkStructureType sType + const void* pNext + VkExternalSemaphoreHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkSemaphoreImportFlags flags + VkExternalSemaphoreHandleTypeFlagBits handleType + HANDLE handle + LPCWSTR name + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + LPCWSTR name + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreValuesCount + const uint64_t* pWaitSemaphoreValues + uint32_t signalSemaphoreValuesCount + const uint64_t* pSignalSemaphoreValues + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkSemaphoreImportFlags flags + VkExternalSemaphoreHandleTypeFlagBits handleType + int fd + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkSemaphoreImportFlags flags + VkExternalSemaphoreHandleTypeFlagBits handleType + zx_handle_t zirconHandle + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalFenceHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes + VkExternalFenceHandleTypeFlags compatibleHandleTypes + VkExternalFenceFeatureFlags externalFenceFeatures + + + + VkStructureType sType + const void* pNext + VkExternalFenceHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkFence fence + VkFenceImportFlags flags + VkExternalFenceHandleTypeFlagBits handleType + HANDLE handle + LPCWSTR name + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + LPCWSTR name + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkFence fence + VkFenceImportFlags flags + VkExternalFenceHandleTypeFlagBits handleType + int fd + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + NvSciSyncAttrList pAttributes + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + void* handle + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + NvSciSyncAttrList pAttributes + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + void* handle + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkSciSyncClientTypeNV clientType + VkSciSyncPrimitiveTypeNV primitiveType + + + VkStructureType sType + void* pNext + VkBool32 sciSyncFence + VkBool32 sciSyncSemaphore + VkBool32 sciSyncImport + VkBool32 sciSyncExport + + + VkStructureType sType + void* pNext + VkBool32 sciSyncFence + VkBool32 sciSyncSemaphore2 + VkBool32 sciSyncImport + VkBool32 sciSyncExport + + + VkStructureType sType + const void* pNext + NvSciSyncObj handle + + + VkStructureType sType + const void* pNext + VkSemaphoreSciSyncPoolNV semaphorePool + const NvSciSyncFence* pFence + + + VkStructureType sType + const void* pNext + uint32_t semaphoreSciSyncPoolRequestCount + + + VkStructureType sType + void* pNext + VkBool32 multiviewMultiple views in a render pass + VkBool32 multiviewGeometryShaderMultiple views in a render pass w/ geometry shader + VkBool32 multiviewTessellationShaderMultiple views in a render pass w/ tessellation shader + + + + VkStructureType sType + void* pNext + uint32_t maxMultiviewViewCountmax number of views in a subpass + uint32_t maxMultiviewInstanceIndexmax instance index for a draw in a multiview subpass + + + + VkStructureType sType + const void* pNext + uint32_t subpassCount + const uint32_t* pViewMasks + uint32_t dependencyCount + const int32_t* pViewOffsets + uint32_t correlationMaskCount + const uint32_t* pCorrelationMasks + + + + VkStructureType sType + void* pNext + uint32_t minImageCountSupported minimum number of images for the surface + uint32_t maxImageCountSupported maximum number of images for the surface, 0 for unlimited + VkExtent2D currentExtentCurrent image width and height for the surface, (0, 0) if undefined + VkExtent2D minImageExtentSupported minimum image width and height for the surface + VkExtent2D maxImageExtentSupported maximum image width and height for the surface + uint32_t maxImageArrayLayersSupported maximum number of image layers for the surface + VkSurfaceTransformFlagsKHR supportedTransforms1 or more bits representing the transforms supported + VkSurfaceTransformFlagBitsKHR currentTransformThe surface's current transform relative to the device's natural orientation + VkCompositeAlphaFlagsKHR supportedCompositeAlpha1 or more bits representing the alpha compositing modes supported + VkImageUsageFlags supportedUsageFlagsSupported image usage flags for the surface + VkSurfaceCounterFlagsEXT supportedSurfaceCounters + + + VkStructureType sType + const void* pNext + VkDisplayPowerStateEXT powerState + + + VkStructureType sType + const void* pNext + VkDeviceEventTypeEXT deviceEvent + + + VkStructureType sType + const void* pNext + VkDisplayEventTypeEXT displayEvent + + + VkStructureType sType + const void* pNext + VkSurfaceCounterFlagsEXT surfaceCounters + + + VkStructureType sType + void* pNext + uint32_t physicalDeviceCount + VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE] + VkBool32 subsetAllocation + + + + VkStructureType sType + const void* pNext + VkMemoryAllocateFlags flags + uint32_t deviceMask + + + + VkStructureType sType + const void* pNext + VkBuffer buffer + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + + VkStructureType sType + const void* pNext + uint32_t deviceIndexCount + const uint32_t* pDeviceIndices + + + + VkStructureType sType + const void* pNext + VkImage image + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + + VkStructureType sType + const void* pNext + uint32_t deviceIndexCount + const uint32_t* pDeviceIndices + uint32_t splitInstanceBindRegionCount + const VkRect2D* pSplitInstanceBindRegions + + + + VkStructureType sType + const void* pNext + uint32_t deviceMask + uint32_t deviceRenderAreaCount + const VkRect2D* pDeviceRenderAreas + + + + VkStructureType sType + const void* pNext + uint32_t deviceMask + + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreCount + const uint32_t* pWaitSemaphoreDeviceIndices + uint32_t commandBufferCount + const uint32_t* pCommandBufferDeviceMasks + uint32_t signalSemaphoreCount + const uint32_t* pSignalSemaphoreDeviceIndices + + + + VkStructureType sType + const void* pNext + uint32_t resourceDeviceIndex + uint32_t memoryDeviceIndex + + + + VkStructureType sType + void* pNext + uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE] + VkDeviceGroupPresentModeFlagsKHR modes + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + uint32_t imageIndex + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + uint64_t timeout + VkSemaphore semaphore + VkFence fence + uint32_t deviceMask + + + VkStructureType sType + const void* pNext + uint32_t swapchainCount + const uint32_t* pDeviceMasks + VkDeviceGroupPresentModeFlagBitsKHR mode + + + VkStructureType sType + const void* pNext + uint32_t physicalDeviceCount + const VkPhysicalDevice* pPhysicalDevices + + + + VkStructureType sType + const void* pNext + VkDeviceGroupPresentModeFlagsKHR modes + + + uint32_t dstBindingBinding within the destination descriptor set to write + uint32_t dstArrayElementArray element within the destination binding to write + uint32_t descriptorCountNumber of descriptors to write + VkDescriptorType descriptorTypeDescriptor type to write + size_t offsetOffset into pData where the descriptors to update are stored + size_t strideStride between two descriptors in pData when writing more than one descriptor + + + + VkStructureType sType + const void* pNext + VkDescriptorUpdateTemplateCreateFlags flags + uint32_t descriptorUpdateEntryCountNumber of descriptor update entries to use for the update template + const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntriesDescriptor update entries for the template + VkDescriptorUpdateTemplateType templateType + VkDescriptorSetLayout descriptorSetLayout + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout pipelineLayoutIf used for push descriptors, this is the only allowed layout + uint32_t set + + + + float x + float y + + + VkStructureType sType + void* pNext + VkBool32 presentIdPresent ID in VkPresentInfoKHR + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const uint64_t* pPresentIdsPresent ID values for each swapchain + + + VkStructureType sType + void* pNext + VkBool32 presentId2Present ID2 in VkPresentInfoKHR + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const uint64_t* pPresentIdsPresent ID values for each swapchain + + + VkStructureType sType + const void* pNext + uint64_t presentId + uint64_t timeout + + + VkStructureType sType + void* pNext + VkBool32 presentWaitvkWaitForPresentKHR is supported + + + VkStructureType sType + void* pNext + VkBool32 presentWait2vkWaitForPresent2KHR is supported + + + VkStructureType sType + void* pNext + VkBool32 presentTimingvkGetPastPresentationTimingEXT is supported + VkBool32 presentAtAbsoluteTimeAbsolute time can be used to specify present time + VkBool32 presentAtRelativeTimeRelative time can be used to specify present duration + + + VkStructureType sType + void* pNext + VkBool32 presentTimingSupportedpresentation timings of the surface can be queried using vkGetPastPresentationTimingEXT + VkBool32 presentAtAbsoluteTimeSupportedsurface can be presented using absolute times + VkBool32 presentAtRelativeTimeSupportedsurface can be presented using relative times + VkPresentStageFlagsEXT presentStageQueriespresent stages that can be queried + + + VkStructureType sType + void* pNext + uint64_t refreshDurationNumber of nanoseconds from the start of one refresh cycle to the next + uint64_t refreshIntervalInterval in nanoseconds between refresh cycles durations + + + VkStructureType sType + void* pNext + uint32_t timeDomainCount + VkTimeDomainKHR* pTimeDomainsAvailable time domains to use with the swapchain + uint64_t* pTimeDomainIdsUnique identifier for a time domain + + + VkPresentStageFlagsEXT stage + uint64_t timeTime in nanoseconds of the associated stage + + + VkStructureType sType + const void* pNext + VkPastPresentationTimingFlagsEXT flags + VkSwapchainKHR swapchain + + + VkStructureType sType + void* pNext + uint64_t timingPropertiesCounter + uint64_t timeDomainsCounter + uint32_t presentationTimingCount + VkPastPresentationTimingEXT* pPresentationTimings + + + VkStructureType sType + void* pNext + uint64_t presentIdApplication-provided identifier, previously given to vkQueuePresentKHR + uint64_t targetTimeApplication-provided present time + uint32_t presentStageCountNumber of present stages results available in pPresentStages + VkPresentStageTimeEXT* pPresentStagesReported timings for each present stage + VkTimeDomainKHR timeDomainTime domain of the present stages + uint64_t timeDomainIdTime domain id of the present stages + VkBool32 reportCompleteVK_TRUE if all the present stages have been reported + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentTimingInfoEXT* pTimingInfosPresent timing details for each swapchain + + + VkStructureType sType + const void* pNext + VkPresentTimingInfoFlagsEXT flags + uint64_t targetTime + uint64_t timeDomainIdTime domain to interpret the target present time and collect present stages timings with + VkPresentStageFlagsEXT presentStageQueriesPresent stages to collect timing information for + VkPresentStageFlagsEXT targetTimeDomainPresentStageTarget stage-local time domain's stage + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + VkPresentStageFlagsEXT presentStage + uint64_t timeDomainId + + + Display primary in chromaticity coordinates + VkStructureType sType + const void* pNext + From SMPTE 2086 + VkXYColorEXT displayPrimaryRedDisplay primary's Red + VkXYColorEXT displayPrimaryGreenDisplay primary's Green + VkXYColorEXT displayPrimaryBlueDisplay primary's Blue + VkXYColorEXT whitePointDisplay primary's Blue + float maxLuminanceDisplay maximum luminance + float minLuminanceDisplay minimum luminance + From CTA 861.3 + float maxContentLightLevelContent maximum luminance + float maxFrameAverageLightLevel + + + VkStructureType sType + const void* pNext + size_t dynamicMetadataSizeSpecified in bytes + const void* pDynamicMetadataBinary code of size dynamicMetadataSize + + + VkStructureType sType + void* pNext + VkBool32 localDimmingSupport + + + VkStructureType sType + const void* pNext + VkBool32 localDimmingEnable + + + uint64_t refreshDurationNumber of nanoseconds from the start of one refresh cycle to the next + + + uint32_t presentIDApplication-provided identifier, previously given to vkQueuePresentKHR + uint64_t desiredPresentTimeEarliest time an image should have been presented, previously given to vkQueuePresentKHR + uint64_t actualPresentTimeTime the image was actually displayed + uint64_t earliestPresentTimeEarliest time the image could have been displayed + uint64_t presentMarginHow early vkQueuePresentKHR was processed vs. how soon it needed to be and make earliestPresentTime + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentTimeGOOGLE* pTimesThe earliest times to present images + + + uint32_t presentIDApplication-provided identifier + uint64_t desiredPresentTimeEarliest time an image should be presented + + + VkStructureType sType + const void* pNext + VkIOSSurfaceCreateFlagsMVK flags + const void* pView + + + VkStructureType sType + const void* pNext + VkMacOSSurfaceCreateFlagsMVK flags + const void* pView + + + VkStructureType sType + const void* pNext + VkMetalSurfaceCreateFlagsEXT flags + const CAMetalLayer* pLayer + + + float xcoeff + float ycoeff + + + VkStructureType sType + const void* pNext + VkBool32 viewportWScalingEnable + uint32_t viewportCount + const VkViewportWScalingNV* pViewportWScalings + + + VkViewportCoordinateSwizzleNV x + VkViewportCoordinateSwizzleNV y + VkViewportCoordinateSwizzleNV z + VkViewportCoordinateSwizzleNV w + + + VkStructureType sType + const void* pNext + VkPipelineViewportSwizzleStateCreateFlagsNV flags + uint32_t viewportCount + const VkViewportSwizzleNV* pViewportSwizzles + + + VkStructureType sType + void* pNext + uint32_t maxDiscardRectanglesmax number of active discard rectangles + + + VkStructureType sType + const void* pNext + VkPipelineDiscardRectangleStateCreateFlagsEXT flags + VkDiscardRectangleModeEXT discardRectangleMode + uint32_t discardRectangleCount + const VkRect2D* pDiscardRectangles + + + VkStructureType sType + void* pNext + VkBool32 perViewPositionAllComponents + + + uint32_t subpass + uint32_t inputAttachmentIndex + VkImageAspectFlags aspectMask + + + + VkStructureType sType + const void* pNext + uint32_t aspectReferenceCount + const VkInputAttachmentAspectReference* pAspectReferences + + + + VkStructureType sType + const void* pNext + VkSurfaceKHR surface + + + VkStructureType sType + void* pNext + VkSurfaceCapabilitiesKHR surfaceCapabilities + + + VkStructureType sType + void* pNext + VkSurfaceFormatKHR surfaceFormat + + + VkStructureType sType + void* pNext + VkDisplayPropertiesKHR displayProperties + + + VkStructureType sType + void* pNext + VkDisplayPlanePropertiesKHR displayPlaneProperties + + + VkStructureType sType + void* pNext + VkDisplayModePropertiesKHR displayModeProperties + + + VkStructureType sType + void* pNext + VkBool32 hdmi3DSupportedWhether this mode supports HDMI 3D stereo rendering. + + + VkStructureType sType + const void* pNext + VkDisplayModeKHR mode + uint32_t planeIndex + + + VkStructureType sType + void* pNext + VkDisplayPlaneCapabilitiesKHR capabilities + + + VkStructureType sType + void* pNext + VkImageUsageFlags sharedPresentSupportedUsageFlagsSupported image usage flags if swapchain created using a shared present mode + + + VkStructureType sType + void* pNext + VkBool32 storageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock + VkBool32 uniformAndStorageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock and Block + VkBool32 storagePushConstant1616-bit integer/floating-point variables supported in PushConstant + VkBool32 storageInputOutput1616-bit integer/floating-point variables supported in shader inputs and outputs + + + + VkStructureType sType + void* pNext + uint32_t subgroupSizeThe size of a subgroup for this queue. + VkShaderStageFlags supportedStagesBitfield of what shader stages support subgroup operations + VkSubgroupFeatureFlags supportedOperationsBitfield of what subgroup operations are supported. + VkBool32 quadOperationsInAllStagesFlag to specify whether quad operations are available in all stages. + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupExtendedTypesFlag to specify whether subgroup operations with extended types are supported + + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + + VkStructureType sType + const void* pNext + const VkBufferCreateInfo* pCreateInfo + + + + VkStructureType sType + const void* pNext + VkImage image + + + + VkStructureType sType + const void* pNext + VkImage image + + + + VkStructureType sType + const void* pNext + const VkImageCreateInfo* pCreateInfo + VkImageAspectFlagBits planeAspect + + + + VkStructureType sType + void* pNext + VkMemoryRequirements memoryRequirements + + + + VkStructureType sType + void* pNext + VkSparseImageMemoryRequirements memoryRequirements + + + + VkStructureType sType + void* pNext + VkPointClippingBehavior pointClippingBehavior + + + + VkStructureType sType + void* pNext + VkBool32 prefersDedicatedAllocation + VkBool32 requiresDedicatedAllocation + + + + VkStructureType sType + const void* pNext + VkImage imageImage that this allocation will be bound to + VkBuffer bufferBuffer that this allocation will be bound to + + + + VkStructureType sType + const void* pNext + VkImageUsageFlags usage + + + VkStructureType sType + const void* pNext + uint32_t sliceOffset + uint32_t sliceCount + + + + VkStructureType sType + const void* pNext + VkTessellationDomainOrigin domainOrigin + + + + VkStructureType sType + const void* pNext + VkSamplerYcbcrConversion conversion + + + + VkStructureType sType + const void* pNext + VkFormat format + VkSamplerYcbcrModelConversion ycbcrModel + VkSamplerYcbcrRange ycbcrRange + VkComponentMapping components + VkChromaLocation xChromaOffset + VkChromaLocation yChromaOffset + VkFilter chromaFilter + VkBool32 forceExplicitReconstruction + + + + VkStructureType sType + const void* pNext + VkImageAspectFlagBits planeAspect + + + + VkStructureType sType + const void* pNext + VkImageAspectFlagBits planeAspect + + + + VkStructureType sType + void* pNext + VkBool32 samplerYcbcrConversionSampler color conversion supported + + + + VkStructureType sType + void* pNext + uint32_t combinedImageSamplerDescriptorCount + + + + VkStructureType sType + void* pNext + VkBool32 supportsTextureGatherLODBiasAMD + + + VkStructureType sType + const void* pNext + VkBuffer buffer + VkDeviceSize offset + VkConditionalRenderingFlagsEXT flags + + + VkStructureType sType + const void* pNext + VkBool32 protectedSubmitSubmit protected command buffers + + + VkStructureType sType + void* pNext + VkBool32 protectedMemory + + + VkStructureType sType + void* pNext + VkBool32 protectedNoFault + + + VkStructureType sType + const void* pNext + VkDeviceQueueCreateFlags flags + uint32_t queueFamilyIndex + uint32_t queueIndex + + + VkStructureType sType + const void* pNext + VkPipelineCoverageToColorStateCreateFlagsNV flags + VkBool32 coverageToColorEnable + uint32_t coverageToColorLocation + + + VkStructureType sType + void* pNext + VkBool32 filterMinmaxSingleComponentFormats + VkBool32 filterMinmaxImageComponentMapping + + + + float x + float y + + + VkStructureType sType + const void* pNext + VkSampleCountFlagBits sampleLocationsPerPixel + VkExtent2D sampleLocationGridSize + uint32_t sampleLocationsCount + const VkSampleLocationEXT* pSampleLocations + + + uint32_t attachmentIndex + VkSampleLocationsInfoEXT sampleLocationsInfo + + + uint32_t subpassIndex + VkSampleLocationsInfoEXT sampleLocationsInfo + + + VkStructureType sType + const void* pNext + uint32_t attachmentInitialSampleLocationsCount + const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations + uint32_t postSubpassSampleLocationsCount + const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations + + + VkStructureType sType + const void* pNext + VkBool32 sampleLocationsEnable + VkSampleLocationsInfoEXT sampleLocationsInfo + + + VkStructureType sType + void* pNext + VkSampleCountFlags sampleLocationSampleCounts + VkExtent2D maxSampleLocationGridSize + float sampleLocationCoordinateRange[2] + uint32_t sampleLocationSubPixelBits + VkBool32 variableSampleLocations + + + VkStructureType sType + void* pNext + VkExtent2D maxSampleLocationGridSize + + + VkStructureType sType + const void* pNext + VkSamplerReductionMode reductionMode + + + + VkStructureType sType + void* pNext + VkBool32 advancedBlendCoherentOperations + + + VkStructureType sType + void* pNext + VkBool32 multiDraw + + + VkStructureType sType + void* pNext + uint32_t advancedBlendMaxColorAttachments + VkBool32 advancedBlendIndependentBlend + VkBool32 advancedBlendNonPremultipliedSrcColor + VkBool32 advancedBlendNonPremultipliedDstColor + VkBool32 advancedBlendCorrelatedOverlap + VkBool32 advancedBlendAllOperations + + + VkStructureType sType + const void* pNext + VkBool32 srcPremultiplied + VkBool32 dstPremultiplied + VkBlendOverlapEXT blendOverlap + + + VkStructureType sType + void* pNext + VkBool32 inlineUniformBlock + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind + + + + VkStructureType sType + void* pNext + uint32_t maxInlineUniformBlockSize + uint32_t maxPerStageDescriptorInlineUniformBlocks + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks + uint32_t maxDescriptorSetInlineUniformBlocks + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks + + + + VkStructureType sType + const void* pNext + uint32_t dataSize + const void* pData + + + + VkStructureType sType + const void* pNext + uint32_t maxInlineUniformBlockBindings + + + + VkStructureType sType + const void* pNext + VkPipelineCoverageModulationStateCreateFlagsNV flags + VkCoverageModulationModeNV coverageModulationMode + VkBool32 coverageModulationTableEnable + uint32_t coverageModulationTableCount + const float* pCoverageModulationTable + + + VkStructureType sType + const void* pNext + uint32_t viewFormatCount + const VkFormat* pViewFormats + + + + VkStructureType sType + const void* pNext + VkValidationCacheCreateFlagsEXT flags + size_t initialDataSize + const void* pInitialData + + + VkStructureType sType + const void* pNext + VkValidationCacheEXT validationCache + + + VkStructureType sType + void* pNext + uint32_t maxPerSetDescriptors + VkDeviceSize maxMemoryAllocationSize + + + + VkStructureType sType + void* pNext + VkBool32 maintenance4 + + + + VkStructureType sType + void* pNext + VkDeviceSize maxBufferSize + + + + VkStructureType sType + void* pNext + VkBool32 maintenance5 + + + + VkStructureType sType + void* pNext + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting + VkBool32 depthStencilSwizzleOneSupport + VkBool32 polygonModePointSize + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram + VkBool32 nonStrictWideLinesUseParallelogram + + + + VkStructureType sType + void* pNext + VkBool32 maintenance6 + + + + VkStructureType sType + void* pNext + VkBool32 blockTexelViewCompatibleMultipleLayers + uint32_t maxCombinedImageSamplerDescriptorCount + VkBool32 fragmentShadingRateClampCombinerInputs + + + + VkStructureType sType + void* pNext + VkBool32 maintenance7 + + + VkStructureType sType + void* pNext + VkBool32 robustFragmentShadingRateAttachmentAccess + VkBool32 separateDepthStencilAttachmentAccess + uint32_t maxDescriptorSetTotalUniformBuffersDynamic + uint32_t maxDescriptorSetTotalStorageBuffersDynamic + uint32_t maxDescriptorSetTotalBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic + + + VkStructureType sType + void* pNext + uint32_t layeredApiCount + VkPhysicalDeviceLayeredApiPropertiesKHR* pLayeredApisOutput list of layered implementations underneath the physical device + + + VkStructureType sType + void* pNext + uint32_t vendorID + uint32_t deviceID + VkPhysicalDeviceLayeredApiKHR layeredAPI + char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] + + + VkStructureType sType + void* pNext + VkPhysicalDeviceProperties2 properties + + + VkStructureType sType + void* pNext + VkBool32 maintenance8 + + + VkStructureType sType + void* pNext + VkBool32 maintenance9 + + + VkStructureType sType + void* pNext + VkBool32 image2DViewOf3DSparse + VkDefaultVertexAttributeValueKHR defaultVertexAttributeValue + + + VkStructureType sType + void* pNext + VkBool32 rgba4OpaqueBlackSwizzled + VkBool32 resolveSrgbFormatAppliesTransferFunction + VkBool32 resolveSrgbFormatSupportsTransferFunctionControl + + + VkStructureType sType + void* pNext + VkBool32 maintenance10 + + + VkStructureType sType + void* pNext + uint32_t optimalImageTransferToQueueFamilies + + + VkStructureType sType + const void* pNext + uint32_t viewMask + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + + + + VkStructureType sType + void* pNext + VkBool32 supported + + + + VkStructureType sType + void* pNext + VkBool32 shaderDrawParameters + + + + VkStructureType sType + void* pNext + VkBool32 shaderFloat1616-bit floats (halfs) in shaders + VkBool32 shaderInt88-bit integers in shaders + + + + + VkStructureType sType + void* pNext + VkShaderFloatControlsIndependence denormBehaviorIndependence + VkShaderFloatControlsIndependence roundingModeIndependence + VkBool32 shaderSignedZeroInfNanPreserveFloat16An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat32An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat64An implementation can preserve signed zero, nan, inf + VkBool32 shaderDenormPreserveFloat16An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat32An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat64An implementation can preserve denormals + VkBool32 shaderDenormFlushToZeroFloat16An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat32An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat64An implementation can flush to zero denormals + VkBool32 shaderRoundingModeRTEFloat16An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat32An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat64An implementation can support RTE + VkBool32 shaderRoundingModeRTZFloat16An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat32An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat64An implementation can support RTZ + + + + VkStructureType sType + void* pNext + VkBool32 hostQueryReset + + + + uint64_t consumer + uint64_t producer + + + VkStructureType sType + const void* pNext + const void* handle + int stride + int format + int usage + VkNativeBufferUsage2ANDROID usage2 + + + VkStructureType sType + const void* pNext + VkSwapchainImageUsageFlagsANDROID usage + + + VkStructureType sType + void* pNext + VkBool32 sharedImage + + + uint32_t numUsedVgprs + uint32_t numUsedSgprs + uint32_t ldsSizePerLocalWorkGroup + size_t ldsUsageSizeInBytes + size_t scratchMemUsageInBytes + + + VkShaderStageFlags shaderStageMask + VkShaderResourceUsageAMD resourceUsage + uint32_t numPhysicalVgprs + uint32_t numPhysicalSgprs + uint32_t numAvailableVgprs + uint32_t numAvailableSgprs + uint32_t computeWorkGroupSize[3] + + + VkStructureType sType + const void* pNext + VkQueueGlobalPriority globalPriority + + + + + VkStructureType sType + void* pNext + VkBool32 globalPriorityQuery + + + + + VkStructureType sType + void* pNext + uint32_t priorityCount + VkQueueGlobalPriority priorities[VK_MAX_GLOBAL_PRIORITY_SIZE] + + + + + VkStructureType sType + const void* pNext + VkObjectType objectType + uint64_t objectHandle + const char* pObjectName + + + VkStructureType sType + const void* pNext + VkObjectType objectType + uint64_t objectHandle + uint64_t tagName + size_t tagSize + const void* pTag + + + VkStructureType sType + const void* pNext + const char* pLabelName + float color[4] + + + VkStructureType sType + const void* pNext + VkDebugUtilsMessengerCreateFlagsEXT flags + VkDebugUtilsMessageSeverityFlagsEXT messageSeverity + VkDebugUtilsMessageTypeFlagsEXT messageType + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback + void* pUserData + + + VkStructureType sType + const void* pNext + VkDebugUtilsMessengerCallbackDataFlagsEXT flags + const char* pMessageIdName + int32_t messageIdNumber + const char* pMessage + uint32_t queueLabelCount + const VkDebugUtilsLabelEXT* pQueueLabels + uint32_t cmdBufLabelCount + const VkDebugUtilsLabelEXT* pCmdBufLabels + uint32_t objectCount + const VkDebugUtilsObjectNameInfoEXT* pObjects + + + VkStructureType sType + void* pNext + VkBool32 deviceMemoryReport + + + VkStructureType sType + const void* pNext + VkDeviceMemoryReportFlagsEXT flags + PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback + void* pUserData + + + VkStructureType sType + void* pNext + VkDeviceMemoryReportFlagsEXT flags + VkDeviceMemoryReportEventTypeEXT type + uint64_t memoryObjectId + VkDeviceSize size + VkObjectType objectType + uint64_t objectHandle + uint32_t heapIndex + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + void* pHostPointer + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkDeviceSize minImportedHostPointerAlignment + + + VkStructureType sType + void* pNext + float primitiveOverestimationSizeThe size in pixels the primitive is enlarged at each edge during conservative rasterization + float maxExtraPrimitiveOverestimationSizeThe maximum additional overestimation the client can specify in the pipeline state + float extraPrimitiveOverestimationSizeGranularityThe granularity of extra overestimation sizes the implementations supports between 0 and maxExtraOverestimationSize + VkBool32 primitiveUnderestimationtrue if the implementation supports conservative rasterization underestimation mode + VkBool32 conservativePointAndLineRasterizationtrue if conservative rasterization also applies to points and lines + VkBool32 degenerateTrianglesRasterizedtrue if degenerate triangles (those with zero area after snap) are rasterized + VkBool32 degenerateLinesRasterizedtrue if degenerate lines (those with zero length after snap) are rasterized + VkBool32 fullyCoveredFragmentShaderInputVariabletrue if the implementation supports the FullyCoveredEXT SPIR-V builtin fragment shader input variable + VkBool32 conservativeRasterizationPostDepthCoveragetrue if the implementation supports both conservative rasterization and post depth coverage sample coverage mask + + + VkStructureType sType + const void* pNext + VkTimeDomainKHR timeDomain + + + + VkStructureType sType + void* pNext + uint32_t shaderEngineCountnumber of shader engines + uint32_t shaderArraysPerEngineCountnumber of shader arrays + uint32_t computeUnitsPerShaderArraynumber of physical CUs per shader array + uint32_t simdPerComputeUnitnumber of SIMDs per compute unit + uint32_t wavefrontsPerSimdnumber of wavefront slots in each SIMD + uint32_t wavefrontSizemaximum number of threads per wavefront + uint32_t sgprsPerSimdnumber of physical SGPRs per SIMD + uint32_t minSgprAllocationminimum number of SGPRs that can be allocated by a wave + uint32_t maxSgprAllocationnumber of available SGPRs + uint32_t sgprAllocationGranularitySGPRs are allocated in groups of this size + uint32_t vgprsPerSimdnumber of physical VGPRs per SIMD + uint32_t minVgprAllocationminimum number of VGPRs that can be allocated by a wave + uint32_t maxVgprAllocationnumber of available VGPRs + uint32_t vgprAllocationGranularityVGPRs are allocated in groups of this size + + + VkStructureType sType + void* pNextPointer to next structure + VkShaderCorePropertiesFlagsAMD shaderCoreFeaturesfeatures supported by the shader core + uint32_t activeComputeUnitCountnumber of active compute units across all shader engines/arrays + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationConservativeStateCreateFlagsEXT flagsReserved + VkConservativeRasterizationModeEXT conservativeRasterizationModeConservative rasterization mode + float extraPrimitiveOverestimationSizeExtra overestimation to add to the primitive + + + VkStructureType sType + void* pNext + VkBool32 shaderInputAttachmentArrayDynamicIndexing + VkBool32 shaderUniformTexelBufferArrayDynamicIndexing + VkBool32 shaderStorageTexelBufferArrayDynamicIndexing + VkBool32 shaderUniformBufferArrayNonUniformIndexing + VkBool32 shaderSampledImageArrayNonUniformIndexing + VkBool32 shaderStorageBufferArrayNonUniformIndexing + VkBool32 shaderStorageImageArrayNonUniformIndexing + VkBool32 shaderInputAttachmentArrayNonUniformIndexing + VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing + VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing + VkBool32 descriptorBindingUniformBufferUpdateAfterBind + VkBool32 descriptorBindingSampledImageUpdateAfterBind + VkBool32 descriptorBindingStorageImageUpdateAfterBind + VkBool32 descriptorBindingStorageBufferUpdateAfterBind + VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind + VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind + VkBool32 descriptorBindingUpdateUnusedWhilePending + VkBool32 descriptorBindingPartiallyBound + VkBool32 descriptorBindingVariableDescriptorCount + VkBool32 runtimeDescriptorArray + + + + VkStructureType sType + void* pNext + uint32_t maxUpdateAfterBindDescriptorsInAllPools + VkBool32 shaderUniformBufferArrayNonUniformIndexingNative + VkBool32 shaderSampledImageArrayNonUniformIndexingNative + VkBool32 shaderStorageBufferArrayNonUniformIndexingNative + VkBool32 shaderStorageImageArrayNonUniformIndexingNative + VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative + VkBool32 robustBufferAccessUpdateAfterBind + VkBool32 quadDivergentImplicitLod + uint32_t maxPerStageDescriptorUpdateAfterBindSamplers + uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers + uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers + uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages + uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages + uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments + uint32_t maxPerStageUpdateAfterBindResources + uint32_t maxDescriptorSetUpdateAfterBindSamplers + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindSampledImages + uint32_t maxDescriptorSetUpdateAfterBindStorageImages + uint32_t maxDescriptorSetUpdateAfterBindInputAttachments + + + + VkStructureType sType + const void* pNext + uint32_t bindingCount + const VkDescriptorBindingFlags* pBindingFlags + + + + VkStructureType sType + const void* pNext + uint32_t descriptorSetCount + const uint32_t* pDescriptorCounts + + + + VkStructureType sType + void* pNext + uint32_t maxVariableDescriptorCount + + + + VkStructureType sType + const void* pNext + VkAttachmentDescriptionFlags flags + VkFormat format + VkSampleCountFlagBits samples + VkAttachmentLoadOp loadOpLoad operation for color or depth data + VkAttachmentStoreOp storeOpStore operation for color or depth data + VkAttachmentLoadOp stencilLoadOpLoad operation for stencil data + VkAttachmentStoreOp stencilStoreOpStore operation for stencil data + VkImageLayout initialLayout + VkImageLayout finalLayout + + + + VkStructureType sType + const void* pNext + uint32_t attachment + VkImageLayout layout + VkImageAspectFlags aspectMask + + + + VkStructureType sType + const void* pNext + VkSubpassDescriptionFlags flags + VkPipelineBindPoint pipelineBindPoint + uint32_t viewMask + uint32_t inputAttachmentCount + const VkAttachmentReference2* pInputAttachments + uint32_t colorAttachmentCount + const VkAttachmentReference2* pColorAttachments + const VkAttachmentReference2* pResolveAttachments + const VkAttachmentReference2* pDepthStencilAttachment + uint32_t preserveAttachmentCount + const uint32_t* pPreserveAttachments + + + + VkStructureType sType + const void* pNext + uint32_t srcSubpass + uint32_t dstSubpass + VkPipelineStageFlags srcStageMask + VkPipelineStageFlags dstStageMask + VkAccessFlags srcAccessMask + VkAccessFlags dstAccessMask + VkDependencyFlags dependencyFlags + int32_t viewOffset + + + + VkStructureType sType + const void* pNext + VkRenderPassCreateFlags flags + uint32_t attachmentCount + const VkAttachmentDescription2* pAttachments + uint32_t subpassCount + const VkSubpassDescription2* pSubpasses + uint32_t dependencyCount + const VkSubpassDependency2* pDependencies + uint32_t correlatedViewMaskCount + const uint32_t* pCorrelatedViewMasks + + + + VkStructureType sType + const void* pNext + VkSubpassContents contents + + + + VkStructureType sType + const void* pNext + + + + VkStructureType sType + void* pNext + VkBool32 timelineSemaphore + + + + VkStructureType sType + void* pNext + uint64_t maxTimelineSemaphoreValueDifference + + + + VkStructureType sType + const void* pNext + VkSemaphoreType semaphoreType + uint64_t initialValue + + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreValueCount + const uint64_t* pWaitSemaphoreValues + uint32_t signalSemaphoreValueCount + const uint64_t* pSignalSemaphoreValues + + + + VkStructureType sType + const void* pNext + VkSemaphoreWaitFlags flags + uint32_t semaphoreCount + const VkSemaphore* pSemaphores + const uint64_t* pValues + + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + uint64_t value + + + + uint32_t binding + uint32_t divisor + + + + + VkStructureType sType + const void* pNext + uint32_t vertexBindingDivisorCount + const VkVertexInputBindingDivisorDescription* pVertexBindingDivisors + + + + + VkStructureType sType + void* pNext + uint32_t maxVertexAttribDivisormax value of vertex attribute divisor + + + VkStructureType sType + void* pNext + uint32_t maxVertexAttribDivisormax value of vertex attribute divisor + VkBool32 supportsNonZeroFirstInstance + + + + VkStructureType sType + void* pNext + uint32_t pciDomain + uint32_t pciBus + uint32_t pciDevice + uint32_t pciFunction + + + VkStructureType sType + const void* pNext + struct AHardwareBuffer* buffer + + + VkStructureType sType + void* pNext + uint64_t androidHardwareBufferUsage + + + VkStructureType sType + void* pNext + VkDeviceSize allocationSize + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + VkFormatFeatureFlags formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + VkBool32 conditionalRenderingEnableWhether this secondary command buffer may be executed during an active conditional rendering + + + VkStructureType sType + void* pNext + uint64_t externalFormat + + + VkStructureType sType + void* pNext + VkBool32 storageBuffer8BitAccess8-bit integer variables supported in StorageBuffer + VkBool32 uniformAndStorageBuffer8BitAccess8-bit integer variables supported in StorageBuffer and Uniform + VkBool32 storagePushConstant88-bit integer variables supported in PushConstant + + + + VkStructureType sType + void* pNext + VkBool32 conditionalRendering + VkBool32 inheritedConditionalRendering + + + VkStructureType sType + void* pNext + VkBool32 vulkanMemoryModel + VkBool32 vulkanMemoryModelDeviceScope + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains + + + + VkStructureType sType + void* pNext + VkBool32 shaderBufferInt64Atomics + VkBool32 shaderSharedInt64Atomics + + + + VkStructureType sType + void* pNext + VkBool32 shaderBufferFloat32Atomics + VkBool32 shaderBufferFloat32AtomicAdd + VkBool32 shaderBufferFloat64Atomics + VkBool32 shaderBufferFloat64AtomicAdd + VkBool32 shaderSharedFloat32Atomics + VkBool32 shaderSharedFloat32AtomicAdd + VkBool32 shaderSharedFloat64Atomics + VkBool32 shaderSharedFloat64AtomicAdd + VkBool32 shaderImageFloat32Atomics + VkBool32 shaderImageFloat32AtomicAdd + VkBool32 sparseImageFloat32Atomics + VkBool32 sparseImageFloat32AtomicAdd + + + VkStructureType sType + void* pNext + VkBool32 shaderBufferFloat16Atomics + VkBool32 shaderBufferFloat16AtomicAdd + VkBool32 shaderBufferFloat16AtomicMinMax + VkBool32 shaderBufferFloat32AtomicMinMax + VkBool32 shaderBufferFloat64AtomicMinMax + VkBool32 shaderSharedFloat16Atomics + VkBool32 shaderSharedFloat16AtomicAdd + VkBool32 shaderSharedFloat16AtomicMinMax + VkBool32 shaderSharedFloat32AtomicMinMax + VkBool32 shaderSharedFloat64AtomicMinMax + VkBool32 shaderImageFloat32AtomicMinMax + VkBool32 sparseImageFloat32AtomicMinMax + + + VkStructureType sType + void* pNext + VkBool32 vertexAttributeInstanceRateDivisor + VkBool32 vertexAttributeInstanceRateZeroDivisor + + + + + VkStructureType sType + void* pNext + VkPipelineStageFlags checkpointExecutionStageMask + + + VkStructureType sType + void* pNext + VkPipelineStageFlagBits stage + void* pCheckpointMarker + + + VkStructureType sType + void* pNext + VkResolveModeFlags supportedDepthResolveModessupported depth resolve modes + VkResolveModeFlags supportedStencilResolveModessupported stencil resolve modes + VkBool32 independentResolveNonedepth and stencil resolve modes can be set independently if one of them is none + VkBool32 independentResolvedepth and stencil resolve modes can be set independently + + + + VkStructureType sType + const void* pNext + VkResolveModeFlagBits depthResolveModedepth resolve mode + VkResolveModeFlagBits stencilResolveModestencil resolve mode + const VkAttachmentReference2* pDepthStencilResolveAttachmentdepth/stencil resolve attachment + + + + VkStructureType sType + const void* pNext + VkFormat decodeMode + + + VkStructureType sType + void* pNext + VkBool32 decodeModeSharedExponent + + + VkStructureType sType + void* pNext + VkBool32 transformFeedback + VkBool32 geometryStreams + + + VkStructureType sType + void* pNext + uint32_t maxTransformFeedbackStreams + uint32_t maxTransformFeedbackBuffers + VkDeviceSize maxTransformFeedbackBufferSize + uint32_t maxTransformFeedbackStreamDataSize + uint32_t maxTransformFeedbackBufferDataSize + uint32_t maxTransformFeedbackBufferDataStride + VkBool32 transformFeedbackQueries + VkBool32 transformFeedbackStreamsLinesTriangles + VkBool32 transformFeedbackRasterizationStreamSelect + VkBool32 transformFeedbackDraw + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationStateStreamCreateFlagsEXT flags + uint32_t rasterizationStream + + + VkStructureType sType + void* pNext + VkBool32 representativeFragmentTest + + + VkStructureType sType + const void* pNext + VkBool32 representativeFragmentTestEnable + + + VkStructureType sType + void* pNext + VkBool32 exclusiveScissor + + + VkStructureType sType + const void* pNext + uint32_t exclusiveScissorCount + const VkRect2D* pExclusiveScissors + + + VkStructureType sType + void* pNext + VkBool32 cornerSampledImage + + + VkStructureType sType + void* pNext + VkBool32 computeDerivativeGroupQuads + VkBool32 computeDerivativeGroupLinear + + + + VkStructureType sType + void* pNext + VkBool32 meshAndTaskShaderDerivatives + + + + VkStructureType sType + void* pNext + VkBool32 imageFootprint + + + VkStructureType sType + void* pNext + VkBool32 dedicatedAllocationImageAliasing + + + VkStructureType sType + void* pNext + VkBool32 indirectMemoryCopy + VkBool32 indirectMemoryToImageCopy + + + VkStructureType sType + void* pNext + VkBool32 indirectCopy + + + VkStructureType sType + void* pNext + VkQueueFlags supportedQueuesBitmask of VkQueueFlagBits indicating the family of queues that support indirect copy + + + + VkStructureType sType + void* pNext + VkBool32 memoryDecompression + + + + VkStructureType sType + void* pNext + VkMemoryDecompressionMethodFlagsEXT decompressionMethods + uint64_t maxDecompressionIndirectCount + + + + uint32_t shadingRatePaletteEntryCount + const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries + + + VkStructureType sType + const void* pNext + VkBool32 shadingRateImageEnable + uint32_t viewportCount + const VkShadingRatePaletteNV* pShadingRatePalettes + + + VkStructureType sType + void* pNext + VkBool32 shadingRateImage + VkBool32 shadingRateCoarseSampleOrder + + + VkStructureType sType + void* pNext + VkExtent2D shadingRateTexelSize + uint32_t shadingRatePaletteSize + uint32_t shadingRateMaxCoarseSamples + + + VkStructureType sType + void* pNext + VkBool32 invocationMask + + + uint32_t pixelX + uint32_t pixelY + uint32_t sample + + + VkShadingRatePaletteEntryNV shadingRate + uint32_t sampleCount + uint32_t sampleLocationCount + const VkCoarseSampleLocationNV* pSampleLocations + + + VkStructureType sType + const void* pNext + VkCoarseSampleOrderTypeNV sampleOrderType + uint32_t customSampleOrderCount + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders + + + VkStructureType sType + void* pNext + VkBool32 taskShader + VkBool32 meshShader + + + VkStructureType sType + void* pNext + uint32_t maxDrawMeshTasksCount + uint32_t maxTaskWorkGroupInvocations + uint32_t maxTaskWorkGroupSize[3] + uint32_t maxTaskTotalMemorySize + uint32_t maxTaskOutputCount + uint32_t maxMeshWorkGroupInvocations + uint32_t maxMeshWorkGroupSize[3] + uint32_t maxMeshTotalMemorySize + uint32_t maxMeshOutputVertices + uint32_t maxMeshOutputPrimitives + uint32_t maxMeshMultiviewViewCount + uint32_t meshOutputPerVertexGranularity + uint32_t meshOutputPerPrimitiveGranularity + + + uint32_t taskCount + uint32_t firstTask + + + VkStructureType sType + void* pNext + VkBool32 taskShader + VkBool32 meshShader + VkBool32 multiviewMeshShader + VkBool32 primitiveFragmentShadingRateMeshShader + VkBool32 meshShaderQueries + + + VkStructureType sType + void* pNext + uint32_t maxTaskWorkGroupTotalCount + uint32_t maxTaskWorkGroupCount[3] + uint32_t maxTaskWorkGroupInvocations + uint32_t maxTaskWorkGroupSize[3] + uint32_t maxTaskPayloadSize + uint32_t maxTaskSharedMemorySize + uint32_t maxTaskPayloadAndSharedMemorySize + uint32_t maxMeshWorkGroupTotalCount + uint32_t maxMeshWorkGroupCount[3] + uint32_t maxMeshWorkGroupInvocations + uint32_t maxMeshWorkGroupSize[3] + uint32_t maxMeshSharedMemorySize + uint32_t maxMeshPayloadAndSharedMemorySize + uint32_t maxMeshOutputMemorySize + uint32_t maxMeshPayloadAndOutputMemorySize + uint32_t maxMeshOutputComponents + uint32_t maxMeshOutputVertices + uint32_t maxMeshOutputPrimitives + uint32_t maxMeshOutputLayers + uint32_t maxMeshMultiviewViewCount + uint32_t meshOutputPerVertexGranularity + uint32_t meshOutputPerPrimitiveGranularity + uint32_t maxPreferredTaskWorkGroupInvocations + uint32_t maxPreferredMeshWorkGroupInvocations + VkBool32 prefersLocalInvocationVertexOutput + VkBool32 prefersLocalInvocationPrimitiveOutput + VkBool32 prefersCompactVertexOutput + VkBool32 prefersCompactPrimitiveOutput + + + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + VkStructureType sType + const void* pNext + VkRayTracingShaderGroupTypeKHR type + uint32_t generalShader + uint32_t closestHitShader + uint32_t anyHitShader + uint32_t intersectionShader + + + VkStructureType sType + const void* pNext + VkRayTracingShaderGroupTypeKHR type + uint32_t generalShader + uint32_t closestHitShader + uint32_t anyHitShader + uint32_t intersectionShader + const void* pShaderGroupCaptureReplayHandle + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + uint32_t groupCount + const VkRayTracingShaderGroupCreateInfoNV* pGroups + uint32_t maxRecursionDepth + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + uint32_t groupCount + const VkRayTracingShaderGroupCreateInfoKHR* pGroups + uint32_t maxPipelineRayRecursionDepth + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo + const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface + const VkPipelineDynamicStateCreateInfo* pDynamicState + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkBuffer vertexData + VkDeviceSize vertexOffset + uint32_t vertexCount + VkDeviceSize vertexStride + VkFormat vertexFormat + VkBuffer indexData + VkDeviceSize indexOffset + uint32_t indexCount + VkIndexType indexType + VkBuffer transformDataOptional reference to array of floats representing a 3x4 row major affine transformation matrix. + VkDeviceSize transformOffset + + + VkStructureType sType + const void* pNext + VkBuffer aabbData + uint32_t numAABBs + uint32_t strideStride in bytes between AABBs + VkDeviceSize offsetOffset in bytes of the first AABB in aabbData + + + VkGeometryTrianglesNV triangles + VkGeometryAABBNV aabbs + + + VkStructureType sType + const void* pNext + VkGeometryTypeKHR geometryType + VkGeometryDataNV geometry + VkGeometryFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkAccelerationStructureTypeNV type + VkBuildAccelerationStructureFlagsNV flags + uint32_t instanceCount + uint32_t geometryCount + const VkGeometryNV* pGeometries + + + VkStructureType sType + const void* pNext + VkDeviceSize compactedSize + VkAccelerationStructureInfoNV info + + + VkStructureType sType + const void* pNext + VkAccelerationStructureNV accelerationStructure + VkDeviceMemory memory + VkDeviceSize memoryOffset + uint32_t deviceIndexCount + const uint32_t* pDeviceIndices + + + VkStructureType sType + const void* pNext + uint32_t accelerationStructureCount + const VkAccelerationStructureKHR* pAccelerationStructures + + + VkStructureType sType + const void* pNext + uint32_t accelerationStructureCount + const VkAccelerationStructureNV* pAccelerationStructures + + + VkStructureType sType + const void* pNext + VkAccelerationStructureMemoryRequirementsTypeNV type + VkAccelerationStructureNV accelerationStructure + + + VkStructureType sType + void* pNext + VkBool32 accelerationStructure + VkBool32 accelerationStructureCaptureReplay + VkBool32 accelerationStructureIndirectBuild + VkBool32 accelerationStructureHostCommands + VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind + + + VkStructureType sType + void* pNext + VkBool32 rayTracingPipeline + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed + VkBool32 rayTracingPipelineTraceRaysIndirect + VkBool32 rayTraversalPrimitiveCulling + + + VkStructureType sType + void* pNext + VkBool32 rayQuery + + + VkStructureType sType + void* pNext + uint64_t maxGeometryCount + uint64_t maxInstanceCount + uint64_t maxPrimitiveCount + uint32_t maxPerStageDescriptorAccelerationStructures + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures + uint32_t maxDescriptorSetAccelerationStructures + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures + uint32_t minAccelerationStructureScratchOffsetAlignment + + + VkStructureType sType + void* pNext + uint32_t shaderGroupHandleSize + uint32_t maxRayRecursionDepth + uint32_t maxShaderGroupStride + uint32_t shaderGroupBaseAlignment + uint32_t shaderGroupHandleCaptureReplaySize + uint32_t maxRayDispatchInvocationCount + uint32_t shaderGroupHandleAlignment + uint32_t maxRayHitAttributeSize + + + VkStructureType sType + void* pNext + uint32_t shaderGroupHandleSize + uint32_t maxRecursionDepth + uint32_t maxShaderGroupStride + uint32_t shaderGroupBaseAlignment + uint64_t maxGeometryCount + uint64_t maxInstanceCount + uint64_t maxTriangleCount + uint32_t maxDescriptorSetAccelerationStructures + + + VkDeviceAddress deviceAddress + VkDeviceSize stride + VkDeviceSize size + + + uint32_t width + uint32_t height + uint32_t depth + + + VkDeviceAddress raygenShaderRecordAddress + VkDeviceSize raygenShaderRecordSize + VkDeviceAddress missShaderBindingTableAddress + VkDeviceSize missShaderBindingTableSize + VkDeviceSize missShaderBindingTableStride + VkDeviceAddress hitShaderBindingTableAddress + VkDeviceSize hitShaderBindingTableSize + VkDeviceSize hitShaderBindingTableStride + VkDeviceAddress callableShaderBindingTableAddress + VkDeviceSize callableShaderBindingTableSize + VkDeviceSize callableShaderBindingTableStride + uint32_t width + uint32_t height + uint32_t depth + + + VkStructureType sType + void* pNext + VkBool32 rayTracingMaintenance1 + VkBool32 rayTracingPipelineTraceRaysIndirect2 + + + VkStructureType sType + void* pNext + uint32_t drmFormatModifierCount + VkDrmFormatModifierPropertiesEXT* pDrmFormatModifierProperties + + + uint64_t drmFormatModifier + uint32_t drmFormatModifierPlaneCount + VkFormatFeatureFlags drmFormatModifierTilingFeatures + + + VkStructureType sType + const void* pNext + uint64_t drmFormatModifier + VkSharingMode sharingMode + uint32_t queueFamilyIndexCount + const uint32_t* pQueueFamilyIndices + + + VkStructureType sType + const void* pNext + uint32_t drmFormatModifierCount + const uint64_t* pDrmFormatModifiers + + + VkStructureType sType + const void* pNext + uint64_t drmFormatModifier + uint32_t drmFormatModifierPlaneCount + const VkSubresourceLayout* pPlaneLayouts + + + VkStructureType sType + void* pNext + uint64_t drmFormatModifier + + + VkStructureType sType + const void* pNext + VkImageUsageFlags stencilUsage + + + + VkStructureType sType + const void* pNext + VkMemoryOverallocationBehaviorAMD overallocationBehavior + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMap + VkBool32 fragmentDensityMapDynamic + VkBool32 fragmentDensityMapNonSubsampledImages + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMapDeferred + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMapOffset + + + + VkStructureType sType + void* pNext + VkExtent2D minFragmentDensityTexelSize + VkExtent2D maxFragmentDensityTexelSize + VkBool32 fragmentDensityInvocations + + + VkStructureType sType + void* pNext + VkBool32 subsampledLoads + VkBool32 subsampledCoarseReconstructionEarlyAccess + uint32_t maxSubsampledArrayLayers + uint32_t maxDescriptorSetSubsampledSamplers + + + VkStructureType sType + void* pNext + VkExtent2D fragmentDensityOffsetGranularity + + + + VkStructureType sType + const void* pNext + VkAttachmentReference fragmentDensityMapAttachment + + + VkStructureType sType + const void* pNext + uint32_t fragmentDensityOffsetCount + const VkOffset2D* pFragmentDensityOffsets + + + + VkStructureType sType + void* pNext + VkBool32 scalarBlockLayout + + + + VkStructureType sType + void* pNext + VkBool32 supportsProtectedRepresents if surface can be protected + + + VkStructureType sType + void* pNext + VkBool32 uniformBufferStandardLayout + + + + VkStructureType sType + void* pNext + VkBool32 depthClipEnable + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationDepthClipStateCreateFlagsEXT flagsReserved + VkBool32 depthClipEnable + + + VkStructureType sType + void* pNext + VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS] + VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS] + + + VkStructureType sType + void* pNext + VkBool32 memoryPriority + + + VkStructureType sType + const void* pNext + float priority + + + VkStructureType sType + void* pNext + VkBool32 pageableDeviceLocalMemory + + + VkStructureType sType + void* pNext + VkBool32 bufferDeviceAddress + VkBool32 bufferDeviceAddressCaptureReplay + VkBool32 bufferDeviceAddressMultiDevice + + + + VkStructureType sType + void* pNext + VkBool32 bufferDeviceAddress + VkBool32 bufferDeviceAddressCaptureReplay + VkBool32 bufferDeviceAddressMultiDevice + + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + + + VkStructureType sType + const void* pNext + uint64_t opaqueCaptureAddress + + + + VkStructureType sType + const void* pNext + VkDeviceAddress deviceAddress + + + VkStructureType sType + void* pNext + VkImageViewType imageViewType + + + VkStructureType sType + void* pNext + VkBool32 filterCubicThe combinations of format, image type (and image view type if provided) can be filtered with VK_FILTER_CUBIC_EXT + VkBool32 filterCubicMinmaxThe combination of format, image type (and image view type if provided) can be filtered with VK_FILTER_CUBIC_EXT and ReductionMode of Min or Max + + + VkStructureType sType + void* pNext + VkBool32 imagelessFramebuffer + + + + VkStructureType sType + const void* pNext + uint32_t attachmentImageInfoCount + const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos + + + + VkStructureType sType + const void* pNext + VkImageCreateFlags flagsImage creation flags + VkImageUsageFlags usageImage usage flags + uint32_t width + uint32_t height + uint32_t layerCount + uint32_t viewFormatCount + const VkFormat* pViewFormats + + + + VkStructureType sType + const void* pNext + uint32_t attachmentCount + const VkImageView* pAttachments + + + + VkStructureType sType + void* pNext + VkBool32 textureCompressionASTC_HDR + + + + VkStructureType sType + void* pNext + VkBool32 cooperativeMatrix + VkBool32 cooperativeMatrixRobustBufferAccess + + + VkStructureType sType + void* pNext + VkShaderStageFlags cooperativeMatrixSupportedStages + + + VkStructureType sType + void* pNext + uint32_t MSize + uint32_t NSize + uint32_t KSize + VkComponentTypeNV AType + VkComponentTypeNV BType + VkComponentTypeNV CType + VkComponentTypeNV DType + VkScopeNV scope + + + VkStructureType sType + void* pNext + VkBool32 ycbcrImageArrays + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkDescriptorType descriptorType + VkSampler sampler + + + VkStructureType sType + void* pNext + VkDeviceAddress deviceAddress + VkDeviceSize size + + + VkStructureType sType + const void* pNext + GgpFrameToken frameToken + + + VkPipelineCreationFeedbackFlags flags + uint64_t duration + + + + VkStructureType sType + const void* pNext + VkPipelineCreationFeedback* pPipelineCreationFeedbackOutput pipeline creation feedback. + uint32_t pipelineStageCreationFeedbackCount + VkPipelineCreationFeedback* pPipelineStageCreationFeedbacksOne entry for each shader stage specified in the parent Vk*PipelineCreateInfo struct + + + + VkStructureType sType + void* pNext + VkFullScreenExclusiveEXT fullScreenExclusive + + + VkStructureType sType + const void* pNext + HMONITOR hmonitor + + + VkStructureType sType + void* pNext + VkBool32 fullScreenExclusiveSupported + + + VkStructureType sType + void* pNext + VkBool32 presentBarrier + + + VkStructureType sType + void* pNext + VkBool32 presentBarrierSupported + + + VkStructureType sType + void* pNext + VkBool32 presentBarrierEnable + + + VkStructureType sType + void* pNext + VkBool32 performanceCounterQueryPoolsperformance counters supported in query pools + VkBool32 performanceCounterMultipleQueryPoolsperformance counters from multiple query pools can be accessed in the same primary command buffer + + + VkStructureType sType + void* pNext + VkBool32 allowCommandBufferQueryCopiesFlag to specify whether performance queries are allowed to be used in vkCmdCopyQueryPoolResults + + + VkStructureType sType + void* pNext + VkPerformanceCounterUnitKHR unit + VkPerformanceCounterScopeKHR scope + VkPerformanceCounterStorageKHR storage + uint8_t uuid[VK_UUID_SIZE] + + + VkStructureType sType + void* pNext + VkPerformanceCounterDescriptionFlagsKHR flags + char name[VK_MAX_DESCRIPTION_SIZE] + char category[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + + + VkStructureType sType + const void* pNext + uint32_t queueFamilyIndex + uint32_t counterIndexCount + const uint32_t* pCounterIndices + + + int32_t int32 + int64_t int64 + uint32_t uint32 + uint64_t uint64 + float float32 + double float64 + + + VkStructureType sType + const void* pNext + VkAcquireProfilingLockFlagsKHR flagsAcquire profiling lock flags + uint64_t timeout + + + VkStructureType sType + const void* pNext + uint32_t counterPassIndexIndex for which counter pass to submit + + + VkStructureType sType + const void* pNext + uint32_t maxPerformanceQueriesPerPoolMaximum number of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR queries in a query pool + + + VkStructureType sType + const void* pNext + VkHeadlessSurfaceCreateFlagsEXT flags + + + VkStructureType sType + void* pNext + VkBool32 coverageReductionMode + + + VkStructureType sType + const void* pNext + VkPipelineCoverageReductionStateCreateFlagsNV flags + VkCoverageReductionModeNV coverageReductionMode + + + VkStructureType sType + void* pNext + VkCoverageReductionModeNV coverageReductionMode + VkSampleCountFlagBits rasterizationSamples + VkSampleCountFlags depthStencilSamples + VkSampleCountFlags colorSamples + + + VkStructureType sType + void* pNext + VkBool32 shaderIntegerFunctions2 + + + uint32_t value32 + uint64_t value64 + float valueFloat + VkBool32 valueBool + const char* valueString + + + VkPerformanceValueTypeINTEL type + VkPerformanceValueDataINTEL data + + + VkStructureType sType + const void* pNext + void* pUserData + + + VkStructureType sType + const void* pNext + VkQueryPoolSamplingModeINTEL performanceCountersSampling + + + + VkStructureType sType + const void* pNext + uint64_t marker + + + VkStructureType sType + const void* pNext + uint32_t marker + + + VkStructureType sType + const void* pNext + VkPerformanceOverrideTypeINTEL type + VkBool32 enable + uint64_t parameter + + + VkStructureType sType + const void* pNext + VkPerformanceConfigurationTypeINTEL type + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupClock + VkBool32 shaderDeviceClock + + + VkStructureType sType + void* pNext + VkBool32 indexTypeUint8 + + + + + VkStructureType sType + void* pNext + uint32_t shaderSMCount + uint32_t shaderWarpsPerSM + + + VkStructureType sType + void* pNext + VkBool32 shaderSMBuiltins + + + VkStructureType sType + void* pNextPointer to next structure + VkBool32 fragmentShaderSampleInterlock + VkBool32 fragmentShaderPixelInterlock + VkBool32 fragmentShaderShadingRateInterlock + + + VkStructureType sType + void* pNext + VkBool32 separateDepthStencilLayouts + + + + VkStructureType sType + void* pNext + VkImageLayout stencilLayout + + + VkStructureType sType + void* pNext + VkBool32 primitiveTopologyListRestart + VkBool32 primitiveTopologyPatchListRestart + + + + VkStructureType sType + void* pNext + VkImageLayout stencilInitialLayout + VkImageLayout stencilFinalLayout + + + + VkStructureType sType + void* pNext + VkBool32 pipelineExecutableInfo + + + VkStructureType sType + const void* pNext + VkPipeline pipeline + + + + VkStructureType sType + void* pNext + VkShaderStageFlags stages + char name[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + uint32_t subgroupSize + + + VkStructureType sType + const void* pNext + VkPipeline pipeline + uint32_t executableIndex + + + VkBool32 b32 + int64_t i64 + uint64_t u64 + double f64 + + + VkStructureType sType + void* pNext + char name[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + VkPipelineExecutableStatisticFormatKHR format + VkPipelineExecutableStatisticValueKHR value + + + VkStructureType sType + void* pNext + char name[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + VkBool32 isText + size_t dataSize + void* pData + + + VkStructureType sType + void* pNext + VkBool32 shaderDemoteToHelperInvocation + + + + VkStructureType sType + void* pNext + VkBool32 texelBufferAlignment + + + VkStructureType sType + void* pNext + VkDeviceSize storageTexelBufferOffsetAlignmentBytes + VkBool32 storageTexelBufferOffsetSingleTexelAlignment + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment + + + + VkStructureType sType + void* pNext + VkBool32 subgroupSizeControl + VkBool32 computeFullSubgroups + + + + VkStructureType sType + void* pNext + uint32_t minSubgroupSizeThe minimum subgroup size supported by this device + uint32_t maxSubgroupSizeThe maximum subgroup size supported by this device + uint32_t maxComputeWorkgroupSubgroupsThe maximum number of subgroups supported in a workgroup + VkShaderStageFlags requiredSubgroupSizeStagesThe shader stages that support specifying a subgroup size + + + + VkStructureType sType + const void* pNext + uint32_t requiredSubgroupSize + + + + + VkStructureType sType + void* pNext + VkRenderPass renderPass + uint32_t subpass + + + VkStructureType sType + void* pNext + uint32_t maxSubpassShadingWorkgroupSizeAspectRatio + + + VkStructureType sType + void* pNext + uint32_t maxWorkGroupCount[3] + uint32_t maxWorkGroupSize[3] + uint32_t maxOutputClusterCount + VkDeviceSize indirectBufferOffsetAlignment + + + VkStructureType sType + const void* pNext + uint64_t opaqueCaptureAddress + + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + + VkStructureType sType + void* pNext + VkBool32 rectangularLines + VkBool32 bresenhamLines + VkBool32 smoothLines + VkBool32 stippledRectangularLines + VkBool32 stippledBresenhamLines + VkBool32 stippledSmoothLines + + + + + VkStructureType sType + void* pNext + uint32_t lineSubPixelPrecisionBits + + + + + VkStructureType sType + const void* pNext + VkLineRasterizationMode lineRasterizationMode + VkBool32 stippledLineEnable + uint32_t lineStippleFactor + uint16_t lineStipplePattern + + + + + VkStructureType sType + void* pNext + VkBool32 pipelineCreationCacheControl + + + + VkStructureType sType + void* pNext + VkBool32 storageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock + VkBool32 uniformAndStorageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock and Block + VkBool32 storagePushConstant1616-bit integer/floating-point variables supported in PushConstant + VkBool32 storageInputOutput1616-bit integer/floating-point variables supported in shader inputs and outputs + VkBool32 multiviewMultiple views in a render pass + VkBool32 multiviewGeometryShaderMultiple views in a render pass w/ geometry shader + VkBool32 multiviewTessellationShaderMultiple views in a render pass w/ tessellation shader + VkBool32 variablePointersStorageBuffer + VkBool32 variablePointers + VkBool32 protectedMemory + VkBool32 samplerYcbcrConversionSampler color conversion supported + VkBool32 shaderDrawParameters + + + VkStructureType sType + void* pNext + uint8_t deviceUUID[VK_UUID_SIZE] + uint8_t driverUUID[VK_UUID_SIZE] + uint8_t deviceLUID[VK_LUID_SIZE] + uint32_t deviceNodeMask + VkBool32 deviceLUIDValid + uint32_t subgroupSizeThe size of a subgroup for this queue. + VkShaderStageFlags subgroupSupportedStagesBitfield of what shader stages support subgroup operations + VkSubgroupFeatureFlags subgroupSupportedOperationsBitfield of what subgroup operations are supported. + VkBool32 subgroupQuadOperationsInAllStagesFlag to specify whether quad operations are available in all stages. + VkPointClippingBehavior pointClippingBehavior + uint32_t maxMultiviewViewCountmax number of views in a subpass + uint32_t maxMultiviewInstanceIndexmax instance index for a draw in a multiview subpass + VkBool32 protectedNoFault + uint32_t maxPerSetDescriptors + VkDeviceSize maxMemoryAllocationSize + + + VkStructureType sType + void* pNext + VkBool32 samplerMirrorClampToEdge + VkBool32 drawIndirectCount + VkBool32 storageBuffer8BitAccess8-bit integer variables supported in StorageBuffer + VkBool32 uniformAndStorageBuffer8BitAccess8-bit integer variables supported in StorageBuffer and Uniform + VkBool32 storagePushConstant88-bit integer variables supported in PushConstant + VkBool32 shaderBufferInt64Atomics + VkBool32 shaderSharedInt64Atomics + VkBool32 shaderFloat1616-bit floats (halfs) in shaders + VkBool32 shaderInt88-bit integers in shaders + VkBool32 descriptorIndexing + VkBool32 shaderInputAttachmentArrayDynamicIndexing + VkBool32 shaderUniformTexelBufferArrayDynamicIndexing + VkBool32 shaderStorageTexelBufferArrayDynamicIndexing + VkBool32 shaderUniformBufferArrayNonUniformIndexing + VkBool32 shaderSampledImageArrayNonUniformIndexing + VkBool32 shaderStorageBufferArrayNonUniformIndexing + VkBool32 shaderStorageImageArrayNonUniformIndexing + VkBool32 shaderInputAttachmentArrayNonUniformIndexing + VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing + VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing + VkBool32 descriptorBindingUniformBufferUpdateAfterBind + VkBool32 descriptorBindingSampledImageUpdateAfterBind + VkBool32 descriptorBindingStorageImageUpdateAfterBind + VkBool32 descriptorBindingStorageBufferUpdateAfterBind + VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind + VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind + VkBool32 descriptorBindingUpdateUnusedWhilePending + VkBool32 descriptorBindingPartiallyBound + VkBool32 descriptorBindingVariableDescriptorCount + VkBool32 runtimeDescriptorArray + VkBool32 samplerFilterMinmax + VkBool32 scalarBlockLayout + VkBool32 imagelessFramebuffer + VkBool32 uniformBufferStandardLayout + VkBool32 shaderSubgroupExtendedTypes + VkBool32 separateDepthStencilLayouts + VkBool32 hostQueryReset + VkBool32 timelineSemaphore + VkBool32 bufferDeviceAddress + VkBool32 bufferDeviceAddressCaptureReplay + VkBool32 bufferDeviceAddressMultiDevice + VkBool32 vulkanMemoryModel + VkBool32 vulkanMemoryModelDeviceScope + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains + VkBool32 shaderOutputViewportIndex + VkBool32 shaderOutputLayer + VkBool32 subgroupBroadcastDynamicId + + + VkStructureType sType + void* pNext + VkDriverId driverID + char driverName[VK_MAX_DRIVER_NAME_SIZE] + char driverInfo[VK_MAX_DRIVER_INFO_SIZE] + VkConformanceVersion conformanceVersion + VkShaderFloatControlsIndependence denormBehaviorIndependence + VkShaderFloatControlsIndependence roundingModeIndependence + VkBool32 shaderSignedZeroInfNanPreserveFloat16An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat32An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat64An implementation can preserve signed zero, nan, inf + VkBool32 shaderDenormPreserveFloat16An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat32An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat64An implementation can preserve denormals + VkBool32 shaderDenormFlushToZeroFloat16An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat32An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat64An implementation can flush to zero denormals + VkBool32 shaderRoundingModeRTEFloat16An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat32An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat64An implementation can support RTE + VkBool32 shaderRoundingModeRTZFloat16An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat32An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat64An implementation can support RTZ + uint32_t maxUpdateAfterBindDescriptorsInAllPools + VkBool32 shaderUniformBufferArrayNonUniformIndexingNative + VkBool32 shaderSampledImageArrayNonUniformIndexingNative + VkBool32 shaderStorageBufferArrayNonUniformIndexingNative + VkBool32 shaderStorageImageArrayNonUniformIndexingNative + VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative + VkBool32 robustBufferAccessUpdateAfterBind + VkBool32 quadDivergentImplicitLod + uint32_t maxPerStageDescriptorUpdateAfterBindSamplers + uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers + uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers + uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages + uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages + uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments + uint32_t maxPerStageUpdateAfterBindResources + uint32_t maxDescriptorSetUpdateAfterBindSamplers + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers + uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers + uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindSampledImages + uint32_t maxDescriptorSetUpdateAfterBindStorageImages + uint32_t maxDescriptorSetUpdateAfterBindInputAttachments + VkResolveModeFlags supportedDepthResolveModessupported depth resolve modes + VkResolveModeFlags supportedStencilResolveModessupported stencil resolve modes + VkBool32 independentResolveNonedepth and stencil resolve modes can be set independently if one of them is none + VkBool32 independentResolvedepth and stencil resolve modes can be set independently + VkBool32 filterMinmaxSingleComponentFormats + VkBool32 filterMinmaxImageComponentMapping + uint64_t maxTimelineSemaphoreValueDifference + VkSampleCountFlags framebufferIntegerColorSampleCounts + + + VkStructureType sType + void* pNext + VkBool32 robustImageAccess + VkBool32 inlineUniformBlock + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind + VkBool32 pipelineCreationCacheControl + VkBool32 privateData + VkBool32 shaderDemoteToHelperInvocation + VkBool32 shaderTerminateInvocation + VkBool32 subgroupSizeControl + VkBool32 computeFullSubgroups + VkBool32 synchronization2 + VkBool32 textureCompressionASTC_HDR + VkBool32 shaderZeroInitializeWorkgroupMemory + VkBool32 dynamicRendering + VkBool32 shaderIntegerDotProduct + VkBool32 maintenance4 + + + VkStructureType sType + void* pNext + uint32_t minSubgroupSizeThe minimum subgroup size supported by this device + uint32_t maxSubgroupSizeThe maximum subgroup size supported by this device + uint32_t maxComputeWorkgroupSubgroupsThe maximum number of subgroups supported in a workgroup + VkShaderStageFlags requiredSubgroupSizeStagesThe shader stages that support specifying a subgroup size + uint32_t maxInlineUniformBlockSize + uint32_t maxPerStageDescriptorInlineUniformBlocks + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks + uint32_t maxDescriptorSetInlineUniformBlocks + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks + uint32_t maxInlineUniformTotalSize + VkBool32 integerDotProduct8BitUnsignedAccelerated + VkBool32 integerDotProduct8BitSignedAccelerated + VkBool32 integerDotProduct8BitMixedSignednessAccelerated + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProduct16BitUnsignedAccelerated + VkBool32 integerDotProduct16BitSignedAccelerated + VkBool32 integerDotProduct16BitMixedSignednessAccelerated + VkBool32 integerDotProduct32BitUnsignedAccelerated + VkBool32 integerDotProduct32BitSignedAccelerated + VkBool32 integerDotProduct32BitMixedSignednessAccelerated + VkBool32 integerDotProduct64BitUnsignedAccelerated + VkBool32 integerDotProduct64BitSignedAccelerated + VkBool32 integerDotProduct64BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated + VkDeviceSize storageTexelBufferOffsetAlignmentBytes + VkBool32 storageTexelBufferOffsetSingleTexelAlignment + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment + VkDeviceSize maxBufferSize + + + VkStructureType sType + void* pNext + VkBool32 globalPriorityQuery + VkBool32 shaderSubgroupRotate + VkBool32 shaderSubgroupRotateClustered + VkBool32 shaderFloatControls2 + VkBool32 shaderExpectAssume + VkBool32 rectangularLines + VkBool32 bresenhamLines + VkBool32 smoothLines + VkBool32 stippledRectangularLines + VkBool32 stippledBresenhamLines + VkBool32 stippledSmoothLines + VkBool32 vertexAttributeInstanceRateDivisor + VkBool32 vertexAttributeInstanceRateZeroDivisor + VkBool32 indexTypeUint8 + VkBool32 dynamicRenderingLocalRead + VkBool32 maintenance5 + VkBool32 maintenance6 + VkBool32 pipelineProtectedAccess + VkBool32 pipelineRobustness + VkBool32 hostImageCopy + VkBool32 pushDescriptor + + + VkStructureType sType + void* pNext + uint32_t lineSubPixelPrecisionBits + uint32_t maxVertexAttribDivisormax value of vertex attribute divisor + VkBool32 supportsNonZeroFirstInstance + uint32_t maxPushDescriptors + VkBool32 dynamicRenderingLocalReadDepthStencilAttachments + VkBool32 dynamicRenderingLocalReadMultisampledAttachments + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting + VkBool32 depthStencilSwizzleOneSupport + VkBool32 polygonModePointSize + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram + VkBool32 nonStrictWideLinesUseParallelogram + VkBool32 blockTexelViewCompatibleMultipleLayers + uint32_t maxCombinedImageSamplerDescriptorCount + VkBool32 fragmentShadingRateClampCombinerInputs + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs + VkPipelineRobustnessImageBehavior defaultRobustnessImages + uint32_t copySrcLayoutCount + VkImageLayout* pCopySrcLayouts + uint32_t copyDstLayoutCount + VkImageLayout* pCopyDstLayouts + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE] + VkBool32 identicalMemoryTypeRequirements + + + VkStructureType sType + const void* pNext + VkPipelineCompilerControlFlagsAMD compilerControlFlags + + + VkStructureType sType + void* pNext + VkBool32 deviceCoherentMemory + + + VkStructureType sType + void* pNext + VkFaultLevel faultLevel + VkFaultType faultType + + + VkStructureType sType + const void* pNext + uint32_t faultCount + VkFaultData* pFaults + PFN_vkFaultCallbackFunction pfnFaultCallback + + + VkStructureType sType + void* pNext + char name[VK_MAX_EXTENSION_NAME_SIZE] + char version[VK_MAX_EXTENSION_NAME_SIZE] + VkToolPurposeFlags purposes + char description[VK_MAX_DESCRIPTION_SIZE] + char layer[VK_MAX_EXTENSION_NAME_SIZE] + + + + VkStructureType sType + const void* pNext + VkClearColorValue customBorderColor + VkFormat format + + + VkStructureType sType + void* pNext + uint32_t maxCustomBorderColorSamplers + + + VkStructureType sType + void* pNext + VkBool32 customBorderColors + VkBool32 customBorderColorWithoutFormat + + + VkStructureType sType + const void* pNext + VkComponentMapping components + VkBool32 srgb + + + VkStructureType sType + void* pNext + VkBool32 borderColorSwizzle + VkBool32 borderColorSwizzleFromImage + + + VkDeviceAddress deviceAddress + void* hostAddress + + + VkDeviceAddress deviceAddress + const void* hostAddress + + + VkDeviceAddress deviceAddress + const void* hostAddress + + + VkStructureType sType + const void* pNext + VkFormat vertexFormat + VkDeviceOrHostAddressConstKHR vertexData + VkDeviceSize vertexStride + uint32_t maxVertex + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexData + VkDeviceOrHostAddressConstKHR transformData + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR data + VkDeviceSize stride + + + VkStructureType sType + const void* pNext + VkBool32 arrayOfPointers + VkDeviceOrHostAddressConstKHR data + + + VkStructureType sType + const void* pNext + VkFormat vertexFormat + VkDeviceOrHostAddressConstKHR vertexData + VkDeviceSize vertexStride + VkFormat radiusFormat + VkDeviceOrHostAddressConstKHR radiusData + VkDeviceSize radiusStride + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexData + VkDeviceSize indexStride + VkRayTracingLssIndexingModeNV indexingMode + VkRayTracingLssPrimitiveEndCapsModeNV endCapsMode + + + VkStructureType sType + const void* pNext + VkFormat vertexFormat + VkDeviceOrHostAddressConstKHR vertexData + VkDeviceSize vertexStride + VkFormat radiusFormat + VkDeviceOrHostAddressConstKHR radiusData + VkDeviceSize radiusStride + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexData + VkDeviceSize indexStride + + + VkAccelerationStructureGeometryTrianglesDataKHR triangles + VkAccelerationStructureGeometryAabbsDataKHR aabbs + VkAccelerationStructureGeometryInstancesDataKHR instances + + + VkStructureType sType + const void* pNext + VkGeometryTypeKHR geometryType + VkAccelerationStructureGeometryDataKHR geometry + VkGeometryFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkAccelerationStructureTypeKHR type + VkBuildAccelerationStructureFlagsKHR flags + VkBuildAccelerationStructureModeKHR mode + VkAccelerationStructureKHR srcAccelerationStructure + VkAccelerationStructureKHR dstAccelerationStructure + uint32_t geometryCount + const VkAccelerationStructureGeometryKHR* pGeometries + const VkAccelerationStructureGeometryKHR* const* ppGeometries + VkDeviceOrHostAddressKHR scratchData + + + uint32_t primitiveCount + uint32_t primitiveOffset + uint32_t firstVertex + uint32_t transformOffset + + + VkStructureType sType + const void* pNext + VkAccelerationStructureCreateFlagsKHR createFlags + VkBuffer buffer + VkDeviceSize offsetSpecified in bytes + VkDeviceSize size + VkAccelerationStructureTypeKHR type + VkDeviceAddress deviceAddress + + + float minX + float minY + float minZ + float maxX + float maxY + float maxZ + + + + float matrix[3][4] + + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + VkTransformMatrixKHR transform + uint32_t instanceCustomIndex:24 + uint32_t mask:8 + uint32_t instanceShaderBindingTableRecordOffset:24 + VkGeometryInstanceFlagsKHR flags:8 + uint64_t accelerationStructureReference + + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR accelerationStructure + + + VkStructureType sType + const void* pNext + const uint8_t* pVersionData + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR src + VkAccelerationStructureKHR dst + VkCopyAccelerationStructureModeKHR mode + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR src + VkDeviceOrHostAddressKHR dst + VkCopyAccelerationStructureModeKHR mode + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR src + VkAccelerationStructureKHR dst + VkCopyAccelerationStructureModeKHR mode + + + VkStructureType sType + const void* pNext + uint32_t maxPipelineRayPayloadSize + uint32_t maxPipelineRayHitAttributeSize + + + VkStructureType sType + const void* pNext + uint32_t libraryCount + const VkPipeline* pLibraries + + + VkObjectType objectType + uint64_t objectHandle + VkRefreshObjectFlagsKHR flags + + + VkStructureType sType + const void* pNext + uint32_t objectCount + const VkRefreshObjectKHR* pObjects + + + VkStructureType sType + void* pNext + VkBool32 extendedDynamicState + + + VkStructureType sType + void* pNext + VkBool32 extendedDynamicState2 + VkBool32 extendedDynamicState2LogicOp + VkBool32 extendedDynamicState2PatchControlPoints + + + VkStructureType sType + void* pNext + VkBool32 extendedDynamicState3TessellationDomainOrigin + VkBool32 extendedDynamicState3DepthClampEnable + VkBool32 extendedDynamicState3PolygonMode + VkBool32 extendedDynamicState3RasterizationSamples + VkBool32 extendedDynamicState3SampleMask + VkBool32 extendedDynamicState3AlphaToCoverageEnable + VkBool32 extendedDynamicState3AlphaToOneEnable + VkBool32 extendedDynamicState3LogicOpEnable + VkBool32 extendedDynamicState3ColorBlendEnable + VkBool32 extendedDynamicState3ColorBlendEquation + VkBool32 extendedDynamicState3ColorWriteMask + VkBool32 extendedDynamicState3RasterizationStream + VkBool32 extendedDynamicState3ConservativeRasterizationMode + VkBool32 extendedDynamicState3ExtraPrimitiveOverestimationSize + VkBool32 extendedDynamicState3DepthClipEnable + VkBool32 extendedDynamicState3SampleLocationsEnable + VkBool32 extendedDynamicState3ColorBlendAdvanced + VkBool32 extendedDynamicState3ProvokingVertexMode + VkBool32 extendedDynamicState3LineRasterizationMode + VkBool32 extendedDynamicState3LineStippleEnable + VkBool32 extendedDynamicState3DepthClipNegativeOneToOne + VkBool32 extendedDynamicState3ViewportWScalingEnable + VkBool32 extendedDynamicState3ViewportSwizzle + VkBool32 extendedDynamicState3CoverageToColorEnable + VkBool32 extendedDynamicState3CoverageToColorLocation + VkBool32 extendedDynamicState3CoverageModulationMode + VkBool32 extendedDynamicState3CoverageModulationTableEnable + VkBool32 extendedDynamicState3CoverageModulationTable + VkBool32 extendedDynamicState3CoverageReductionMode + VkBool32 extendedDynamicState3RepresentativeFragmentTestEnable + VkBool32 extendedDynamicState3ShadingRateImageEnable + + + VkStructureType sType + void* pNext + VkBool32 dynamicPrimitiveTopologyUnrestricted + + + VkBlendFactor srcColorBlendFactor + VkBlendFactor dstColorBlendFactor + VkBlendOp colorBlendOp + VkBlendFactor srcAlphaBlendFactor + VkBlendFactor dstAlphaBlendFactor + VkBlendOp alphaBlendOp + + + VkBlendOp advancedBlendOp + VkBool32 srcPremultiplied + VkBool32 dstPremultiplied + VkBlendOverlapEXT blendOverlap + VkBool32 clampResults + + + VkStructureType sType + const void* pNextPointer to next structure + VkSurfaceTransformFlagBitsKHR transform + + + VkStructureType sType + const void* pNext + VkSurfaceTransformFlagBitsKHR transform + + + VkStructureType sType + const void* pNextPointer to next structure + VkSurfaceTransformFlagBitsKHR transform + VkRect2D renderArea + + + VkStructureType sType + void* pNext + VkBool32 partitionedAccelerationStructure + + + VkStructureType sType + void* pNext + uint32_t maxPartitionCount + + + VkPartitionedAccelerationStructureOpTypeNV opType + uint32_t argCount + VkStridedDeviceAddressNV argData + + + VkStructureType sType + void* pNext + VkBool32 enablePartitionTranslation + + + VkTransformMatrixKHR transform + float explicitAABB[6] + uint32_t instanceID + uint32_t instanceMask + uint32_t instanceContributionToHitGroupIndex + VkPartitionedAccelerationStructureInstanceFlagsNV instanceFlags + uint32_t instanceIndex + uint32_t partitionIndex + VkDeviceAddress accelerationStructure + + + uint32_t instanceIndex + uint32_t instanceContributionToHitGroupIndex + VkDeviceAddress accelerationStructure + + + uint32_t partitionIndex + float partitionTranslation[3] + + + VkStructureType sType + void* pNext + uint32_t accelerationStructureCount + const VkDeviceAddress* pAccelerationStructures + + + VkStructureType sType + void* pNext + VkBuildAccelerationStructureFlagsKHR flags + uint32_t instanceCount + uint32_t maxInstancePerPartitionCount + uint32_t partitionCount + uint32_t maxInstanceInGlobalPartitionCount + + + VkStructureType sType + void* pNext + VkPartitionedAccelerationStructureInstancesInputNV input + VkDeviceAddress srcAccelerationStructureData + VkDeviceAddress dstAccelerationStructureData + VkDeviceAddress scratchData + VkDeviceAddress srcInfos + VkDeviceAddress srcInfosCount + + + VkStructureType sType + void* pNext + VkBool32 diagnosticsConfig + + + VkStructureType sType + const void* pNext + VkDeviceDiagnosticsConfigFlagsNV flags + + + VkStructureType sType + const void* pNext + uint8_t pipelineIdentifier[VK_UUID_SIZE] + VkPipelineMatchControl matchControl + VkDeviceSize poolEntrySize + + + VkStructureType sType + void* pNext + VkBool32 shaderZeroInitializeWorkgroupMemory + + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupUniformControlFlow + + + VkStructureType sType + void* pNext + VkBool32 robustBufferAccess2 + VkBool32 robustImageAccess2 + VkBool32 nullDescriptor + + + + VkStructureType sType + void* pNext + VkDeviceSize robustStorageBufferAccessSizeAlignment + VkDeviceSize robustUniformBufferAccessSizeAlignment + + + + VkStructureType sType + void* pNext + VkBool32 robustImageAccess + + + + VkStructureType sType + void* pNext + VkBool32 workgroupMemoryExplicitLayout + VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout + VkBool32 workgroupMemoryExplicitLayout8BitAccess + VkBool32 workgroupMemoryExplicitLayout16BitAccess + + + VkStructureType sType + void* pNext + VkBool32 constantAlphaColorBlendFactors + VkBool32 events + VkBool32 imageViewFormatReinterpretation + VkBool32 imageViewFormatSwizzle + VkBool32 imageView2DOn3DImage + VkBool32 multisampleArrayImage + VkBool32 mutableComparisonSamplers + VkBool32 pointPolygons + VkBool32 samplerMipLodBias + VkBool32 separateStencilMaskRef + VkBool32 shaderSampleRateInterpolationFunctions + VkBool32 tessellationIsolines + VkBool32 tessellationPointMode + VkBool32 triangleFans + VkBool32 vertexAttributeAccessBeyondStride + + + VkStructureType sType + void* pNext + uint32_t minVertexInputBindingStrideAlignment + + + VkStructureType sType + void* pNext + VkBool32 formatA4R4G4B4 + VkBool32 formatA4B4G4R4 + + + VkStructureType sType + void* pNext + VkBool32 subpassShading + + + VkStructureType sType + void* pNext + VkBool32 clustercullingShader + VkBool32 multiviewClusterCullingShader + + + VkStructureType sType + void* pNext + VkBool32 clusterShadingRate + + + VkStructureType sType + const void* pNext + VkDeviceSize srcOffsetSpecified in bytes + VkDeviceSize dstOffsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + + + + VkStructureType sType + const void* pNext + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsetSpecified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D extentSpecified in pixels for both compressed and uncompressed images + + + + VkStructureType sType + const void* pNext + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsets[2]Specified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsets[2]Specified in pixels for both compressed and uncompressed images + + + + VkStructureType sType + const void* pNext + VkDeviceSize bufferOffsetSpecified in bytes + uint32_t bufferRowLengthSpecified in texels + uint32_t bufferImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D imageExtentSpecified in pixels for both compressed and uncompressed images + + + + VkStructureType sType + const void* pNext + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffset + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffset + VkExtent3D extent + + + + VkStructureType sType + const void* pNext + VkBuffer srcBuffer + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageBlit2* pRegions + VkFilter filter + + + + VkStructureType sType + const void* pNext + VkBuffer srcBuffer + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkBufferImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageResolve2* pRegions + + + + VkStructureType sType + void* pNext + VkBool32 shaderImageInt64Atomics + VkBool32 sparseImageInt64Atomics + + + VkStructureType sType + const void* pNext + const VkAttachmentReference2* pFragmentShadingRateAttachment + VkExtent2D shadingRateAttachmentTexelSize + + + VkStructureType sType + const void* pNext + VkExtent2D fragmentSize + VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + VkStructureType sType + void* pNext + VkBool32 pipelineFragmentShadingRate + VkBool32 primitiveFragmentShadingRate + VkBool32 attachmentFragmentShadingRate + + + VkStructureType sType + void* pNext + VkExtent2D minFragmentShadingRateAttachmentTexelSize + VkExtent2D maxFragmentShadingRateAttachmentTexelSize + uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio + VkBool32 primitiveFragmentShadingRateWithMultipleViewports + VkBool32 layeredShadingRateAttachments + VkBool32 fragmentShadingRateNonTrivialCombinerOps + VkExtent2D maxFragmentSize + uint32_t maxFragmentSizeAspectRatio + uint32_t maxFragmentShadingRateCoverageSamples + VkSampleCountFlagBits maxFragmentShadingRateRasterizationSamples + VkBool32 fragmentShadingRateWithShaderDepthStencilWrites + VkBool32 fragmentShadingRateWithSampleMask + VkBool32 fragmentShadingRateWithShaderSampleMask + VkBool32 fragmentShadingRateWithConservativeRasterization + VkBool32 fragmentShadingRateWithFragmentShaderInterlock + VkBool32 fragmentShadingRateWithCustomSampleLocations + VkBool32 fragmentShadingRateStrictMultiplyCombiner + + + VkStructureType sType + void* pNext + VkSampleCountFlags sampleCounts + VkExtent2D fragmentSize + + + VkStructureType sType + void* pNext + VkBool32 shaderTerminateInvocation + + + + VkStructureType sType + void* pNext + VkBool32 fragmentShadingRateEnums + VkBool32 supersampleFragmentShadingRates + VkBool32 noInvocationFragmentShadingRates + + + VkStructureType sType + void* pNext + VkSampleCountFlagBits maxFragmentShadingRateInvocationCount + + + VkStructureType sType + const void* pNext + VkFragmentShadingRateTypeNV shadingRateType + VkFragmentShadingRateNV shadingRate + VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + VkStructureType sType + void* pNext + VkDeviceSize accelerationStructureSize + VkDeviceSize updateScratchSize + VkDeviceSize buildScratchSize + + + VkStructureType sType + void* pNext + VkBool32 image2DViewOf3D + VkBool32 sampler2DViewOf3D + + + VkStructureType sType + void* pNext + VkBool32 imageSlicedViewOf3D + + + VkStructureType sType + void* pNext + VkBool32 attachmentFeedbackLoopDynamicState + + + VkStructureType sType + void* pNext + VkBool32 legacyVertexAttributes + + + VkStructureType sType + void* pNext + VkBool32 nativeUnalignedPerformance + + + VkStructureType sType + void* pNext + VkBool32 mutableDescriptorType + + + + uint32_t descriptorTypeCount + const VkDescriptorType* pDescriptorTypes + + + + VkStructureType sType + const void* pNext + uint32_t mutableDescriptorTypeListCount + const VkMutableDescriptorTypeListEXT* pMutableDescriptorTypeLists + + + + VkStructureType sType + void* pNext + VkBool32 depthClipControl + + + VkStructureType sType + void* pNext + VkBool32 zeroInitializeDeviceMemory + + + VkStructureType sType + void* pNext + + + VkStructureType sType + void* pNext + VkBool32 customResolve + + + VkStructureType sType + const void* pNext + VkBool32 customResolve + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + + + VkStructureType sType + void* pNext + VkBool32 deviceGeneratedCommands + VkBool32 dynamicGeneratedPipelineLayout + + + VkStructureType sType + void* pNext + uint32_t maxIndirectPipelineCount + uint32_t maxIndirectShaderObjectCount + uint32_t maxIndirectSequenceCount + uint32_t maxIndirectCommandsTokenCount + uint32_t maxIndirectCommandsTokenOffset + uint32_t maxIndirectCommandsIndirectStride + VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes + VkShaderStageFlags supportedIndirectCommandsShaderStages + VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding + VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding + VkBool32 deviceGeneratedCommandsTransformFeedback + VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount + + + VkStructureType sType + void* pNext + VkPipeline pipeline + + + VkStructureType sType + void* pNext + uint32_t shaderCount + const VkShaderEXT* pShaders + + + VkStructureType sType + const void* pNext + VkIndirectExecutionSetEXT indirectExecutionSet + VkIndirectCommandsLayoutEXT indirectCommandsLayout + uint32_t maxSequenceCount + uint32_t maxDrawCount + + + VkStructureType sType + const void* pNext + VkPipeline initialPipeline + uint32_t maxPipelineCount + + + VkStructureType sType + const void* pNext + uint32_t setLayoutCount + const VkDescriptorSetLayout* pSetLayouts + + + VkStructureType sType + const void* pNext + uint32_t shaderCount + const VkShaderEXT* pInitialShaders + const VkIndirectExecutionSetShaderLayoutInfoEXT* pSetLayoutInfos + uint32_t maxShaderCount + uint32_t pushConstantRangeCount + const VkPushConstantRange* pPushConstantRanges + + + const VkIndirectExecutionSetPipelineInfoEXT* pPipelineInfo + const VkIndirectExecutionSetShaderInfoEXT* pShaderInfo + + + VkStructureType sType + const void* pNext + VkIndirectExecutionSetInfoTypeEXT type + VkIndirectExecutionSetInfoEXT info + + + VkStructureType sType + const void* pNext + VkShaderStageFlags shaderStages + VkIndirectExecutionSetEXT indirectExecutionSet + VkIndirectCommandsLayoutEXT indirectCommandsLayout + VkDeviceAddress indirectAddress + VkDeviceSize indirectAddressSize + VkDeviceAddress preprocessAddress + VkDeviceSize preprocessSize + uint32_t maxSequenceCount + VkDeviceAddress sequenceCountAddress + uint32_t maxDrawCount + + + VkStructureType sType + const void* pNext + uint32_t index + VkPipeline pipeline + + + VkStructureType sType + const void* pNext + uint32_t index + VkShaderEXT shader + + + VkStructureType sType + const void* pNext + VkIndirectCommandsLayoutUsageFlagsEXT flags + VkShaderStageFlags shaderStages + uint32_t indirectStride + VkPipelineLayout pipelineLayout + uint32_t tokenCount + const VkIndirectCommandsLayoutTokenEXT* pTokens + + + VkStructureType sType + const void* pNext + VkIndirectCommandsTokenTypeEXT type + VkIndirectCommandsTokenDataEXT data + uint32_t offset + + + VkDeviceAddress bufferAddress + uint32_t stride + uint32_t commandCount + + + uint32_t vertexBindingUnit + + + VkDeviceAddress bufferAddress + uint32_t size + uint32_t stride + + + VkIndirectCommandsInputModeFlagBitsEXT mode + + + VkDeviceAddress bufferAddress + uint32_t size + VkIndexType indexType + + + VkPushConstantRange updateRange + + + VkIndirectExecutionSetInfoTypeEXT type + VkShaderStageFlags shaderStages + + + const VkIndirectCommandsPushConstantTokenEXT* pPushConstant + const VkIndirectCommandsVertexBufferTokenEXT* pVertexBuffer + const VkIndirectCommandsIndexBufferTokenEXT* pIndexBuffer + const VkIndirectCommandsExecutionSetTokenEXT* pExecutionSet + + + VkStructureType sType + const void* pNext + VkBool32 negativeOneToOne + + + VkStructureType sType + void* pNext + VkBool32 depthClampControl + + + VkStructureType sType + const void* pNext + VkDepthClampModeEXT depthClampMode + const VkDepthClampRangeEXT* pDepthClampRange + + + VkStructureType sType + void* pNext + VkBool32 vertexInputDynamicState + + + VkStructureType sType + void* pNext + VkBool32 externalMemoryRDMA + + + VkStructureType sType + void* pNext + VkBool32 shaderRelaxedExtendedInstruction + + + VkStructureType sType + void* pNext + uint32_t binding + uint32_t stride + VkVertexInputRate inputRate + uint32_t divisor + + + VkStructureType sType + void* pNext + uint32_t locationlocation of the shader vertex attrib + uint32_t bindingVertex buffer binding id + VkFormat formatformat of source data + uint32_t offsetOffset of first element in bytes from base of vertex + + + VkStructureType sType + void* pNext + VkBool32 colorWriteEnable + + + VkStructureType sType + const void* pNext + uint32_t attachmentCount# of pAttachments + const VkBool32* pColorWriteEnables + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + VkImageLayout oldLayout + VkImageLayout newLayout + uint32_t srcQueueFamilyIndex + uint32_t dstQueueFamilyIndex + VkImage image + VkImageSubresourceRange subresourceRange + + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + uint32_t srcQueueFamilyIndex + uint32_t dstQueueFamilyIndex + VkBuffer buffer + VkDeviceSize offset + VkDeviceSize size + + + + VkStructureType sType + const void* pNext + VkAccessFlags3KHR srcAccessMask3 + VkAccessFlags3KHR dstAccessMask3 + + + VkStructureType sType + const void* pNext + VkDependencyFlags dependencyFlags + uint32_t memoryBarrierCount + const VkMemoryBarrier2* pMemoryBarriers + uint32_t bufferMemoryBarrierCount + const VkBufferMemoryBarrier2* pBufferMemoryBarriers + uint32_t imageMemoryBarrierCount + const VkImageMemoryBarrier2* pImageMemoryBarriers + + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + uint64_t value + VkPipelineStageFlags2 stageMask + uint32_t deviceIndex + + + + VkStructureType sType + const void* pNext + VkCommandBuffer commandBuffer + uint32_t deviceMask + + + + VkStructureType sType + const void* pNext + VkSubmitFlags flags + uint32_t waitSemaphoreInfoCount + const VkSemaphoreSubmitInfo* pWaitSemaphoreInfos + uint32_t commandBufferInfoCount + const VkCommandBufferSubmitInfo* pCommandBufferInfos + uint32_t signalSemaphoreInfoCount + const VkSemaphoreSubmitInfo* pSignalSemaphoreInfos + + + + VkStructureType sType + void* pNext + VkPipelineStageFlags2 checkpointExecutionStageMask + + + VkStructureType sType + void* pNext + VkPipelineStageFlags2 stage + void* pCheckpointMarker + + + VkStructureType sType + void* pNext + VkBool32 synchronization2 + + + + VkStructureType sType + void* pNext + VkBool32 unifiedImageLayouts + VkBool32 unifiedImageLayoutsVideo + + + VkStructureType sType + void* pNext + VkBool32 hostImageCopy + + + + VkStructureType sType + void* pNext + uint32_t copySrcLayoutCount + VkImageLayout* pCopySrcLayouts + uint32_t copyDstLayoutCount + VkImageLayout* pCopyDstLayouts + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE] + VkBool32 identicalMemoryTypeRequirements + + + + VkStructureType sType + const void* pNext + const void* pHostPointer + uint32_t memoryRowLengthSpecified in texels + uint32_t memoryImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffset + VkExtent3D imageExtent + + + + VkStructureType sType + const void* pNext + void* pHostPointer + uint32_t memoryRowLengthSpecified in texels + uint32_t memoryImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffset + VkExtent3D imageExtent + + + + VkStructureType sType + const void* pNext + VkHostImageCopyFlags flags + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkMemoryToImageCopy* pRegions + + + + VkStructureType sType + const void* pNext + VkHostImageCopyFlags flags + VkImage srcImage + VkImageLayout srcImageLayout + uint32_t regionCount + const VkImageToMemoryCopy* pRegions + + + + VkStructureType sType + const void* pNext + VkHostImageCopyFlags flags + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage image + VkImageLayout oldLayout + VkImageLayout newLayout + VkImageSubresourceRange subresourceRange + + + + VkStructureType sType + void* pNext + VkDeviceSize sizeSpecified in bytes + + + + VkStructureType sType + void* pNext + VkBool32 optimalDeviceAccessSpecifies if device access is optimal + VkBool32 identicalMemoryLayoutSpecifies if memory layout is identical + + + + VkStructureType sType + void* pNext + VkBool32 deviceNoDynamicHostAllocations + VkBool32 deviceDestroyFreesMemory + VkBool32 commandPoolMultipleCommandBuffersRecording + VkBool32 commandPoolResetCommandBuffer + VkBool32 commandBufferSimultaneousUse + VkBool32 secondaryCommandBufferNullOrImagelessFramebuffer + VkBool32 recycleDescriptorSetMemory + VkBool32 recyclePipelineMemory + uint32_t maxRenderPassSubpasses + uint32_t maxRenderPassDependencies + uint32_t maxSubpassInputAttachments + uint32_t maxSubpassPreserveAttachments + uint32_t maxFramebufferAttachments + uint32_t maxDescriptorSetLayoutBindings + uint32_t maxQueryFaultCount + uint32_t maxCallbackFaultCount + uint32_t maxCommandPoolCommandBuffers + VkDeviceSize maxCommandBufferSize + + + VkStructureType sType + const void* pNext + VkDeviceSize poolEntrySize + uint32_t poolEntryCount + + + VkStructureType sType + const void* pNext + uint32_t pipelineCacheCreateInfoCount + const VkPipelineCacheCreateInfo* pPipelineCacheCreateInfos + uint32_t pipelinePoolSizeCount + const VkPipelinePoolSize* pPipelinePoolSizes + uint32_t semaphoreRequestCount + uint32_t commandBufferRequestCount + uint32_t fenceRequestCount + uint32_t deviceMemoryRequestCount + uint32_t bufferRequestCount + uint32_t imageRequestCount + uint32_t eventRequestCount + uint32_t queryPoolRequestCount + uint32_t bufferViewRequestCount + uint32_t imageViewRequestCount + uint32_t layeredImageViewRequestCount + uint32_t pipelineCacheRequestCount + uint32_t pipelineLayoutRequestCount + uint32_t renderPassRequestCount + uint32_t graphicsPipelineRequestCount + uint32_t computePipelineRequestCount + uint32_t descriptorSetLayoutRequestCount + uint32_t samplerRequestCount + uint32_t descriptorPoolRequestCount + uint32_t descriptorSetRequestCount + uint32_t framebufferRequestCount + uint32_t commandPoolRequestCount + uint32_t samplerYcbcrConversionRequestCount + uint32_t surfaceRequestCount + uint32_t swapchainRequestCount + uint32_t displayModeRequestCount + uint32_t subpassDescriptionRequestCount + uint32_t attachmentDescriptionRequestCount + uint32_t descriptorSetLayoutBindingRequestCount + uint32_t descriptorSetLayoutBindingLimit + uint32_t maxImageViewMipLevels + uint32_t maxImageViewArrayLayers + uint32_t maxLayeredImageViewMipLevels + uint32_t maxOcclusionQueriesPerPool + uint32_t maxPipelineStatisticsQueriesPerPool + uint32_t maxTimestampQueriesPerPool + uint32_t maxImmutableSamplersPerDescriptorSetLayout + + + VkStructureType sType + const void* pNext + VkDeviceSize commandPoolReservedSize + uint32_t commandPoolMaxCommandBuffers + + + VkStructureType sType + void* pNext + VkDeviceSize commandPoolAllocated + VkDeviceSize commandPoolReservedSize + VkDeviceSize commandBufferAllocated + + + VkStructureType sType + void* pNext + VkBool32 shaderAtomicInstructions + + + VkStructureType sType + void* pNext + VkBool32 primitivesGeneratedQuery + VkBool32 primitivesGeneratedQueryWithRasterizerDiscard + VkBool32 primitivesGeneratedQueryWithNonZeroStreams + + + VkStructureType sType + void* pNext + VkBool32 legacyDithering + + + VkStructureType sType + void* pNext + VkBool32 multisampledRenderToSingleSampled + + + VkStructureType sType + void* pNext + VkBool32 presentId2Supported + + + VkStructureType sType + void* pNext + VkBool32 presentWait2Supported + + + VkStructureType sType + void* pNext + VkBool32 optimal + + + VkStructureType sType + const void* pNext + VkBool32 multisampledRenderToSingleSampledEnable + VkSampleCountFlagBits rasterizationSamples + + + VkStructureType sType + void* pNext + VkBool32 pipelineProtectedAccess + + + + VkStructureType sType + void* pNext + VkVideoCodecOperationFlagsKHR videoCodecOperations + + + VkStructureType sType + void* pNext + VkBool32 queryResultStatusSupport + + + VkStructureType sType + const void* pNext + uint32_t profileCount + const VkVideoProfileInfoKHR* pProfiles + + + VkStructureType sType + const void* pNext + VkImageUsageFlags imageUsage + + + VkStructureType sType + void* pNext + VkFormat format + VkComponentMapping componentMapping + VkImageCreateFlags imageCreateFlags + VkImageType imageType + VkImageTiling imageTiling + VkImageUsageFlags imageUsageFlags + + + VkStructureType sType + void* pNext + VkExtent2D maxQuantizationMapExtent + + + VkStructureType sType + void* pNext + int32_t minQpDelta + int32_t maxQpDelta + + + VkStructureType sType + void* pNext + int32_t minQpDelta + int32_t maxQpDelta + + + VkStructureType sType + void* pNext + int32_t minQIndexDelta + int32_t maxQIndexDelta + + + VkStructureType sType + void* pNext + VkExtent2D quantizationMapTexelSize + + + VkStructureType sType + void* pNext + VkVideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes + + + VkStructureType sType + void* pNext + VkVideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes + + + VkStructureType sType + const void* pNext + VkVideoCodecOperationFlagBitsKHR videoCodecOperation + VkVideoChromaSubsamplingFlagsKHR chromaSubsampling + VkVideoComponentBitDepthFlagsKHR lumaBitDepth + VkVideoComponentBitDepthFlagsKHR chromaBitDepth + + + VkStructureType sType + void* pNext + VkVideoCapabilityFlagsKHR flags + VkDeviceSize minBitstreamBufferOffsetAlignment + VkDeviceSize minBitstreamBufferSizeAlignment + VkExtent2D pictureAccessGranularity + VkExtent2D minCodedExtent + VkExtent2D maxCodedExtent + uint32_t maxDpbSlots + uint32_t maxActiveReferencePictures + VkExtensionProperties stdHeaderVersion + + + VkStructureType sType + void* pNext + uint32_t memoryBindIndex + VkMemoryRequirements memoryRequirements + + + VkStructureType sType + const void* pNext + uint32_t memoryBindIndex + VkDeviceMemory memory + VkDeviceSize memoryOffset + VkDeviceSize memorySize + + + VkStructureType sType + const void* pNext + VkOffset2D codedOffsetThe offset to be used for the picture resource, currently only used in field mode + VkExtent2D codedExtentThe extent to be used for the picture resource + uint32_t baseArrayLayerThe first array layer to be accessed for the Decode or Encode Operations + VkImageView imageViewBindingThe ImageView binding of the resource + + + VkStructureType sType + const void* pNext + int32_t slotIndexThe reference slot index + const VkVideoPictureResourceInfoKHR* pPictureResourceThe reference picture resource + + + VkStructureType sType + void* pNext + VkVideoDecodeCapabilityFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkVideoDecodeUsageFlagsKHR videoUsageHints + + + VkStructureType sType + const void* pNext + VkVideoDecodeFlagsKHR flags + VkBuffer srcBuffer + VkDeviceSize srcBufferOffset + VkDeviceSize srcBufferRange + VkVideoPictureResourceInfoKHR dstPictureResource + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot + uint32_t referenceSlotCount + const VkVideoReferenceSlotInfoKHR* pReferenceSlots + + + VkStructureType sType + void* pNext + VkBool32 videoMaintenance1 + + + VkStructureType sType + void* pNext + VkBool32 videoMaintenance2 + + + VkStructureType sType + const void* pNext + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + + Video Decode Codec Standard specific structures + #include "vk_video/vulkan_video_codec_h264std.h" + + + #include "vk_video/vulkan_video_codec_h264std_decode.h" + + + + VkStructureType sType + const void* pNext + StdVideoH264ProfileIdc stdProfileIdc + VkVideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout + + + VkStructureType sType + void* pNext + StdVideoH264LevelIdc maxLevelIdc + VkOffset2D fieldOffsetGranularity + + + + + VkStructureType sType + const void* pNext + uint32_t stdSPSCount + const StdVideoH264SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH264PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoDecodeH264SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + const StdVideoH264SequenceParameterSet* pStdSPS + const StdVideoH264PictureParameterSet* pStdPPS + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH264PictureInfo* pStdPictureInfo + uint32_t sliceCount + const uint32_t* pSliceOffsets + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH264ReferenceInfo* pStdReferenceInfo + + #include "vk_video/vulkan_video_codec_h265std.h" + + + + + + #include "vk_video/vulkan_video_codec_h265std_decode.h" + + + + VkStructureType sType + const void* pNext + StdVideoH265ProfileIdc stdProfileIdc + + + VkStructureType sType + void* pNext + StdVideoH265LevelIdc maxLevelIdc + + + VkStructureType sType + const void* pNext + uint32_t stdVPSCount + const StdVideoH265VideoParameterSet* pStdVPSs + uint32_t stdSPSCount + const StdVideoH265SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH265PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdVPSCount + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoDecodeH265SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + const StdVideoH265VideoParameterSet* pStdVPS + const StdVideoH265SequenceParameterSet* pStdSPS + const StdVideoH265PictureParameterSet* pStdPPS + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH265PictureInfo* pStdPictureInfo + uint32_t sliceSegmentCount + const uint32_t* pSliceSegmentOffsets + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH265ReferenceInfo* pStdReferenceInfo + + #include "vk_video/vulkan_video_codec_vp9std.h" + + + #include "vk_video/vulkan_video_codec_vp9std_decode.h" + + + VkStructureType sType + void* pNext + VkBool32 videoDecodeVP9 + + + VkStructureType sType + const void* pNext + StdVideoVP9Profile stdProfile + + + VkStructureType sType + void* pNext + StdVideoVP9Level maxLevel + + + VkStructureType sType + const void* pNext + const StdVideoDecodeVP9PictureInfo* pStdPictureInfo + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR] + uint32_t uncompressedHeaderOffset + uint32_t compressedHeaderOffset + uint32_t tilesOffset + + #include "vk_video/vulkan_video_codec_av1std.h" + + + + #include "vk_video/vulkan_video_codec_av1std_decode.h" + + + + VkStructureType sType + const void* pNext + StdVideoAV1Profile stdProfile + VkBool32 filmGrainSupport + + + VkStructureType sType + void* pNext + StdVideoAV1Level maxLevel + + + VkStructureType sType + const void* pNext + const StdVideoAV1SequenceHeader* pStdSequenceHeader + + + VkStructureType sType + const void* pNext + const StdVideoAV1SequenceHeader* pStdSequenceHeader + + + VkStructureType sType + const void* pNext + const StdVideoDecodeAV1PictureInfo* pStdPictureInfo + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR] + uint32_t frameHeaderOffset + uint32_t tileCount + const uint32_t* pTileOffsets + const uint32_t* pTileSizes + + + VkStructureType sType + const void* pNext + const StdVideoDecodeAV1ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + const void* pNext + uint32_t queueFamilyIndex + VkVideoSessionCreateFlagsKHR flags + const VkVideoProfileInfoKHR* pVideoProfile + VkFormat pictureFormat + VkExtent2D maxCodedExtent + VkFormat referencePictureFormat + uint32_t maxDpbSlots + uint32_t maxActiveReferencePictures + const VkExtensionProperties* pStdHeaderVersion + + + VkStructureType sType + const void* pNext + VkVideoSessionParametersCreateFlagsKHR flags + VkVideoSessionParametersKHR videoSessionParametersTemplate + VkVideoSessionKHR videoSession + + + VkStructureType sType + const void* pNext + uint32_t updateSequenceCount + + + VkStructureType sType + const void* pNext + VkVideoSessionParametersKHR videoSessionParameters + + + VkStructureType sType + void* pNext + VkBool32 hasOverrides + + + VkStructureType sType + const void* pNext + VkVideoBeginCodingFlagsKHR flags + VkVideoSessionKHR videoSession + VkVideoSessionParametersKHR videoSessionParameters + uint32_t referenceSlotCount + const VkVideoReferenceSlotInfoKHR* pReferenceSlots + + + VkStructureType sType + const void* pNext + VkVideoEndCodingFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkVideoCodingControlFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkVideoEncodeUsageFlagsKHR videoUsageHints + VkVideoEncodeContentFlagsKHR videoContentHints + VkVideoEncodeTuningModeKHR tuningMode + + + VkStructureType sType + const void* pNext + VkVideoEncodeFlagsKHR flags + VkBuffer dstBuffer + VkDeviceSize dstBufferOffset + VkDeviceSize dstBufferRange + VkVideoPictureResourceInfoKHR srcPictureResource + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot + uint32_t referenceSlotCount + const VkVideoReferenceSlotInfoKHR* pReferenceSlots + uint32_t precedingExternallyEncodedBytes + + + VkStructureType sType + const void* pNext + VkImageView quantizationMap + VkExtent2D quantizationMapExtent + + + VkStructureType sType + const void* pNext + VkExtent2D quantizationMapTexelSize + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeQuantizationMap + + + VkStructureType sType + const void* pNext + VkVideoEncodeFeedbackFlagsKHR encodeFeedbackFlags + + + VkStructureType sType + const void* pNext + uint32_t qualityLevel + + + VkStructureType sType + const void* pNext + const VkVideoProfileInfoKHR* pVideoProfile + uint32_t qualityLevel + + + VkStructureType sType + void* pNext + VkVideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode + uint32_t preferredRateControlLayerCount + + + VkStructureType sType + const void* pNext + VkVideoEncodeRateControlFlagsKHR flags + VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode + uint32_t layerCount + const VkVideoEncodeRateControlLayerInfoKHR* pLayers + uint32_t virtualBufferSizeInMs + uint32_t initialVirtualBufferSizeInMs + + + VkStructureType sType + const void* pNext + uint64_t averageBitrate + uint64_t maxBitrate + uint32_t frameRateNumerator + uint32_t frameRateDenominator + + + VkStructureType sType + void* pNext + VkVideoEncodeCapabilityFlagsKHR flags + VkVideoEncodeRateControlModeFlagsKHR rateControlModes + uint32_t maxRateControlLayers + uint64_t maxBitrate + uint32_t maxQualityLevels + VkExtent2D encodeInputPictureGranularity + VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeH264CapabilityFlagsKHR flags + StdVideoH264LevelIdc maxLevelIdc + uint32_t maxSliceCount + uint32_t maxPPictureL0ReferenceCount + uint32_t maxBPictureL0ReferenceCount + uint32_t maxL1ReferenceCount + uint32_t maxTemporalLayerCount + VkBool32 expectDyadicTemporalLayerPattern + int32_t minQp + int32_t maxQp + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeH264RateControlFlagsKHR preferredRateControlFlags + uint32_t preferredGopFrameCount + uint32_t preferredIdrPeriod + uint32_t preferredConsecutiveBFrameCount + uint32_t preferredTemporalLayerCount + VkVideoEncodeH264QpKHR preferredConstantQp + uint32_t preferredMaxL0ReferenceCount + uint32_t preferredMaxL1ReferenceCount + VkBool32 preferredStdEntropyCodingModeFlag + + #include "vk_video/vulkan_video_codec_h264std_encode.h" + + + + + VkStructureType sType + const void* pNext + VkBool32 useMaxLevelIdc + StdVideoH264LevelIdc maxLevelIdc + + + VkStructureType sType + const void* pNext + uint32_t stdSPSCount + const StdVideoH264SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH264PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoEncodeH264SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + VkBool32 writeStdSPS + VkBool32 writeStdPPS + uint32_t stdSPSId + uint32_t stdPPSId + + + VkStructureType sType + void* pNext + VkBool32 hasStdSPSOverrides + VkBool32 hasStdPPSOverrides + + + VkStructureType sType + const void* pNext + const StdVideoEncodeH264ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + const void* pNext + uint32_t naluSliceEntryCount + const VkVideoEncodeH264NaluSliceInfoKHR* pNaluSliceEntries + const StdVideoEncodeH264PictureInfo* pStdPictureInfo + VkBool32 generatePrefixNalu + + + VkStructureType sType + const void* pNext + StdVideoH264ProfileIdc stdProfileIdc + + + VkStructureType sType + const void* pNext + int32_t constantQp + const StdVideoEncodeH264SliceHeader* pStdSliceHeader + + + VkStructureType sType + const void* pNext + VkVideoEncodeH264RateControlFlagsKHR flags + uint32_t gopFrameCount + uint32_t idrPeriod + uint32_t consecutiveBFrameCount + uint32_t temporalLayerCount + + + int32_t qpI + int32_t qpP + int32_t qpB + + + uint32_t frameISize + uint32_t framePSize + uint32_t frameBSize + + + VkStructureType sType + const void* pNext + VkBool32 useGopRemainingFrames + uint32_t gopRemainingI + uint32_t gopRemainingP + uint32_t gopRemainingB + + + VkStructureType sType + const void* pNext + VkBool32 useMinQp + VkVideoEncodeH264QpKHR minQp + VkBool32 useMaxQp + VkVideoEncodeH264QpKHR maxQp + VkBool32 useMaxFrameSize + VkVideoEncodeH264FrameSizeKHR maxFrameSize + + + VkStructureType sType + void* pNext + VkVideoEncodeH265CapabilityFlagsKHR flags + StdVideoH265LevelIdc maxLevelIdc + uint32_t maxSliceSegmentCount + VkExtent2D maxTiles + VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes + VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes + uint32_t maxPPictureL0ReferenceCount + uint32_t maxBPictureL0ReferenceCount + uint32_t maxL1ReferenceCount + uint32_t maxSubLayerCount + VkBool32 expectDyadicTemporalSubLayerPattern + int32_t minQp + int32_t maxQp + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeH265RateControlFlagsKHR preferredRateControlFlags + uint32_t preferredGopFrameCount + uint32_t preferredIdrPeriod + uint32_t preferredConsecutiveBFrameCount + uint32_t preferredSubLayerCount + VkVideoEncodeH265QpKHR preferredConstantQp + uint32_t preferredMaxL0ReferenceCount + uint32_t preferredMaxL1ReferenceCount + + #include "vk_video/vulkan_video_codec_h265std_encode.h" + + + + + VkStructureType sType + const void* pNext + VkBool32 useMaxLevelIdc + StdVideoH265LevelIdc maxLevelIdc + + + VkStructureType sType + const void* pNext + uint32_t stdVPSCount + const StdVideoH265VideoParameterSet* pStdVPSs + uint32_t stdSPSCount + const StdVideoH265SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH265PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdVPSCount + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoEncodeH265SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + VkBool32 writeStdVPS + VkBool32 writeStdSPS + VkBool32 writeStdPPS + uint32_t stdVPSId + uint32_t stdSPSId + uint32_t stdPPSId + + + VkStructureType sType + void* pNext + VkBool32 hasStdVPSOverrides + VkBool32 hasStdSPSOverrides + VkBool32 hasStdPPSOverrides + + + VkStructureType sType + const void* pNext + uint32_t naluSliceSegmentEntryCount + const VkVideoEncodeH265NaluSliceSegmentInfoKHR* pNaluSliceSegmentEntries + const StdVideoEncodeH265PictureInfo* pStdPictureInfo + + + VkStructureType sType + const void* pNext + int32_t constantQp + const StdVideoEncodeH265SliceSegmentHeader* pStdSliceSegmentHeader + + + VkStructureType sType + const void* pNext + VkVideoEncodeH265RateControlFlagsKHR flags + uint32_t gopFrameCount + uint32_t idrPeriod + uint32_t consecutiveBFrameCount + uint32_t subLayerCount + + + int32_t qpI + int32_t qpP + int32_t qpB + + + uint32_t frameISize + uint32_t framePSize + uint32_t frameBSize + + + VkStructureType sType + const void* pNext + VkBool32 useGopRemainingFrames + uint32_t gopRemainingI + uint32_t gopRemainingP + uint32_t gopRemainingB + + + VkStructureType sType + const void* pNext + VkBool32 useMinQp + VkVideoEncodeH265QpKHR minQp + VkBool32 useMaxQp + VkVideoEncodeH265QpKHR maxQp + VkBool32 useMaxFrameSize + VkVideoEncodeH265FrameSizeKHR maxFrameSize + + + VkStructureType sType + const void* pNext + StdVideoH265ProfileIdc stdProfileIdc + + + VkStructureType sType + const void* pNext + const StdVideoEncodeH265ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + void* pNext + VkVideoEncodeAV1CapabilityFlagsKHR flags + StdVideoAV1Level maxLevel + VkExtent2D codedPictureAlignment + VkExtent2D maxTiles + VkExtent2D minTileSize + VkExtent2D maxTileSize + VkVideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes + uint32_t maxSingleReferenceCount + uint32_t singleReferenceNameMask + uint32_t maxUnidirectionalCompoundReferenceCount + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount + uint32_t unidirectionalCompoundReferenceNameMask + uint32_t maxBidirectionalCompoundReferenceCount + uint32_t maxBidirectionalCompoundGroup1ReferenceCount + uint32_t maxBidirectionalCompoundGroup2ReferenceCount + uint32_t bidirectionalCompoundReferenceNameMask + uint32_t maxTemporalLayerCount + uint32_t maxSpatialLayerCount + uint32_t maxOperatingPoints + uint32_t minQIndex + uint32_t maxQIndex + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeAV1StdFlagsKHR stdSyntaxFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags + uint32_t preferredGopFrameCount + uint32_t preferredKeyFramePeriod + uint32_t preferredConsecutiveBipredictiveFrameCount + uint32_t preferredTemporalLayerCount + VkVideoEncodeAV1QIndexKHR preferredConstantQIndex + uint32_t preferredMaxSingleReferenceCount + uint32_t preferredSingleReferenceNameMask + uint32_t preferredMaxUnidirectionalCompoundReferenceCount + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount + uint32_t preferredUnidirectionalCompoundReferenceNameMask + uint32_t preferredMaxBidirectionalCompoundReferenceCount + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount + uint32_t preferredBidirectionalCompoundReferenceNameMask + + #include "vk_video/vulkan_video_codec_av1std_encode.h" + + + + + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeAV1 + + + VkStructureType sType + const void* pNext + VkBool32 useMaxLevel + StdVideoAV1Level maxLevel + + + VkStructureType sType + const void* pNext + const StdVideoAV1SequenceHeader* pStdSequenceHeader + const StdVideoEncodeAV1DecoderModelInfo* pStdDecoderModelInfo + uint32_t stdOperatingPointCount + const StdVideoEncodeAV1OperatingPointInfo* pStdOperatingPoints + + + VkStructureType sType + const void* pNext + const StdVideoEncodeAV1ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + const void* pNext + VkVideoEncodeAV1PredictionModeKHR predictionMode + VkVideoEncodeAV1RateControlGroupKHR rateControlGroup + uint32_t constantQIndex + const StdVideoEncodeAV1PictureInfo* pStdPictureInfo + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR] + VkBool32 primaryReferenceCdfOnly + VkBool32 generateObuExtensionHeader + + + VkStructureType sType + const void* pNext + StdVideoAV1Profile stdProfile + + + VkStructureType sType + const void* pNext + VkVideoEncodeAV1RateControlFlagsKHR flags + uint32_t gopFrameCount + uint32_t keyFramePeriod + uint32_t consecutiveBipredictiveFrameCount + uint32_t temporalLayerCount + + + uint32_t intraQIndex + uint32_t predictiveQIndex + uint32_t bipredictiveQIndex + + + uint32_t intraFrameSize + uint32_t predictiveFrameSize + uint32_t bipredictiveFrameSize + + + VkStructureType sType + const void* pNext + VkBool32 useGopRemainingFrames + uint32_t gopRemainingIntra + uint32_t gopRemainingPredictive + uint32_t gopRemainingBipredictive + + + VkStructureType sType + const void* pNext + VkBool32 useMinQIndex + VkVideoEncodeAV1QIndexKHR minQIndex + VkBool32 useMaxQIndex + VkVideoEncodeAV1QIndexKHR maxQIndex + VkBool32 useMaxFrameSize + VkVideoEncodeAV1FrameSizeKHR maxFrameSize + + + VkStructureType sType + void* pNext + VkBool32 inheritedViewportScissor2D + + + VkStructureType sType + const void* pNext + VkBool32 viewportScissor2D + uint32_t viewportDepthCount + const VkViewport* pViewportDepths + + + VkStructureType sType + void* pNext + VkBool32 ycbcr2plane444Formats + + + VkStructureType sType + void* pNext + VkBool32 provokingVertexLast + VkBool32 transformFeedbackPreservesProvokingVertex + + + VkStructureType sType + void* pNext + VkBool32 provokingVertexModePerPipeline + VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex + + + VkStructureType sType + const void* pNext + VkProvokingVertexModeEXT provokingVertexMode + + + VkStructureType sType + void* pNext + VkVideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes + uint32_t maxIntraRefreshCycleDuration + uint32_t maxIntraRefreshActiveReferencePictures + VkBool32 partitionIndependentIntraRefreshRegions + VkBool32 nonRectangularIntraRefreshRegions + + + VkStructureType sType + const void* pNext + VkVideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode + + + VkStructureType sType + const void* pNext + uint32_t intraRefreshCycleDuration + uint32_t intraRefreshIndex + + + VkStructureType sType + const void* pNext + uint32_t dirtyIntraRefreshRegions + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeIntraRefresh + + + VkStructureType sType + const void* pNext + size_t dataSize + const void* pData + + + VkStructureType sType + const void* pNext + VkBool32 use64bitTexturing + + + VkStructureType sType + const void* pNext + VkCuModuleNVX module + const char* pName + + + VkStructureType sType + const void* pNext + VkCuFunctionNVX function + uint32_t gridDimX + uint32_t gridDimY + uint32_t gridDimZ + uint32_t blockDimX + uint32_t blockDimY + uint32_t blockDimZ + uint32_t sharedMemBytes + size_t paramCount + const void* const * pParams + size_t extraCount + const void* const * pExtras + + + VkStructureType sType + void* pNext + VkBool32 descriptorBuffer + VkBool32 descriptorBufferCaptureReplay + VkBool32 descriptorBufferImageLayoutIgnored + VkBool32 descriptorBufferPushDescriptors + + + VkStructureType sType + void* pNext + VkBool32 combinedImageSamplerDescriptorSingleArray + VkBool32 bufferlessPushDescriptors + VkBool32 allowSamplerImageViewPostSubmitCreation + VkDeviceSize descriptorBufferOffsetAlignment + uint32_t maxDescriptorBufferBindings + uint32_t maxResourceDescriptorBufferBindings + uint32_t maxSamplerDescriptorBufferBindings + uint32_t maxEmbeddedImmutableSamplerBindings + uint32_t maxEmbeddedImmutableSamplers + size_t bufferCaptureReplayDescriptorDataSize + size_t imageCaptureReplayDescriptorDataSize + size_t imageViewCaptureReplayDescriptorDataSize + size_t samplerCaptureReplayDescriptorDataSize + size_t accelerationStructureCaptureReplayDescriptorDataSize + size_t samplerDescriptorSize + size_t combinedImageSamplerDescriptorSize + size_t sampledImageDescriptorSize + size_t storageImageDescriptorSize + size_t uniformTexelBufferDescriptorSize + size_t robustUniformTexelBufferDescriptorSize + size_t storageTexelBufferDescriptorSize + size_t robustStorageTexelBufferDescriptorSize + size_t uniformBufferDescriptorSize + size_t robustUniformBufferDescriptorSize + size_t storageBufferDescriptorSize + size_t robustStorageBufferDescriptorSize + size_t inputAttachmentDescriptorSize + size_t accelerationStructureDescriptorSize + VkDeviceSize maxSamplerDescriptorBufferRange + VkDeviceSize maxResourceDescriptorBufferRange + VkDeviceSize samplerDescriptorBufferAddressSpaceSize + VkDeviceSize resourceDescriptorBufferAddressSpaceSize + VkDeviceSize descriptorBufferAddressSpaceSize + + + VkStructureType sType + void* pNext + size_t combinedImageSamplerDensityMapDescriptorSize + + + VkStructureType sType + void* pNext + VkDeviceAddress address + VkDeviceSize range + VkFormat format + + + VkStructureType sType + const void* pNext + VkDeviceAddress address + VkBufferUsageFlags usage + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + const VkSampler* pSampler + const VkDescriptorImageInfo* pCombinedImageSampler + const VkDescriptorImageInfo* pInputAttachmentImage + const VkDescriptorImageInfo* pSampledImage + const VkDescriptorImageInfo* pStorageImage + const VkDescriptorAddressInfoEXT* pUniformTexelBuffer + const VkDescriptorAddressInfoEXT* pStorageTexelBuffer + const VkDescriptorAddressInfoEXT* pUniformBuffer + const VkDescriptorAddressInfoEXT* pStorageBuffer + VkDeviceAddress accelerationStructure + + + VkStructureType sType + const void* pNext + VkDescriptorType type + VkDescriptorDataEXT data + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + VkStructureType sType + const void* pNext + VkImage image + + + VkStructureType sType + const void* pNext + VkImageView imageView + + + VkStructureType sType + const void* pNext + VkSampler sampler + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR accelerationStructure + VkAccelerationStructureNV accelerationStructureNV + + + VkStructureType sType + const void* pNext + const void* opaqueCaptureDescriptorData + + + VkStructureType sType + void* pNext + VkBool32 shaderIntegerDotProduct + + + + VkStructureType sType + void* pNext + VkBool32 integerDotProduct8BitUnsignedAccelerated + VkBool32 integerDotProduct8BitSignedAccelerated + VkBool32 integerDotProduct8BitMixedSignednessAccelerated + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProduct16BitUnsignedAccelerated + VkBool32 integerDotProduct16BitSignedAccelerated + VkBool32 integerDotProduct16BitMixedSignednessAccelerated + VkBool32 integerDotProduct32BitUnsignedAccelerated + VkBool32 integerDotProduct32BitSignedAccelerated + VkBool32 integerDotProduct32BitMixedSignednessAccelerated + VkBool32 integerDotProduct64BitUnsignedAccelerated + VkBool32 integerDotProduct64BitSignedAccelerated + VkBool32 integerDotProduct64BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated + + + + VkStructureType sType + void* pNext + VkBool32 hasPrimary + VkBool32 hasRender + int64_t primaryMajor + int64_t primaryMinor + int64_t renderMajor + int64_t renderMinor + + + VkStructureType sType + void* pNext + VkBool32 fragmentShaderBarycentric + + + VkStructureType sType + void* pNext + VkBool32 triStripVertexOrderIndependentOfProvokingVertex + + + VkStructureType sType + void* pNext + VkBool32 shaderFmaFloat16 + VkBool32 shaderFmaFloat32 + VkBool32 shaderFmaFloat64 + + + VkStructureType sType + void* pNext + VkBool32 rayTracingMotionBlur + VkBool32 rayTracingMotionBlurPipelineTraceRaysIndirect + + + VkStructureType sType + void* pNext + VkBool32 rayTracingValidation + + + VkStructureType sType + void* pNext + VkBool32 spheres + VkBool32 linearSweptSpheres + + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR vertexData + + + VkStructureType sType + const void* pNext + uint32_t maxInstances + VkAccelerationStructureMotionInfoFlagsNV flags + + + float sx + float a + float b + float pvx + float sy + float c + float pvy + float sz + float pvz + float qx + float qy + float qz + float qw + float tx + float ty + float tz + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + VkSRTDataNV transformT0 + VkSRTDataNV transformT1 + uint32_t instanceCustomIndex:24 + uint32_t mask:8 + uint32_t instanceShaderBindingTableRecordOffset:24 + VkGeometryInstanceFlagsKHR flags:8 + uint64_t accelerationStructureReference + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + VkTransformMatrixKHR transformT0 + VkTransformMatrixKHR transformT1 + uint32_t instanceCustomIndex:24 + uint32_t mask:8 + uint32_t instanceShaderBindingTableRecordOffset:24 + VkGeometryInstanceFlagsKHR flags:8 + uint64_t accelerationStructureReference + + + VkAccelerationStructureInstanceKHR staticInstance + VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance + VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance + + + VkAccelerationStructureMotionInstanceTypeNV type + VkAccelerationStructureMotionInstanceFlagsNV flags + VkAccelerationStructureMotionInstanceDataNV data + + typedef void* VkRemoteAddressNV; + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkBufferCollectionFUCHSIA collection + uint32_t index + + + VkStructureType sType + const void* pNext + VkBufferCollectionFUCHSIA collection + uint32_t index + + + VkStructureType sType + const void* pNext + VkBufferCollectionFUCHSIA collection + uint32_t index + + + VkStructureType sType + const void* pNext + zx_handle_t collectionToken + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + uint32_t bufferCount + uint32_t createInfoIndex + uint64_t sysmemPixelFormat + VkFormatFeatureFlags formatFeatures + VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + VkBufferCreateInfo createInfo + VkFormatFeatureFlags requiredFormatFeatures + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints + + + VkStructureType sType + const void* pNext + uint32_t colorSpace + + + VkStructureType sType + const void* pNext + VkImageCreateInfo imageCreateInfo + VkFormatFeatureFlags requiredFormatFeatures + VkImageFormatConstraintsFlagsFUCHSIA flags + uint64_t sysmemPixelFormat + uint32_t colorSpaceCount + const VkSysmemColorSpaceFUCHSIA* pColorSpaces + + + VkStructureType sType + const void* pNext + uint32_t formatConstraintsCount + const VkImageFormatConstraintsInfoFUCHSIA* pFormatConstraints + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints + VkImageConstraintsInfoFlagsFUCHSIA flags + + + VkStructureType sType + const void* pNext + uint32_t minBufferCount + uint32_t maxBufferCount + uint32_t minBufferCountForCamping + uint32_t minBufferCountForDedicatedSlack + uint32_t minBufferCountForSharedSlack + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) + + VkStructureType sType + const void* pNext + size_t dataSize + const void* pData + + + VkStructureType sType + const void* pNext + VkCudaModuleNV module + const char* pName + + + VkStructureType sType + const void* pNext + VkCudaFunctionNV function + uint32_t gridDimX + uint32_t gridDimY + uint32_t gridDimZ + uint32_t blockDimX + uint32_t blockDimY + uint32_t blockDimZ + uint32_t sharedMemBytes + size_t paramCount + const void* const * pParams + size_t extraCount + const void* const * pExtras + + + VkStructureType sType + void* pNext + VkBool32 formatRgba10x6WithoutYCbCrSampler + + + VkStructureType sType + void* pNext + VkFormatFeatureFlags2 linearTilingFeatures + VkFormatFeatureFlags2 optimalTilingFeatures + VkFormatFeatureFlags2 bufferFeatures + + + + VkStructureType sType + void* pNext + uint32_t drmFormatModifierCount + VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties + + + uint64_t drmFormatModifier + uint32_t drmFormatModifierPlaneCount + VkFormatFeatureFlags2 drmFormatModifierTilingFeatures + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + VkFormatFeatureFlags2 formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + uint32_t viewMask + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + + + + VkStructureType sType + const void* pNext + VkRenderingFlags flags + VkRect2D renderArea + uint32_t layerCount + uint32_t viewMask + uint32_t colorAttachmentCount + const VkRenderingAttachmentInfo* pColorAttachments + const VkRenderingAttachmentInfo* pDepthAttachment + const VkRenderingAttachmentInfo* pStencilAttachment + + + + VkStructureType sType + const void* pNext + + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkImageLayout imageLayout + VkResolveModeFlagBits resolveMode + VkImageView resolveImageView + VkImageLayout resolveImageLayout + VkAttachmentLoadOp loadOp + VkAttachmentStoreOp storeOp + VkClearValue clearValue + + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkImageLayout imageLayout + VkExtent2D shadingRateAttachmentTexelSize + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkImageLayout imageLayout + + + VkStructureType sType + void* pNext + VkBool32 dynamicRendering + + + + VkStructureType sType + const void* pNext + VkRenderingFlags flags + uint32_t viewMask + uint32_t colorAttachmentCount + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + VkSampleCountFlagBits rasterizationSamples + + + + VkStructureType sType + const void* pNext + uint32_t colorAttachmentCount + const VkSampleCountFlagBits* pColorAttachmentSamples + VkSampleCountFlagBits depthStencilAttachmentSamples + + + + VkStructureType sType + const void* pNext + VkBool32 perViewAttributes + VkBool32 perViewAttributesPositionXOnly + + + VkStructureType sType + void* pNext + VkBool32 minLod + + + VkStructureType sType + const void* pNext + float minLod + + + VkStructureType sType + void* pNext + VkBool32 rasterizationOrderColorAttachmentAccess + VkBool32 rasterizationOrderDepthAttachmentAccess + VkBool32 rasterizationOrderStencilAttachmentAccess + + + + VkStructureType sType + void* pNext + VkBool32 linearColorAttachment + + + VkStructureType sType + void* pNext + VkBool32 graphicsPipelineLibrary + + + VkStructureType sType + void* pNext + VkBool32 pipelineBinaries + + + VkStructureType sType + const void* pNext + VkBool32 disableInternalCache + + + VkStructureType sType + void* pNext + VkBool32 pipelineBinaryInternalCache + VkBool32 pipelineBinaryInternalCacheControl + VkBool32 pipelineBinaryPrefersInternalCache + VkBool32 pipelineBinaryPrecompiledInternalCache + VkBool32 pipelineBinaryCompressedData + + + VkStructureType sType + void* pNext + VkBool32 graphicsPipelineLibraryFastLinking + VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration + + + VkStructureType sType + const void* pNext + VkGraphicsPipelineLibraryFlagsEXT flags + + + VkStructureType sType + void* pNext + VkBool32 descriptorSetHostMapping + + + VkStructureType sType + const void* pNext + VkDescriptorSetLayout descriptorSetLayout + uint32_t binding + + + VkStructureType sType + void* pNext + size_t descriptorOffset + uint32_t descriptorSize + + + VkStructureType sType + void* pNext + VkBool32 nestedCommandBuffer + VkBool32 nestedCommandBufferRendering + VkBool32 nestedCommandBufferSimultaneousUse + + + VkStructureType sType + void* pNext + uint32_t maxCommandBufferNestingLevel + + + VkStructureType sType + void* pNext + VkBool32 shaderModuleIdentifier + + + VkStructureType sType + void* pNext + uint8_t shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE] + + + VkStructureType sType + const void* pNext + uint32_t identifierSize + const uint8_t* pIdentifier + + + VkStructureType sType + void* pNext + uint32_t identifierSize + uint8_t identifier[VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT] + + + VkStructureType sType + const void* pNext + VkImageCompressionFlagsEXT flags + uint32_t compressionControlPlaneCount + VkImageCompressionFixedRateFlagsEXT* pFixedRateFlags + + + VkStructureType sType + void* pNext + VkBool32 imageCompressionControl + + + VkStructureType sType + void* pNext + VkImageCompressionFlagsEXT imageCompressionFlags + VkImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags + + + VkStructureType sType + void* pNext + VkBool32 imageCompressionControlSwapchain + + + VkStructureType sType + void* pNext + VkImageSubresource imageSubresource + + + + + VkStructureType sType + void* pNext + VkSubresourceLayout subresourceLayout + + + + + VkStructureType sType + const void* pNext + VkBool32 disallowMerging + + + uint32_t postMergeSubpassCount + + + VkStructureType sType + const void* pNext + VkRenderPassCreationFeedbackInfoEXT* pRenderPassFeedback + + + VkSubpassMergeStatusEXT subpassMergeStatus + char description[VK_MAX_DESCRIPTION_SIZE] + uint32_t postMergeIndex + + + VkStructureType sType + const void* pNext + VkRenderPassSubpassFeedbackInfoEXT* pSubpassFeedback + + + VkStructureType sType + void* pNext + VkBool32 subpassMergeFeedback + + + VkStructureType sType + const void* pNext + VkMicromapTypeEXT type + VkBuildMicromapFlagsEXT flags + VkBuildMicromapModeEXT mode + VkMicromapEXT dstMicromap + uint32_t usageCountsCount + const VkMicromapUsageEXT* pUsageCounts + const VkMicromapUsageEXT* const* ppUsageCounts + VkDeviceOrHostAddressConstKHR data + VkDeviceOrHostAddressKHR scratchData + VkDeviceOrHostAddressConstKHR triangleArray + VkDeviceSize triangleArrayStride + + + VkStructureType sType + const void* pNext + VkMicromapCreateFlagsEXT createFlags + VkBuffer buffer + VkDeviceSize offsetSpecified in bytes + VkDeviceSize size + VkMicromapTypeEXT type + VkDeviceAddress deviceAddress + + + VkStructureType sType + const void* pNext + const uint8_t* pVersionData + + + VkStructureType sType + const void* pNext + VkMicromapEXT src + VkMicromapEXT dst + VkCopyMicromapModeEXT mode + + + VkStructureType sType + const void* pNext + VkMicromapEXT src + VkDeviceOrHostAddressKHR dst + VkCopyMicromapModeEXT mode + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR src + VkMicromapEXT dst + VkCopyMicromapModeEXT mode + + + VkStructureType sType + const void* pNext + VkDeviceSize micromapSize + VkDeviceSize buildScratchSize + VkBool32 discardable + + + uint32_t count + uint32_t subdivisionLevel + uint32_t formatInterpretation depends on parent type + + + uint32_t dataOffsetSpecified in bytes + uint16_t subdivisionLevel + uint16_t format + + + VkStructureType sType + void* pNext + VkBool32 micromap + VkBool32 micromapCaptureReplay + VkBool32 micromapHostCommands + + + VkStructureType sType + void* pNext + uint32_t maxOpacity2StateSubdivisionLevel + uint32_t maxOpacity4StateSubdivisionLevel + + + VkStructureType sType + void* pNext + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexBuffer + VkDeviceSize indexStride + uint32_t baseTriangle + uint32_t usageCountsCount + const VkMicromapUsageEXT* pUsageCounts + const VkMicromapUsageEXT* const* ppUsageCounts + VkMicromapEXT micromap + + + VkStructureType sType + void* pNext + VkBool32 displacementMicromap + + + VkStructureType sType + void* pNext + uint32_t maxDisplacementMicromapSubdivisionLevel + + + VkStructureType sType + void* pNext + + VkFormat displacementBiasAndScaleFormat + VkFormat displacementVectorFormat + + VkDeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer + VkDeviceSize displacementBiasAndScaleStride + VkDeviceOrHostAddressConstKHR displacementVectorBuffer + VkDeviceSize displacementVectorStride + VkDeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags + VkDeviceSize displacedMicromapPrimitiveFlagsStride + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexBuffer + VkDeviceSize indexStride + + uint32_t baseTriangle + + uint32_t usageCountsCount + const VkMicromapUsageEXT* pUsageCounts + const VkMicromapUsageEXT* const* ppUsageCounts + + VkMicromapEXT micromap + + + VkStructureType sType + void* pNext + uint8_t pipelineIdentifier[VK_UUID_SIZE] + + + VkStructureType sType + void* pNext + VkBool32 pipelinePropertiesIdentifier + + + VkStructureType sType + void* pNext + VkBool32 shaderEarlyAndLateFragmentTests + + + VkStructureType sType + const void* pNext + VkBool32 acquireUnmodifiedMemory + + + VkStructureType sType + const void* pNext + VkExportMetalObjectTypeFlagBitsEXT exportObjectType + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + MTLDevice_id mtlDevice + + + VkStructureType sType + const void* pNext + VkQueue queue + MTLCommandQueue_id mtlCommandQueue + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + MTLBuffer_id mtlBuffer + + + VkStructureType sType + const void* pNext + MTLBuffer_id mtlBuffer + + + VkStructureType sType + const void* pNext + VkImage image + VkImageView imageView + VkBufferView bufferView + VkImageAspectFlagBits plane + MTLTexture_id mtlTexture + + + VkStructureType sType + const void* pNext + VkImageAspectFlagBits plane + MTLTexture_id mtlTexture + + + VkStructureType sType + const void* pNext + VkImage image + IOSurfaceRef ioSurface + + + VkStructureType sType + const void* pNext + IOSurfaceRef ioSurface + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkEvent event + MTLSharedEvent_id mtlSharedEvent + + + VkStructureType sType + const void* pNext + MTLSharedEvent_id mtlSharedEvent + + + VkStructureType sType + void* pNext + VkBool32 nonSeamlessCubeMap + + + VkStructureType sType + void* pNext + VkBool32 pipelineRobustness + + + + VkStructureType sType + const void* pNext + VkPipelineRobustnessBufferBehavior storageBuffers + VkPipelineRobustnessBufferBehavior uniformBuffers + VkPipelineRobustnessBufferBehavior vertexInputs + VkPipelineRobustnessImageBehavior images + + + + VkStructureType sType + void* pNext + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs + VkPipelineRobustnessImageBehavior defaultRobustnessImages + + + + VkStructureType sType + const void* pNext + VkOffset2D filterCenter + VkExtent2D filterSize + uint32_t numPhases + + + VkStructureType sType + void* pNext + VkBool32 textureSampleWeighted + VkBool32 textureBoxFilter + VkBool32 textureBlockMatch + + + VkStructureType sType + void* pNext + uint32_t maxWeightFilterPhases + VkExtent2D maxWeightFilterDimension + VkExtent2D maxBlockMatchRegion + VkExtent2D maxBoxFilterBlockSize + + + VkStructureType sType + void* pNext + VkBool32 tileProperties + + + VkStructureType sType + void* pNext + VkExtent3D tileSize + VkExtent2D apronSize + VkOffset2D origin + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + VkStructureType sType + void* pNext + VkBool32 amigoProfiling + + + VkStructureType sType + const void* pNext + uint64_t firstDrawTimestamp + uint64_t swapBufferTimestamp + + + VkStructureType sType + void* pNext + VkBool32 attachmentFeedbackLoopLayout + + + + VkStructureType sType + const void* pNext + VkBool32 feedbackLoopEnable + + + VkStructureType sType + void* pNext + VkBool32 reportAddressBinding + + + VkStructureType sType + const void* pNext + VkRenderingAttachmentFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkResolveImageFlagsKHR flags + VkResolveModeFlagBits resolveMode + VkResolveModeFlagBits stencilResolveMode + + + VkStructureType sType + void* pNext + VkDeviceAddressBindingFlagsEXT flags + VkDeviceAddress baseAddress + VkDeviceSize size + VkDeviceAddressBindingTypeEXT bindingType + + + VkStructureType sType + void* pNext + VkBool32 opticalFlow + + + VkStructureType sType + void* pNext + VkOpticalFlowGridSizeFlagsNV supportedOutputGridSizes + VkOpticalFlowGridSizeFlagsNV supportedHintGridSizes + VkBool32 hintSupported + VkBool32 costSupported + VkBool32 bidirectionalFlowSupported + VkBool32 globalFlowSupported + uint32_t minWidth + uint32_t minHeight + uint32_t maxWidth + uint32_t maxHeight + uint32_t maxNumRegionsOfInterest + + + VkStructureType sType + const void* pNext + VkOpticalFlowUsageFlagsNV usage + + + VkStructureType sType + void* pNext + VkFormat format + + + VkStructureType sType + void* pNext + uint32_t width + uint32_t height + VkFormat imageFormat + VkFormat flowVectorFormat + VkFormat costFormat + VkOpticalFlowGridSizeFlagsNV outputGridSize + VkOpticalFlowGridSizeFlagsNV hintGridSize + VkOpticalFlowPerformanceLevelNV performanceLevel + VkOpticalFlowSessionCreateFlagsNV flags + + NV internal use only + VkStructureType sType + void* pNext + uint32_t id + uint32_t size + const void* pPrivateData + + + VkStructureType sType + void* pNext + VkOpticalFlowExecuteFlagsNV flags + uint32_t regionCount + const VkRect2D* pRegions + + + VkStructureType sType + void* pNext + VkBool32 deviceFault + VkBool32 deviceFaultVendorBinary + + + VkDeviceFaultAddressTypeEXT addressType + VkDeviceAddress reportedAddress + VkDeviceSize addressPrecision + + + char description[VK_MAX_DESCRIPTION_SIZE]Free-form description of the fault + uint64_t vendorFaultCode + uint64_t vendorFaultData + + + VkStructureType sType + void* pNext + uint32_t addressInfoCount + uint32_t vendorInfoCount + VkDeviceSize vendorBinarySizeSpecified in bytes + + + VkStructureType sType + void* pNext + char description[VK_MAX_DESCRIPTION_SIZE]Free-form description of the fault + VkDeviceFaultAddressInfoEXT* pAddressInfos + VkDeviceFaultVendorInfoEXT* pVendorInfos + void* pVendorBinaryData + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint32_t headerSize + VkDeviceFaultVendorBinaryHeaderVersionEXT headerVersion + uint32_t vendorID + uint32_t deviceID + uint32_t driverVersion + uint8_t pipelineCacheUUID[VK_UUID_SIZE] + uint32_t applicationNameOffset + uint32_t applicationVersion + uint32_t engineNameOffset + uint32_t engineVersion + uint32_t apiVersion + + + VkStructureType sType + void* pNext + VkBool32 pipelineLibraryGroupHandles + + + VkStructureType sType + const void* pNext + float depthBiasConstantFactor + float depthBiasClamp + float depthBiasSlopeFactor + + + VkStructureType sType + const void* pNext + VkDepthBiasRepresentationEXT depthBiasRepresentation + VkBool32 depthBiasExact + + + VkDeviceAddress srcAddress + VkDeviceAddress dstAddress + VkDeviceSize compressedSizeSpecified in bytes + VkDeviceSize decompressedSizeSpecified in bytes + VkMemoryDecompressionMethodFlagsNV decompressionMethod + + + VkDeviceAddress srcAddress + VkDeviceAddress dstAddress + VkDeviceSize compressedSizeSpecified in bytes + VkDeviceSize decompressedSizeSpecified in bytes + + + VkStructureType sType + const void* pNext + VkMemoryDecompressionMethodFlagsEXT decompressionMethod + uint32_t regionCount + const VkDecompressMemoryRegionEXT* pRegions + + + VkStructureType sType + void* pNext + uint64_t shaderCoreMask + uint32_t shaderCoreCount + uint32_t shaderWarpsPerCore + + + VkStructureType sType + void* pNext + VkBool32 shaderCoreBuiltins + + + VkStructureType sType + const void* pNext + VkFrameBoundaryFlagsEXT flags + uint64_t frameID + uint32_t imageCount + const VkImage* pImages + uint32_t bufferCount + const VkBuffer* pBuffers + uint64_t tagName + size_t tagSize + const void* pTag + + + VkStructureType sType + void* pNext + VkBool32 frameBoundary + + + VkStructureType sType + void* pNext + VkBool32 dynamicRenderingUnusedAttachments + + + VkStructureType sType + void* pNext + VkBool32 internallySynchronizedQueues + + + VkStructureType sType + void* pNext + VkPresentModeKHR presentMode + + + + VkStructureType sType + void* pNext + VkPresentScalingFlagsKHR supportedPresentScaling + VkPresentGravityFlagsKHR supportedPresentGravityX + VkPresentGravityFlagsKHR supportedPresentGravityY + VkExtent2D minScaledImageExtentSupported minimum image width and height for the surface when scaling is used + VkExtent2D maxScaledImageExtentSupported maximum image width and height for the surface when scaling is used + + + + VkStructureType sType + void* pNext + uint32_t presentModeCount + VkPresentModeKHR* pPresentModesOutput list of present modes compatible with the one specified in VkSurfacePresentModeKHR + + + + VkStructureType sType + void* pNext + VkBool32 swapchainMaintenance1 + + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkFence* pFencesFence to signal for each swapchain + + + + VkStructureType sType + const void* pNext + uint32_t presentModeCountLength of the pPresentModes array + const VkPresentModeKHR* pPresentModesPresentation modes which will be usable with this swapchain + + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentModeKHR* pPresentModesPresentation mode for each swapchain + + + + VkStructureType sType + const void* pNext + VkPresentScalingFlagsKHR scalingBehavior + VkPresentGravityFlagsKHR presentGravityX + VkPresentGravityFlagsKHR presentGravityY + + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchainSwapchain for which images are being released + uint32_t imageIndexCountNumber of indices to release + const uint32_t* pImageIndicesIndices of which presentable images to release + + + + VkStructureType sType + void* pNext + VkBool32 depthBiasControl + VkBool32 leastRepresentableValueForceUnormRepresentation + VkBool32 floatRepresentation + VkBool32 depthBiasExact + + + VkStructureType sType + void* pNext + VkBool32 rayTracingInvocationReorder + + + VkStructureType sType + void* pNext + VkBool32 rayTracingInvocationReorder + + + VkStructureType sType + void* pNext + VkRayTracingInvocationReorderModeEXT rayTracingInvocationReorderReorderingHint + uint32_t maxShaderBindingTableRecordIndex + + + VkStructureType sType + void* pNext + VkRayTracingInvocationReorderModeEXT rayTracingInvocationReorderReorderingHint + + + VkStructureType sType + void* pNext + VkBool32 extendedSparseAddressSpace + + + VkStructureType sType + void* pNext + VkDeviceSize extendedSparseAddressSpaceSizeTotal address space available for extended sparse allocations (bytes) + VkImageUsageFlags extendedSparseImageUsageFlagsBitfield of which image usages are supported for extended sparse allocations + VkBufferUsageFlags extendedSparseBufferUsageFlagsBitfield of which buffer usages are supported for extended sparse allocations + + + VkStructureType sType + void* pNext + VkDirectDriverLoadingFlagsLUNARG flags + PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr + + + VkStructureType sType + const void* pNext + VkDirectDriverLoadingModeLUNARG mode + uint32_t driverCount + const VkDirectDriverLoadingInfoLUNARG* pDrivers + + + VkStructureType sType + void* pNext + VkBool32 multiviewPerViewViewports + + + VkStructureType sType + void* pNext + VkBool32 rayTracingPositionFetch + + + VkStructureType sType + const void* pNext + const VkImageCreateInfo* pCreateInfo + const VkImageSubresource2* pSubresource + + + + VkStructureType sType + void* pNext + uint32_t pixelRate + uint32_t texelRate + uint32_t fmaRate + + + VkStructureType sType + void* pNext + VkBool32 multiviewPerViewRenderAreas + + + VkStructureType sType + const void* pNext + uint32_t perViewRenderAreaCount + const VkRect2D* pPerViewRenderAreas + + + VkStructureType sType + const void* pNext + void* pQueriedLowLatencyData + + + VkStructureType sType + const void* pNext + VkMemoryMapFlags flags + VkDeviceMemory memory + VkDeviceSize offset + VkDeviceSize size + + + + VkStructureType sType + const void* pNext + VkMemoryUnmapFlags flags + VkDeviceMemory memory + + + + VkStructureType sType + void* pNext + VkBool32 shaderObject + + + VkStructureType sType + void* pNext + uint8_t shaderBinaryUUID[VK_UUID_SIZE] + uint32_t shaderBinaryVersion + + + VkStructureType sType + const void* pNext + VkShaderCreateFlagsEXT flags + VkShaderStageFlagBits stage + VkShaderStageFlags nextStage + VkShaderCodeTypeEXT codeType + size_t codeSize + const void* pCode + const char* pName + uint32_t setLayoutCount + const VkDescriptorSetLayout* pSetLayouts + uint32_t pushConstantRangeCount + const VkPushConstantRange* pPushConstantRanges + const VkSpecializationInfo* pSpecializationInfo + + + VkStructureType sType + void* pNext + VkBool32 shaderTileImageColorReadAccess + VkBool32 shaderTileImageDepthReadAccess + VkBool32 shaderTileImageStencilReadAccess + + + VkStructureType sType + void* pNext + VkBool32 shaderTileImageCoherentReadAccelerated + VkBool32 shaderTileImageReadSampleFromPixelRateInvocation + VkBool32 shaderTileImageReadFromHelperInvocation + + + VkStructureType sType + const void* pNext + struct _screen_buffer* buffer + + + VkStructureType sType + void* pNext + VkDeviceSize allocationSize + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + uint64_t screenUsage + VkFormatFeatureFlags formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + void* pNext + uint64_t externalFormat + + + VkStructureType sType + void* pNext + VkBool32 screenBufferImport + + + VkStructureType sType + void* pNext + VkBool32 cooperativeMatrix + VkBool32 cooperativeMatrixRobustBufferAccess + + + VkStructureType sType + void* pNext + uint32_t MSize + uint32_t NSize + uint32_t KSize + VkComponentTypeKHR AType + VkComponentTypeKHR BType + VkComponentTypeKHR CType + VkComponentTypeKHR ResultType + VkBool32 saturatingAccumulation + VkScopeKHR scope + + + VkStructureType sType + void* pNext + VkShaderStageFlags cooperativeMatrixSupportedStages + + + VkStructureType sType + void* pNext + uint32_t maxExecutionGraphDepth + uint32_t maxExecutionGraphShaderOutputNodes + uint32_t maxExecutionGraphShaderPayloadSize + uint32_t maxExecutionGraphShaderPayloadCount + uint32_t executionGraphDispatchAddressAlignment + uint32_t maxExecutionGraphWorkgroupCount[3] + uint32_t maxExecutionGraphWorkgroups + + + VkStructureType sType + void* pNext + VkBool32 shaderEnqueue + VkBool32 shaderMeshEnqueue + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStages + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandle + int32_t basePipelineIndex + + + VkStructureType sType + const void* pNext + const char* pName + uint32_t index + + + VkStructureType sType + void* pNext + VkDeviceSize minSize + VkDeviceSize maxSize + VkDeviceSize sizeGranularity + + + uint32_t nodeIndex + uint32_t payloadCount + VkDeviceOrHostAddressConstAMDX payloads + uint64_t payloadStride + + + uint32_t count + VkDeviceOrHostAddressConstAMDX infos + uint64_t stride + + + VkStructureType sType + void* pNext + VkBool32 antiLag + + + VkStructureType sType + const void* pNext + VkAntiLagModeAMD mode + uint32_t maxFPS + const VkAntiLagPresentationInfoAMD* pPresentationInfo + + + VkStructureType sType + void* pNext + VkAntiLagStageAMD stage + uint64_t frameIndex + + + VkStructureType sType + const void* pNext + VkResult* pResult + + + VkStructureType sType + void* pNext + VkBool32 tileMemoryHeap + + + VkStructureType sType + void* pNext + VkBool32 queueSubmitBoundary + VkBool32 tileBufferTransfers + + + VkStructureType sType + const void* pNext + VkDeviceSize size + + + VkStructureType sType + void* pNext + VkDeviceSize size + VkDeviceSize alignment + + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t firstSet + uint32_t descriptorSetCount + const VkDescriptorSet* pDescriptorSets + uint32_t dynamicOffsetCount + const uint32_t* pDynamicOffsets + + + + VkStructureType sType + const void* pNext + VkPipelineLayout layout + VkShaderStageFlags stageFlags + uint32_t offset + uint32_t size + const void* pValues + + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t set + uint32_t descriptorWriteCount + const VkWriteDescriptorSet* pDescriptorWrites + + + + VkStructureType sType + const void* pNext + VkDescriptorUpdateTemplate descriptorUpdateTemplate + VkPipelineLayout layout + uint32_t set + const void* pData + + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t firstSet + uint32_t setCount + const uint32_t* pBufferIndices + const VkDeviceSize* pOffsets + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t set + + + VkStructureType sType + void* pNext + VkBool32 cubicRangeClamp + + + VkStructureType sType + void* pNext + VkBool32 ycbcrDegamma + + + VkStructureType sType + void* pNext + VkBool32 enableYDegamma + VkBool32 enableCbCrDegamma + + + VkStructureType sType + void* pNext + VkBool32 selectableCubicWeights + + + VkStructureType sType + const void* pNext + VkCubicFilterWeightsQCOM cubicWeights + + + VkStructureType sType + const void* pNext + VkCubicFilterWeightsQCOM cubicWeights + + + VkStructureType sType + void* pNext + VkBool32 textureBlockMatch2 + + + VkStructureType sType + void* pNext + VkExtent2D maxBlockMatchWindow + + + VkStructureType sType + const void* pNext + VkExtent2D windowExtent + VkBlockMatchWindowCompareModeQCOM windowCompareMode + + + VkStructureType sType + void* pNext + VkBool32 descriptorPoolOverallocation + + + VkStructureType sType + void* pNext + VkLayeredDriverUnderlyingApiMSFT underlyingAPI + + + VkStructureType sType + void* pNext + VkBool32 perStageDescriptorSet + VkBool32 dynamicPipelineLayout + + + VkStructureType sType + void* pNext + VkBool32 externalFormatResolve + + + VkStructureType sType + void* pNext + VkBool32 nullColorAttachmentWithExternalFormatResolve + VkChromaLocation externalFormatResolveChromaOffsetX + VkChromaLocation externalFormatResolveChromaOffsetY + + + VkStructureType sType + void* pNext + VkFormat colorAttachmentFormat + + + VkStructureType sType + const void* pNext + VkBool32 lowLatencyMode + VkBool32 lowLatencyBoost + uint32_t minimumIntervalUs + + + VkStructureType sType + const void* pNext + VkSemaphore signalSemaphore + uint64_t value + + + VkStructureType sType + const void* pNext + uint64_t presentID + VkLatencyMarkerNV marker + + + VkStructureType sType + const void* pNext + uint32_t timingCount + VkLatencyTimingsFrameReportNV* pTimings + + + VkStructureType sType + void* pNext + uint64_t presentID + uint64_t inputSampleTimeUs + uint64_t simStartTimeUs + uint64_t simEndTimeUs + uint64_t renderSubmitStartTimeUs + uint64_t renderSubmitEndTimeUs + uint64_t presentStartTimeUs + uint64_t presentEndTimeUs + uint64_t driverStartTimeUs + uint64_t driverEndTimeUs + uint64_t osRenderQueueStartTimeUs + uint64_t osRenderQueueEndTimeUs + uint64_t gpuRenderStartTimeUs + uint64_t gpuRenderEndTimeUs + + + VkStructureType sType + const void* pNext + VkOutOfBandQueueTypeNV queueType + + + VkStructureType sType + const void* pNext + uint64_t presentID + + + VkStructureType sType + const void* pNext + VkBool32 latencyModeEnable + + + VkStructureType sType + const void* pNext + uint32_t presentModeCount + VkPresentModeKHR* pPresentModes + + + VkStructureType sType + void* pNext + VkBool32 cudaKernelLaunchFeatures + + + VkStructureType sType + void* pNext + uint32_t computeCapabilityMinor + uint32_t computeCapabilityMajor + + + VkStructureType sType + void* pNext + uint32_t shaderCoreCount + + + VkStructureType sType + void* pNext + VkBool32 schedulingControls + + + VkStructureType sType + void* pNext + VkPhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags + + + VkStructureType sType + void* pNext + VkBool32 relaxedLineRasterization + + + VkStructureType sType + void* pNext + VkBool32 renderPassStriped + + + VkStructureType sType + void* pNext + VkExtent2D renderPassStripeGranularity + uint32_t maxRenderPassStripes + + + VkStructureType sType + const void* pNext + VkRect2D stripeArea + + + VkStructureType sType + const void* pNext + uint32_t stripeInfoCount + const VkRenderPassStripeInfoARM* pStripeInfos + + + VkStructureType sType + const void* pNext + uint32_t stripeSemaphoreInfoCount + const VkSemaphoreSubmitInfo* pStripeSemaphoreInfos + + + VkStructureType sType + void* pNext + VkBool32 pipelineOpacityMicromap + + + VkStructureType sType + void* pNext + VkBool32 shaderMaximalReconvergence + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupRotate + VkBool32 shaderSubgroupRotateClustered + + + + VkStructureType sType + void* pNext + VkBool32 shaderExpectAssume + + + + VkStructureType sType + void* pNext + VkBool32 shaderFloatControls2 + + + + VkStructureType sType + void* pNext + VkBool32 dynamicRenderingLocalRead + + + + VkStructureType sType + const void* pNext + uint32_t colorAttachmentCount + const uint32_t* pColorAttachmentLocations + + + + VkStructureType sType + const void* pNext + uint32_t colorAttachmentCount + const uint32_t* pColorAttachmentInputIndices + const uint32_t* pDepthInputAttachmentIndex + const uint32_t* pStencilInputAttachmentIndex + + + + VkStructureType sType + void* pNext + VkBool32 shaderQuadControl + + + VkStructureType sType + void* pNext + VkBool32 shaderFloat16VectorAtomics + + + VkStructureType sType + void* pNext + VkBool32 memoryMapPlaced + VkBool32 memoryMapRangePlaced + VkBool32 memoryUnmapReserve + + + VkStructureType sType + void* pNext + VkDeviceSize minPlacedMemoryMapAlignment + + + VkStructureType sType + const void* pNext + void* pPlacedAddress + + + VkStructureType sType + void* pNext + VkBool32 shaderBFloat16Type + VkBool32 shaderBFloat16DotProduct + VkBool32 shaderBFloat16CooperativeMatrix + + + VkStructureType sType + void* pNext + VkBool32 shaderRawAccessChains + + + VkStructureType sType + void* pNext + VkBool32 commandBufferInheritance + + + VkStructureType sType + void* pNext + VkBool32 imageAlignmentControl + + + VkStructureType sType + void* pNext + uint32_t supportedImageAlignmentMask + + + VkStructureType sType + const void* pNext + uint32_t maximumRequestedAlignment + + + VkStructureType sType + void* pNext + VkBool32 shaderReplicatedComposites + + + + VkStructureType sType + void* pNext + VkBool32 presentModeFifoLatestReady + + + float minDepthClamp + float maxDepthClamp + + + VkStructureType sType + void* pNext + VkBool32 cooperativeMatrixWorkgroupScope + VkBool32 cooperativeMatrixFlexibleDimensions + VkBool32 cooperativeMatrixReductions + VkBool32 cooperativeMatrixConversions + VkBool32 cooperativeMatrixPerElementOperations + VkBool32 cooperativeMatrixTensorAddressing + VkBool32 cooperativeMatrixBlockLoads + + + VkStructureType sType + void* pNext + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory + + + VkStructureType sType + void* pNext + uint32_t MGranularity + uint32_t NGranularity + uint32_t KGranularity + VkComponentTypeKHR AType + VkComponentTypeKHR BType + VkComponentTypeKHR CType + VkComponentTypeKHR ResultType + VkBool32 saturatingAccumulation + VkScopeKHR scope + uint32_t workgroupInvocations + + + VkStructureType sType + void* pNext + VkBool32 hdrVivid + + + VkStructureType sType + void* pNext + VkBool32 vertexAttributeRobustness + + + VkStructureType sType + void* pNext + VkBool32 denseGeometryFormat + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR compressedData + VkDeviceSize dataSize + uint32_t numTriangles + uint32_t numVertices + uint32_t maxPrimitiveIndex + uint32_t maxGeometryIndex + VkCompressedTriangleFormatAMDX format + + + VkStructureType sType + void* pNext + VkBool32 depthClampZeroOne + + + VkStructureType sType + void* pNext + VkBool32 cooperativeVector + VkBool32 cooperativeVectorTraining + + + VkStructureType sType + void* pNext + VkComponentTypeKHR inputType + VkComponentTypeKHR inputInterpretation + VkComponentTypeKHR matrixInterpretation + VkComponentTypeKHR biasInterpretation + VkComponentTypeKHR resultType + VkBool32 transpose + + + VkStructureType sType + void* pNext + VkShaderStageFlags cooperativeVectorSupportedStages + VkBool32 cooperativeVectorTrainingFloat16Accumulation + VkBool32 cooperativeVectorTrainingFloat32Accumulation + uint32_t maxCooperativeVectorComponents + + + VkStructureType sType + const void* pNext + size_t srcSize + VkDeviceOrHostAddressConstKHR srcData + size_t* pDstSize + VkDeviceOrHostAddressKHR dstData + VkComponentTypeKHR srcComponentType + VkComponentTypeKHR dstComponentType + uint32_t numRows + uint32_t numColumns + VkCooperativeVectorMatrixLayoutNV srcLayout + size_t srcStride + VkCooperativeVectorMatrixLayoutNV dstLayout + size_t dstStride + + + VkStructureType sType + void* pNext + VkBool32 tileShading + VkBool32 tileShadingFragmentStage + VkBool32 tileShadingColorAttachments + VkBool32 tileShadingDepthAttachments + VkBool32 tileShadingStencilAttachments + VkBool32 tileShadingInputAttachments + VkBool32 tileShadingSampledAttachments + VkBool32 tileShadingPerTileDraw + VkBool32 tileShadingPerTileDispatch + VkBool32 tileShadingDispatchTile + VkBool32 tileShadingApron + VkBool32 tileShadingAnisotropicApron + VkBool32 tileShadingAtomicOps + VkBool32 tileShadingImageProcessing + + + VkStructureType sType + void* pNext + uint32_t maxApronSize + VkBool32 preferNonCoherent + VkExtent2D tileGranularity + VkExtent2D maxTileShadingRate + + + VkStructureType sType + const void* pNext + VkTileShadingRenderPassFlagsQCOM flags + VkExtent2D tileApronSize + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + void* pNext + uint32_t maxFragmentDensityMapLayers + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMapLayered + + + VkStructureType sType + const void* pNext + uint32_t maxFragmentDensityMapLayers + + + VkStructureType sType + const void* pNext + uint32_t numFramesPerBatch + uint32_t presentConfigFeedback + + + VkStructureType sType + void* pNext + VkBool32 presentMetering + + + VkStructureType sType + const void* pNext + uint32_t reservedExternalQueues + + + VkStructureType sType + const void* pNext + VkQueue preferredQueue + + + VkStructureType sType + const void* pNext + uint32_t deviceIndex + + + VkStructureType sType + void* pNext + uint32_t externalDataSize + uint32_t maxExternalQueues + + VK_DEFINE_HANDLE(VkExternalComputeQueueNV) + + VkStructureType sType + void* pNext + VkBool32 shaderUniformBufferUnsizedArray + + + VkStructureType sType + void* pNext + VkBool32 formatPack + + + VkStructureType sType + const void* pNext + VkTensorTilingARM tiling + VkFormat format + uint32_t dimensionCount + const int64_t* pDimensions + const int64_t* pStrides + VkTensorUsageFlagsARM usage + + + VkStructureType sType + const void* pNext + VkTensorCreateFlagsARM flags + const VkTensorDescriptionARM* pDescription + VkSharingMode sharingMode + uint32_t queueFamilyIndexCount + const uint32_t* pQueueFamilyIndices + + + VkStructureType sType + const void* pNext + VkTensorViewCreateFlagsARM flags + VkTensorARM tensor + VkFormat format + + + VkStructureType sType + const void* pNext + VkTensorARM tensor + + + VkStructureType sType + const void* pNext + VkTensorARM tensor + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + VkStructureType sType + const void* pNext + uint32_t tensorViewCount + const VkTensorViewARM* pTensorViews + + + VkStructureType sType + void* pNext + VkFormatFeatureFlags2 optimalTilingTensorFeatures + VkFormatFeatureFlags2 linearTilingTensorFeatures + + + VkStructureType sType + void* pNext + uint32_t maxTensorDimensionCount + uint64_t maxTensorElements + uint64_t maxPerDimensionTensorElements + int64_t maxTensorStride + uint64_t maxTensorSize + uint32_t maxTensorShaderAccessArrayLength + uint32_t maxTensorShaderAccessSize + uint32_t maxDescriptorSetStorageTensors + uint32_t maxPerStageDescriptorSetStorageTensors + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors + VkBool32 shaderStorageTensorArrayNonUniformIndexingNative + VkShaderStageFlags shaderTensorSupportedStages + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + uint32_t srcQueueFamilyIndex + uint32_t dstQueueFamilyIndex + VkTensorARM tensor + + + VkStructureType sType + const void* pNext + uint32_t tensorMemoryBarrierCount + const VkTensorMemoryBarrierARM* pTensorMemoryBarriers + + + VkStructureType sType + void* pNext + VkBool32 tensorNonPacked + VkBool32 shaderTensorAccess + VkBool32 shaderStorageTensorArrayDynamicIndexing + VkBool32 shaderStorageTensorArrayNonUniformIndexing + VkBool32 descriptorBindingStorageTensorUpdateAfterBind + VkBool32 tensors + + + VkStructureType sType + const void* pNext + const VkTensorCreateInfoARM* pCreateInfo + + + VkStructureType sType + const void* pNext + VkTensorARM srcTensor + VkTensorARM dstTensor + uint32_t regionCount + const VkTensorCopyARM* pRegions + + + VkStructureType sType + const void* pNext + uint32_t dimensionCount + const uint64_t* pSrcOffset + const uint64_t* pDstOffset + const uint64_t* pExtent + + + VkStructureType sType + const void* pNext + VkTensorARM tensorTensor that this allocation will be bound to + + + VkStructureType sType + void* pNext + size_t tensorCaptureReplayDescriptorDataSize + size_t tensorViewCaptureReplayDescriptorDataSize + size_t tensorDescriptorSize + + + VkStructureType sType + void* pNext + VkBool32 descriptorBufferTensorDescriptors + + + VkStructureType sType + const void* pNext + VkTensorARM tensor + + + VkStructureType sType + const void* pNext + VkTensorViewARM tensorView + + + VkStructureType sType + const void* pNext + VkTensorViewARM tensorView + + + VkStructureType sType + const void* pNext + uint32_t tensorCount + const VkTensorARM* pTensors + + + VkStructureType sType + const void* pNext + VkTensorCreateFlagsARM flags + const VkTensorDescriptionARM* pDescription + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalMemoryProperties externalMemoryProperties + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + VkStructureType sType + void* pNext + VkBool32 shaderFloat8 + VkBool32 shaderFloat8CooperativeMatrix + + + VkStructureType sType + const void* pNext + VkSurfaceCreateFlagsOHOS flags + OHNativeWindow* window + + + VkStructureType sType + void* pNext + VkBool32 dataGraph + VkBool32 dataGraphUpdateAfterBind + VkBool32 dataGraphSpecializationConstants + VkBool32 dataGraphDescriptorBuffer + VkBool32 dataGraphShaderModule + + + VkStructureType sType + const void* pNext + uint32_t dimension + uint32_t zeroCount + uint32_t groupSize + + + VkStructureType sType + const void* pNext + uint32_t id + const void* pConstantData + + + VkStructureType sType + const void* pNext + uint32_t descriptorSet + uint32_t binding + uint32_t arrayElement + + + VkStructureType sType + const void* pNext + const char* pVendorOptions + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags2KHR flags + VkPipelineLayout layout + uint32_t resourceInfoCount + const VkDataGraphPipelineResourceInfoARM* pResourceInfos + + + VkStructureType sType + const void* pNext + VkShaderModule module + const char* pName + const VkSpecializationInfo* pSpecializationInfo + uint32_t constantCount + const VkDataGraphPipelineConstantARM* pConstants + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionCreateFlagsARM flags + VkPipeline dataGraphPipeline + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionARM session + + + VkStructureType sType + void* pNext + VkDataGraphPipelineSessionBindPointARM bindPoint + VkDataGraphPipelineSessionBindPointTypeARM bindPointType + uint32_t numObjects + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionARM session + VkDataGraphPipelineSessionBindPointARM bindPoint + uint32_t objectIndex + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionARM session + VkDataGraphPipelineSessionBindPointARM bindPoint + uint32_t objectIndex + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + VkStructureType sType + const void* pNext + VkPipeline dataGraphPipeline + + + VkStructureType sType + void* pNext + VkDataGraphPipelinePropertyARM property + VkBool32 isText + size_t dataSize + void* pData + + + VkStructureType sType + const void* pNext + uint32_t identifierSize + const uint8_t* pIdentifier + + + VkStructureType sType + void* pNext + VkDataGraphPipelineDispatchFlagsARM flags + + + VkPhysicalDeviceDataGraphProcessingEngineTypeARM type + VkBool32 isForeign + + + VkPhysicalDeviceDataGraphOperationTypeARM operationType + char name[VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM] + uint32_t version + + + VkStructureType sType + void* pNext + VkPhysicalDeviceDataGraphProcessingEngineARM engine + VkPhysicalDeviceDataGraphOperationSupportARM operation + + + VkStructureType sType + const void* pNext + uint32_t queueFamilyIndex + VkPhysicalDeviceDataGraphProcessingEngineTypeARM engineType + + + VkStructureType sType + void* pNext + VkExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes + VkExternalMemoryHandleTypeFlags foreignMemoryHandleTypes + + + VkStructureType sType + const void* pNext + uint32_t processingEngineCount + VkPhysicalDeviceDataGraphProcessingEngineARM* pProcessingEngines + + + VkStructureType sType + void* pNext + VkBool32 pipelineCacheIncrementalMode + + + VkStructureType sType + const void* pNext + const VkPhysicalDeviceDataGraphOperationSupportARM* pOperation + + + VkStructureType sType + void* pNext + VkBool32 dataGraphModel + + + VkStructureType sType + void* pNext + VkBool32 shaderUntypedPointers + + + VkStructureType sType + const void* pNext + struct OHBufferHandle* handle + + + VkStructureType sType + const void* pNext + VkSwapchainImageUsageFlagsOHOS usage + + + VkStructureType sType + void* pNext + VkBool32 sharedImage + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeRgbConversion + + + VkStructureType sType + void* pNext + VkVideoEncodeRgbModelConversionFlagsVALVE rgbModels + VkVideoEncodeRgbRangeCompressionFlagsVALVE rgbRanges + VkVideoEncodeRgbChromaOffsetFlagsVALVE xChromaOffsets + VkVideoEncodeRgbChromaOffsetFlagsVALVE yChromaOffsets + + + VkStructureType sType + const void* pNext + VkBool32 performEncodeRgbConversion + + + VkStructureType sType + const void* pNext + VkVideoEncodeRgbModelConversionFlagBitsVALVE rgbModel + VkVideoEncodeRgbRangeCompressionFlagBitsVALVE rgbRange + VkVideoEncodeRgbChromaOffsetFlagBitsVALVE xChromaOffset + VkVideoEncodeRgbChromaOffsetFlagBitsVALVE yChromaOffset + + + VkStructureType sType + void* pNext + VkBool32 shader64BitIndexing + + + VkStructureType sType + void* pNext + uint64_t OHOSNativeBufferUsage + + + VkStructureType sType + void* pNext + VkDeviceSize allocationSize + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + VkFormatFeatureFlags formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + struct OH_NativeBuffer* buffer + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + VkStructureType sType + void* pNext + uint64_t externalFormat + + + VkStructureType sType + void* pNext + VkBool32 performanceCountersByRegion + + + VkStructureType sType + void* pNext + uint32_t maxPerRegionPerformanceCounters + VkExtent2D performanceCounterRegionSize + uint32_t rowStrideAlignment + uint32_t regionAlignment + VkBool32 identityTransformOrder + + + VkStructureType sType + void* pNext + uint32_t counterID + + + VkStructureType sType + void* pNext + VkPerformanceCounterDescriptionFlagsARM flags + char name[VK_MAX_DESCRIPTION_SIZE] + + + VkStructureType sType + void* pNextPointer to next structure + uint32_t counterAddressCount + const VkDeviceAddress* pCounterAddresses + VkBool32 serializeRegions + uint32_t counterIndexCount + uint32_t* pCounterIndices + + + VkStructureType sType + const void* pNext + float occupancyPriority + float occupancyThrottling + + + VkStructureType sType + void* pNext + VkBool32 computeOccupancyPriority + + + VkStructureType sType + void* pNext + VkBool32 longVector + + + VkStructureType sType + void* pNext + uint32_t maxVectorComponents + + + VkStructureType sType + void* pNext + VkBool32 textureCompressionASTC_3D + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupPartitioned + + + void* address + size_t size + + + const void* address + size_t size + + + VkDeviceAddress address + VkDeviceSize size + + + VkStructureType sType + const void* pNext + VkFormat format + VkDeviceAddressRangeEXT addressRange + + + VkStructureType sType + const void* pNext + const VkImageViewCreateInfo* pView + VkImageLayout layout + + + const VkImageDescriptorInfoEXT* pImage + const VkTexelBufferDescriptorInfoEXT* pTexelBuffer + const VkDeviceAddressRangeEXT* pAddressRange + const VkTensorViewCreateInfoARM* pTensorARM + + + VkStructureType sType + const void* pNext + VkDescriptorType type + VkResourceDescriptorDataEXT data + + + VkStructureType sType + const void* pNext + VkDeviceAddressRangeEXT heapRange + VkDeviceSize reservedRangeOffset + VkDeviceSize reservedRangeSize + + + VkStructureType sType + const void* pNext + uint32_t offset + VkHostAddressRangeConstEXT data + + + uint32_t heapOffset + uint32_t heapArrayStride + const VkSamplerCreateInfo* pEmbeddedSampler + uint32_t samplerHeapOffset + uint32_t samplerHeapArrayStride + + + uint32_t heapOffset + uint32_t pushOffset + uint32_t heapIndexStride + uint32_t heapArrayStride + const VkSamplerCreateInfo* pEmbeddedSampler + VkBool32 useCombinedImageSamplerIndex + uint32_t samplerHeapOffset + uint32_t samplerPushOffset + uint32_t samplerHeapIndexStride + uint32_t samplerHeapArrayStride + + + uint32_t heapOffset + uint32_t pushOffset + uint32_t addressOffset + uint32_t heapIndexStride + uint32_t heapArrayStride + const VkSamplerCreateInfo* pEmbeddedSampler + VkBool32 useCombinedImageSamplerIndex + uint32_t samplerHeapOffset + uint32_t samplerPushOffset + uint32_t samplerAddressOffset + uint32_t samplerHeapIndexStride + uint32_t samplerHeapArrayStride + + + uint32_t heapOffset + uint32_t pushOffset + uint32_t addressOffset + uint32_t heapIndexStride + const VkSamplerCreateInfo* pEmbeddedSampler + VkBool32 useCombinedImageSamplerIndex + uint32_t samplerHeapOffset + uint32_t samplerPushOffset + uint32_t samplerAddressOffset + uint32_t samplerHeapIndexStride + + + uint32_t heapOffset + uint32_t pushOffset + + + uint32_t heapOffset + uint32_t shaderRecordOffset + uint32_t heapIndexStride + uint32_t heapArrayStride + const VkSamplerCreateInfo* pEmbeddedSampler + VkBool32 useCombinedImageSamplerIndex + uint32_t samplerHeapOffset + uint32_t samplerShaderRecordOffset + uint32_t samplerHeapIndexStride + uint32_t samplerHeapArrayStride + + + uint32_t pushOffset + uint32_t addressOffset + + + VkDescriptorMappingSourceConstantOffsetEXT constantOffset + VkDescriptorMappingSourcePushIndexEXT pushIndex + VkDescriptorMappingSourceIndirectIndexEXT indirectIndex + VkDescriptorMappingSourceIndirectIndexArrayEXT indirectIndexArray + VkDescriptorMappingSourceHeapDataEXT heapData + uint32_t pushDataOffset + uint32_t pushAddressOffset + VkDescriptorMappingSourceIndirectAddressEXT indirectAddress + VkDescriptorMappingSourceShaderRecordIndexEXT shaderRecordIndex + uint32_t shaderRecordDataOffset + uint32_t shaderRecordAddressOffset + + + VkStructureType sType + const void* pNext + uint32_t descriptorSet + uint32_t firstBinding + uint32_t bindingCount + VkSpirvResourceTypeFlagsEXT resourceMask + VkDescriptorMappingSourceEXT source + VkDescriptorMappingSourceDataEXT sourceData + + + VkStructureType sType + const void* pNext + uint32_t mappingCount + const VkDescriptorSetAndBindingMappingEXT* pMappings + + + VkStructureType sType + const void* pNext + uint32_t index + + + VkStructureType sType + const void* pNext + const VkHostAddressRangeConstEXT* pData + + + VkStructureType sType + const void* pNext + uint32_t pushDataOffset + uint32_t pushDataSize + + + VkStructureType sType + const void* pNext + uint32_t subsampledImageDescriptorCount + + + VkStructureType sType + void* pNext + VkBool32 descriptorHeap + VkBool32 descriptorHeapCaptureReplay + + + VkStructureType sType + void* pNext + VkDeviceSize samplerHeapAlignment + VkDeviceSize resourceHeapAlignment + VkDeviceSize maxSamplerHeapSize + VkDeviceSize maxResourceHeapSize + VkDeviceSize minSamplerHeapReservedRange + VkDeviceSize minSamplerHeapReservedRangeWithEmbedded + VkDeviceSize minResourceHeapReservedRange + VkDeviceSize samplerDescriptorSize + VkDeviceSize imageDescriptorSize + VkDeviceSize bufferDescriptorSize + VkDeviceSize samplerDescriptorAlignment + VkDeviceSize imageDescriptorAlignment + VkDeviceSize bufferDescriptorAlignment + VkDeviceSize maxPushDataSize + size_t imageCaptureReplayOpaqueDataSize + uint32_t maxDescriptorHeapEmbeddedSamplers + uint32_t samplerYcbcrConversionCount + VkBool32 sparseDescriptorHeaps + VkBool32 protectedDescriptorHeaps + + + VkStructureType sType + const void* pNext + const VkBindHeapInfoEXT* pSamplerHeapBindInfo + const VkBindHeapInfoEXT* pResourceHeapBindInfo + + + VkStructureType sType + void* pNext + VkDeviceSize tensorDescriptorSize + VkDeviceSize tensorDescriptorAlignment + size_t tensorCaptureReplayOpaqueDataSize + + + + + Vulkan enumerant (token) definitions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unlike OpenGL, most tokens in Vulkan are actual typed enumerants in + their own numeric namespaces. The "name" attribute is the C enum + type name, and is pulled in from a type tag definition above + (slightly clunky, but retains the type / enum distinction). "type" + attributes of "enum" or "bitmask" indicate that these values should + be generated inside an appropriate definition. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + value="4" reserved for VK_KHR_sampler_mirror_clamp_to_edge + enum VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; do not + alias! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Return codes (positive values) + + + + + + + Error codes (negative values) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Flags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSI Extensions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NVX_device_generated_commands formerly used these enum values, but that extension has been removed + value 31 / name VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT + value 32 / name VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vendor IDs are now represented as enums instead of the old + <vendorids> tag, allowing them to be included in the + API headers. + + + + + + + + + + + + Driver IDs are now represented as enums instead of the old + <driverids> tag, allowing them to be included in the + API headers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bitpos 17-31 are specified by extensions to the original VkAccessFlagBits enum + + + + + + + + + + + + + + + + + + + + + + + + + bitpos 17-31 are specified by extensions to the original VkPipelineStageFlagBits enum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bitpos 13 is an extension interaction with VK_EXT_filter_cubic" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VkResult vkCreateInstance + const VkInstanceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkInstance* pInstance + + + void vkDestroyInstance + VkInstance instance + const VkAllocationCallbacks* pAllocator + + all sname:VkPhysicalDevice objects enumerated from pname:instance + + + + VkResult vkEnumeratePhysicalDevices + VkInstance instance + uint32_t* pPhysicalDeviceCount + VkPhysicalDevice* pPhysicalDevices + + + PFN_vkVoidFunction vkGetDeviceProcAddr + VkDevice device + const char* pName + + + PFN_vkVoidFunction vkGetInstanceProcAddr + VkInstance instance + const char* pName + + + void vkGetPhysicalDeviceProperties + VkPhysicalDevice physicalDevice + VkPhysicalDeviceProperties* pProperties + + + void vkGetPhysicalDeviceQueueFamilyProperties + VkPhysicalDevice physicalDevice + uint32_t* pQueueFamilyPropertyCount + VkQueueFamilyProperties* pQueueFamilyProperties + + + void vkGetPhysicalDeviceMemoryProperties + VkPhysicalDevice physicalDevice + VkPhysicalDeviceMemoryProperties* pMemoryProperties + + + void vkGetPhysicalDeviceFeatures + VkPhysicalDevice physicalDevice + VkPhysicalDeviceFeatures* pFeatures + + + void vkGetPhysicalDeviceFormatProperties + VkPhysicalDevice physicalDevice + VkFormat format + VkFormatProperties* pFormatProperties + + + VkResult vkGetPhysicalDeviceImageFormatProperties + VkPhysicalDevice physicalDevice + VkFormat format + VkImageType type + VkImageTiling tiling + VkImageUsageFlags usage + VkImageCreateFlags flags + VkImageFormatProperties* pImageFormatProperties + + + VkResult vkCreateDevice + VkPhysicalDevice physicalDevice + const VkDeviceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDevice* pDevice + + + VkResult vkCreateDevice + VkPhysicalDevice physicalDevice + const VkDeviceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDevice* pDevice + + + void vkDestroyDevice + VkDevice device + const VkAllocationCallbacks* pAllocator + + all sname:VkQueue objects created from pname:device +ifdef::VK_KHR_internally_synchronized_queues[] + that are not created with + ename:VK_DEVICE_QUEUE_CREATE_INTERNALLY_SYNCHRONIZED_BIT_KHR +endif::VK_KHR_internally_synchronized_queues[] + + + + + VkResult vkEnumerateInstanceVersion + uint32_t* pApiVersion + + + VkResult vkEnumerateInstanceLayerProperties + uint32_t* pPropertyCount + VkLayerProperties* pProperties + + + VkResult vkEnumerateInstanceExtensionProperties + const char* pLayerName + uint32_t* pPropertyCount + VkExtensionProperties* pProperties + + + VkResult vkEnumerateDeviceLayerProperties + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkLayerProperties* pProperties + + + VkResult vkEnumerateDeviceLayerProperties + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkLayerProperties* pProperties + + + VkResult vkEnumerateDeviceExtensionProperties + VkPhysicalDevice physicalDevice + const char* pLayerName + uint32_t* pPropertyCount + VkExtensionProperties* pProperties + + + void vkGetDeviceQueue + VkDevice device + uint32_t queueFamilyIndex + uint32_t queueIndex + VkQueue* pQueue + + + VkResult vkQueueSubmit + VkQueue queue + uint32_t submitCount + const VkSubmitInfo* pSubmits + VkFence fence + + + VkResult vkQueueWaitIdle + VkQueue queue + + + VkResult vkDeviceWaitIdle + VkDevice device + + all sname:VkQueue objects created from pname:device +ifdef::VK_KHR_internally_synchronized_queues[] + that are not created with + ename:VK_DEVICE_QUEUE_CREATE_INTERNALLY_SYNCHRONIZED_BIT_KHR +endif::VK_KHR_internally_synchronized_queues[] + + + + + VkResult vkAllocateMemory + VkDevice device + const VkMemoryAllocateInfo* pAllocateInfo + const VkAllocationCallbacks* pAllocator + VkDeviceMemory* pMemory + + + void vkFreeMemory + VkDevice device + VkDeviceMemory memory + const VkAllocationCallbacks* pAllocator + + + VkResult vkMapMemory + VkDevice device + VkDeviceMemory memory + VkDeviceSize offset + VkDeviceSize size + VkMemoryMapFlags flags + void** ppData + + + void vkUnmapMemory + VkDevice device + VkDeviceMemory memory + + + VkResult vkFlushMappedMemoryRanges + VkDevice device + uint32_t memoryRangeCount + const VkMappedMemoryRange* pMemoryRanges + + + VkResult vkInvalidateMappedMemoryRanges + VkDevice device + uint32_t memoryRangeCount + const VkMappedMemoryRange* pMemoryRanges + + + void vkGetDeviceMemoryCommitment + VkDevice device + VkDeviceMemory memory + VkDeviceSize* pCommittedMemoryInBytes + + + void vkGetBufferMemoryRequirements + VkDevice device + VkBuffer buffer + VkMemoryRequirements* pMemoryRequirements + + + VkResult vkBindBufferMemory + VkDevice device + VkBuffer buffer + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + void vkGetImageMemoryRequirements + VkDevice device + VkImage image + VkMemoryRequirements* pMemoryRequirements + + + VkResult vkBindImageMemory + VkDevice device + VkImage image + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + void vkGetImageSparseMemoryRequirements + VkDevice device + VkImage image + uint32_t* pSparseMemoryRequirementCount + VkSparseImageMemoryRequirements* pSparseMemoryRequirements + + + void vkGetPhysicalDeviceSparseImageFormatProperties + VkPhysicalDevice physicalDevice + VkFormat format + VkImageType type + VkSampleCountFlagBits samples + VkImageUsageFlags usage + VkImageTiling tiling + uint32_t* pPropertyCount + VkSparseImageFormatProperties* pProperties + + + VkResult vkQueueBindSparse + VkQueue queue + uint32_t bindInfoCount + const VkBindSparseInfo* pBindInfo + VkFence fence + + + VkResult vkCreateFence + VkDevice device + const VkFenceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkFence* pFence + + + void vkDestroyFence + VkDevice device + VkFence fence + const VkAllocationCallbacks* pAllocator + + + VkResult vkResetFences + VkDevice device + uint32_t fenceCount + const VkFence* pFences + + + VkResult vkGetFenceStatus + VkDevice device + VkFence fence + + + VkResult vkWaitForFences + VkDevice device + uint32_t fenceCount + const VkFence* pFences + VkBool32 waitAll + uint64_t timeout + + + VkResult vkCreateSemaphore + VkDevice device + const VkSemaphoreCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSemaphore* pSemaphore + + + void vkDestroySemaphore + VkDevice device + VkSemaphore semaphore + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateEvent + VkDevice device + const VkEventCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkEvent* pEvent + + + void vkDestroyEvent + VkDevice device + VkEvent event + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetEventStatus + VkDevice device + VkEvent event + + + VkResult vkSetEvent + VkDevice device + VkEvent event + + + VkResult vkResetEvent + VkDevice device + VkEvent event + + + VkResult vkCreateQueryPool + VkDevice device + const VkQueryPoolCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkQueryPool* pQueryPool + + + void vkDestroyQueryPool + VkDevice device + VkQueryPool queryPool + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetQueryPoolResults + VkDevice device + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + size_t dataSize + void* pData + VkDeviceSize stride + VkQueryResultFlags flags + + + void vkResetQueryPool + VkDevice device + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + + + + VkResult vkCreateBuffer + VkDevice device + const VkBufferCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkBuffer* pBuffer + + + void vkDestroyBuffer + VkDevice device + VkBuffer buffer + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateBufferView + VkDevice device + const VkBufferViewCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkBufferView* pView + + + void vkDestroyBufferView + VkDevice device + VkBufferView bufferView + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateImage + VkDevice device + const VkImageCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkImage* pImage + + + void vkDestroyImage + VkDevice device + VkImage image + const VkAllocationCallbacks* pAllocator + + + void vkGetImageSubresourceLayout + VkDevice device + VkImage image + const VkImageSubresource* pSubresource + VkSubresourceLayout* pLayout + + + VkResult vkCreateImageView + VkDevice device + const VkImageViewCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkImageView* pView + + + void vkDestroyImageView + VkDevice device + VkImageView imageView + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateShaderModule + VkDevice device + const VkShaderModuleCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkShaderModule* pShaderModule + + + void vkDestroyShaderModule + VkDevice device + VkShaderModule shaderModule + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreatePipelineCache + VkDevice device + const VkPipelineCacheCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineCache* pPipelineCache + + + VkResult vkCreatePipelineCache + VkDevice device + const VkPipelineCacheCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineCache* pPipelineCache + + + void vkDestroyPipelineCache + VkDevice device + VkPipelineCache pipelineCache + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetPipelineCacheData + VkDevice device + VkPipelineCache pipelineCache + size_t* pDataSize + void* pData + + + VkResult vkMergePipelineCaches + VkDevice device + VkPipelineCache dstCache + uint32_t srcCacheCount + const VkPipelineCache* pSrcCaches + + + VkResult vkCreatePipelineBinariesKHR + VkDevice device + const VkPipelineBinaryCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineBinaryHandlesInfoKHR* pBinaries + + + void vkDestroyPipelineBinaryKHR + VkDevice device + VkPipelineBinaryKHR pipelineBinary + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetPipelineKeyKHR + VkDevice device + const VkPipelineCreateInfoKHR* pPipelineCreateInfo + VkPipelineBinaryKeyKHR* pPipelineKey + + + VkResult vkGetPipelineBinaryDataKHR + VkDevice device + const VkPipelineBinaryDataInfoKHR* pInfo + VkPipelineBinaryKeyKHR* pPipelineBinaryKey + size_t* pPipelineBinaryDataSize + void* pPipelineBinaryData + + + VkResult vkReleaseCapturedPipelineDataKHR + VkDevice device + const VkReleaseCapturedPipelineDataInfoKHR* pInfo + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateGraphicsPipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkGraphicsPipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateGraphicsPipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkGraphicsPipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateComputePipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkComputePipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateComputePipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkComputePipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI + VkDevice device + VkRenderPass renderpass + VkExtent2D* pMaxWorkgroupSize + + + void vkDestroyPipeline + VkDevice device + VkPipeline pipeline + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreatePipelineLayout + VkDevice device + const VkPipelineLayoutCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineLayout* pPipelineLayout + + + void vkDestroyPipelineLayout + VkDevice device + VkPipelineLayout pipelineLayout + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateSampler + VkDevice device + const VkSamplerCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSampler* pSampler + + + void vkDestroySampler + VkDevice device + VkSampler sampler + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateDescriptorSetLayout + VkDevice device + const VkDescriptorSetLayoutCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDescriptorSetLayout* pSetLayout + + + void vkDestroyDescriptorSetLayout + VkDevice device + VkDescriptorSetLayout descriptorSetLayout + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateDescriptorPool + VkDevice device + const VkDescriptorPoolCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDescriptorPool* pDescriptorPool + + + void vkDestroyDescriptorPool + VkDevice device + VkDescriptorPool descriptorPool + const VkAllocationCallbacks* pAllocator + + + VkResult vkResetDescriptorPool + VkDevice device + VkDescriptorPool descriptorPool + VkDescriptorPoolResetFlags flags + + any sname:VkDescriptorSet objects allocated from pname:descriptorPool + + + + VkResult vkAllocateDescriptorSets + VkDevice device + const VkDescriptorSetAllocateInfo* pAllocateInfo + VkDescriptorSet* pDescriptorSets + + + VkResult vkFreeDescriptorSets + VkDevice device + VkDescriptorPool descriptorPool + uint32_t descriptorSetCount + const VkDescriptorSet* pDescriptorSets + + + void vkUpdateDescriptorSets + VkDevice device + uint32_t descriptorWriteCount + const VkWriteDescriptorSet* pDescriptorWrites + uint32_t descriptorCopyCount + const VkCopyDescriptorSet* pDescriptorCopies + + + VkResult vkCreateFramebuffer + VkDevice device + const VkFramebufferCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkFramebuffer* pFramebuffer + + + void vkDestroyFramebuffer + VkDevice device + VkFramebuffer framebuffer + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateRenderPass + VkDevice device + const VkRenderPassCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkRenderPass* pRenderPass + + + void vkDestroyRenderPass + VkDevice device + VkRenderPass renderPass + const VkAllocationCallbacks* pAllocator + + + void vkGetRenderAreaGranularity + VkDevice device + VkRenderPass renderPass + VkExtent2D* pGranularity + + + void vkGetRenderingAreaGranularity + VkDevice device + const VkRenderingAreaInfo* pRenderingAreaInfo + VkExtent2D* pGranularity + + + + VkResult vkCreateCommandPool + VkDevice device + const VkCommandPoolCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCommandPool* pCommandPool + + + void vkDestroyCommandPool + VkDevice device + VkCommandPool commandPool + const VkAllocationCallbacks* pAllocator + + + VkResult vkResetCommandPool + VkDevice device + VkCommandPool commandPool + VkCommandPoolResetFlags flags + + + VkResult vkAllocateCommandBuffers + VkDevice device + const VkCommandBufferAllocateInfo* pAllocateInfo + VkCommandBuffer* pCommandBuffers + + + void vkFreeCommandBuffers + VkDevice device + VkCommandPool commandPool + uint32_t commandBufferCount + const VkCommandBuffer* pCommandBuffers + + + VkResult vkBeginCommandBuffer + VkCommandBuffer commandBuffer + const VkCommandBufferBeginInfo* pBeginInfo + + the sname:VkCommandPool that pname:commandBuffer was allocated from + + + + VkResult vkEndCommandBuffer + VkCommandBuffer commandBuffer + + the sname:VkCommandPool that pname:commandBuffer was allocated from + + + + VkResult vkResetCommandBuffer + VkCommandBuffer commandBuffer + VkCommandBufferResetFlags flags + + the sname:VkCommandPool that pname:commandBuffer was allocated from + + + + void vkCmdBindPipeline + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + + + void vkCmdSetAttachmentFeedbackLoopEnableEXT + VkCommandBuffer commandBuffer + VkImageAspectFlags aspectMask + + + void vkCmdSetViewport + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkViewport* pViewports + + + void vkCmdSetScissor + VkCommandBuffer commandBuffer + uint32_t firstScissor + uint32_t scissorCount + const VkRect2D* pScissors + + + void vkCmdSetLineWidth + VkCommandBuffer commandBuffer + float lineWidth + + + void vkCmdSetDepthBias + VkCommandBuffer commandBuffer + float depthBiasConstantFactor + float depthBiasClamp + float depthBiasSlopeFactor + + + void vkCmdSetBlendConstants + VkCommandBuffer commandBuffer + const float blendConstants[4] + + + void vkCmdSetDepthBounds + VkCommandBuffer commandBuffer + float minDepthBounds + float maxDepthBounds + + + void vkCmdSetStencilCompareMask + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + uint32_t compareMask + + + void vkCmdSetStencilWriteMask + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + uint32_t writeMask + + + void vkCmdSetStencilReference + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + uint32_t reference + + + void vkCmdBindDescriptorSets + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t firstSet + uint32_t descriptorSetCount + const VkDescriptorSet* pDescriptorSets + uint32_t dynamicOffsetCount + const uint32_t* pDynamicOffsets + + + void vkCmdBindIndexBuffer + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkIndexType indexType + + + void vkCmdBindVertexBuffers + VkCommandBuffer commandBuffer + uint32_t firstBinding + uint32_t bindingCount + const VkBuffer* pBuffers + const VkDeviceSize* pOffsets + + + void vkCmdDraw + VkCommandBuffer commandBuffer + uint32_t vertexCount + uint32_t instanceCount + uint32_t firstVertex + uint32_t firstInstance + + + void vkCmdDrawIndexed + VkCommandBuffer commandBuffer + uint32_t indexCount + uint32_t instanceCount + uint32_t firstIndex + int32_t vertexOffset + uint32_t firstInstance + + + void vkCmdDrawMultiEXT + VkCommandBuffer commandBuffer + uint32_t drawCount + const VkMultiDrawInfoEXT* pVertexInfo + uint32_t instanceCount + uint32_t firstInstance + uint32_t stride + + + void vkCmdDrawMultiIndexedEXT + VkCommandBuffer commandBuffer + uint32_t drawCount + const VkMultiDrawIndexedInfoEXT* pIndexInfo + uint32_t instanceCount + uint32_t firstInstance + uint32_t stride + const int32_t* pVertexOffset + + + void vkCmdDrawIndirect + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDrawIndexedIndirect + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDispatch + VkCommandBuffer commandBuffer + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + void vkCmdDispatchIndirect + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + + + void vkCmdSubpassShadingHUAWEI + VkCommandBuffer commandBuffer + + + void vkCmdDrawClusterHUAWEI + VkCommandBuffer commandBuffer + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + void vkCmdDrawClusterIndirectHUAWEI + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + + + void vkCmdUpdatePipelineIndirectBufferNV + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + + + void vkCmdCopyBuffer + VkCommandBuffer commandBuffer + VkBuffer srcBuffer + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferCopy* pRegions + + + void vkCmdCopyImage + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageCopy* pRegions + + + void vkCmdBlitImage + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageBlit* pRegions + VkFilter filter + + + void vkCmdCopyBufferToImage + VkCommandBuffer commandBuffer + VkBuffer srcBuffer + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkBufferImageCopy* pRegions + + + void vkCmdCopyImageToBuffer + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferImageCopy* pRegions + + + void vkCmdCopyMemoryIndirectNV + VkCommandBuffer commandBuffer + VkDeviceAddress copyBufferAddress + uint32_t copyCount + uint32_t stride + + + void vkCmdCopyMemoryIndirectKHR + VkCommandBuffer commandBuffer + const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo + + + void vkCmdCopyMemoryToImageIndirectNV + VkCommandBuffer commandBuffer + VkDeviceAddress copyBufferAddress + uint32_t copyCount + uint32_t stride + VkImage dstImage + VkImageLayout dstImageLayout + const VkImageSubresourceLayers* pImageSubresources + + + void vkCmdCopyMemoryToImageIndirectKHR + VkCommandBuffer commandBuffer + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo + + + void vkCmdUpdateBuffer + VkCommandBuffer commandBuffer + VkBuffer dstBuffer + VkDeviceSize dstOffset + VkDeviceSize dataSize + const void* pData + + + void vkCmdFillBuffer + VkCommandBuffer commandBuffer + VkBuffer dstBuffer + VkDeviceSize dstOffset + VkDeviceSize size + uint32_t data + + + void vkCmdClearColorImage + VkCommandBuffer commandBuffer + VkImage image + VkImageLayout imageLayout + const VkClearColorValue* pColor + uint32_t rangeCount + const VkImageSubresourceRange* pRanges + + + void vkCmdClearDepthStencilImage + VkCommandBuffer commandBuffer + VkImage image + VkImageLayout imageLayout + const VkClearDepthStencilValue* pDepthStencil + uint32_t rangeCount + const VkImageSubresourceRange* pRanges + + + void vkCmdClearAttachments + VkCommandBuffer commandBuffer + uint32_t attachmentCount + const VkClearAttachment* pAttachments + uint32_t rectCount + const VkClearRect* pRects + + + void vkCmdResolveImage + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageResolve* pRegions + + + void vkCmdSetEvent + VkCommandBuffer commandBuffer + VkEvent event + VkPipelineStageFlags stageMask + + + void vkCmdResetEvent + VkCommandBuffer commandBuffer + VkEvent event + VkPipelineStageFlags stageMask + + + void vkCmdWaitEvents + VkCommandBuffer commandBuffer + uint32_t eventCount + const VkEvent* pEvents + VkPipelineStageFlags srcStageMask + VkPipelineStageFlags dstStageMask + uint32_t memoryBarrierCount + const VkMemoryBarrier* pMemoryBarriers + uint32_t bufferMemoryBarrierCount + const VkBufferMemoryBarrier* pBufferMemoryBarriers + uint32_t imageMemoryBarrierCount + const VkImageMemoryBarrier* pImageMemoryBarriers + + + void vkCmdPipelineBarrier + VkCommandBuffer commandBuffer + VkPipelineStageFlags srcStageMask + VkPipelineStageFlags dstStageMask + VkDependencyFlags dependencyFlags + uint32_t memoryBarrierCount + const VkMemoryBarrier* pMemoryBarriers + uint32_t bufferMemoryBarrierCount + const VkBufferMemoryBarrier* pBufferMemoryBarriers + uint32_t imageMemoryBarrierCount + const VkImageMemoryBarrier* pImageMemoryBarriers + + + void vkCmdBeginQuery + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + VkQueryControlFlags flags + + + void vkCmdEndQuery + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + + + void vkCmdBeginConditionalRenderingEXT + VkCommandBuffer commandBuffer + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin + + + void vkCmdEndConditionalRenderingEXT + VkCommandBuffer commandBuffer + + + void vkCmdBeginCustomResolveEXT + VkCommandBuffer commandBuffer + const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo + + + void vkCmdResetQueryPool + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + + + void vkCmdWriteTimestamp + VkCommandBuffer commandBuffer + VkPipelineStageFlagBits pipelineStage + VkQueryPool queryPool + uint32_t query + + + void vkCmdCopyQueryPoolResults + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + VkBuffer dstBuffer + VkDeviceSize dstOffset + VkDeviceSize stride + VkQueryResultFlags flags + + + void vkCmdPushConstants + VkCommandBuffer commandBuffer + VkPipelineLayout layout + VkShaderStageFlags stageFlags + uint32_t offset + uint32_t size + const void* pValues + + + void vkCmdBeginRenderPass + VkCommandBuffer commandBuffer + const VkRenderPassBeginInfo* pRenderPassBegin + VkSubpassContents contents + + + void vkCmdNextSubpass + VkCommandBuffer commandBuffer + VkSubpassContents contents + + + void vkCmdEndRenderPass + VkCommandBuffer commandBuffer + + + void vkCmdExecuteCommands + VkCommandBuffer commandBuffer + uint32_t commandBufferCount + const VkCommandBuffer* pCommandBuffers + + + VkResult vkCreateAndroidSurfaceKHR + VkInstance instance + const VkAndroidSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateSurfaceOHOS + VkInstance instance + const VkSurfaceCreateInfoOHOS* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkGetPhysicalDeviceDisplayPropertiesKHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayPropertiesKHR* pProperties + + + VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayPlanePropertiesKHR* pProperties + + + VkResult vkGetDisplayPlaneSupportedDisplaysKHR + VkPhysicalDevice physicalDevice + uint32_t planeIndex + uint32_t* pDisplayCount + VkDisplayKHR* pDisplays + + + VkResult vkGetDisplayModePropertiesKHR + VkPhysicalDevice physicalDevice + VkDisplayKHR display + uint32_t* pPropertyCount + VkDisplayModePropertiesKHR* pProperties + + + VkResult vkCreateDisplayModeKHR + VkPhysicalDevice physicalDevice + VkDisplayKHR display + const VkDisplayModeCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDisplayModeKHR* pMode + + + VkResult vkGetDisplayPlaneCapabilitiesKHR + VkPhysicalDevice physicalDevice + VkDisplayModeKHR mode + uint32_t planeIndex + VkDisplayPlaneCapabilitiesKHR* pCapabilities + + + VkResult vkCreateDisplayPlaneSurfaceKHR + VkInstance instance + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateSharedSwapchainsKHR + VkDevice device + uint32_t swapchainCount + const VkSwapchainCreateInfoKHR* pCreateInfos + const VkSwapchainCreateInfoKHR* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkSwapchainKHR* pSwapchains + + + void vkDestroySurfaceKHR + VkInstance instance + VkSurfaceKHR surface + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetPhysicalDeviceSurfaceSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + VkSurfaceKHR surface + VkBool32* pSupported + + + VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities + + + VkResult vkGetPhysicalDeviceSurfaceFormatsKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + uint32_t* pSurfaceFormatCount + VkSurfaceFormatKHR* pSurfaceFormats + + + VkResult vkGetPhysicalDeviceSurfacePresentModesKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + uint32_t* pPresentModeCount + VkPresentModeKHR* pPresentModes + + + VkResult vkCreateSwapchainKHR + VkDevice device + const VkSwapchainCreateInfoKHR* pCreateInfo + const VkSwapchainCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSwapchainKHR* pSwapchain + + + void vkDestroySwapchainKHR + VkDevice device + VkSwapchainKHR swapchain + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetSwapchainImagesKHR + VkDevice device + VkSwapchainKHR swapchain + uint32_t* pSwapchainImageCount + VkImage* pSwapchainImages + + + VkResult vkAcquireNextImageKHR + VkDevice device + VkSwapchainKHR swapchain + uint64_t timeout + VkSemaphore semaphore + VkFence fence + uint32_t* pImageIndex + + + VkResult vkQueuePresentKHR + VkQueue queue + const VkPresentInfoKHR* pPresentInfo + + + VkResult vkCreateViSurfaceNN + VkInstance instance + const VkViSurfaceCreateInfoNN* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateWaylandSurfaceKHR + VkInstance instance + const VkWaylandSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + struct wl_display* display + + + VkResult vkCreateWin32SurfaceKHR + VkInstance instance + const VkWin32SurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + + + VkResult vkCreateXlibSurfaceKHR + VkInstance instance + const VkXlibSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + Display* dpy + VisualID visualID + + + VkResult vkCreateXcbSurfaceKHR + VkInstance instance + const VkXcbSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + xcb_connection_t* connection + xcb_visualid_t visual_id + + + VkResult vkCreateDirectFBSurfaceEXT + VkInstance instance + const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceDirectFBPresentationSupportEXT + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + IDirectFB* dfb + + + VkResult vkCreateImagePipeSurfaceFUCHSIA + VkInstance instance + const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateStreamDescriptorSurfaceGGP + VkInstance instance + const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateScreenSurfaceQNX + VkInstance instance + const VkScreenSurfaceCreateInfoQNX* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceScreenPresentationSupportQNX + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + struct _screen_window* window + + + VkResult vkCreateDebugReportCallbackEXT + VkInstance instance + const VkDebugReportCallbackCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDebugReportCallbackEXT* pCallback + + + void vkDestroyDebugReportCallbackEXT + VkInstance instance + VkDebugReportCallbackEXT callback + const VkAllocationCallbacks* pAllocator + + + void vkDebugReportMessageEXT + VkInstance instance + VkDebugReportFlagsEXT flags + VkDebugReportObjectTypeEXT objectType + uint64_t object + size_t location + int32_t messageCode + const char* pLayerPrefix + const char* pMessage + + + VkResult vkDebugMarkerSetObjectNameEXT + VkDevice device + const VkDebugMarkerObjectNameInfoEXT* pNameInfo + + + VkResult vkDebugMarkerSetObjectTagEXT + VkDevice device + const VkDebugMarkerObjectTagInfoEXT* pTagInfo + + + void vkCmdDebugMarkerBeginEXT + VkCommandBuffer commandBuffer + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo + + + void vkCmdDebugMarkerEndEXT + VkCommandBuffer commandBuffer + + + void vkCmdDebugMarkerInsertEXT + VkCommandBuffer commandBuffer + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo + + + VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV + VkPhysicalDevice physicalDevice + VkFormat format + VkImageType type + VkImageTiling tiling + VkImageUsageFlags usage + VkImageCreateFlags flags + VkExternalMemoryHandleTypeFlagsNV externalHandleType + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties + + + VkResult vkGetMemoryWin32HandleNV + VkDevice device + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagsNV handleType + HANDLE* pHandle + + + void vkCmdExecuteGeneratedCommandsNV + VkCommandBuffer commandBuffer + VkBool32 isPreprocessed + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo + + + void vkCmdPreprocessGeneratedCommandsNV + VkCommandBuffer commandBuffer + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo + + + void vkCmdBindPipelineShaderGroupNV + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + uint32_t groupIndex + + + void vkGetGeneratedCommandsMemoryRequirementsNV + VkDevice device + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkCreateIndirectCommandsLayoutNV + VkDevice device + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkIndirectCommandsLayoutNV* pIndirectCommandsLayout + + + void vkDestroyIndirectCommandsLayoutNV + VkDevice device + VkIndirectCommandsLayoutNV indirectCommandsLayout + const VkAllocationCallbacks* pAllocator + + + void vkCmdExecuteGeneratedCommandsEXT + VkCommandBuffer commandBuffer + VkBool32 isPreprocessed + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo + + + void vkCmdPreprocessGeneratedCommandsEXT + VkCommandBuffer commandBuffer + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo + VkCommandBuffer stateCommandBuffer + + + void vkGetGeneratedCommandsMemoryRequirementsEXT + VkDevice device + const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkCreateIndirectCommandsLayoutEXT + VkDevice device + const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout + + + void vkDestroyIndirectCommandsLayoutEXT + VkDevice device + VkIndirectCommandsLayoutEXT indirectCommandsLayout + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateIndirectExecutionSetEXT + VkDevice device + const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkIndirectExecutionSetEXT* pIndirectExecutionSet + + + void vkDestroyIndirectExecutionSetEXT + VkDevice device + VkIndirectExecutionSetEXT indirectExecutionSet + const VkAllocationCallbacks* pAllocator + + + void vkUpdateIndirectExecutionSetPipelineEXT + VkDevice device + VkIndirectExecutionSetEXT indirectExecutionSet + uint32_t executionSetWriteCount + const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites + + + void vkUpdateIndirectExecutionSetShaderEXT + VkDevice device + VkIndirectExecutionSetEXT indirectExecutionSet + uint32_t executionSetWriteCount + const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites + + + void vkGetPhysicalDeviceFeatures2 + VkPhysicalDevice physicalDevice + VkPhysicalDeviceFeatures2* pFeatures + + + + void vkGetPhysicalDeviceProperties2 + VkPhysicalDevice physicalDevice + VkPhysicalDeviceProperties2* pProperties + + + + void vkGetPhysicalDeviceFormatProperties2 + VkPhysicalDevice physicalDevice + VkFormat format + VkFormatProperties2* pFormatProperties + + + + VkResult vkGetPhysicalDeviceImageFormatProperties2 + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo + VkImageFormatProperties2* pImageFormatProperties + + + + void vkGetPhysicalDeviceQueueFamilyProperties2 + VkPhysicalDevice physicalDevice + uint32_t* pQueueFamilyPropertyCount + VkQueueFamilyProperties2* pQueueFamilyProperties + + + + void vkGetPhysicalDeviceMemoryProperties2 + VkPhysicalDevice physicalDevice + VkPhysicalDeviceMemoryProperties2* pMemoryProperties + + + + void vkGetPhysicalDeviceSparseImageFormatProperties2 + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo + uint32_t* pPropertyCount + VkSparseImageFormatProperties2* pProperties + + + + void vkCmdPushDescriptorSet + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t set + uint32_t descriptorWriteCount + const VkWriteDescriptorSet* pDescriptorWrites + + + + void vkTrimCommandPool + VkDevice device + VkCommandPool commandPool + VkCommandPoolTrimFlags flags + + + + void vkGetPhysicalDeviceExternalBufferProperties + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo + VkExternalBufferProperties* pExternalBufferProperties + + + + VkResult vkGetMemoryWin32HandleKHR + VkDevice device + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo + HANDLE* pHandle + + + VkResult vkGetMemoryWin32HandlePropertiesKHR + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + HANDLE handle + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties + + + VkResult vkGetMemoryFdKHR + VkDevice device + const VkMemoryGetFdInfoKHR* pGetFdInfo + int* pFd + + + VkResult vkGetMemoryFdPropertiesKHR + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + int fd + VkMemoryFdPropertiesKHR* pMemoryFdProperties + + + VkResult vkGetMemoryZirconHandleFUCHSIA + VkDevice device + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo + zx_handle_t* pZirconHandle + + + VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + zx_handle_t zirconHandle + VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties + + + VkResult vkGetMemoryRemoteAddressNV + VkDevice device + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo + VkRemoteAddressNV* pAddress + + + VkResult vkGetMemorySciBufNV + VkDevice device + const VkMemoryGetSciBufInfoNV* pGetSciBufInfo + NvSciBufObj* pHandle + + + VkResult vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV + VkPhysicalDevice physicalDevice + VkExternalMemoryHandleTypeFlagBits handleType + NvSciBufObj handle + VkMemorySciBufPropertiesNV* pMemorySciBufProperties + + + VkResult vkGetPhysicalDeviceSciBufAttributesNV + VkPhysicalDevice physicalDevice + NvSciBufAttrList pAttributes + + + void vkGetPhysicalDeviceExternalSemaphoreProperties + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo + VkExternalSemaphoreProperties* pExternalSemaphoreProperties + + + + VkResult vkGetSemaphoreWin32HandleKHR + VkDevice device + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo + HANDLE* pHandle + + + VkResult vkImportSemaphoreWin32HandleKHR + VkDevice device + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo + + + VkResult vkGetSemaphoreFdKHR + VkDevice device + const VkSemaphoreGetFdInfoKHR* pGetFdInfo + int* pFd + + + VkResult vkImportSemaphoreFdKHR + VkDevice device + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo + + + VkResult vkGetSemaphoreZirconHandleFUCHSIA + VkDevice device + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo + zx_handle_t* pZirconHandle + + + VkResult vkImportSemaphoreZirconHandleFUCHSIA + VkDevice device + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo + + + void vkGetPhysicalDeviceExternalFenceProperties + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo + VkExternalFenceProperties* pExternalFenceProperties + + + + VkResult vkGetFenceWin32HandleKHR + VkDevice device + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo + HANDLE* pHandle + + + VkResult vkImportFenceWin32HandleKHR + VkDevice device + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo + + + VkResult vkGetFenceFdKHR + VkDevice device + const VkFenceGetFdInfoKHR* pGetFdInfo + int* pFd + + + VkResult vkImportFenceFdKHR + VkDevice device + const VkImportFenceFdInfoKHR* pImportFenceFdInfo + + + VkResult vkGetFenceSciSyncFenceNV + VkDevice device + const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo + void* pHandle + + + VkResult vkGetFenceSciSyncObjNV + VkDevice device + const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo + void* pHandle + + + VkResult vkImportFenceSciSyncFenceNV + VkDevice device + const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo + + + VkResult vkImportFenceSciSyncObjNV + VkDevice device + const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo + + + VkResult vkGetSemaphoreSciSyncObjNV + VkDevice device + const VkSemaphoreGetSciSyncInfoNV* pGetSciSyncInfo + void* pHandle + + + VkResult vkImportSemaphoreSciSyncObjNV + VkDevice device + const VkImportSemaphoreSciSyncInfoNV* pImportSemaphoreSciSyncInfo + + + VkResult vkGetPhysicalDeviceSciSyncAttributesNV + VkPhysicalDevice physicalDevice + const VkSciSyncAttributesInfoNV* pSciSyncAttributesInfo + NvSciSyncAttrList pAttributes + + + VkResult vkCreateSemaphoreSciSyncPoolNV + VkDevice device + const VkSemaphoreSciSyncPoolCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSemaphoreSciSyncPoolNV* pSemaphorePool + + + void vkDestroySemaphoreSciSyncPoolNV + VkDevice device + VkSemaphoreSciSyncPoolNV semaphorePool + const VkAllocationCallbacks* pAllocator + + + VkResult vkReleaseDisplayEXT + VkPhysicalDevice physicalDevice + VkDisplayKHR display + + + VkResult vkAcquireXlibDisplayEXT + VkPhysicalDevice physicalDevice + Display* dpy + VkDisplayKHR display + + + VkResult vkGetRandROutputDisplayEXT + VkPhysicalDevice physicalDevice + Display* dpy + RROutput rrOutput + VkDisplayKHR* pDisplay + + + VkResult vkAcquireWinrtDisplayNV + VkPhysicalDevice physicalDevice + VkDisplayKHR display + + + VkResult vkGetWinrtDisplayNV + VkPhysicalDevice physicalDevice + uint32_t deviceRelativeId + VkDisplayKHR* pDisplay + + + VkResult vkDisplayPowerControlEXT + VkDevice device + VkDisplayKHR display + const VkDisplayPowerInfoEXT* pDisplayPowerInfo + + + VkResult vkRegisterDeviceEventEXT + VkDevice device + const VkDeviceEventInfoEXT* pDeviceEventInfo + const VkAllocationCallbacks* pAllocator + VkFence* pFence + + + VkResult vkRegisterDisplayEventEXT + VkDevice device + VkDisplayKHR display + const VkDisplayEventInfoEXT* pDisplayEventInfo + const VkAllocationCallbacks* pAllocator + VkFence* pFence + + + VkResult vkGetSwapchainCounterEXT + VkDevice device + VkSwapchainKHR swapchain + VkSurfaceCounterFlagBitsEXT counter + uint64_t* pCounterValue + + + VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + VkSurfaceCapabilities2EXT* pSurfaceCapabilities + + + VkResult vkEnumeratePhysicalDeviceGroups + VkInstance instance + uint32_t* pPhysicalDeviceGroupCount + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties + + + + void vkGetDeviceGroupPeerMemoryFeatures + VkDevice device + uint32_t heapIndex + uint32_t localDeviceIndex + uint32_t remoteDeviceIndex + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures + + + + VkResult vkBindBufferMemory2 + VkDevice device + uint32_t bindInfoCount + const VkBindBufferMemoryInfo* pBindInfos + + + + VkResult vkBindImageMemory2 + VkDevice device + uint32_t bindInfoCount + const VkBindImageMemoryInfo* pBindInfos + + + + void vkCmdSetDeviceMask + VkCommandBuffer commandBuffer + uint32_t deviceMask + + + + VkResult vkGetDeviceGroupPresentCapabilitiesKHR + VkDevice device + VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities + + + VkResult vkGetDeviceGroupSurfacePresentModesKHR + VkDevice device + VkSurfaceKHR surface + VkDeviceGroupPresentModeFlagsKHR* pModes + + + VkResult vkAcquireNextImage2KHR + VkDevice device + const VkAcquireNextImageInfoKHR* pAcquireInfo + uint32_t* pImageIndex + + + void vkCmdDispatchBase + VkCommandBuffer commandBuffer + uint32_t baseGroupX + uint32_t baseGroupY + uint32_t baseGroupZ + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + + VkResult vkGetPhysicalDevicePresentRectanglesKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + uint32_t* pRectCount + VkRect2D* pRects + + + VkResult vkCreateDescriptorUpdateTemplate + VkDevice device + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate + + + + void vkDestroyDescriptorUpdateTemplate + VkDevice device + VkDescriptorUpdateTemplate descriptorUpdateTemplate + const VkAllocationCallbacks* pAllocator + + + + void vkUpdateDescriptorSetWithTemplate + VkDevice device + VkDescriptorSet descriptorSet + VkDescriptorUpdateTemplate descriptorUpdateTemplate + const void* pData + + + + void vkCmdPushDescriptorSetWithTemplate + VkCommandBuffer commandBuffer + VkDescriptorUpdateTemplate descriptorUpdateTemplate + VkPipelineLayout layout + uint32_t set + const void* pData + + + + void vkSetHdrMetadataEXT + VkDevice device + uint32_t swapchainCount + const VkSwapchainKHR* pSwapchains + const VkHdrMetadataEXT* pMetadata + + + VkResult vkGetSwapchainStatusKHR + VkDevice device + VkSwapchainKHR swapchain + + + VkResult vkGetRefreshCycleDurationGOOGLE + VkDevice device + VkSwapchainKHR swapchain + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties + + + VkResult vkGetPastPresentationTimingGOOGLE + VkDevice device + VkSwapchainKHR swapchain + uint32_t* pPresentationTimingCount + VkPastPresentationTimingGOOGLE* pPresentationTimings + + + VkResult vkCreateIOSSurfaceMVK + VkInstance instance + const VkIOSSurfaceCreateInfoMVK* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateMacOSSurfaceMVK + VkInstance instance + const VkMacOSSurfaceCreateInfoMVK* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateMetalSurfaceEXT + VkInstance instance + const VkMetalSurfaceCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + void vkCmdSetViewportWScalingNV + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkViewportWScalingNV* pViewportWScalings + + + void vkCmdSetDiscardRectangleEXT + VkCommandBuffer commandBuffer + uint32_t firstDiscardRectangle + uint32_t discardRectangleCount + const VkRect2D* pDiscardRectangles + + + void vkCmdSetDiscardRectangleEnableEXT + VkCommandBuffer commandBuffer + VkBool32 discardRectangleEnable + + + void vkCmdSetDiscardRectangleModeEXT + VkCommandBuffer commandBuffer + VkDiscardRectangleModeEXT discardRectangleMode + + + void vkCmdSetSampleLocationsEXT + VkCommandBuffer commandBuffer + const VkSampleLocationsInfoEXT* pSampleLocationsInfo + + + void vkGetPhysicalDeviceMultisamplePropertiesEXT + VkPhysicalDevice physicalDevice + VkSampleCountFlagBits samples + VkMultisamplePropertiesEXT* pMultisampleProperties + + + VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + VkSurfaceCapabilities2KHR* pSurfaceCapabilities + + + VkResult vkGetPhysicalDeviceSurfaceFormats2KHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + uint32_t* pSurfaceFormatCount + VkSurfaceFormat2KHR* pSurfaceFormats + + + VkResult vkGetPhysicalDeviceDisplayProperties2KHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayProperties2KHR* pProperties + + + VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayPlaneProperties2KHR* pProperties + + + VkResult vkGetDisplayModeProperties2KHR + VkPhysicalDevice physicalDevice + VkDisplayKHR display + uint32_t* pPropertyCount + VkDisplayModeProperties2KHR* pProperties + + + VkResult vkGetDisplayPlaneCapabilities2KHR + VkPhysicalDevice physicalDevice + const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo + VkDisplayPlaneCapabilities2KHR* pCapabilities + + + void vkGetBufferMemoryRequirements2 + VkDevice device + const VkBufferMemoryRequirementsInfo2* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetImageMemoryRequirements2 + VkDevice device + const VkImageMemoryRequirementsInfo2* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetImageSparseMemoryRequirements2 + VkDevice device + const VkImageSparseMemoryRequirementsInfo2* pInfo + uint32_t* pSparseMemoryRequirementCount + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements + + + + void vkGetDeviceBufferMemoryRequirements + VkDevice device + const VkDeviceBufferMemoryRequirements* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetDeviceImageMemoryRequirements + VkDevice device + const VkDeviceImageMemoryRequirements* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetDeviceImageSparseMemoryRequirements + VkDevice device + const VkDeviceImageMemoryRequirements* pInfo + uint32_t* pSparseMemoryRequirementCount + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements + + + + VkResult vkCreateSamplerYcbcrConversion + VkDevice device + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSamplerYcbcrConversion* pYcbcrConversion + + + + void vkDestroySamplerYcbcrConversion + VkDevice device + VkSamplerYcbcrConversion ycbcrConversion + const VkAllocationCallbacks* pAllocator + + + + void vkGetDeviceQueue2 + VkDevice device + const VkDeviceQueueInfo2* pQueueInfo + VkQueue* pQueue + + + VkResult vkCreateValidationCacheEXT + VkDevice device + const VkValidationCacheCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkValidationCacheEXT* pValidationCache + + + void vkDestroyValidationCacheEXT + VkDevice device + VkValidationCacheEXT validationCache + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetValidationCacheDataEXT + VkDevice device + VkValidationCacheEXT validationCache + size_t* pDataSize + void* pData + + + VkResult vkMergeValidationCachesEXT + VkDevice device + VkValidationCacheEXT dstCache + uint32_t srcCacheCount + const VkValidationCacheEXT* pSrcCaches + + + void vkGetDescriptorSetLayoutSupport + VkDevice device + const VkDescriptorSetLayoutCreateInfo* pCreateInfo + VkDescriptorSetLayoutSupport* pSupport + + + + VkResult vkGetSwapchainGrallocUsageANDROID + VkDevice device + VkFormat format + VkImageUsageFlags imageUsage + int* grallocUsage + + + VkResult vkGetSwapchainGrallocUsage2ANDROID + VkDevice device + VkFormat format + VkImageUsageFlags imageUsage + VkSwapchainImageUsageFlagsANDROID swapchainImageUsage + uint64_t* grallocConsumerUsage + uint64_t* grallocProducerUsage + + + VkResult vkAcquireImageANDROID + VkDevice device + VkImage image + int nativeFenceFd + VkSemaphore semaphore + VkFence fence + + + VkResult vkQueueSignalReleaseImageANDROID + VkQueue queue + uint32_t waitSemaphoreCount + const VkSemaphore* pWaitSemaphores + VkImage image + int* pNativeFenceFd + + + VkResult vkGetShaderInfoAMD + VkDevice device + VkPipeline pipeline + VkShaderStageFlagBits shaderStage + VkShaderInfoTypeAMD infoType + size_t* pInfoSize + void* pInfo + + + void vkSetLocalDimmingAMD + VkDevice device + VkSwapchainKHR swapChain + VkBool32 localDimmingEnable + + + VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsKHR + VkPhysicalDevice physicalDevice + uint32_t* pTimeDomainCount + VkTimeDomainKHR* pTimeDomains + + + + VkResult vkGetCalibratedTimestampsKHR + VkDevice device + uint32_t timestampCount + const VkCalibratedTimestampInfoKHR* pTimestampInfos + uint64_t* pTimestamps + uint64_t* pMaxDeviation + + + + VkResult vkSetDebugUtilsObjectNameEXT + VkDevice device + const VkDebugUtilsObjectNameInfoEXT* pNameInfo + + + VkResult vkSetDebugUtilsObjectTagEXT + VkDevice device + const VkDebugUtilsObjectTagInfoEXT* pTagInfo + + + void vkQueueBeginDebugUtilsLabelEXT + VkQueue queue + const VkDebugUtilsLabelEXT* pLabelInfo + + + void vkQueueEndDebugUtilsLabelEXT + VkQueue queue + + + void vkQueueInsertDebugUtilsLabelEXT + VkQueue queue + const VkDebugUtilsLabelEXT* pLabelInfo + + + void vkCmdBeginDebugUtilsLabelEXT + VkCommandBuffer commandBuffer + const VkDebugUtilsLabelEXT* pLabelInfo + + + void vkCmdEndDebugUtilsLabelEXT + VkCommandBuffer commandBuffer + + + void vkCmdInsertDebugUtilsLabelEXT + VkCommandBuffer commandBuffer + const VkDebugUtilsLabelEXT* pLabelInfo + + + VkResult vkCreateDebugUtilsMessengerEXT + VkInstance instance + const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDebugUtilsMessengerEXT* pMessenger + + + void vkDestroyDebugUtilsMessengerEXT + VkInstance instance + VkDebugUtilsMessengerEXT messenger + const VkAllocationCallbacks* pAllocator + + + void vkSubmitDebugUtilsMessageEXT + VkInstance instance + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity + VkDebugUtilsMessageTypeFlagsEXT messageTypes + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData + + + VkResult vkGetMemoryHostPointerPropertiesEXT + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + const void* pHostPointer + VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties + + + void vkCmdWriteBufferMarkerAMD + VkCommandBuffer commandBuffer + VkPipelineStageFlagBits pipelineStage + VkBuffer dstBuffer + VkDeviceSize dstOffset + uint32_t marker + + + VkResult vkCreateRenderPass2 + VkDevice device + const VkRenderPassCreateInfo2* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkRenderPass* pRenderPass + + + + void vkCmdBeginRenderPass2 + VkCommandBuffer commandBuffer + const VkRenderPassBeginInfo* pRenderPassBegin + const VkSubpassBeginInfo* pSubpassBeginInfo + + + + void vkCmdNextSubpass2 + VkCommandBuffer commandBuffer + const VkSubpassBeginInfo* pSubpassBeginInfo + const VkSubpassEndInfo* pSubpassEndInfo + + + + void vkCmdEndRenderPass2 + VkCommandBuffer commandBuffer + const VkSubpassEndInfo* pSubpassEndInfo + + + + VkResult vkGetSemaphoreCounterValue + VkDevice device + VkSemaphore semaphore + uint64_t* pValue + + + + VkResult vkWaitSemaphores + VkDevice device + const VkSemaphoreWaitInfo* pWaitInfo + uint64_t timeout + + + + VkResult vkSignalSemaphore + VkDevice device + const VkSemaphoreSignalInfo* pSignalInfo + + + + VkResult vkGetAndroidHardwareBufferPropertiesANDROID + VkDevice device + const struct AHardwareBuffer* buffer + VkAndroidHardwareBufferPropertiesANDROID* pProperties + + + VkResult vkGetMemoryAndroidHardwareBufferANDROID + VkDevice device + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo + struct AHardwareBuffer** pBuffer + + + void vkCmdDrawIndirectCount + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + + + void vkCmdDrawIndexedIndirectCount + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + + + void vkCmdSetCheckpointNV + VkCommandBuffer commandBuffer + const void* pCheckpointMarker + + + void vkGetQueueCheckpointDataNV + VkQueue queue + uint32_t* pCheckpointDataCount + VkCheckpointDataNV* pCheckpointData + + + void vkCmdBindTransformFeedbackBuffersEXT + VkCommandBuffer commandBuffer + uint32_t firstBinding + uint32_t bindingCount + const VkBuffer* pBuffers + const VkDeviceSize* pOffsets + const VkDeviceSize* pSizes + + + void vkCmdBeginTransformFeedbackEXT + VkCommandBuffer commandBuffer + uint32_t firstCounterBuffer + uint32_t counterBufferCount + const VkBuffer* pCounterBuffers + const VkDeviceSize* pCounterBufferOffsets + + + void vkCmdEndTransformFeedbackEXT + VkCommandBuffer commandBuffer + uint32_t firstCounterBuffer + uint32_t counterBufferCount + const VkBuffer* pCounterBuffers + const VkDeviceSize* pCounterBufferOffsets + + + void vkCmdBeginQueryIndexedEXT + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + VkQueryControlFlags flags + uint32_t index + + + void vkCmdEndQueryIndexedEXT + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + uint32_t index + + + void vkCmdDrawIndirectByteCountEXT + VkCommandBuffer commandBuffer + uint32_t instanceCount + uint32_t firstInstance + VkBuffer counterBuffer + VkDeviceSize counterBufferOffset + uint32_t counterOffset + uint32_t vertexStride + + + void vkCmdSetExclusiveScissorNV + VkCommandBuffer commandBuffer + uint32_t firstExclusiveScissor + uint32_t exclusiveScissorCount + const VkRect2D* pExclusiveScissors + + + void vkCmdSetExclusiveScissorEnableNV + VkCommandBuffer commandBuffer + uint32_t firstExclusiveScissor + uint32_t exclusiveScissorCount + const VkBool32* pExclusiveScissorEnables + + + void vkCmdBindShadingRateImageNV + VkCommandBuffer commandBuffer + VkImageView imageView + VkImageLayout imageLayout + + + void vkCmdSetViewportShadingRatePaletteNV + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkShadingRatePaletteNV* pShadingRatePalettes + + + void vkCmdSetCoarseSampleOrderNV + VkCommandBuffer commandBuffer + VkCoarseSampleOrderTypeNV sampleOrderType + uint32_t customSampleOrderCount + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders + + + void vkCmdDrawMeshTasksNV + VkCommandBuffer commandBuffer + uint32_t taskCount + uint32_t firstTask + + + void vkCmdDrawMeshTasksIndirectNV + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDrawMeshTasksIndirectCountNV + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + void vkCmdDrawMeshTasksEXT + VkCommandBuffer commandBuffer + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + void vkCmdDrawMeshTasksIndirectEXT + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDrawMeshTasksIndirectCountEXT + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + VkResult vkCompileDeferredNV + VkDevice device + VkPipeline pipeline + uint32_t shader + + + VkResult vkCreateAccelerationStructureNV + VkDevice device + const VkAccelerationStructureCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkAccelerationStructureNV* pAccelerationStructure + + + void vkCmdBindInvocationMaskHUAWEI + VkCommandBuffer commandBuffer + VkImageView imageView + VkImageLayout imageLayout + + + void vkDestroyAccelerationStructureKHR + VkDevice device + VkAccelerationStructureKHR accelerationStructure + const VkAllocationCallbacks* pAllocator + + + void vkDestroyAccelerationStructureNV + VkDevice device + VkAccelerationStructureNV accelerationStructure + const VkAllocationCallbacks* pAllocator + + + void vkGetAccelerationStructureMemoryRequirementsNV + VkDevice device + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo + VkMemoryRequirements2KHR* pMemoryRequirements + + + VkResult vkBindAccelerationStructureMemoryNV + VkDevice device + uint32_t bindInfoCount + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos + + + void vkCmdCopyAccelerationStructureNV + VkCommandBuffer commandBuffer + VkAccelerationStructureNV dst + VkAccelerationStructureNV src + VkCopyAccelerationStructureModeKHR mode + + + void vkCmdCopyAccelerationStructureKHR + VkCommandBuffer commandBuffer + const VkCopyAccelerationStructureInfoKHR* pInfo + + + VkResult vkCopyAccelerationStructureKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyAccelerationStructureInfoKHR* pInfo + + + void vkCmdCopyAccelerationStructureToMemoryKHR + VkCommandBuffer commandBuffer + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo + + + VkResult vkCopyAccelerationStructureToMemoryKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo + + + void vkCmdCopyMemoryToAccelerationStructureKHR + VkCommandBuffer commandBuffer + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo + + + VkResult vkCopyMemoryToAccelerationStructureKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo + + + void vkCmdWriteAccelerationStructuresPropertiesKHR + VkCommandBuffer commandBuffer + uint32_t accelerationStructureCount + const VkAccelerationStructureKHR* pAccelerationStructures + VkQueryType queryType + VkQueryPool queryPool + uint32_t firstQuery + + + void vkCmdWriteAccelerationStructuresPropertiesNV + VkCommandBuffer commandBuffer + uint32_t accelerationStructureCount + const VkAccelerationStructureNV* pAccelerationStructures + VkQueryType queryType + VkQueryPool queryPool + uint32_t firstQuery + + + void vkCmdBuildAccelerationStructureNV + VkCommandBuffer commandBuffer + const VkAccelerationStructureInfoNV* pInfo + VkBuffer instanceData + VkDeviceSize instanceOffset + VkBool32 update + VkAccelerationStructureNV dst + VkAccelerationStructureNV src + VkBuffer scratch + VkDeviceSize scratchOffset + + + VkResult vkWriteAccelerationStructuresPropertiesKHR + VkDevice device + uint32_t accelerationStructureCount + const VkAccelerationStructureKHR* pAccelerationStructures + VkQueryType queryType + size_t dataSize + void* pData + size_t stride + + + void vkCmdTraceRaysKHR + VkCommandBuffer commandBuffer + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable + uint32_t width + uint32_t height + uint32_t depth + + + void vkCmdTraceRaysNV + VkCommandBuffer commandBuffer + VkBuffer raygenShaderBindingTableBuffer + VkDeviceSize raygenShaderBindingOffset + VkBuffer missShaderBindingTableBuffer + VkDeviceSize missShaderBindingOffset + VkDeviceSize missShaderBindingStride + VkBuffer hitShaderBindingTableBuffer + VkDeviceSize hitShaderBindingOffset + VkDeviceSize hitShaderBindingStride + VkBuffer callableShaderBindingTableBuffer + VkDeviceSize callableShaderBindingOffset + VkDeviceSize callableShaderBindingStride + uint32_t width + uint32_t height + uint32_t depth + + + VkResult vkGetRayTracingShaderGroupHandlesKHR + VkDevice device + VkPipeline pipeline + uint32_t firstGroup + uint32_t groupCount + size_t dataSize + void* pData + + + + VkResult vkGetRayTracingCaptureReplayShaderGroupHandlesKHR + VkDevice device + VkPipeline pipeline + uint32_t firstGroup + uint32_t groupCount + size_t dataSize + void* pData + + + VkResult vkGetAccelerationStructureHandleNV + VkDevice device + VkAccelerationStructureNV accelerationStructure + size_t dataSize + void* pData + + + VkResult vkCreateRayTracingPipelinesNV + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoNV* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateRayTracingPipelinesNV + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoNV* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateRayTracingPipelinesKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateRayTracingPipelinesKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesNV + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeMatrixPropertiesNV* pProperties + + + void vkCmdTraceRaysIndirectKHR + VkCommandBuffer commandBuffer + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable + VkDeviceAddress indirectDeviceAddress + + + void vkCmdTraceRaysIndirect2KHR + VkCommandBuffer commandBuffer + VkDeviceAddress indirectDeviceAddress + + + void vkGetClusterAccelerationStructureBuildSizesNV + VkDevice device + const VkClusterAccelerationStructureInputInfoNV* pInfo + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo + + + void vkCmdBuildClusterAccelerationStructureIndirectNV + VkCommandBuffer commandBuffer + const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos + + + void vkGetDeviceAccelerationStructureCompatibilityKHR + VkDevice device + const VkAccelerationStructureVersionInfoKHR* pVersionInfo + VkAccelerationStructureCompatibilityKHR* pCompatibility + + + VkDeviceSize vkGetRayTracingShaderGroupStackSizeKHR + VkDevice device + VkPipeline pipeline + uint32_t group + VkShaderGroupShaderKHR groupShader + + + void vkCmdSetRayTracingPipelineStackSizeKHR + VkCommandBuffer commandBuffer + uint32_t pipelineStackSize + + + uint32_t vkGetImageViewHandleNVX + VkDevice device + const VkImageViewHandleInfoNVX* pInfo + + + uint64_t vkGetImageViewHandle64NVX + VkDevice device + const VkImageViewHandleInfoNVX* pInfo + + + VkResult vkGetImageViewAddressNVX + VkDevice device + VkImageView imageView + VkImageViewAddressPropertiesNVX* pProperties + + + uint64_t vkGetDeviceCombinedImageSamplerIndexNVX + VkDevice device + uint64_t imageViewIndex + uint64_t samplerIndex + + + VkResult vkGetPhysicalDeviceSurfacePresentModes2EXT + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + uint32_t* pPresentModeCount + VkPresentModeKHR* pPresentModes + + + VkResult vkGetDeviceGroupSurfacePresentModes2EXT + VkDevice device + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + VkDeviceGroupPresentModeFlagsKHR* pModes + + + VkResult vkAcquireFullScreenExclusiveModeEXT + VkDevice device + VkSwapchainKHR swapchain + + + VkResult vkReleaseFullScreenExclusiveModeEXT + VkDevice device + VkSwapchainKHR swapchain + + + VkResult vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + uint32_t* pCounterCount + VkPerformanceCounterKHR* pCounters + VkPerformanceCounterDescriptionKHR* pCounterDescriptions + + + void vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR + VkPhysicalDevice physicalDevice + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo + uint32_t* pNumPasses + + + VkResult vkAcquireProfilingLockKHR + VkDevice device + const VkAcquireProfilingLockInfoKHR* pInfo + + + void vkReleaseProfilingLockKHR + VkDevice device + + + VkResult vkGetImageDrmFormatModifierPropertiesEXT + VkDevice device + VkImage image + VkImageDrmFormatModifierPropertiesEXT* pProperties + + + uint64_t vkGetBufferOpaqueCaptureAddress + VkDevice device + const VkBufferDeviceAddressInfo* pInfo + + + + VkDeviceAddress vkGetBufferDeviceAddress + VkDevice device + const VkBufferDeviceAddressInfo* pInfo + + + + + VkResult vkCreateHeadlessSurfaceEXT + VkInstance instance + const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV + VkPhysicalDevice physicalDevice + uint32_t* pCombinationCount + VkFramebufferMixedSamplesCombinationNV* pCombinations + + + VkResult vkInitializePerformanceApiINTEL + VkDevice device + const VkInitializePerformanceApiInfoINTEL* pInitializeInfo + + + void vkUninitializePerformanceApiINTEL + VkDevice device + + + VkResult vkCmdSetPerformanceMarkerINTEL + VkCommandBuffer commandBuffer + const VkPerformanceMarkerInfoINTEL* pMarkerInfo + + + VkResult vkCmdSetPerformanceStreamMarkerINTEL + VkCommandBuffer commandBuffer + const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo + + + VkResult vkCmdSetPerformanceOverrideINTEL + VkCommandBuffer commandBuffer + const VkPerformanceOverrideInfoINTEL* pOverrideInfo + + + VkResult vkAcquirePerformanceConfigurationINTEL + VkDevice device + const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo + VkPerformanceConfigurationINTEL* pConfiguration + + + VkResult vkReleasePerformanceConfigurationINTEL + VkDevice device + VkPerformanceConfigurationINTEL configuration + + + VkResult vkQueueSetPerformanceConfigurationINTEL + VkQueue queue + VkPerformanceConfigurationINTEL configuration + + + VkResult vkGetPerformanceParameterINTEL + VkDevice device + VkPerformanceParameterTypeINTEL parameter + VkPerformanceValueINTEL* pValue + + + uint64_t vkGetDeviceMemoryOpaqueCaptureAddress + VkDevice device + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo + + + + VkResult vkGetPipelineExecutablePropertiesKHR + VkDevice device + const VkPipelineInfoKHR* pPipelineInfo + uint32_t* pExecutableCount + VkPipelineExecutablePropertiesKHR* pProperties + + + VkResult vkGetPipelineExecutableStatisticsKHR + VkDevice device + const VkPipelineExecutableInfoKHR* pExecutableInfo + uint32_t* pStatisticCount + VkPipelineExecutableStatisticKHR* pStatistics + + + VkResult vkGetPipelineExecutableInternalRepresentationsKHR + VkDevice device + const VkPipelineExecutableInfoKHR* pExecutableInfo + uint32_t* pInternalRepresentationCount + VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations + + + void vkCmdSetLineStipple + VkCommandBuffer commandBuffer + uint32_t lineStippleFactor + uint16_t lineStipplePattern + + + + + VkResult vkGetFaultData + VkDevice device + VkFaultQueryBehavior faultQueryBehavior + VkBool32* pUnrecordedFaults + uint32_t* pFaultCount + VkFaultData* pFaults + + + VkResult vkGetPhysicalDeviceToolProperties + VkPhysicalDevice physicalDevice + uint32_t* pToolCount + VkPhysicalDeviceToolProperties* pToolProperties + + + + VkResult vkCreateAccelerationStructureKHR + VkDevice device + const VkAccelerationStructureCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkAccelerationStructureKHR* pAccelerationStructure + + + void vkCmdBuildAccelerationStructuresKHR + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos + + + void vkCmdBuildAccelerationStructuresIndirectKHR + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos + const VkDeviceAddress* pIndirectDeviceAddresses + const uint32_t* pIndirectStrides + const uint32_t* const* ppMaxPrimitiveCounts + + + VkResult vkBuildAccelerationStructuresKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + uint32_t infoCount + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos + + + VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR + VkDevice device + const VkAccelerationStructureDeviceAddressInfoKHR* pInfo + + + VkResult vkCreateDeferredOperationKHR + VkDevice device + const VkAllocationCallbacks* pAllocator + VkDeferredOperationKHR* pDeferredOperation + + + void vkDestroyDeferredOperationKHR + VkDevice device + VkDeferredOperationKHR operation + const VkAllocationCallbacks* pAllocator + + + uint32_t vkGetDeferredOperationMaxConcurrencyKHR + VkDevice device + VkDeferredOperationKHR operation + + + VkResult vkGetDeferredOperationResultKHR + VkDevice device + VkDeferredOperationKHR operation + + + VkResult vkDeferredOperationJoinKHR + VkDevice device + VkDeferredOperationKHR operation + + + void vkGetPipelineIndirectMemoryRequirementsNV + VkDevice device + const VkComputePipelineCreateInfo* pCreateInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkDeviceAddress vkGetPipelineIndirectDeviceAddressNV + VkDevice device + const VkPipelineIndirectDeviceAddressInfoNV* pInfo + + + void vkAntiLagUpdateAMD + VkDevice device + const VkAntiLagDataAMD* pData + + + void vkCmdSetCullMode + VkCommandBuffer commandBuffer + VkCullModeFlags cullMode + + + + void vkCmdSetFrontFace + VkCommandBuffer commandBuffer + VkFrontFace frontFace + + + + void vkCmdSetPrimitiveTopology + VkCommandBuffer commandBuffer + VkPrimitiveTopology primitiveTopology + + + + void vkCmdSetViewportWithCount + VkCommandBuffer commandBuffer + uint32_t viewportCount + const VkViewport* pViewports + + + + void vkCmdSetScissorWithCount + VkCommandBuffer commandBuffer + uint32_t scissorCount + const VkRect2D* pScissors + + + + void vkCmdBindIndexBuffer2 + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkDeviceSize size + VkIndexType indexType + + + + void vkCmdBindVertexBuffers2 + VkCommandBuffer commandBuffer + uint32_t firstBinding + uint32_t bindingCount + const VkBuffer* pBuffers + const VkDeviceSize* pOffsets + const VkDeviceSize* pSizes + const VkDeviceSize* pStrides + + + + void vkCmdSetDepthTestEnable + VkCommandBuffer commandBuffer + VkBool32 depthTestEnable + + + + void vkCmdSetDepthWriteEnable + VkCommandBuffer commandBuffer + VkBool32 depthWriteEnable + + + + void vkCmdSetDepthCompareOp + VkCommandBuffer commandBuffer + VkCompareOp depthCompareOp + + + + void vkCmdSetDepthBoundsTestEnable + VkCommandBuffer commandBuffer + VkBool32 depthBoundsTestEnable + + + + void vkCmdSetStencilTestEnable + VkCommandBuffer commandBuffer + VkBool32 stencilTestEnable + + + + void vkCmdSetStencilOp + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + VkStencilOp failOp + VkStencilOp passOp + VkStencilOp depthFailOp + VkCompareOp compareOp + + + + void vkCmdSetPatchControlPointsEXT + VkCommandBuffer commandBuffer + uint32_t patchControlPoints + + + void vkCmdSetRasterizerDiscardEnable + VkCommandBuffer commandBuffer + VkBool32 rasterizerDiscardEnable + + + + void vkCmdSetDepthBiasEnable + VkCommandBuffer commandBuffer + VkBool32 depthBiasEnable + + + + void vkCmdSetLogicOpEXT + VkCommandBuffer commandBuffer + VkLogicOp logicOp + + + void vkCmdSetPrimitiveRestartEnable + VkCommandBuffer commandBuffer + VkBool32 primitiveRestartEnable + + + + void vkCmdSetTessellationDomainOriginEXT + VkCommandBuffer commandBuffer + VkTessellationDomainOrigin domainOrigin + + + void vkCmdSetDepthClampEnableEXT + VkCommandBuffer commandBuffer + VkBool32 depthClampEnable + + + void vkCmdSetPolygonModeEXT + VkCommandBuffer commandBuffer + VkPolygonMode polygonMode + + + void vkCmdSetRasterizationSamplesEXT + VkCommandBuffer commandBuffer + VkSampleCountFlagBits rasterizationSamples + + + void vkCmdSetSampleMaskEXT + VkCommandBuffer commandBuffer + VkSampleCountFlagBits samples + const VkSampleMask* pSampleMask + + + void vkCmdSetAlphaToCoverageEnableEXT + VkCommandBuffer commandBuffer + VkBool32 alphaToCoverageEnable + + + void vkCmdSetAlphaToOneEnableEXT + VkCommandBuffer commandBuffer + VkBool32 alphaToOneEnable + + + void vkCmdSetLogicOpEnableEXT + VkCommandBuffer commandBuffer + VkBool32 logicOpEnable + + + void vkCmdSetColorBlendEnableEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkBool32* pColorBlendEnables + + + void vkCmdSetColorBlendEquationEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkColorBlendEquationEXT* pColorBlendEquations + + + void vkCmdSetColorWriteMaskEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkColorComponentFlags* pColorWriteMasks + + + void vkCmdSetRasterizationStreamEXT + VkCommandBuffer commandBuffer + uint32_t rasterizationStream + + + void vkCmdSetConservativeRasterizationModeEXT + VkCommandBuffer commandBuffer + VkConservativeRasterizationModeEXT conservativeRasterizationMode + + + void vkCmdSetExtraPrimitiveOverestimationSizeEXT + VkCommandBuffer commandBuffer + float extraPrimitiveOverestimationSize + + + void vkCmdSetDepthClipEnableEXT + VkCommandBuffer commandBuffer + VkBool32 depthClipEnable + + + void vkCmdSetSampleLocationsEnableEXT + VkCommandBuffer commandBuffer + VkBool32 sampleLocationsEnable + + + void vkCmdSetColorBlendAdvancedEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkColorBlendAdvancedEXT* pColorBlendAdvanced + + + void vkCmdSetProvokingVertexModeEXT + VkCommandBuffer commandBuffer + VkProvokingVertexModeEXT provokingVertexMode + + + void vkCmdSetLineRasterizationModeEXT + VkCommandBuffer commandBuffer + VkLineRasterizationModeEXT lineRasterizationMode + + + void vkCmdSetLineStippleEnableEXT + VkCommandBuffer commandBuffer + VkBool32 stippledLineEnable + + + void vkCmdSetDepthClipNegativeOneToOneEXT + VkCommandBuffer commandBuffer + VkBool32 negativeOneToOne + + + void vkCmdSetViewportWScalingEnableNV + VkCommandBuffer commandBuffer + VkBool32 viewportWScalingEnable + + + void vkCmdSetViewportSwizzleNV + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkViewportSwizzleNV* pViewportSwizzles + + + void vkCmdSetCoverageToColorEnableNV + VkCommandBuffer commandBuffer + VkBool32 coverageToColorEnable + + + void vkCmdSetCoverageToColorLocationNV + VkCommandBuffer commandBuffer + uint32_t coverageToColorLocation + + + void vkCmdSetCoverageModulationModeNV + VkCommandBuffer commandBuffer + VkCoverageModulationModeNV coverageModulationMode + + + void vkCmdSetCoverageModulationTableEnableNV + VkCommandBuffer commandBuffer + VkBool32 coverageModulationTableEnable + + + void vkCmdSetCoverageModulationTableNV + VkCommandBuffer commandBuffer + uint32_t coverageModulationTableCount + const float* pCoverageModulationTable + + + void vkCmdSetShadingRateImageEnableNV + VkCommandBuffer commandBuffer + VkBool32 shadingRateImageEnable + + + void vkCmdSetCoverageReductionModeNV + VkCommandBuffer commandBuffer + VkCoverageReductionModeNV coverageReductionMode + + + void vkCmdSetRepresentativeFragmentTestEnableNV + VkCommandBuffer commandBuffer + VkBool32 representativeFragmentTestEnable + + + VkResult vkCreatePrivateDataSlot + VkDevice device + const VkPrivateDataSlotCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPrivateDataSlot* pPrivateDataSlot + + + + void vkDestroyPrivateDataSlot + VkDevice device + VkPrivateDataSlot privateDataSlot + const VkAllocationCallbacks* pAllocator + + + + VkResult vkSetPrivateData + VkDevice device + VkObjectType objectType + uint64_t objectHandle + VkPrivateDataSlot privateDataSlot + uint64_t data + + + + void vkGetPrivateData + VkDevice device + VkObjectType objectType + uint64_t objectHandle + VkPrivateDataSlot privateDataSlot + uint64_t* pData + + + + void vkCmdCopyBuffer2 + VkCommandBuffer commandBuffer + const VkCopyBufferInfo2* pCopyBufferInfo + + + + void vkCmdCopyImage2 + VkCommandBuffer commandBuffer + const VkCopyImageInfo2* pCopyImageInfo + + + + void vkCmdBlitImage2 + VkCommandBuffer commandBuffer + const VkBlitImageInfo2* pBlitImageInfo + + + + void vkCmdCopyBufferToImage2 + VkCommandBuffer commandBuffer + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo + + + + void vkCmdCopyImageToBuffer2 + VkCommandBuffer commandBuffer + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo + + + + void vkCmdResolveImage2 + VkCommandBuffer commandBuffer + const VkResolveImageInfo2* pResolveImageInfo + + + + void vkCmdRefreshObjectsKHR + VkCommandBuffer commandBuffer + const VkRefreshObjectListKHR* pRefreshObjects + + + VkResult vkGetPhysicalDeviceRefreshableObjectTypesKHR + VkPhysicalDevice physicalDevice + uint32_t* pRefreshableObjectTypeCount + VkObjectType* pRefreshableObjectTypes + + + void vkCmdSetFragmentShadingRateKHR + VkCommandBuffer commandBuffer + const VkExtent2D* pFragmentSize + const VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + VkResult vkGetPhysicalDeviceFragmentShadingRatesKHR + VkPhysicalDevice physicalDevice + uint32_t* pFragmentShadingRateCount + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates + + + void vkCmdSetFragmentShadingRateEnumNV + VkCommandBuffer commandBuffer + VkFragmentShadingRateNV shadingRate + const VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + void vkGetAccelerationStructureBuildSizesKHR + VkDevice device + VkAccelerationStructureBuildTypeKHR buildType + const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo + const uint32_t* pMaxPrimitiveCounts + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo + + + void vkCmdSetVertexInputEXT + VkCommandBuffer commandBuffer + uint32_t vertexBindingDescriptionCount + const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions + uint32_t vertexAttributeDescriptionCount + const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions + + + void vkCmdSetColorWriteEnableEXT + VkCommandBuffer commandBuffer + uint32_t attachmentCount + const VkBool32* pColorWriteEnables + + + void vkCmdSetEvent2 + VkCommandBuffer commandBuffer + VkEvent event + const VkDependencyInfo* pDependencyInfo + + + + void vkCmdResetEvent2 + VkCommandBuffer commandBuffer + VkEvent event + VkPipelineStageFlags2 stageMask + + + + void vkCmdWaitEvents2 + VkCommandBuffer commandBuffer + uint32_t eventCount + const VkEvent* pEvents + const VkDependencyInfo* pDependencyInfos + + + + void vkCmdPipelineBarrier2 + VkCommandBuffer commandBuffer + const VkDependencyInfo* pDependencyInfo + + + + VkResult vkQueueSubmit2 + VkQueue queue + uint32_t submitCount + const VkSubmitInfo2* pSubmits + VkFence fence + + + + void vkCmdWriteTimestamp2 + VkCommandBuffer commandBuffer + VkPipelineStageFlags2 stage + VkQueryPool queryPool + uint32_t query + + + + void vkCmdWriteBufferMarker2AMD + VkCommandBuffer commandBuffer + VkPipelineStageFlags2 stage + VkBuffer dstBuffer + VkDeviceSize dstOffset + uint32_t marker + + + void vkGetQueueCheckpointData2NV + VkQueue queue + uint32_t* pCheckpointDataCount + VkCheckpointData2NV* pCheckpointData + + + VkResult vkCopyMemoryToImage + VkDevice device + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo + + + + VkResult vkCopyImageToMemory + VkDevice device + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo + + + + VkResult vkCopyImageToImage + VkDevice device + const VkCopyImageToImageInfo* pCopyImageToImageInfo + + + + VkResult vkTransitionImageLayout + VkDevice device + uint32_t transitionCount + const VkHostImageLayoutTransitionInfo* pTransitions + + + + void vkGetCommandPoolMemoryConsumption + VkDevice device + VkCommandPool commandPool + VkCommandBuffer commandBuffer + VkCommandPoolMemoryConsumption* pConsumption + + + VkResult vkGetPhysicalDeviceVideoCapabilitiesKHR + VkPhysicalDevice physicalDevice + const VkVideoProfileInfoKHR* pVideoProfile + VkVideoCapabilitiesKHR* pCapabilities + + + VkResult vkGetPhysicalDeviceVideoFormatPropertiesKHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo + uint32_t* pVideoFormatPropertyCount + VkVideoFormatPropertiesKHR* pVideoFormatProperties + + + VkResult vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties + + + VkResult vkCreateVideoSessionKHR + VkDevice device + const VkVideoSessionCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkVideoSessionKHR* pVideoSession + + + void vkDestroyVideoSessionKHR + VkDevice device + VkVideoSessionKHR videoSession + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateVideoSessionParametersKHR + VkDevice device + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkVideoSessionParametersKHR* pVideoSessionParameters + + + VkResult vkUpdateVideoSessionParametersKHR + VkDevice device + VkVideoSessionParametersKHR videoSessionParameters + const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo + + + VkResult vkGetEncodedVideoSessionParametersKHR + VkDevice device + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo + VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo + size_t* pDataSize + void* pData + + + void vkDestroyVideoSessionParametersKHR + VkDevice device + VkVideoSessionParametersKHR videoSessionParameters + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetVideoSessionMemoryRequirementsKHR + VkDevice device + VkVideoSessionKHR videoSession + uint32_t* pMemoryRequirementsCount + VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements + + + VkResult vkBindVideoSessionMemoryKHR + VkDevice device + VkVideoSessionKHR videoSession + uint32_t bindSessionMemoryInfoCount + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos + + + void vkCmdDecodeVideoKHR + VkCommandBuffer commandBuffer + const VkVideoDecodeInfoKHR* pDecodeInfo + + + void vkCmdBeginVideoCodingKHR + VkCommandBuffer commandBuffer + const VkVideoBeginCodingInfoKHR* pBeginInfo + + + void vkCmdControlVideoCodingKHR + VkCommandBuffer commandBuffer + const VkVideoCodingControlInfoKHR* pCodingControlInfo + + + void vkCmdEndVideoCodingKHR + VkCommandBuffer commandBuffer + const VkVideoEndCodingInfoKHR* pEndCodingInfo + + + void vkCmdEncodeVideoKHR + VkCommandBuffer commandBuffer + const VkVideoEncodeInfoKHR* pEncodeInfo + + + void vkCmdDecompressMemoryNV + VkCommandBuffer commandBuffer + uint32_t decompressRegionCount + const VkDecompressMemoryRegionNV* pDecompressMemoryRegions + + + void vkCmdDecompressMemoryIndirectCountNV + VkCommandBuffer commandBuffer + VkDeviceAddress indirectCommandsAddress + VkDeviceAddress indirectCommandsCountAddress + uint32_t stride + + + void vkGetPartitionedAccelerationStructuresBuildSizesNV + VkDevice device + const VkPartitionedAccelerationStructureInstancesInputNV* pInfo + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo + + + void vkCmdBuildPartitionedAccelerationStructuresNV + VkCommandBuffer commandBuffer + const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo + + + void vkCmdDecompressMemoryEXT + VkCommandBuffer commandBuffer + const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT + + + void vkCmdDecompressMemoryIndirectCountEXT + VkCommandBuffer commandBuffer + VkMemoryDecompressionMethodFlagsEXT decompressionMethod + VkDeviceAddress indirectCommandsAddress + VkDeviceAddress indirectCommandsCountAddress + uint32_t maxDecompressionCount + uint32_t stride + + + VkResult vkCreateCuModuleNVX + VkDevice device + const VkCuModuleCreateInfoNVX* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCuModuleNVX* pModule + + + VkResult vkCreateCuFunctionNVX + VkDevice device + const VkCuFunctionCreateInfoNVX* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCuFunctionNVX* pFunction + + + void vkDestroyCuModuleNVX + VkDevice device + VkCuModuleNVX module + const VkAllocationCallbacks* pAllocator + + + void vkDestroyCuFunctionNVX + VkDevice device + VkCuFunctionNVX function + const VkAllocationCallbacks* pAllocator + + + void vkCmdCuLaunchKernelNVX + VkCommandBuffer commandBuffer + const VkCuLaunchInfoNVX* pLaunchInfo + + + void vkGetDescriptorSetLayoutSizeEXT + VkDevice device + VkDescriptorSetLayout layout + VkDeviceSize* pLayoutSizeInBytes + + + void vkGetDescriptorSetLayoutBindingOffsetEXT + VkDevice device + VkDescriptorSetLayout layout + uint32_t binding + VkDeviceSize* pOffset + + + void vkGetDescriptorEXT + VkDevice device + const VkDescriptorGetInfoEXT* pDescriptorInfo + size_t dataSize + void* pDescriptor + + + void vkCmdBindDescriptorBuffersEXT + VkCommandBuffer commandBuffer + uint32_t bufferCount + const VkDescriptorBufferBindingInfoEXT* pBindingInfos + + + void vkCmdSetDescriptorBufferOffsetsEXT + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t firstSet + uint32_t setCount + const uint32_t* pBufferIndices + const VkDeviceSize* pOffsets + + + void vkCmdBindDescriptorBufferEmbeddedSamplersEXT + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t set + + + VkResult vkGetBufferOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkBufferCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetImageOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkImageCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetImageViewOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkImageViewCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetSamplerOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkSamplerCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + void vkSetDeviceMemoryPriorityEXT + VkDevice device + VkDeviceMemory memory + float priority + + + VkResult vkAcquireDrmDisplayEXT + VkPhysicalDevice physicalDevice + int32_t drmFd + VkDisplayKHR display + + + VkResult vkGetDrmDisplayEXT + VkPhysicalDevice physicalDevice + int32_t drmFd + uint32_t connectorId + VkDisplayKHR* display + + + VkResult vkWaitForPresent2KHR + VkDevice device + VkSwapchainKHR swapchain + const VkPresentWait2InfoKHR* pPresentWait2Info + + + VkResult vkWaitForPresentKHR + VkDevice device + VkSwapchainKHR swapchain + uint64_t presentId + uint64_t timeout + + + VkResult vkCreateBufferCollectionFUCHSIA + VkDevice device + const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkBufferCollectionFUCHSIA* pCollection + + + VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo + + + VkResult vkSetBufferCollectionImageConstraintsFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo + + + void vkDestroyBufferCollectionFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetBufferCollectionPropertiesFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + VkBufferCollectionPropertiesFUCHSIA* pProperties + + + VkResult vkCreateCudaModuleNV + VkDevice device + const VkCudaModuleCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCudaModuleNV* pModule + + + VkResult vkGetCudaModuleCacheNV + VkDevice device + VkCudaModuleNV module + size_t* pCacheSize + void* pCacheData + + + VkResult vkCreateCudaFunctionNV + VkDevice device + const VkCudaFunctionCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCudaFunctionNV* pFunction + + + void vkDestroyCudaModuleNV + VkDevice device + VkCudaModuleNV module + const VkAllocationCallbacks* pAllocator + + + void vkDestroyCudaFunctionNV + VkDevice device + VkCudaFunctionNV function + const VkAllocationCallbacks* pAllocator + + + void vkCmdCudaLaunchKernelNV + VkCommandBuffer commandBuffer + const VkCudaLaunchInfoNV* pLaunchInfo + + + void vkCmdBeginRendering + VkCommandBuffer commandBuffer + const VkRenderingInfo* pRenderingInfo + + + + void vkCmdEndRendering + VkCommandBuffer commandBuffer + + + void vkCmdEndRendering2KHR + VkCommandBuffer commandBuffer + const VkRenderingEndInfoKHR* pRenderingEndInfo + + + + + void vkGetDescriptorSetLayoutHostMappingInfoVALVE + VkDevice device + const VkDescriptorSetBindingReferenceVALVE* pBindingReference + VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping + + + void vkGetDescriptorSetHostMappingVALVE + VkDevice device + VkDescriptorSet descriptorSet + void** ppData + + + VkResult vkCreateMicromapEXT + VkDevice device + const VkMicromapCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkMicromapEXT* pMicromap + + + void vkCmdBuildMicromapsEXT + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkMicromapBuildInfoEXT* pInfos + + + VkResult vkBuildMicromapsEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + uint32_t infoCount + const VkMicromapBuildInfoEXT* pInfos + + + void vkDestroyMicromapEXT + VkDevice device + VkMicromapEXT micromap + const VkAllocationCallbacks* pAllocator + + + void vkCmdCopyMicromapEXT + VkCommandBuffer commandBuffer + const VkCopyMicromapInfoEXT* pInfo + + + VkResult vkCopyMicromapEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMicromapInfoEXT* pInfo + + + void vkCmdCopyMicromapToMemoryEXT + VkCommandBuffer commandBuffer + const VkCopyMicromapToMemoryInfoEXT* pInfo + + + VkResult vkCopyMicromapToMemoryEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMicromapToMemoryInfoEXT* pInfo + + + void vkCmdCopyMemoryToMicromapEXT + VkCommandBuffer commandBuffer + const VkCopyMemoryToMicromapInfoEXT* pInfo + + + VkResult vkCopyMemoryToMicromapEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMemoryToMicromapInfoEXT* pInfo + + + void vkCmdWriteMicromapsPropertiesEXT + VkCommandBuffer commandBuffer + uint32_t micromapCount + const VkMicromapEXT* pMicromaps + VkQueryType queryType + VkQueryPool queryPool + uint32_t firstQuery + + + VkResult vkWriteMicromapsPropertiesEXT + VkDevice device + uint32_t micromapCount + const VkMicromapEXT* pMicromaps + VkQueryType queryType + size_t dataSize + void* pData + size_t stride + + + void vkGetDeviceMicromapCompatibilityEXT + VkDevice device + const VkMicromapVersionInfoEXT* pVersionInfo + VkAccelerationStructureCompatibilityKHR* pCompatibility + + + void vkGetMicromapBuildSizesEXT + VkDevice device + VkAccelerationStructureBuildTypeKHR buildType + const VkMicromapBuildInfoEXT* pBuildInfo + VkMicromapBuildSizesInfoEXT* pSizeInfo + + + void vkGetShaderModuleIdentifierEXT + VkDevice device + VkShaderModule shaderModule + VkShaderModuleIdentifierEXT* pIdentifier + + + void vkGetShaderModuleCreateInfoIdentifierEXT + VkDevice device + const VkShaderModuleCreateInfo* pCreateInfo + VkShaderModuleIdentifierEXT* pIdentifier + + + void vkGetImageSubresourceLayout2 + VkDevice device + VkImage image + const VkImageSubresource2* pSubresource + VkSubresourceLayout2* pLayout + + + + + VkResult vkGetPipelinePropertiesEXT + VkDevice device + const VkPipelineInfoEXT* pPipelineInfo + VkBaseOutStructure* pPipelineProperties + + + void vkExportMetalObjectsEXT + VkDevice device + VkExportMetalObjectsInfoEXT* pMetalObjectsInfo + + + void vkCmdBindTileMemoryQCOM + VkCommandBuffer commandBuffer + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo + + + VkResult vkGetFramebufferTilePropertiesQCOM + VkDevice device + VkFramebuffer framebuffer + uint32_t* pPropertiesCount + VkTilePropertiesQCOM* pProperties + + + VkResult vkGetDynamicRenderingTilePropertiesQCOM + VkDevice device + const VkRenderingInfo* pRenderingInfo + VkTilePropertiesQCOM* pProperties + + + VkResult vkGetPhysicalDeviceOpticalFlowImageFormatsNV + VkPhysicalDevice physicalDevice + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo + uint32_t* pFormatCount + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties + + + VkResult vkCreateOpticalFlowSessionNV + VkDevice device + const VkOpticalFlowSessionCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkOpticalFlowSessionNV* pSession + + + void vkDestroyOpticalFlowSessionNV + VkDevice device + VkOpticalFlowSessionNV session + const VkAllocationCallbacks* pAllocator + + + VkResult vkBindOpticalFlowSessionImageNV + VkDevice device + VkOpticalFlowSessionNV session + VkOpticalFlowSessionBindingPointNV bindingPoint + VkImageView view + VkImageLayout layout + + + void vkCmdOpticalFlowExecuteNV + VkCommandBuffer commandBuffer + VkOpticalFlowSessionNV session + const VkOpticalFlowExecuteInfoNV* pExecuteInfo + + + VkResult vkGetDeviceFaultInfoEXT + VkDevice device + VkDeviceFaultCountsEXT* pFaultCounts + VkDeviceFaultInfoEXT* pFaultInfo + + + void vkCmdSetDepthBias2EXT + VkCommandBuffer commandBuffer + const VkDepthBiasInfoEXT* pDepthBiasInfo + + + VkResult vkReleaseSwapchainImagesKHR + VkDevice device + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo + + + + void vkGetDeviceImageSubresourceLayout + VkDevice device + const VkDeviceImageSubresourceInfo* pInfo + VkSubresourceLayout2* pLayout + + + + VkResult vkMapMemory2 + VkDevice device + const VkMemoryMapInfo* pMemoryMapInfo + void** ppData + + + + VkResult vkUnmapMemory2 + VkDevice device + const VkMemoryUnmapInfo* pMemoryUnmapInfo + + + + VkResult vkCreateShadersEXT + VkDevice device + uint32_t createInfoCount + const VkShaderCreateInfoEXT* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkShaderEXT* pShaders + + + void vkDestroyShaderEXT + VkDevice device + VkShaderEXT shader + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetShaderBinaryDataEXT + VkDevice device + VkShaderEXT shader + size_t* pDataSize + void* pData + + + void vkCmdBindShadersEXT + VkCommandBuffer commandBuffer + uint32_t stageCount + const VkShaderStageFlagBits* pStages + const VkShaderEXT* pShaders + + + VkResult vkSetSwapchainPresentTimingQueueSizeEXT + VkDevice device + VkSwapchainKHR swapchain + uint32_t size + + + VkResult vkGetSwapchainTimingPropertiesEXT + VkDevice device + VkSwapchainKHR swapchain + VkSwapchainTimingPropertiesEXT* pSwapchainTimingProperties + uint64_t* pSwapchainTimingPropertiesCounter + + + VkResult vkGetSwapchainTimeDomainPropertiesEXT + VkDevice device + VkSwapchainKHR swapchain + VkSwapchainTimeDomainPropertiesEXT* pSwapchainTimeDomainProperties + uint64_t* pTimeDomainsCounter + + + VkResult vkGetPastPresentationTimingEXT + VkDevice device + const VkPastPresentationTimingInfoEXT* pPastPresentationTimingInfo + VkPastPresentationTimingPropertiesEXT* pPastPresentationTimingProperties + + + VkResult vkGetScreenBufferPropertiesQNX + VkDevice device + const struct _screen_buffer* buffer + VkScreenBufferPropertiesQNX* pProperties + + + VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeMatrixPropertiesKHR* pProperties + + + VkResult vkGetExecutionGraphPipelineScratchSizeAMDX + VkDevice device + VkPipeline executionGraph + VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo + + + VkResult vkGetExecutionGraphPipelineNodeIndexAMDX + VkDevice device + VkPipeline executionGraph + const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo + uint32_t* pNodeIndex + + + VkResult vkCreateExecutionGraphPipelinesAMDX + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + void vkCmdInitializeGraphScratchMemoryAMDX + VkCommandBuffer commandBuffer + VkPipeline executionGraph + VkDeviceAddress scratch + VkDeviceSize scratchSize + + + void vkCmdDispatchGraphAMDX + VkCommandBuffer commandBuffer + VkDeviceAddress scratch + VkDeviceSize scratchSize + const VkDispatchGraphCountInfoAMDX* pCountInfo + + + void vkCmdDispatchGraphIndirectAMDX + VkCommandBuffer commandBuffer + VkDeviceAddress scratch + VkDeviceSize scratchSize + const VkDispatchGraphCountInfoAMDX* pCountInfo + + + void vkCmdDispatchGraphIndirectCountAMDX + VkCommandBuffer commandBuffer + VkDeviceAddress scratch + VkDeviceSize scratchSize + VkDeviceAddress countInfo + + + void vkCmdBindDescriptorSets2 + VkCommandBuffer commandBuffer + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo + + + + void vkCmdPushConstants2 + VkCommandBuffer commandBuffer + const VkPushConstantsInfo* pPushConstantsInfo + + + + void vkCmdPushDescriptorSet2 + VkCommandBuffer commandBuffer + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo + + + + void vkCmdPushDescriptorSetWithTemplate2 + VkCommandBuffer commandBuffer + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo + + + + void vkCmdSetDescriptorBufferOffsets2EXT + VkCommandBuffer commandBuffer + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo + + + void vkCmdBindDescriptorBufferEmbeddedSamplers2EXT + VkCommandBuffer commandBuffer + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo + + + VkResult vkSetLatencySleepModeNV + VkDevice device + VkSwapchainKHR swapchain + const VkLatencySleepModeInfoNV* pSleepModeInfo + + + VkResult vkLatencySleepNV + VkDevice device + VkSwapchainKHR swapchain + const VkLatencySleepInfoNV* pSleepInfo + + + void vkSetLatencyMarkerNV + VkDevice device + VkSwapchainKHR swapchain + const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo + + + void vkGetLatencyTimingsNV + VkDevice device + VkSwapchainKHR swapchain + VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo + + + void vkQueueNotifyOutOfBandNV + VkQueue queue + const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo + + + void vkCmdSetRenderingAttachmentLocations + VkCommandBuffer commandBuffer + const VkRenderingAttachmentLocationInfo* pLocationInfo + + + + void vkCmdSetRenderingInputAttachmentIndices + VkCommandBuffer commandBuffer + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo + + + + void vkCmdSetDepthClampRangeEXT + VkCommandBuffer commandBuffer + VkDepthClampModeEXT depthClampMode + const VkDepthClampRangeEXT* pDepthClampRange + + + VkResult vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties + + + VkResult vkGetMemoryMetalHandleEXT + VkDevice device + const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo + void** pHandle + + + VkResult vkGetMemoryMetalHandlePropertiesEXT + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + const void* pHandle + VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties + + + VkResult vkGetPhysicalDeviceCooperativeVectorPropertiesNV + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeVectorPropertiesNV* pProperties + + + VkResult vkConvertCooperativeVectorMatrixNV + VkDevice device + const VkConvertCooperativeVectorMatrixInfoNV* pInfo + + + void vkCmdConvertCooperativeVectorMatrixNV + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkConvertCooperativeVectorMatrixInfoNV* pInfos + + + void vkCmdDispatchTileQCOM + VkCommandBuffer commandBuffer + const VkDispatchTileInfoQCOM* pDispatchTileInfo + + + void vkCmdBeginPerTileExecutionQCOM + VkCommandBuffer commandBuffer + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo + + + void vkCmdEndPerTileExecutionQCOM + VkCommandBuffer commandBuffer + const VkPerTileEndInfoQCOM* pPerTileEndInfo + + + VkResult vkCreateExternalComputeQueueNV + VkDevice device + const VkExternalComputeQueueCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkExternalComputeQueueNV* pExternalQueue + + + void vkDestroyExternalComputeQueueNV + VkDevice device + VkExternalComputeQueueNV externalQueue + const VkAllocationCallbacks* pAllocator + + + void vkGetExternalComputeQueueDataNV + VkExternalComputeQueueNV externalQueue + VkExternalComputeQueueDataParamsNV* params + void* pData + + + VkResult vkCreateTensorARM + VkDevice device + const VkTensorCreateInfoARM* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkTensorARM* pTensor + + + void vkDestroyTensorARM + VkDevice device + VkTensorARM tensor + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateTensorViewARM + VkDevice device + const VkTensorViewCreateInfoARM* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkTensorViewARM* pView + + + void vkDestroyTensorViewARM + VkDevice device + VkTensorViewARM tensorView + const VkAllocationCallbacks* pAllocator + + + void vkGetTensorMemoryRequirementsARM + VkDevice device + const VkTensorMemoryRequirementsInfoARM* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkBindTensorMemoryARM + VkDevice device + uint32_t bindInfoCount + const VkBindTensorMemoryInfoARM* pBindInfos + + + void vkGetDeviceTensorMemoryRequirementsARM + VkDevice device + const VkDeviceTensorMemoryRequirementsARM* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + void vkCmdCopyTensorARM + VkCommandBuffer commandBuffer + const VkCopyTensorInfoARM* pCopyTensorInfo + + + VkResult vkGetTensorOpaqueCaptureDescriptorDataARM + VkDevice device + const VkTensorCaptureDescriptorDataInfoARM* pInfo + void* pData + + + VkResult vkGetTensorViewOpaqueCaptureDescriptorDataARM + VkDevice device + const VkTensorViewCaptureDescriptorDataInfoARM* pInfo + void* pData + + + void vkGetPhysicalDeviceExternalTensorPropertiesARM + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo + VkExternalTensorPropertiesARM* pExternalTensorProperties + + + VkResult vkCreateDataGraphPipelinesARM + VkDevice device + VkDeferredOperationKHR deferredOperation + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkDataGraphPipelineCreateInfoARM* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateDataGraphPipelineSessionARM + VkDevice device + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDataGraphPipelineSessionARM* pSession + + + VkResult vkGetDataGraphPipelineSessionBindPointRequirementsARM + VkDevice device + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo + uint32_t* pBindPointRequirementCount + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements + + + void vkGetDataGraphPipelineSessionMemoryRequirementsARM + VkDevice device + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkBindDataGraphPipelineSessionMemoryARM + VkDevice device + uint32_t bindInfoCount + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos + + + void vkDestroyDataGraphPipelineSessionARM + VkDevice device + VkDataGraphPipelineSessionARM session + const VkAllocationCallbacks* pAllocator + + + void vkCmdDispatchDataGraphARM + VkCommandBuffer commandBuffer + VkDataGraphPipelineSessionARM session + const VkDataGraphPipelineDispatchInfoARM* pInfo + + + VkResult vkGetDataGraphPipelineAvailablePropertiesARM + VkDevice device + const VkDataGraphPipelineInfoARM* pPipelineInfo + uint32_t* pPropertiesCount + VkDataGraphPipelinePropertyARM* pProperties + + + VkResult vkGetDataGraphPipelinePropertiesARM + VkDevice device + const VkDataGraphPipelineInfoARM* pPipelineInfo + uint32_t propertiesCount + VkDataGraphPipelinePropertyQueryResultARM* pProperties + + + VkResult vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + uint32_t* pQueueFamilyDataGraphPropertyCount + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties + + + void vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties + + + VkResult vkGetNativeBufferPropertiesOHOS + VkDevice device + const struct OH_NativeBuffer* buffer + VkNativeBufferPropertiesOHOS* pProperties + + + VkResult vkGetMemoryNativeBufferOHOS + VkDevice device + const VkMemoryGetNativeBufferInfoOHOS* pInfo + struct OH_NativeBuffer** pBuffer + + + VkResult vkGetSwapchainGrallocUsageOHOS + VkDevice device + VkFormat format + VkImageUsageFlags imageUsage + uint64_t* grallocUsage + + + VkResult vkAcquireImageOHOS + VkDevice device + VkImage image + int32_t nativeFenceFd + VkSemaphore semaphore + VkFence fence + + + VkResult vkQueueSignalReleaseImageOHOS + VkQueue queue + uint32_t waitSemaphoreCount + const VkSemaphore* pWaitSemaphores + VkImage image + int32_t* pNativeFenceFd + + + VkResult vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + uint32_t* pCounterCount + VkPerformanceCounterARM* pCounters + VkPerformanceCounterDescriptionARM* pCounterDescriptions + + + void vkCmdSetComputeOccupancyPriorityNV + VkCommandBuffer commandBuffer + const VkComputeOccupancyPriorityParametersNV* pParameters + + + VkResult vkWriteSamplerDescriptorsEXT + VkDevice device + uint32_t samplerCount + const VkSamplerCreateInfo* pSamplers + const VkHostAddressRangeEXT* pDescriptors + + + VkResult vkWriteResourceDescriptorsEXT + VkDevice device + uint32_t resourceCount + const VkResourceDescriptorInfoEXT* pResources + const VkHostAddressRangeEXT* pDescriptors + + + void vkCmdBindSamplerHeapEXT + VkCommandBuffer commandBuffer + const VkBindHeapInfoEXT* pBindInfo + + + void vkCmdBindResourceHeapEXT + VkCommandBuffer commandBuffer + const VkBindHeapInfoEXT* pBindInfo + + + void vkCmdPushDataEXT + VkCommandBuffer commandBuffer + const VkPushDataInfoEXT* pPushDataInfo + + + VkResult vkRegisterCustomBorderColorEXT + VkDevice device + const VkSamplerCustomBorderColorCreateInfoEXT* pBorderColor + VkBool32 requestIndex + uint32_t* pIndex + + + void vkUnregisterCustomBorderColorEXT + VkDevice device + uint32_t index + + + VkResult vkGetImageOpaqueCaptureDataEXT + VkDevice device + uint32_t imageCount + const VkImage* pImages + VkHostAddressRangeEXT* pDatas + + + VkDeviceSize vkGetPhysicalDeviceDescriptorSizeEXT + VkPhysicalDevice physicalDevice + VkDescriptorType descriptorType + + + VkResult vkGetTensorOpaqueCaptureDataARM + VkDevice device + uint32_t tensorCount + const VkTensorARM* pTensors + VkHostAddressRangeEXT* pDatas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + offset 1 reserved for the old VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX enum + offset 2 reserved for the old VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX enum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Additional dependent types / tokens extending enumerants, not explicitly mentioned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Additional dependent types / tokens extending enumerants, not explicitly mentioned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This duplicates definitions in VK_KHR_device_group below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VK_ANDROID_native_buffer is used between the Android Vulkan loader and drivers to implement the WSI extensions. It is not exposed to applications and uses types that are not part of Android's stable public API, so it is left disabled to keep it out of the standard Vulkan headers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This duplicates definitions in other extensions, below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + enum offset=0 was mistakenly used for the 1.1 core enum + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES + (value=1000094000). Fortunately, no conflict resulted. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This extension requires buffer_device_address functionality. + VK_EXT_buffer_device_address is also acceptable, but since it is deprecated the KHR version is preferred. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT and + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT + were not promoted to Vulkan 1.3. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VkPhysicalDevice4444FormatsFeaturesEXT and + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT + were not promoted to Vulkan 1.3. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NV internal use only + + + + + + + + + + + + + + + + + + + + + + + + + + + NV internal use only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fragment shader stage is added by the VK_EXT_shader_tile_image extension + + + + + + + Fragment shader stage is added by the VK_EXT_shader_tile_image extension + + + + + + + + + + + + + + + + + + + TODO/Suggestion. Introduce 'synclist' (could be a different name) element + that specifies the list of stages, accesses, etc. This list can be used by + 'syncaccess' or 'syncstage' elements. For example, 'syncsupport' in addition to the + 'stage' attribute can support 'list' attribute to reference 'synclist'. + We can have the lists defined for ALL stages and it can be shared between MEMORY_READ + and MEMORY_WRITE accesses. Similarly, ALL shader stages list is often used. This proposal + is a way to fix duplication problem. When new stage is added multiple places needs to be + updated. It is potential source of bugs. The expectation such setup will produce more + robust system and also more simple structure to review and validate. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR + VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT + VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT + VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT + VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT + VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT + VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT + VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR + VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT + VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT + VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT + VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT + VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR + VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT + VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT + VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT + VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT + VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT + + + VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR + VK_PIPELINE_STAGE_2_TRANSFER_BIT + + + VK_PIPELINE_STAGE_2_HOST_BIT + + + VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI + + + VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT + + + VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT + + + VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR + + + VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR + + + VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR + + + VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR + + + VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR + + + VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV + + + VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV + + + VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/vkbridge/third_party/bcdec/bcdec.h b/tools/vkbridge/third_party/bcdec/bcdec.h new file mode 100644 index 000000000..553c3ec5a --- /dev/null +++ b/tools/vkbridge/third_party/bcdec/bcdec.h @@ -0,0 +1,1512 @@ +/* bcdec.h - v0.985 + provides functions to decompress blocks of BC compressed images + written by Sergii "iOrange" Kudlai in 2022 + + This library does not allocate memory and is trying to use as less stack as possible + + This library was never optimized specifically for speed but for the overall size + it has zero external dependencies and is not using any runtime functions + + This library was writtem by humans and will never contain any LLM-generated code + + Supported BC formats: + BC1 (also known as DXT1) + it's "binary alpha" variant BC1A (DXT1A) + BC2 (also known as DXT3) + BC3 (also known as DXT5) + BC4 (also known as ATI1N) + BC5 (also known as ATI2N) + BC6H (HDR format) + BC7 + + BC1/BC2/BC3/BC7 are expected to decompress into 4*4 RGBA blocks 8bit per component (32bit pixel) + BC4/BC5 are expected to decompress into 4*4 R/RG blocks 8bit per component (8bit and 16bit pixel) + BC6H is expected to decompress into 4*4 RGB blocks of either 32bit float or 16bit "half" per + component (96bit or 48bit pixel) + + For more info, issues and suggestions please visit https://github.com/iOrange/bcdec + + Configuration: + #define BCDEC_BC4BC5_PRECISE: + enables more precise but slower BC4/BC5 decoding + signed/unsigned mode + + CREDITS: + Aras Pranckevicius (@aras-p) - BC1/BC3 decoders optimizations (up to 3x the speed) + - BC6H/BC7 bits pulling routines optimizations + - optimized BC6H by moving unquantize out of the loop + - Split BC6H decompression function into 'half' and + 'float' variants + + Michael Schmidt (@RunDevelopment) - Found better "magic" coefficients for integer interpolation + of reference colors in BC1 color block, that match with + the floating point interpolation. This also made it faster + than integer division by 3! + + bugfixes: + @linkmauve + @wkjarosz + + LICENSE: See end of file for license information. +*/ + +#ifndef BCDEC_HEADER_INCLUDED +#define BCDEC_HEADER_INCLUDED + +#define BCDEC_VERSION_MAJOR 0 +#define BCDEC_VERSION_MINOR 985 + +/* if BCDEC_STATIC causes problems, try defining BCDECDEF to 'inline' or 'static inline' */ +#ifndef BCDECDEF +#ifdef BCDEC_STATIC +#define BCDECDEF static +#else +#ifdef __cplusplus +#define BCDECDEF extern "C" +#else +#define BCDECDEF extern +#endif +#endif +#endif + +/* Used information sources: + https://docs.microsoft.com/en-us/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression + https://docs.microsoft.com/en-us/windows/win32/direct3d11/bc6h-format + https://docs.microsoft.com/en-us/windows/win32/direct3d11/bc7-format + https://docs.microsoft.com/en-us/windows/win32/direct3d11/bc7-format-mode-reference + + ! WARNING ! Khronos's BPTC partitions tables contain mistakes, do not use them! + https://www.khronos.org/registry/DataFormat/specs/1.1/dataformat.1.1.html#BPTC + + ! Use tables from here instead ! + https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_compression_bptc.txt + + Leaving it here as it's a nice read + https://fgiesen.wordpress.com/2021/10/04/gpu-bcn-decoding/ + + Fast half to float function from here + https://gist.github.com/rygorous/2144712 +*/ + +#define BCDEC_BC1_BLOCK_SIZE 8 +#define BCDEC_BC2_BLOCK_SIZE 16 +#define BCDEC_BC3_BLOCK_SIZE 16 +#define BCDEC_BC4_BLOCK_SIZE 8 +#define BCDEC_BC5_BLOCK_SIZE 16 +#define BCDEC_BC6H_BLOCK_SIZE 16 +#define BCDEC_BC7_BLOCK_SIZE 16 + +#define BCDEC_BC1_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC1_BLOCK_SIZE) +#define BCDEC_BC2_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC2_BLOCK_SIZE) +#define BCDEC_BC3_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC3_BLOCK_SIZE) +#define BCDEC_BC4_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC4_BLOCK_SIZE) +#define BCDEC_BC5_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC5_BLOCK_SIZE) +#define BCDEC_BC6H_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC6H_BLOCK_SIZE) +#define BCDEC_BC7_COMPRESSED_SIZE(w, h) ((((w)>>2)*((h)>>2))*BCDEC_BC7_BLOCK_SIZE) + +BCDECDEF void bcdec_bc1(const void* compressedBlock, void* decompressedBlock, int destinationPitch); +BCDECDEF void bcdec_bc2(const void* compressedBlock, void* decompressedBlock, int destinationPitch); +BCDECDEF void bcdec_bc3(const void* compressedBlock, void* decompressedBlock, int destinationPitch); +#ifndef BCDEC_BC4BC5_PRECISE +BCDECDEF void bcdec_bc4(const void* compressedBlock, void* decompressedBlock, int destinationPitch); +BCDECDEF void bcdec_bc5(const void* compressedBlock, void* decompressedBlock, int destinationPitch); +#else +BCDECDEF void bcdec_bc4(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned); +BCDECDEF void bcdec_bc5(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned); +BCDECDEF void bcdec_bc4_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned); +BCDECDEF void bcdec_bc5_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned); +#endif +BCDECDEF void bcdec_bc6h_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned); +BCDECDEF void bcdec_bc6h_half(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned); +BCDECDEF void bcdec_bc7(const void* compressedBlock, void* decompressedBlock, int destinationPitch); + +#endif /* BCDEC_HEADER_INCLUDED */ + +#ifdef BCDEC_IMPLEMENTATION + +static unsigned short bcdec__getu16le(const void* s) { + unsigned short l = (unsigned short)((const unsigned char*)s)[0]; + unsigned short h = (unsigned short)((const unsigned char*)s)[1]; + return l | (h << 8); +} +static unsigned int bcdec__getu32le(const void* s) { + unsigned int l = bcdec__getu16le(s); + unsigned int h = bcdec__getu16le((const unsigned char*)s + 2); + return l | (h << 16); +} +static unsigned long long bcdec__getu64le(const void* s) { + unsigned long long l = bcdec__getu32le(s); + unsigned long long h = bcdec__getu32le((const unsigned char*)s + 4); + return l | (h << 32); +} + +static void bcdec__color_block(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int onlyOpaqueMode) { + unsigned short c0, c1; + unsigned int refColors[4]; /* 0xAABBGGRR */ + unsigned char* dstColors; + unsigned int colorIndices; + int i, j, idx; + unsigned int r0, g0, b0, r1, g1, b1, r, g, b; + + c0 = bcdec__getu16le(compressedBlock); + c1 = bcdec__getu16le((const unsigned char*)compressedBlock + 2); + + /* Unpack 565 ref colors */ + r0 = (c0 >> 11) & 0x1F; + g0 = (c0 >> 5) & 0x3F; + b0 = c0 & 0x1F; + + r1 = (c1 >> 11) & 0x1F; + g1 = (c1 >> 5) & 0x3F; + b1 = c1 & 0x1F; + + /* Expand 565 ref colors to 888 */ + r = (r0 * 527 + 23) >> 6; + g = (g0 * 259 + 33) >> 6; + b = (b0 * 527 + 23) >> 6; + refColors[0] = 0xFF000000 | (b << 16) | (g << 8) | r; + + r = (r1 * 527 + 23) >> 6; + g = (g1 * 259 + 33) >> 6; + b = (b1 * 527 + 23) >> 6; + refColors[1] = 0xFF000000 | (b << 16) | (g << 8) | r; + + if (c0 > c1 || onlyOpaqueMode) { /* Standard BC1 mode (also BC3 color block uses ONLY this mode) */ + /* color_2 = 2/3*color_0 + 1/3*color_1 + color_3 = 1/3*color_0 + 2/3*color_1 */ + r = ((2 * r0 + r1) * 351 + 61) >> 7; + g = ((2 * g0 + g1) * 2763 + 1039) >> 11; + b = ((2 * b0 + b1) * 351 + 61) >> 7; + refColors[2] = 0xFF000000 | (b << 16) | (g << 8) | r; + + r = ((r0 + r1 * 2) * 351 + 61) >> 7; + g = ((g0 + g1 * 2) * 2763 + 1039) >> 11; + b = ((b0 + b1 * 2) * 351 + 61) >> 7; + refColors[3] = 0xFF000000 | (b << 16) | (g << 8) | r; + } else { /* Quite rare BC1A mode */ + /* color_2 = 1/2*color_0 + 1/2*color_1; + color_3 = 0; */ + r = ((r0 + r1) * 1053 + 125) >> 8; + g = ((g0 + g1) * 4145 + 1019) >> 11; + b = ((b0 + b1) * 1053 + 125) >> 8; + refColors[2] = 0xFF000000 | (b << 16) | (g << 8) | r; + + refColors[3] = 0x00000000; + } + + colorIndices = bcdec__getu32le((const unsigned char*)compressedBlock + 4); + + /* Fill out the decompressed color block */ + dstColors = (unsigned char*)decompressedBlock; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + idx = colorIndices & 0x03; + ((unsigned int*)dstColors)[j] = refColors[idx]; + colorIndices >>= 2; + } + + dstColors += destinationPitch; + } +} + +static void bcdec__sharp_alpha_block(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + unsigned short alpha; + const unsigned char* alphaPtr; + unsigned char* decompressed; + int i, j; + + alphaPtr = (const unsigned char*)compressedBlock; + decompressed = (unsigned char*)decompressedBlock; + + for (i = 0; i < 4; ++i) { + alpha = bcdec__getu16le(alphaPtr); + + for (j = 0; j < 4; ++j) { + decompressed[j * 4] = ((alpha >> (4 * j)) & 0x0F) * 17; + } + + alphaPtr += 2; + decompressed += destinationPitch; + } +} + +static void bcdec__smooth_alpha_block(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int pixelSize) { + unsigned char* decompressed; + unsigned char alpha[8]; + int i, j; + unsigned long long block, indices; + + block = bcdec__getu64le(compressedBlock); + decompressed = (unsigned char*)decompressedBlock; + + alpha[0] = block & 0xFF; + alpha[1] = (block >> 8) & 0xFF; + + if (alpha[0] > alpha[1]) { + /* 6 interpolated alpha values. */ + alpha[2] = (6 * alpha[0] + alpha[1]) / 7; /* 6/7*alpha_0 + 1/7*alpha_1 */ + alpha[3] = (5 * alpha[0] + 2 * alpha[1]) / 7; /* 5/7*alpha_0 + 2/7*alpha_1 */ + alpha[4] = (4 * alpha[0] + 3 * alpha[1]) / 7; /* 4/7*alpha_0 + 3/7*alpha_1 */ + alpha[5] = (3 * alpha[0] + 4 * alpha[1]) / 7; /* 3/7*alpha_0 + 4/7*alpha_1 */ + alpha[6] = (2 * alpha[0] + 5 * alpha[1]) / 7; /* 2/7*alpha_0 + 5/7*alpha_1 */ + alpha[7] = ( alpha[0] + 6 * alpha[1]) / 7; /* 1/7*alpha_0 + 6/7*alpha_1 */ + } + else { + /* 4 interpolated alpha values. */ + alpha[2] = (4 * alpha[0] + alpha[1]) / 5; /* 4/5*alpha_0 + 1/5*alpha_1 */ + alpha[3] = (3 * alpha[0] + 2 * alpha[1]) / 5; /* 3/5*alpha_0 + 2/5*alpha_1 */ + alpha[4] = (2 * alpha[0] + 3 * alpha[1]) / 5; /* 2/5*alpha_0 + 3/5*alpha_1 */ + alpha[5] = ( alpha[0] + 4 * alpha[1]) / 5; /* 1/5*alpha_0 + 4/5*alpha_1 */ + alpha[6] = 0x00; + alpha[7] = 0xFF; + } + + indices = block >> 16; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + decompressed[j * pixelSize] = alpha[indices & 0x07]; + indices >>= 3; + } + + decompressed += destinationPitch; + } +} + +#ifdef BCDEC_BC4BC5_PRECISE +static void bcdec__bc4_block(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int pixelSize, int isSigned) { + signed char* sblock; + unsigned char* ublock; + int alpha[8]; + int i, j; + unsigned long long block, indices; + + static int aWeights4[4] = { 13107, 26215, 39321, 52429 }; + static int aWeights6[6] = { 9363, 18724, 28086, 37450, 46812, 56173 }; + + block = bcdec__getu64le(compressedBlock); + + if (isSigned) { + alpha[0] = (char)(block & 0xFF); + alpha[1] = (char)((block >> 8) & 0xFF); + if (alpha[0] < -127) alpha[0] = -127; /* -128 clamps to -127 */ + if (alpha[1] < -127) alpha[1] = -127; /* -128 clamps to -127 */ + } else { + alpha[0] = block & 0xFF; + alpha[1] = (block >> 8) & 0xFF; + } + + if (alpha[0] > alpha[1]) { + /* 6 interpolated alpha values. */ + alpha[2] = (aWeights6[5] * alpha[0] + aWeights6[0] * alpha[1] + 32768) >> 16; /* 6/7*alpha_0 + 1/7*alpha_1 */ + alpha[3] = (aWeights6[4] * alpha[0] + aWeights6[1] * alpha[1] + 32768) >> 16; /* 5/7*alpha_0 + 2/7*alpha_1 */ + alpha[4] = (aWeights6[3] * alpha[0] + aWeights6[2] * alpha[1] + 32768) >> 16; /* 4/7*alpha_0 + 3/7*alpha_1 */ + alpha[5] = (aWeights6[2] * alpha[0] + aWeights6[3] * alpha[1] + 32768) >> 16; /* 3/7*alpha_0 + 4/7*alpha_1 */ + alpha[6] = (aWeights6[1] * alpha[0] + aWeights6[4] * alpha[1] + 32768) >> 16; /* 2/7*alpha_0 + 5/7*alpha_1 */ + alpha[7] = (aWeights6[0] * alpha[0] + aWeights6[5] * alpha[1] + 32768) >> 16; /* 1/7*alpha_0 + 6/7*alpha_1 */ + } else { + /* 4 interpolated alpha values. */ + alpha[2] = (aWeights4[3] * alpha[0] + aWeights4[0] * alpha[1] + 32768) >> 16; /* 4/5*alpha_0 + 1/5*alpha_1 */ + alpha[3] = (aWeights4[2] * alpha[0] + aWeights4[1] * alpha[1] + 32768) >> 16; /* 3/5*alpha_0 + 2/5*alpha_1 */ + alpha[4] = (aWeights4[1] * alpha[0] + aWeights4[2] * alpha[1] + 32768) >> 16; /* 2/5*alpha_0 + 3/5*alpha_1 */ + alpha[5] = (aWeights4[0] * alpha[0] + aWeights4[3] * alpha[1] + 32768) >> 16; /* 1/5*alpha_0 + 4/5*alpha_1 */ + alpha[6] = isSigned ? -127 : 0; + alpha[7] = isSigned ? 127 : 255; + } + + indices = block >> 16; + if (isSigned) { + sblock = (signed char*)decompressedBlock; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + sblock[j * pixelSize] = (signed char)alpha[indices & 0x07]; + indices >>= 3; + } + sblock += destinationPitch; + } + } else { + ublock = (unsigned char*)decompressedBlock; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + ublock[j * pixelSize] = (unsigned char)alpha[indices & 0x07]; + indices >>= 3; + } + ublock += destinationPitch; + } + } +} + +static void bcdec__bc4_block_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int pixelSize, int isSigned) { + float* decompressed; + float alpha[8]; + int i, j; + unsigned long long block, indices; + + block = bcdec__getu64le(compressedBlock); + decompressed = (float*)decompressedBlock; + + if (isSigned) { + alpha[0] = (float)((char)(block & 0xFF)) / 127.0f; + alpha[1] = (float)((char)((block >> 8) & 0xFF)) / 127.0f; + if (alpha[0] < -1.0f) alpha[0] = -1.0f; /* -128 clamps to -127 */ + if (alpha[1] < -1.0f) alpha[1] = -1.0f; /* -128 clamps to -127 */ + } else { + alpha[0] = (float)(block & 0xFF) / 255.0f; + alpha[1] = (float)((block >> 8) & 0xFF) / 255.0f; + } + + if (alpha[0] > alpha[1]) { + /* 6 interpolated alpha values. */ + alpha[2] = (6.0f * alpha[0] + alpha[1]) / 7.0f; /* 6/7*alpha_0 + 1/7*alpha_1 */ + alpha[3] = (5.0f * alpha[0] + 2.0f * alpha[1]) / 7.0f; /* 5/7*alpha_0 + 2/7*alpha_1 */ + alpha[4] = (4.0f * alpha[0] + 3.0f * alpha[1]) / 7.0f; /* 4/7*alpha_0 + 3/7*alpha_1 */ + alpha[5] = (3.0f * alpha[0] + 4.0f * alpha[1]) / 7.0f; /* 3/7*alpha_0 + 4/7*alpha_1 */ + alpha[6] = (2.0f * alpha[0] + 5.0f * alpha[1]) / 7.0f; /* 2/7*alpha_0 + 5/7*alpha_1 */ + alpha[7] = ( alpha[0] + 6.0f * alpha[1]) / 7.0f; /* 1/7*alpha_0 + 6/7*alpha_1 */ + } else { + /* 4 interpolated alpha values. */ + alpha[2] = (4.0f * alpha[0] + alpha[1]) / 5.0f; /* 4/5*alpha_0 + 1/5*alpha_1 */ + alpha[3] = (3.0f * alpha[0] + 2.0f * alpha[1]) / 5.0f; /* 3/5*alpha_0 + 2/5*alpha_1 */ + alpha[4] = (2.0f * alpha[0] + 3.0f * alpha[1]) / 5.0f; /* 2/5*alpha_0 + 3/5*alpha_1 */ + alpha[5] = ( alpha[0] + 4.0f * alpha[1]) / 5.0f; /* 1/5*alpha_0 + 4/5*alpha_1 */ + alpha[6] = isSigned ? -1.0f : 0.0f; + alpha[7] = 1.0f; + } + + indices = block >> 16; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + decompressed[j * pixelSize] = alpha[indices & 0x07]; + indices >>= 3; + } + decompressed += destinationPitch; + } +} +#endif /* BCDEC_BC4BC5_PRECISE */ + +typedef struct bcdec__bitstream { + unsigned long long low; + unsigned long long high; +} bcdec__bitstream_t; + +static int bcdec__bitstream_read_bits(bcdec__bitstream_t* bstream, int numBits) { + unsigned int mask = (1 << numBits) - 1; + /* Read the low N bits */ + unsigned int bits = (bstream->low & mask); + + bstream->low >>= numBits; + /* Put the low N bits of "high" into the high 64-N bits of "low". */ + bstream->low |= (bstream->high & mask) << (sizeof(bstream->high) * 8 - numBits); + bstream->high >>= numBits; + + return bits; +} + +static int bcdec__bitstream_read_bit(bcdec__bitstream_t* bstream) { + return bcdec__bitstream_read_bits(bstream, 1); +} + +/* reversed bits pulling, used in BC6H decoding + why ?? just why ??? */ +static int bcdec__bitstream_read_bits_r(bcdec__bitstream_t* bstream, int numBits) { + int bits = bcdec__bitstream_read_bits(bstream, numBits); + /* Reverse the bits. */ + int result = 0; + while (numBits--) { + result <<= 1; + result |= (bits & 1); + bits >>= 1; + } + return result; +} + + + +BCDECDEF void bcdec_bc1(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + bcdec__color_block(compressedBlock, decompressedBlock, destinationPitch, 0); +} + +BCDECDEF void bcdec_bc2(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + bcdec__color_block(((char*)compressedBlock) + 8, decompressedBlock, destinationPitch, 1); + bcdec__sharp_alpha_block(compressedBlock, ((char*)decompressedBlock) + 3, destinationPitch); +} + +BCDECDEF void bcdec_bc3(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + bcdec__color_block(((char*)compressedBlock) + 8, decompressedBlock, destinationPitch, 1); + bcdec__smooth_alpha_block(compressedBlock, ((char*)decompressedBlock) + 3, destinationPitch, 4); +} + +#ifndef BCDEC_BC4BC5_PRECISE +BCDECDEF void bcdec_bc4(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + bcdec__smooth_alpha_block(compressedBlock, decompressedBlock, destinationPitch, 1); +#else +BCDECDEF void bcdec_bc4(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned) { + bcdec__bc4_block(compressedBlock, decompressedBlock, destinationPitch, 1, isSigned); +#endif +} + +#ifndef BCDEC_BC4BC5_PRECISE +BCDECDEF void bcdec_bc5(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + bcdec__smooth_alpha_block(compressedBlock, decompressedBlock, destinationPitch, 2); + bcdec__smooth_alpha_block(((char*)compressedBlock) + 8, ((char*)decompressedBlock) + 1, destinationPitch, 2); +#else +BCDECDEF void bcdec_bc5(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned) { + bcdec__bc4_block(compressedBlock, decompressedBlock, destinationPitch, 2, isSigned); + bcdec__bc4_block(((char*)compressedBlock) + 8, ((char*)decompressedBlock) + 1, destinationPitch, 2, isSigned); +#endif +} + +#ifdef BCDEC_BC4BC5_PRECISE +BCDECDEF void bcdec_bc4_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned) { + bcdec__bc4_block_float(compressedBlock, decompressedBlock, destinationPitch, 1, isSigned); +} + +BCDECDEF void bcdec_bc5_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned) { + bcdec__bc4_block_float(compressedBlock, decompressedBlock, destinationPitch, 2, isSigned); + bcdec__bc4_block_float(((char*)compressedBlock) + 8, ((float*)decompressedBlock) + 1, destinationPitch, 2, isSigned); +} +#endif /* BCDEC_BC4BC5_PRECISE */ + +/* http://graphics.stanford.edu/~seander/bithacks.html#VariableSignExtend */ +static int bcdec__extend_sign(int val, int bits) { + return (val << (32 - bits)) >> (32 - bits); +} + +static int bcdec__transform_inverse(int val, int a0, int bits, int isSigned) { + /* If the precision of A0 is "p" bits, then the transform algorithm is: + B0 = (B0 + A0) & ((1 << p) - 1) */ + val = (val + a0) & ((1 << bits) - 1); + if (isSigned) { + val = bcdec__extend_sign(val, bits); + } + return val; +} + +/* pretty much copy-paste from documentation */ +static int bcdec__unquantize(int val, int bits, int isSigned) { + int unq, s = 0; + + if (!isSigned) { + if (bits >= 15) { + unq = val; + } else if (!val) { + unq = 0; + } else if (val == ((1 << bits) - 1)) { + unq = 0xFFFF; + } else { + unq = ((val << 16) + 0x8000) >> bits; + } + } else { + if (bits >= 16) { + unq = val; + } else { + if (val < 0) { + s = 1; + val = -val; + } + + if (val == 0) { + unq = 0; + } else if (val >= ((1 << (bits - 1)) - 1)) { + unq = 0x7FFF; + } else { + unq = ((val << 15) + 0x4000) >> (bits - 1); + } + + if (s) { + unq = -unq; + } + } + } + return unq; +} + +static int bcdec__interpolate(int a, int b, int* weights, int index) { + return (a * (64 - weights[index]) + b * weights[index] + 32) >> 6; +} + +static unsigned short bcdec__finish_unquantize(int val, int isSigned) { + int s; + + if (!isSigned) { + return (unsigned short)((val * 31) >> 6); /* scale the magnitude by 31 / 64 */ + } else { + val = (val < 0) ? -(((-val) * 31) >> 5) : (val * 31) >> 5; /* scale the magnitude by 31 / 32 */ + s = 0; + if (val < 0) { + s = 0x8000; + val = -val; + } + return (unsigned short)(s | val); + } +} + +/* modified half_to_float_fast4 from https://gist.github.com/rygorous/2144712 */ +static float bcdec__half_to_float_quick(unsigned short half) { + typedef union { + unsigned int u; + float f; + } FP32; + + static const FP32 magic = { 113 << 23 }; + static const unsigned int shifted_exp = 0x7c00 << 13; /* exponent mask after shift */ + FP32 o; + unsigned int exp; + + o.u = (half & 0x7fff) << 13; /* exponent/mantissa bits */ + exp = shifted_exp & o.u; /* just the exponent */ + o.u += (127 - 15) << 23; /* exponent adjust */ + + /* handle exponent special cases */ + if (exp == shifted_exp) { /* Inf/NaN? */ + o.u += (128 - 16) << 23; /* extra exp adjust */ + } else if (exp == 0) { /* Zero/Denormal? */ + o.u += 1 << 23; /* extra exp adjust */ + o.f -= magic.f; /* renormalize */ + } + + o.u |= (half & 0x8000) << 16; /* sign bit */ + return o.f; +} + +BCDECDEF void bcdec_bc6h_half(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned) { + static char actual_bits_count[4][14] = { + { 10, 7, 11, 11, 11, 9, 8, 8, 8, 6, 10, 11, 12, 16 }, /* W */ + { 5, 6, 5, 4, 4, 5, 6, 5, 5, 6, 10, 9, 8, 4 }, /* dR */ + { 5, 6, 4, 5, 4, 5, 5, 6, 5, 6, 10, 9, 8, 4 }, /* dG */ + { 5, 6, 4, 4, 5, 5, 5, 5, 6, 6, 10, 9, 8, 4 } /* dB */ + }; + + /* There are 32 possible partition sets for a two-region tile. + Each 4x4 block represents a single shape. + Here also every fix-up index has MSB bit set. */ + static unsigned char partition_sets[32][4][4] = { + { {128, 0, 1, 1}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {0, 0, 1, 129} }, /* 0 */ + { {128, 0, 0, 1}, {0, 0, 0, 1}, { 0, 0, 0, 1}, {0, 0, 0, 129} }, /* 1 */ + { {128, 1, 1, 1}, {0, 1, 1, 1}, { 0, 1, 1, 1}, {0, 1, 1, 129} }, /* 2 */ + { {128, 0, 0, 1}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {0, 1, 1, 129} }, /* 3 */ + { {128, 0, 0, 0}, {0, 0, 0, 1}, { 0, 0, 0, 1}, {0, 0, 1, 129} }, /* 4 */ + { {128, 0, 1, 1}, {0, 1, 1, 1}, { 0, 1, 1, 1}, {1, 1, 1, 129} }, /* 5 */ + { {128, 0, 0, 1}, {0, 0, 1, 1}, { 0, 1, 1, 1}, {1, 1, 1, 129} }, /* 6 */ + { {128, 0, 0, 0}, {0, 0, 0, 1}, { 0, 0, 1, 1}, {0, 1, 1, 129} }, /* 7 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 1}, {0, 0, 1, 129} }, /* 8 */ + { {128, 0, 1, 1}, {0, 1, 1, 1}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 9 */ + { {128, 0, 0, 0}, {0, 0, 0, 1}, { 0, 1, 1, 1}, {1, 1, 1, 129} }, /* 10 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 1}, {0, 1, 1, 129} }, /* 11 */ + { {128, 0, 0, 1}, {0, 1, 1, 1}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 12 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 13 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 14 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 0}, {1, 1, 1, 129} }, /* 15 */ + { {128, 0, 0, 0}, {1, 0, 0, 0}, { 1, 1, 1, 0}, {1, 1, 1, 129} }, /* 16 */ + { {128, 1, 129, 1}, {0, 0, 0, 1}, { 0, 0, 0, 0}, {0, 0, 0, 0} }, /* 17 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {129, 0, 0, 0}, {1, 1, 1, 0} }, /* 18 */ + { {128, 1, 129, 1}, {0, 0, 1, 1}, { 0, 0, 0, 1}, {0, 0, 0, 0} }, /* 19 */ + { {128, 0, 129, 1}, {0, 0, 0, 1}, { 0, 0, 0, 0}, {0, 0, 0, 0} }, /* 20 */ + { {128, 0, 0, 0}, {1, 0, 0, 0}, {129, 1, 0, 0}, {1, 1, 1, 0} }, /* 21 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {129, 0, 0, 0}, {1, 1, 0, 0} }, /* 22 */ + { {128, 1, 1, 1}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {0, 0, 0, 129} }, /* 23 */ + { {128, 0, 129, 1}, {0, 0, 0, 1}, { 0, 0, 0, 1}, {0, 0, 0, 0} }, /* 24 */ + { {128, 0, 0, 0}, {1, 0, 0, 0}, {129, 0, 0, 0}, {1, 1, 0, 0} }, /* 25 */ + { {128, 1, 129, 0}, {0, 1, 1, 0}, { 0, 1, 1, 0}, {0, 1, 1, 0} }, /* 26 */ + { {128, 0, 129, 1}, {0, 1, 1, 0}, { 0, 1, 1, 0}, {1, 1, 0, 0} }, /* 27 */ + { {128, 0, 0, 1}, {0, 1, 1, 1}, {129, 1, 1, 0}, {1, 0, 0, 0} }, /* 28 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, {129, 1, 1, 1}, {0, 0, 0, 0} }, /* 29 */ + { {128, 1, 129, 1}, {0, 0, 0, 1}, { 1, 0, 0, 0}, {1, 1, 1, 0} }, /* 30 */ + { {128, 0, 129, 1}, {1, 0, 0, 1}, { 1, 0, 0, 1}, {1, 1, 0, 0} } /* 31 */ + }; + + static int aWeight3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; + static int aWeight4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + + bcdec__bitstream_t bstream; + int mode, partition, numPartitions, i, j, partitionSet, indexBits, index, ep_i, actualBits0Mode; + int r[4], g[4], b[4]; /* wxyz */ + unsigned short* decompressed; + int* weights; + + decompressed = (unsigned short*)decompressedBlock; + + bstream.low = bcdec__getu64le(compressedBlock); + bstream.high = bcdec__getu64le((const unsigned char*)compressedBlock + 8); + + r[0] = r[1] = r[2] = r[3] = 0; + g[0] = g[1] = g[2] = g[3] = 0; + b[0] = b[1] = b[2] = b[3] = 0; + + mode = bcdec__bitstream_read_bits(&bstream, 2); + if (mode > 1) { + mode |= (bcdec__bitstream_read_bits(&bstream, 3) << 2); + } + + /* modes >= 11 (10 in my code) are using 0 one, others will read it from the bitstream */ + partition = 0; + + switch (mode) { + /* mode 1 */ + case 0b00: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 75 bits (10.555, 10.555, 10.555) */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* rx[4:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* gx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* bx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 5); /* ry[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 5); /* rz[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 0; + } break; + + /* mode 2 */ + case 0b01: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 75 bits (7666, 7666, 7666) */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 5; /* gy[5] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 5; /* gz[5] */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 7); /* rw[6:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 7); /* gw[6:0] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 5; /* by[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 7); /* bw[6:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 5; /* bz[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* rx[5:0] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* gx[5:0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* bx[5:0] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 6); /* ry[5:0] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 6); /* rz[5:0] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 1; + } break; + + /* mode 3 */ + case 0b00010: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (11.555, 11.444, 11.444) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* rx[4:0] */ + r[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* rw[10] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* gx[3:0] */ + g[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* gw[10] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* bx[3:0] */ + b[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* bw[10] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 5); /* ry[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 5); /* rz[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 2; + } break; + + /* mode 4 */ + case 0b00110: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (11.444, 11.555, 11.444) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* rx[3:0] */ + r[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* rw[10] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* gx[4:0] */ + g[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* gw[10] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* bx[3:0] */ + b[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* bw[10] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* ry[3:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* rz[3:0] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 3; + } break; + + /* mode 5 */ + case 0b01010: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (11.444, 11.444, 11.555) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* rx[3:0] */ + r[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* rw[10] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* gx[3:0] */ + g[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* gw[10] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* bx[4:0] */ + b[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* bw[10] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* ry[3:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* rz[3:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 4; + } break; + + /* mode 6 */ + case 0b01110: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (9555, 9555, 9555) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 9); /* rw[8:0] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 9); /* gw[8:0] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 9); /* bw[8:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* rx[4:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* gx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gx[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* bx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 5); /* ry[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 5); /* rz[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 5; + } break; + + /* mode 7 */ + case 0b10010: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (8666, 8555, 8555) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* rw[7:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* gw[7:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* bw[7:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* rx[5:0] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* gx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* bx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 6); /* ry[5:0] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 6); /* rz[5:0] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 6; + } break; + + /* mode 8 */ + case 0b10110: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (8555, 8666, 8555) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* rw[7:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* gw[7:0] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 5; /* gy[5] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* bw[7:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 5; /* gz[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* rx[4:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* gx[5:0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* zx[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* bx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 5); /* ry[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 5); /* rz[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 7; + } break; + + /* mode 9 */ + case 0b11010: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (8555, 8555, 8666) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* rw[7:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* gw[7:0] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 5; /* by[5] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 8); /* bw[7:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 5; /* bz[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* bw[4:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 5); /* gx[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* bx[5:0] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 5); /* ry[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 5); /* rz[4:0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 8; + } break; + + /* mode 10 */ + case 0b11110: { + /* Partitition indices: 46 bits + Partition: 5 bits + Color Endpoints: 72 bits (6666, 6666, 6666) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 6); /* rw[5:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gz[4] */ + b[3] |= bcdec__bitstream_read_bit(&bstream); /* bz[0] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 1; /* bz[1] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* by[4] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 6); /* gw[5:0] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 5; /* gy[5] */ + b[2] |= bcdec__bitstream_read_bit(&bstream) << 5; /* by[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 2; /* bz[2] */ + g[2] |= bcdec__bitstream_read_bit(&bstream) << 4; /* gy[4] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 6); /* bw[5:0] */ + g[3] |= bcdec__bitstream_read_bit(&bstream) << 5; /* gz[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 3; /* bz[3] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 5; /* bz[5] */ + b[3] |= bcdec__bitstream_read_bit(&bstream) << 4; /* bz[4] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* rx[5:0] */ + g[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* gy[3:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* gx[5:0] */ + g[3] |= bcdec__bitstream_read_bits(&bstream, 4); /* gz[3:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 6); /* bx[5:0] */ + b[2] |= bcdec__bitstream_read_bits(&bstream, 4); /* by[3:0] */ + r[2] |= bcdec__bitstream_read_bits(&bstream, 6); /* ry[5:0] */ + r[3] |= bcdec__bitstream_read_bits(&bstream, 6); /* rz[5:0] */ + partition = bcdec__bitstream_read_bits(&bstream, 5); /* d[4:0] */ + mode = 9; + } break; + + /* mode 11 */ + case 0b00011: { + /* Partitition indices: 63 bits + Partition: 0 bits + Color Endpoints: 60 bits (10.10, 10.10, 10.10) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 10); /* rx[9:0] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 10); /* gx[9:0] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 10); /* bx[9:0] */ + mode = 10; + } break; + + /* mode 12 */ + case 0b00111: { + /* Partitition indices: 63 bits + Partition: 0 bits + Color Endpoints: 60 bits (11.9, 11.9, 11.9) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 9); /* rx[8:0] */ + r[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* rw[10] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 9); /* gx[8:0] */ + g[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* gw[10] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 9); /* bx[8:0] */ + b[0] |= bcdec__bitstream_read_bit(&bstream) << 10; /* bw[10] */ + mode = 11; + } break; + + /* mode 13 */ + case 0b01011: { + /* Partitition indices: 63 bits + Partition: 0 bits + Color Endpoints: 60 bits (12.8, 12.8, 12.8) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 8); /* rx[7:0] */ + r[0] |= bcdec__bitstream_read_bits_r(&bstream, 2) << 10;/* rx[10:11] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 8); /* gx[7:0] */ + g[0] |= bcdec__bitstream_read_bits_r(&bstream, 2) << 10;/* gx[10:11] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 8); /* bx[7:0] */ + b[0] |= bcdec__bitstream_read_bits_r(&bstream, 2) << 10;/* bx[10:11] */ + mode = 12; + } break; + + /* mode 14 */ + case 0b01111: { + /* Partitition indices: 63 bits + Partition: 0 bits + Color Endpoints: 60 bits (16.4, 16.4, 16.4) */ + r[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* rw[9:0] */ + g[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* gw[9:0] */ + b[0] |= bcdec__bitstream_read_bits(&bstream, 10); /* bw[9:0] */ + r[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* rx[3:0] */ + r[0] |= bcdec__bitstream_read_bits_r(&bstream, 6) << 10;/* rw[10:15] */ + g[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* gx[3:0] */ + g[0] |= bcdec__bitstream_read_bits_r(&bstream, 6) << 10;/* gw[10:15] */ + b[1] |= bcdec__bitstream_read_bits(&bstream, 4); /* bx[3:0] */ + b[0] |= bcdec__bitstream_read_bits_r(&bstream, 6) << 10;/* bw[10:15] */ + mode = 13; + } break; + + default: { + /* Modes 10011, 10111, 11011, and 11111 (not shown) are reserved. + Do not use these in your encoder. If the hardware is passed blocks + with one of these modes specified, the resulting decompressed block + must contain all zeroes in all channels except for the alpha channel. */ + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + decompressed[j * 3 + 0] = 0; + decompressed[j * 3 + 1] = 0; + decompressed[j * 3 + 2] = 0; + } + decompressed += destinationPitch; + } + + return; + } + } + + numPartitions = (mode >= 10) ? 0 : 1; + + actualBits0Mode = actual_bits_count[0][mode]; + if (isSigned) { + r[0] = bcdec__extend_sign(r[0], actualBits0Mode); + g[0] = bcdec__extend_sign(g[0], actualBits0Mode); + b[0] = bcdec__extend_sign(b[0], actualBits0Mode); + } + + /* Mode 11 (like Mode 10) does not use delta compression, + and instead stores both color endpoints explicitly. */ + if ((mode != 9 && mode != 10) || isSigned) { + for (i = 1; i < (numPartitions + 1) * 2; ++i) { + r[i] = bcdec__extend_sign(r[i], actual_bits_count[1][mode]); + g[i] = bcdec__extend_sign(g[i], actual_bits_count[2][mode]); + b[i] = bcdec__extend_sign(b[i], actual_bits_count[3][mode]); + } + } + + if (mode != 9 && mode != 10) { + for (i = 1; i < (numPartitions + 1) * 2; ++i) { + r[i] = bcdec__transform_inverse(r[i], r[0], actualBits0Mode, isSigned); + g[i] = bcdec__transform_inverse(g[i], g[0], actualBits0Mode, isSigned); + b[i] = bcdec__transform_inverse(b[i], b[0], actualBits0Mode, isSigned); + } + } + + for (i = 0; i < (numPartitions + 1) * 2; ++i) { + r[i] = bcdec__unquantize(r[i], actualBits0Mode, isSigned); + g[i] = bcdec__unquantize(g[i], actualBits0Mode, isSigned); + b[i] = bcdec__unquantize(b[i], actualBits0Mode, isSigned); + } + + weights = (mode >= 10) ? aWeight4 : aWeight3; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + partitionSet = (mode >= 10) ? ((i|j) ? 0 : 128) : partition_sets[partition][i][j]; + + indexBits = (mode >= 10) ? 4 : 3; + /* fix-up index is specified with one less bit */ + /* The fix-up index for subset 0 is always index 0 */ + if (partitionSet & 0x80) { + indexBits--; + } + partitionSet &= 0x01; + + index = bcdec__bitstream_read_bits(&bstream, indexBits); + + ep_i = partitionSet * 2; + decompressed[j * 3 + 0] = bcdec__finish_unquantize( + bcdec__interpolate(r[ep_i], r[ep_i+1], weights, index), isSigned); + decompressed[j * 3 + 1] = bcdec__finish_unquantize( + bcdec__interpolate(g[ep_i], g[ep_i+1], weights, index), isSigned); + decompressed[j * 3 + 2] = bcdec__finish_unquantize( + bcdec__interpolate(b[ep_i], b[ep_i+1], weights, index), isSigned); + } + + decompressed += destinationPitch; + } +} + +BCDECDEF void bcdec_bc6h_float(const void* compressedBlock, void* decompressedBlock, int destinationPitch, int isSigned) { + unsigned short block[16*3]; + float* decompressed; + const unsigned short* b; + int i, j; + + bcdec_bc6h_half(compressedBlock, block, 4*3, isSigned); + b = block; + decompressed = (float*)decompressedBlock; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + decompressed[j * 3 + 0] = bcdec__half_to_float_quick(*b++); + decompressed[j * 3 + 1] = bcdec__half_to_float_quick(*b++); + decompressed[j * 3 + 2] = bcdec__half_to_float_quick(*b++); + } + decompressed += destinationPitch; + } +} + +static void bcdec__swap_values(int* a, int* b) { + a[0] ^= b[0], b[0] ^= a[0], a[0] ^= b[0]; +} + +BCDECDEF void bcdec_bc7(const void* compressedBlock, void* decompressedBlock, int destinationPitch) { + static char actual_bits_count[2][8] = { + { 4, 6, 5, 7, 5, 7, 7, 5 }, /* RGBA */ + { 0, 0, 0, 0, 6, 8, 7, 5 }, /* Alpha */ + }; + + /* There are 64 possible partition sets for a two-region tile. + Each 4x4 block represents a single shape. + Here also every fix-up index has MSB bit set. */ + static unsigned char partition_sets[2][64][4][4] = { + { /* Partition table for 2-subset BPTC */ + { {128, 0, 1, 1}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {0, 0, 1, 129} }, /* 0 */ + { {128, 0, 0, 1}, {0, 0, 0, 1}, { 0, 0, 0, 1}, {0, 0, 0, 129} }, /* 1 */ + { {128, 1, 1, 1}, {0, 1, 1, 1}, { 0, 1, 1, 1}, {0, 1, 1, 129} }, /* 2 */ + { {128, 0, 0, 1}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {0, 1, 1, 129} }, /* 3 */ + { {128, 0, 0, 0}, {0, 0, 0, 1}, { 0, 0, 0, 1}, {0, 0, 1, 129} }, /* 4 */ + { {128, 0, 1, 1}, {0, 1, 1, 1}, { 0, 1, 1, 1}, {1, 1, 1, 129} }, /* 5 */ + { {128, 0, 0, 1}, {0, 0, 1, 1}, { 0, 1, 1, 1}, {1, 1, 1, 129} }, /* 6 */ + { {128, 0, 0, 0}, {0, 0, 0, 1}, { 0, 0, 1, 1}, {0, 1, 1, 129} }, /* 7 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 1}, {0, 0, 1, 129} }, /* 8 */ + { {128, 0, 1, 1}, {0, 1, 1, 1}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 9 */ + { {128, 0, 0, 0}, {0, 0, 0, 1}, { 0, 1, 1, 1}, {1, 1, 1, 129} }, /* 10 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 1}, {0, 1, 1, 129} }, /* 11 */ + { {128, 0, 0, 1}, {0, 1, 1, 1}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 12 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 13 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, { 1, 1, 1, 1}, {1, 1, 1, 129} }, /* 14 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 0}, {1, 1, 1, 129} }, /* 15 */ + { {128, 0, 0, 0}, {1, 0, 0, 0}, { 1, 1, 1, 0}, {1, 1, 1, 129} }, /* 16 */ + { {128, 1, 129, 1}, {0, 0, 0, 1}, { 0, 0, 0, 0}, {0, 0, 0, 0} }, /* 17 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {129, 0, 0, 0}, {1, 1, 1, 0} }, /* 18 */ + { {128, 1, 129, 1}, {0, 0, 1, 1}, { 0, 0, 0, 1}, {0, 0, 0, 0} }, /* 19 */ + { {128, 0, 129, 1}, {0, 0, 0, 1}, { 0, 0, 0, 0}, {0, 0, 0, 0} }, /* 20 */ + { {128, 0, 0, 0}, {1, 0, 0, 0}, {129, 1, 0, 0}, {1, 1, 1, 0} }, /* 21 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {129, 0, 0, 0}, {1, 1, 0, 0} }, /* 22 */ + { {128, 1, 1, 1}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {0, 0, 0, 129} }, /* 23 */ + { {128, 0, 129, 1}, {0, 0, 0, 1}, { 0, 0, 0, 1}, {0, 0, 0, 0} }, /* 24 */ + { {128, 0, 0, 0}, {1, 0, 0, 0}, {129, 0, 0, 0}, {1, 1, 0, 0} }, /* 25 */ + { {128, 1, 129, 0}, {0, 1, 1, 0}, { 0, 1, 1, 0}, {0, 1, 1, 0} }, /* 26 */ + { {128, 0, 129, 1}, {0, 1, 1, 0}, { 0, 1, 1, 0}, {1, 1, 0, 0} }, /* 27 */ + { {128, 0, 0, 1}, {0, 1, 1, 1}, {129, 1, 1, 0}, {1, 0, 0, 0} }, /* 28 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, {129, 1, 1, 1}, {0, 0, 0, 0} }, /* 29 */ + { {128, 1, 129, 1}, {0, 0, 0, 1}, { 1, 0, 0, 0}, {1, 1, 1, 0} }, /* 30 */ + { {128, 0, 129, 1}, {1, 0, 0, 1}, { 1, 0, 0, 1}, {1, 1, 0, 0} }, /* 31 */ + { {128, 1, 0, 1}, {0, 1, 0, 1}, { 0, 1, 0, 1}, {0, 1, 0, 129} }, /* 32 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, { 0, 0, 0, 0}, {1, 1, 1, 129} }, /* 33 */ + { {128, 1, 0, 1}, {1, 0, 129, 0}, { 0, 1, 0, 1}, {1, 0, 1, 0} }, /* 34 */ + { {128, 0, 1, 1}, {0, 0, 1, 1}, {129, 1, 0, 0}, {1, 1, 0, 0} }, /* 35 */ + { {128, 0, 129, 1}, {1, 1, 0, 0}, { 0, 0, 1, 1}, {1, 1, 0, 0} }, /* 36 */ + { {128, 1, 0, 1}, {0, 1, 0, 1}, {129, 0, 1, 0}, {1, 0, 1, 0} }, /* 37 */ + { {128, 1, 1, 0}, {1, 0, 0, 1}, { 0, 1, 1, 0}, {1, 0, 0, 129} }, /* 38 */ + { {128, 1, 0, 1}, {1, 0, 1, 0}, { 1, 0, 1, 0}, {0, 1, 0, 129} }, /* 39 */ + { {128, 1, 129, 1}, {0, 0, 1, 1}, { 1, 1, 0, 0}, {1, 1, 1, 0} }, /* 40 */ + { {128, 0, 0, 1}, {0, 0, 1, 1}, {129, 1, 0, 0}, {1, 0, 0, 0} }, /* 41 */ + { {128, 0, 129, 1}, {0, 0, 1, 0}, { 0, 1, 0, 0}, {1, 1, 0, 0} }, /* 42 */ + { {128, 0, 129, 1}, {1, 0, 1, 1}, { 1, 1, 0, 1}, {1, 1, 0, 0} }, /* 43 */ + { {128, 1, 129, 0}, {1, 0, 0, 1}, { 1, 0, 0, 1}, {0, 1, 1, 0} }, /* 44 */ + { {128, 0, 1, 1}, {1, 1, 0, 0}, { 1, 1, 0, 0}, {0, 0, 1, 129} }, /* 45 */ + { {128, 1, 1, 0}, {0, 1, 1, 0}, { 1, 0, 0, 1}, {1, 0, 0, 129} }, /* 46 */ + { {128, 0, 0, 0}, {0, 1, 129, 0}, { 0, 1, 1, 0}, {0, 0, 0, 0} }, /* 47 */ + { {128, 1, 0, 0}, {1, 1, 129, 0}, { 0, 1, 0, 0}, {0, 0, 0, 0} }, /* 48 */ + { {128, 0, 129, 0}, {0, 1, 1, 1}, { 0, 0, 1, 0}, {0, 0, 0, 0} }, /* 49 */ + { {128, 0, 0, 0}, {0, 0, 129, 0}, { 0, 1, 1, 1}, {0, 0, 1, 0} }, /* 50 */ + { {128, 0, 0, 0}, {0, 1, 0, 0}, {129, 1, 1, 0}, {0, 1, 0, 0} }, /* 51 */ + { {128, 1, 1, 0}, {1, 1, 0, 0}, { 1, 0, 0, 1}, {0, 0, 1, 129} }, /* 52 */ + { {128, 0, 1, 1}, {0, 1, 1, 0}, { 1, 1, 0, 0}, {1, 0, 0, 129} }, /* 53 */ + { {128, 1, 129, 0}, {0, 0, 1, 1}, { 1, 0, 0, 1}, {1, 1, 0, 0} }, /* 54 */ + { {128, 0, 129, 1}, {1, 0, 0, 1}, { 1, 1, 0, 0}, {0, 1, 1, 0} }, /* 55 */ + { {128, 1, 1, 0}, {1, 1, 0, 0}, { 1, 1, 0, 0}, {1, 0, 0, 129} }, /* 56 */ + { {128, 1, 1, 0}, {0, 0, 1, 1}, { 0, 0, 1, 1}, {1, 0, 0, 129} }, /* 57 */ + { {128, 1, 1, 1}, {1, 1, 1, 0}, { 1, 0, 0, 0}, {0, 0, 0, 129} }, /* 58 */ + { {128, 0, 0, 1}, {1, 0, 0, 0}, { 1, 1, 1, 0}, {0, 1, 1, 129} }, /* 59 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, { 0, 0, 1, 1}, {0, 0, 1, 129} }, /* 60 */ + { {128, 0, 129, 1}, {0, 0, 1, 1}, { 1, 1, 1, 1}, {0, 0, 0, 0} }, /* 61 */ + { {128, 0, 129, 0}, {0, 0, 1, 0}, { 1, 1, 1, 0}, {1, 1, 1, 0} }, /* 62 */ + { {128, 1, 0, 0}, {0, 1, 0, 0}, { 0, 1, 1, 1}, {0, 1, 1, 129} } /* 63 */ + }, + { /* Partition table for 3-subset BPTC */ + { {128, 0, 1, 129}, {0, 0, 1, 1}, { 0, 2, 2, 1}, { 2, 2, 2, 130} }, /* 0 */ + { {128, 0, 0, 129}, {0, 0, 1, 1}, {130, 2, 1, 1}, { 2, 2, 2, 1} }, /* 1 */ + { {128, 0, 0, 0}, {2, 0, 0, 1}, {130, 2, 1, 1}, { 2, 2, 1, 129} }, /* 2 */ + { {128, 2, 2, 130}, {0, 0, 2, 2}, { 0, 0, 1, 1}, { 0, 1, 1, 129} }, /* 3 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {129, 1, 2, 2}, { 1, 1, 2, 130} }, /* 4 */ + { {128, 0, 1, 129}, {0, 0, 1, 1}, { 0, 0, 2, 2}, { 0, 0, 2, 130} }, /* 5 */ + { {128, 0, 2, 130}, {0, 0, 2, 2}, { 1, 1, 1, 1}, { 1, 1, 1, 129} }, /* 6 */ + { {128, 0, 1, 1}, {0, 0, 1, 1}, {130, 2, 1, 1}, { 2, 2, 1, 129} }, /* 7 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {129, 1, 1, 1}, { 2, 2, 2, 130} }, /* 8 */ + { {128, 0, 0, 0}, {1, 1, 1, 1}, {129, 1, 1, 1}, { 2, 2, 2, 130} }, /* 9 */ + { {128, 0, 0, 0}, {1, 1, 129, 1}, { 2, 2, 2, 2}, { 2, 2, 2, 130} }, /* 10 */ + { {128, 0, 1, 2}, {0, 0, 129, 2}, { 0, 0, 1, 2}, { 0, 0, 1, 130} }, /* 11 */ + { {128, 1, 1, 2}, {0, 1, 129, 2}, { 0, 1, 1, 2}, { 0, 1, 1, 130} }, /* 12 */ + { {128, 1, 2, 2}, {0, 129, 2, 2}, { 0, 1, 2, 2}, { 0, 1, 2, 130} }, /* 13 */ + { {128, 0, 1, 129}, {0, 1, 1, 2}, { 1, 1, 2, 2}, { 1, 2, 2, 130} }, /* 14 */ + { {128, 0, 1, 129}, {2, 0, 0, 1}, {130, 2, 0, 0}, { 2, 2, 2, 0} }, /* 15 */ + { {128, 0, 0, 129}, {0, 0, 1, 1}, { 0, 1, 1, 2}, { 1, 1, 2, 130} }, /* 16 */ + { {128, 1, 1, 129}, {0, 0, 1, 1}, {130, 0, 0, 1}, { 2, 2, 0, 0} }, /* 17 */ + { {128, 0, 0, 0}, {1, 1, 2, 2}, {129, 1, 2, 2}, { 1, 1, 2, 130} }, /* 18 */ + { {128, 0, 2, 130}, {0, 0, 2, 2}, { 0, 0, 2, 2}, { 1, 1, 1, 129} }, /* 19 */ + { {128, 1, 1, 129}, {0, 1, 1, 1}, { 0, 2, 2, 2}, { 0, 2, 2, 130} }, /* 20 */ + { {128, 0, 0, 129}, {0, 0, 0, 1}, {130, 2, 2, 1}, { 2, 2, 2, 1} }, /* 21 */ + { {128, 0, 0, 0}, {0, 0, 129, 1}, { 0, 1, 2, 2}, { 0, 1, 2, 130} }, /* 22 */ + { {128, 0, 0, 0}, {1, 1, 0, 0}, {130, 2, 129, 0}, { 2, 2, 1, 0} }, /* 23 */ + { {128, 1, 2, 130}, {0, 129, 2, 2}, { 0, 0, 1, 1}, { 0, 0, 0, 0} }, /* 24 */ + { {128, 0, 1, 2}, {0, 0, 1, 2}, {129, 1, 2, 2}, { 2, 2, 2, 130} }, /* 25 */ + { {128, 1, 1, 0}, {1, 2, 130, 1}, {129, 2, 2, 1}, { 0, 1, 1, 0} }, /* 26 */ + { {128, 0, 0, 0}, {0, 1, 129, 0}, { 1, 2, 130, 1}, { 1, 2, 2, 1} }, /* 27 */ + { {128, 0, 2, 2}, {1, 1, 0, 2}, {129, 1, 0, 2}, { 0, 0, 2, 130} }, /* 28 */ + { {128, 1, 1, 0}, {0, 129, 1, 0}, { 2, 0, 0, 2}, { 2, 2, 2, 130} }, /* 29 */ + { {128, 0, 1, 1}, {0, 1, 2, 2}, { 0, 1, 130, 2}, { 0, 0, 1, 129} }, /* 30 */ + { {128, 0, 0, 0}, {2, 0, 0, 0}, {130, 2, 1, 1}, { 2, 2, 2, 129} }, /* 31 */ + { {128, 0, 0, 0}, {0, 0, 0, 2}, {129, 1, 2, 2}, { 1, 2, 2, 130} }, /* 32 */ + { {128, 2, 2, 130}, {0, 0, 2, 2}, { 0, 0, 1, 2}, { 0, 0, 1, 129} }, /* 33 */ + { {128, 0, 1, 129}, {0, 0, 1, 2}, { 0, 0, 2, 2}, { 0, 2, 2, 130} }, /* 34 */ + { {128, 1, 2, 0}, {0, 129, 2, 0}, { 0, 1, 130, 0}, { 0, 1, 2, 0} }, /* 35 */ + { {128, 0, 0, 0}, {1, 1, 129, 1}, { 2, 2, 130, 2}, { 0, 0, 0, 0} }, /* 36 */ + { {128, 1, 2, 0}, {1, 2, 0, 1}, {130, 0, 129, 2}, { 0, 1, 2, 0} }, /* 37 */ + { {128, 1, 2, 0}, {2, 0, 1, 2}, {129, 130, 0, 1}, { 0, 1, 2, 0} }, /* 38 */ + { {128, 0, 1, 1}, {2, 2, 0, 0}, { 1, 1, 130, 2}, { 0, 0, 1, 129} }, /* 39 */ + { {128, 0, 1, 1}, {1, 1, 130, 2}, { 2, 2, 0, 0}, { 0, 0, 1, 129} }, /* 40 */ + { {128, 1, 0, 129}, {0, 1, 0, 1}, { 2, 2, 2, 2}, { 2, 2, 2, 130} }, /* 41 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, {130, 1, 2, 1}, { 2, 1, 2, 129} }, /* 42 */ + { {128, 0, 2, 2}, {1, 129, 2, 2}, { 0, 0, 2, 2}, { 1, 1, 2, 130} }, /* 43 */ + { {128, 0, 2, 130}, {0, 0, 1, 1}, { 0, 0, 2, 2}, { 0, 0, 1, 129} }, /* 44 */ + { {128, 2, 2, 0}, {1, 2, 130, 1}, { 0, 2, 2, 0}, { 1, 2, 2, 129} }, /* 45 */ + { {128, 1, 0, 1}, {2, 2, 130, 2}, { 2, 2, 2, 2}, { 0, 1, 0, 129} }, /* 46 */ + { {128, 0, 0, 0}, {2, 1, 2, 1}, {130, 1, 2, 1}, { 2, 1, 2, 129} }, /* 47 */ + { {128, 1, 0, 129}, {0, 1, 0, 1}, { 0, 1, 0, 1}, { 2, 2, 2, 130} }, /* 48 */ + { {128, 2, 2, 130}, {0, 1, 1, 1}, { 0, 2, 2, 2}, { 0, 1, 1, 129} }, /* 49 */ + { {128, 0, 0, 2}, {1, 129, 1, 2}, { 0, 0, 0, 2}, { 1, 1, 1, 130} }, /* 50 */ + { {128, 0, 0, 0}, {2, 129, 1, 2}, { 2, 1, 1, 2}, { 2, 1, 1, 130} }, /* 51 */ + { {128, 2, 2, 2}, {0, 129, 1, 1}, { 0, 1, 1, 1}, { 0, 2, 2, 130} }, /* 52 */ + { {128, 0, 0, 2}, {1, 1, 1, 2}, {129, 1, 1, 2}, { 0, 0, 0, 130} }, /* 53 */ + { {128, 1, 1, 0}, {0, 129, 1, 0}, { 0, 1, 1, 0}, { 2, 2, 2, 130} }, /* 54 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 2, 1, 129, 2}, { 2, 1, 1, 130} }, /* 55 */ + { {128, 1, 1, 0}, {0, 129, 1, 0}, { 2, 2, 2, 2}, { 2, 2, 2, 130} }, /* 56 */ + { {128, 0, 2, 2}, {0, 0, 1, 1}, { 0, 0, 129, 1}, { 0, 0, 2, 130} }, /* 57 */ + { {128, 0, 2, 2}, {1, 1, 2, 2}, {129, 1, 2, 2}, { 0, 0, 2, 130} }, /* 58 */ + { {128, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 0}, { 2, 129, 1, 130} }, /* 59 */ + { {128, 0, 0, 130}, {0, 0, 0, 1}, { 0, 0, 0, 2}, { 0, 0, 0, 129} }, /* 60 */ + { {128, 2, 2, 2}, {1, 2, 2, 2}, { 0, 2, 2, 2}, {129, 2, 2, 130} }, /* 61 */ + { {128, 1, 0, 129}, {2, 2, 2, 2}, { 2, 2, 2, 2}, { 2, 2, 2, 130} }, /* 62 */ + { {128, 1, 1, 129}, {2, 0, 1, 1}, {130, 2, 0, 1}, { 2, 2, 2, 0} } /* 63 */ + } + }; + + static int aWeight2[] = { 0, 21, 43, 64 }; + static int aWeight3[] = { 0, 9, 18, 27, 37, 46, 55, 64 }; + static int aWeight4[] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + + static unsigned char sModeHasPBits = 0b11001011; + + bcdec__bitstream_t bstream; + int mode, partition, numPartitions, numEndpoints, i, j, k, rotation, partitionSet; + int indexSelectionBit, indexBits, indexBits2, index, index2; + int endpoints[6][4]; + char indices[4][4]; + int r, g, b, a; + int* weights, * weights2; + unsigned char* decompressed; + + decompressed = (unsigned char*)decompressedBlock; + + bstream.low = bcdec__getu64le(compressedBlock); + bstream.high = bcdec__getu64le((const unsigned char*)compressedBlock + 8); + + for (mode = 0; mode < 8 && (0 == bcdec__bitstream_read_bit(&bstream)); ++mode); + + /* unexpected mode, clear the block (transparent black) */ + if (mode >= 8) { + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + decompressed[j * 4 + 0] = 0; + decompressed[j * 4 + 1] = 0; + decompressed[j * 4 + 2] = 0; + decompressed[j * 4 + 3] = 0; + } + decompressed += destinationPitch; + } + + return; + } + + partition = 0; + numPartitions = 1; + rotation = 0; + indexSelectionBit = 0; + + if (mode == 0 || mode == 1 || mode == 2 || mode == 3 || mode == 7) { + numPartitions = (mode == 0 || mode == 2) ? 3 : 2; + partition = bcdec__bitstream_read_bits(&bstream, (mode == 0) ? 4 : 6); + } + + numEndpoints = numPartitions * 2; + + if (mode == 4 || mode == 5) { + rotation = bcdec__bitstream_read_bits(&bstream, 2); + + if (mode == 4) { + indexSelectionBit = bcdec__bitstream_read_bit(&bstream); + } + } + + /* Extract endpoints */ + /* RGB */ + for (i = 0; i < 3; ++i) { + for (j = 0; j < numEndpoints; ++j) { + endpoints[j][i] = bcdec__bitstream_read_bits(&bstream, actual_bits_count[0][mode]); + } + } + /* Alpha (if any) */ + if (actual_bits_count[1][mode] > 0) { + for (j = 0; j < numEndpoints; ++j) { + endpoints[j][3] = bcdec__bitstream_read_bits(&bstream, actual_bits_count[1][mode]); + } + } + + /* Fully decode endpoints */ + /* First handle modes that have P-bits */ + if (mode == 0 || mode == 1 || mode == 3 || mode == 6 || mode == 7) { + for (i = 0; i < numEndpoints; ++i) { + /* component-wise left-shift */ + for (j = 0; j < 4; ++j) { + endpoints[i][j] <<= 1; + } + } + + /* if P-bit is shared */ + if (mode == 1) { + i = bcdec__bitstream_read_bit(&bstream); + j = bcdec__bitstream_read_bit(&bstream); + + /* rgb component-wise insert pbits */ + for (k = 0; k < 3; ++k) { + endpoints[0][k] |= i; + endpoints[1][k] |= i; + endpoints[2][k] |= j; + endpoints[3][k] |= j; + } + } else if (sModeHasPBits & (1 << mode)) { + /* unique P-bit per endpoint */ + for (i = 0; i < numEndpoints; ++i) { + j = bcdec__bitstream_read_bit(&bstream); + for (k = 0; k < 4; ++k) { + endpoints[i][k] |= j; + } + } + } + } + + for (i = 0; i < numEndpoints; ++i) { + /* get color components precision including pbit */ + j = actual_bits_count[0][mode] + ((sModeHasPBits >> mode) & 1); + + for (k = 0; k < 3; ++k) { + /* left shift endpoint components so that their MSB lies in bit 7 */ + endpoints[i][k] = endpoints[i][k] << (8 - j); + /* Replicate each component's MSB into the LSBs revealed by the left-shift operation above */ + endpoints[i][k] = endpoints[i][k] | (endpoints[i][k] >> j); + } + + /* get alpha component precision including pbit */ + j = actual_bits_count[1][mode] + ((sModeHasPBits >> mode) & 1); + + /* left shift endpoint components so that their MSB lies in bit 7 */ + endpoints[i][3] = endpoints[i][3] << (8 - j); + /* Replicate each component's MSB into the LSBs revealed by the left-shift operation above */ + endpoints[i][3] = endpoints[i][3] | (endpoints[i][3] >> j); + } + + /* If this mode does not explicitly define the alpha component */ + /* set alpha equal to 1.0 */ + if (!actual_bits_count[1][mode]) { + for (j = 0; j < numEndpoints; ++j) { + endpoints[j][3] = 0xFF; + } + } + + /* Determine weights tables */ + indexBits = (mode == 0 || mode == 1) ? 3 : ((mode == 6) ? 4 : 2); + indexBits2 = (mode == 4) ? 3 : ((mode == 5) ? 2 : 0); + weights = (indexBits == 2) ? aWeight2 : ((indexBits == 3) ? aWeight3 : aWeight4); + weights2 = (indexBits2 == 2) ? aWeight2 : aWeight3; + + /* Quite inconvenient that indices aren't interleaved so we have to make 2 passes here */ + /* Pass #1: collecting color indices */ + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + partitionSet = (numPartitions == 1) ? ((i | j) ? 0 : 128) : partition_sets[numPartitions - 2][partition][i][j]; + + indexBits = (mode == 0 || mode == 1) ? 3 : ((mode == 6) ? 4 : 2); + /* fix-up index is specified with one less bit */ + /* The fix-up index for subset 0 is always index 0 */ + if (partitionSet & 0x80) { + indexBits--; + } + + indices[i][j] = bcdec__bitstream_read_bits(&bstream, indexBits); + } + } + + /* Pass #2: reading alpha indices (if any) and interpolating & rotating */ + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + partitionSet = (numPartitions == 1) ? ((i|j) ? 0 : 128) : partition_sets[numPartitions - 2][partition][i][j]; + partitionSet &= 0x03; + + index = indices[i][j]; + + if (!indexBits2) { + r = bcdec__interpolate(endpoints[partitionSet * 2][0], endpoints[partitionSet * 2 + 1][0], weights, index); + g = bcdec__interpolate(endpoints[partitionSet * 2][1], endpoints[partitionSet * 2 + 1][1], weights, index); + b = bcdec__interpolate(endpoints[partitionSet * 2][2], endpoints[partitionSet * 2 + 1][2], weights, index); + a = bcdec__interpolate(endpoints[partitionSet * 2][3], endpoints[partitionSet * 2 + 1][3], weights, index); + } else { + index2 = bcdec__bitstream_read_bits(&bstream, (i|j) ? indexBits2 : (indexBits2 - 1)); + /* The index value for interpolating color comes from the secondary index bits for the texel + if the mode has an index selection bit and its value is one, and from the primary index bits otherwise. + The alpha index comes from the secondary index bits if the block has a secondary index and + the block either doesn’t have an index selection bit or that bit is zero, and from the primary index bits otherwise. */ + if (!indexSelectionBit) { + r = bcdec__interpolate(endpoints[partitionSet * 2][0], endpoints[partitionSet * 2 + 1][0], weights, index); + g = bcdec__interpolate(endpoints[partitionSet * 2][1], endpoints[partitionSet * 2 + 1][1], weights, index); + b = bcdec__interpolate(endpoints[partitionSet * 2][2], endpoints[partitionSet * 2 + 1][2], weights, index); + a = bcdec__interpolate(endpoints[partitionSet * 2][3], endpoints[partitionSet * 2 + 1][3], weights2, index2); + } else { + r = bcdec__interpolate(endpoints[partitionSet * 2][0], endpoints[partitionSet * 2 + 1][0], weights2, index2); + g = bcdec__interpolate(endpoints[partitionSet * 2][1], endpoints[partitionSet * 2 + 1][1], weights2, index2); + b = bcdec__interpolate(endpoints[partitionSet * 2][2], endpoints[partitionSet * 2 + 1][2], weights2, index2); + a = bcdec__interpolate(endpoints[partitionSet * 2][3], endpoints[partitionSet * 2 + 1][3], weights, index); + } + } + + switch (rotation) { + case 1: { /* 01 – Block format is Scalar(R) Vector(AGB) - swap A and R */ + bcdec__swap_values(&a, &r); + } break; + case 2: { /* 10 – Block format is Scalar(G) Vector(RAB) - swap A and G */ + bcdec__swap_values(&a, &g); + } break; + case 3: { /* 11 - Block format is Scalar(B) Vector(RGA) - swap A and B */ + bcdec__swap_values(&a, &b); + } break; + } + + decompressed[j * 4 + 0] = r; + decompressed[j * 4 + 1] = g; + decompressed[j * 4 + 2] = b; + decompressed[j * 4 + 3] = a; + } + + decompressed += destinationPitch; + } +} + +#endif /* BCDEC_IMPLEMENTATION */ + +/* LICENSE: + +This software is available under 2 licenses -- choose whichever you prefer. + +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License + +Copyright (c) 2022 Sergii Kudlai + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------------ +ALTERNATIVE B - The Unlicense + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + +*/