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 "utils/gryphn_bool.h"
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
const char* *vkGetGryphnDeviceExtensions(uint32_t* count) {
const char* *extensiosns = malloc(sizeof(const char*));
extensiosns[0] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
const char* *vkGetGryphnDeviceExtensions(uint32_t* outCount, VkPhysicalDevice device) {
uint32_t count = 1;
const char* *extensiosns = malloc(sizeof(const char*) * count);
extensiosns[count-1] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
*count = 1;
#ifdef GN_PLATFORM_MACOS
*count++;
extensiosns = realloc(sizeof(const char*), *count);
extensiosns[1] = "VK_KHR_portability_subset";
count++;
extensiosns = realloc(extensiosns, sizeof(const char*) * count);
extensiosns[(count - 1)] = "VK_KHR_portability_subset";
#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;
}

View File

@@ -1,4 +1,4 @@
#pragma once
#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 "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));
VkDeviceQueueCreateInfo* queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.queueInfoCount);
@@ -30,7 +30,7 @@ gnReturnCode gnCreateOutputDeviceFn(gnOutputDeviceHandle outputDevice, gnInstanc
.pQueueCreateInfos = queueCreateInfos,
.pEnabledFeatures = &deviceFeatures
};
deviceCreateInfo.ppEnabledExtensionNames = vkGetGryphnDeviceExtensions(&deviceCreateInfo.enabledExtensionCount);
deviceCreateInfo.ppEnabledExtensionNames = vkGetGryphnDeviceExtensions(&deviceCreateInfo.enabledExtensionCount, deviceInfo.physicalDevice.physicalDevice->device);
if (instance->debugger == NULL)
deviceCreateInfo.enabledLayerCount = 0;