UraniumCompute 0.1.0
A GPU accelerated parallel task scheduler
VulkanDeviceFactory.h
1#pragma once
2#include <UnCompute/Acceleration/AdapterInfo.h>
3#include <UnCompute/Acceleration/IDeviceFactory.h>
4#include <UnCompute/Backend/IDeviceObject.h>
5#include <UnCompute/Containers/ArraySlice.h>
6#include <UnCompute/Containers/HeapArray.h>
7#include <UnCompute/VulkanBackend/VulkanInclude.h>
8
9namespace UN
10{
12 class VulkanDeviceFactory final : public Object<IDeviceFactory>
13 {
14 VkInstance m_Instance;
15 VkDebugReportCallbackEXT m_Debug;
16
17 HeapArray<AdapterInfo> m_Adapters;
18 HeapArray<VkPhysicalDevice> m_PhysicalDevices;
19 HeapArray<VkPhysicalDeviceProperties> m_PhysicalDeviceProperties;
20
21 public:
22 ~VulkanDeviceFactory() override;
23
25 ResultCode Init(const DeviceFactoryDesc& desc) override;
26 void Reset() override;
27
29
30 [[nodiscard]] inline ArraySlice<const VkPhysicalDevice> GetVulkanAdapters() const
31 {
32 return m_PhysicalDevices;
33 }
34
35 [[nodiscard]] inline ArraySlice<const VkPhysicalDeviceProperties> GetVulkanAdapterProperties() const
36 {
37 return m_PhysicalDeviceProperties;
38 }
39
40 [[nodiscard]] BackendKind GetBackendKind() const override;
41 ResultCode CreateDevice(IComputeDevice** ppDevice) override;
42 ResultCode CreateKernelCompiler(IKernelCompiler** ppCompiler) override;
43
44 static ResultCode Create(VulkanDeviceFactory** ppInstance);
45 };
46} // namespace UN
This class represents a non-owning slice of contiguously stored elements.
Definition: ArraySlice.h:12
Fixed-size heap-allocated array.
Definition: HeapArray.h:14
Interface for all backend-specific compute devices.
Definition: IComputeDevice.h:38
An interface for kernel compiler that is used for compiling compute shader source into backend's nati...
Definition: IKernelCompiler.h:74
Base class for dynamic reference counted objects.
Definition: Object.h:51
This class holds a Vulkan API instance.
Definition: VulkanDeviceFactory.h:13
void Reset() override
Reset the compute device factory.
Definition: VulkanDeviceFactory.cpp:175
ArraySlice< const AdapterInfo > EnumerateAdapters() override
Get all adapters supported by the specified backend.
Definition: VulkanDeviceFactory.cpp:196
ResultCode Init(const DeviceFactoryDesc &desc) override
Create a VkInstance, VkDebugReportCallbackEXT (if needed) and get physical device properties.
Definition: VulkanDeviceFactory.cpp:55
BackendKind GetBackendKind() const override
Get kind of backend for the compute devices created by this factory.
Definition: VulkanDeviceFactory.cpp:201
ResultCode CreateDevice(IComputeDevice **ppDevice) override
Create a compute device.
Definition: VulkanDeviceFactory.cpp:206
ResultCode CreateKernelCompiler(IKernelCompiler **ppCompiler) override
Create a kernel compiler.
Definition: VulkanDeviceFactory.cpp:221
IDeviceFactory descriptor.
Definition: IDeviceFactory.h:19