171 lines
6.2 KiB
C
171 lines
6.2 KiB
C
/* -*- tab-width: 4; -*- */
|
|
/* vi: set sw=2 ts=4 expandtab: */
|
|
|
|
#ifndef KTX_H_C54B42AEE39611E68E1E4FF8C51D1C66
|
|
#define KTX_H_C54B42AEE39611E68E1E4FF8C51D1C66
|
|
|
|
/*
|
|
* ©2017 Mark Callow.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
/**
|
|
* @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. The alternative is duplicating
|
|
* unattractively large parts of it.
|
|
*
|
|
* @author Mark Callow, Edgewise Consulting
|
|
*
|
|
* $Date$
|
|
*/
|
|
|
|
#include <ktx.h>
|
|
#include <vulkan/vulkan.h>
|
|
|
|
#if 0
|
|
/* Avoid Vulkan include file */
|
|
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
|
|
|
|
#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
|
|
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
|
|
#else
|
|
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
|
|
#endif
|
|
|
|
VK_DEFINE_HANDLE(VkPhysicalDevice)
|
|
VK_DEFINE_HANDLE(VkDevice)
|
|
VK_DEFINE_HANDLE(VkQueue)
|
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
|
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
|
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
|
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
|
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @class ktxVulkanTexture
|
|
* @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.
|
|
*/
|
|
typedef struct ktxVulkanTexture
|
|
{
|
|
VkImage image; /*!< Handle to the Vulkan image created by the loader. */
|
|
VkFormat imageFormat; /*!< Format of the image data. */
|
|
VkImageLayout imageLayout; /*!< Layout of the created image. Has the same
|
|
value as @p layout parameter passed to the
|
|
loader. */
|
|
VkDeviceMemory deviceMemory; /*!< The memory allocated for the image on
|
|
the Vulkan device. */
|
|
VkImageViewType viewType; /*!< ViewType corresponding to @p image. Reflects
|
|
the dimensionality, cubeness and arrayness
|
|
of the image. */
|
|
uint32_t width; /*!< The width of the image. */
|
|
uint32_t height; /*!< The height of the image. */
|
|
uint32_t depth; /*!< The depth of the image. */
|
|
uint32_t levelCount; /*!< The number of MIP levels in the image. */
|
|
uint32_t layerCount; /*!< The number of array layers in the image. */
|
|
} ktxVulkanTexture;
|
|
|
|
void
|
|
ktxVulkanTexture_Destruct(ktxVulkanTexture* This, VkDevice device,
|
|
const VkAllocationCallbacks* pAllocator);
|
|
|
|
/**
|
|
* @class ktxVulkanDeviceInfo
|
|
* @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
|
|
*/
|
|
typedef struct ktxVulkanDeviceInfo {
|
|
VkPhysicalDevice physicalDevice; /*!< Handle of the physical device. */
|
|
VkDevice device; /*!< Handle of the logical device. */
|
|
VkQueue queue; /*!< Handle to the queue to which to submit commands. */
|
|
VkCommandBuffer cmdBuffer; /*!< Handle of the cmdBuffer to use. */
|
|
/** Handle of the command pool from which to allocate the command buffer. */
|
|
VkCommandPool cmdPool;
|
|
/** Pointer to the allocator to use for the command buffer and created
|
|
* images.
|
|
*/
|
|
const VkAllocationCallbacks* pAllocator;
|
|
/** Memory properties of the Vulkan physical device. */
|
|
VkPhysicalDeviceMemoryProperties deviceMemoryProperties;
|
|
} ktxVulkanDeviceInfo;
|
|
|
|
ktxVulkanDeviceInfo*
|
|
ktxVulkanDeviceInfo_Create(VkPhysicalDevice physicalDevice, VkDevice device,
|
|
VkQueue queue, VkCommandPool cmdPool,
|
|
const VkAllocationCallbacks* pAllocator);
|
|
KTX_error_code
|
|
ktxVulkanDeviceInfo_Construct(ktxVulkanDeviceInfo* This,
|
|
VkPhysicalDevice physicalDevice, VkDevice device,
|
|
VkQueue queue, VkCommandPool cmdPool,
|
|
const VkAllocationCallbacks* pAllocator);
|
|
void
|
|
ktxVulkanDeviceInfo_Destruct(ktxVulkanDeviceInfo* This);
|
|
void
|
|
ktxVulkanDeviceInfo_Destroy(ktxVulkanDeviceInfo* This);
|
|
|
|
|
|
KTX_error_code
|
|
ktxTexture_VkUploadEx(ktxTexture* This, ktxVulkanDeviceInfo* vdi,
|
|
ktxVulkanTexture* vkTexture,
|
|
VkImageTiling tiling,
|
|
VkImageUsageFlags usageFlags,
|
|
VkImageLayout layout);
|
|
|
|
KTX_error_code
|
|
ktxTexture_VkUpload(ktxTexture* This, ktxVulkanDeviceInfo* vdi,
|
|
ktxVulkanTexture *vkTexture);
|
|
|
|
VkFormat
|
|
ktxTexture_GetVkFormat(ktxTexture* This);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* KTX_H_A55A6F00956F42F3A137C11929827FE1 */
|