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))
250QVulkanInstance::~QVulkanInstance()
421 return d_ptr->ensureVulkan() ? d_ptr->platformInst->supportedApiVersion() :
QVersionNumber();
436void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
439 qWarning(
"QVulkanInstance already created; setVkInstance() has no effect");
443 d_ptr->vkInst = existingVkInstance;
455 qWarning(
"QVulkanInstance already created; setFlags() has no effect");
459 d_ptr->flags =
flags;
473 qWarning(
"QVulkanInstance already created; setLayers() has no effect");
495void QVulkanInstance::setExtensions(
const QByteArrayList &extensions)
498 qWarning(
"QVulkanInstance already created; setExtensions() has no effect");
502 d_ptr->extensions = extensions;
527void QVulkanInstance::setApiVersion(
const QVersionNumber &vulkanVersion)
530 qWarning(
"QVulkanInstance already created; setApiVersion() has no effect");
534 d_ptr->apiVersion = vulkanVersion;
554bool QVulkanInstance::create()
559 if (!d_ptr->ensureVulkan())
562 d_ptr->platformInst->createOrAdoptInstance();
564 if (d_ptr->platformInst->isValid()) {
565 d_ptr->vkInst = d_ptr->platformInst->vkInstance();
566 d_ptr->layers = d_ptr->platformInst->enabledLayers();
567 d_ptr->extensions = d_ptr->platformInst->enabledExtensions();
568 d_ptr->errorCode = VK_SUCCESS;
570 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
571 d_ptr->platformInst->setDebugUtilsFilters(d_ptr->debugUtilsFilters);
575 qWarning(
"Failed to create platform Vulkan instance");
576 if (d_ptr->platformInst) {
577 d_ptr->errorCode = d_ptr->platformInst->errorCode();
578 d_ptr->platformInst.reset();
580 d_ptr->errorCode = VK_NOT_READY;
590void QVulkanInstance::destroy()
598bool QVulkanInstance::isValid()
const
600 return d_ptr->platformInst && d_ptr->platformInst->isValid();
610VkResult QVulkanInstance::errorCode()
const
612 return d_ptr->errorCode;
620VkInstance QVulkanInstance::vkInstance()
const
622 return d_ptr->vkInst;
628QVulkanInstance::Flags QVulkanInstance::flags()
const
639 return d_ptr->layers;
648 return d_ptr->extensions;
658 return d_ptr->apiVersion;
667PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(
const char *
name)
671 return d_ptr->platformInst->getInstanceProcAddr(
name);
681 return d_ptr->platformInst.data();
706 return d_ptr->funcs.data();
760void QVulkanInstance::resetDeviceFunctions(VkDevice
device)
773VkSurfaceKHR QVulkanInstance::surfaceForWindow(
QWindow *
window)
779 return p ? *
static_cast<VkSurfaceKHR *
>(
p) : VK_NULL_HANDLE;
789bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
QWindow *
window)
791 return d_ptr->platformInst->supportsPresent(physicalDevice, queueFamilyIndex,
window);
807 d_ptr->platformInst->presentAboutToBeQueued(
window);
820 d_ptr->platformInst->presentQueued(
window);
859void QVulkanInstance::installDebugOutputFilter(DebugFilter
filter)
861 if (!d_ptr->debugFilters.contains(
filter)) {
862 d_ptr->debugFilters.append(
filter);
863 if (d_ptr->platformInst)
864 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
878void QVulkanInstance::removeDebugOutputFilter(DebugFilter
filter)
880 d_ptr->debugFilters.removeOne(
filter);
881 if (d_ptr->platformInst)
882 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
937void QVulkanInstance::installDebugOutputFilter(DebugUtilsFilter
filter)
939 d_ptr->debugUtilsFilters.append(
filter);
940 if (d_ptr->platformInst)
941 d_ptr->platformInst->setDebugUtilsFilters(d_ptr->debugUtilsFilters);
953void QVulkanInstance::clearDebugOutputFilters()
955 d_ptr->debugFilters.clear();
956 d_ptr->debugUtilsFilters.clear();
957 if (d_ptr->platformInst) {
958 d_ptr->platformInst->setDebugFilters(d_ptr->debugFilters);
959 d_ptr->platformInst->setDebugUtilsFilters(d_ptr->debugUtilsFilters);
963#ifndef QT_NO_DEBUG_STREAM
967 dbg.nospace() <<
"QVulkanLayer(" <<
layer.name <<
" " <<
layer.version
968 <<
" " <<
layer.specVersion <<
" " <<
layer.description <<
")";
975 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)