// This file was generated by Cpp2Beef using System; using System.Interop; namespace KTX; static { /* -*- tab-width: 4; -*- */ /* vi: set sw=2 ts=4 expandtab: */ } /* * Copyright 2017-2020 The Khronos Group, Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal * @file * @~English * * @brief Declares the public functions and structures of the * KTX Vulkan texture loading API. * * A separate header file is used to avoid extra dependencies for those not * using Vulkan. The nature of the Vulkan API, rampant structures and enums, * means that vulkan.h must be included @e before including this file. The * alternative is duplicating unattractively large parts of it. * * @author Mark Callow, github.com/MarkCallow */ /* Avoid Vulkan include file */ /** * @struct ktxVulkanFunctions * @~English * @brief Struct for applications to pass Vulkan function pointers to the * ktxTexture_VkUpload functions via a ktxVulkanDeviceInfo struct. * * @c vkGetInstanceProcAddr and @c vkGetDeviceProcAddr should be set, others * are optional. */ [CRepr] public struct ktxVulkanFunctions { // These are functions pointers we need to perform our vulkan duties. public PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; public PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; // These we optionally specify public PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; public PFN_vkAllocateMemory vkAllocateMemory; public PFN_vkBeginCommandBuffer vkBeginCommandBuffer; public PFN_vkBindBufferMemory vkBindBufferMemory; public PFN_vkBindImageMemory vkBindImageMemory; public PFN_vkCmdBlitImage vkCmdBlitImage; public PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; public PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; public PFN_vkCreateImage vkCreateImage; public PFN_vkDestroyImage vkDestroyImage; public PFN_vkCreateBuffer vkCreateBuffer; public PFN_vkDestroyBuffer vkDestroyBuffer; public PFN_vkCreateFence vkCreateFence; public PFN_vkDestroyFence vkDestroyFence; public PFN_vkEndCommandBuffer vkEndCommandBuffer; public PFN_vkFreeCommandBuffers vkFreeCommandBuffers; public PFN_vkFreeMemory vkFreeMemory; public PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; public PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; public PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; public PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; public PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; public PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; public PFN_vkMapMemory vkMapMemory; public PFN_vkQueueSubmit vkQueueSubmit; public PFN_vkQueueWaitIdle vkQueueWaitIdle; public PFN_vkUnmapMemory vkUnmapMemory; public PFN_vkWaitForFences vkWaitForFences; } /** * @class ktxVulkanTexture * @~English * @brief Struct for returning information about the Vulkan texture image * created by the ktxTexture_VkUpload* functions. * * Creation of these objects is internal to the upload functions. */ [CRepr] public struct ktxVulkanTexture { public PFN_vkDestroyImage vkDestroyImage; /*!< Pointer to vkDestroyImage function */ public PFN_vkFreeMemory vkFreeMemory; /*!< Pointer to vkFreeMemory function */ public VkImage image; /*!< Handle to the Vulkan image created by the loader. */ public VkFormat imageFormat; /*!< Format of the image data. */ public VkImageLayout imageLayout; /*!< Layout of the created image. Has the same value as @p layout parameter passed to the loader. */ public VkDeviceMemory deviceMemory; /*!< The memory (sub)allocation for the image on the Vulkan device. Will not be used with suballocators.*/ public VkImageViewType viewType; /*!< ViewType corresponding to @p image. Reflects the dimensionality, cubeness and arrayness of the image. */ public uint32 width; /*!< The width of the image. */ public uint32 height; /*!< The height of the image. */ public uint32 depth; /*!< The depth of the image. */ public uint32 levelCount; /*!< The number of MIP levels in the image. */ public uint32 layerCount; /*!< The number of array layers in the image. */ public uint64 allocationId; /*!< An id referencing suballocation(s). */ } [CallingConvention(KTX_APIENTRYP)] public function uint64 ktxVulkanTexture_subAllocatorAllocMemFuncPtr(VkMemoryAllocateInfo* allocInfo, VkMemoryRequirements* memReq, uint64* pageCount); [CallingConvention(KTX_APIENTRYP)] public function VkResult ktxVulkanTexture_subAllocatorBindBufferFuncPtr(VkBuffer buffer, uint64 allocId); [CallingConvention(KTX_APIENTRYP)] public function VkResult ktxVulkanTexture_subAllocatorBindImageFuncPtr(VkImage image, uint64 allocId); [CallingConvention(KTX_APIENTRYP)] public function VkResult ktxVulkanTexture_subAllocatorMemoryMapFuncPtr(uint64 allocId, uint64 pageNumber, VkDeviceSize* mapLength, void** dataPtr); [CallingConvention(KTX_APIENTRYP)] public function void ktxVulkanTexture_subAllocatorMemoryUnmapFuncPtr(uint64 allocId, uint64 pageNumber); [CallingConvention(KTX_APIENTRYP)] public function void ktxVulkanTexture_subAllocatorFreeMemFuncPtr(uint64 allocId); /** * @class ktxVulkanTexture_subAllocatorCallbacks * @~English * @brief Struct that contains all callbacks necessary for suballocation. * * These pointers must all be provided for upload or destroy to occur using suballocator callbacks. */ [CRepr] public struct ktxVulkanTexture_subAllocatorCallbacks { public ktxVulkanTexture_subAllocatorAllocMemFuncPtr allocMemFuncPtr; /*!< Pointer to the memory procurement function. Can suballocate one or more pages. */ public ktxVulkanTexture_subAllocatorBindBufferFuncPtr bindBufferFuncPtr; /*!< Pointer to bind-buffer-to-suballocation(s) function. */ public ktxVulkanTexture_subAllocatorBindImageFuncPtr bindImageFuncPtr; /*!< Pointer to bind-image-to-suballocation(s) function. */ public ktxVulkanTexture_subAllocatorMemoryMapFuncPtr memoryMapFuncPtr; /*!< Pointer to function for mapping the memory of a specific page. */ public ktxVulkanTexture_subAllocatorMemoryUnmapFuncPtr memoryUnmapFuncPtr; /*!< Pointer to function for unmapping the memory of a specific page. */ public ktxVulkanTexture_subAllocatorFreeMemFuncPtr freeMemFuncPtr; /*!< Pointer to the free procurement function. */ } extension ktxVulkanTexture { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanTexture_Destruct_WithSuballocator")] public static extern ktx_error_code_e Destruct_WithSuballocator(ktxVulkanTexture* This, VkDevice device, VkAllocationCallbacks* pAllocator, ktxVulkanTexture_subAllocatorCallbacks* subAllocatorCallbacks); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanTexture_Destruct")] public static extern void Destruct(ktxVulkanTexture* This, VkDevice device, VkAllocationCallbacks* pAllocator); } /** * @class ktxVulkanDeviceInfo * @~English * @brief Struct for passing information about the Vulkan device on which * to create images to the texture image loading functions. * * Avoids passing a large number of parameters to each loading function. * Use of ktxVulkanDeviceInfo_create() or ktxVulkanDeviceInfo_construct() to * populate this structure is highly recommended. * * @code ktxVulkanDeviceInfo vdi; ktxVulkanTexture texture; vdi = ktxVulkanDeviceInfo_create(physicalDevice, device, queue, cmdPool, &allocator); ktxLoadVkTextureN("texture_1.ktx", vdi, &texture, NULL, NULL); // ... ktxLoadVkTextureN("texture_n.ktx", vdi, &texture, NULL, NULL); ktxVulkanDeviceInfo_destroy(vdi); * @endcode */ [CRepr] public struct ktxVulkanDeviceInfo { public VkInstance instance; /*!< Instance used to communicate with vulkan. */ public VkPhysicalDevice physicalDevice; /*!< Handle of the physical device. */ public VkDevice device; /*!< Handle of the logical device. */ public VkQueue queue; /*!< Handle to the queue to which to submit commands. */ public VkCommandBuffer cmdBuffer; /*!< Handle of the cmdBuffer to use. */ /** Handle of the command pool from which to allocate the command buffer. */ public VkCommandPool cmdPool; /** Pointer to the allocator to use for the command buffer and created * images. */ public VkAllocationCallbacks* pAllocator; /** Memory properties of the Vulkan physical device. */ public VkPhysicalDeviceMemoryProperties deviceMemoryProperties; /** The functions needed to operate functions */ public ktxVulkanFunctions vkFuncs; } extension ktxVulkanDeviceInfo { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanDeviceInfo_CreateEx")] public static extern ktxVulkanDeviceInfo* CreateEx(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device, VkQueue queue, VkCommandPool cmdPool, VkAllocationCallbacks* pAllocator, ktxVulkanFunctions* pFunctions); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanDeviceInfo_Create")] public static extern ktxVulkanDeviceInfo* Create(VkPhysicalDevice physicalDevice, VkDevice device, VkQueue queue, VkCommandPool cmdPool, VkAllocationCallbacks* pAllocator); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanDeviceInfo_Construct")] public static extern ktx_error_code_e Construct(ktxVulkanDeviceInfo* This, VkPhysicalDevice physicalDevice, VkDevice device, VkQueue queue, VkCommandPool cmdPool, VkAllocationCallbacks* pAllocator); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanDeviceInfo_ConstructEx")] public static extern ktx_error_code_e ConstructEx(ktxVulkanDeviceInfo* This, VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device, VkQueue queue, VkCommandPool cmdPool, VkAllocationCallbacks* pAllocator, ktxVulkanFunctions* pFunctions); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanDeviceInfo_Destruct")] public static extern void Destruct(ktxVulkanDeviceInfo* This); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxVulkanDeviceInfo_Destroy")] public static extern void Destroy(ktxVulkanDeviceInfo* This); } extension ktxTexture { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture_VkUploadEx_WithSuballocator")] public static extern ktx_error_code_e VkUploadEx_WithSuballocator(ktxTexture* This, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture, VkImageTiling tiling, VkImageUsageFlags usageFlags, VkImageLayout finalLayout, ktxVulkanTexture_subAllocatorCallbacks* subAllocatorCallbacks); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture_VkUploadEx")] public static extern ktx_error_code_e VkUploadEx(ktxTexture* This, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture, VkImageTiling tiling, VkImageUsageFlags usageFlags, VkImageLayout finalLayout); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture_VkUpload")] public static extern ktx_error_code_e VkUpload(ktxTexture* texture, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture); } extension ktxTexture1 { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture1_VkUploadEx_WithSuballocator")] public static extern ktx_error_code_e VkUploadEx_WithSuballocator(ktxTexture1* This, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture, VkImageTiling tiling, VkImageUsageFlags usageFlags, VkImageLayout finalLayout, ktxVulkanTexture_subAllocatorCallbacks* subAllocatorCallbacks); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture1_VkUploadEx")] public static extern ktx_error_code_e VkUploadEx(ktxTexture1* This, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture, VkImageTiling tiling, VkImageUsageFlags usageFlags, VkImageLayout finalLayout); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture1_VkUpload")] public static extern ktx_error_code_e VkUpload(ktxTexture1* texture, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture); } extension ktxTexture2 { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture2_VkUploadEx_WithSuballocator")] public static extern ktx_error_code_e VkUploadEx_WithSuballocator(ktxTexture2* This, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture, VkImageTiling tiling, VkImageUsageFlags usageFlags, VkImageLayout finalLayout, ktxVulkanTexture_subAllocatorCallbacks* subAllocatorCallbacks); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture2_VkUploadEx")] public static extern ktx_error_code_e VkUploadEx(ktxTexture2* This, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture, VkImageTiling tiling, VkImageUsageFlags usageFlags, VkImageLayout finalLayout); [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture2_VkUpload")] public static extern ktx_error_code_e VkUpload(ktxTexture2* texture, ktxVulkanDeviceInfo* vdi, ktxVulkanTexture* vkTexture); } extension ktxTexture { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture_GetVkFormat")] public static extern VkFormat GetVkFormat(ktxTexture* This); } extension ktxTexture1 { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture1_GetVkFormat")] public static extern VkFormat GetVkFormat(ktxTexture1* This); } extension ktxTexture2 { [CallingConvention(KTX_APIENTRYP)] [LinkName("ktxTexture2_GetVkFormat")] public static extern VkFormat GetVkFormat(ktxTexture2* This); } /* KTX_H_A55A6F00956F42F3A137C11929827FE1 */