From f6df3d23b37c801c8be72c20ef862900a3c755bd Mon Sep 17 00:00:00 2001 From: redstrate Date: Mon, 13 Sep 2021 13:47:42 -0400 Subject: [PATCH] Fix Vulkan queue creation on macOS --- engine/gfx/vulkan/include/gfx_vulkan.hpp | 7 ---- engine/gfx/vulkan/src/gfx_vulkan.cpp | 48 +++++++++++++----------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/engine/gfx/vulkan/include/gfx_vulkan.hpp b/engine/gfx/vulkan/include/gfx_vulkan.hpp index 5205199..e3484ee 100755 --- a/engine/gfx/vulkan/include/gfx_vulkan.hpp +++ b/engine/gfx/vulkan/include/gfx_vulkan.hpp @@ -1,12 +1,5 @@ #pragma once -#ifdef PLATFORM_WINDOWS -#define NOMINMAX // donut define max in windows.h -#define VK_USE_PLATFORM_WIN32_KHR -#else -#define VK_USE_PLATFORM_XCB_KHR -#endif - #include #include diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index 687e6f3..14ca96a 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include "gfx_vulkan_buffer.hpp" #include "gfx_vulkan_pipeline.hpp" @@ -20,11 +19,6 @@ #include -#ifdef PLATFORM_LINUX -#include - -#endif - VkFormat toVkFormat(GFXPixelFormat format) { switch (format) { case GFXPixelFormat::R_32F: @@ -1789,7 +1783,33 @@ void GFXVulkan::createLogicalDevice(std::vector extensions) { queueCreateInfo.pQueuePriorities = &queuePriority; queueCreateInfos.push_back(queueCreateInfo); - } + } else { + // graphics + { + VkDeviceQueueCreateInfo queueCreateInfo = {}; + queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueCreateInfo.queueFamilyIndex = graphicsFamilyIndex; + queueCreateInfo.queueCount = 1; + + float queuePriority = 1.0f; + queueCreateInfo.pQueuePriorities = &queuePriority; + + queueCreateInfos.push_back(queueCreateInfo); + } + + // present + { + VkDeviceQueueCreateInfo queueCreateInfo = {}; + queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueCreateInfo.queueFamilyIndex = presentFamilyIndex; + queueCreateInfo.queueCount = 1; + + float queuePriority = 1.0f; + queueCreateInfo.pQueuePriorities = &queuePriority; + + queueCreateInfos.push_back(queueCreateInfo); + } + } VkDeviceCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; @@ -1823,23 +1843,9 @@ void GFXVulkan::createLogicalDevice(std::vector extensions) { } void GFXVulkan::createSwapchain(NativeSurface* native_surface, VkSwapchainKHR oldSwapchain) { - -#ifdef PLATFORM_WINDOWS_OLD - // create win32 surface - if(native_surface->surface == VK_NULL_HANDLE) - { - VkWin32SurfaceCreateInfoKHR createInfo = {}; - createInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; - createInfo.hwnd = (HWND)native_surface->windowNativeHandle; - createInfo.hinstance = GetModuleHandle(nullptr); - - vkCreateWin32SurfaceKHR(instance, &createInfo, nullptr, &native_surface->surface); - } -#else if(native_surface->surface == VK_NULL_HANDLE) { native_surface->surface = (VkSurfaceKHR)platform::create_native_surface(native_surface->identifier, (void*)instance); } -#endif // TODO: fix this pls VkBool32 supported;