From d0dd195054a656e67797982d835efadfbcedf6f2 Mon Sep 17 00:00:00 2001 From: Robert Konrad Date: Sat, 15 Feb 2025 15:59:46 +0100 Subject: [PATCH] Create Vulkan textures --- .../Vulkan/Sources/kope/vulkan/device.c | 86 ++++++++- .../Vulkan/Sources/kope/vulkan/pipeline.c | 91 ---------- .../Sources/kope/vulkan/texture_structs.h | 5 + .../Vulkan/Sources/kope/vulkan/vulkanunit.c | 163 ++++++++++-------- .../Vulkan/Sources/kope/vulkan/vulkanunit.h | 80 +++++++++ Sources/kope/graphics5/textureformat.h | 1 + 6 files changed, 260 insertions(+), 166 deletions(-) diff --git a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/device.c b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/device.c index 1448bbb94..29966df81 100644 --- a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/device.c +++ b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/device.c @@ -845,7 +845,91 @@ void kope_vulkan_device_create_command_list(kope_g5_device *device, kope_g5_comm vkBeginCommandBuffer(list->vulkan.command_buffer, &begin_info); } -void kope_vulkan_device_create_texture(kope_g5_device *device, const kope_g5_texture_parameters *parameters, kope_g5_texture *texture) {} +void kope_vulkan_device_create_texture(kope_g5_device *device, const kope_g5_texture_parameters *parameters, kope_g5_texture *texture) { + VkFormat format = convert_format(parameters->format); + + VkFormatProperties format_properties; + vkGetPhysicalDeviceFormatProperties(gpu, format, &format_properties); + + assert((format_properties.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) != 0); + + texture->vulkan.width = parameters->width; + texture->vulkan.height = parameters->height; + + VkImageCreateInfo image_create_info = { + .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, + .pNext = NULL, + .imageType = VK_IMAGE_TYPE_2D, + .format = format, + .extent.width = parameters->width, + .extent.height = parameters->height, + .extent.depth = 1, + .mipLevels = 1, + .arrayLayers = 1, + .samples = VK_SAMPLE_COUNT_1_BIT, + .tiling = VK_IMAGE_TILING_OPTIMAL, + .usage = VK_IMAGE_USAGE_SAMPLED_BIT, + .flags = 0, + .initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED, + }; + + VkMemoryAllocateInfo memory_allocate_info = { + .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, + .pNext = NULL, + .allocationSize = 0, + .memoryTypeIndex = 0, + }; + + VkResult result = vkCreateImage(device->vulkan.device, &image_create_info, NULL, &texture->vulkan.image); + assert(result == VK_SUCCESS); + + VkMemoryRequirements memory_requirements; + vkGetImageMemoryRequirements(device->vulkan.device, texture->vulkan.image, &memory_requirements); + + texture->vulkan.device_size = memory_allocate_info.allocationSize = memory_requirements.size; + + bool memory_type_found = + memory_type_from_properties(device, memory_requirements.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &memory_allocate_info.memoryTypeIndex); + assert(memory_type_found); + + result = vkAllocateMemory(device->vulkan.device, &memory_allocate_info, NULL, &texture->vulkan.device_memory); + assert(result == VK_SUCCESS); + + result = vkBindImageMemory(device->vulkan.device, texture->vulkan.image, texture->vulkan.device_memory, 0); + assert(result == VK_SUCCESS); + + VkImageSubresource subresource = { + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .mipLevel = 0, + .arrayLayer = 0, + }; + + VkSubresourceLayout layout; + vkGetImageSubresourceLayout(device->vulkan.device, texture->vulkan.image, &subresource, &layout); + + texture->vulkan.row_pitch = layout.rowPitch; + + VkImageViewCreateInfo view_create_info = { + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + .pNext = NULL, + .image = texture->vulkan.image, + .viewType = VK_IMAGE_VIEW_TYPE_2D, + .format = format, + .components.r = VK_COMPONENT_SWIZZLE_R, + .components.g = VK_COMPONENT_SWIZZLE_G, + .components.b = VK_COMPONENT_SWIZZLE_B, + .components.a = VK_COMPONENT_SWIZZLE_A, + .subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .subresourceRange.baseMipLevel = 0, + .subresourceRange.levelCount = 1, + .subresourceRange.baseArrayLayer = 0, + .subresourceRange.layerCount = 1, + .flags = 0, + }; + + result = vkCreateImageView(device->vulkan.device, &view_create_info, NULL, &texture->vulkan.image_view); + assert(result == VK_SUCCESS); +} kope_g5_texture *kope_vulkan_device_get_framebuffer(kope_g5_device *device) { VkResult result = vulkan_AcquireNextImageKHR(device->vulkan.device, swapchain, UINT64_MAX, *get_next_framebuffer_available_semaphore(), VK_NULL_HANDLE, diff --git a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/pipeline.c b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/pipeline.c index 936db0a93..9a5574804 100644 --- a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/pipeline.c +++ b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/pipeline.c @@ -3,97 +3,6 @@ #include -static VkFormat convert_format(kope_g5_texture_format format) { - switch (format) { - case KOPE_G5_TEXTURE_FORMAT_R8_UNORM: - return VK_FORMAT_R8_UNORM; - case KOPE_G5_TEXTURE_FORMAT_R8_SNORM: - return VK_FORMAT_R8_SNORM; - case KOPE_G5_TEXTURE_FORMAT_R8_UINT: - return VK_FORMAT_R8_UINT; - case KOPE_G5_TEXTURE_FORMAT_R8_SINT: - return VK_FORMAT_R8_SINT; - case KOPE_G5_TEXTURE_FORMAT_R16_UINT: - return VK_FORMAT_R16_UINT; - case KOPE_G5_TEXTURE_FORMAT_R16_SINT: - return VK_FORMAT_R16_SINT; - case KOPE_G5_TEXTURE_FORMAT_R16_FLOAT: - return VK_FORMAT_R16_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_RG8_UNORM: - return VK_FORMAT_R8G8_UNORM; - case KOPE_G5_TEXTURE_FORMAT_RG8_SNORM: - return VK_FORMAT_R8G8_SNORM; - case KOPE_G5_TEXTURE_FORMAT_RG8_UINT: - return VK_FORMAT_R8G8_UINT; - case KOPE_G5_TEXTURE_FORMAT_RG8_SINT: - return VK_FORMAT_R8G8_SINT; - case KOPE_G5_TEXTURE_FORMAT_R32_UINT: - return VK_FORMAT_R32_UINT; - case KOPE_G5_TEXTURE_FORMAT_R32_SINT: - return VK_FORMAT_R32_SINT; - case KOPE_G5_TEXTURE_FORMAT_R32_FLOAT: - return VK_FORMAT_R32_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_RG16_UINT: - return VK_FORMAT_R16G16_UINT; - case KOPE_G5_TEXTURE_FORMAT_RG16_SINT: - return VK_FORMAT_R16G16_SINT; - case KOPE_G5_TEXTURE_FORMAT_RG16_FLOAT: - return VK_FORMAT_R16G16_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_RGBA8_UNORM: - return VK_FORMAT_R8G8B8A8_UNORM; - case KOPE_G5_TEXTURE_FORMAT_RGBA8_UNORM_SRGB: - return VK_FORMAT_R8G8B8A8_SRGB; - case KOPE_G5_TEXTURE_FORMAT_RGBA8_SNORM: - return VK_FORMAT_R8G8B8A8_SNORM; - case KOPE_G5_TEXTURE_FORMAT_RGBA8_UINT: - return VK_FORMAT_R8G8B8A8_UINT; - case KOPE_G5_TEXTURE_FORMAT_RGBA8_SINT: - return VK_FORMAT_R8G8B8A8_SINT; - case KOPE_G5_TEXTURE_FORMAT_BGRA8_UNORM: - return VK_FORMAT_B8G8R8A8_UNORM; - case KOPE_G5_TEXTURE_FORMAT_BGRA8_UNORM_SRGB: - return VK_FORMAT_B8G8R8A8_SRGB; - case KOPE_G5_TEXTURE_FORMAT_RGB9E5U_FLOAT: - return VK_FORMAT_E5B9G9R9_UFLOAT_PACK32; - case KOPE_G5_TEXTURE_FORMAT_RGB10A2_UINT: - return VK_FORMAT_A2R10G10B10_UINT_PACK32; - case KOPE_G5_TEXTURE_FORMAT_RGB10A2_UNORM: - return VK_FORMAT_A2R10G10B10_UNORM_PACK32; - case KOPE_G5_TEXTURE_FORMAT_RG11B10U_FLOAT: - return VK_FORMAT_B10G11R11_UFLOAT_PACK32; - case KOPE_G5_TEXTURE_FORMAT_RG32_UINT: - return VK_FORMAT_R32G32_UINT; - case KOPE_G5_TEXTURE_FORMAT_RG32_SINT: - return VK_FORMAT_R32G32_SINT; - case KOPE_G5_TEXTURE_FORMAT_RG32_FLOAT: - return VK_FORMAT_R32G32_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_RGBA16_UINT: - return VK_FORMAT_R16G16B16A16_UINT; - case KOPE_G5_TEXTURE_FORMAT_RGBA16_SINT: - return VK_FORMAT_R16G16B16A16_SINT; - case KOPE_G5_TEXTURE_FORMAT_RGBA16_FLOAT: - VK_FORMAT_R16G16B16A16_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_RGBA32_UINT: - return VK_FORMAT_R32G32B32A32_UINT; - case KOPE_G5_TEXTURE_FORMAT_RGBA32_SINT: - return VK_FORMAT_R32G32B32A32_SINT; - case KOPE_G5_TEXTURE_FORMAT_RGBA32_FLOAT: - return VK_FORMAT_R32G32B32A32_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_DEPTH16_UNORM: - return VK_FORMAT_D16_UNORM; - case KOPE_G5_TEXTURE_FORMAT_DEPTH24PLUS_NOTHING8: - return VK_FORMAT_X8_D24_UNORM_PACK32; - case KOPE_G5_TEXTURE_FORMAT_DEPTH24PLUS_STENCIL8: - return VK_FORMAT_D24_UNORM_S8_UINT; - case KOPE_G5_TEXTURE_FORMAT_DEPTH32FLOAT: - return VK_FORMAT_D32_SFLOAT; - case KOPE_G5_TEXTURE_FORMAT_DEPTH32FLOAT_STENCIL8_NOTHING24: - return VK_FORMAT_D32_SFLOAT_S8_UINT; - } - - return VK_FORMAT_R8G8B8A8_UNORM; -} - static uint32_t vertex_attribute_size(kope_vulkan_vertex_format format) { switch (format) { case KOPE_VULKAN_VERTEX_FORMAT_UINT8X2: diff --git a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/texture_structs.h b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/texture_structs.h index 9c1e51a2c..d8d091fd8 100644 --- a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/texture_structs.h +++ b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/texture_structs.h @@ -8,6 +8,11 @@ extern "C" { typedef struct kope_vulkan_texture { uint32_t width; uint32_t height; + + VkDeviceMemory device_memory; + VkDeviceSize device_size; + VkDeviceSize row_pitch; + VkImage image; VkImageView image_view; } kope_vulkan_texture; diff --git a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.c b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.c index 547b33fb6..356e376cb 100644 --- a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.c +++ b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.c @@ -4,81 +4,96 @@ #include -#ifdef KINC_WINDOWS +static VkFormat convert_format(kope_g5_texture_format format) { + switch (format) { + case KOPE_G5_TEXTURE_FORMAT_R8_UNORM: + return VK_FORMAT_R8_UNORM; + case KOPE_G5_TEXTURE_FORMAT_R8_SNORM: + return VK_FORMAT_R8_SNORM; + case KOPE_G5_TEXTURE_FORMAT_R8_UINT: + return VK_FORMAT_R8_UINT; + case KOPE_G5_TEXTURE_FORMAT_R8_SINT: + return VK_FORMAT_R8_SINT; + case KOPE_G5_TEXTURE_FORMAT_R16_UINT: + return VK_FORMAT_R16_UINT; + case KOPE_G5_TEXTURE_FORMAT_R16_SINT: + return VK_FORMAT_R16_SINT; + case KOPE_G5_TEXTURE_FORMAT_R16_FLOAT: + return VK_FORMAT_R16_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_RG8_UNORM: + return VK_FORMAT_R8G8_UNORM; + case KOPE_G5_TEXTURE_FORMAT_RG8_SNORM: + return VK_FORMAT_R8G8_SNORM; + case KOPE_G5_TEXTURE_FORMAT_RG8_UINT: + return VK_FORMAT_R8G8_UINT; + case KOPE_G5_TEXTURE_FORMAT_RG8_SINT: + return VK_FORMAT_R8G8_SINT; + case KOPE_G5_TEXTURE_FORMAT_R32_UINT: + return VK_FORMAT_R32_UINT; + case KOPE_G5_TEXTURE_FORMAT_R32_SINT: + return VK_FORMAT_R32_SINT; + case KOPE_G5_TEXTURE_FORMAT_R32_FLOAT: + return VK_FORMAT_R32_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_RG16_UINT: + return VK_FORMAT_R16G16_UINT; + case KOPE_G5_TEXTURE_FORMAT_RG16_SINT: + return VK_FORMAT_R16G16_SINT; + case KOPE_G5_TEXTURE_FORMAT_RG16_FLOAT: + return VK_FORMAT_R16G16_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_RGBA8_UNORM: + return VK_FORMAT_R8G8B8A8_UNORM; + case KOPE_G5_TEXTURE_FORMAT_RGBA8_UNORM_SRGB: + return VK_FORMAT_R8G8B8A8_SRGB; + case KOPE_G5_TEXTURE_FORMAT_RGBA8_SNORM: + return VK_FORMAT_R8G8B8A8_SNORM; + case KOPE_G5_TEXTURE_FORMAT_RGBA8_UINT: + return VK_FORMAT_R8G8B8A8_UINT; + case KOPE_G5_TEXTURE_FORMAT_RGBA8_SINT: + return VK_FORMAT_R8G8B8A8_SINT; + case KOPE_G5_TEXTURE_FORMAT_BGRA8_UNORM: + return VK_FORMAT_B8G8R8A8_UNORM; + case KOPE_G5_TEXTURE_FORMAT_BGRA8_UNORM_SRGB: + return VK_FORMAT_B8G8R8A8_SRGB; + case KOPE_G5_TEXTURE_FORMAT_RGB9E5U_FLOAT: + return VK_FORMAT_E5B9G9R9_UFLOAT_PACK32; + case KOPE_G5_TEXTURE_FORMAT_RGB10A2_UINT: + return VK_FORMAT_A2R10G10B10_UINT_PACK32; + case KOPE_G5_TEXTURE_FORMAT_RGB10A2_UNORM: + return VK_FORMAT_A2R10G10B10_UNORM_PACK32; + case KOPE_G5_TEXTURE_FORMAT_RG11B10U_FLOAT: + return VK_FORMAT_B10G11R11_UFLOAT_PACK32; + case KOPE_G5_TEXTURE_FORMAT_RG32_UINT: + return VK_FORMAT_R32G32_UINT; + case KOPE_G5_TEXTURE_FORMAT_RG32_SINT: + return VK_FORMAT_R32G32_SINT; + case KOPE_G5_TEXTURE_FORMAT_RG32_FLOAT: + return VK_FORMAT_R32G32_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_RGBA16_UINT: + return VK_FORMAT_R16G16B16A16_UINT; + case KOPE_G5_TEXTURE_FORMAT_RGBA16_SINT: + return VK_FORMAT_R16G16B16A16_SINT; + case KOPE_G5_TEXTURE_FORMAT_RGBA16_FLOAT: + VK_FORMAT_R16G16B16A16_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_RGBA32_UINT: + return VK_FORMAT_R32G32B32A32_UINT; + case KOPE_G5_TEXTURE_FORMAT_RGBA32_SINT: + return VK_FORMAT_R32G32B32A32_SINT; + case KOPE_G5_TEXTURE_FORMAT_RGBA32_FLOAT: + return VK_FORMAT_R32G32B32A32_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_DEPTH16_UNORM: + return VK_FORMAT_D16_UNORM; + case KOPE_G5_TEXTURE_FORMAT_DEPTH24PLUS_NOTHING8: + return VK_FORMAT_X8_D24_UNORM_PACK32; + case KOPE_G5_TEXTURE_FORMAT_DEPTH24PLUS_STENCIL8: + return VK_FORMAT_D24_UNORM_S8_UINT; + case KOPE_G5_TEXTURE_FORMAT_DEPTH32FLOAT: + return VK_FORMAT_D32_SFLOAT; + case KOPE_G5_TEXTURE_FORMAT_DEPTH32FLOAT_STENCIL8_NOTHING24: + return VK_FORMAT_D32_SFLOAT_S8_UINT; + } -// Windows 7 -#define WINVER 0x0601 -#define _WIN32_WINNT 0x0601 - -#define NOATOM -#define NOCLIPBOARD -#define NOCOLOR -#define NOCOMM -#define NOCTLMGR -#define NODEFERWINDOWPOS -#define NODRAWTEXT -#define NOGDI -#define NOGDICAPMASKS -#define NOHELP -#define NOICONS -#define NOKANJI -#define NOKEYSTATES -// #define NOMB -#define NOMCX -#define NOMEMMGR -#define NOMENUS -#define NOMETAFILE -#define NOMINMAX -#define NOMSG -#define NONLS -#define NOOPENFILE -#define NOPROFILER -#define NORASTEROPS -#define NOSCROLL -#define NOSERVICE -#define NOSHOWWINDOW -#define NOSOUND -#define NOSYSCOMMANDS -#define NOSYSMETRICS -#define NOTEXTMETRIC -// #define NOUSER -#define NOVIRTUALKEYCODES -#define NOWH -#define NOWINMESSAGES -#define NOWINOFFSETS -#define NOWINSTYLES -#define WIN32_LEAN_AND_MEAN - -// avoids a warning in the Windows headers -#define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS 0 - -#endif - -#ifndef NDEBUG -#define VALIDATE -#endif - -#include - -static PFN_vkGetPhysicalDeviceSurfaceSupportKHR vulkan_GetPhysicalDeviceSurfaceSupportKHR = NULL; -static PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vulkan_GetPhysicalDeviceSurfaceCapabilitiesKHR = NULL; -static PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vulkan_GetPhysicalDeviceSurfaceFormatsKHR = NULL; -static PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vulkan_GetPhysicalDeviceSurfacePresentModesKHR = NULL; -static PFN_vkCreateSwapchainKHR vulkan_CreateSwapchainKHR = NULL; -static PFN_vkDestroySwapchainKHR vulkan_DestroySwapchainKHR = NULL; -static PFN_vkGetSwapchainImagesKHR vulkan_GetSwapchainImagesKHR = NULL; -static PFN_vkDestroySurfaceKHR vulkan_DestroySurfaceKHR = NULL; - -static PFN_vkCreateDebugUtilsMessengerEXT vulkan_CreateDebugUtilsMessengerEXT = NULL; -static PFN_vkDestroyDebugUtilsMessengerEXT vulkan_DestroyDebugUtilsMessengerEXT = NULL; - -static PFN_vkAcquireNextImageKHR vulkan_AcquireNextImageKHR = NULL; -static PFN_vkQueuePresentKHR vulkan_QueuePresentKHR = NULL; - -static PFN_vkDebugMarkerSetObjectNameEXT vulkan_DebugMarkerSetObjectNameEXT = NULL; -static PFN_vkCmdDebugMarkerBeginEXT vulkan_CmdDebugMarkerBeginEXT = NULL; -static PFN_vkCmdDebugMarkerEndEXT vulkan_CmdDebugMarkerEndEXT = NULL; -static PFN_vkCmdDebugMarkerInsertEXT vulkan_CmdDebugMarkerInsertEXT = NULL; + return VK_FORMAT_R8G8B8A8_UNORM; +} #include "buffer.c" #include "commandlist.c" diff --git a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.h b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.h index 06d779485..a9f0c65b9 100644 --- a/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.h +++ b/Backends/Graphics5/Vulkan/Sources/kope/vulkan/vulkanunit.h @@ -1,4 +1,84 @@ #ifndef KOPE_VULKAN_UNIT_HEADER #define KOPE_VULKAN_UNIT_HEADER +#include + +#ifdef KINC_WINDOWS + +// Windows 7 +#define WINVER 0x0601 +#define _WIN32_WINNT 0x0601 + +#define NOATOM +#define NOCLIPBOARD +#define NOCOLOR +#define NOCOMM +#define NOCTLMGR +#define NODEFERWINDOWPOS +#define NODRAWTEXT +#define NOGDI +#define NOGDICAPMASKS +#define NOHELP +#define NOICONS +#define NOKANJI +#define NOKEYSTATES +// #define NOMB +#define NOMCX +#define NOMEMMGR +#define NOMENUS +#define NOMETAFILE +#define NOMINMAX +#define NOMSG +#define NONLS +#define NOOPENFILE +#define NOPROFILER +#define NORASTEROPS +#define NOSCROLL +#define NOSERVICE +#define NOSHOWWINDOW +#define NOSOUND +#define NOSYSCOMMANDS +#define NOSYSMETRICS +#define NOTEXTMETRIC +// #define NOUSER +#define NOVIRTUALKEYCODES +#define NOWH +#define NOWINMESSAGES +#define NOWINOFFSETS +#define NOWINSTYLES +#define WIN32_LEAN_AND_MEAN + +// avoids a warning in the Windows headers +#define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS 0 + +#endif + +#ifndef NDEBUG +#define VALIDATE +#endif + +#include + +static PFN_vkGetPhysicalDeviceSurfaceSupportKHR vulkan_GetPhysicalDeviceSurfaceSupportKHR = NULL; +static PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vulkan_GetPhysicalDeviceSurfaceCapabilitiesKHR = NULL; +static PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vulkan_GetPhysicalDeviceSurfaceFormatsKHR = NULL; +static PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vulkan_GetPhysicalDeviceSurfacePresentModesKHR = NULL; +static PFN_vkCreateSwapchainKHR vulkan_CreateSwapchainKHR = NULL; +static PFN_vkDestroySwapchainKHR vulkan_DestroySwapchainKHR = NULL; +static PFN_vkGetSwapchainImagesKHR vulkan_GetSwapchainImagesKHR = NULL; +static PFN_vkDestroySurfaceKHR vulkan_DestroySurfaceKHR = NULL; + +static PFN_vkCreateDebugUtilsMessengerEXT vulkan_CreateDebugUtilsMessengerEXT = NULL; +static PFN_vkDestroyDebugUtilsMessengerEXT vulkan_DestroyDebugUtilsMessengerEXT = NULL; + +static PFN_vkAcquireNextImageKHR vulkan_AcquireNextImageKHR = NULL; +static PFN_vkQueuePresentKHR vulkan_QueuePresentKHR = NULL; + +static PFN_vkDebugMarkerSetObjectNameEXT vulkan_DebugMarkerSetObjectNameEXT = NULL; +static PFN_vkCmdDebugMarkerBeginEXT vulkan_CmdDebugMarkerBeginEXT = NULL; +static PFN_vkCmdDebugMarkerEndEXT vulkan_CmdDebugMarkerEndEXT = NULL; +static PFN_vkCmdDebugMarkerInsertEXT vulkan_CmdDebugMarkerInsertEXT = NULL; + +static VkFormat convert_format(kope_g5_texture_format format); + #endif diff --git a/Sources/kope/graphics5/textureformat.h b/Sources/kope/graphics5/textureformat.h index 3e168a757..b63727ff8 100644 --- a/Sources/kope/graphics5/textureformat.h +++ b/Sources/kope/graphics5/textureformat.h @@ -1,6 +1,7 @@ #ifndef KOPE_G5_TEXTUREFORMAT_HEADER #define KOPE_G5_TEXTUREFORMAT_HEADER +#include #include #ifdef __cplusplus