4#ifndef QVULKANWINDOW_P_H
5#define QVULKANWINDOW_P_H
7#include <QtGui/private/qtguiglobal_p.h>
9#if QT_CONFIG(vulkan) || defined(Q_QDOC)
12#include <QtCore/QHash>
13#include <private/qwindow_p.h>
33 ~QVulkanWindowPrivate();
38 bool createDefaultRenderPass();
39 void recreateSwapChain();
40 uint32_t chooseTransientImageMemType(VkImage
img, uint32_t startIndex);
41 bool createTransientImage(VkFormat
format, VkImageUsageFlags
usage, VkImageAspectFlags aspectMask,
42 VkImage *
images, VkDeviceMemory *mem, VkImageView *views,
int count);
43 void releaseSwapChain();
46 bool checkDeviceLost(VkResult err);
48 void finishBlockingReadback();
57 Status status = StatusUninitialized;
60 VkSurfaceKHR surface = VK_NULL_HANDLE;
64 QVulkanWindow::Flags
flags;
68 VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT;
69 QVulkanWindow::QueueCreateInfoModifier queueCreateInfoModifier;
70 QVulkanWindow::EnabledFeaturesModifier enabledFeaturesModifier;
72 VkDevice dev = VK_NULL_HANDLE;
74 uint32_t gfxQueueFamilyIdx;
75 uint32_t presQueueFamilyIdx;
78 VkCommandPool cmdPool = VK_NULL_HANDLE;
79 VkCommandPool presCmdPool = VK_NULL_HANDLE;
80 uint32_t hostVisibleMemIndex;
81 uint32_t deviceLocalMemIndex;
83 VkColorSpaceKHR colorSpace;
84 VkFormat dsFormat = VK_FORMAT_D24_UNORM_S8_UINT;
86 PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR =
nullptr;
87 PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
88 PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
89 PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
90 PFN_vkQueuePresentKHR vkQueuePresentKHR;
91 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR =
nullptr;
92 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
94 static const int MAX_SWAPCHAIN_BUFFER_COUNT = 4;
95 static const int MAX_FRAME_LAG = QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT;
99 VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR;
100 int swapChainBufferCount = 0;
103 QSize swapChainImageSize;
104 VkSwapchainKHR swapChain = VK_NULL_HANDLE;
105 bool swapChainSupportsReadBack =
false;
107 struct ImageResources {
108 VkImage
image = VK_NULL_HANDLE;
109 VkImageView imageView = VK_NULL_HANDLE;
110 VkCommandBuffer
cmdBuf = VK_NULL_HANDLE;
111 VkFence cmdFence = VK_NULL_HANDLE;
112 bool cmdFenceWaitable =
false;
113 VkFramebuffer fb = VK_NULL_HANDLE;
114 VkCommandBuffer presTransCmdBuf = VK_NULL_HANDLE;
115 VkImage msaaImage = VK_NULL_HANDLE;
116 VkImageView msaaImageView = VK_NULL_HANDLE;
117 } imageRes[MAX_SWAPCHAIN_BUFFER_COUNT];
119 VkDeviceMemory msaaImageMem = VK_NULL_HANDLE;
121 uint32_t currentImage;
123 struct FrameResources {
124 VkFence
fence = VK_NULL_HANDLE;
125 bool fenceWaitable =
false;
126 VkSemaphore imageSem = VK_NULL_HANDLE;
127 VkSemaphore drawSem = VK_NULL_HANDLE;
128 VkSemaphore presTransSem = VK_NULL_HANDLE;
129 bool imageAcquired =
false;
130 bool imageSemWaitable =
false;
131 } frameRes[MAX_FRAME_LAG];
133 uint32_t currentFrame;
135 VkRenderPass defaultRenderPass = VK_NULL_HANDLE;
137 VkDeviceMemory dsMem = VK_NULL_HANDLE;
138 VkImage dsImage = VK_NULL_HANDLE;
139 VkImageView dsView = VK_NULL_HANDLE;
141 bool framePending =
false;
142 bool frameGrabbing =
false;
143 QImage frameGrabTargetImage;
144 VkImage frameGrabImage = VK_NULL_HANDLE;
145 VkDeviceMemory frameGrabImageMem = VK_NULL_HANDLE;
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
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...
void init(QScreen *targetScreen=nullptr)
Combined button and popup list for selecting options.
Q_ALWAYS_INLINE void fence()
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum format
GLenum GLenum colorFormat
GLsizeiptr const void GLenum usage
QList< QImage > images
[6]
QSvgRenderer * renderer
[0]