diff options
Diffstat (limited to 'src/plugins/platforms/eglfs/api/vulkan')
4 files changed, 0 insertions, 517 deletions
diff --git a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkaninstance.cpp b/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkaninstance.cpp deleted file mode 100644 index a75251ca5f..0000000000 --- a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkaninstance.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qeglfsvulkaninstance_p.h" -#include "qeglfswindow_p.h" -#include "qeglfshooks_p.h" -#include <QLoggingCategory> - -QT_BEGIN_NAMESPACE - -Q_DECLARE_LOGGING_CATEGORY(qLcEglDevDebug) - -QEglFSVulkanInstance::QEglFSVulkanInstance(QVulkanInstance *instance) - : m_instance(instance) -{ - loadVulkanLibrary(QStringLiteral("vulkan")); -} - -void QEglFSVulkanInstance::createOrAdoptInstance() -{ - qCDebug(qLcEglDevDebug, "Creating Vulkan instance for VK_KHR_display"); - - const QByteArray extName = QByteArrayLiteral("VK_KHR_display"); - initInstance(m_instance, { extName }); - if (!m_vkInst) - return; - if (!enabledExtensions().contains(extName)) { - qWarning("Failed to enable VK_KHR_display extension"); - return; - } - -#if VK_KHR_display - m_getPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR) - m_vkGetInstanceProcAddr(m_vkInst, "vkGetPhysicalDeviceDisplayPropertiesKHR"); - m_getDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR) - m_vkGetInstanceProcAddr(m_vkInst, "vkGetDisplayModePropertiesKHR"); - m_getPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR) - m_vkGetInstanceProcAddr(m_vkInst, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); - - m_getDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR) - m_vkGetInstanceProcAddr(m_vkInst, "vkGetDisplayPlaneSupportedDisplaysKHR"); - m_getDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR) - m_vkGetInstanceProcAddr(m_vkInst, "vkGetDisplayPlaneCapabilitiesKHR"); - - m_createDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR) - m_vkGetInstanceProcAddr(m_vkInst, "vkCreateDisplayPlaneSurfaceKHR"); -#endif - - m_enumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices) - m_vkGetInstanceProcAddr(m_vkInst, "vkEnumeratePhysicalDevices"); - - // Use for first physical device, unless overridden by QT_VK_PHYSICAL_DEVICE_INDEX. - // This behavior matches what the Vulkan backend of QRhi would do. - - uint32_t physDevCount = 0; - m_enumeratePhysicalDevices(m_vkInst, &physDevCount, nullptr); - if (!physDevCount) { - qWarning("No physical devices"); - return; - } - QVarLengthArray<VkPhysicalDevice, 4> physDevs(physDevCount); - VkResult err = m_enumeratePhysicalDevices(m_vkInst, &physDevCount, physDevs.data()); - if (err != VK_SUCCESS || !physDevCount) { - qWarning("Failed to enumerate physical devices: %d", err); - return; - } - - if (qEnvironmentVariableIsSet("QT_VK_PHYSICAL_DEVICE_INDEX")) { - int requestedPhysDevIndex = qEnvironmentVariableIntValue("QT_VK_PHYSICAL_DEVICE_INDEX"); - if (requestedPhysDevIndex >= 0 && uint32_t(requestedPhysDevIndex) < physDevCount) - m_physDev = physDevs[requestedPhysDevIndex]; - } - - if (m_physDev == VK_NULL_HANDLE) - m_physDev = physDevs[0]; -} - -bool QEglFSVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - QWindow *window) -{ - Q_UNUSED(physicalDevice); - Q_UNUSED(queueFamilyIndex); - Q_UNUSED(window); - return true; -} - -VkSurfaceKHR QEglFSVulkanInstance::createSurface(QEglFSWindow *window) -{ -#if VK_KHR_display - qCDebug(qLcEglDevDebug, "Creating VkSurfaceKHR via VK_KHR_display for window %p", (void *) window); - - if (!m_physDev) { - qWarning("No physical device, cannot create surface"); - return VK_NULL_HANDLE; - } - - uint32_t displayCount = 0; - VkResult err = m_getPhysicalDeviceDisplayPropertiesKHR(m_physDev, &displayCount, nullptr); - if (err != VK_SUCCESS) { - qWarning("Failed to get display properties: %d", err); - return VK_NULL_HANDLE; - } - - qCDebug(qLcEglDevDebug, "Display count: %u", displayCount); - - QVarLengthArray<VkDisplayPropertiesKHR, 4> displayProps(displayCount); - m_getPhysicalDeviceDisplayPropertiesKHR(m_physDev, &displayCount, displayProps.data()); - - VkDisplayKHR display = VK_NULL_HANDLE; - VkDisplayModeKHR displayMode = VK_NULL_HANDLE; - uint32_t width = 0; - uint32_t height = 0; - - for (uint32_t i = 0; i < displayCount; ++i) { - const VkDisplayPropertiesKHR &disp(displayProps[i]); - qCDebug(qLcEglDevDebug, "Display #%u:\n display: %p\n name: %s\n dimensions: %ux%u\n resolution: %ux%u", - i, (void *) disp.display, disp.displayName, - disp.physicalDimensions.width, disp.physicalDimensions.height, - disp.physicalResolution.width, disp.physicalResolution.height); - - // Just pick the first display and the first mode. - if (i == 0) - display = disp.display; - - uint32_t modeCount = 0; - if (m_getDisplayModePropertiesKHR(m_physDev, disp.display, &modeCount, nullptr) != VK_SUCCESS) { - qWarning("Failed to get modes for display"); - continue; - } - QVarLengthArray<VkDisplayModePropertiesKHR, 16> modeProps(modeCount); - m_getDisplayModePropertiesKHR(m_physDev, disp.display, &modeCount, modeProps.data()); - for (uint32_t j = 0; j < modeCount; ++j) { - const VkDisplayModePropertiesKHR &mode(modeProps[j]); - qCDebug(qLcEglDevDebug, " Mode #%u:\n mode: %p\n visibleRegion: %ux%u\n refreshRate: %u", - j, (void *) mode.displayMode, - mode.parameters.visibleRegion.width, mode.parameters.visibleRegion.height, - mode.parameters.refreshRate); - if (j == 0) { - displayMode = mode.displayMode; - width = mode.parameters.visibleRegion.width; - height = mode.parameters.visibleRegion.height; - } - } - } - - if (display == VK_NULL_HANDLE || displayMode == VK_NULL_HANDLE) { - qWarning("Failed to choose display and mode"); - return VK_NULL_HANDLE; - } - uint32_t planeCount = 0; - err = m_getPhysicalDeviceDisplayPlanePropertiesKHR(m_physDev, &planeCount, nullptr); - if (err != VK_SUCCESS) { - qWarning("Failed to get plane properties: %d", err); - return VK_NULL_HANDLE; - } - - qCDebug(qLcEglDevDebug, "Plane count: %u", planeCount); - - QVarLengthArray<VkDisplayPlanePropertiesKHR, 4> planeProps(planeCount); - m_getPhysicalDeviceDisplayPlanePropertiesKHR(m_physDev, &planeCount, planeProps.data()); - - uint32_t planeIndex = UINT_MAX; - for (uint32_t i = 0; i < planeCount; ++i) { - uint32_t supportedDisplayCount = 0; - err = m_getDisplayPlaneSupportedDisplaysKHR(m_physDev, i, &supportedDisplayCount, nullptr); - if (err != VK_SUCCESS) { - qWarning("Failed to query supported displays for plane: %d", err); - return VK_NULL_HANDLE; - } - - QVarLengthArray<VkDisplayKHR, 4> supportedDisplays(supportedDisplayCount); - m_getDisplayPlaneSupportedDisplaysKHR(m_physDev, i, &supportedDisplayCount, supportedDisplays.data()); - qCDebug(qLcEglDevDebug, "Plane #%u supports %u displays, currently bound to display %p", - i, supportedDisplayCount, (void *) planeProps[i].currentDisplay); - - VkDisplayPlaneCapabilitiesKHR caps; - err = m_getDisplayPlaneCapabilitiesKHR(m_physDev, displayMode, i, &caps); - if (err != VK_SUCCESS) { - qWarning("Failed to query plane capabilities: %d", err); - return VK_NULL_HANDLE; - } - - qCDebug(qLcEglDevDebug, " supportedAlpha: %d (1=no, 2=global, 4=per pixel, 8=per pixel premul)\n" - " minSrc=%d, %d %ux%u\n" - " maxSrc=%d, %d %ux%u\n" - " minDst=%d, %d %ux%u\n" - " maxDst=%d, %d %ux%u", - int(caps.supportedAlpha), - caps.minSrcPosition.x, caps.minSrcPosition.y, caps.minSrcExtent.width, caps.minSrcExtent.height, - caps.maxSrcPosition.x, caps.maxSrcPosition.y, caps.maxSrcExtent.width, caps.maxSrcExtent.height, - caps.minDstPosition.x, caps.minDstPosition.y, caps.minDstExtent.width, caps.minDstExtent.height, - caps.maxDstPosition.x, caps.maxDstPosition.y, caps.maxDstExtent.width, caps.maxDstExtent.height); - - // if the plane is not in use and supports our chosen display, use that plane - if (supportedDisplays.contains(display) - && (planeProps[i].currentDisplay == VK_NULL_HANDLE || planeProps[i].currentDisplay == display)) - { - planeIndex = i; - } - } - - if (planeIndex == UINT_MAX) { - qWarning("Failed to find a suitable plane"); - return VK_NULL_HANDLE; - } - - qCDebug(qLcEglDevDebug, "Using plane #%u", planeIndex); - - VkDisplaySurfaceCreateInfoKHR surfaceCreateInfo = {}; - surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; - surfaceCreateInfo.displayMode = displayMode; - surfaceCreateInfo.planeIndex = planeIndex; - surfaceCreateInfo.planeStackIndex = planeProps[planeIndex].currentStackIndex; - surfaceCreateInfo.transform = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR; - surfaceCreateInfo.globalAlpha = 1.0f; - surfaceCreateInfo.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; - surfaceCreateInfo.imageExtent = { width, height }; - - VkSurfaceKHR surface = VK_NULL_HANDLE; - err = m_createDisplayPlaneSurfaceKHR(m_vkInst, &surfaceCreateInfo, nullptr, &surface); - if (err != VK_SUCCESS || surface == VK_NULL_HANDLE) { - qWarning("Failed to create surface: %d", err); - return VK_NULL_HANDLE; - } - - qCDebug(qLcEglDevDebug, "Created surface %p", (void *) surface); - - return surface; - -#else - Q_UNUSED(window); - qWarning("VK_KHR_display support was not compiled in, cannot create surface"); - return VK_NULL_HANDLE; -#endif -} - -void QEglFSVulkanInstance::presentAboutToBeQueued(QWindow *window) -{ - // support QT_QPA_EGLFS_FORCEVSYNC (i.MX8 with eglfs_viv) - qt_egl_device_integration()->waitForVSync(window->handle()); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkaninstance_p.h b/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkaninstance_p.h deleted file mode 100644 index 7715cc37c0..0000000000 --- a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkaninstance_p.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QEGLFSVULKANINSTANCE_H -#define QEGLFSVULKANINSTANCE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qeglfsglobal_p.h" -#include <QtGui/private/qbasicvulkanplatforminstance_p.h> - -QT_BEGIN_NAMESPACE - -class QEglFSWindow; - -class Q_EGLFS_EXPORT QEglFSVulkanInstance : public QBasicPlatformVulkanInstance -{ -public: - QEglFSVulkanInstance(QVulkanInstance *instance); - - void createOrAdoptInstance() override; - bool supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window) override; - void presentAboutToBeQueued(QWindow *window) override; - - VkSurfaceKHR createSurface(QEglFSWindow *window); - -private: - QVulkanInstance *m_instance; - VkPhysicalDevice m_physDev = VK_NULL_HANDLE; - PFN_vkEnumeratePhysicalDevices m_enumeratePhysicalDevices = nullptr; -#if VK_KHR_display - PFN_vkGetPhysicalDeviceDisplayPropertiesKHR m_getPhysicalDeviceDisplayPropertiesKHR = nullptr; - PFN_vkGetDisplayModePropertiesKHR m_getDisplayModePropertiesKHR = nullptr; - PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR m_getPhysicalDeviceDisplayPlanePropertiesKHR = nullptr; - PFN_vkGetDisplayPlaneSupportedDisplaysKHR m_getDisplayPlaneSupportedDisplaysKHR = nullptr; - PFN_vkGetDisplayPlaneCapabilitiesKHR m_getDisplayPlaneCapabilitiesKHR = nullptr; - PFN_vkCreateDisplayPlaneSurfaceKHR m_createDisplayPlaneSurfaceKHR = nullptr; -#endif -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkanwindow.cpp b/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkanwindow.cpp deleted file mode 100644 index ae41ca00b6..0000000000 --- a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkanwindow.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qeglfsvulkanwindow_p.h" - -QT_BEGIN_NAMESPACE - -QEglFSVulkanWindow::QEglFSVulkanWindow(QWindow *window) - : QEglFSWindow(window), - m_surface(VK_NULL_HANDLE) -{ -} - -QEglFSVulkanWindow::~QEglFSVulkanWindow() -{ - if (m_surface) { - QVulkanInstance *inst = window()->vulkanInstance(); - if (inst) - static_cast<QEglFSVulkanInstance *>(inst->handle())->destroySurface(m_surface); - } -} - -void *QEglFSVulkanWindow::vulkanSurfacePtr() -{ - if (m_surface) - return &m_surface; - - QVulkanInstance *inst = window()->vulkanInstance(); - if (!inst) { - qWarning("Attempted to create Vulkan surface without an instance; was QWindow::setVulkanInstance() called?"); - return nullptr; - } - QEglFSVulkanInstance *eglfsInst = static_cast<QEglFSVulkanInstance *>(inst->handle()); - m_surface = eglfsInst->createSurface(this); - - return &m_surface; -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkanwindow_p.h b/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkanwindow_p.h deleted file mode 100644 index 492fb41ca4..0000000000 --- a/src/plugins/platforms/eglfs/api/vulkan/qeglfsvulkanwindow_p.h +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QEGLFSVULKANWINDOW_H -#define QEGLFSVULKANWINDOW_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qeglfsglobal_p.h" -#include "qeglfswindow_p.h" -#include "qeglfsvulkaninstance_p.h" - -QT_BEGIN_NAMESPACE - -class Q_EGLFS_EXPORT QEglFSVulkanWindow : public QEglFSWindow -{ -public: - QEglFSVulkanWindow(QWindow *window); - ~QEglFSVulkanWindow(); - - void *vulkanSurfacePtr() override; - -private: - VkSurfaceKHR m_surface; -}; - -QT_END_NAMESPACE - -#endif |