Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qvulkanwindow_p.h
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QVULKANWINDOW_P_H
5#define QVULKANWINDOW_P_H
6
7#include <QtGui/private/qtguiglobal_p.h>
8
9#if QT_CONFIG(vulkan) || defined(Q_QDOC)
10
11#include "qvulkanwindow.h"
12#include <QtCore/QHash>
13#include <private/qwindow_p.h>
14
15//
16// W A R N I N G
17// -------------
18//
19// This file is not part of the Qt API. It exists for the convenience
20// of a number of Qt sources files. This header file may change from
21// version to version without notice, or even be removed.
22//
23// We mean it.
24//
25
27
28class Q_GUI_EXPORT QVulkanWindowPrivate : public QWindowPrivate
29{
30 Q_DECLARE_PUBLIC(QVulkanWindow)
31
32public:
33 ~QVulkanWindowPrivate();
34
35 void ensureStarted();
36 void init();
37 void reset();
38 bool createDefaultRenderPass();
39 QSize surfacePixelSize() const;
40 void recreateSwapChain();
41 uint32_t chooseTransientImageMemType(VkImage img, uint32_t startIndex);
42 bool createTransientImage(VkFormat format, VkImageUsageFlags usage, VkImageAspectFlags aspectMask,
43 VkImage *images, VkDeviceMemory *mem, VkImageView *views, int count);
44 void releaseSwapChain();
45 void beginFrame();
46 void endFrame();
47 bool checkDeviceLost(VkResult err);
48 void addReadback();
49 void finishBlockingReadback();
50
51 enum Status {
52 StatusUninitialized,
53 StatusFail,
54 StatusFailRetry,
55 StatusDeviceReady,
56 StatusReady
57 };
58 Status status = StatusUninitialized;
60 QVulkanInstance *inst = nullptr;
61 VkSurfaceKHR surface = VK_NULL_HANDLE;
62 int physDevIndex = 0;
63 QList<VkPhysicalDevice> physDevs;
64 QList<VkPhysicalDeviceProperties> physDevProps;
65 QVulkanWindow::Flags flags;
66 QByteArrayList requestedDevExtensions;
67 QHash<VkPhysicalDevice, QVulkanInfoVector<QVulkanExtension> > supportedDevExtensions;
68 QList<VkFormat> requestedColorFormats;
69 VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT;
70 QVulkanWindow::QueueCreateInfoModifier queueCreateInfoModifier;
71 QVulkanWindow::EnabledFeaturesModifier enabledFeaturesModifier;
72 QVulkanWindow::EnabledFeatures2Modifier enabledFeatures2Modifier;
73
74 VkDevice dev = VK_NULL_HANDLE;
75 QVulkanDeviceFunctions *devFuncs;
76 uint32_t gfxQueueFamilyIdx;
77 uint32_t presQueueFamilyIdx;
78 VkQueue gfxQueue;
79 VkQueue presQueue;
80 VkCommandPool cmdPool = VK_NULL_HANDLE;
81 VkCommandPool presCmdPool = VK_NULL_HANDLE;
82 uint32_t hostVisibleMemIndex;
83 uint32_t deviceLocalMemIndex;
84 VkFormat colorFormat;
85 VkColorSpaceKHR colorSpace;
86 VkFormat dsFormat = VK_FORMAT_D24_UNORM_S8_UINT;
87
88 PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = nullptr;
89 PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
90 PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
91 PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
92 PFN_vkQueuePresentKHR vkQueuePresentKHR;
93 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = nullptr;
94 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
95
96 static const int MAX_SWAPCHAIN_BUFFER_COUNT = 4;
97 static const int MAX_FRAME_LAG = QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT;
98 // QVulkanWindow only supports the always available FIFO mode. The
99 // rendering thread will get throttled to the presentation rate (vsync).
100 // This is in effect Example 5 from the VK_KHR_swapchain spec.
101 VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR;
102 int swapChainBufferCount = 0;
103 int frameLag = 2;
104
105 QSize swapChainImageSize;
106 VkSwapchainKHR swapChain = VK_NULL_HANDLE;
107 bool swapChainSupportsReadBack = false;
108
109 struct ImageResources {
110 VkImage image = VK_NULL_HANDLE;
111 VkImageView imageView = VK_NULL_HANDLE;
112 VkCommandBuffer cmdBuf = VK_NULL_HANDLE;
113 VkFence cmdFence = VK_NULL_HANDLE;
114 bool cmdFenceWaitable = false;
115 VkFramebuffer fb = VK_NULL_HANDLE;
116 VkCommandBuffer presTransCmdBuf = VK_NULL_HANDLE;
117 VkImage msaaImage = VK_NULL_HANDLE;
118 VkImageView msaaImageView = VK_NULL_HANDLE;
119 } imageRes[MAX_SWAPCHAIN_BUFFER_COUNT];
120
121 VkDeviceMemory msaaImageMem = VK_NULL_HANDLE;
122
123 uint32_t currentImage;
124
125 struct FrameResources {
126 VkFence fence = VK_NULL_HANDLE;
127 bool fenceWaitable = false;
128 VkSemaphore imageSem = VK_NULL_HANDLE;
129 VkSemaphore drawSem = VK_NULL_HANDLE;
130 VkSemaphore presTransSem = VK_NULL_HANDLE;
131 bool imageAcquired = false;
132 bool imageSemWaitable = false;
133 } frameRes[MAX_FRAME_LAG];
134
135 uint32_t currentFrame;
136
137 VkRenderPass defaultRenderPass = VK_NULL_HANDLE;
138
139 VkDeviceMemory dsMem = VK_NULL_HANDLE;
140 VkImage dsImage = VK_NULL_HANDLE;
141 VkImageView dsView = VK_NULL_HANDLE;
142
143 bool framePending = false;
144 bool frameGrabbing = false;
145 QImage frameGrabTargetImage;
146 VkImage frameGrabImage = VK_NULL_HANDLE;
147 VkDeviceMemory frameGrabImageMem = VK_NULL_HANDLE;
148
149 QMatrix4x4 m_clipCorrect;
150};
151
153
154#endif // QT_CONFIG(vulkan)
155
156#endif
\inmodule QtCore
\inmodule QtGui
Definition qimage.h:37
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition qmatrix4x4.h:25
\inmodule QtCore
Definition qsize.h:25
The QVulkanDeviceFunctions class provides cross-platform access to the device level core Vulkan 1....
The QVulkanInstance class represents a native Vulkan instance, enabling Vulkan rendering onto a QSurf...
\inmodule QtGui
\inmodule QtGui
Combined button and popup list for selecting options.
Q_ALWAYS_INLINE void fence()
Definition image.cpp:4
GLenum GLenum GLsizei count
GLbitfield flags
GLint GLsizei GLsizei GLenum format
GLboolean reset
GLint void * img
Definition qopenglext.h:233
GLenum GLenum colorFormat
GLsizeiptr const void GLenum usage
Definition qopenglext.h:543
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
QList< QImage > images
[6]
QSvgRenderer * renderer
[0]