diff --git a/rendering_api/vulkan/src/output_device/vulkan_device_extensions.c b/rendering_api/vulkan/src/output_device/vulkan_device_extensions.c new file mode 100644 index 0000000..8f4a8ab --- /dev/null +++ b/rendering_api/vulkan/src/output_device/vulkan_device_extensions.c @@ -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; +} diff --git a/rendering_api/vulkan/src/output_device/vulkan_device_extensions.h b/rendering_api/vulkan/src/output_device/vulkan_device_extensions.h index ba735cf..42175ff 100644 --- a/rendering_api/vulkan/src/output_device/vulkan_device_extensions.h +++ b/rendering_api/vulkan/src/output_device/vulkan_device_extensions.h @@ -1,15 +1,4 @@ #pragma once #include -#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); diff --git a/rendering_api/vulkan/src/output_device/vulkan_output_device.c b/rendering_api/vulkan/src/output_device/vulkan_output_device.c index 8189334..801a922 100644 --- a/rendering_api/vulkan/src/output_device/vulkan_output_device.c +++ b/rendering_api/vulkan/src/output_device/vulkan_output_device.c @@ -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; diff --git a/rendering_api/vulkan/src/uniforms/vulkan_uniform_pool.c b/rendering_api/vulkan/src/uniforms/vulkan_uniform_pool.c index 8a627ad..caf60ff 100644 --- a/rendering_api/vulkan/src/uniforms/vulkan_uniform_pool.c +++ b/rendering_api/vulkan/src/uniforms/vulkan_uniform_pool.c @@ -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 };