fixing define option to disable all KHR functions

This commit is contained in:
2024-09-12 23:38:46 +02:00
parent 6333bc667c
commit 64565bbff4

147
kvf.h
View File

@@ -276,23 +276,25 @@ typedef struct
size_t sets_pools_size; size_t sets_pools_size;
} __KvfDevice; } __KvfDevice;
typedef struct #ifndef KVF_NO_KHR
{ typedef struct
VkSurfaceCapabilitiesKHR capabilities; {
VkSurfaceFormatKHR* formats; VkSurfaceCapabilitiesKHR capabilities;
VkPresentModeKHR* presentModes; VkSurfaceFormatKHR* formats;
uint32_t formats_count; VkPresentModeKHR* presentModes;
uint32_t presentModes_count; uint32_t formats_count;
} __KvfSwapchainSupportInternal; uint32_t presentModes_count;
} __KvfSwapchainSupportInternal;
typedef struct typedef struct
{ {
__KvfSwapchainSupportInternal support; __KvfSwapchainSupportInternal support;
VkSwapchainKHR swapchain; VkSwapchainKHR swapchain;
VkExtent2D images_extent; VkExtent2D images_extent;
VkFormat images_format; VkFormat images_format;
uint32_t images_count; uint32_t images_count;
} __KvfSwapchain; } __KvfSwapchain;
#endif
typedef struct typedef struct
{ {
@@ -318,9 +320,11 @@ __KvfDevice* __kvf_internal_devices = NULL;
size_t __kvf_internal_devices_size = 0; size_t __kvf_internal_devices_size = 0;
size_t __kvf_internal_devices_capacity = 0; size_t __kvf_internal_devices_capacity = 0;
__KvfSwapchain* __kvf_internal_swapchains = NULL; #ifndef KVF_NO_KHR
size_t __kvf_internal_swapchains_size = 0; __KvfSwapchain* __kvf_internal_swapchains = NULL;
size_t __kvf_internal_swapchains_capacity = 0; size_t __kvf_internal_swapchains_size = 0;
size_t __kvf_internal_swapchains_capacity = 0;
#endif
__KvfFramebuffer* __kvf_internal_framebuffers = NULL; __KvfFramebuffer* __kvf_internal_framebuffers = NULL;
size_t __kvf_internal_framebuffers_size = 0; size_t __kvf_internal_framebuffers_size = 0;
@@ -485,58 +489,60 @@ __KvfDevice* __kvfGetKvfDeviceFromVkDevice(VkDevice device)
return NULL; return NULL;
} }
void __kvfAddSwapchainToArray(VkSwapchainKHR swapchain, __KvfSwapchainSupportInternal support, VkFormat format, uint32_t images_count, VkExtent2D extent) #ifndef KVF_NO_KHR
{ void __kvfAddSwapchainToArray(VkSwapchainKHR swapchain, __KvfSwapchainSupportInternal support, VkFormat format, uint32_t images_count, VkExtent2D extent)
KVF_ASSERT(swapchain != VK_NULL_HANDLE);
if(__kvf_internal_swapchains_size == __kvf_internal_swapchains_capacity)
{ {
// Resize the dynamic array if necessary KVF_ASSERT(swapchain != VK_NULL_HANDLE);
__kvf_internal_swapchains_capacity += 2; if(__kvf_internal_swapchains_size == __kvf_internal_swapchains_capacity)
__kvf_internal_swapchains = (__KvfSwapchain*)KVF_REALLOC(__kvf_internal_swapchains, __kvf_internal_swapchains_capacity * sizeof(__KvfSwapchain));
}
__kvf_internal_swapchains[__kvf_internal_swapchains_size].swapchain = swapchain;
__kvf_internal_swapchains[__kvf_internal_swapchains_size].support = support;
__kvf_internal_swapchains[__kvf_internal_swapchains_size].images_format = format;
__kvf_internal_swapchains[__kvf_internal_swapchains_size].images_count = images_count;
__kvf_internal_swapchains[__kvf_internal_swapchains_size].images_extent = extent;
__kvf_internal_swapchains_size++;
}
void __kvfDestroySwapchain(VkDevice device, VkSwapchainKHR swapchain)
{
KVF_ASSERT(swapchain != VK_NULL_HANDLE);
KVF_ASSERT(device != VK_NULL_HANDLE);
for(size_t i = 0; i < __kvf_internal_swapchains_size; i++)
{
if(__kvf_internal_swapchains[i].swapchain == swapchain)
{ {
vkDestroySwapchainKHR(device, swapchain, NULL); // Resize the dynamic array if necessary
// Shift the elements to fill the gap __kvf_internal_swapchains_capacity += 2;
for(size_t j = i; j < __kvf_internal_swapchains_size - 1; j++) __kvf_internal_swapchains = (__KvfSwapchain*)KVF_REALLOC(__kvf_internal_swapchains, __kvf_internal_swapchains_capacity * sizeof(__KvfSwapchain));
__kvf_internal_swapchains[j] = __kvf_internal_swapchains[j + 1];
__kvf_internal_swapchains_size--;
if(__kvf_internal_swapchains_size == 0)
{
KVF_FREE(__kvf_internal_swapchains);
__kvf_internal_swapchains_capacity = 0;
}
return;
} }
}
}
__KvfSwapchain* __kvfGetKvfSwapchainFromVkSwapchainKHR(VkSwapchainKHR swapchain) __kvf_internal_swapchains[__kvf_internal_swapchains_size].swapchain = swapchain;
{ __kvf_internal_swapchains[__kvf_internal_swapchains_size].support = support;
KVF_ASSERT(swapchain != VK_NULL_HANDLE); __kvf_internal_swapchains[__kvf_internal_swapchains_size].images_format = format;
for(size_t i = 0; i < __kvf_internal_swapchains_size; i++) __kvf_internal_swapchains[__kvf_internal_swapchains_size].images_count = images_count;
{ __kvf_internal_swapchains[__kvf_internal_swapchains_size].images_extent = extent;
if(__kvf_internal_swapchains[i].swapchain == swapchain) __kvf_internal_swapchains_size++;
return &__kvf_internal_swapchains[i];
} }
return NULL;
} void __kvfDestroySwapchain(VkDevice device, VkSwapchainKHR swapchain)
{
KVF_ASSERT(swapchain != VK_NULL_HANDLE);
KVF_ASSERT(device != VK_NULL_HANDLE);
for(size_t i = 0; i < __kvf_internal_swapchains_size; i++)
{
if(__kvf_internal_swapchains[i].swapchain == swapchain)
{
vkDestroySwapchainKHR(device, swapchain, NULL);
// Shift the elements to fill the gap
for(size_t j = i; j < __kvf_internal_swapchains_size - 1; j++)
__kvf_internal_swapchains[j] = __kvf_internal_swapchains[j + 1];
__kvf_internal_swapchains_size--;
if(__kvf_internal_swapchains_size == 0)
{
KVF_FREE(__kvf_internal_swapchains);
__kvf_internal_swapchains_capacity = 0;
}
return;
}
}
}
__KvfSwapchain* __kvfGetKvfSwapchainFromVkSwapchainKHR(VkSwapchainKHR swapchain)
{
KVF_ASSERT(swapchain != VK_NULL_HANDLE);
for(size_t i = 0; i < __kvf_internal_swapchains_size; i++)
{
if(__kvf_internal_swapchains[i].swapchain == swapchain)
return &__kvf_internal_swapchains[i];
}
return NULL;
}
#endif
void __kvfAddFramebufferToArray(VkFramebuffer framebuffer, VkExtent2D extent) void __kvfAddFramebufferToArray(VkFramebuffer framebuffer, VkExtent2D extent)
{ {
@@ -1137,8 +1143,8 @@ __KvfQueueFamilies __kvfFindQueueFamilies(VkPhysicalDevice physical, VkSurfaceKH
queues.compute = i; queues.compute = i;
if(queue_families[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) if(queue_families[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)
queues.graphics = i; queues.graphics = i;
VkBool32 present_support = false;
#ifndef KVF_NO_KHR #ifndef KVF_NO_KHR
VkBool32 present_support = false;
if(surface != VK_NULL_HANDLE) if(surface != VK_NULL_HANDLE)
{ {
vkGetPhysicalDeviceSurfaceSupportKHR(physical, i, surface, &present_support); vkGetPhysicalDeviceSurfaceSupportKHR(physical, i, surface, &present_support);
@@ -1147,9 +1153,12 @@ __KvfQueueFamilies __kvfFindQueueFamilies(VkPhysicalDevice physical, VkSurfaceKH
if(queues.graphics != -1 && queues.present != -1 && queues.compute != -1) if(queues.graphics != -1 && queues.present != -1 && queues.compute != -1)
break; break;
} }
else if(queues.graphics != -1 && queues.compute != -1)
break;
#else
if(queues.graphics != -1 && queues.compute != -1)
break;
#endif #endif
else if(queues.graphics != -1 && queues.compute != -1)
break;
} }
KVF_FREE(queue_families); KVF_FREE(queue_families);
return queues; return queues;