5#include <qpa/qplatformvulkaninstance.h>
6#include <qpa/qplatformintegration.h>
7#include <qpa/qplatformnativeinterface.h>
8#include <QtGui/private/qguiapplication_p.h>
213bool QVulkanInstancePrivate::ensureVulkan()
218 qWarning(
"QVulkanInstance: Failed to initialize Vulkan");
225void QVulkanInstancePrivate::reset()
230 platformInst.reset();
231 vkInst = VK_NULL_HANDLE;
232 errorCode = VK_SUCCESS;
240QVulkanInstance::QVulkanInstance()
241 : d_ptr(new QVulkanInstancePrivate(
this))
251QVulkanInstance::~QVulkanInstance()
383QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers()
385 return d_ptr->ensureVulkan() ? d_ptr->platformInst->supportedLayers() : QVulkanInfoVector<QVulkanLayer>();
398QVulkanInfoVector<QVulkanExtension> QVulkanInstance::supportedExtensions()
400 return d_ptr->ensureVulkan() ? d_ptr->platformInst->supportedExtensions() : QVulkanInfoVector<QVulkanExtension>();
422 return d_ptr->ensureVulkan() ? d_ptr->platformInst->supportedApiVersion() :
QVersionNumber();
437void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
440 qWarning(
"QVulkanInstance already created; setVkInstance() has no effect");
444 d_ptr->vkInst = existingVkInstance;
456 qWarning(
"QVulkanInstance already created; setFlags() has no effect");
460 d_ptr->flags =
flags;
474 qWarning(
"QVulkanInstance already created; setLayers() has no effect");
496void QVulkanInstance::setExtensions(
const QByteArrayList &extensions)
499 qWarning(
"QVulkanInstance already created; setExtensions() has no effect");
503 d_ptr->extensions = extensions;
528void QVulkanInstance::setApiVersion(
const QVersionNumber &vulkanVersion)
531 qWarning(
"QVulkanInstance already created; setApiVersion() has no effect");
535 d_ptr->apiVersion = vulkanVersion;
555bool QVulkanInstance::create()
560 if (!d_ptr->ensureVulkan())
563 d_ptr->platformInst->createOrAdoptInstance();
565 if (d_ptr->platformInst->isValid()) {
566 d_ptr->vkInst = d_ptr->platformInst->vkInstance();
567 d_ptr->layers = d_ptr->platformInst->enabledLayers();
568 d_ptr->extensions = d_ptr->platformInst->enabledExtensions();
569 d_ptr->errorCode = VK_SUCCESS;
571 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
572 d_ptr->platformInst->setDebugUtilsFilters(d_ptr->debugUtilsFilters);
576 qWarning(
"Failed to create platform Vulkan instance");
577 if (d_ptr->platformInst) {
578 d_ptr->errorCode = d_ptr->platformInst->errorCode();
579 d_ptr->platformInst.reset();
581 d_ptr->errorCode = VK_NOT_READY;
591void QVulkanInstance::destroy()
599bool QVulkanInstance::isValid()
const
601 return d_ptr->platformInst && d_ptr->platformInst->isValid();
611VkResult QVulkanInstance::errorCode()
const
613 return d_ptr->errorCode;
621VkInstance QVulkanInstance::vkInstance()
const
623 return d_ptr->vkInst;
629QVulkanInstance::Flags QVulkanInstance::flags()
const
640 return d_ptr->layers;
649 return d_ptr->extensions;
659 return d_ptr->apiVersion;
668PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(
const char *
name)
672 return d_ptr->platformInst->getInstanceProcAddr(
name);
682 return d_ptr->platformInst.data();
707 return d_ptr->funcs.data();
761void QVulkanInstance::resetDeviceFunctions(VkDevice
device)
774VkSurfaceKHR QVulkanInstance::surfaceForWindow(
QWindow *
window)
780 return p ? *
static_cast<VkSurfaceKHR *
>(
p) : VK_NULL_HANDLE;
790bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
QWindow *
window)
792 return d_ptr->platformInst->supportsPresent(physicalDevice, queueFamilyIndex,
window);
808 d_ptr->platformInst->presentAboutToBeQueued(
window);
821 d_ptr->platformInst->presentQueued(
window);
860void QVulkanInstance::installDebugOutputFilter(DebugFilter
filter)
862 if (!d_ptr->debugFilters.contains(
filter)) {
863 d_ptr->debugFilters.append(
filter);
864 if (d_ptr->platformInst)
865 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
879void QVulkanInstance::removeDebugOutputFilter(DebugFilter
filter)
881 d_ptr->debugFilters.removeOne(
filter);
882 if (d_ptr->platformInst)
883 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
938void QVulkanInstance::installDebugOutputFilter(DebugUtilsFilter
filter)
940 d_ptr->debugUtilsFilters.append(
filter);
941 if (d_ptr->platformInst)
942 d_ptr->platformInst->setDebugUtilsFilters(d_ptr->debugUtilsFilters);
954void QVulkanInstance::clearDebugOutputFilters()
956 d_ptr->debugFilters.clear();
957 d_ptr->debugUtilsFilters.clear();
958 if (d_ptr->platformInst) {
959 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
960 d_ptr->platformInst->setDebugUtilsFilters(d_ptr->debugUtilsFilters);
964#ifndef QT_NO_DEBUG_STREAM
968 dbg.nospace() <<
"QVulkanLayer(" <<
layer.name <<
" " <<
layer.version
969 <<
" " <<
layer.specVersion <<
" " <<
layer.description <<
")";
976 dbg.nospace() <<
"QVulkanExtension(" <<
extension.name <<
" " <<
extension.version <<
")";
IOBluetoothDevice * device
static QPlatformIntegration * platformIntegration()
The QVulkanDeviceFunctions class provides cross-platform access to the device level core Vulkan 1....
The QVulkanFunctions class provides cross-platform access to the instance level core Vulkan 1....
static VulkanServerBufferGlFunctions * funcs
qDeleteAll(list.begin(), list.end())
Combined button and popup list for selecting options.
#define QByteArrayLiteral(str)
const EGLAttrib EGLOutputLayerEXT * layers
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
QDebug operator<<(QDebug dbg, const QVulkanLayer &layer)