79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <vulkan/vulkan.h>
|
|
|
|
#include <cstdint>
|
|
#include <vector>
|
|
|
|
struct V210ComputeFeed
|
|
{
|
|
VkBuffer v210Buffer = VK_NULL_HANDLE;
|
|
VkDeviceMemory v210BufferMemory = VK_NULL_HANDLE;
|
|
void* v210MappedData = nullptr;
|
|
|
|
VkImage image = VK_NULL_HANDLE;
|
|
VkDeviceMemory imageMemory = VK_NULL_HANDLE;
|
|
VkImageView imageView = VK_NULL_HANDLE;
|
|
VkSampler sampler = VK_NULL_HANDLE;
|
|
|
|
VkDescriptorSet descriptorSet = VK_NULL_HANDLE;
|
|
|
|
uint32_t srcWidth = 0;
|
|
uint32_t srcHeight = 0;
|
|
uint32_t srcStride = 0;
|
|
};
|
|
|
|
class V210ComputeDecoder
|
|
{
|
|
public:
|
|
void init(
|
|
VkDevice device,
|
|
uint32_t feedCount,
|
|
uint32_t dstWidth,
|
|
uint32_t dstHeight);
|
|
|
|
void destroy();
|
|
|
|
void createFeedResources(
|
|
VkPhysicalDevice physicalDevice,
|
|
VkCommandPool commandPool,
|
|
VkQueue graphicsQueue,
|
|
uint32_t feedIndex,
|
|
uint32_t srcWidth,
|
|
uint32_t srcHeight,
|
|
uint32_t srcStride,
|
|
uint32_t dstWidth,
|
|
uint32_t dstHeight,
|
|
V210ComputeFeed& feed);
|
|
|
|
void destroyFeedResources(V210ComputeFeed& feed);
|
|
|
|
void updateDescriptorSet(
|
|
uint32_t feedIndex,
|
|
const V210ComputeFeed& feed);
|
|
|
|
void recordDecode(
|
|
VkCommandBuffer cmdBuf,
|
|
uint32_t feedIndex,
|
|
uint32_t srcWidth,
|
|
uint32_t srcHeight,
|
|
uint32_t srcStride,
|
|
uint32_t dstWidth,
|
|
uint32_t dstHeight) const;
|
|
|
|
void recordOutputReadyForSampling(
|
|
VkCommandBuffer cmdBuf,
|
|
const V210ComputeFeed& feed) const;
|
|
|
|
private:
|
|
VkDevice m_device = VK_NULL_HANDLE;
|
|
VkDescriptorSetLayout m_descriptorSetLayout = VK_NULL_HANDLE;
|
|
VkPipelineLayout m_pipelineLayout = VK_NULL_HANDLE;
|
|
VkPipeline m_pipeline = VK_NULL_HANDLE;
|
|
VkDescriptorPool m_descriptorPool = VK_NULL_HANDLE;
|
|
uint32_t m_dstWidth = 0;
|
|
uint32_t m_dstHeight = 0;
|
|
|
|
std::vector<VkDescriptorSet> m_descSets;
|
|
};
|