successfully allocating with VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT working copying vulkan texture successfully passing D3D texture back to Flutter chore: Dart/Windows sample project: remove unnnecessary InvalidateRect from update() chore: Dart/Windows sample project: add generated bindings successfully blitting from Vulkan swapchain to D3D texture working Vulkan texture integration with Flutter refactor to allow disposal of resources in destructors handle destroyTexture correctly correctly implement surface resizing/destruction move Windows engine to Vulkan backend and flush after creating swapchain add vulkan + vkshaders to Windows libs update materials with Vulkan move Vulkan implementation to thermion_Dart remove extras folder thermion_flutter plugin updates update build hook to copy .lib file to output directory and use -vulkan lib zip file thermion_flutter cleanup reinstate stereoscopic on Windows add dxgi and d3d11.lib to windows header pragma update cli_windows sample project copy filament/vulkan headers to output directory. This was originally added to facilitate linking on Windows (where thermion_flutter_plugin.cpp needs the Vulkan-related headers), but this doesn't actually solve the problem because there's no way that I've found to get the directory structure correct in the Dart native_assets build directory unless you explicitly address each inidivual file. The current approach is therefore to just keep a permanent copy of the headers in the thermion_filament directory (meaning these will need to be updated manually if the Filament version changes). However, I decided to keep the changes to build.dart because it doesn't have much negative impact and may be helpful in future. disable stereoscopic on Windows and disable handle use after free checks use filament headers for thermion_flutter throw Exception for MSAA on Windows (note that passing msaa:true for setAntiAliasing doesn't actually set MSAA on other platforms, but at least it won't cause the engine to crash) change header include path for Windows/Vulkan change header include path for Windows/Vulkan add filament/vulkan headers for flutter (Windows) ensure destroyTexture platform methods accept an integer rather than a list handle Android/Windows swapchain creation separately
194 lines
5.5 KiB
Objective-C
194 lines
5.5 KiB
Objective-C
#ifndef VULKAN_METAL_H_
|
|
#define VULKAN_METAL_H_ 1
|
|
|
|
/*
|
|
** Copyright 2015-2022 The Khronos Group Inc.
|
|
**
|
|
** SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/*
|
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
|
**
|
|
*/
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
|
|
#define VK_EXT_metal_surface 1
|
|
#ifdef __OBJC__
|
|
@class CAMetalLayer;
|
|
#else
|
|
typedef void CAMetalLayer;
|
|
#endif
|
|
|
|
#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1
|
|
#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface"
|
|
typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
|
|
typedef struct VkMetalSurfaceCreateInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkMetalSurfaceCreateFlagsEXT flags;
|
|
const CAMetalLayer* pLayer;
|
|
} VkMetalSurfaceCreateInfoEXT;
|
|
|
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
|
|
|
#ifndef VK_NO_PROTOTYPES
|
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
|
VkInstance instance,
|
|
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
|
const VkAllocationCallbacks* pAllocator,
|
|
VkSurfaceKHR* pSurface);
|
|
#endif
|
|
|
|
|
|
#define VK_EXT_metal_objects 1
|
|
#ifdef __OBJC__
|
|
@protocol MTLDevice;
|
|
typedef id<MTLDevice> MTLDevice_id;
|
|
#else
|
|
typedef void* MTLDevice_id;
|
|
#endif
|
|
|
|
#ifdef __OBJC__
|
|
@protocol MTLCommandQueue;
|
|
typedef id<MTLCommandQueue> MTLCommandQueue_id;
|
|
#else
|
|
typedef void* MTLCommandQueue_id;
|
|
#endif
|
|
|
|
#ifdef __OBJC__
|
|
@protocol MTLBuffer;
|
|
typedef id<MTLBuffer> MTLBuffer_id;
|
|
#else
|
|
typedef void* MTLBuffer_id;
|
|
#endif
|
|
|
|
#ifdef __OBJC__
|
|
@protocol MTLTexture;
|
|
typedef id<MTLTexture> MTLTexture_id;
|
|
#else
|
|
typedef void* MTLTexture_id;
|
|
#endif
|
|
|
|
typedef struct __IOSurface* IOSurfaceRef;
|
|
#ifdef __OBJC__
|
|
@protocol MTLSharedEvent;
|
|
typedef id<MTLSharedEvent> MTLSharedEvent_id;
|
|
#else
|
|
typedef void* MTLSharedEvent_id;
|
|
#endif
|
|
|
|
#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 1
|
|
#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects"
|
|
|
|
typedef enum VkExportMetalObjectTypeFlagBitsEXT {
|
|
VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001,
|
|
VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002,
|
|
VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004,
|
|
VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008,
|
|
VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010,
|
|
VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020,
|
|
VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
|
|
} VkExportMetalObjectTypeFlagBitsEXT;
|
|
typedef VkFlags VkExportMetalObjectTypeFlagsEXT;
|
|
typedef struct VkExportMetalObjectCreateInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkExportMetalObjectTypeFlagBitsEXT exportObjectType;
|
|
} VkExportMetalObjectCreateInfoEXT;
|
|
|
|
typedef struct VkExportMetalObjectsInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
} VkExportMetalObjectsInfoEXT;
|
|
|
|
typedef struct VkExportMetalDeviceInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
MTLDevice_id mtlDevice;
|
|
} VkExportMetalDeviceInfoEXT;
|
|
|
|
typedef struct VkExportMetalCommandQueueInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkQueue queue;
|
|
MTLCommandQueue_id mtlCommandQueue;
|
|
} VkExportMetalCommandQueueInfoEXT;
|
|
|
|
typedef struct VkExportMetalBufferInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkDeviceMemory memory;
|
|
MTLBuffer_id mtlBuffer;
|
|
} VkExportMetalBufferInfoEXT;
|
|
|
|
typedef struct VkImportMetalBufferInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
MTLBuffer_id mtlBuffer;
|
|
} VkImportMetalBufferInfoEXT;
|
|
|
|
typedef struct VkExportMetalTextureInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkImage image;
|
|
VkImageView imageView;
|
|
VkBufferView bufferView;
|
|
VkImageAspectFlagBits plane;
|
|
MTLTexture_id mtlTexture;
|
|
} VkExportMetalTextureInfoEXT;
|
|
|
|
typedef struct VkImportMetalTextureInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkImageAspectFlagBits plane;
|
|
MTLTexture_id mtlTexture;
|
|
} VkImportMetalTextureInfoEXT;
|
|
|
|
typedef struct VkExportMetalIOSurfaceInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkImage image;
|
|
IOSurfaceRef ioSurface;
|
|
} VkExportMetalIOSurfaceInfoEXT;
|
|
|
|
typedef struct VkImportMetalIOSurfaceInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
IOSurfaceRef ioSurface;
|
|
} VkImportMetalIOSurfaceInfoEXT;
|
|
|
|
typedef struct VkExportMetalSharedEventInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkSemaphore semaphore;
|
|
VkEvent event;
|
|
MTLSharedEvent_id mtlSharedEvent;
|
|
} VkExportMetalSharedEventInfoEXT;
|
|
|
|
typedef struct VkImportMetalSharedEventInfoEXT {
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
MTLSharedEvent_id mtlSharedEvent;
|
|
} VkImportMetalSharedEventInfoEXT;
|
|
|
|
typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
|
|
|
#ifndef VK_NO_PROTOTYPES
|
|
VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT(
|
|
VkDevice device,
|
|
VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|