diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 73f336a6..1312f90f 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -78,6 +78,8 @@ set(UNLEASHED_RECOMP_COMPILE_DEFINITIONS if (NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") list(APPEND UNLEASHED_RECOMP_COMPILE_DEFINITIONS SDL_MAIN_HANDLED) +else() + list(APPEND UNLEASHED_RECOMP_COMPILE_DEFINITIONS UNLEASHED_RECOMP_IOS) endif() add_compile_definitions(${UNLEASHED_RECOMP_COMPILE_DEFINITIONS}) @@ -116,10 +118,18 @@ elseif (CMAKE_SYSTEM_NAME MATCHES "Linux") "os/linux/user_linux.cpp" "os/linux/version_linux.cpp" ) +elseif (CMAKE_SYSTEM_NAME STREQUAL "iOS") + set(UNLEASHED_RECOMP_OS_CXX_SOURCES + "os/ios/logger_ios.cpp" + "os/ios/media_ios.cpp" + "os/ios/process_ios.mm" + "os/ios/user_ios.mm" + "os/ios/version_ios.mm" + ) elseif (APPLE) set(UNLEASHED_RECOMP_OS_CXX_SOURCES "os/macos/logger_macos.cpp" - "os/macos/media_macos.cpp" + "os/macos/media_macos.cpp" "os/macos/process_macos.cpp" "os/macos/user_macos.cpp" "os/macos/version_macos.cpp" @@ -453,6 +463,12 @@ if (CMAKE_SYSTEM_NAME STREQUAL "iOS" AND TARGET SDL2::SDL2main) list(PREPEND UNLEASHED_RECOMP_SDL_LIBS SDL2::SDL2main) endif() +set(UNLEASHED_RECOMP_PLATFORM_LIBS) +if (CMAKE_SYSTEM_NAME STREQUAL "iOS") + list(APPEND UNLEASHED_RECOMP_PLATFORM_LIBS MoltenVK) + target_link_options(UnleashedRecomp PRIVATE "LINKER:-u,_vkGetInstanceProcAddr") +endif() + target_link_libraries(UnleashedRecomp PRIVATE fmt::fmt libzstd_static @@ -463,11 +479,12 @@ target_link_libraries(UnleashedRecomp PRIVATE ${UNLEASHED_RECOMP_SDL_LIBS} SDL2_mixer tomlplusplus::tomlplusplus - UnleashedRecompLib - xxHash::xxhash - CURL::libcurl - plume -) + UnleashedRecompLib + xxHash::xxhash + CURL::libcurl + plume + ${UNLEASHED_RECOMP_PLATFORM_LIBS} +) target_include_directories(UnleashedRecomp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/UnleashedRecomp/os/ios/logger_ios.cpp b/UnleashedRecomp/os/ios/logger_ios.cpp new file mode 100644 index 00000000..82740ad9 --- /dev/null +++ b/UnleashedRecomp/os/ios/logger_ios.cpp @@ -0,0 +1,19 @@ +#include + +void os::logger::Init() +{ +} + +void os::logger::Log(const std::string_view str, ELogType type, const char* func) +{ + (void)type; + + if (func) + { + fmt::println("[{}] {}", func, str); + } + else + { + fmt::println("{}", str); + } +} diff --git a/UnleashedRecomp/os/ios/media_ios.cpp b/UnleashedRecomp/os/ios/media_ios.cpp new file mode 100644 index 00000000..5431ede1 --- /dev/null +++ b/UnleashedRecomp/os/ios/media_ios.cpp @@ -0,0 +1,6 @@ +#include + +bool os::media::IsExternalMediaPlaying() +{ + return false; +} diff --git a/UnleashedRecomp/os/ios/process_ios.mm b/UnleashedRecomp/os/ios/process_ios.mm new file mode 100644 index 00000000..7c89b341 --- /dev/null +++ b/UnleashedRecomp/os/ios/process_ios.mm @@ -0,0 +1,62 @@ +#include + +#import + +#include +#include +#include + +std::filesystem::path os::process::GetExecutablePath() +{ + uint32_t exePathSize = PATH_MAX; + char exePath[PATH_MAX] = {}; + if (_NSGetExecutablePath(exePath, &exePathSize) == 0) + { + return std::filesystem::path(std::u8string_view(reinterpret_cast(exePath))); + } + + return {}; +} + +std::filesystem::path os::process::GetExecutableRoot() +{ + @autoreleasepool + { + NSString* resourcePath = [[NSBundle mainBundle] resourcePath]; + if (resourcePath.length > 0) + return std::filesystem::path(std::u8string_view(reinterpret_cast(resourcePath.UTF8String))); + } + + return GetExecutablePath().remove_filename(); +} + +std::filesystem::path os::process::GetWorkingDirectory() +{ + char cwd[PATH_MAX] = {}; + if (getcwd(cwd, sizeof(cwd)) != nullptr) + return std::filesystem::path(std::u8string_view(reinterpret_cast(cwd))); + + return {}; +} + +bool os::process::SetWorkingDirectory(const std::filesystem::path& path) +{ + return chdir(path.c_str()) == 0; +} + +bool os::process::StartProcess(const std::filesystem::path& path, const std::vector& args, std::filesystem::path work) +{ + (void)path; + (void)args; + (void)work; + return false; +} + +void os::process::CheckConsole() +{ + g_consoleVisible = false; +} + +void os::process::ShowConsole() +{ +} diff --git a/UnleashedRecomp/os/ios/user_ios.mm b/UnleashedRecomp/os/ios/user_ios.mm new file mode 100644 index 00000000..d79d9ebe --- /dev/null +++ b/UnleashedRecomp/os/ios/user_ios.mm @@ -0,0 +1,11 @@ +#include + +#import + +bool os::user::IsDarkTheme() +{ + if (@available(iOS 13.0, *)) + return UIScreen.mainScreen.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark; + + return false; +} diff --git a/UnleashedRecomp/os/ios/version_ios.mm b/UnleashedRecomp/os/ios/version_ios.mm new file mode 100644 index 00000000..261db357 --- /dev/null +++ b/UnleashedRecomp/os/ios/version_ios.mm @@ -0,0 +1,15 @@ +#include + +#import + +os::version::OSVersion os::version::GetOSVersion() +{ + os::version::OSVersion result; + + NSOperatingSystemVersion version = NSProcessInfo.processInfo.operatingSystemVersion; + result.Major = static_cast(version.majorVersion); + result.Minor = static_cast(version.minorVersion); + result.Build = static_cast(version.patchVersion); + + return result; +} diff --git a/UnleashedRecomp/res/ios/Info.plist.in b/UnleashedRecomp/res/ios/Info.plist.in index 8c3fe5b5..bfb2b80b 100644 --- a/UnleashedRecomp/res/ios/Info.plist.in +++ b/UnleashedRecomp/res/ios/Info.plist.in @@ -57,8 +57,12 @@ ${MACOSX_BUNDLE_BUNDLE_VERSION} LSRequiresIPhoneOS + LSSupportsOpeningDocumentsInPlace + MinimumOSVersion 13.0 + UIFileSharingEnabled + UIApplicationSupportsIndirectInputEvents UILaunchScreen diff --git a/UnleashedRecomp/ui/installer_wizard.cpp b/UnleashedRecomp/ui/installer_wizard.cpp index a9d060ed..03a93272 100644 --- a/UnleashedRecomp/ui/installer_wizard.cpp +++ b/UnleashedRecomp/ui/installer_wizard.cpp @@ -1109,7 +1109,7 @@ static bool ConvertPathSet(const nfdpathset_t *pathSet, std::list + +#import + +#include +#include + +#include + +struct NFDIOSPathSet +{ + nfdpathsetsize_t count; + char** paths; +}; + +struct NFDIOSPathSetEnumerator +{ + const NFDIOSPathSet* pathSet; + nfdpathsetsize_t index; +}; + +static std::string g_error; +static NSMutableArray* g_securityScopedURLs; + +static void NFDi_SetError(const char* msg) +{ + g_error = msg ? msg : ""; +} + +static void NFDi_SetErrorNSString(NSString* msg) +{ + NFDi_SetError(msg ? [msg UTF8String] : "Unknown iOS document picker error."); +} + +static nfdresult_t NFDi_CopyUtf8String(const char* utf8Str, char** out) +{ + if (!out) + { + NFDi_SetError("NFD output path was null."); + return NFD_ERROR; + } + + *out = nullptr; + + if (!utf8Str) + { + NFDi_SetError("iOS document picker returned a null path."); + return NFD_ERROR; + } + + size_t len = strlen(utf8Str); + char* result = static_cast(malloc(len + 1)); + if (!result) + { + NFDi_SetError("Failed to allocate NFD path."); + return NFD_ERROR; + } + + memcpy(result, utf8Str, len + 1); + *out = result; + return NFD_OKAY; +} + +static UIViewController* NFDi_GetTopViewController() +{ + UIApplication* application = [UIApplication sharedApplication]; + UIWindow* keyWindow = nil; + + if (@available(iOS 13.0, *)) + { + for (UIScene* scene in [application connectedScenes]) + { + if (scene.activationState != UISceneActivationStateForegroundActive || + ![scene isKindOfClass:[UIWindowScene class]]) + { + continue; + } + + UIWindowScene* windowScene = static_cast(scene); + for (UIWindow* window in windowScene.windows) + { + if (window.isKeyWindow) + { + keyWindow = window; + break; + } + } + + if (keyWindow) + break; + } + } + + if (!keyWindow) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + keyWindow = application.keyWindow; +#pragma clang diagnostic pop + } + + UIViewController* controller = keyWindow.rootViewController; + while (controller.presentedViewController) + controller = controller.presentedViewController; + + return controller; +} + +static nfdresult_t NFDi_CreatePathSet(NSArray* paths, const nfdpathset_t** outPaths) +{ + if (!outPaths) + { + NFDi_SetError("NFD output path set was null."); + return NFD_ERROR; + } + + *outPaths = nullptr; + + if (!paths || paths.count == 0) + return NFD_CANCEL; + + NFDIOSPathSet* pathSet = static_cast(calloc(1, sizeof(NFDIOSPathSet))); + if (!pathSet) + { + NFDi_SetError("Failed to allocate NFD path set."); + return NFD_ERROR; + } + + pathSet->count = static_cast(paths.count); + pathSet->paths = static_cast(calloc(pathSet->count, sizeof(char*))); + if (!pathSet->paths) + { + free(pathSet); + NFDi_SetError("Failed to allocate NFD path set entries."); + return NFD_ERROR; + } + + for (nfdpathsetsize_t i = 0; i < pathSet->count; i++) + { + NSString* path = [paths objectAtIndex:i]; + if (NFDi_CopyUtf8String([path UTF8String], &pathSet->paths[i]) != NFD_OKAY) + { + for (nfdpathsetsize_t j = 0; j < i; j++) + free(pathSet->paths[j]); + + free(pathSet->paths); + free(pathSet); + return NFD_ERROR; + } + } + + *outPaths = reinterpret_cast(pathSet); + return NFD_OKAY; +} + +@interface NFDIOSPickerDelegate : NSObject +{ +@public + BOOL completed; + nfdresult_t result; + NSArray* paths; +} +@end + +@implementation NFDIOSPickerDelegate + +- (id)init +{ + self = [super init]; + if (self) + { + completed = NO; + result = NFD_CANCEL; + paths = nil; + } + + return self; +} + +- (void)dealloc +{ + [paths release]; + [super dealloc]; +} + +- (void)documentPickerWasCancelled:(UIDocumentPickerViewController*)controller +{ + (void)controller; + result = NFD_CANCEL; + completed = YES; +} + +- (void)documentPicker:(UIDocumentPickerViewController*)controller didPickDocumentsAtURLs:(NSArray*)urls +{ + (void)controller; + + NSMutableArray* pickedPaths = [NSMutableArray arrayWithCapacity:urls.count]; + + for (NSURL* url in urls) + { + BOOL scoped = [url startAccessingSecurityScopedResource]; + if (scoped) + { + if (!g_securityScopedURLs) + g_securityScopedURLs = [[NSMutableArray alloc] init]; + + [g_securityScopedURLs addObject:url]; + } + + NSString* path = url.path; + if (path.length > 0) + [pickedPaths addObject:path]; + } + + [paths release]; + paths = [[NSArray alloc] initWithArray:pickedPaths]; + result = paths.count > 0 ? NFD_OKAY : NFD_CANCEL; + completed = YES; +} + +@end + +static void NFDi_PresentPicker(NFDIOSPickerDelegate* delegate, bool folderMode, bool multiple) +{ + UIViewController* presenter = NFDi_GetTopViewController(); + if (!presenter) + { + NFDi_SetError("Unable to find an iOS view controller for the document picker."); + delegate->result = NFD_ERROR; + delegate->completed = YES; + return; + } + + NSArray* documentTypes = folderMode ? @[ @"public.folder" ] : @[ @"public.item" ]; + UIDocumentPickerViewController* picker = + [[UIDocumentPickerViewController alloc] initWithDocumentTypes:documentTypes + inMode:UIDocumentPickerModeOpen]; + + picker.delegate = delegate; + picker.allowsMultipleSelection = multiple ? YES : NO; + + UIPopoverPresentationController* popover = picker.popoverPresentationController; + if (popover) + { + popover.sourceView = presenter.view; + popover.sourceRect = CGRectMake(CGRectGetMidX(presenter.view.bounds), CGRectGetMidY(presenter.view.bounds), 1.0, 1.0); + popover.permittedArrowDirections = 0; + } + + [presenter presentViewController:picker animated:YES completion:nil]; + [picker release]; +} + +static nfdresult_t NFDi_RunPicker(const nfdpathset_t** outPaths, bool folderMode, bool multiple) +{ + @autoreleasepool + { + NFDIOSPickerDelegate* delegate = [[NFDIOSPickerDelegate alloc] init]; + + if ([NSThread isMainThread]) + { + NFDi_PresentPicker(delegate, folderMode, multiple); + while (!delegate->completed) + { + @autoreleasepool + { + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode + beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.05]]; + } + } + } + else + { + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + dispatch_async(dispatch_get_main_queue(), ^{ + NFDi_PresentPicker(delegate, folderMode, multiple); + if (delegate->completed) + dispatch_semaphore_signal(semaphore); + }); + + while (!delegate->completed) + { + dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 50 * NSEC_PER_MSEC)); + } + } + + nfdresult_t result = delegate->result; + if (result == NFD_OKAY) + result = NFDi_CreatePathSet(delegate->paths, outPaths); + + [delegate release]; + return result; + } +} + +extern "C" { + +nfdresult_t NFD_Init(void) +{ + NFDi_SetError(nullptr); + return NFD_OKAY; +} + +void NFD_Quit(void) +{ + for (NSURL* url in g_securityScopedURLs) + [url stopAccessingSecurityScopedResource]; + + [g_securityScopedURLs release]; + g_securityScopedURLs = nil; +} + +const char* NFD_GetError(void) +{ + return g_error.empty() ? nullptr : g_error.c_str(); +} + +void NFD_ClearError(void) +{ + NFDi_SetError(nullptr); +} + +void NFD_FreePathN(nfdnchar_t* filePath) +{ + free(filePath); +} + +void NFD_FreePathU8(nfdu8char_t* filePath) +{ + free(filePath); +} + +nfdresult_t NFD_OpenDialogN(nfdnchar_t** outPath, + const nfdnfilteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdnchar_t* defaultPath) +{ + (void)filterList; + (void)filterCount; + (void)defaultPath; + + const nfdpathset_t* pathSet = nullptr; + nfdresult_t result = NFDi_RunPicker(&pathSet, false, false); + if (result != NFD_OKAY) + return result; + + result = NFD_PathSet_GetPathN(pathSet, 0, outPath); + NFD_PathSet_Free(pathSet); + return result; +} + +nfdresult_t NFD_OpenDialogU8(nfdu8char_t** outPath, + const nfdu8filteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdu8char_t* defaultPath) +{ + return NFD_OpenDialogN(outPath, filterList, filterCount, defaultPath); +} + +nfdresult_t NFD_OpenDialogN_With_Impl(nfdversion_t version, + nfdnchar_t** outPath, + const nfdopendialognargs_t* args) +{ + (void)version; + return NFD_OpenDialogN(outPath, + args ? args->filterList : nullptr, + args ? args->filterCount : 0, + args ? args->defaultPath : nullptr); +} + +nfdresult_t NFD_OpenDialogU8_With_Impl(nfdversion_t version, + nfdu8char_t** outPath, + const nfdopendialogu8args_t* args) +{ + return NFD_OpenDialogN_With_Impl(version, outPath, args); +} + +nfdresult_t NFD_OpenDialogMultipleN(const nfdpathset_t** outPaths, + const nfdnfilteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdnchar_t* defaultPath) +{ + (void)filterList; + (void)filterCount; + (void)defaultPath; + return NFDi_RunPicker(outPaths, false, true); +} + +nfdresult_t NFD_OpenDialogMultipleU8(const nfdpathset_t** outPaths, + const nfdu8filteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdu8char_t* defaultPath) +{ + return NFD_OpenDialogMultipleN(outPaths, filterList, filterCount, defaultPath); +} + +nfdresult_t NFD_OpenDialogMultipleN_With_Impl(nfdversion_t version, + const nfdpathset_t** outPaths, + const nfdopendialognargs_t* args) +{ + (void)version; + return NFD_OpenDialogMultipleN(outPaths, + args ? args->filterList : nullptr, + args ? args->filterCount : 0, + args ? args->defaultPath : nullptr); +} + +nfdresult_t NFD_OpenDialogMultipleU8_With_Impl(nfdversion_t version, + const nfdpathset_t** outPaths, + const nfdopendialogu8args_t* args) +{ + return NFD_OpenDialogMultipleN_With_Impl(version, outPaths, args); +} + +nfdresult_t NFD_SaveDialogN(nfdnchar_t** outPath, + const nfdnfilteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdnchar_t* defaultPath, + const nfdnchar_t* defaultName) +{ + (void)outPath; + (void)filterList; + (void)filterCount; + (void)defaultPath; + (void)defaultName; + NFDi_SetError("Save dialogs are not supported by the iOS document picker backend."); + return NFD_ERROR; +} + +nfdresult_t NFD_SaveDialogU8(nfdu8char_t** outPath, + const nfdu8filteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdu8char_t* defaultPath, + const nfdu8char_t* defaultName) +{ + return NFD_SaveDialogN(outPath, filterList, filterCount, defaultPath, defaultName); +} + +nfdresult_t NFD_SaveDialogN_With_Impl(nfdversion_t version, + nfdnchar_t** outPath, + const nfdsavedialognargs_t* args) +{ + (void)version; + return NFD_SaveDialogN(outPath, + args ? args->filterList : nullptr, + args ? args->filterCount : 0, + args ? args->defaultPath : nullptr, + args ? args->defaultName : nullptr); +} + +nfdresult_t NFD_SaveDialogU8_With_Impl(nfdversion_t version, + nfdu8char_t** outPath, + const nfdsavedialogu8args_t* args) +{ + return NFD_SaveDialogN_With_Impl(version, outPath, args); +} + +nfdresult_t NFD_PickFolderN(nfdnchar_t** outPath, const nfdnchar_t* defaultPath) +{ + (void)defaultPath; + + const nfdpathset_t* pathSet = nullptr; + nfdresult_t result = NFDi_RunPicker(&pathSet, true, false); + if (result != NFD_OKAY) + return result; + + result = NFD_PathSet_GetPathN(pathSet, 0, outPath); + NFD_PathSet_Free(pathSet); + return result; +} + +nfdresult_t NFD_PickFolderU8(nfdu8char_t** outPath, const nfdu8char_t* defaultPath) +{ + return NFD_PickFolderN(outPath, defaultPath); +} + +nfdresult_t NFD_PickFolderN_With_Impl(nfdversion_t version, + nfdnchar_t** outPath, + const nfdpickfoldernargs_t* args) +{ + (void)version; + return NFD_PickFolderN(outPath, args ? args->defaultPath : nullptr); +} + +nfdresult_t NFD_PickFolderU8_With_Impl(nfdversion_t version, + nfdu8char_t** outPath, + const nfdpickfolderu8args_t* args) +{ + return NFD_PickFolderN_With_Impl(version, outPath, args); +} + +nfdresult_t NFD_PickFolderMultipleN(const nfdpathset_t** outPaths, const nfdnchar_t* defaultPath) +{ + (void)defaultPath; + return NFDi_RunPicker(outPaths, true, true); +} + +nfdresult_t NFD_PickFolderMultipleU8(const nfdpathset_t** outPaths, const nfdu8char_t* defaultPath) +{ + return NFD_PickFolderMultipleN(outPaths, defaultPath); +} + +nfdresult_t NFD_PickFolderMultipleN_With_Impl(nfdversion_t version, + const nfdpathset_t** outPaths, + const nfdpickfoldernargs_t* args) +{ + (void)version; + return NFD_PickFolderMultipleN(outPaths, args ? args->defaultPath : nullptr); +} + +nfdresult_t NFD_PickFolderMultipleU8_With_Impl(nfdversion_t version, + const nfdpathset_t** outPaths, + const nfdpickfolderu8args_t* args) +{ + return NFD_PickFolderMultipleN_With_Impl(version, outPaths, args); +} + +nfdresult_t NFD_PathSet_GetCount(const nfdpathset_t* pathSet, nfdpathsetsize_t* count) +{ + if (!pathSet || !count) + { + NFDi_SetError("NFD path set or count was null."); + return NFD_ERROR; + } + + const NFDIOSPathSet* iosPathSet = reinterpret_cast(pathSet); + *count = iosPathSet->count; + return NFD_OKAY; +} + +nfdresult_t NFD_PathSet_GetPathN(const nfdpathset_t* pathSet, nfdpathsetsize_t index, nfdnchar_t** outPath) +{ + if (!pathSet) + { + NFDi_SetError("NFD path set was null."); + return NFD_ERROR; + } + + const NFDIOSPathSet* iosPathSet = reinterpret_cast(pathSet); + if (index >= iosPathSet->count) + { + NFDi_SetError("NFD path set index was out of range."); + return NFD_ERROR; + } + + return NFDi_CopyUtf8String(iosPathSet->paths[index], outPath); +} + +nfdresult_t NFD_PathSet_GetPathU8(const nfdpathset_t* pathSet, nfdpathsetsize_t index, nfdu8char_t** outPath) +{ + return NFD_PathSet_GetPathN(pathSet, index, outPath); +} + +void NFD_PathSet_FreePathN(const nfdnchar_t* filePath) +{ + free(const_cast(filePath)); +} + +void NFD_PathSet_FreePathU8(const nfdu8char_t* filePath) +{ + free(const_cast(filePath)); +} + +void NFD_PathSet_Free(const nfdpathset_t* pathSet) +{ + if (!pathSet) + return; + + const NFDIOSPathSet* iosPathSet = reinterpret_cast(pathSet); + for (nfdpathsetsize_t i = 0; i < iosPathSet->count; i++) + free(iosPathSet->paths[i]); + + free(iosPathSet->paths); + free(const_cast(iosPathSet)); +} + +nfdresult_t NFD_PathSet_GetEnum(const nfdpathset_t* pathSet, nfdpathsetenum_t* outEnumerator) +{ + if (!pathSet || !outEnumerator) + { + NFDi_SetError("NFD path set or enumerator was null."); + return NFD_ERROR; + } + + NFDIOSPathSetEnumerator* enumerator = + static_cast(calloc(1, sizeof(NFDIOSPathSetEnumerator))); + if (!enumerator) + { + NFDi_SetError("Failed to allocate NFD path set enumerator."); + return NFD_ERROR; + } + + enumerator->pathSet = reinterpret_cast(pathSet); + enumerator->index = 0; + outEnumerator->ptr = enumerator; + return NFD_OKAY; +} + +void NFD_PathSet_FreeEnum(nfdpathsetenum_t* enumerator) +{ + if (!enumerator) + return; + + free(enumerator->ptr); + enumerator->ptr = nullptr; +} + +nfdresult_t NFD_PathSet_EnumNextN(nfdpathsetenum_t* enumerator, nfdnchar_t** outPath) +{ + if (!enumerator || !outPath) + { + NFDi_SetError("NFD enumerator or output path was null."); + return NFD_ERROR; + } + + NFDIOSPathSetEnumerator* iosEnumerator = static_cast(enumerator->ptr); + if (!iosEnumerator || !iosEnumerator->pathSet) + { + NFDi_SetError("NFD enumerator was invalid."); + return NFD_ERROR; + } + + if (iosEnumerator->index >= iosEnumerator->pathSet->count) + { + *outPath = nullptr; + return NFD_OKAY; + } + + return NFDi_CopyUtf8String(iosEnumerator->pathSet->paths[iosEnumerator->index++], outPath); +} + +nfdresult_t NFD_PathSet_EnumNextU8(nfdpathsetenum_t* enumerator, nfdu8char_t** outPath) +{ + return NFD_PathSet_EnumNextN(enumerator, outPath); +} + +} diff --git a/thirdparty/nfd_ios_stub.c b/thirdparty/nfd_ios_stub.c deleted file mode 100644 index 9f5fd902..00000000 --- a/thirdparty/nfd_ios_stub.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - -static const char* g_nfd_ios_error = "Native file dialogs are not implemented for iOS yet."; - -nfdresult_t NFD_Init(void) { return NFD_OKAY; } -void NFD_Quit(void) {} -const char* NFD_GetError(void) { return g_nfd_ios_error; } -void NFD_ClearError(void) {} - -void NFD_FreePathN(nfdnchar_t* filePath) { free(filePath); } -void NFD_FreePathU8(nfdu8char_t* filePath) { free(filePath); } - -nfdresult_t NFD_OpenDialogN(nfdnchar_t** outPath, const nfdnfilteritem_t* filterList, nfdfiltersize_t filterCount, const nfdnchar_t* defaultPath) { (void)outPath; (void)filterList; (void)filterCount; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogU8(nfdu8char_t** outPath, const nfdu8filteritem_t* filterList, nfdfiltersize_t filterCount, const nfdu8char_t* defaultPath) { (void)outPath; (void)filterList; (void)filterCount; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogN_With_Impl(nfdversion_t version, nfdnchar_t** outPath, const nfdopendialognargs_t* args) { (void)version; (void)outPath; (void)args; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogU8_With_Impl(nfdversion_t version, nfdu8char_t** outPath, const nfdopendialogu8args_t* args) { (void)version; (void)outPath; (void)args; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogMultipleN(const nfdpathset_t** outPaths, const nfdnfilteritem_t* filterList, nfdfiltersize_t filterCount, const nfdnchar_t* defaultPath) { (void)outPaths; (void)filterList; (void)filterCount; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogMultipleU8(const nfdpathset_t** outPaths, const nfdu8filteritem_t* filterList, nfdfiltersize_t filterCount, const nfdu8char_t* defaultPath) { (void)outPaths; (void)filterList; (void)filterCount; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogMultipleN_With_Impl(nfdversion_t version, const nfdpathset_t** outPaths, const nfdopendialognargs_t* args) { (void)version; (void)outPaths; (void)args; return NFD_ERROR; } -nfdresult_t NFD_OpenDialogMultipleU8_With_Impl(nfdversion_t version, const nfdpathset_t** outPaths, const nfdopendialogu8args_t* args) { (void)version; (void)outPaths; (void)args; return NFD_ERROR; } -nfdresult_t NFD_SaveDialogN(nfdnchar_t** outPath, const nfdnfilteritem_t* filterList, nfdfiltersize_t filterCount, const nfdnchar_t* defaultPath, const nfdnchar_t* defaultName) { (void)outPath; (void)filterList; (void)filterCount; (void)defaultPath; (void)defaultName; return NFD_ERROR; } -nfdresult_t NFD_SaveDialogU8(nfdu8char_t** outPath, const nfdu8filteritem_t* filterList, nfdfiltersize_t filterCount, const nfdu8char_t* defaultPath, const nfdu8char_t* defaultName) { (void)outPath; (void)filterList; (void)filterCount; (void)defaultPath; (void)defaultName; return NFD_ERROR; } -nfdresult_t NFD_SaveDialogN_With_Impl(nfdversion_t version, nfdnchar_t** outPath, const nfdsavedialognargs_t* args) { (void)version; (void)outPath; (void)args; return NFD_ERROR; } -nfdresult_t NFD_SaveDialogU8_With_Impl(nfdversion_t version, nfdu8char_t** outPath, const nfdsavedialogu8args_t* args) { (void)version; (void)outPath; (void)args; return NFD_ERROR; } -nfdresult_t NFD_PickFolderN(nfdnchar_t** outPath, const nfdnchar_t* defaultPath) { (void)outPath; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_PickFolderU8(nfdu8char_t** outPath, const nfdu8char_t* defaultPath) { (void)outPath; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_PickFolderN_With_Impl(nfdversion_t version, nfdnchar_t** outPath, const nfdpickfoldernargs_t* args) { (void)version; (void)outPath; (void)args; return NFD_ERROR; } -nfdresult_t NFD_PickFolderU8_With_Impl(nfdversion_t version, nfdu8char_t** outPath, const nfdpickfolderu8args_t* args) { (void)version; (void)outPath; (void)args; return NFD_ERROR; } -nfdresult_t NFD_PickFolderMultipleN(const nfdpathset_t** outPaths, const nfdnchar_t* defaultPath) { (void)outPaths; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_PickFolderMultipleU8(const nfdpathset_t** outPaths, const nfdu8char_t* defaultPath) { (void)outPaths; (void)defaultPath; return NFD_ERROR; } -nfdresult_t NFD_PickFolderMultipleN_With_Impl(nfdversion_t version, const nfdpathset_t** outPaths, const nfdpickfoldernargs_t* args) { (void)version; (void)outPaths; (void)args; return NFD_ERROR; } -nfdresult_t NFD_PickFolderMultipleU8_With_Impl(nfdversion_t version, const nfdpathset_t** outPaths, const nfdpickfolderu8args_t* args) { (void)version; (void)outPaths; (void)args; return NFD_ERROR; } -nfdresult_t NFD_PathSet_GetCount(const nfdpathset_t* pathSet, nfdpathsetsize_t* count) { (void)pathSet; if (count) *count = 0; return NFD_OKAY; } -nfdresult_t NFD_PathSet_GetPathN(const nfdpathset_t* pathSet, nfdpathsetsize_t index, nfdnchar_t** outPath) { (void)pathSet; (void)index; (void)outPath; return NFD_ERROR; } -nfdresult_t NFD_PathSet_GetPathU8(const nfdpathset_t* pathSet, nfdpathsetsize_t index, nfdu8char_t** outPath) { (void)pathSet; (void)index; (void)outPath; return NFD_ERROR; } -void NFD_PathSet_FreePathN(const nfdnchar_t* filePath) { free((void*)filePath); } -void NFD_PathSet_FreePathU8(const nfdu8char_t* filePath) { free((void*)filePath); } -void NFD_PathSet_Free(const nfdpathset_t* pathSet) { (void)pathSet; } -void NFD_PathSet_FreeEnum(nfdpathsetenum_t* enumerator) { (void)enumerator; } -nfdresult_t NFD_PathSet_GetEnum(const nfdpathset_t* pathSet, nfdpathsetenum_t* outEnumerator) { (void)pathSet; (void)outEnumerator; return NFD_ERROR; } -nfdresult_t NFD_PathSet_EnumNextN(nfdpathsetenum_t* enumerator, nfdnchar_t** outPath) { (void)enumerator; (void)outPath; return NFD_ERROR; } -nfdresult_t NFD_PathSet_EnumNextU8(nfdpathsetenum_t* enumerator, nfdu8char_t** outPath) { (void)enumerator; (void)outPath; return NFD_ERROR; } diff --git a/tools/patches/plume-ios-sdl-vulkan.patch b/tools/patches/plume-ios-sdl-vulkan.patch index a5604ec8..67b35fbc 100644 --- a/tools/patches/plume-ios-sdl-vulkan.patch +++ b/tools/patches/plume-ios-sdl-vulkan.patch @@ -39,10 +39,31 @@ index 6a7645a..6e6e887 100644 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/metal-cpp ) diff --git a/plume_vulkan.cpp b/plume_vulkan.cpp -index 9103ca8..02c3591 100644 +index 9103ca8..d69b4de 100644 --- a/plume_vulkan.cpp +++ b/plume_vulkan.cpp -@@ -2112,6 +2112,12 @@ namespace plume { +@@ -8,6 +8,9 @@ + #define VMA_IMPLEMENTATION + #define VOLK_IMPLEMENTATION + ++#if defined(__APPLE__) && defined(SDL_VULKAN_ENABLED) ++#include "plume_volk_rename_ios.h" ++#endif + #include "plume_vulkan.h" + + #include +@@ -19,6 +22,10 @@ + # include "render/plume_dlss.h" + #endif + ++#if defined(__APPLE__) && defined(SDL_VULKAN_ENABLED) ++extern "C" VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL mvkGetInstanceProcAddr(VkInstance instance, const char *pName) __asm("_vkGetInstanceProcAddr"); ++#endif ++ + #ifndef NDEBUG + # define VULKAN_VALIDATION_LAYER_ENABLED + # define VULKAN_OBJECT_NAMES_ENABLED +@@ -2112,6 +2119,12 @@ namespace plume { fprintf(stderr, "vkCreateXlibSurfaceKHR failed with error code 0x%X.\n", res); return; } @@ -55,7 +76,7 @@ index 9103ca8..02c3591 100644 # elif defined(__APPLE__) assert(renderWindow.window != 0); assert(renderWindow.view != 0); -@@ -2443,7 +2449,7 @@ namespace plume { +@@ -2443,7 +2456,7 @@ namespace plume { // The attributes width and height members do not include the border. dstWidth = attributes.width; dstHeight = attributes.height; @@ -64,6 +85,24 @@ index 9103ca8..02c3591 100644 CocoaWindowAttributes attributes; windowWrapper->getWindowAttributes(&attributes); dstWidth = attributes.width; +@@ -4398,11 +4411,16 @@ namespace plume { + #else + VulkanInterface::VulkanInterface() { + #endif +- VkResult res = volkInitialize(); ++ VkResult res = VK_SUCCESS; ++#if defined(__APPLE__) && defined(SDL_VULKAN_ENABLED) ++ volkInitializeCustom(mvkGetInstanceProcAddr); ++#else ++ res = volkInitialize(); + if (res != VK_SUCCESS) { + fprintf(stderr, "volkInitialize failed with error code 0x%X.\n", res); + return; + } ++#endif + + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + appInfo.pApplicationName = "plume"; diff --git a/plume_vulkan.h b/plume_vulkan.h index 73022bb..9d89adf 100644 --- a/plume_vulkan.h @@ -88,3 +127,771 @@ index 73022bb..9d89adf 100644 std::unique_ptr windowWrapper; #endif uint32_t textureCount = 0; +diff --git a/plume_volk_rename_ios.h b/plume_volk_rename_ios.h +new file mode 100644 +index 0000000..327d094 +--- /dev/null ++++ b/plume_volk_rename_ios.h +@@ -0,0 +1,762 @@ ++#pragma once ++ ++// Keep Plume's embedded volk function-pointer globals from colliding with statically linked MoltenVK on iOS. ++#define vkAcquireDrmDisplayEXT plumeVolk_vkAcquireDrmDisplayEXT ++#define vkAcquireFullScreenExclusiveModeEXT plumeVolk_vkAcquireFullScreenExclusiveModeEXT ++#define vkAcquireNextImage2KHR plumeVolk_vkAcquireNextImage2KHR ++#define vkAcquireNextImageKHR plumeVolk_vkAcquireNextImageKHR ++#define vkAcquirePerformanceConfigurationINTEL plumeVolk_vkAcquirePerformanceConfigurationINTEL ++#define vkAcquireProfilingLockKHR plumeVolk_vkAcquireProfilingLockKHR ++#define vkAcquireWinrtDisplayNV plumeVolk_vkAcquireWinrtDisplayNV ++#define vkAcquireXlibDisplayEXT plumeVolk_vkAcquireXlibDisplayEXT ++#define vkAllocateCommandBuffers plumeVolk_vkAllocateCommandBuffers ++#define vkAllocateDescriptorSets plumeVolk_vkAllocateDescriptorSets ++#define vkAllocateMemory plumeVolk_vkAllocateMemory ++#define vkAntiLagUpdateAMD plumeVolk_vkAntiLagUpdateAMD ++#define vkBeginCommandBuffer plumeVolk_vkBeginCommandBuffer ++#define vkBindAccelerationStructureMemoryNV plumeVolk_vkBindAccelerationStructureMemoryNV ++#define vkBindBufferMemory plumeVolk_vkBindBufferMemory ++#define vkBindBufferMemory2 plumeVolk_vkBindBufferMemory2 ++#define vkBindBufferMemory2KHR plumeVolk_vkBindBufferMemory2KHR ++#define vkBindDataGraphPipelineSessionMemoryARM plumeVolk_vkBindDataGraphPipelineSessionMemoryARM ++#define vkBindImageMemory plumeVolk_vkBindImageMemory ++#define vkBindImageMemory2 plumeVolk_vkBindImageMemory2 ++#define vkBindImageMemory2KHR plumeVolk_vkBindImageMemory2KHR ++#define vkBindOpticalFlowSessionImageNV plumeVolk_vkBindOpticalFlowSessionImageNV ++#define vkBindTensorMemoryARM plumeVolk_vkBindTensorMemoryARM ++#define vkBindVideoSessionMemoryKHR plumeVolk_vkBindVideoSessionMemoryKHR ++#define vkBuildAccelerationStructuresKHR plumeVolk_vkBuildAccelerationStructuresKHR ++#define vkBuildMicromapsEXT plumeVolk_vkBuildMicromapsEXT ++#define vkCmdBeginConditionalRenderingEXT plumeVolk_vkCmdBeginConditionalRenderingEXT ++#define vkCmdBeginDebugUtilsLabelEXT plumeVolk_vkCmdBeginDebugUtilsLabelEXT ++#define vkCmdBeginPerTileExecutionQCOM plumeVolk_vkCmdBeginPerTileExecutionQCOM ++#define vkCmdBeginQuery plumeVolk_vkCmdBeginQuery ++#define vkCmdBeginQueryIndexedEXT plumeVolk_vkCmdBeginQueryIndexedEXT ++#define vkCmdBeginRenderPass plumeVolk_vkCmdBeginRenderPass ++#define vkCmdBeginRenderPass2 plumeVolk_vkCmdBeginRenderPass2 ++#define vkCmdBeginRenderPass2KHR plumeVolk_vkCmdBeginRenderPass2KHR ++#define vkCmdBeginRendering plumeVolk_vkCmdBeginRendering ++#define vkCmdBeginRenderingKHR plumeVolk_vkCmdBeginRenderingKHR ++#define vkCmdBeginTransformFeedbackEXT plumeVolk_vkCmdBeginTransformFeedbackEXT ++#define vkCmdBeginVideoCodingKHR plumeVolk_vkCmdBeginVideoCodingKHR ++#define vkCmdBindDescriptorBufferEmbeddedSamplers2EXT plumeVolk_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT ++#define vkCmdBindDescriptorBufferEmbeddedSamplersEXT plumeVolk_vkCmdBindDescriptorBufferEmbeddedSamplersEXT ++#define vkCmdBindDescriptorBuffersEXT plumeVolk_vkCmdBindDescriptorBuffersEXT ++#define vkCmdBindDescriptorSets plumeVolk_vkCmdBindDescriptorSets ++#define vkCmdBindDescriptorSets2 plumeVolk_vkCmdBindDescriptorSets2 ++#define vkCmdBindDescriptorSets2KHR plumeVolk_vkCmdBindDescriptorSets2KHR ++#define vkCmdBindIndexBuffer plumeVolk_vkCmdBindIndexBuffer ++#define vkCmdBindIndexBuffer2 plumeVolk_vkCmdBindIndexBuffer2 ++#define vkCmdBindIndexBuffer2KHR plumeVolk_vkCmdBindIndexBuffer2KHR ++#define vkCmdBindInvocationMaskHUAWEI plumeVolk_vkCmdBindInvocationMaskHUAWEI ++#define vkCmdBindPipeline plumeVolk_vkCmdBindPipeline ++#define vkCmdBindPipelineShaderGroupNV plumeVolk_vkCmdBindPipelineShaderGroupNV ++#define vkCmdBindShadersEXT plumeVolk_vkCmdBindShadersEXT ++#define vkCmdBindShadingRateImageNV plumeVolk_vkCmdBindShadingRateImageNV ++#define vkCmdBindTileMemoryQCOM plumeVolk_vkCmdBindTileMemoryQCOM ++#define vkCmdBindTransformFeedbackBuffersEXT plumeVolk_vkCmdBindTransformFeedbackBuffersEXT ++#define vkCmdBindVertexBuffers plumeVolk_vkCmdBindVertexBuffers ++#define vkCmdBindVertexBuffers2 plumeVolk_vkCmdBindVertexBuffers2 ++#define vkCmdBindVertexBuffers2EXT plumeVolk_vkCmdBindVertexBuffers2EXT ++#define vkCmdBlitImage plumeVolk_vkCmdBlitImage ++#define vkCmdBlitImage2 plumeVolk_vkCmdBlitImage2 ++#define vkCmdBlitImage2KHR plumeVolk_vkCmdBlitImage2KHR ++#define vkCmdBuildAccelerationStructureNV plumeVolk_vkCmdBuildAccelerationStructureNV ++#define vkCmdBuildAccelerationStructuresIndirectKHR plumeVolk_vkCmdBuildAccelerationStructuresIndirectKHR ++#define vkCmdBuildAccelerationStructuresKHR plumeVolk_vkCmdBuildAccelerationStructuresKHR ++#define vkCmdBuildClusterAccelerationStructureIndirectNV plumeVolk_vkCmdBuildClusterAccelerationStructureIndirectNV ++#define vkCmdBuildMicromapsEXT plumeVolk_vkCmdBuildMicromapsEXT ++#define vkCmdBuildPartitionedAccelerationStructuresNV plumeVolk_vkCmdBuildPartitionedAccelerationStructuresNV ++#define vkCmdClearAttachments plumeVolk_vkCmdClearAttachments ++#define vkCmdClearColorImage plumeVolk_vkCmdClearColorImage ++#define vkCmdClearDepthStencilImage plumeVolk_vkCmdClearDepthStencilImage ++#define vkCmdControlVideoCodingKHR plumeVolk_vkCmdControlVideoCodingKHR ++#define vkCmdConvertCooperativeVectorMatrixNV plumeVolk_vkCmdConvertCooperativeVectorMatrixNV ++#define vkCmdCopyAccelerationStructureKHR plumeVolk_vkCmdCopyAccelerationStructureKHR ++#define vkCmdCopyAccelerationStructureNV plumeVolk_vkCmdCopyAccelerationStructureNV ++#define vkCmdCopyAccelerationStructureToMemoryKHR plumeVolk_vkCmdCopyAccelerationStructureToMemoryKHR ++#define vkCmdCopyBuffer plumeVolk_vkCmdCopyBuffer ++#define vkCmdCopyBuffer2 plumeVolk_vkCmdCopyBuffer2 ++#define vkCmdCopyBuffer2KHR plumeVolk_vkCmdCopyBuffer2KHR ++#define vkCmdCopyBufferToImage plumeVolk_vkCmdCopyBufferToImage ++#define vkCmdCopyBufferToImage2 plumeVolk_vkCmdCopyBufferToImage2 ++#define vkCmdCopyBufferToImage2KHR plumeVolk_vkCmdCopyBufferToImage2KHR ++#define vkCmdCopyImage plumeVolk_vkCmdCopyImage ++#define vkCmdCopyImage2 plumeVolk_vkCmdCopyImage2 ++#define vkCmdCopyImage2KHR plumeVolk_vkCmdCopyImage2KHR ++#define vkCmdCopyImageToBuffer plumeVolk_vkCmdCopyImageToBuffer ++#define vkCmdCopyImageToBuffer2 plumeVolk_vkCmdCopyImageToBuffer2 ++#define vkCmdCopyImageToBuffer2KHR plumeVolk_vkCmdCopyImageToBuffer2KHR ++#define vkCmdCopyMemoryIndirectNV plumeVolk_vkCmdCopyMemoryIndirectNV ++#define vkCmdCopyMemoryToAccelerationStructureKHR plumeVolk_vkCmdCopyMemoryToAccelerationStructureKHR ++#define vkCmdCopyMemoryToImageIndirectNV plumeVolk_vkCmdCopyMemoryToImageIndirectNV ++#define vkCmdCopyMemoryToMicromapEXT plumeVolk_vkCmdCopyMemoryToMicromapEXT ++#define vkCmdCopyMicromapEXT plumeVolk_vkCmdCopyMicromapEXT ++#define vkCmdCopyMicromapToMemoryEXT plumeVolk_vkCmdCopyMicromapToMemoryEXT ++#define vkCmdCopyQueryPoolResults plumeVolk_vkCmdCopyQueryPoolResults ++#define vkCmdCopyTensorARM plumeVolk_vkCmdCopyTensorARM ++#define vkCmdCuLaunchKernelNVX plumeVolk_vkCmdCuLaunchKernelNVX ++#define vkCmdCudaLaunchKernelNV plumeVolk_vkCmdCudaLaunchKernelNV ++#define vkCmdDebugMarkerBeginEXT plumeVolk_vkCmdDebugMarkerBeginEXT ++#define vkCmdDebugMarkerEndEXT plumeVolk_vkCmdDebugMarkerEndEXT ++#define vkCmdDebugMarkerInsertEXT plumeVolk_vkCmdDebugMarkerInsertEXT ++#define vkCmdDecodeVideoKHR plumeVolk_vkCmdDecodeVideoKHR ++#define vkCmdDecompressMemoryIndirectCountNV plumeVolk_vkCmdDecompressMemoryIndirectCountNV ++#define vkCmdDecompressMemoryNV plumeVolk_vkCmdDecompressMemoryNV ++#define vkCmdDispatch plumeVolk_vkCmdDispatch ++#define vkCmdDispatchBase plumeVolk_vkCmdDispatchBase ++#define vkCmdDispatchBaseKHR plumeVolk_vkCmdDispatchBaseKHR ++#define vkCmdDispatchDataGraphARM plumeVolk_vkCmdDispatchDataGraphARM ++#define vkCmdDispatchGraphAMDX plumeVolk_vkCmdDispatchGraphAMDX ++#define vkCmdDispatchGraphIndirectAMDX plumeVolk_vkCmdDispatchGraphIndirectAMDX ++#define vkCmdDispatchGraphIndirectCountAMDX plumeVolk_vkCmdDispatchGraphIndirectCountAMDX ++#define vkCmdDispatchIndirect plumeVolk_vkCmdDispatchIndirect ++#define vkCmdDispatchTileQCOM plumeVolk_vkCmdDispatchTileQCOM ++#define vkCmdDraw plumeVolk_vkCmdDraw ++#define vkCmdDrawClusterHUAWEI plumeVolk_vkCmdDrawClusterHUAWEI ++#define vkCmdDrawClusterIndirectHUAWEI plumeVolk_vkCmdDrawClusterIndirectHUAWEI ++#define vkCmdDrawIndexed plumeVolk_vkCmdDrawIndexed ++#define vkCmdDrawIndexedIndirect plumeVolk_vkCmdDrawIndexedIndirect ++#define vkCmdDrawIndexedIndirectCount plumeVolk_vkCmdDrawIndexedIndirectCount ++#define vkCmdDrawIndexedIndirectCountAMD plumeVolk_vkCmdDrawIndexedIndirectCountAMD ++#define vkCmdDrawIndexedIndirectCountKHR plumeVolk_vkCmdDrawIndexedIndirectCountKHR ++#define vkCmdDrawIndirect plumeVolk_vkCmdDrawIndirect ++#define vkCmdDrawIndirectByteCountEXT plumeVolk_vkCmdDrawIndirectByteCountEXT ++#define vkCmdDrawIndirectCount plumeVolk_vkCmdDrawIndirectCount ++#define vkCmdDrawIndirectCountAMD plumeVolk_vkCmdDrawIndirectCountAMD ++#define vkCmdDrawIndirectCountKHR plumeVolk_vkCmdDrawIndirectCountKHR ++#define vkCmdDrawMeshTasksEXT plumeVolk_vkCmdDrawMeshTasksEXT ++#define vkCmdDrawMeshTasksIndirectCountEXT plumeVolk_vkCmdDrawMeshTasksIndirectCountEXT ++#define vkCmdDrawMeshTasksIndirectCountNV plumeVolk_vkCmdDrawMeshTasksIndirectCountNV ++#define vkCmdDrawMeshTasksIndirectEXT plumeVolk_vkCmdDrawMeshTasksIndirectEXT ++#define vkCmdDrawMeshTasksIndirectNV plumeVolk_vkCmdDrawMeshTasksIndirectNV ++#define vkCmdDrawMeshTasksNV plumeVolk_vkCmdDrawMeshTasksNV ++#define vkCmdDrawMultiEXT plumeVolk_vkCmdDrawMultiEXT ++#define vkCmdDrawMultiIndexedEXT plumeVolk_vkCmdDrawMultiIndexedEXT ++#define vkCmdEncodeVideoKHR plumeVolk_vkCmdEncodeVideoKHR ++#define vkCmdEndConditionalRenderingEXT plumeVolk_vkCmdEndConditionalRenderingEXT ++#define vkCmdEndDebugUtilsLabelEXT plumeVolk_vkCmdEndDebugUtilsLabelEXT ++#define vkCmdEndPerTileExecutionQCOM plumeVolk_vkCmdEndPerTileExecutionQCOM ++#define vkCmdEndQuery plumeVolk_vkCmdEndQuery ++#define vkCmdEndQueryIndexedEXT plumeVolk_vkCmdEndQueryIndexedEXT ++#define vkCmdEndRenderPass plumeVolk_vkCmdEndRenderPass ++#define vkCmdEndRenderPass2 plumeVolk_vkCmdEndRenderPass2 ++#define vkCmdEndRenderPass2KHR plumeVolk_vkCmdEndRenderPass2KHR ++#define vkCmdEndRendering plumeVolk_vkCmdEndRendering ++#define vkCmdEndRendering2EXT plumeVolk_vkCmdEndRendering2EXT ++#define vkCmdEndRenderingKHR plumeVolk_vkCmdEndRenderingKHR ++#define vkCmdEndTransformFeedbackEXT plumeVolk_vkCmdEndTransformFeedbackEXT ++#define vkCmdEndVideoCodingKHR plumeVolk_vkCmdEndVideoCodingKHR ++#define vkCmdExecuteCommands plumeVolk_vkCmdExecuteCommands ++#define vkCmdExecuteGeneratedCommandsEXT plumeVolk_vkCmdExecuteGeneratedCommandsEXT ++#define vkCmdExecuteGeneratedCommandsNV plumeVolk_vkCmdExecuteGeneratedCommandsNV ++#define vkCmdFillBuffer plumeVolk_vkCmdFillBuffer ++#define vkCmdInitializeGraphScratchMemoryAMDX plumeVolk_vkCmdInitializeGraphScratchMemoryAMDX ++#define vkCmdInsertDebugUtilsLabelEXT plumeVolk_vkCmdInsertDebugUtilsLabelEXT ++#define vkCmdNextSubpass plumeVolk_vkCmdNextSubpass ++#define vkCmdNextSubpass2 plumeVolk_vkCmdNextSubpass2 ++#define vkCmdNextSubpass2KHR plumeVolk_vkCmdNextSubpass2KHR ++#define vkCmdOpticalFlowExecuteNV plumeVolk_vkCmdOpticalFlowExecuteNV ++#define vkCmdPipelineBarrier plumeVolk_vkCmdPipelineBarrier ++#define vkCmdPipelineBarrier2 plumeVolk_vkCmdPipelineBarrier2 ++#define vkCmdPipelineBarrier2KHR plumeVolk_vkCmdPipelineBarrier2KHR ++#define vkCmdPreprocessGeneratedCommandsEXT plumeVolk_vkCmdPreprocessGeneratedCommandsEXT ++#define vkCmdPreprocessGeneratedCommandsNV plumeVolk_vkCmdPreprocessGeneratedCommandsNV ++#define vkCmdPushConstants plumeVolk_vkCmdPushConstants ++#define vkCmdPushConstants2 plumeVolk_vkCmdPushConstants2 ++#define vkCmdPushConstants2KHR plumeVolk_vkCmdPushConstants2KHR ++#define vkCmdPushDescriptorSet plumeVolk_vkCmdPushDescriptorSet ++#define vkCmdPushDescriptorSet2 plumeVolk_vkCmdPushDescriptorSet2 ++#define vkCmdPushDescriptorSet2KHR plumeVolk_vkCmdPushDescriptorSet2KHR ++#define vkCmdPushDescriptorSetKHR plumeVolk_vkCmdPushDescriptorSetKHR ++#define vkCmdPushDescriptorSetWithTemplate plumeVolk_vkCmdPushDescriptorSetWithTemplate ++#define vkCmdPushDescriptorSetWithTemplate2 plumeVolk_vkCmdPushDescriptorSetWithTemplate2 ++#define vkCmdPushDescriptorSetWithTemplate2KHR plumeVolk_vkCmdPushDescriptorSetWithTemplate2KHR ++#define vkCmdPushDescriptorSetWithTemplateKHR plumeVolk_vkCmdPushDescriptorSetWithTemplateKHR ++#define vkCmdResetEvent plumeVolk_vkCmdResetEvent ++#define vkCmdResetEvent2 plumeVolk_vkCmdResetEvent2 ++#define vkCmdResetEvent2KHR plumeVolk_vkCmdResetEvent2KHR ++#define vkCmdResetQueryPool plumeVolk_vkCmdResetQueryPool ++#define vkCmdResolveImage plumeVolk_vkCmdResolveImage ++#define vkCmdResolveImage2 plumeVolk_vkCmdResolveImage2 ++#define vkCmdResolveImage2KHR plumeVolk_vkCmdResolveImage2KHR ++#define vkCmdSetAlphaToCoverageEnableEXT plumeVolk_vkCmdSetAlphaToCoverageEnableEXT ++#define vkCmdSetAlphaToOneEnableEXT plumeVolk_vkCmdSetAlphaToOneEnableEXT ++#define vkCmdSetAttachmentFeedbackLoopEnableEXT plumeVolk_vkCmdSetAttachmentFeedbackLoopEnableEXT ++#define vkCmdSetBlendConstants plumeVolk_vkCmdSetBlendConstants ++#define vkCmdSetCheckpointNV plumeVolk_vkCmdSetCheckpointNV ++#define vkCmdSetCoarseSampleOrderNV plumeVolk_vkCmdSetCoarseSampleOrderNV ++#define vkCmdSetColorBlendAdvancedEXT plumeVolk_vkCmdSetColorBlendAdvancedEXT ++#define vkCmdSetColorBlendEnableEXT plumeVolk_vkCmdSetColorBlendEnableEXT ++#define vkCmdSetColorBlendEquationEXT plumeVolk_vkCmdSetColorBlendEquationEXT ++#define vkCmdSetColorWriteEnableEXT plumeVolk_vkCmdSetColorWriteEnableEXT ++#define vkCmdSetColorWriteMaskEXT plumeVolk_vkCmdSetColorWriteMaskEXT ++#define vkCmdSetConservativeRasterizationModeEXT plumeVolk_vkCmdSetConservativeRasterizationModeEXT ++#define vkCmdSetCoverageModulationModeNV plumeVolk_vkCmdSetCoverageModulationModeNV ++#define vkCmdSetCoverageModulationTableEnableNV plumeVolk_vkCmdSetCoverageModulationTableEnableNV ++#define vkCmdSetCoverageModulationTableNV plumeVolk_vkCmdSetCoverageModulationTableNV ++#define vkCmdSetCoverageReductionModeNV plumeVolk_vkCmdSetCoverageReductionModeNV ++#define vkCmdSetCoverageToColorEnableNV plumeVolk_vkCmdSetCoverageToColorEnableNV ++#define vkCmdSetCoverageToColorLocationNV plumeVolk_vkCmdSetCoverageToColorLocationNV ++#define vkCmdSetCullMode plumeVolk_vkCmdSetCullMode ++#define vkCmdSetCullModeEXT plumeVolk_vkCmdSetCullModeEXT ++#define vkCmdSetDepthBias plumeVolk_vkCmdSetDepthBias ++#define vkCmdSetDepthBias2EXT plumeVolk_vkCmdSetDepthBias2EXT ++#define vkCmdSetDepthBiasEnable plumeVolk_vkCmdSetDepthBiasEnable ++#define vkCmdSetDepthBiasEnableEXT plumeVolk_vkCmdSetDepthBiasEnableEXT ++#define vkCmdSetDepthBounds plumeVolk_vkCmdSetDepthBounds ++#define vkCmdSetDepthBoundsTestEnable plumeVolk_vkCmdSetDepthBoundsTestEnable ++#define vkCmdSetDepthBoundsTestEnableEXT plumeVolk_vkCmdSetDepthBoundsTestEnableEXT ++#define vkCmdSetDepthClampEnableEXT plumeVolk_vkCmdSetDepthClampEnableEXT ++#define vkCmdSetDepthClampRangeEXT plumeVolk_vkCmdSetDepthClampRangeEXT ++#define vkCmdSetDepthClipEnableEXT plumeVolk_vkCmdSetDepthClipEnableEXT ++#define vkCmdSetDepthClipNegativeOneToOneEXT plumeVolk_vkCmdSetDepthClipNegativeOneToOneEXT ++#define vkCmdSetDepthCompareOp plumeVolk_vkCmdSetDepthCompareOp ++#define vkCmdSetDepthCompareOpEXT plumeVolk_vkCmdSetDepthCompareOpEXT ++#define vkCmdSetDepthTestEnable plumeVolk_vkCmdSetDepthTestEnable ++#define vkCmdSetDepthTestEnableEXT plumeVolk_vkCmdSetDepthTestEnableEXT ++#define vkCmdSetDepthWriteEnable plumeVolk_vkCmdSetDepthWriteEnable ++#define vkCmdSetDepthWriteEnableEXT plumeVolk_vkCmdSetDepthWriteEnableEXT ++#define vkCmdSetDescriptorBufferOffsets2EXT plumeVolk_vkCmdSetDescriptorBufferOffsets2EXT ++#define vkCmdSetDescriptorBufferOffsetsEXT plumeVolk_vkCmdSetDescriptorBufferOffsetsEXT ++#define vkCmdSetDeviceMask plumeVolk_vkCmdSetDeviceMask ++#define vkCmdSetDeviceMaskKHR plumeVolk_vkCmdSetDeviceMaskKHR ++#define vkCmdSetDiscardRectangleEXT plumeVolk_vkCmdSetDiscardRectangleEXT ++#define vkCmdSetDiscardRectangleEnableEXT plumeVolk_vkCmdSetDiscardRectangleEnableEXT ++#define vkCmdSetDiscardRectangleModeEXT plumeVolk_vkCmdSetDiscardRectangleModeEXT ++#define vkCmdSetEvent plumeVolk_vkCmdSetEvent ++#define vkCmdSetEvent2 plumeVolk_vkCmdSetEvent2 ++#define vkCmdSetEvent2KHR plumeVolk_vkCmdSetEvent2KHR ++#define vkCmdSetExclusiveScissorEnableNV plumeVolk_vkCmdSetExclusiveScissorEnableNV ++#define vkCmdSetExclusiveScissorNV plumeVolk_vkCmdSetExclusiveScissorNV ++#define vkCmdSetExtraPrimitiveOverestimationSizeEXT plumeVolk_vkCmdSetExtraPrimitiveOverestimationSizeEXT ++#define vkCmdSetFragmentShadingRateEnumNV plumeVolk_vkCmdSetFragmentShadingRateEnumNV ++#define vkCmdSetFragmentShadingRateKHR plumeVolk_vkCmdSetFragmentShadingRateKHR ++#define vkCmdSetFrontFace plumeVolk_vkCmdSetFrontFace ++#define vkCmdSetFrontFaceEXT plumeVolk_vkCmdSetFrontFaceEXT ++#define vkCmdSetLineRasterizationModeEXT plumeVolk_vkCmdSetLineRasterizationModeEXT ++#define vkCmdSetLineStipple plumeVolk_vkCmdSetLineStipple ++#define vkCmdSetLineStippleEXT plumeVolk_vkCmdSetLineStippleEXT ++#define vkCmdSetLineStippleEnableEXT plumeVolk_vkCmdSetLineStippleEnableEXT ++#define vkCmdSetLineStippleKHR plumeVolk_vkCmdSetLineStippleKHR ++#define vkCmdSetLineWidth plumeVolk_vkCmdSetLineWidth ++#define vkCmdSetLogicOpEXT plumeVolk_vkCmdSetLogicOpEXT ++#define vkCmdSetLogicOpEnableEXT plumeVolk_vkCmdSetLogicOpEnableEXT ++#define vkCmdSetPatchControlPointsEXT plumeVolk_vkCmdSetPatchControlPointsEXT ++#define vkCmdSetPerformanceMarkerINTEL plumeVolk_vkCmdSetPerformanceMarkerINTEL ++#define vkCmdSetPerformanceOverrideINTEL plumeVolk_vkCmdSetPerformanceOverrideINTEL ++#define vkCmdSetPerformanceStreamMarkerINTEL plumeVolk_vkCmdSetPerformanceStreamMarkerINTEL ++#define vkCmdSetPolygonModeEXT plumeVolk_vkCmdSetPolygonModeEXT ++#define vkCmdSetPrimitiveRestartEnable plumeVolk_vkCmdSetPrimitiveRestartEnable ++#define vkCmdSetPrimitiveRestartEnableEXT plumeVolk_vkCmdSetPrimitiveRestartEnableEXT ++#define vkCmdSetPrimitiveTopology plumeVolk_vkCmdSetPrimitiveTopology ++#define vkCmdSetPrimitiveTopologyEXT plumeVolk_vkCmdSetPrimitiveTopologyEXT ++#define vkCmdSetProvokingVertexModeEXT plumeVolk_vkCmdSetProvokingVertexModeEXT ++#define vkCmdSetRasterizationSamplesEXT plumeVolk_vkCmdSetRasterizationSamplesEXT ++#define vkCmdSetRasterizationStreamEXT plumeVolk_vkCmdSetRasterizationStreamEXT ++#define vkCmdSetRasterizerDiscardEnable plumeVolk_vkCmdSetRasterizerDiscardEnable ++#define vkCmdSetRasterizerDiscardEnableEXT plumeVolk_vkCmdSetRasterizerDiscardEnableEXT ++#define vkCmdSetRayTracingPipelineStackSizeKHR plumeVolk_vkCmdSetRayTracingPipelineStackSizeKHR ++#define vkCmdSetRenderingAttachmentLocations plumeVolk_vkCmdSetRenderingAttachmentLocations ++#define vkCmdSetRenderingAttachmentLocationsKHR plumeVolk_vkCmdSetRenderingAttachmentLocationsKHR ++#define vkCmdSetRenderingInputAttachmentIndices plumeVolk_vkCmdSetRenderingInputAttachmentIndices ++#define vkCmdSetRenderingInputAttachmentIndicesKHR plumeVolk_vkCmdSetRenderingInputAttachmentIndicesKHR ++#define vkCmdSetRepresentativeFragmentTestEnableNV plumeVolk_vkCmdSetRepresentativeFragmentTestEnableNV ++#define vkCmdSetSampleLocationsEXT plumeVolk_vkCmdSetSampleLocationsEXT ++#define vkCmdSetSampleLocationsEnableEXT plumeVolk_vkCmdSetSampleLocationsEnableEXT ++#define vkCmdSetSampleMaskEXT plumeVolk_vkCmdSetSampleMaskEXT ++#define vkCmdSetScissor plumeVolk_vkCmdSetScissor ++#define vkCmdSetScissorWithCount plumeVolk_vkCmdSetScissorWithCount ++#define vkCmdSetScissorWithCountEXT plumeVolk_vkCmdSetScissorWithCountEXT ++#define vkCmdSetShadingRateImageEnableNV plumeVolk_vkCmdSetShadingRateImageEnableNV ++#define vkCmdSetStencilCompareMask plumeVolk_vkCmdSetStencilCompareMask ++#define vkCmdSetStencilOp plumeVolk_vkCmdSetStencilOp ++#define vkCmdSetStencilOpEXT plumeVolk_vkCmdSetStencilOpEXT ++#define vkCmdSetStencilReference plumeVolk_vkCmdSetStencilReference ++#define vkCmdSetStencilTestEnable plumeVolk_vkCmdSetStencilTestEnable ++#define vkCmdSetStencilTestEnableEXT plumeVolk_vkCmdSetStencilTestEnableEXT ++#define vkCmdSetStencilWriteMask plumeVolk_vkCmdSetStencilWriteMask ++#define vkCmdSetTessellationDomainOriginEXT plumeVolk_vkCmdSetTessellationDomainOriginEXT ++#define vkCmdSetVertexInputEXT plumeVolk_vkCmdSetVertexInputEXT ++#define vkCmdSetViewport plumeVolk_vkCmdSetViewport ++#define vkCmdSetViewportShadingRatePaletteNV plumeVolk_vkCmdSetViewportShadingRatePaletteNV ++#define vkCmdSetViewportSwizzleNV plumeVolk_vkCmdSetViewportSwizzleNV ++#define vkCmdSetViewportWScalingEnableNV plumeVolk_vkCmdSetViewportWScalingEnableNV ++#define vkCmdSetViewportWScalingNV plumeVolk_vkCmdSetViewportWScalingNV ++#define vkCmdSetViewportWithCount plumeVolk_vkCmdSetViewportWithCount ++#define vkCmdSetViewportWithCountEXT plumeVolk_vkCmdSetViewportWithCountEXT ++#define vkCmdSubpassShadingHUAWEI plumeVolk_vkCmdSubpassShadingHUAWEI ++#define vkCmdTraceRaysIndirect2KHR plumeVolk_vkCmdTraceRaysIndirect2KHR ++#define vkCmdTraceRaysIndirectKHR plumeVolk_vkCmdTraceRaysIndirectKHR ++#define vkCmdTraceRaysKHR plumeVolk_vkCmdTraceRaysKHR ++#define vkCmdTraceRaysNV plumeVolk_vkCmdTraceRaysNV ++#define vkCmdUpdateBuffer plumeVolk_vkCmdUpdateBuffer ++#define vkCmdUpdatePipelineIndirectBufferNV plumeVolk_vkCmdUpdatePipelineIndirectBufferNV ++#define vkCmdWaitEvents plumeVolk_vkCmdWaitEvents ++#define vkCmdWaitEvents2 plumeVolk_vkCmdWaitEvents2 ++#define vkCmdWaitEvents2KHR plumeVolk_vkCmdWaitEvents2KHR ++#define vkCmdWriteAccelerationStructuresPropertiesKHR plumeVolk_vkCmdWriteAccelerationStructuresPropertiesKHR ++#define vkCmdWriteAccelerationStructuresPropertiesNV plumeVolk_vkCmdWriteAccelerationStructuresPropertiesNV ++#define vkCmdWriteBufferMarker2AMD plumeVolk_vkCmdWriteBufferMarker2AMD ++#define vkCmdWriteBufferMarkerAMD plumeVolk_vkCmdWriteBufferMarkerAMD ++#define vkCmdWriteMicromapsPropertiesEXT plumeVolk_vkCmdWriteMicromapsPropertiesEXT ++#define vkCmdWriteTimestamp plumeVolk_vkCmdWriteTimestamp ++#define vkCmdWriteTimestamp2 plumeVolk_vkCmdWriteTimestamp2 ++#define vkCmdWriteTimestamp2KHR plumeVolk_vkCmdWriteTimestamp2KHR ++#define vkCompileDeferredNV plumeVolk_vkCompileDeferredNV ++#define vkConvertCooperativeVectorMatrixNV plumeVolk_vkConvertCooperativeVectorMatrixNV ++#define vkCopyAccelerationStructureKHR plumeVolk_vkCopyAccelerationStructureKHR ++#define vkCopyAccelerationStructureToMemoryKHR plumeVolk_vkCopyAccelerationStructureToMemoryKHR ++#define vkCopyImageToImage plumeVolk_vkCopyImageToImage ++#define vkCopyImageToImageEXT plumeVolk_vkCopyImageToImageEXT ++#define vkCopyImageToMemory plumeVolk_vkCopyImageToMemory ++#define vkCopyImageToMemoryEXT plumeVolk_vkCopyImageToMemoryEXT ++#define vkCopyMemoryToAccelerationStructureKHR plumeVolk_vkCopyMemoryToAccelerationStructureKHR ++#define vkCopyMemoryToImage plumeVolk_vkCopyMemoryToImage ++#define vkCopyMemoryToImageEXT plumeVolk_vkCopyMemoryToImageEXT ++#define vkCopyMemoryToMicromapEXT plumeVolk_vkCopyMemoryToMicromapEXT ++#define vkCopyMicromapEXT plumeVolk_vkCopyMicromapEXT ++#define vkCopyMicromapToMemoryEXT plumeVolk_vkCopyMicromapToMemoryEXT ++#define vkCreateAccelerationStructureKHR plumeVolk_vkCreateAccelerationStructureKHR ++#define vkCreateAccelerationStructureNV plumeVolk_vkCreateAccelerationStructureNV ++#define vkCreateAndroidSurfaceKHR plumeVolk_vkCreateAndroidSurfaceKHR ++#define vkCreateBuffer plumeVolk_vkCreateBuffer ++#define vkCreateBufferCollectionFUCHSIA plumeVolk_vkCreateBufferCollectionFUCHSIA ++#define vkCreateBufferView plumeVolk_vkCreateBufferView ++#define vkCreateCommandPool plumeVolk_vkCreateCommandPool ++#define vkCreateComputePipelines plumeVolk_vkCreateComputePipelines ++#define vkCreateCuFunctionNVX plumeVolk_vkCreateCuFunctionNVX ++#define vkCreateCuModuleNVX plumeVolk_vkCreateCuModuleNVX ++#define vkCreateCudaFunctionNV plumeVolk_vkCreateCudaFunctionNV ++#define vkCreateCudaModuleNV plumeVolk_vkCreateCudaModuleNV ++#define vkCreateDataGraphPipelineSessionARM plumeVolk_vkCreateDataGraphPipelineSessionARM ++#define vkCreateDataGraphPipelinesARM plumeVolk_vkCreateDataGraphPipelinesARM ++#define vkCreateDebugReportCallbackEXT plumeVolk_vkCreateDebugReportCallbackEXT ++#define vkCreateDebugUtilsMessengerEXT plumeVolk_vkCreateDebugUtilsMessengerEXT ++#define vkCreateDeferredOperationKHR plumeVolk_vkCreateDeferredOperationKHR ++#define vkCreateDescriptorPool plumeVolk_vkCreateDescriptorPool ++#define vkCreateDescriptorSetLayout plumeVolk_vkCreateDescriptorSetLayout ++#define vkCreateDescriptorUpdateTemplate plumeVolk_vkCreateDescriptorUpdateTemplate ++#define vkCreateDescriptorUpdateTemplateKHR plumeVolk_vkCreateDescriptorUpdateTemplateKHR ++#define vkCreateDevice plumeVolk_vkCreateDevice ++#define vkCreateDirectFBSurfaceEXT plumeVolk_vkCreateDirectFBSurfaceEXT ++#define vkCreateDisplayModeKHR plumeVolk_vkCreateDisplayModeKHR ++#define vkCreateDisplayPlaneSurfaceKHR plumeVolk_vkCreateDisplayPlaneSurfaceKHR ++#define vkCreateEvent plumeVolk_vkCreateEvent ++#define vkCreateExecutionGraphPipelinesAMDX plumeVolk_vkCreateExecutionGraphPipelinesAMDX ++#define vkCreateExternalComputeQueueNV plumeVolk_vkCreateExternalComputeQueueNV ++#define vkCreateFence plumeVolk_vkCreateFence ++#define vkCreateFramebuffer plumeVolk_vkCreateFramebuffer ++#define vkCreateGraphicsPipelines plumeVolk_vkCreateGraphicsPipelines ++#define vkCreateHeadlessSurfaceEXT plumeVolk_vkCreateHeadlessSurfaceEXT ++#define vkCreateIOSSurfaceMVK plumeVolk_vkCreateIOSSurfaceMVK ++#define vkCreateImage plumeVolk_vkCreateImage ++#define vkCreateImagePipeSurfaceFUCHSIA plumeVolk_vkCreateImagePipeSurfaceFUCHSIA ++#define vkCreateImageView plumeVolk_vkCreateImageView ++#define vkCreateIndirectCommandsLayoutEXT plumeVolk_vkCreateIndirectCommandsLayoutEXT ++#define vkCreateIndirectCommandsLayoutNV plumeVolk_vkCreateIndirectCommandsLayoutNV ++#define vkCreateIndirectExecutionSetEXT plumeVolk_vkCreateIndirectExecutionSetEXT ++#define vkCreateInstance plumeVolk_vkCreateInstance ++#define vkCreateMacOSSurfaceMVK plumeVolk_vkCreateMacOSSurfaceMVK ++#define vkCreateMetalSurfaceEXT plumeVolk_vkCreateMetalSurfaceEXT ++#define vkCreateMicromapEXT plumeVolk_vkCreateMicromapEXT ++#define vkCreateOpticalFlowSessionNV plumeVolk_vkCreateOpticalFlowSessionNV ++#define vkCreatePipelineBinariesKHR plumeVolk_vkCreatePipelineBinariesKHR ++#define vkCreatePipelineCache plumeVolk_vkCreatePipelineCache ++#define vkCreatePipelineLayout plumeVolk_vkCreatePipelineLayout ++#define vkCreatePrivateDataSlot plumeVolk_vkCreatePrivateDataSlot ++#define vkCreatePrivateDataSlotEXT plumeVolk_vkCreatePrivateDataSlotEXT ++#define vkCreateQueryPool plumeVolk_vkCreateQueryPool ++#define vkCreateRayTracingPipelinesKHR plumeVolk_vkCreateRayTracingPipelinesKHR ++#define vkCreateRayTracingPipelinesNV plumeVolk_vkCreateRayTracingPipelinesNV ++#define vkCreateRenderPass plumeVolk_vkCreateRenderPass ++#define vkCreateRenderPass2 plumeVolk_vkCreateRenderPass2 ++#define vkCreateRenderPass2KHR plumeVolk_vkCreateRenderPass2KHR ++#define vkCreateSampler plumeVolk_vkCreateSampler ++#define vkCreateSamplerYcbcrConversion plumeVolk_vkCreateSamplerYcbcrConversion ++#define vkCreateSamplerYcbcrConversionKHR plumeVolk_vkCreateSamplerYcbcrConversionKHR ++#define vkCreateScreenSurfaceQNX plumeVolk_vkCreateScreenSurfaceQNX ++#define vkCreateSemaphore plumeVolk_vkCreateSemaphore ++#define vkCreateShaderModule plumeVolk_vkCreateShaderModule ++#define vkCreateShadersEXT plumeVolk_vkCreateShadersEXT ++#define vkCreateSharedSwapchainsKHR plumeVolk_vkCreateSharedSwapchainsKHR ++#define vkCreateStreamDescriptorSurfaceGGP plumeVolk_vkCreateStreamDescriptorSurfaceGGP ++#define vkCreateSurfaceOHOS plumeVolk_vkCreateSurfaceOHOS ++#define vkCreateSwapchainKHR plumeVolk_vkCreateSwapchainKHR ++#define vkCreateTensorARM plumeVolk_vkCreateTensorARM ++#define vkCreateTensorViewARM plumeVolk_vkCreateTensorViewARM ++#define vkCreateValidationCacheEXT plumeVolk_vkCreateValidationCacheEXT ++#define vkCreateViSurfaceNN plumeVolk_vkCreateViSurfaceNN ++#define vkCreateVideoSessionKHR plumeVolk_vkCreateVideoSessionKHR ++#define vkCreateVideoSessionParametersKHR plumeVolk_vkCreateVideoSessionParametersKHR ++#define vkCreateWaylandSurfaceKHR plumeVolk_vkCreateWaylandSurfaceKHR ++#define vkCreateWin32SurfaceKHR plumeVolk_vkCreateWin32SurfaceKHR ++#define vkCreateXcbSurfaceKHR plumeVolk_vkCreateXcbSurfaceKHR ++#define vkCreateXlibSurfaceKHR plumeVolk_vkCreateXlibSurfaceKHR ++#define vkDebugMarkerSetObjectNameEXT plumeVolk_vkDebugMarkerSetObjectNameEXT ++#define vkDebugMarkerSetObjectTagEXT plumeVolk_vkDebugMarkerSetObjectTagEXT ++#define vkDebugReportMessageEXT plumeVolk_vkDebugReportMessageEXT ++#define vkDeferredOperationJoinKHR plumeVolk_vkDeferredOperationJoinKHR ++#define vkDestroyAccelerationStructureKHR plumeVolk_vkDestroyAccelerationStructureKHR ++#define vkDestroyAccelerationStructureNV plumeVolk_vkDestroyAccelerationStructureNV ++#define vkDestroyBuffer plumeVolk_vkDestroyBuffer ++#define vkDestroyBufferCollectionFUCHSIA plumeVolk_vkDestroyBufferCollectionFUCHSIA ++#define vkDestroyBufferView plumeVolk_vkDestroyBufferView ++#define vkDestroyCommandPool plumeVolk_vkDestroyCommandPool ++#define vkDestroyCuFunctionNVX plumeVolk_vkDestroyCuFunctionNVX ++#define vkDestroyCuModuleNVX plumeVolk_vkDestroyCuModuleNVX ++#define vkDestroyCudaFunctionNV plumeVolk_vkDestroyCudaFunctionNV ++#define vkDestroyCudaModuleNV plumeVolk_vkDestroyCudaModuleNV ++#define vkDestroyDataGraphPipelineSessionARM plumeVolk_vkDestroyDataGraphPipelineSessionARM ++#define vkDestroyDebugReportCallbackEXT plumeVolk_vkDestroyDebugReportCallbackEXT ++#define vkDestroyDebugUtilsMessengerEXT plumeVolk_vkDestroyDebugUtilsMessengerEXT ++#define vkDestroyDeferredOperationKHR plumeVolk_vkDestroyDeferredOperationKHR ++#define vkDestroyDescriptorPool plumeVolk_vkDestroyDescriptorPool ++#define vkDestroyDescriptorSetLayout plumeVolk_vkDestroyDescriptorSetLayout ++#define vkDestroyDescriptorUpdateTemplate plumeVolk_vkDestroyDescriptorUpdateTemplate ++#define vkDestroyDescriptorUpdateTemplateKHR plumeVolk_vkDestroyDescriptorUpdateTemplateKHR ++#define vkDestroyDevice plumeVolk_vkDestroyDevice ++#define vkDestroyEvent plumeVolk_vkDestroyEvent ++#define vkDestroyExternalComputeQueueNV plumeVolk_vkDestroyExternalComputeQueueNV ++#define vkDestroyFence plumeVolk_vkDestroyFence ++#define vkDestroyFramebuffer plumeVolk_vkDestroyFramebuffer ++#define vkDestroyImage plumeVolk_vkDestroyImage ++#define vkDestroyImageView plumeVolk_vkDestroyImageView ++#define vkDestroyIndirectCommandsLayoutEXT plumeVolk_vkDestroyIndirectCommandsLayoutEXT ++#define vkDestroyIndirectCommandsLayoutNV plumeVolk_vkDestroyIndirectCommandsLayoutNV ++#define vkDestroyIndirectExecutionSetEXT plumeVolk_vkDestroyIndirectExecutionSetEXT ++#define vkDestroyInstance plumeVolk_vkDestroyInstance ++#define vkDestroyMicromapEXT plumeVolk_vkDestroyMicromapEXT ++#define vkDestroyOpticalFlowSessionNV plumeVolk_vkDestroyOpticalFlowSessionNV ++#define vkDestroyPipeline plumeVolk_vkDestroyPipeline ++#define vkDestroyPipelineBinaryKHR plumeVolk_vkDestroyPipelineBinaryKHR ++#define vkDestroyPipelineCache plumeVolk_vkDestroyPipelineCache ++#define vkDestroyPipelineLayout plumeVolk_vkDestroyPipelineLayout ++#define vkDestroyPrivateDataSlot plumeVolk_vkDestroyPrivateDataSlot ++#define vkDestroyPrivateDataSlotEXT plumeVolk_vkDestroyPrivateDataSlotEXT ++#define vkDestroyQueryPool plumeVolk_vkDestroyQueryPool ++#define vkDestroyRenderPass plumeVolk_vkDestroyRenderPass ++#define vkDestroySampler plumeVolk_vkDestroySampler ++#define vkDestroySamplerYcbcrConversion plumeVolk_vkDestroySamplerYcbcrConversion ++#define vkDestroySamplerYcbcrConversionKHR plumeVolk_vkDestroySamplerYcbcrConversionKHR ++#define vkDestroySemaphore plumeVolk_vkDestroySemaphore ++#define vkDestroyShaderEXT plumeVolk_vkDestroyShaderEXT ++#define vkDestroyShaderModule plumeVolk_vkDestroyShaderModule ++#define vkDestroySurfaceKHR plumeVolk_vkDestroySurfaceKHR ++#define vkDestroySwapchainKHR plumeVolk_vkDestroySwapchainKHR ++#define vkDestroyTensorARM plumeVolk_vkDestroyTensorARM ++#define vkDestroyTensorViewARM plumeVolk_vkDestroyTensorViewARM ++#define vkDestroyValidationCacheEXT plumeVolk_vkDestroyValidationCacheEXT ++#define vkDestroyVideoSessionKHR plumeVolk_vkDestroyVideoSessionKHR ++#define vkDestroyVideoSessionParametersKHR plumeVolk_vkDestroyVideoSessionParametersKHR ++#define vkDeviceWaitIdle plumeVolk_vkDeviceWaitIdle ++#define vkDisplayPowerControlEXT plumeVolk_vkDisplayPowerControlEXT ++#define vkEndCommandBuffer plumeVolk_vkEndCommandBuffer ++#define vkEnumerateDeviceExtensionProperties plumeVolk_vkEnumerateDeviceExtensionProperties ++#define vkEnumerateDeviceLayerProperties plumeVolk_vkEnumerateDeviceLayerProperties ++#define vkEnumerateInstanceExtensionProperties plumeVolk_vkEnumerateInstanceExtensionProperties ++#define vkEnumerateInstanceLayerProperties plumeVolk_vkEnumerateInstanceLayerProperties ++#define vkEnumerateInstanceVersion plumeVolk_vkEnumerateInstanceVersion ++#define vkEnumeratePhysicalDeviceGroups plumeVolk_vkEnumeratePhysicalDeviceGroups ++#define vkEnumeratePhysicalDeviceGroupsKHR plumeVolk_vkEnumeratePhysicalDeviceGroupsKHR ++#define vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR plumeVolk_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR ++#define vkEnumeratePhysicalDevices plumeVolk_vkEnumeratePhysicalDevices ++#define vkExportMetalObjectsEXT plumeVolk_vkExportMetalObjectsEXT ++#define vkFlushMappedMemoryRanges plumeVolk_vkFlushMappedMemoryRanges ++#define vkFreeCommandBuffers plumeVolk_vkFreeCommandBuffers ++#define vkFreeDescriptorSets plumeVolk_vkFreeDescriptorSets ++#define vkFreeMemory plumeVolk_vkFreeMemory ++#define vkGetAccelerationStructureBuildSizesKHR plumeVolk_vkGetAccelerationStructureBuildSizesKHR ++#define vkGetAccelerationStructureDeviceAddressKHR plumeVolk_vkGetAccelerationStructureDeviceAddressKHR ++#define vkGetAccelerationStructureHandleNV plumeVolk_vkGetAccelerationStructureHandleNV ++#define vkGetAccelerationStructureMemoryRequirementsNV plumeVolk_vkGetAccelerationStructureMemoryRequirementsNV ++#define vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT plumeVolk_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT ++#define vkGetAndroidHardwareBufferPropertiesANDROID plumeVolk_vkGetAndroidHardwareBufferPropertiesANDROID ++#define vkGetBufferCollectionPropertiesFUCHSIA plumeVolk_vkGetBufferCollectionPropertiesFUCHSIA ++#define vkGetBufferDeviceAddress plumeVolk_vkGetBufferDeviceAddress ++#define vkGetBufferDeviceAddressEXT plumeVolk_vkGetBufferDeviceAddressEXT ++#define vkGetBufferDeviceAddressKHR plumeVolk_vkGetBufferDeviceAddressKHR ++#define vkGetBufferMemoryRequirements plumeVolk_vkGetBufferMemoryRequirements ++#define vkGetBufferMemoryRequirements2 plumeVolk_vkGetBufferMemoryRequirements2 ++#define vkGetBufferMemoryRequirements2KHR plumeVolk_vkGetBufferMemoryRequirements2KHR ++#define vkGetBufferOpaqueCaptureAddress plumeVolk_vkGetBufferOpaqueCaptureAddress ++#define vkGetBufferOpaqueCaptureAddressKHR plumeVolk_vkGetBufferOpaqueCaptureAddressKHR ++#define vkGetBufferOpaqueCaptureDescriptorDataEXT plumeVolk_vkGetBufferOpaqueCaptureDescriptorDataEXT ++#define vkGetCalibratedTimestampsEXT plumeVolk_vkGetCalibratedTimestampsEXT ++#define vkGetCalibratedTimestampsKHR plumeVolk_vkGetCalibratedTimestampsKHR ++#define vkGetClusterAccelerationStructureBuildSizesNV plumeVolk_vkGetClusterAccelerationStructureBuildSizesNV ++#define vkGetCudaModuleCacheNV plumeVolk_vkGetCudaModuleCacheNV ++#define vkGetDataGraphPipelineAvailablePropertiesARM plumeVolk_vkGetDataGraphPipelineAvailablePropertiesARM ++#define vkGetDataGraphPipelinePropertiesARM plumeVolk_vkGetDataGraphPipelinePropertiesARM ++#define vkGetDataGraphPipelineSessionBindPointRequirementsARM plumeVolk_vkGetDataGraphPipelineSessionBindPointRequirementsARM ++#define vkGetDataGraphPipelineSessionMemoryRequirementsARM plumeVolk_vkGetDataGraphPipelineSessionMemoryRequirementsARM ++#define vkGetDeferredOperationMaxConcurrencyKHR plumeVolk_vkGetDeferredOperationMaxConcurrencyKHR ++#define vkGetDeferredOperationResultKHR plumeVolk_vkGetDeferredOperationResultKHR ++#define vkGetDescriptorEXT plumeVolk_vkGetDescriptorEXT ++#define vkGetDescriptorSetHostMappingVALVE plumeVolk_vkGetDescriptorSetHostMappingVALVE ++#define vkGetDescriptorSetLayoutBindingOffsetEXT plumeVolk_vkGetDescriptorSetLayoutBindingOffsetEXT ++#define vkGetDescriptorSetLayoutHostMappingInfoVALVE plumeVolk_vkGetDescriptorSetLayoutHostMappingInfoVALVE ++#define vkGetDescriptorSetLayoutSizeEXT plumeVolk_vkGetDescriptorSetLayoutSizeEXT ++#define vkGetDescriptorSetLayoutSupport plumeVolk_vkGetDescriptorSetLayoutSupport ++#define vkGetDescriptorSetLayoutSupportKHR plumeVolk_vkGetDescriptorSetLayoutSupportKHR ++#define vkGetDeviceAccelerationStructureCompatibilityKHR plumeVolk_vkGetDeviceAccelerationStructureCompatibilityKHR ++#define vkGetDeviceBufferMemoryRequirements plumeVolk_vkGetDeviceBufferMemoryRequirements ++#define vkGetDeviceBufferMemoryRequirementsKHR plumeVolk_vkGetDeviceBufferMemoryRequirementsKHR ++#define vkGetDeviceFaultInfoEXT plumeVolk_vkGetDeviceFaultInfoEXT ++#define vkGetDeviceGroupPeerMemoryFeatures plumeVolk_vkGetDeviceGroupPeerMemoryFeatures ++#define vkGetDeviceGroupPeerMemoryFeaturesKHR plumeVolk_vkGetDeviceGroupPeerMemoryFeaturesKHR ++#define vkGetDeviceGroupPresentCapabilitiesKHR plumeVolk_vkGetDeviceGroupPresentCapabilitiesKHR ++#define vkGetDeviceGroupSurfacePresentModes2EXT plumeVolk_vkGetDeviceGroupSurfacePresentModes2EXT ++#define vkGetDeviceGroupSurfacePresentModesKHR plumeVolk_vkGetDeviceGroupSurfacePresentModesKHR ++#define vkGetDeviceImageMemoryRequirements plumeVolk_vkGetDeviceImageMemoryRequirements ++#define vkGetDeviceImageMemoryRequirementsKHR plumeVolk_vkGetDeviceImageMemoryRequirementsKHR ++#define vkGetDeviceImageSparseMemoryRequirements plumeVolk_vkGetDeviceImageSparseMemoryRequirements ++#define vkGetDeviceImageSparseMemoryRequirementsKHR plumeVolk_vkGetDeviceImageSparseMemoryRequirementsKHR ++#define vkGetDeviceImageSubresourceLayout plumeVolk_vkGetDeviceImageSubresourceLayout ++#define vkGetDeviceImageSubresourceLayoutKHR plumeVolk_vkGetDeviceImageSubresourceLayoutKHR ++#define vkGetDeviceMemoryCommitment plumeVolk_vkGetDeviceMemoryCommitment ++#define vkGetDeviceMemoryOpaqueCaptureAddress plumeVolk_vkGetDeviceMemoryOpaqueCaptureAddress ++#define vkGetDeviceMemoryOpaqueCaptureAddressKHR plumeVolk_vkGetDeviceMemoryOpaqueCaptureAddressKHR ++#define vkGetDeviceMicromapCompatibilityEXT plumeVolk_vkGetDeviceMicromapCompatibilityEXT ++#define vkGetDeviceProcAddr plumeVolk_vkGetDeviceProcAddr ++#define vkGetDeviceQueue plumeVolk_vkGetDeviceQueue ++#define vkGetDeviceQueue2 plumeVolk_vkGetDeviceQueue2 ++#define vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI plumeVolk_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI ++#define vkGetDeviceTensorMemoryRequirementsARM plumeVolk_vkGetDeviceTensorMemoryRequirementsARM ++#define vkGetDisplayModeProperties2KHR plumeVolk_vkGetDisplayModeProperties2KHR ++#define vkGetDisplayModePropertiesKHR plumeVolk_vkGetDisplayModePropertiesKHR ++#define vkGetDisplayPlaneCapabilities2KHR plumeVolk_vkGetDisplayPlaneCapabilities2KHR ++#define vkGetDisplayPlaneCapabilitiesKHR plumeVolk_vkGetDisplayPlaneCapabilitiesKHR ++#define vkGetDisplayPlaneSupportedDisplaysKHR plumeVolk_vkGetDisplayPlaneSupportedDisplaysKHR ++#define vkGetDrmDisplayEXT plumeVolk_vkGetDrmDisplayEXT ++#define vkGetDynamicRenderingTilePropertiesQCOM plumeVolk_vkGetDynamicRenderingTilePropertiesQCOM ++#define vkGetEncodedVideoSessionParametersKHR plumeVolk_vkGetEncodedVideoSessionParametersKHR ++#define vkGetEventStatus plumeVolk_vkGetEventStatus ++#define vkGetExecutionGraphPipelineNodeIndexAMDX plumeVolk_vkGetExecutionGraphPipelineNodeIndexAMDX ++#define vkGetExecutionGraphPipelineScratchSizeAMDX plumeVolk_vkGetExecutionGraphPipelineScratchSizeAMDX ++#define vkGetExternalComputeQueueDataNV plumeVolk_vkGetExternalComputeQueueDataNV ++#define vkGetFenceFdKHR plumeVolk_vkGetFenceFdKHR ++#define vkGetFenceStatus plumeVolk_vkGetFenceStatus ++#define vkGetFenceWin32HandleKHR plumeVolk_vkGetFenceWin32HandleKHR ++#define vkGetFramebufferTilePropertiesQCOM plumeVolk_vkGetFramebufferTilePropertiesQCOM ++#define vkGetGeneratedCommandsMemoryRequirementsEXT plumeVolk_vkGetGeneratedCommandsMemoryRequirementsEXT ++#define vkGetGeneratedCommandsMemoryRequirementsNV plumeVolk_vkGetGeneratedCommandsMemoryRequirementsNV ++#define vkGetImageDrmFormatModifierPropertiesEXT plumeVolk_vkGetImageDrmFormatModifierPropertiesEXT ++#define vkGetImageMemoryRequirements plumeVolk_vkGetImageMemoryRequirements ++#define vkGetImageMemoryRequirements2 plumeVolk_vkGetImageMemoryRequirements2 ++#define vkGetImageMemoryRequirements2KHR plumeVolk_vkGetImageMemoryRequirements2KHR ++#define vkGetImageOpaqueCaptureDescriptorDataEXT plumeVolk_vkGetImageOpaqueCaptureDescriptorDataEXT ++#define vkGetImageSparseMemoryRequirements plumeVolk_vkGetImageSparseMemoryRequirements ++#define vkGetImageSparseMemoryRequirements2 plumeVolk_vkGetImageSparseMemoryRequirements2 ++#define vkGetImageSparseMemoryRequirements2KHR plumeVolk_vkGetImageSparseMemoryRequirements2KHR ++#define vkGetImageSubresourceLayout plumeVolk_vkGetImageSubresourceLayout ++#define vkGetImageSubresourceLayout2 plumeVolk_vkGetImageSubresourceLayout2 ++#define vkGetImageSubresourceLayout2EXT plumeVolk_vkGetImageSubresourceLayout2EXT ++#define vkGetImageSubresourceLayout2KHR plumeVolk_vkGetImageSubresourceLayout2KHR ++#define vkGetImageViewAddressNVX plumeVolk_vkGetImageViewAddressNVX ++#define vkGetImageViewHandle64NVX plumeVolk_vkGetImageViewHandle64NVX ++#define vkGetImageViewHandleNVX plumeVolk_vkGetImageViewHandleNVX ++#define vkGetImageViewOpaqueCaptureDescriptorDataEXT plumeVolk_vkGetImageViewOpaqueCaptureDescriptorDataEXT ++#define vkGetInstanceProcAddr plumeVolk_vkGetInstanceProcAddr ++#define vkGetLatencyTimingsNV plumeVolk_vkGetLatencyTimingsNV ++#define vkGetMemoryAndroidHardwareBufferANDROID plumeVolk_vkGetMemoryAndroidHardwareBufferANDROID ++#define vkGetMemoryFdKHR plumeVolk_vkGetMemoryFdKHR ++#define vkGetMemoryFdPropertiesKHR plumeVolk_vkGetMemoryFdPropertiesKHR ++#define vkGetMemoryHostPointerPropertiesEXT plumeVolk_vkGetMemoryHostPointerPropertiesEXT ++#define vkGetMemoryMetalHandleEXT plumeVolk_vkGetMemoryMetalHandleEXT ++#define vkGetMemoryMetalHandlePropertiesEXT plumeVolk_vkGetMemoryMetalHandlePropertiesEXT ++#define vkGetMemoryRemoteAddressNV plumeVolk_vkGetMemoryRemoteAddressNV ++#define vkGetMemoryWin32HandleKHR plumeVolk_vkGetMemoryWin32HandleKHR ++#define vkGetMemoryWin32HandleNV plumeVolk_vkGetMemoryWin32HandleNV ++#define vkGetMemoryWin32HandlePropertiesKHR plumeVolk_vkGetMemoryWin32HandlePropertiesKHR ++#define vkGetMemoryZirconHandleFUCHSIA plumeVolk_vkGetMemoryZirconHandleFUCHSIA ++#define vkGetMemoryZirconHandlePropertiesFUCHSIA plumeVolk_vkGetMemoryZirconHandlePropertiesFUCHSIA ++#define vkGetMicromapBuildSizesEXT plumeVolk_vkGetMicromapBuildSizesEXT ++#define vkGetPartitionedAccelerationStructuresBuildSizesNV plumeVolk_vkGetPartitionedAccelerationStructuresBuildSizesNV ++#define vkGetPastPresentationTimingGOOGLE plumeVolk_vkGetPastPresentationTimingGOOGLE ++#define vkGetPerformanceParameterINTEL plumeVolk_vkGetPerformanceParameterINTEL ++#define vkGetPhysicalDeviceCalibrateableTimeDomainsEXT plumeVolk_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT ++#define vkGetPhysicalDeviceCalibrateableTimeDomainsKHR plumeVolk_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR ++#define vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV plumeVolk_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV ++#define vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR plumeVolk_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR ++#define vkGetPhysicalDeviceCooperativeMatrixPropertiesNV plumeVolk_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV ++#define vkGetPhysicalDeviceCooperativeVectorPropertiesNV plumeVolk_vkGetPhysicalDeviceCooperativeVectorPropertiesNV ++#define vkGetPhysicalDeviceDirectFBPresentationSupportEXT plumeVolk_vkGetPhysicalDeviceDirectFBPresentationSupportEXT ++#define vkGetPhysicalDeviceDisplayPlaneProperties2KHR plumeVolk_vkGetPhysicalDeviceDisplayPlaneProperties2KHR ++#define vkGetPhysicalDeviceDisplayPlanePropertiesKHR plumeVolk_vkGetPhysicalDeviceDisplayPlanePropertiesKHR ++#define vkGetPhysicalDeviceDisplayProperties2KHR plumeVolk_vkGetPhysicalDeviceDisplayProperties2KHR ++#define vkGetPhysicalDeviceDisplayPropertiesKHR plumeVolk_vkGetPhysicalDeviceDisplayPropertiesKHR ++#define vkGetPhysicalDeviceExternalBufferProperties plumeVolk_vkGetPhysicalDeviceExternalBufferProperties ++#define vkGetPhysicalDeviceExternalBufferPropertiesKHR plumeVolk_vkGetPhysicalDeviceExternalBufferPropertiesKHR ++#define vkGetPhysicalDeviceExternalFenceProperties plumeVolk_vkGetPhysicalDeviceExternalFenceProperties ++#define vkGetPhysicalDeviceExternalFencePropertiesKHR plumeVolk_vkGetPhysicalDeviceExternalFencePropertiesKHR ++#define vkGetPhysicalDeviceExternalImageFormatPropertiesNV plumeVolk_vkGetPhysicalDeviceExternalImageFormatPropertiesNV ++#define vkGetPhysicalDeviceExternalSemaphoreProperties plumeVolk_vkGetPhysicalDeviceExternalSemaphoreProperties ++#define vkGetPhysicalDeviceExternalSemaphorePropertiesKHR plumeVolk_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR ++#define vkGetPhysicalDeviceExternalTensorPropertiesARM plumeVolk_vkGetPhysicalDeviceExternalTensorPropertiesARM ++#define vkGetPhysicalDeviceFeatures plumeVolk_vkGetPhysicalDeviceFeatures ++#define vkGetPhysicalDeviceFeatures2 plumeVolk_vkGetPhysicalDeviceFeatures2 ++#define vkGetPhysicalDeviceFeatures2KHR plumeVolk_vkGetPhysicalDeviceFeatures2KHR ++#define vkGetPhysicalDeviceFormatProperties plumeVolk_vkGetPhysicalDeviceFormatProperties ++#define vkGetPhysicalDeviceFormatProperties2 plumeVolk_vkGetPhysicalDeviceFormatProperties2 ++#define vkGetPhysicalDeviceFormatProperties2KHR plumeVolk_vkGetPhysicalDeviceFormatProperties2KHR ++#define vkGetPhysicalDeviceFragmentShadingRatesKHR plumeVolk_vkGetPhysicalDeviceFragmentShadingRatesKHR ++#define vkGetPhysicalDeviceImageFormatProperties plumeVolk_vkGetPhysicalDeviceImageFormatProperties ++#define vkGetPhysicalDeviceImageFormatProperties2 plumeVolk_vkGetPhysicalDeviceImageFormatProperties2 ++#define vkGetPhysicalDeviceImageFormatProperties2KHR plumeVolk_vkGetPhysicalDeviceImageFormatProperties2KHR ++#define vkGetPhysicalDeviceMemoryProperties plumeVolk_vkGetPhysicalDeviceMemoryProperties ++#define vkGetPhysicalDeviceMemoryProperties2 plumeVolk_vkGetPhysicalDeviceMemoryProperties2 ++#define vkGetPhysicalDeviceMemoryProperties2KHR plumeVolk_vkGetPhysicalDeviceMemoryProperties2KHR ++#define vkGetPhysicalDeviceMultisamplePropertiesEXT plumeVolk_vkGetPhysicalDeviceMultisamplePropertiesEXT ++#define vkGetPhysicalDeviceOpticalFlowImageFormatsNV plumeVolk_vkGetPhysicalDeviceOpticalFlowImageFormatsNV ++#define vkGetPhysicalDevicePresentRectanglesKHR plumeVolk_vkGetPhysicalDevicePresentRectanglesKHR ++#define vkGetPhysicalDeviceProperties plumeVolk_vkGetPhysicalDeviceProperties ++#define vkGetPhysicalDeviceProperties2 plumeVolk_vkGetPhysicalDeviceProperties2 ++#define vkGetPhysicalDeviceProperties2KHR plumeVolk_vkGetPhysicalDeviceProperties2KHR ++#define vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM plumeVolk_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM ++#define vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM plumeVolk_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM ++#define vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR plumeVolk_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR ++#define vkGetPhysicalDeviceQueueFamilyProperties plumeVolk_vkGetPhysicalDeviceQueueFamilyProperties ++#define vkGetPhysicalDeviceQueueFamilyProperties2 plumeVolk_vkGetPhysicalDeviceQueueFamilyProperties2 ++#define vkGetPhysicalDeviceQueueFamilyProperties2KHR plumeVolk_vkGetPhysicalDeviceQueueFamilyProperties2KHR ++#define vkGetPhysicalDeviceScreenPresentationSupportQNX plumeVolk_vkGetPhysicalDeviceScreenPresentationSupportQNX ++#define vkGetPhysicalDeviceSparseImageFormatProperties plumeVolk_vkGetPhysicalDeviceSparseImageFormatProperties ++#define vkGetPhysicalDeviceSparseImageFormatProperties2 plumeVolk_vkGetPhysicalDeviceSparseImageFormatProperties2 ++#define vkGetPhysicalDeviceSparseImageFormatProperties2KHR plumeVolk_vkGetPhysicalDeviceSparseImageFormatProperties2KHR ++#define vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV plumeVolk_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV ++#define vkGetPhysicalDeviceSurfaceCapabilities2EXT plumeVolk_vkGetPhysicalDeviceSurfaceCapabilities2EXT ++#define vkGetPhysicalDeviceSurfaceCapabilities2KHR plumeVolk_vkGetPhysicalDeviceSurfaceCapabilities2KHR ++#define vkGetPhysicalDeviceSurfaceCapabilitiesKHR plumeVolk_vkGetPhysicalDeviceSurfaceCapabilitiesKHR ++#define vkGetPhysicalDeviceSurfaceFormats2KHR plumeVolk_vkGetPhysicalDeviceSurfaceFormats2KHR ++#define vkGetPhysicalDeviceSurfaceFormatsKHR plumeVolk_vkGetPhysicalDeviceSurfaceFormatsKHR ++#define vkGetPhysicalDeviceSurfacePresentModes2EXT plumeVolk_vkGetPhysicalDeviceSurfacePresentModes2EXT ++#define vkGetPhysicalDeviceSurfacePresentModesKHR plumeVolk_vkGetPhysicalDeviceSurfacePresentModesKHR ++#define vkGetPhysicalDeviceSurfaceSupportKHR plumeVolk_vkGetPhysicalDeviceSurfaceSupportKHR ++#define vkGetPhysicalDeviceToolProperties plumeVolk_vkGetPhysicalDeviceToolProperties ++#define vkGetPhysicalDeviceToolPropertiesEXT plumeVolk_vkGetPhysicalDeviceToolPropertiesEXT ++#define vkGetPhysicalDeviceVideoCapabilitiesKHR plumeVolk_vkGetPhysicalDeviceVideoCapabilitiesKHR ++#define vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR plumeVolk_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR ++#define vkGetPhysicalDeviceVideoFormatPropertiesKHR plumeVolk_vkGetPhysicalDeviceVideoFormatPropertiesKHR ++#define vkGetPhysicalDeviceWaylandPresentationSupportKHR plumeVolk_vkGetPhysicalDeviceWaylandPresentationSupportKHR ++#define vkGetPhysicalDeviceWin32PresentationSupportKHR plumeVolk_vkGetPhysicalDeviceWin32PresentationSupportKHR ++#define vkGetPhysicalDeviceXcbPresentationSupportKHR plumeVolk_vkGetPhysicalDeviceXcbPresentationSupportKHR ++#define vkGetPhysicalDeviceXlibPresentationSupportKHR plumeVolk_vkGetPhysicalDeviceXlibPresentationSupportKHR ++#define vkGetPipelineBinaryDataKHR plumeVolk_vkGetPipelineBinaryDataKHR ++#define vkGetPipelineCacheData plumeVolk_vkGetPipelineCacheData ++#define vkGetPipelineExecutableInternalRepresentationsKHR plumeVolk_vkGetPipelineExecutableInternalRepresentationsKHR ++#define vkGetPipelineExecutablePropertiesKHR plumeVolk_vkGetPipelineExecutablePropertiesKHR ++#define vkGetPipelineExecutableStatisticsKHR plumeVolk_vkGetPipelineExecutableStatisticsKHR ++#define vkGetPipelineIndirectDeviceAddressNV plumeVolk_vkGetPipelineIndirectDeviceAddressNV ++#define vkGetPipelineIndirectMemoryRequirementsNV plumeVolk_vkGetPipelineIndirectMemoryRequirementsNV ++#define vkGetPipelineKeyKHR plumeVolk_vkGetPipelineKeyKHR ++#define vkGetPipelinePropertiesEXT plumeVolk_vkGetPipelinePropertiesEXT ++#define vkGetPrivateData plumeVolk_vkGetPrivateData ++#define vkGetPrivateDataEXT plumeVolk_vkGetPrivateDataEXT ++#define vkGetQueryPoolResults plumeVolk_vkGetQueryPoolResults ++#define vkGetQueueCheckpointData2NV plumeVolk_vkGetQueueCheckpointData2NV ++#define vkGetQueueCheckpointDataNV plumeVolk_vkGetQueueCheckpointDataNV ++#define vkGetRandROutputDisplayEXT plumeVolk_vkGetRandROutputDisplayEXT ++#define vkGetRayTracingCaptureReplayShaderGroupHandlesKHR plumeVolk_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR ++#define vkGetRayTracingShaderGroupHandlesKHR plumeVolk_vkGetRayTracingShaderGroupHandlesKHR ++#define vkGetRayTracingShaderGroupHandlesNV plumeVolk_vkGetRayTracingShaderGroupHandlesNV ++#define vkGetRayTracingShaderGroupStackSizeKHR plumeVolk_vkGetRayTracingShaderGroupStackSizeKHR ++#define vkGetRefreshCycleDurationGOOGLE plumeVolk_vkGetRefreshCycleDurationGOOGLE ++#define vkGetRenderAreaGranularity plumeVolk_vkGetRenderAreaGranularity ++#define vkGetRenderingAreaGranularity plumeVolk_vkGetRenderingAreaGranularity ++#define vkGetRenderingAreaGranularityKHR plumeVolk_vkGetRenderingAreaGranularityKHR ++#define vkGetSamplerOpaqueCaptureDescriptorDataEXT plumeVolk_vkGetSamplerOpaqueCaptureDescriptorDataEXT ++#define vkGetScreenBufferPropertiesQNX plumeVolk_vkGetScreenBufferPropertiesQNX ++#define vkGetSemaphoreCounterValue plumeVolk_vkGetSemaphoreCounterValue ++#define vkGetSemaphoreCounterValueKHR plumeVolk_vkGetSemaphoreCounterValueKHR ++#define vkGetSemaphoreFdKHR plumeVolk_vkGetSemaphoreFdKHR ++#define vkGetSemaphoreWin32HandleKHR plumeVolk_vkGetSemaphoreWin32HandleKHR ++#define vkGetSemaphoreZirconHandleFUCHSIA plumeVolk_vkGetSemaphoreZirconHandleFUCHSIA ++#define vkGetShaderBinaryDataEXT plumeVolk_vkGetShaderBinaryDataEXT ++#define vkGetShaderInfoAMD plumeVolk_vkGetShaderInfoAMD ++#define vkGetShaderModuleCreateInfoIdentifierEXT plumeVolk_vkGetShaderModuleCreateInfoIdentifierEXT ++#define vkGetShaderModuleIdentifierEXT plumeVolk_vkGetShaderModuleIdentifierEXT ++#define vkGetSwapchainCounterEXT plumeVolk_vkGetSwapchainCounterEXT ++#define vkGetSwapchainImagesKHR plumeVolk_vkGetSwapchainImagesKHR ++#define vkGetSwapchainStatusKHR plumeVolk_vkGetSwapchainStatusKHR ++#define vkGetTensorMemoryRequirementsARM plumeVolk_vkGetTensorMemoryRequirementsARM ++#define vkGetTensorOpaqueCaptureDescriptorDataARM plumeVolk_vkGetTensorOpaqueCaptureDescriptorDataARM ++#define vkGetTensorViewOpaqueCaptureDescriptorDataARM plumeVolk_vkGetTensorViewOpaqueCaptureDescriptorDataARM ++#define vkGetValidationCacheDataEXT plumeVolk_vkGetValidationCacheDataEXT ++#define vkGetVideoSessionMemoryRequirementsKHR plumeVolk_vkGetVideoSessionMemoryRequirementsKHR ++#define vkGetWinrtDisplayNV plumeVolk_vkGetWinrtDisplayNV ++#define vkImportFenceFdKHR plumeVolk_vkImportFenceFdKHR ++#define vkImportFenceWin32HandleKHR plumeVolk_vkImportFenceWin32HandleKHR ++#define vkImportSemaphoreFdKHR plumeVolk_vkImportSemaphoreFdKHR ++#define vkImportSemaphoreWin32HandleKHR plumeVolk_vkImportSemaphoreWin32HandleKHR ++#define vkImportSemaphoreZirconHandleFUCHSIA plumeVolk_vkImportSemaphoreZirconHandleFUCHSIA ++#define vkInitializePerformanceApiINTEL plumeVolk_vkInitializePerformanceApiINTEL ++#define vkInvalidateMappedMemoryRanges plumeVolk_vkInvalidateMappedMemoryRanges ++#define vkLatencySleepNV plumeVolk_vkLatencySleepNV ++#define vkMapMemory plumeVolk_vkMapMemory ++#define vkMapMemory2 plumeVolk_vkMapMemory2 ++#define vkMapMemory2KHR plumeVolk_vkMapMemory2KHR ++#define vkMergePipelineCaches plumeVolk_vkMergePipelineCaches ++#define vkMergeValidationCachesEXT plumeVolk_vkMergeValidationCachesEXT ++#define vkQueueBeginDebugUtilsLabelEXT plumeVolk_vkQueueBeginDebugUtilsLabelEXT ++#define vkQueueBindSparse plumeVolk_vkQueueBindSparse ++#define vkQueueEndDebugUtilsLabelEXT plumeVolk_vkQueueEndDebugUtilsLabelEXT ++#define vkQueueInsertDebugUtilsLabelEXT plumeVolk_vkQueueInsertDebugUtilsLabelEXT ++#define vkQueueNotifyOutOfBandNV plumeVolk_vkQueueNotifyOutOfBandNV ++#define vkQueuePresentKHR plumeVolk_vkQueuePresentKHR ++#define vkQueueSetPerformanceConfigurationINTEL plumeVolk_vkQueueSetPerformanceConfigurationINTEL ++#define vkQueueSubmit plumeVolk_vkQueueSubmit ++#define vkQueueSubmit2 plumeVolk_vkQueueSubmit2 ++#define vkQueueSubmit2KHR plumeVolk_vkQueueSubmit2KHR ++#define vkQueueWaitIdle plumeVolk_vkQueueWaitIdle ++#define vkRegisterDeviceEventEXT plumeVolk_vkRegisterDeviceEventEXT ++#define vkRegisterDisplayEventEXT plumeVolk_vkRegisterDisplayEventEXT ++#define vkReleaseCapturedPipelineDataKHR plumeVolk_vkReleaseCapturedPipelineDataKHR ++#define vkReleaseDisplayEXT plumeVolk_vkReleaseDisplayEXT ++#define vkReleaseFullScreenExclusiveModeEXT plumeVolk_vkReleaseFullScreenExclusiveModeEXT ++#define vkReleasePerformanceConfigurationINTEL plumeVolk_vkReleasePerformanceConfigurationINTEL ++#define vkReleaseProfilingLockKHR plumeVolk_vkReleaseProfilingLockKHR ++#define vkReleaseSwapchainImagesEXT plumeVolk_vkReleaseSwapchainImagesEXT ++#define vkReleaseSwapchainImagesKHR plumeVolk_vkReleaseSwapchainImagesKHR ++#define vkResetCommandBuffer plumeVolk_vkResetCommandBuffer ++#define vkResetCommandPool plumeVolk_vkResetCommandPool ++#define vkResetDescriptorPool plumeVolk_vkResetDescriptorPool ++#define vkResetEvent plumeVolk_vkResetEvent ++#define vkResetFences plumeVolk_vkResetFences ++#define vkResetQueryPool plumeVolk_vkResetQueryPool ++#define vkResetQueryPoolEXT plumeVolk_vkResetQueryPoolEXT ++#define vkSetBufferCollectionBufferConstraintsFUCHSIA plumeVolk_vkSetBufferCollectionBufferConstraintsFUCHSIA ++#define vkSetBufferCollectionImageConstraintsFUCHSIA plumeVolk_vkSetBufferCollectionImageConstraintsFUCHSIA ++#define vkSetDebugUtilsObjectNameEXT plumeVolk_vkSetDebugUtilsObjectNameEXT ++#define vkSetDebugUtilsObjectTagEXT plumeVolk_vkSetDebugUtilsObjectTagEXT ++#define vkSetDeviceMemoryPriorityEXT plumeVolk_vkSetDeviceMemoryPriorityEXT ++#define vkSetEvent plumeVolk_vkSetEvent ++#define vkSetHdrMetadataEXT plumeVolk_vkSetHdrMetadataEXT ++#define vkSetLatencyMarkerNV plumeVolk_vkSetLatencyMarkerNV ++#define vkSetLatencySleepModeNV plumeVolk_vkSetLatencySleepModeNV ++#define vkSetLocalDimmingAMD plumeVolk_vkSetLocalDimmingAMD ++#define vkSetPrivateData plumeVolk_vkSetPrivateData ++#define vkSetPrivateDataEXT plumeVolk_vkSetPrivateDataEXT ++#define vkSignalSemaphore plumeVolk_vkSignalSemaphore ++#define vkSignalSemaphoreKHR plumeVolk_vkSignalSemaphoreKHR ++#define vkSubmitDebugUtilsMessageEXT plumeVolk_vkSubmitDebugUtilsMessageEXT ++#define vkTransitionImageLayout plumeVolk_vkTransitionImageLayout ++#define vkTransitionImageLayoutEXT plumeVolk_vkTransitionImageLayoutEXT ++#define vkTrimCommandPool plumeVolk_vkTrimCommandPool ++#define vkTrimCommandPoolKHR plumeVolk_vkTrimCommandPoolKHR ++#define vkUninitializePerformanceApiINTEL plumeVolk_vkUninitializePerformanceApiINTEL ++#define vkUnmapMemory plumeVolk_vkUnmapMemory ++#define vkUnmapMemory2 plumeVolk_vkUnmapMemory2 ++#define vkUnmapMemory2KHR plumeVolk_vkUnmapMemory2KHR ++#define vkUpdateDescriptorSetWithTemplate plumeVolk_vkUpdateDescriptorSetWithTemplate ++#define vkUpdateDescriptorSetWithTemplateKHR plumeVolk_vkUpdateDescriptorSetWithTemplateKHR ++#define vkUpdateDescriptorSets plumeVolk_vkUpdateDescriptorSets ++#define vkUpdateIndirectExecutionSetPipelineEXT plumeVolk_vkUpdateIndirectExecutionSetPipelineEXT ++#define vkUpdateIndirectExecutionSetShaderEXT plumeVolk_vkUpdateIndirectExecutionSetShaderEXT ++#define vkUpdateVideoSessionParametersKHR plumeVolk_vkUpdateVideoSessionParametersKHR ++#define vkWaitForFences plumeVolk_vkWaitForFences ++#define vkWaitForPresent2KHR plumeVolk_vkWaitForPresent2KHR ++#define vkWaitForPresentKHR plumeVolk_vkWaitForPresentKHR ++#define vkWaitSemaphores plumeVolk_vkWaitSemaphores ++#define vkWaitSemaphoresKHR plumeVolk_vkWaitSemaphoresKHR ++#define vkWriteAccelerationStructuresPropertiesKHR plumeVolk_vkWriteAccelerationStructuresPropertiesKHR ++#define vkWriteMicromapsPropertiesEXT plumeVolk_vkWriteMicromapsPropertiesEXT