// Copyright (C) 2025 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "VulkanBoxedHandles.h" #include "VkDecoderGlobalState.h" #include "VkDecoderInternalStructs.h" namespace gfxstream { namespace vk { namespace { struct ReadStreamRegistry { android::base::Lock mLock; std::vector freeStreams; ReadStreamRegistry() { freeStreams.reserve(100); }; VulkanMemReadingStream* pop(const gfxstream::host::FeatureSet& features) { android::base::AutoLock lock(mLock); if (freeStreams.empty()) { return new VulkanMemReadingStream(nullptr, features); } else { VulkanMemReadingStream* res = freeStreams.back(); freeStreams.pop_back(); return res; } } void push(VulkanMemReadingStream* stream) { android::base::AutoLock lock(mLock); freeStreams.push_back(stream); } }; static ReadStreamRegistry sReadStreamRegistry; } // namespace void BoxedHandleManager::replayHandles(std::vector handles) { mHandleReplay = true; mHandleReplayQueue.clear(); for (BoxedHandle handle : handles) { mHandleReplayQueue.push_back(handle); } } void BoxedHandleManager::clear() { std::lock_guard lock(mMutex); mReverseMap.clear(); mStore.clear(); } BoxedHandle BoxedHandleManager::add(const BoxedHandleInfo& item, BoxedHandleTypeTag tag) { BoxedHandle handle; if (mHandleReplay) { handle = mHandleReplayQueue.front(); mHandleReplayQueue.pop_front(); mHandleReplay = !mHandleReplayQueue.empty(); handle = (BoxedHandle)mStore.addFixed(handle, item, (size_t)tag); } else { handle = (BoxedHandle)mStore.add(item, (size_t)tag); } std::lock_guard lock(mMutex); mReverseMap[(BoxedHandle)(item.underlying)] = handle; return handle; } void BoxedHandleManager::update(BoxedHandle handle, const BoxedHandleInfo& item, BoxedHandleTypeTag tag) { auto storedItem = mStore.get(handle); UnboxedHandle oldHandle = (UnboxedHandle)storedItem->underlying; *storedItem = item; std::lock_guard lock(mMutex); if (oldHandle) { mReverseMap.erase(oldHandle); } mReverseMap[(UnboxedHandle)(item.underlying)] = handle; } void BoxedHandleManager::remove(BoxedHandle h) { auto item = get(h); if (item) { std::lock_guard lock(mMutex); mReverseMap.erase((UnboxedHandle)(item->underlying)); } mStore.remove(h); } void BoxedHandleManager::removeDelayed(uint64_t h, VkDevice device, std::function callback) { std::lock_guard lock(mMutex); mDelayedRemoves[device].push_back({h, callback}); } void BoxedHandleManager::processDelayedRemoves(VkDevice device) { std::vector deviceDelayedRemoves; { std::lock_guard lock(mMutex); auto it = mDelayedRemoves.find(device); if (it == mDelayedRemoves.end()) return; deviceDelayedRemoves = std::move(it->second); mDelayedRemoves.erase(it); } for (const auto& r : deviceDelayedRemoves) { auto h = r.handle; // VkDecoderGlobalState is not locked when callback is called. if (r.callback) { r.callback(); } mStore.remove(h); } } BoxedHandleInfo* BoxedHandleManager::get(BoxedHandle handle) { return (BoxedHandleInfo*)mStore.get_const(handle); } BoxedHandle BoxedHandleManager::getBoxedFromUnboxed(UnboxedHandle unboxed) { std::lock_guard lock(mMutex); auto it = mReverseMap.find(unboxed); if (it == mReverseMap.end()) { return 0; } return it->second; } BoxedHandleManager sBoxedHandleManager; template constexpr BoxedHandleTypeTag GetTag() { if constexpr (std::is_same_v) { return Tag_VkAccelerationStructureKHR; } else if constexpr (std::is_same_v) { return Tag_VkAccelerationStructureNV; } else if constexpr (std::is_same_v) { return Tag_VkBuffer; } else if constexpr (std::is_same_v) { return Tag_VkBufferView; } else if constexpr (std::is_same_v) { return Tag_VkCommandBuffer; } else if constexpr (std::is_same_v) { return Tag_VkCommandPool; } else if constexpr (std::is_same_v) { return Tag_VkCuFunctionNVX; } else if constexpr (std::is_same_v) { return Tag_VkCuModuleNVX; } else if constexpr (std::is_same_v) { return Tag_VkDebugReportCallbackEXT; } else if constexpr (std::is_same_v) { return Tag_VkDebugUtilsMessengerEXT; } else if constexpr (std::is_same_v) { return Tag_VkDescriptorPool; } else if constexpr (std::is_same_v) { return Tag_VkDescriptorSet; } else if constexpr (std::is_same_v) { return Tag_VkDescriptorSetLayout; } else if constexpr (std::is_same_v) { return Tag_VkDescriptorUpdateTemplate; } else if constexpr (std::is_same_v) { return Tag_VkDevice; } else if constexpr (std::is_same_v) { return Tag_VkDeviceMemory; } else if constexpr (std::is_same_v) { return Tag_VkDisplayKHR; } else if constexpr (std::is_same_v) { return Tag_VkDisplayModeKHR; } else if constexpr (std::is_same_v) { return Tag_VkEvent; } else if constexpr (std::is_same_v) { return Tag_VkFence; } else if constexpr (std::is_same_v) { return Tag_VkFramebuffer; } else if constexpr (std::is_same_v) { return Tag_VkImage; } else if constexpr (std::is_same_v) { return Tag_VkImageView; } else if constexpr (std::is_same_v) { return Tag_VkIndirectCommandsLayoutNV; } else if constexpr (std::is_same_v) { return Tag_VkInstance; } else if constexpr (std::is_same_v) { return Tag_VkMicromapEXT; } else if constexpr (std::is_same_v) { return Tag_VkPhysicalDevice; } else if constexpr (std::is_same_v) { return Tag_VkPipeline; } else if constexpr (std::is_same_v) { return Tag_VkPipelineCache; } else if constexpr (std::is_same_v) { return Tag_VkPipelineLayout; } else if constexpr (std::is_same_v) { return Tag_VkPrivateDataSlot; } else if constexpr (std::is_same_v) { return Tag_VkQueryPool; } else if constexpr (std::is_same_v) { return Tag_VkQueue; } else if constexpr (std::is_same_v) { return Tag_VkRenderPass; } else if constexpr (std::is_same_v) { return Tag_VkSampler; } else if constexpr (std::is_same_v) { return Tag_VkSamplerYcbcrConversion; } else if constexpr (std::is_same_v) { return Tag_VkSemaphore; } else if constexpr (std::is_same_v) { return Tag_VkShaderModule; } else if constexpr (std::is_same_v) { return Tag_VkSurfaceKHR; } else if constexpr (std::is_same_v) { return Tag_VkSwapchainKHR; } else if constexpr (std::is_same_v) { return Tag_VkValidationCacheEXT; } else { static_assert(sizeof(VkObjectT) == 0, "Unhandled VkObjectT. Please update BoxedHandleTypeTag."); } } template constexpr const char* GetTypeStr() { if constexpr (std::is_same_v) { return "VkAccelerationStructureKHR"; } else if constexpr (std::is_same_v) { return "VkAccelerationStructureNV"; } else if constexpr (std::is_same_v) { return "VkBuffer"; } else if constexpr (std::is_same_v) { return "VkBufferView"; } else if constexpr (std::is_same_v) { return "VkCommandBuffer"; } else if constexpr (std::is_same_v) { return "VkCommandPool"; } else if constexpr (std::is_same_v) { return "VkCuFunctionNVX"; } else if constexpr (std::is_same_v) { return "VkCuModuleNVX"; } else if constexpr (std::is_same_v) { return "VkDebugReportCallbackEXT"; } else if constexpr (std::is_same_v) { return "VkDebugUtilsMessengerEXT"; } else if constexpr (std::is_same_v) { return "VkDescriptorPool"; } else if constexpr (std::is_same_v) { return "VkDescriptorSet"; } else if constexpr (std::is_same_v) { return "VkDescriptorSetLayout"; } else if constexpr (std::is_same_v) { return "VkDescriptorUpdateTemplate"; } else if constexpr (std::is_same_v) { return "VkDevice"; } else if constexpr (std::is_same_v) { return "VkDeviceMemory"; } else if constexpr (std::is_same_v) { return "VkDisplayKHR"; } else if constexpr (std::is_same_v) { return "VkDisplayModeKHR"; } else if constexpr (std::is_same_v) { return "VkEvent"; } else if constexpr (std::is_same_v) { return "VkFence"; } else if constexpr (std::is_same_v) { return "VkFramebuffer"; } else if constexpr (std::is_same_v) { return "VkImage"; } else if constexpr (std::is_same_v) { return "VkImageView"; } else if constexpr (std::is_same_v) { return "VkIndirectCommandsLayoutNV"; } else if constexpr (std::is_same_v) { return "VkInstance"; } else if constexpr (std::is_same_v) { return "VkMicromapEXT"; } else if constexpr (std::is_same_v) { return "VkPhysicalDevice"; } else if constexpr (std::is_same_v) { return "VkPipeline"; } else if constexpr (std::is_same_v) { return "VkPipelineCache"; } else if constexpr (std::is_same_v) { return "VkPipelineLayout"; } else if constexpr (std::is_same_v) { return "VkPrivateDataSlot"; } else if constexpr (std::is_same_v) { return "VkQueryPool"; } else if constexpr (std::is_same_v) { return "VkQueue"; } else if constexpr (std::is_same_v) { return "VkRenderPass"; } else if constexpr (std::is_same_v) { return "VkSampler"; } else if constexpr (std::is_same_v) { return "VkSamplerYcbcrConversion"; } else if constexpr (std::is_same_v) { return "VkSemaphore"; } else if constexpr (std::is_same_v) { return "VkShaderModule"; } else if constexpr (std::is_same_v) { return "VkSurfaceKHR"; } else if constexpr (std::is_same_v) { return "VkSwapchainKHR"; } else if constexpr (std::is_same_v) { return "VkValidationCacheEXT"; } else { static_assert(sizeof(VkObjectT) == 0, "Unhandled VkObjectT. Please update BoxedHandleTypeTag."); } } template VkObjectT new_boxed_VkType(VkObjectT underlying, bool dispatchable = false, VulkanDispatch* dispatch = nullptr, bool ownsDispatch = false) { BoxedHandleInfo info; info.underlying = (uint64_t)underlying; if (dispatchable) { if (dispatch != nullptr) { info.dispatch = dispatch; } else { info.dispatch = new VulkanDispatch(); } info.ownDispatch = ownsDispatch; info.ordMaintInfo = new OrderMaintenanceInfo(); info.readStream = nullptr; } return (VkObjectT)sBoxedHandleManager.add(info, GetTag()); } template void delete_VkType(VkObjectT boxed) { if (boxed == VK_NULL_HANDLE) { return; } BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (info == nullptr) { return; } releaseOrderMaintInfo(info->ordMaintInfo); if (info->readStream) { sReadStreamRegistry.push(info->readStream); info->readStream = nullptr; } sBoxedHandleManager.remove((uint64_t)boxed); } template void delayed_delete_VkType(VkObjectT boxed, VkDevice device, std::function callback) { if (boxed == VK_NULL_HANDLE) { return; } sBoxedHandleManager.removeDelayed((uint64_t)boxed, device, std::move(callback)); } // Custom unbox_* functions or GOLDFISH_VK_LIST_DISPATCHABLE_CUSTOM_UNBOX_HANDLE_TYPES // VkQueue objects can be virtual, meaning that multiple boxed queues can map into a single // physical queue on the host GPU. Some conversion is needed for unboxing to physical. VkQueue unbox_VkQueueImpl(VkQueue boxed) { BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (!info) { return VK_NULL_HANDLE; } const uint64_t unboxedQueue64 = info->underlying; // Use VulkanVirtualQueue directly to avoid locking for hasVirtualGraphicsQueue call. if (VkDecoderGlobalState::get()->getFeatures().VulkanVirtualQueue.enabled) { // Clear virtual bit and unbox into the actual physical queue handle return (VkQueue)(unboxedQueue64 & ~QueueInfo::kVirtualQueueBit); } return (VkQueue)(unboxedQueue64); } template VkObjectT unbox_VkType(VkObjectT boxed) { if (boxed == VK_NULL_HANDLE) { return VK_NULL_HANDLE; } VkObjectT unboxed = VK_NULL_HANDLE; if constexpr (std::is_same_v) { unboxed = unbox_VkQueueImpl(boxed); } else { BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (info == nullptr) { if constexpr (std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v) { ERR("Failed to unbox %s %p", GetTypeStr(), boxed); } else if constexpr (std::is_same_v) { // TODO: investigate. } else { GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) << "Failed to unbox " << GetTypeStr() << " " << boxed << ", not found."; } unboxed = VK_NULL_HANDLE; } else { unboxed = (VkObjectT)info->underlying; } } return unboxed; } template VkObjectT try_unbox_VkType(VkObjectT boxed) { if (boxed == VK_NULL_HANDLE) { return VK_NULL_HANDLE; } VkObjectT unboxed = VK_NULL_HANDLE; if constexpr (std::is_same_v) { unboxed = unbox_VkQueueImpl(boxed); } else { BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (info != nullptr) { unboxed = (VkObjectT)info->underlying; } } if (unboxed == VK_NULL_HANDLE) { WARN("Failed to try unbox %s %p", GetTypeStr(), boxed); } return unboxed; } template VkObjectT unboxed_to_boxed_non_dispatchable_VkType(VkObjectT unboxed) { if (unboxed == VK_NULL_HANDLE) { return VK_NULL_HANDLE; } return (VkObjectT)sBoxedHandleManager.getBoxedFromUnboxed((uint64_t)(uintptr_t)unboxed); } template void set_boxed_non_dispatchable_VkType(VkObjectT boxed, VkObjectT new_unboxed) { BoxedHandleInfo info; info.underlying = (uint64_t)new_unboxed; sBoxedHandleManager.update((uint64_t)boxed, info, GetTag()); } template OrderMaintenanceInfo* get_order_maintenance_info_VkType(VkObjectT boxed) { BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (info == nullptr) { return nullptr; } if (info->ordMaintInfo == nullptr) { return nullptr; } acquireOrderMaintInfo(info->ordMaintInfo); return info->ordMaintInfo; } template VulkanMemReadingStream* get_read_stream_VkType(VkObjectT boxed) { BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (info == nullptr) { return nullptr; } if (info->readStream == nullptr) { info->readStream = sReadStreamRegistry.pop(VkDecoderGlobalState::get()->getFeatures()); } return info->readStream; } template VulkanDispatch* get_dispatch_VkType(VkObjectT boxed) { BoxedHandleInfo* info = sBoxedHandleManager.get((uint64_t)(uintptr_t)boxed); if (info == nullptr) { ERR("Failed to unbox %s %p", GetTypeStr(), boxed); return nullptr; } return info->dispatch; } /////////////////////////////////////////////////////////////////////////////// ////////////// DISPATCHABLE TYPES ////////////// /////////////////////////////////////////////////////////////////////////////// VkInstance new_boxed_VkInstance(VkInstance unboxed, VulkanDispatch* dispatch, bool ownsDispatch) { return new_boxed_VkType(unboxed, /*dispatchable=*/true, dispatch, ownsDispatch); } void delete_VkInstance(VkInstance boxed) { delete_VkType(boxed); } VkInstance unbox_VkInstance(VkInstance boxed) { return unbox_VkType(boxed); } VkInstance try_unbox_VkInstance(VkInstance boxed) { return try_unbox_VkType(boxed); } VkInstance unboxed_to_boxed_VkInstance(VkInstance unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } OrderMaintenanceInfo* ordmaint_VkInstance(VkInstance boxed) { return get_order_maintenance_info_VkType(boxed); } VulkanMemReadingStream* readstream_VkInstance(VkInstance boxed) { return get_read_stream_VkType(boxed); } VulkanDispatch* dispatch_VkInstance(VkInstance boxed) { return get_dispatch_VkType(boxed); } VkPhysicalDevice new_boxed_VkPhysicalDevice(VkPhysicalDevice unboxed, VulkanDispatch* dispatch, bool ownsDispatch) { return new_boxed_VkType(unboxed, /*dispatchable=*/true, dispatch, ownsDispatch); } void delete_VkPhysicalDevice(VkPhysicalDevice boxed) { delete_VkType(boxed); } VkPhysicalDevice unbox_VkPhysicalDevice(VkPhysicalDevice boxed) { return unbox_VkType(boxed); } VkPhysicalDevice try_unbox_VkPhysicalDevice(VkPhysicalDevice boxed) { return try_unbox_VkType(boxed); } VkPhysicalDevice unboxed_to_boxed_VkPhysicalDevice(VkPhysicalDevice unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } OrderMaintenanceInfo* ordmaint_VkPhysicalDevice(VkPhysicalDevice boxed) { return get_order_maintenance_info_VkType(boxed); } VulkanMemReadingStream* readstream_VkPhysicalDevice(VkPhysicalDevice boxed) { return get_read_stream_VkType(boxed); } VulkanDispatch* dispatch_VkPhysicalDevice(VkPhysicalDevice boxed) { return get_dispatch_VkType(boxed); } VkDevice new_boxed_VkDevice(VkDevice unboxed, VulkanDispatch* dispatch, bool ownsDispatch) { return new_boxed_VkType(unboxed, /*dispatchable=*/true, dispatch, ownsDispatch); } void delete_VkDevice(VkDevice boxed) { delete_VkType(boxed); } VkDevice unbox_VkDevice(VkDevice boxed) { return unbox_VkType(boxed); } VkDevice try_unbox_VkDevice(VkDevice boxed) { return try_unbox_VkType(boxed); } VkDevice unboxed_to_boxed_VkDevice(VkDevice unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } OrderMaintenanceInfo* ordmaint_VkDevice(VkDevice boxed) { return get_order_maintenance_info_VkType(boxed); } VulkanMemReadingStream* readstream_VkDevice(VkDevice boxed) { return get_read_stream_VkType(boxed); } VulkanDispatch* dispatch_VkDevice(VkDevice boxed) { return get_dispatch_VkType(boxed); } VkCommandBuffer new_boxed_VkCommandBuffer(VkCommandBuffer unboxed, VulkanDispatch* dispatch, bool ownsDispatch) { return new_boxed_VkType(unboxed, /*dispatchable=*/true, dispatch, ownsDispatch); } void delete_VkCommandBuffer(VkCommandBuffer boxed) { delete_VkType(boxed); } VkCommandBuffer unbox_VkCommandBuffer(VkCommandBuffer boxed) { return unbox_VkType(boxed); } VkCommandBuffer try_unbox_VkCommandBuffer(VkCommandBuffer boxed) { return try_unbox_VkType(boxed); } VkCommandBuffer unboxed_to_boxed_VkCommandBuffer(VkCommandBuffer unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } OrderMaintenanceInfo* ordmaint_VkCommandBuffer(VkCommandBuffer boxed) { return get_order_maintenance_info_VkType(boxed); } VulkanMemReadingStream* readstream_VkCommandBuffer(VkCommandBuffer boxed) { return get_read_stream_VkType(boxed); } VulkanDispatch* dispatch_VkCommandBuffer(VkCommandBuffer boxed) { return get_dispatch_VkType(boxed); } VkQueue new_boxed_VkQueue(VkQueue unboxed, VulkanDispatch* dispatch, bool ownsDispatch) { return new_boxed_VkType(unboxed, /*dispatchable=*/true, dispatch, ownsDispatch); } void delete_VkQueue(VkQueue boxed) { delete_VkType(boxed); } VkQueue unbox_VkQueue(VkQueue boxed) { return unbox_VkType(boxed); } VkQueue try_unbox_VkQueue(VkQueue boxed) { return try_unbox_VkType(boxed); } VkQueue unboxed_to_boxed_VkQueue(VkQueue unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } OrderMaintenanceInfo* ordmaint_VkQueue(VkQueue boxed) { return get_order_maintenance_info_VkType(boxed); } VulkanMemReadingStream* readstream_VkQueue(VkQueue boxed) { return get_read_stream_VkType(boxed); } VulkanDispatch* dispatch_VkQueue(VkQueue boxed) { return get_dispatch_VkType(boxed); } /////////////////////////////////////////////////////////////////////////////// ////////////// NON DISPATCHABLE TYPES ////////////// /////////////////////////////////////////////////////////////////////////////// VkAccelerationStructureKHR new_boxed_non_dispatchable_VkAccelerationStructureKHR(VkAccelerationStructureKHR unboxed) { return new_boxed_VkType(unboxed); } void delete_VkAccelerationStructureKHR(VkAccelerationStructureKHR boxed) { delete_VkType(boxed); } void delayed_delete_VkAccelerationStructureKHR(VkAccelerationStructureKHR boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkAccelerationStructureKHR unbox_VkAccelerationStructureKHR(VkAccelerationStructureKHR boxed) { return unbox_VkType(boxed); } VkAccelerationStructureKHR try_unbox_VkAccelerationStructureKHR(VkAccelerationStructureKHR boxed) { return try_unbox_VkType(boxed); } VkAccelerationStructureKHR unboxed_to_boxed_non_dispatchable_VkAccelerationStructureKHR(VkAccelerationStructureKHR unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkAccelerationStructureKHR(VkAccelerationStructureKHR boxed, VkAccelerationStructureKHR new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkAccelerationStructureNV new_boxed_non_dispatchable_VkAccelerationStructureNV(VkAccelerationStructureNV unboxed) { return new_boxed_VkType(unboxed); } void delete_VkAccelerationStructureNV(VkAccelerationStructureNV boxed) { delete_VkType(boxed); } void delayed_delete_VkAccelerationStructureNV(VkAccelerationStructureNV boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkAccelerationStructureNV unbox_VkAccelerationStructureNV(VkAccelerationStructureNV boxed) { return unbox_VkType(boxed); } VkAccelerationStructureNV try_unbox_VkAccelerationStructureNV(VkAccelerationStructureNV boxed) { return try_unbox_VkType(boxed); } VkAccelerationStructureNV unboxed_to_boxed_non_dispatchable_VkAccelerationStructureNV(VkAccelerationStructureNV unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkAccelerationStructureNV(VkAccelerationStructureNV boxed, VkAccelerationStructureNV new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkBuffer new_boxed_non_dispatchable_VkBuffer(VkBuffer unboxed) { return new_boxed_VkType(unboxed); } void delete_VkBuffer(VkBuffer boxed) { delete_VkType(boxed); } void delayed_delete_VkBuffer(VkBuffer boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkBuffer unbox_VkBuffer(VkBuffer boxed) { return unbox_VkType(boxed); } VkBuffer try_unbox_VkBuffer(VkBuffer boxed) { return try_unbox_VkType(boxed); } VkBuffer unboxed_to_boxed_non_dispatchable_VkBuffer(VkBuffer unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkBuffer(VkBuffer boxed, VkBuffer new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkBufferView new_boxed_non_dispatchable_VkBufferView(VkBufferView unboxed) { return new_boxed_VkType(unboxed); } void delete_VkBufferView(VkBufferView boxed) { delete_VkType(boxed); } void delayed_delete_VkBufferView(VkBufferView boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkBufferView unbox_VkBufferView(VkBufferView boxed) { return unbox_VkType(boxed); } VkBufferView try_unbox_VkBufferView(VkBufferView boxed) { return try_unbox_VkType(boxed); } VkBufferView unboxed_to_boxed_non_dispatchable_VkBufferView(VkBufferView unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkBufferView(VkBufferView boxed, VkBufferView new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkCommandPool new_boxed_non_dispatchable_VkCommandPool(VkCommandPool unboxed) { return new_boxed_VkType(unboxed); } void delete_VkCommandPool(VkCommandPool boxed) { delete_VkType(boxed); } void delayed_delete_VkCommandPool(VkCommandPool boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkCommandPool unbox_VkCommandPool(VkCommandPool boxed) { return unbox_VkType(boxed); } VkCommandPool try_unbox_VkCommandPool(VkCommandPool boxed) { return try_unbox_VkType(boxed); } VkCommandPool unboxed_to_boxed_non_dispatchable_VkCommandPool(VkCommandPool unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkCommandPool(VkCommandPool boxed, VkCommandPool new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkCuFunctionNVX new_boxed_non_dispatchable_VkCuFunctionNVX(VkCuFunctionNVX unboxed) { return new_boxed_VkType(unboxed); } void delete_VkCuFunctionNVX(VkCuFunctionNVX boxed) { delete_VkType(boxed); } void delayed_delete_VkCuFunctionNVX(VkCuFunctionNVX boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkCuFunctionNVX unbox_VkCuFunctionNVX(VkCuFunctionNVX boxed) { return unbox_VkType(boxed); } VkCuFunctionNVX try_unbox_VkCuFunctionNVX(VkCuFunctionNVX boxed) { return try_unbox_VkType(boxed); } VkCuFunctionNVX unboxed_to_boxed_non_dispatchable_VkCuFunctionNVX(VkCuFunctionNVX unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkCuFunctionNVX(VkCuFunctionNVX boxed, VkCuFunctionNVX new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkCuModuleNVX new_boxed_non_dispatchable_VkCuModuleNVX(VkCuModuleNVX unboxed) { return new_boxed_VkType(unboxed); } void delete_VkCuModuleNVX(VkCuModuleNVX boxed) { delete_VkType(boxed); } void delayed_delete_VkCuModuleNVX(VkCuModuleNVX boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkCuModuleNVX unbox_VkCuModuleNVX(VkCuModuleNVX boxed) { return unbox_VkType(boxed); } VkCuModuleNVX try_unbox_VkCuModuleNVX(VkCuModuleNVX boxed) { return try_unbox_VkType(boxed); } VkCuModuleNVX unboxed_to_boxed_non_dispatchable_VkCuModuleNVX(VkCuModuleNVX unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkCuModuleNVX(VkCuModuleNVX boxed, VkCuModuleNVX new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDebugReportCallbackEXT new_boxed_non_dispatchable_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT boxed) { delete_VkType(boxed); } void delayed_delete_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDebugReportCallbackEXT unbox_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT boxed) { return unbox_VkType(boxed); } VkDebugReportCallbackEXT try_unbox_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT boxed) { return try_unbox_VkType(boxed); } VkDebugReportCallbackEXT unboxed_to_boxed_non_dispatchable_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDebugReportCallbackEXT(VkDebugReportCallbackEXT boxed, VkDebugReportCallbackEXT new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDebugUtilsMessengerEXT new_boxed_non_dispatchable_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT boxed) { delete_VkType(boxed); } void delayed_delete_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDebugUtilsMessengerEXT unbox_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT boxed) { return unbox_VkType(boxed); } VkDebugUtilsMessengerEXT try_unbox_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT boxed) { return try_unbox_VkType(boxed); } VkDebugUtilsMessengerEXT unboxed_to_boxed_non_dispatchable_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDebugUtilsMessengerEXT(VkDebugUtilsMessengerEXT boxed, VkDebugUtilsMessengerEXT new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDescriptorPool new_boxed_non_dispatchable_VkDescriptorPool(VkDescriptorPool unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDescriptorPool(VkDescriptorPool boxed) { delete_VkType(boxed); } void delayed_delete_VkDescriptorPool(VkDescriptorPool boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDescriptorPool unbox_VkDescriptorPool(VkDescriptorPool boxed) { return unbox_VkType(boxed); } VkDescriptorPool try_unbox_VkDescriptorPool(VkDescriptorPool boxed) { return try_unbox_VkType(boxed); } VkDescriptorPool unboxed_to_boxed_non_dispatchable_VkDescriptorPool(VkDescriptorPool unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDescriptorPool(VkDescriptorPool boxed, VkDescriptorPool new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDescriptorSet new_boxed_non_dispatchable_VkDescriptorSet(VkDescriptorSet unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDescriptorSet(VkDescriptorSet boxed) { delete_VkType(boxed); } void delayed_delete_VkDescriptorSet(VkDescriptorSet boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDescriptorSet unbox_VkDescriptorSet(VkDescriptorSet boxed) { return unbox_VkType(boxed); } VkDescriptorSet try_unbox_VkDescriptorSet(VkDescriptorSet boxed) { return try_unbox_VkType(boxed); } VkDescriptorSet unboxed_to_boxed_non_dispatchable_VkDescriptorSet(VkDescriptorSet unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDescriptorSet(VkDescriptorSet boxed, VkDescriptorSet new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDescriptorSetLayout new_boxed_non_dispatchable_VkDescriptorSetLayout(VkDescriptorSetLayout unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDescriptorSetLayout(VkDescriptorSetLayout boxed) { delete_VkType(boxed); } void delayed_delete_VkDescriptorSetLayout(VkDescriptorSetLayout boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDescriptorSetLayout unbox_VkDescriptorSetLayout(VkDescriptorSetLayout boxed) { return unbox_VkType(boxed); } VkDescriptorSetLayout try_unbox_VkDescriptorSetLayout(VkDescriptorSetLayout boxed) { return try_unbox_VkType(boxed); } VkDescriptorSetLayout unboxed_to_boxed_non_dispatchable_VkDescriptorSetLayout(VkDescriptorSetLayout unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDescriptorSetLayout(VkDescriptorSetLayout boxed, VkDescriptorSetLayout new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDescriptorUpdateTemplate new_boxed_non_dispatchable_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate boxed) { delete_VkType(boxed); } void delayed_delete_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDescriptorUpdateTemplate unbox_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate boxed) { return unbox_VkType(boxed); } VkDescriptorUpdateTemplate try_unbox_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate boxed) { return try_unbox_VkType(boxed); } VkDescriptorUpdateTemplate unboxed_to_boxed_non_dispatchable_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDescriptorUpdateTemplate(VkDescriptorUpdateTemplate boxed, VkDescriptorUpdateTemplate new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDeviceMemory new_boxed_non_dispatchable_VkDeviceMemory(VkDeviceMemory unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDeviceMemory(VkDeviceMemory boxed) { delete_VkType(boxed); } void delayed_delete_VkDeviceMemory(VkDeviceMemory boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDeviceMemory unbox_VkDeviceMemory(VkDeviceMemory boxed) { return unbox_VkType(boxed); } VkDeviceMemory try_unbox_VkDeviceMemory(VkDeviceMemory boxed) { return try_unbox_VkType(boxed); } VkDeviceMemory unboxed_to_boxed_non_dispatchable_VkDeviceMemory(VkDeviceMemory unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDeviceMemory(VkDeviceMemory boxed, VkDeviceMemory new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDisplayKHR new_boxed_non_dispatchable_VkDisplayKHR(VkDisplayKHR unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDisplayKHR(VkDisplayKHR boxed) { delete_VkType(boxed); } void delayed_delete_VkDisplayKHR(VkDisplayKHR boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDisplayKHR unbox_VkDisplayKHR(VkDisplayKHR boxed) { return unbox_VkType(boxed); } VkDisplayKHR try_unbox_VkDisplayKHR(VkDisplayKHR boxed) { return try_unbox_VkType(boxed); } VkDisplayKHR unboxed_to_boxed_non_dispatchable_VkDisplayKHR(VkDisplayKHR unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDisplayKHR(VkDisplayKHR boxed, VkDisplayKHR new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkDisplayModeKHR new_boxed_non_dispatchable_VkDisplayModeKHR(VkDisplayModeKHR unboxed) { return new_boxed_VkType(unboxed); } void delete_VkDisplayModeKHR(VkDisplayModeKHR boxed) { delete_VkType(boxed); } void delayed_delete_VkDisplayModeKHR(VkDisplayModeKHR boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkDisplayModeKHR unbox_VkDisplayModeKHR(VkDisplayModeKHR boxed) { return unbox_VkType(boxed); } VkDisplayModeKHR try_unbox_VkDisplayModeKHR(VkDisplayModeKHR boxed) { return try_unbox_VkType(boxed); } VkDisplayModeKHR unboxed_to_boxed_non_dispatchable_VkDisplayModeKHR(VkDisplayModeKHR unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkDisplayModeKHR(VkDisplayModeKHR boxed, VkDisplayModeKHR new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkEvent new_boxed_non_dispatchable_VkEvent(VkEvent unboxed) { return new_boxed_VkType(unboxed); } void delete_VkEvent(VkEvent boxed) { delete_VkType(boxed); } void delayed_delete_VkEvent(VkEvent boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkEvent unbox_VkEvent(VkEvent boxed) { return unbox_VkType(boxed); } VkEvent try_unbox_VkEvent(VkEvent boxed) { return try_unbox_VkType(boxed); } VkEvent unboxed_to_boxed_non_dispatchable_VkEvent(VkEvent unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkEvent(VkEvent boxed, VkEvent new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkFence new_boxed_non_dispatchable_VkFence(VkFence unboxed) { return new_boxed_VkType(unboxed); } void delete_VkFence(VkFence boxed) { delete_VkType(boxed); } void delayed_delete_VkFence(VkFence boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkFence unbox_VkFence(VkFence boxed) { return unbox_VkType(boxed); } VkFence try_unbox_VkFence(VkFence boxed) { return try_unbox_VkType(boxed); } VkFence unboxed_to_boxed_non_dispatchable_VkFence(VkFence unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkFence(VkFence boxed, VkFence new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkFramebuffer new_boxed_non_dispatchable_VkFramebuffer(VkFramebuffer unboxed) { return new_boxed_VkType(unboxed); } void delete_VkFramebuffer(VkFramebuffer boxed) { delete_VkType(boxed); } void delayed_delete_VkFramebuffer(VkFramebuffer boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkFramebuffer unbox_VkFramebuffer(VkFramebuffer boxed) { return unbox_VkType(boxed); } VkFramebuffer try_unbox_VkFramebuffer(VkFramebuffer boxed) { return try_unbox_VkType(boxed); } VkFramebuffer unboxed_to_boxed_non_dispatchable_VkFramebuffer(VkFramebuffer unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkFramebuffer(VkFramebuffer boxed, VkFramebuffer new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkImage new_boxed_non_dispatchable_VkImage(VkImage unboxed) { return new_boxed_VkType(unboxed); } void delete_VkImage(VkImage boxed) { delete_VkType(boxed); } void delayed_delete_VkImage(VkImage boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkImage unbox_VkImage(VkImage boxed) { return unbox_VkType(boxed); } VkImage try_unbox_VkImage(VkImage boxed) { return try_unbox_VkType(boxed); } VkImage unboxed_to_boxed_non_dispatchable_VkImage(VkImage unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkImage(VkImage boxed, VkImage new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkImageView new_boxed_non_dispatchable_VkImageView(VkImageView unboxed) { return new_boxed_VkType(unboxed); } void delete_VkImageView(VkImageView boxed) { delete_VkType(boxed); } void delayed_delete_VkImageView(VkImageView boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkImageView unbox_VkImageView(VkImageView boxed) { return unbox_VkType(boxed); } VkImageView try_unbox_VkImageView(VkImageView boxed) { return try_unbox_VkType(boxed); } VkImageView unboxed_to_boxed_non_dispatchable_VkImageView(VkImageView unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkImageView(VkImageView boxed, VkImageView new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkIndirectCommandsLayoutNV new_boxed_non_dispatchable_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV unboxed) { return new_boxed_VkType(unboxed); } void delete_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV boxed) { delete_VkType(boxed); } void delayed_delete_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkIndirectCommandsLayoutNV unbox_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV boxed) { return unbox_VkType(boxed); } VkIndirectCommandsLayoutNV try_unbox_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV boxed) { return try_unbox_VkType(boxed); } VkIndirectCommandsLayoutNV unboxed_to_boxed_non_dispatchable_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkIndirectCommandsLayoutNV(VkIndirectCommandsLayoutNV boxed, VkIndirectCommandsLayoutNV new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkMicromapEXT new_boxed_non_dispatchable_VkMicromapEXT(VkMicromapEXT unboxed) { return new_boxed_VkType(unboxed); } void delete_VkMicromapEXT(VkMicromapEXT boxed) { delete_VkType(boxed); } void delayed_delete_VkMicromapEXT(VkMicromapEXT boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkMicromapEXT unbox_VkMicromapEXT(VkMicromapEXT boxed) { return unbox_VkType(boxed); } VkMicromapEXT try_unbox_VkMicromapEXT(VkMicromapEXT boxed) { return try_unbox_VkType(boxed); } VkMicromapEXT unboxed_to_boxed_non_dispatchable_VkMicromapEXT(VkMicromapEXT unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkMicromapEXT(VkMicromapEXT boxed, VkMicromapEXT new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkPipeline new_boxed_non_dispatchable_VkPipeline(VkPipeline unboxed) { return new_boxed_VkType(unboxed); } void delete_VkPipeline(VkPipeline boxed) { delete_VkType(boxed); } void delayed_delete_VkPipeline(VkPipeline boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkPipeline unbox_VkPipeline(VkPipeline boxed) { return unbox_VkType(boxed); } VkPipeline try_unbox_VkPipeline(VkPipeline boxed) { return try_unbox_VkType(boxed); } VkPipeline unboxed_to_boxed_non_dispatchable_VkPipeline(VkPipeline unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkPipeline(VkPipeline boxed, VkPipeline new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkPipelineCache new_boxed_non_dispatchable_VkPipelineCache(VkPipelineCache unboxed) { return new_boxed_VkType(unboxed); } void delete_VkPipelineCache(VkPipelineCache boxed) { delete_VkType(boxed); } void delayed_delete_VkPipelineCache(VkPipelineCache boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkPipelineCache unbox_VkPipelineCache(VkPipelineCache boxed) { return unbox_VkType(boxed); } VkPipelineCache try_unbox_VkPipelineCache(VkPipelineCache boxed) { return try_unbox_VkType(boxed); } VkPipelineCache unboxed_to_boxed_non_dispatchable_VkPipelineCache(VkPipelineCache unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkPipelineCache(VkPipelineCache boxed, VkPipelineCache new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkPipelineLayout new_boxed_non_dispatchable_VkPipelineLayout(VkPipelineLayout unboxed) { return new_boxed_VkType(unboxed); } void delete_VkPipelineLayout(VkPipelineLayout boxed) { delete_VkType(boxed); } void delayed_delete_VkPipelineLayout(VkPipelineLayout boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkPipelineLayout unbox_VkPipelineLayout(VkPipelineLayout boxed) { return unbox_VkType(boxed); } VkPipelineLayout try_unbox_VkPipelineLayout(VkPipelineLayout boxed) { return try_unbox_VkType(boxed); } VkPipelineLayout unboxed_to_boxed_non_dispatchable_VkPipelineLayout(VkPipelineLayout unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkPipelineLayout(VkPipelineLayout boxed, VkPipelineLayout new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkPrivateDataSlot new_boxed_non_dispatchable_VkPrivateDataSlot(VkPrivateDataSlot unboxed) { return new_boxed_VkType(unboxed); } void delete_VkPrivateDataSlot(VkPrivateDataSlot boxed) { delete_VkType(boxed); } void delayed_delete_VkPrivateDataSlot(VkPrivateDataSlot boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkPrivateDataSlot unbox_VkPrivateDataSlot(VkPrivateDataSlot boxed) { return unbox_VkType(boxed); } VkPrivateDataSlot try_unbox_VkPrivateDataSlot(VkPrivateDataSlot boxed) { return try_unbox_VkType(boxed); } VkPrivateDataSlot unboxed_to_boxed_non_dispatchable_VkPrivateDataSlot(VkPrivateDataSlot unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkPrivateDataSlot(VkPrivateDataSlot boxed, VkPrivateDataSlot new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkQueryPool new_boxed_non_dispatchable_VkQueryPool(VkQueryPool unboxed) { return new_boxed_VkType(unboxed); } void delete_VkQueryPool(VkQueryPool boxed) { delete_VkType(boxed); } void delayed_delete_VkQueryPool(VkQueryPool boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkQueryPool unbox_VkQueryPool(VkQueryPool boxed) { return unbox_VkType(boxed); } VkQueryPool try_unbox_VkQueryPool(VkQueryPool boxed) { return try_unbox_VkType(boxed); } VkQueryPool unboxed_to_boxed_non_dispatchable_VkQueryPool(VkQueryPool unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkQueryPool(VkQueryPool boxed, VkQueryPool new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkRenderPass new_boxed_non_dispatchable_VkRenderPass(VkRenderPass unboxed) { return new_boxed_VkType(unboxed); } void delete_VkRenderPass(VkRenderPass boxed) { delete_VkType(boxed); } void delayed_delete_VkRenderPass(VkRenderPass boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkRenderPass unbox_VkRenderPass(VkRenderPass boxed) { return unbox_VkType(boxed); } VkRenderPass try_unbox_VkRenderPass(VkRenderPass boxed) { return try_unbox_VkType(boxed); } VkRenderPass unboxed_to_boxed_non_dispatchable_VkRenderPass(VkRenderPass unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkRenderPass(VkRenderPass boxed, VkRenderPass new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkSampler new_boxed_non_dispatchable_VkSampler(VkSampler unboxed) { return new_boxed_VkType(unboxed); } void delete_VkSampler(VkSampler boxed) { delete_VkType(boxed); } void delayed_delete_VkSampler(VkSampler boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkSampler unbox_VkSampler(VkSampler boxed) { return unbox_VkType(boxed); } VkSampler try_unbox_VkSampler(VkSampler boxed) { return try_unbox_VkType(boxed); } VkSampler unboxed_to_boxed_non_dispatchable_VkSampler(VkSampler unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkSampler(VkSampler boxed, VkSampler new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkSamplerYcbcrConversion new_boxed_non_dispatchable_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion unboxed) { return new_boxed_VkType(unboxed); } void delete_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion boxed) { delete_VkType(boxed); } void delayed_delete_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkSamplerYcbcrConversion unbox_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion boxed) { return unbox_VkType(boxed); } VkSamplerYcbcrConversion try_unbox_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion boxed) { return try_unbox_VkType(boxed); } VkSamplerYcbcrConversion unboxed_to_boxed_non_dispatchable_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkSamplerYcbcrConversion(VkSamplerYcbcrConversion boxed, VkSamplerYcbcrConversion new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkSemaphore new_boxed_non_dispatchable_VkSemaphore(VkSemaphore unboxed) { return new_boxed_VkType(unboxed); } void delete_VkSemaphore(VkSemaphore boxed) { delete_VkType(boxed); } void delayed_delete_VkSemaphore(VkSemaphore boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkSemaphore unbox_VkSemaphore(VkSemaphore boxed) { return unbox_VkType(boxed); } VkSemaphore try_unbox_VkSemaphore(VkSemaphore boxed) { return try_unbox_VkType(boxed); } VkSemaphore unboxed_to_boxed_non_dispatchable_VkSemaphore(VkSemaphore unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkSemaphore(VkSemaphore boxed, VkSemaphore new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkShaderModule new_boxed_non_dispatchable_VkShaderModule(VkShaderModule unboxed) { return new_boxed_VkType(unboxed); } void delete_VkShaderModule(VkShaderModule boxed) { delete_VkType(boxed); } void delayed_delete_VkShaderModule(VkShaderModule boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkShaderModule unbox_VkShaderModule(VkShaderModule boxed) { return unbox_VkType(boxed); } VkShaderModule try_unbox_VkShaderModule(VkShaderModule boxed) { return try_unbox_VkType(boxed); } VkShaderModule unboxed_to_boxed_non_dispatchable_VkShaderModule(VkShaderModule unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkShaderModule(VkShaderModule boxed, VkShaderModule new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkSurfaceKHR new_boxed_non_dispatchable_VkSurfaceKHR(VkSurfaceKHR unboxed) { return new_boxed_VkType(unboxed); } void delete_VkSurfaceKHR(VkSurfaceKHR boxed) { delete_VkType(boxed); } void delayed_delete_VkSurfaceKHR(VkSurfaceKHR boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkSurfaceKHR unbox_VkSurfaceKHR(VkSurfaceKHR boxed) { return unbox_VkType(boxed); } VkSurfaceKHR try_unbox_VkSurfaceKHR(VkSurfaceKHR boxed) { return try_unbox_VkType(boxed); } VkSurfaceKHR unboxed_to_boxed_non_dispatchable_VkSurfaceKHR(VkSurfaceKHR unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkSurfaceKHR(VkSurfaceKHR boxed, VkSurfaceKHR new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkSwapchainKHR new_boxed_non_dispatchable_VkSwapchainKHR(VkSwapchainKHR unboxed) { return new_boxed_VkType(unboxed); } void delete_VkSwapchainKHR(VkSwapchainKHR boxed) { delete_VkType(boxed); } void delayed_delete_VkSwapchainKHR(VkSwapchainKHR boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkSwapchainKHR unbox_VkSwapchainKHR(VkSwapchainKHR boxed) { return unbox_VkType(boxed); } VkSwapchainKHR try_unbox_VkSwapchainKHR(VkSwapchainKHR boxed) { return try_unbox_VkType(boxed); } VkSwapchainKHR unboxed_to_boxed_non_dispatchable_VkSwapchainKHR(VkSwapchainKHR unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkSwapchainKHR(VkSwapchainKHR boxed, VkSwapchainKHR new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } VkValidationCacheEXT new_boxed_non_dispatchable_VkValidationCacheEXT(VkValidationCacheEXT unboxed) { return new_boxed_VkType(unboxed); } void delete_VkValidationCacheEXT(VkValidationCacheEXT boxed) { delete_VkType(boxed); } void delayed_delete_VkValidationCacheEXT(VkValidationCacheEXT boxed, VkDevice device, std::function callback) { delayed_delete_VkType(boxed, device, std::move(callback)); } VkValidationCacheEXT unbox_VkValidationCacheEXT(VkValidationCacheEXT boxed) { return unbox_VkType(boxed); } VkValidationCacheEXT try_unbox_VkValidationCacheEXT(VkValidationCacheEXT boxed) { return try_unbox_VkType(boxed); } VkValidationCacheEXT unboxed_to_boxed_non_dispatchable_VkValidationCacheEXT(VkValidationCacheEXT unboxed) { return unboxed_to_boxed_non_dispatchable_VkType(unboxed); } void set_boxed_non_dispatchable_VkValidationCacheEXT(VkValidationCacheEXT boxed, VkValidationCacheEXT new_unboxed) { set_boxed_non_dispatchable_VkType(boxed, new_unboxed); } } // namespace vk } // namespace gfxstream