5#ifndef QVULKANWINDOW_P_H
6#define QVULKANWINDOW_P_H
8#include <QtGui/private/qtguiglobal_p.h>
10#if QT_CONFIG(vulkan) || defined(Q_QDOC)
12#include "qvulkanwindow.h"
13#include <QtCore/QHash>
14#include <private/qwindow_p.h>
29class Q_GUI_EXPORT QVulkanWindowPrivate :
public QWindowPrivate
31 Q_DECLARE_PUBLIC(QVulkanWindow)
34 ~QVulkanWindowPrivate();
39 bool createDefaultRenderPass();
40 QSize surfacePixelSize()
const;
41 void recreateSwapChain();
42 uint32_t chooseTransientImageMemType(VkImage img, uint32_t startIndex);
43 bool createTransientImage(VkFormat format, VkImageUsageFlags usage, VkImageAspectFlags aspectMask,
44 VkImage *images, VkDeviceMemory *mem, VkImageView *views,
int count);
45 void releaseSwapChain();
48 bool checkDeviceLost(VkResult err);
50 void finishBlockingReadback();
59 Status status = StatusUninitialized;
60 QVulkanWindowRenderer *renderer =
nullptr;
61 QVulkanInstance *inst =
nullptr;
62 VkSurfaceKHR surface = VK_NULL_HANDLE;
64 QList<VkPhysicalDevice> physDevs;
65 QList<VkPhysicalDeviceProperties> physDevProps;
66 QVulkanWindow::Flags flags;
67 QByteArrayList requestedDevExtensions;
68 QHash<VkPhysicalDevice, QVulkanInfoVector<QVulkanExtension> > supportedDevExtensions;
69 QList<VkFormat> requestedColorFormats;
70 VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT;
71 QVulkanWindow::QueueCreateInfoModifier queueCreateInfoModifier;
72 QVulkanWindow::EnabledFeaturesModifier enabledFeaturesModifier;
73 QVulkanWindow::EnabledFeatures2Modifier enabledFeatures2Modifier;
75 VkDevice dev = VK_NULL_HANDLE;
76 QVulkanDeviceFunctions *devFuncs;
77 uint32_t gfxQueueFamilyIdx;
78 uint32_t presQueueFamilyIdx;
81 VkCommandPool cmdPool = VK_NULL_HANDLE;
82 VkCommandPool presCmdPool = VK_NULL_HANDLE;
83 uint32_t hostVisibleMemIndex;
84 uint32_t deviceLocalMemIndex;
86 VkColorSpaceKHR colorSpace;
87 VkFormat dsFormat = VK_FORMAT_D24_UNORM_S8_UINT;
89 PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR =
nullptr;
90 PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
91 PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
92 PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
93 PFN_vkQueuePresentKHR vkQueuePresentKHR;
94 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR =
nullptr;
95 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
97 static const int MAX_SWAPCHAIN_BUFFER_COUNT = 4;
98 static const int MAX_FRAME_LAG = QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT;
102 VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR;
103 int swapChainBufferCount = 0;
106 QSize swapChainImageSize;
107 VkSwapchainKHR swapChain = VK_NULL_HANDLE;
108 bool swapChainSupportsReadBack =
false;
110 struct ImageResources {
111 VkImage image = VK_NULL_HANDLE;
112 VkImageView imageView = VK_NULL_HANDLE;
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 VkSemaphore imageSem = VK_NULL_HANDLE;
125 VkSemaphore drawSem = VK_NULL_HANDLE;
126 VkSemaphore presTransSem = VK_NULL_HANDLE;
127 VkFence cmdFence = VK_NULL_HANDLE;
128 VkCommandBuffer cmdBuf = VK_NULL_HANDLE;
129 bool imageAcquired =
false;
130 bool imageSemWaitable =
false;
131 bool cmdFenceWaitable =
false;
132 } frameRes[MAX_FRAME_LAG];
134 uint32_t currentFrame;
136 VkRenderPass defaultRenderPass = VK_NULL_HANDLE;
138 VkDeviceMemory dsMem = VK_NULL_HANDLE;
139 VkImage dsImage = VK_NULL_HANDLE;
140 VkImageView dsView = VK_NULL_HANDLE;
142 bool framePending =
false;
143 bool frameGrabbing =
false;
144 QImage frameGrabTargetImage;
145 VkImage frameGrabImage = VK_NULL_HANDLE;
146 VkDeviceMemory frameGrabImageMem = VK_NULL_HANDLE;
148 QMatrix4x4 m_clipCorrect;
Combined button and popup list for selecting options.
VkSampleCountFlagBits mask
static VkDeviceSize aligned(VkDeviceSize v, VkDeviceSize byteAlign)