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;
|
QLibrary m_lib;
|
||||||
VkSurfaceKHR m_nullSurface = nullptr;
|
VkSurfaceKHR m_nullSurface = nullptr;
|
||||||
PFN_vkCreateMacOSSurfaceMVK m_createSurface = nullptr;
|
PFN_vkCreateMacOSSurfaceMVK m_createSurface = nullptr;
|
||||||
|
PFN_vkCreateMetalSurfaceEXT m_createMetalSurface = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
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
|
// 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>
|
#include <AppKit/AppKit.h>
|
||||||
|
#import <QuartzCore/CAMetalLayer.h>
|
||||||
|
|
||||||
#include "qcocoavulkaninstance.h"
|
#include "qcocoavulkaninstance.h"
|
||||||
#include "qcocoawindow.h"
|
#include "qcocoawindow.h"
|
||||||
@ -20,7 +21,7 @@ QCocoaVulkanInstance::~QCocoaVulkanInstance()
|
|||||||
|
|
||||||
void QCocoaVulkanInstance::createOrAdoptInstance()
|
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)
|
VkSurfaceKHR *QCocoaVulkanInstance::surface(QWindow *window)
|
||||||
@ -33,6 +34,20 @@ VkSurfaceKHR *QCocoaVulkanInstance::surface(QWindow *window)
|
|||||||
|
|
||||||
VkSurfaceKHR QCocoaVulkanInstance::createSurface(NSView *view)
|
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) {
|
if (!m_createSurface) {
|
||||||
m_createSurface = reinterpret_cast<PFN_vkCreateMacOSSurfaceMVK>(
|
m_createSurface = reinterpret_cast<PFN_vkCreateMacOSSurfaceMVK>(
|
||||||
m_vkGetInstanceProcAddr(m_vkInst, "vkCreateMacOSSurfaceMVK"));
|
m_vkGetInstanceProcAddr(m_vkInst, "vkCreateMacOSSurfaceMVK"));
|
||||||
@ -48,7 +63,6 @@ VkSurfaceKHR QCocoaVulkanInstance::createSurface(NSView *view)
|
|||||||
surfaceInfo.flags = 0;
|
surfaceInfo.flags = 0;
|
||||||
surfaceInfo.pView = view.layer;
|
surfaceInfo.pView = view.layer;
|
||||||
|
|
||||||
VkSurfaceKHR surface = nullptr;
|
|
||||||
VkResult err = m_createSurface(m_vkInst, &surfaceInfo, nullptr, &surface);
|
VkResult err = m_createSurface(m_vkInst, &surfaceInfo, nullptr, &surface);
|
||||||
if (err != VK_SUCCESS)
|
if (err != VK_SUCCESS)
|
||||||
qWarning("Failed to create Vulkan surface: %d", err);
|
qWarning("Failed to create Vulkan surface: %d", err);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user