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 bool createSwapChainResources();
46 void destroySwapChainResources();
47 void releaseSwapChain();
50 bool checkDeviceLost(VkResult err);
52 void releaseReadbackResources();
53 void finishBlockingReadback();
62 Status status = StatusUninitialized;
63 QVulkanWindowRenderer *renderer =
nullptr;
64 QVulkanInstance *inst =
nullptr;
65 VkSurfaceKHR surface = VK_NULL_HANDLE;
67 QList<VkPhysicalDevice> physDevs;
68 QList<VkPhysicalDeviceProperties> physDevProps;
69 QVulkanWindow::Flags flags;
70 QByteArrayList requestedDevExtensions;
71 QHash<VkPhysicalDevice, QVulkanInfoVector<QVulkanExtension> > supportedDevExtensions;
72 QList<VkFormat> requestedColorFormats;
73 VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT;
74 QVulkanWindow::QueueCreateInfoModifier queueCreateInfoModifier;
75 QVulkanWindow::EnabledFeaturesModifier enabledFeaturesModifier;
76 QVulkanWindow::EnabledFeatures2Modifier enabledFeatures2Modifier;
78 VkDevice dev = VK_NULL_HANDLE;
79 QVulkanDeviceFunctions *devFuncs =
nullptr;
80 uint32_t gfxQueueFamilyIdx = uint32_t(-1);
81 uint32_t presQueueFamilyIdx = uint32_t(-1);
82 VkQueue gfxQueue = VK_NULL_HANDLE;
83 VkQueue presQueue = VK_NULL_HANDLE;
84 VkCommandPool cmdPool = VK_NULL_HANDLE;
85 VkCommandPool presCmdPool = VK_NULL_HANDLE;
86 uint32_t hostVisibleMemIndex = 0;
87 uint32_t deviceLocalMemIndex = 0;
88 VkFormat colorFormat = VK_FORMAT_B8G8R8A8_UNORM;
89 VkColorSpaceKHR colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
90 VkFormat dsFormat = VK_FORMAT_D24_UNORM_S8_UINT;
92 PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR =
nullptr;
93 PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR =
nullptr;
94 PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR =
nullptr;
95 PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR =
nullptr;
96 PFN_vkQueuePresentKHR vkQueuePresentKHR =
nullptr;
97 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR =
nullptr;
98 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR =
nullptr;
100 static const int MAX_SWAPCHAIN_BUFFER_COUNT = 4;
101 static const int MAX_FRAME_LAG = QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT;
105 VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR;
106 int swapChainBufferCount = 0;
109 QSize swapChainImageSize;
110 VkSwapchainKHR swapChain = VK_NULL_HANDLE;
111 bool swapChainSupportsReadBack =
false;
113 struct ImageResources {
114 VkImage image = VK_NULL_HANDLE;
115 VkImageView imageView = VK_NULL_HANDLE;
116 VkFramebuffer fb = VK_NULL_HANDLE;
117 VkCommandBuffer presTransCmdBuf = VK_NULL_HANDLE;
118 VkImage msaaImage = VK_NULL_HANDLE;
119 VkImageView msaaImageView = VK_NULL_HANDLE;
120 } imageRes[MAX_SWAPCHAIN_BUFFER_COUNT];
122 VkDeviceMemory msaaImageMem = VK_NULL_HANDLE;
124 uint32_t currentImage = 0;
126 struct FrameResources {
127 VkSemaphore imageSem = VK_NULL_HANDLE;
128 VkSemaphore drawSem = VK_NULL_HANDLE;
129 VkSemaphore presTransSem = VK_NULL_HANDLE;
130 VkFence cmdFence = VK_NULL_HANDLE;
131 VkCommandBuffer cmdBuf = VK_NULL_HANDLE;
132 bool imageAcquired =
false;
133 bool imageSemWaitable =
false;
134 bool cmdFenceWaitable =
false;
135 } frameRes[MAX_FRAME_LAG];
137 uint32_t currentFrame = 0;
139 VkRenderPass defaultRenderPass = VK_NULL_HANDLE;
141 VkDeviceMemory dsMem = VK_NULL_HANDLE;
142 VkImage dsImage = VK_NULL_HANDLE;
143 VkImageView dsView = VK_NULL_HANDLE;
145 bool framePending =
false;
146 bool frameGrabbing =
false;
147 QImage frameGrabTargetImage;
148 VkImage frameGrabImage = VK_NULL_HANDLE;
149 VkDeviceMemory frameGrabImageMem = VK_NULL_HANDLE;
Combined button and popup list for selecting options.
VkSampleCountFlagBits mask
static VkDeviceSize aligned(VkDeviceSize v, VkDeviceSize byteAlign)