#pragma once #include #include #include 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 m_descSets; };