MythTV master
mythvertexbuffervulkan.cpp
Go to the documentation of this file.
1// MythTV
3
4#define LOC QString("VulkanBuf: ")
5
7{
8 auto* result = new MythBufferVulkan(Vulkan, Size);
9 if (result && !result->IsValidVulkan())
10 {
11 delete result;
12 result = nullptr;
13 }
14 return result;
15}
16
18 : MythVulkanObject(Vulkan),
19 m_bufferSize(Size)
20{
21 if (m_vulkanValid && m_vulkanRender->CreateBuffer(Size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
22 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
24 {
25 if (m_vulkanRender->CreateBuffer(Size, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
26 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
28 {
29 m_vulkanValid = m_vulkanFuncs->vkMapMemory(m_vulkanDevice, m_stagingMemory, 0, Size, 0, &m_mappedMemory) == VK_SUCCESS;
30 }
31 }
32}
33
35{
36 if (m_vulkanValid)
37 {
38 m_vulkanFuncs->vkDestroyBuffer(m_vulkanDevice, m_stagingBuffer, nullptr);
39 m_vulkanFuncs->vkFreeMemory(m_vulkanDevice, m_stagingMemory, nullptr);
40 m_vulkanFuncs->vkDestroyBuffer(m_vulkanDevice, m_buffer, nullptr);
41 m_vulkanFuncs->vkFreeMemory(m_vulkanDevice, m_bufferMemory, nullptr);
42 }
43}
44
45VkBuffer MythBufferVulkan::GetBuffer(void) const
46{
47 return m_buffer;
48}
49
51{
52 return m_mappedMemory;
53}
54
55void MythBufferVulkan::Update(VkCommandBuffer CommandBuffer)
56{
58}
59
61{
62 auto* result = new MythVertexBufferVulkan(Vulkan, Size);
63 if (result && !result->IsValidVulkan())
64 {
65 delete result;
66 result = nullptr;
67 }
68 return result;
69}
70
72 : MythBufferVulkan(Vulkan, Size)
73{
74}
75
76void MythVertexBufferVulkan::Update(const QRect Source, const QRect Dest,
77 int Alpha, int Rotation, VkCommandBuffer CommandBuffer)
78{
81 m_dest = Dest;
82 m_alpha = Alpha;
83 m_rotation = Rotation;
84}
85
86bool MythVertexBufferVulkan::NeedsUpdate(const QRect Source, const QRect Dest, int Alpha, int Rotation)
87{
88 return !(m_source == Source) || !(m_dest == Dest) || (m_alpha != Alpha) || (m_rotation != Rotation);
89}
VkBuffer GetBuffer() const
VkDeviceMemory m_bufferMemory
MythBufferVulkan(MythVulkanObject *Vulkan, VkDeviceSize Size)
void * GetMappedMemory() const
VkDeviceMemory m_stagingMemory
static MythBufferVulkan * Create(MythVulkanObject *Vulkan, VkDeviceSize Size)
void Update(VkCommandBuffer CommandBuffer=nullptr)
bool CreateBuffer(VkDeviceSize Size, VkBufferUsageFlags Usage, VkMemoryPropertyFlags Properties, VkBuffer &Buffer, VkDeviceMemory &Memory)
void CopyBuffer(VkBuffer Src, VkBuffer Dst, VkDeviceSize Size, VkCommandBuffer CommandBuffer=nullptr)
void Update(QRect Source, QRect Dest, int Alpha, int Rotation, VkCommandBuffer CommandBuffer=nullptr)
bool NeedsUpdate(QRect Source, QRect Dest, int Alpha, int Rotation)
MythVertexBufferVulkan(MythVulkanObject *Vulkan, VkDeviceSize Size)
static MythVertexBufferVulkan * Create(MythVulkanObject *Vulkan, VkDeviceSize Size)
QVulkanDeviceFunctions * m_vulkanFuncs
MythRenderVulkan * m_vulkanRender
static QString Source(const QNetworkRequest &request)
Definition: netstream.cpp:139