From 0e27c2315fc478d206aedfd447567d43bcce4d7f Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 8 Mar 2020 18:09:45 +0100 Subject: [PATCH] Move Vulkan functions list to external files --- .../Nazara/VulkanRenderer/Wrapper/Device.hpp | 144 +----------------- .../Wrapper/DeviceFunctions.hpp | 140 +++++++++++++++++ .../VulkanRenderer/Wrapper/Instance.hpp | 76 +-------- .../Wrapper/InstanceFunctions.hpp | 80 ++++++++++ src/Nazara/VulkanRenderer/Wrapper/Device.cpp | 138 +---------------- .../VulkanRenderer/Wrapper/Instance.cpp | 101 +----------- 6 files changed, 249 insertions(+), 430 deletions(-) create mode 100644 include/Nazara/VulkanRenderer/Wrapper/DeviceFunctions.hpp create mode 100644 include/Nazara/VulkanRenderer/Wrapper/InstanceFunctions.hpp diff --git a/include/Nazara/VulkanRenderer/Wrapper/Device.hpp b/include/Nazara/VulkanRenderer/Wrapper/Device.hpp index a5ed0759c..71c9b28fc 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Device.hpp +++ b/include/Nazara/VulkanRenderer/Wrapper/Device.hpp @@ -59,143 +59,15 @@ namespace Nz inline operator VkDevice(); // Vulkan functions - #define NAZARA_VULKANRENDERER_DEVICE_FUNCTION(func) PFN_##func func +#define NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN(ext) +#define NAZARA_VULKANRENDERER_DEVICE_EXT_END() +#define NAZARA_VULKANRENDERER_DEVICE_FUNCTION(func) PFN_##func func; - // Vulkan core - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAllocateCommandBuffers); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAllocateDescriptorSets); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAllocateMemory); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkBeginCommandBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkBindBufferMemory); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkBindImageMemory); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBeginQuery); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBeginRenderPass); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindDescriptorSets); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindIndexBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindPipeline); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindVertexBuffers); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBlitImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdClearAttachments); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdClearColorImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdClearDepthStencilImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyBufferToImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyImageToBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyQueryPoolResults); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDispatch); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDispatchIndirect); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDraw); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDrawIndexed); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDrawIndexedIndirect); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDrawIndirect); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdEndQuery); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdEndRenderPass); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdExecuteCommands); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdFillBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdNextSubpass); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdPipelineBarrier); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdPushConstants); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdResetEvent); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdResetQueryPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdResolveImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetBlendConstants); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetDepthBias); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetDepthBounds); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetEvent); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetLineWidth); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetScissor); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetStencilCompareMask); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetStencilReference); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetStencilWriteMask); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetViewport); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdUpdateBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdWaitEvents); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdWriteTimestamp); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateBufferView); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateCommandPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateComputePipelines); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateDescriptorPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateDescriptorSetLayout); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateEvent); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateFence); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateFramebuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateGraphicsPipelines); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateImageView); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreatePipelineCache); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreatePipelineLayout); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateRenderPass); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSampler); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSemaphore); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateShaderModule); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyBufferView); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyCommandPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyDescriptorPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyDescriptorSetLayout); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyDevice); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyEvent); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyFence); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyFramebuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyImage); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyImageView); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyPipeline); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyPipelineCache); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyPipelineLayout); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyRenderPass); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySampler); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySemaphore); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyShaderModule); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDeviceWaitIdle); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkEndCommandBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFreeCommandBuffers); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFreeDescriptorSets); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFreeMemory); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFlushMappedMemoryRanges); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetBufferMemoryRequirements); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetDeviceMemoryCommitment); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetDeviceQueue); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetEventStatus); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetFenceStatus); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetImageMemoryRequirements); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetImageSparseMemoryRequirements); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetImageSubresourceLayout); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetRenderAreaGranularity); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkInvalidateMappedMemoryRanges); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkMapMemory); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkMergePipelineCaches); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkQueueSubmit); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkQueueWaitIdle); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetCommandBuffer); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetCommandPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetDescriptorPool); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetFences); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetEvent); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkSetEvent); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkUnmapMemory); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkUpdateDescriptorSets); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkWaitForFences); +#include - // VK_KHR_display_swapchain - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSharedSwapchainsKHR); - - // VK_KHR_surface - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySurfaceKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfaceCapabilitiesKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR); - - // VK_KHR_swapchain - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAcquireNextImageKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSwapchainKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySwapchainKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetSwapchainImagesKHR); - NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkQueuePresentKHR); - - #undef NAZARA_VULKANRENDERER_DEVICE_FUNCTION +#undef NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN +#undef NAZARA_VULKANRENDERER_DEVICE_EXT_END +#undef NAZARA_VULKANRENDERER_DEVICE_FUNCTION struct QueueInfo { @@ -217,9 +89,9 @@ namespace Nz inline PFN_vkVoidFunction GetProcAddr(const char* name); Instance& m_instance; + const Vk::PhysicalDevice* m_physicalDevice; VkAllocationCallbacks m_allocator; VkDevice m_device; - VkPhysicalDevice m_physicalDevice; VkResult m_lastErrorCode; std::unordered_set m_loadedExtensions; std::unordered_set m_loadedLayers; diff --git a/include/Nazara/VulkanRenderer/Wrapper/DeviceFunctions.hpp b/include/Nazara/VulkanRenderer/Wrapper/DeviceFunctions.hpp new file mode 100644 index 000000000..2b3b03564 --- /dev/null +++ b/include/Nazara/VulkanRenderer/Wrapper/DeviceFunctions.hpp @@ -0,0 +1,140 @@ +// Copyright (C) 2020 Jérôme Leclercq +// This file is part of the "Nazara Engine - Vulkan Renderer" +// For conditions of distribution and use, see copyright notice in Config.hpp + +// Vulkan core +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAllocateCommandBuffers) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAllocateDescriptorSets) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAllocateMemory) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkBeginCommandBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkBindBufferMemory) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkBindImageMemory) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBeginQuery) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBeginRenderPass) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindDescriptorSets) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindIndexBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindPipeline) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBindVertexBuffers) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdBlitImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdClearAttachments) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdClearColorImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdClearDepthStencilImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyBufferToImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyImageToBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdCopyQueryPoolResults) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDispatch) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDispatchIndirect) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDraw) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDrawIndexed) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDrawIndexedIndirect) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdDrawIndirect) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdEndQuery) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdEndRenderPass) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdExecuteCommands) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdFillBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdNextSubpass) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdPipelineBarrier) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdPushConstants) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdResetEvent) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdResetQueryPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdResolveImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetBlendConstants) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetDepthBias) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetDepthBounds) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetEvent) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetLineWidth) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetScissor) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetStencilCompareMask) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetStencilReference) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetStencilWriteMask) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdSetViewport) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdUpdateBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdWaitEvents) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCmdWriteTimestamp) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateBufferView) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateCommandPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateComputePipelines) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateDescriptorPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateDescriptorSetLayout) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateEvent) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateFence) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateFramebuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateGraphicsPipelines) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateImageView) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreatePipelineCache) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreatePipelineLayout) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateRenderPass) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSampler) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSemaphore) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateShaderModule) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyBufferView) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyCommandPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyDescriptorPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyDescriptorSetLayout) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyDevice) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyEvent) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyFence) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyFramebuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyImage) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyImageView) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyPipeline) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyPipelineCache) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyPipelineLayout) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyRenderPass) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySampler) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySemaphore) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroyShaderModule) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDeviceWaitIdle) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkEndCommandBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFreeCommandBuffers) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFreeDescriptorSets) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFreeMemory) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkFlushMappedMemoryRanges) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetBufferMemoryRequirements) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetDeviceMemoryCommitment) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetDeviceQueue) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetEventStatus) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetFenceStatus) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetImageMemoryRequirements) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetImageSparseMemoryRequirements) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetImageSubresourceLayout) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetRenderAreaGranularity) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkInvalidateMappedMemoryRanges) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkMapMemory) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkMergePipelineCaches) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkQueueSubmit) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkQueueWaitIdle) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetCommandBuffer) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetCommandPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetDescriptorPool) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetFences) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkResetEvent) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkSetEvent) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkUnmapMemory) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkUpdateDescriptorSets) +NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkWaitForFences) + +NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN(VK_KHR_display_swapchain) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSharedSwapchainsKHR) +NAZARA_VULKANRENDERER_DEVICE_EXT_END() + +NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN(VK_KHR_surface) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySurfaceKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR) +NAZARA_VULKANRENDERER_DEVICE_EXT_END() + +NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN(VK_KHR_swapchain) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkAcquireNextImageKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkCreateSwapchainKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkDestroySwapchainKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkGetSwapchainImagesKHR) + NAZARA_VULKANRENDERER_DEVICE_FUNCTION(vkQueuePresentKHR) +NAZARA_VULKANRENDERER_DEVICE_EXT_END() diff --git a/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp b/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp index f00056ef1..3a97e5b0b 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp +++ b/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp @@ -53,77 +53,15 @@ namespace Nz inline operator VkInstance(); // Vulkan functions - #define NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(func) PFN_##func func +#define NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(ext) +#define NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#define NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(func) PFN_##func func; - // Vulkan core - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDevice); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDestroyInstance); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDeviceProcAddr); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceFeatures); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceFormatProperties); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceImageFormatProperties); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceMemoryProperties); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceProperties); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceQueueFamilyProperties); +#include - // VK_KHR_display - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDisplayModeKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDisplayPlaneSurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDisplayModePropertiesKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDisplayPlaneCapabilitiesKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDisplayPlaneSupportedDisplaysKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceDisplayPlanePropertiesKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceDisplayPropertiesKHR); - - // VK_KHR_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDestroySurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceCapabilitiesKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR); - - // VK_EXT_debug_report - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDebugReportCallbackEXT); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDestroyDebugReportCallbackEXT); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDebugReportMessageEXT); - - #ifdef VK_USE_PLATFORM_ANDROID_KHR - // VK_KHR_android_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateAndroidSurfaceKHR); - #endif - - #ifdef VK_USE_PLATFORM_MIR_KHR - // VK_KHR_mir_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateMirSurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceMirPresentationSupportKHR); - #endif - - #ifdef VK_USE_PLATFORM_XCB_KHR - // VK_KHR_xcb_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateXcbSurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceXcbPresentationSupportKHR); - #endif - - #ifdef VK_USE_PLATFORM_XLIB_KHR - // VK_KHR_xlib_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateXlibSurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceXlibPresentationSupportKHR); - #endif - - #ifdef VK_USE_PLATFORM_WAYLAND_KHR - // VK_KHR_wayland_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateWaylandSurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceWaylandPresentationSupportKHR); - #endif - - #ifdef VK_USE_PLATFORM_WIN32_KHR - // VK_KHR_win32_surface - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateWin32SurfaceKHR); - NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceWin32PresentationSupportKHR); - #endif - - #undef NAZARA_VULKANRENDERER_INSTANCE_FUNCTION +#undef NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN +#undef NAZARA_VULKANRENDERER_INSTANCE_EXT_END +#undef NAZARA_VULKANRENDERER_INSTANCE_FUNCTION private: inline PFN_vkVoidFunction GetProcAddr(const char* name); diff --git a/include/Nazara/VulkanRenderer/Wrapper/InstanceFunctions.hpp b/include/Nazara/VulkanRenderer/Wrapper/InstanceFunctions.hpp new file mode 100644 index 000000000..4f37b2767 --- /dev/null +++ b/include/Nazara/VulkanRenderer/Wrapper/InstanceFunctions.hpp @@ -0,0 +1,80 @@ +// Copyright (C) 2020 Jérôme Leclercq +// This file is part of the "Nazara Engine - Vulkan Renderer" +// For conditions of distribution and use, see copyright notice in Config.hpp + +// Vulkan core +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDevice) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDestroyInstance) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDeviceProcAddr) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceFeatures) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceFormatProperties) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceImageFormatProperties) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceMemoryProperties) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceProperties) +NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceQueueFamilyProperties) + +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_display) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDisplayModeKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDisplayPlaneSurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDisplayModePropertiesKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDisplayPlaneCapabilitiesKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetDisplayPlaneSupportedDisplaysKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceDisplayPlanePropertiesKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceDisplayPropertiesKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() + +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDestroySurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() + +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_EXT_debug_report) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateDebugReportCallbackEXT) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDestroyDebugReportCallbackEXT) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkDebugReportMessageEXT) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_android_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateAndroidSurfaceKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#endif + +#ifdef VK_USE_PLATFORM_MIR_KHR +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_mir_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateMirSurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceMirPresentationSupportKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#endif + +#ifdef VK_USE_PLATFORM_XCB_KHR +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_xcb_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateXcbSurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceXcbPresentationSupportKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#endif + +#ifdef VK_USE_PLATFORM_XLIB_KHR +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_xlib_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateXlibSurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceXlibPresentationSupportKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#endif + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_wayland_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateWaylandSurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceWaylandPresentationSupportKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#endif + +#ifdef VK_USE_PLATFORM_WIN32_KHR +NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(VK_KHR_win32_surface) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkCreateWin32SurfaceKHR) + NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(vkGetPhysicalDeviceWin32PresentationSupportKHR) +NAZARA_VULKANRENDERER_INSTANCE_EXT_END() +#endif diff --git a/src/Nazara/VulkanRenderer/Wrapper/Device.cpp b/src/Nazara/VulkanRenderer/Wrapper/Device.cpp index 11ce99bf8..fe462adb6 100644 --- a/src/Nazara/VulkanRenderer/Wrapper/Device.cpp +++ b/src/Nazara/VulkanRenderer/Wrapper/Device.cpp @@ -44,141 +44,19 @@ namespace Nz m_loadedLayers.emplace(createInfo.ppEnabledLayerNames[i]); // Load all device-related functions - #define NAZARA_VULKANRENDERER_LOAD_DEVICE(func) func = reinterpret_cast(GetProcAddr(#func)) - try { ErrorFlags flags(ErrorFlag_ThrowException, true); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkAllocateCommandBuffers); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkAllocateDescriptorSets); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkAllocateMemory); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkBeginCommandBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkBindBufferMemory); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkBindImageMemory); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBeginQuery); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBeginRenderPass); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBindDescriptorSets); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBindIndexBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBindPipeline); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBindVertexBuffers); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdBlitImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdClearAttachments); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdClearColorImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdClearDepthStencilImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdCopyBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdCopyBufferToImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdCopyImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdCopyImageToBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdCopyQueryPoolResults); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdDispatch); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdDispatchIndirect); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdDraw); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdDrawIndexed); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdDrawIndexedIndirect); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdDrawIndirect); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdEndQuery); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdEndRenderPass); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdExecuteCommands); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdFillBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdNextSubpass); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdPipelineBarrier); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdPushConstants); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdResetEvent); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdResetQueryPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdResolveImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetBlendConstants); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetDepthBias); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetDepthBounds); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetEvent); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetLineWidth); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetScissor); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetStencilCompareMask); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetStencilReference); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetStencilWriteMask); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdSetViewport); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdUpdateBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdWaitEvents); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCmdWriteTimestamp); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateBufferView); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateCommandPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateComputePipelines); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateDescriptorPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateDescriptorSetLayout); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateEvent); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateFence); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateFramebuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateGraphicsPipelines); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateImageView); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreatePipelineCache); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreatePipelineLayout); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateRenderPass); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateSampler); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateSemaphore); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateShaderModule); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyBufferView); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyCommandPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyDescriptorPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyDescriptorSetLayout); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyDevice); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyEvent); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyFence); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyFramebuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyImage); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyImageView); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyPipeline); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyPipelineCache); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyPipelineLayout); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyRenderPass); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroySampler); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroySemaphore); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroyShaderModule); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDeviceWaitIdle); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkEndCommandBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkFreeCommandBuffers); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkFreeDescriptorSets); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkFreeMemory); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkFlushMappedMemoryRanges); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetBufferMemoryRequirements); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetDeviceMemoryCommitment); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetDeviceQueue); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetEventStatus); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetFenceStatus); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetImageMemoryRequirements); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetImageSparseMemoryRequirements); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetImageSubresourceLayout); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetRenderAreaGranularity); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkInvalidateMappedMemoryRanges); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkMapMemory); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkMergePipelineCaches); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkQueueSubmit); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkQueueWaitIdle); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkResetCommandBuffer); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkResetCommandPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkResetDescriptorPool); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkResetFences); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkResetEvent); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkSetEvent); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkUnmapMemory); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkUpdateDescriptorSets); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkWaitForFences); +#define NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN(ext) if (IsExtensionLoaded(#ext)) { +#define NAZARA_VULKANRENDERER_DEVICE_EXT_END() } +#define NAZARA_VULKANRENDERER_DEVICE_FUNCTION(func) func = reinterpret_cast(GetProcAddr(#func)); - // VK_KHR_display_swapchain - if (IsExtensionLoaded("VK_KHR_display_swapchain")) - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateSharedSwapchainsKHR); +#include - // VK_KHR_swapchain - if (IsExtensionLoaded("VK_KHR_swapchain")) - { - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkAcquireNextImageKHR); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkCreateSwapchainKHR); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkDestroySwapchainKHR); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkGetSwapchainImagesKHR); - NAZARA_VULKANRENDERER_LOAD_DEVICE(vkQueuePresentKHR); - } +#undef NAZARA_VULKANRENDERER_DEVICE_EXT_BEGIN +#undef NAZARA_VULKANRENDERER_DEVICE_EXT_END +#undef NAZARA_VULKANRENDERER_DEVICE_FUNCTION } catch (const std::exception& e) { @@ -186,8 +64,6 @@ namespace Nz return false; } - #undef NAZARA_VULKANRENDERER_LOAD_DEVICE - // And retains informations about queues UInt32 maxFamilyIndex = 0; m_enabledQueuesInfos.resize(createInfo.queueCreateInfoCount); diff --git a/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp b/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp index f842e1279..c46028b15 100644 --- a/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp +++ b/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp @@ -35,104 +35,19 @@ namespace Nz m_loadedLayers.insert(createInfo.ppEnabledLayerNames[i]); // And now load everything - #define NAZARA_VULKANRENDERER_LOAD_INSTANCE(func) func = reinterpret_cast(GetProcAddr(#func)) - try { ErrorFlags flags(ErrorFlag_ThrowException, true); - // Vulkan core - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateDevice); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkDestroyInstance); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkEnumeratePhysicalDevices); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetDeviceProcAddr); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceFeatures); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceFormatProperties); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceImageFormatProperties); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceMemoryProperties); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceProperties); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceQueueFamilyProperties); +#define NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(ext) if (IsExtensionLoaded(#ext)) { +#define NAZARA_VULKANRENDERER_INSTANCE_EXT_END() } +#define NAZARA_VULKANRENDERER_INSTANCE_FUNCTION(func) func = reinterpret_cast(GetProcAddr(#func)); - // VK_KHR_display - if (IsExtensionLoaded("VK_KHR_display")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateDisplayModeKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateDisplayPlaneSurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetDisplayModePropertiesKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetDisplayPlaneCapabilitiesKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetDisplayPlaneSupportedDisplaysKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceDisplayPlanePropertiesKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceDisplayPropertiesKHR); - } +#include - // VK_KHR_surface - if (IsExtensionLoaded("VK_KHR_surface")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkDestroySurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceSurfaceCapabilitiesKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceSurfaceFormatsKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceSurfacePresentModesKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceSurfaceSupportKHR); - } - - // VK_EXT_debug_report - if (IsExtensionLoaded("VK_EXT_debug_report")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateDebugReportCallbackEXT); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkDestroyDebugReportCallbackEXT); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkDebugReportMessageEXT); - } - - #ifdef VK_USE_PLATFORM_ANDROID_KHR - // VK_KHR_android_surface - if (IsExtensionLoaded("VK_KHR_android_surface")) - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateAndroidSurfaceKHR); - #endif - - #ifdef VK_USE_PLATFORM_MIR_KHR - // VK_KHR_mir_surface - if (IsExtensionLoaded("VK_KHR_mir_surface")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateMirSurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceMirPresentationSupportKHR); - } - #endif - - #ifdef VK_USE_PLATFORM_XCB_KHR - // VK_KHR_xcb_surface - if (IsExtensionLoaded("VK_KHR_xcb_surface")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateXcbSurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceXcbPresentationSupportKHR); - } - #endif - - #ifdef VK_USE_PLATFORM_XLIB_KHR - // VK_KHR_xlib_surface - if (IsExtensionLoaded("VK_KHR_xlib_surface")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateXlibSurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceXlibPresentationSupportKHR); - } - #endif - - #ifdef VK_USE_PLATFORM_WAYLAND_KHR - // VK_KHR_wayland_surface - if (IsExtensionLoaded("VK_KHR_wayland_surface")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateWaylandSurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceWaylandPresentationSupportKHR); - } - #endif - - #ifdef VK_USE_PLATFORM_WIN32_KHR - // VK_KHR_win32_surface - if (IsExtensionLoaded("VK_KHR_win32_surface")) - { - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkCreateWin32SurfaceKHR); - NAZARA_VULKANRENDERER_LOAD_INSTANCE(vkGetPhysicalDeviceWin32PresentationSupportKHR); - } - #endif +#undef NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN +#undef NAZARA_VULKANRENDERER_INSTANCE_EXT_END +#undef NAZARA_VULKANRENDERER_INSTANCE_FUNCTION } catch (const std::exception& e) { @@ -140,8 +55,6 @@ namespace Nz return false; } - #undef NAZARA_VULKANRENDERER_LOAD_INSTANCE - return true; }