UraniumCompute 0.1.0
A GPU accelerated parallel task scheduler
VulkanKernel.h
1#pragma once
2#include <UnCompute/Backend/KernelBase.h>
3#include <UnCompute/Containers/HeapArray.h>
4#include <UnCompute/Memory/Memory.h>
5#include <UnCompute/VulkanBackend/VulkanInclude.h>
6
7namespace UN
8{
9 class VulkanResourceBinding;
10
11 class VulkanKernel final : public KernelBase
12 {
13 VkPipeline m_Pipeline = VK_NULL_HANDLE;
14 VkPipelineCache m_PipelineCache = VK_NULL_HANDLE;
15 VkShaderModule m_ShaderModule = VK_NULL_HANDLE;
16
17 Ptr<VulkanResourceBinding> m_pResourceBinding;
18 HeapArray<UInt32> m_ShaderBytecode;
19
20 protected:
21 ResultCode InitInternal(const DescriptorType& desc) override;
22
23 public:
24 explicit VulkanKernel(IComputeDevice* pDevice);
25 ~VulkanKernel() override;
26
27 void Reset() override;
28
29 [[nodiscard]] inline VkPipeline GetNativePipeline() const
30 {
31 return m_Pipeline;
32 }
33
34 [[nodiscard]] inline VulkanResourceBinding* GetResourceBinding() const
35 {
36 return m_pResourceBinding.Get();
37 }
38
39 inline static ResultCode Create(IComputeDevice* pDevice, IKernel** ppKernel)
40 {
41 *ppKernel = AllocateObject<VulkanKernel>(pDevice);
42 (*ppKernel)->AddRef();
43 return ResultCode::Success;
44 }
45 };
46} // namespace UN
Interface for all backend-specific compute devices.
Definition: IComputeDevice.h:38
An interface for compute kernel - a program running on the device.
Definition: IKernel.h:29
Definition: KernelBase.h:8
Shared smart pointer implementation that uses reference counting.
Definition: Ptr.h:44
T * Get() const
Get underlying raw pointer.
Definition: Ptr.h:219
Definition: VulkanKernel.h:12
void Reset() override
Reset the object to uninitialized state.
Definition: VulkanKernel.cpp:7
Definition: VulkanResourceBinding.h:8
Kernel descriptor.
Definition: IKernel.h:12