enable descriptor pool overallocation if supported

This commit is contained in:
Gregory Wells
2025-06-16 10:04:11 -04:00
parent 2b00271aee
commit b12cc38386
3 changed files with 33 additions and 10 deletions

View File

@@ -1,16 +1,39 @@
#include "vulkan_device_extensions.h" #include "vulkan_device_extensions.h"
#include "utils/gryphn_bool.h"
#include "stdlib.h" #include "stdlib.h"
#include "string.h"
#include "stdio.h"
const char* *vkGetGryphnDeviceExtensions(uint32_t* count) { const char* *vkGetGryphnDeviceExtensions(uint32_t* outCount, VkPhysicalDevice device) {
const char* *extensiosns = malloc(sizeof(const char*)); uint32_t count = 1;
extensiosns[0] = VK_KHR_SWAPCHAIN_EXTENSION_NAME; const char* *extensiosns = malloc(sizeof(const char*) * count);
extensiosns[count-1] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
*count = 1;
#ifdef GN_PLATFORM_MACOS #ifdef GN_PLATFORM_MACOS
*count++; count++;
extensiosns = realloc(sizeof(const char*), *count); extensiosns = realloc(extensiosns, sizeof(const char*) * count);
extensiosns[1] = "VK_KHR_portability_subset"; extensiosns[(count - 1)] = "VK_KHR_portability_subset";
#endif #endif
uint32_t extensionCount = 0;
vkEnumerateDeviceExtensionProperties(device, NULL, &extensionCount, NULL);
VkExtensionProperties* vkExtensions = malloc(sizeof(VkExtensionProperties) * extensionCount);
vkEnumerateDeviceExtensionProperties(device, NULL, &extensionCount, vkExtensions);
gnBool supportsDescriptorPoolOverallocation = gnFalse;
for (uint32_t i = 0; i < extensionCount; i++) {
if (strcmp(VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME, vkExtensions[i].extensionName) == 0) {
supportsDescriptorPoolOverallocation = gnTrue;
break;
}
}
free(vkExtensions);
count++;
extensiosns = realloc(extensiosns, sizeof(const char*) * count);
extensiosns[(count - 1)] = VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME;
*outCount = count;
return extensiosns; return extensiosns;
} }

View File

@@ -1,4 +1,4 @@
#pragma once #pragma once
#include <vulkan/vulkan.h> #include <vulkan/vulkan.h>
const char* *vkGetGryphnDeviceExtensions(uint32_t* count); const char* *vkGetGryphnDeviceExtensions(uint32_t* count, VkPhysicalDevice device);

View File

@@ -5,7 +5,7 @@
#include "core/instance/gryphn_instance.h" #include "core/instance/gryphn_instance.h"
#include "commands/command_buffer/vulkan_command_buffer.h" #include "commands/command_buffer/vulkan_command_buffer.h"
gnReturnCode gnCreateOutputDeviceFn(gnOutputDeviceHandle outputDevice, gnInstanceHandle instance, struct gnOutputDeviceInfo_t deviceInfo) { gnReturnCode gnCreateOutputDeviceFn(gnOutputDeviceHandle outputDevice, gnInstanceHandle instance, gnOutputDeviceInfo deviceInfo) {
outputDevice->outputDevice = malloc(sizeof(gnPlatformOutputDevice)); outputDevice->outputDevice = malloc(sizeof(gnPlatformOutputDevice));
VkDeviceQueueCreateInfo* queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.queueInfoCount); VkDeviceQueueCreateInfo* queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.queueInfoCount);
@@ -30,7 +30,7 @@ gnReturnCode gnCreateOutputDeviceFn(gnOutputDeviceHandle outputDevice, gnInstanc
.pQueueCreateInfos = queueCreateInfos, .pQueueCreateInfos = queueCreateInfos,
.pEnabledFeatures = &deviceFeatures .pEnabledFeatures = &deviceFeatures
}; };
deviceCreateInfo.ppEnabledExtensionNames = vkGetGryphnDeviceExtensions(&deviceCreateInfo.enabledExtensionCount); deviceCreateInfo.ppEnabledExtensionNames = vkGetGryphnDeviceExtensions(&deviceCreateInfo.enabledExtensionCount, deviceInfo.physicalDevice.physicalDevice->device);
if (instance->debugger == NULL) if (instance->debugger == NULL)
deviceCreateInfo.enabledLayerCount = 0; deviceCreateInfo.enabledLayerCount = 0;