macOS: prefer VK_EXT_metal_surface
fix vkDebug: vkCreateMacOSSurfaceMVK() is deprecated. Use vkCreateMetalSurfaceEXT() from the VK_EXT_metal_surface extension. Change-Id: I8e2ef1acf9f9147b233c26bd3c550c44ffa149b1 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
parent
6397dac979
commit
4f7e0f4519
@ -32,6 +32,7 @@ private:
|
||||
QLibrary m_lib;
|
||||
VkSurfaceKHR m_nullSurface = nullptr;
|
||||
PFN_vkCreateMacOSSurfaceMVK m_createSurface = nullptr;
|
||||
PFN_vkCreateMetalSurfaceEXT m_createMetalSurface = nullptr;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -2,6 +2,7 @@
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#import <QuartzCore/CAMetalLayer.h>
|
||||
|
||||
#include "qcocoavulkaninstance.h"
|
||||
#include "qcocoawindow.h"
|
||||
@ -20,7 +21,7 @@ QCocoaVulkanInstance::~QCocoaVulkanInstance()
|
||||
|
||||
void QCocoaVulkanInstance::createOrAdoptInstance()
|
||||
{
|
||||
initInstance(m_instance, QByteArrayList() << QByteArrayLiteral("VK_MVK_macos_surface"));
|
||||
initInstance(m_instance, QByteArrayList() << QByteArrayLiteral("VK_EXT_metal_surface") << QByteArrayLiteral("VK_MVK_macos_surface"));
|
||||
}
|
||||
|
||||
VkSurfaceKHR *QCocoaVulkanInstance::surface(QWindow *window)
|
||||
@ -33,6 +34,20 @@ VkSurfaceKHR *QCocoaVulkanInstance::surface(QWindow *window)
|
||||
|
||||
VkSurfaceKHR QCocoaVulkanInstance::createSurface(NSView *view)
|
||||
{
|
||||
VkSurfaceKHR surface = nullptr;
|
||||
if (!m_createMetalSurface) {
|
||||
m_createMetalSurface = reinterpret_cast<PFN_vkCreateMetalSurfaceEXT>(
|
||||
m_vkGetInstanceProcAddr(m_vkInst, "vkCreateMetalSurfaceEXT"));
|
||||
}
|
||||
if (m_createMetalSurface) {
|
||||
VkMetalSurfaceCreateInfoEXT info = {};
|
||||
info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
|
||||
info.pLayer = qt_objc_cast<CAMetalLayer*>(view.layer);
|
||||
VkResult err = m_createMetalSurface(m_vkInst, &info, nullptr, &surface);
|
||||
if (err == VK_SUCCESS)
|
||||
return surface;
|
||||
qWarning("Failed to create Vulkan surface from metal layer: %d", err);
|
||||
}
|
||||
if (!m_createSurface) {
|
||||
m_createSurface = reinterpret_cast<PFN_vkCreateMacOSSurfaceMVK>(
|
||||
m_vkGetInstanceProcAddr(m_vkInst, "vkCreateMacOSSurfaceMVK"));
|
||||
@ -48,7 +63,6 @@ VkSurfaceKHR QCocoaVulkanInstance::createSurface(NSView *view)
|
||||
surfaceInfo.flags = 0;
|
||||
surfaceInfo.pView = view.layer;
|
||||
|
||||
VkSurfaceKHR surface = nullptr;
|
||||
VkResult err = m_createSurface(m_vkInst, &surfaceInfo, nullptr, &surface);
|
||||
if (err != VK_SUCCESS)
|
||||
qWarning("Failed to create Vulkan surface: %d", err);
|
||||
|
Loading…
x
Reference in New Issue
Block a user