1#ifndef VULKAN_METAL_H_ 2#define VULKAN_METAL_H_ 1 3 4/* 5** Copyright 2015-2024 The Khronos Group Inc. 6** 7** SPDX-License-Identifier: Apache-2.0 8*/ 9 10/* 11** This header is generated from the Khronos Vulkan XML API Registry. 12** 13*/ 14 15 16#ifdef __cplusplus 17extern "C" { 18#endif 19 20 21 22// VK_EXT_metal_surface is a preprocessor guard. Do not pass it to API calls. 23#define VK_EXT_metal_surface 1 24#ifdef __OBJC__ 25@class CAMetalLayer; 26#else 27typedef void CAMetalLayer; 28#endif 29 30#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1 31#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface" 32typedef VkFlags VkMetalSurfaceCreateFlagsEXT; 33typedef struct VkMetalSurfaceCreateInfoEXT { 34 VkStructureType sType; 35 const void* pNext; 36 VkMetalSurfaceCreateFlagsEXT flags; 37 const CAMetalLayer* pLayer; 38} VkMetalSurfaceCreateInfoEXT; 39 40typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); 41 42#ifndef VK_NO_PROTOTYPES 43VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( 44 VkInstance instance, 45 const VkMetalSurfaceCreateInfoEXT* pCreateInfo, 46 const VkAllocationCallbacks* pAllocator, 47 VkSurfaceKHR* pSurface); 48#endif 49 50 51// VK_EXT_metal_objects is a preprocessor guard. Do not pass it to API calls. 52#define VK_EXT_metal_objects 1 53#ifdef __OBJC__ 54@protocol MTLDevice; 55typedef id<MTLDevice> MTLDevice_id; 56#else 57typedef void* MTLDevice_id; 58#endif 59 60#ifdef __OBJC__ 61@protocol MTLCommandQueue; 62typedef id<MTLCommandQueue> MTLCommandQueue_id; 63#else 64typedef void* MTLCommandQueue_id; 65#endif 66 67#ifdef __OBJC__ 68@protocol MTLBuffer; 69typedef id<MTLBuffer> MTLBuffer_id; 70#else 71typedef void* MTLBuffer_id; 72#endif 73 74#ifdef __OBJC__ 75@protocol MTLTexture; 76typedef id<MTLTexture> MTLTexture_id; 77#else 78typedef void* MTLTexture_id; 79#endif 80 81typedef struct __IOSurface* IOSurfaceRef; 82#ifdef __OBJC__ 83@protocol MTLSharedEvent; 84typedef id<MTLSharedEvent> MTLSharedEvent_id; 85#else 86typedef void* MTLSharedEvent_id; 87#endif 88 89#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 1 90#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects" 91 92typedef enum VkExportMetalObjectTypeFlagBitsEXT { 93 VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001, 94 VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002, 95 VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004, 96 VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008, 97 VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010, 98 VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020, 99 VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF 100} VkExportMetalObjectTypeFlagBitsEXT; 101typedef VkFlags VkExportMetalObjectTypeFlagsEXT; 102typedef struct VkExportMetalObjectCreateInfoEXT { 103 VkStructureType sType; 104 const void* pNext; 105 VkExportMetalObjectTypeFlagBitsEXT exportObjectType; 106} VkExportMetalObjectCreateInfoEXT; 107 108typedef struct VkExportMetalObjectsInfoEXT { 109 VkStructureType sType; 110 const void* pNext; 111} VkExportMetalObjectsInfoEXT; 112 113typedef struct VkExportMetalDeviceInfoEXT { 114 VkStructureType sType; 115 const void* pNext; 116 MTLDevice_id mtlDevice; 117} VkExportMetalDeviceInfoEXT; 118 119typedef struct VkExportMetalCommandQueueInfoEXT { 120 VkStructureType sType; 121 const void* pNext; 122 VkQueue queue; 123 MTLCommandQueue_id mtlCommandQueue; 124} VkExportMetalCommandQueueInfoEXT; 125 126typedef struct VkExportMetalBufferInfoEXT { 127 VkStructureType sType; 128 const void* pNext; 129 VkDeviceMemory memory; 130 MTLBuffer_id mtlBuffer; 131} VkExportMetalBufferInfoEXT; 132 133typedef struct VkImportMetalBufferInfoEXT { 134 VkStructureType sType; 135 const void* pNext; 136 MTLBuffer_id mtlBuffer; 137} VkImportMetalBufferInfoEXT; 138 139typedef struct VkExportMetalTextureInfoEXT { 140 VkStructureType sType; 141 const void* pNext; 142 VkImage image; 143 VkImageView imageView; 144 VkBufferView bufferView; 145 VkImageAspectFlagBits plane; 146 MTLTexture_id mtlTexture; 147} VkExportMetalTextureInfoEXT; 148 149typedef struct VkImportMetalTextureInfoEXT { 150 VkStructureType sType; 151 const void* pNext; 152 VkImageAspectFlagBits plane; 153 MTLTexture_id mtlTexture; 154} VkImportMetalTextureInfoEXT; 155 156typedef struct VkExportMetalIOSurfaceInfoEXT { 157 VkStructureType sType; 158 const void* pNext; 159 VkImage image; 160 IOSurfaceRef ioSurface; 161} VkExportMetalIOSurfaceInfoEXT; 162 163typedef struct VkImportMetalIOSurfaceInfoEXT { 164 VkStructureType sType; 165 const void* pNext; 166 IOSurfaceRef ioSurface; 167} VkImportMetalIOSurfaceInfoEXT; 168 169typedef struct VkExportMetalSharedEventInfoEXT { 170 VkStructureType sType; 171 const void* pNext; 172 VkSemaphore semaphore; 173 VkEvent event; 174 MTLSharedEvent_id mtlSharedEvent; 175} VkExportMetalSharedEventInfoEXT; 176 177typedef struct VkImportMetalSharedEventInfoEXT { 178 VkStructureType sType; 179 const void* pNext; 180 MTLSharedEvent_id mtlSharedEvent; 181} VkImportMetalSharedEventInfoEXT; 182 183typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); 184 185#ifndef VK_NO_PROTOTYPES 186VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT( 187 VkDevice device, 188 VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); 189#endif 190 191#ifdef __cplusplus 192} 193#endif 194 195#endif 196