1 #ifndef MYTHRENDERVULKAN_H
2 #define MYTHRENDERVULKAN_H
5 #include <QVulkanWindowRenderer>
6 #include <QVulkanDeviceFunctions>
23 #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
24 #define MYTH_NULL_DISPATCH nullptr
26 #define MYTH_NULL_DISPATCH 0
36 bool IsValidVulkan()
const;
39 QVulkanDeviceFunctions* Funcs ();
44 bool m_vulkanValid {
true };
46 VkDevice m_vulkanDevice {
nullptr };
47 QVulkanDeviceFunctions* m_vulkanFuncs {
nullptr };
67 void SetFrameExpected (
void);
68 bool GetFrameExpected (
void)
const;
69 bool GetFrameStarted (
void)
const;
73 void preInitResources (
void)
override;
74 void initResources (
void)
override;
75 void initSwapChainResources (
void)
override;
76 void releaseSwapChainResources (
void)
override;
77 void releaseResources (
void)
override;
78 void startNextFrame (
void)
override;
79 void physicalDeviceLost (
void)
override;
80 void logicalDeviceLost (
void)
override;
82 void BeginDebugRegion(VkCommandBuffer CommandBuffer,
const char *
Name,
84 void EndDebugRegion(VkCommandBuffer CommandBuffer);
85 bool CreateImage(QSize Size, VkFormat
Format, VkImageTiling Tiling,
86 VkImageUsageFlags Usage, VkMemoryPropertyFlags
Properties,
87 VkImage&
Image, VkDeviceMemory& ImageMemory);
88 void TransitionImageLayout(VkImage &
Image, VkImageLayout OldLayout,
89 VkImageLayout NewLayout, VkCommandBuffer CommandBuffer =
nullptr);
90 void CopyBufferToImage(VkBuffer
Buffer, VkImage
Image,
91 uint32_t Width, uint32_t Height,
92 VkCommandBuffer CommandBuffer =
nullptr);
93 bool CreateBuffer(VkDeviceSize Size, VkBufferUsageFlags Usage,
95 VkDeviceMemory& Memory);
96 void CopyBuffer(VkBuffer Src, VkBuffer Dst, VkDeviceSize Size,
97 VkCommandBuffer CommandBuffer =
nullptr);
99 std::vector<VkDynamicState> Dynamic = { });
100 VkCommandBuffer CreateSingleUseCommandBuffer(
void);
101 void FinishSingleUseCommandBuffer(VkCommandBuffer &
Buffer);
102 VkSampler CreateSampler(VkFilter Min, VkFilter Mag);
103 VkPhysicalDeviceFeatures GetPhysicalDeviceFeatures()
const;
104 VkPhysicalDeviceLimits GetPhysicalDeviceLimits ()
const;
107 void DoFreeResources (
void);
108 void PhysicalDeviceLost (
void);
109 void LogicalDeviceLost (
void);
114 std::optional<uint32_t> FindMemoryType(uint32_t Filter, VkMemoryPropertyFlags
Properties);
116 void BeginFrame (
void);
117 void DebugVulkan (
void);
120 VkDevice m_device {
nullptr };
121 QVulkanFunctions* m_funcs {
nullptr };
122 QVulkanDeviceFunctions *m_devFuncs {
nullptr };
123 VkPhysicalDeviceFeatures m_phyDevFeatures { };
124 VkPhysicalDeviceLimits m_phyDevLimits { };
125 bool m_frameExpected {
false };
126 bool m_frameStarted {
false };