function to get extensions

This commit is contained in:
Gregory Wells
2025-06-16 09:47:03 -04:00
parent 1ea278772b
commit 2b00271aee
4 changed files with 33 additions and 20 deletions

View File

@@ -0,0 +1,16 @@
#include "vulkan_device_extensions.h"
#include "stdlib.h"
const char* *vkGetGryphnDeviceExtensions(uint32_t* count) {
const char* *extensiosns = malloc(sizeof(const char*));
extensiosns[0] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
*count = 1;
#ifdef GN_PLATFORM_MACOS
*count++;
extensiosns = realloc(sizeof(const char*), *count);
extensiosns[1] = "VK_KHR_portability_subset";
#endif
return extensiosns;
}

View File

@@ -1,15 +1,4 @@
#pragma once
#include <vulkan/vulkan.h>
#ifdef GN_PLATFORM_MACOS
static const uint32_t deviceExtensionCount = 2;
static const char* deviceExtensions[2] = {
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
"VK_KHR_portability_subset"
};
#else
static const uint32_t deviceExtensionCount = 1;
static const char* deviceExtensions[1] = {
VK_KHR_SWAPCHAIN_EXTENSION_NAME
};
#endif
const char* *vkGetGryphnDeviceExtensions(uint32_t* count);

View File

@@ -22,15 +22,15 @@ gnReturnCode gnCreateOutputDeviceFn(gnOutputDeviceHandle outputDevice, gnInstanc
.samplerAnisotropy = VK_TRUE
};
VkDeviceCreateInfo deviceCreateInfo = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.queueCreateInfoCount = deviceInfo.queueInfoCount,
.pQueueCreateInfos = queueCreateInfos,
.pEnabledFeatures = &deviceFeatures,
.enabledExtensionCount = deviceExtensionCount,
.ppEnabledExtensionNames = deviceExtensions,
.pEnabledFeatures = &deviceFeatures
};
deviceCreateInfo.ppEnabledExtensionNames = vkGetGryphnDeviceExtensions(&deviceCreateInfo.enabledExtensionCount);
if (instance->debugger == NULL)
deviceCreateInfo.enabledLayerCount = 0;

View File

@@ -26,18 +26,26 @@ gnUniform* gnUniformPoolAllocateUniformsFn(gnUniformPool pool, gnUniformAllocati
.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
.descriptorCount = 0
};
VkDescriptorPoolSize imageSize = {
.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
.descriptorCount = 0
};
for (int i = 0; i < allocInfo.setCount; i++) {
for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++)
uniformBufferSize.descriptorCount++;
for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) {
if (allocInfo.sets[i].uniformBindings[i].type == GN_UNIFORM_BUFFER_DESCRIPTOR) uniformBufferSize.descriptorCount++;
if (allocInfo.sets[i].uniformBindings[i].type == GN_IMAGE_DESCRIPTOR) imageSize.descriptorCount++;
}
pool->uniformPool->pools[pool->uniformPool->poolCount].layouts[i] = vkGryphnCreateSetLayouts(&allocInfo.sets[i], pool->device->outputDevice->device);
}
uint32_t maxSets = uniformBufferSize.descriptorCount;
uint32_t maxSets = uniformBufferSize.descriptorCount + uniformBufferSize.descriptorCount;
VkDescriptorPoolCreateInfo poolInfo = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
.poolSizeCount = 1,
.pPoolSizes = &uniformBufferSize,
.pPoolSizes = (VkDescriptorPoolSize[]){ uniformBufferSize, imageSize },
.maxSets = maxSets
};