RavEngine
Loading...
Searching...
No Matches
Device.hpp
1#pragma once
2#include <memory>
3#include <string>
4#include <span>
5#include <filesystem>
6#include <RGL/CommandQueue.hpp>
7#include <RGL/Span.hpp>
8#include <RGL/Types.hpp>
9#include <RGL/ShaderLibrary.hpp>
10
11#undef CreateSemaphore
12
13struct ID3D12Device;
14
15namespace RGL {
16
17 union DeviceData {
18 struct {
19 ID3D12Device* device;
20 } d3d12Data;
21 struct {
22 void* device;
23 void* physicalDevice;
24 void* instance;
25 uint32_t queueFamilyIndex, queueIndex;
26 } vkData;
27 struct {
28 void* device;
29 } mtlData;
30 };
31
32 struct TextureView;
33 struct TextureUploadData;
34
35 struct IDevice {
36 virtual ~IDevice() {}
37 static RGLDevicePtr CreateSystemDefaultDevice();
38
39 virtual std::string GetBrandString() = 0;
40
41 virtual RGLSwapchainPtr CreateSwapchain(RGLSurfacePtr, RGLCommandQueuePtr presentQueue, int width, int height) = 0;
42
43 virtual RGLPipelineLayoutPtr CreatePipelineLayout(const PipelineLayoutDescriptor&) = 0;
44 virtual RGLRenderPipelinePtr CreateRenderPipeline(const RenderPipelineDescriptor&) = 0;
45
46 virtual RGLShaderLibraryPtr CreateShaderLibraryFromName(const std::string_view& name) = 0;
47 virtual RGLShaderLibraryPtr CreateDefaultShaderLibrary() = 0;
48 virtual RGLShaderLibraryPtr CreateShaderLibraryFromBytes(const std::span<const uint8_t>) = 0;
49 virtual RGLShaderLibraryPtr CreateShaderLibrarySourceCode(const std::string_view, const FromSourceConfig& config) = 0;
50 virtual RGLShaderLibraryPtr CreateShaderLibraryFromPath(const std::filesystem::path&) = 0;
51
52 virtual RGLBufferPtr CreateBuffer(const BufferConfig&) = 0;
53
54
55 virtual RGLTexturePtr CreateTextureWithData(const TextureConfig&, const TextureUploadData&) = 0;
56 virtual RGLTexturePtr CreateTexture(const TextureConfig&) = 0;
57 virtual RGLSamplerPtr CreateSampler(const SamplerConfig&) = 0;
58
59 virtual RGLCommandQueuePtr CreateCommandQueue(QueueType type) = 0;
60
61 virtual TextureView GetGlobalBindlessTextureHeap() const = 0;
62
63 virtual RGLComputePipelinePtr CreateComputePipeline(const struct ComputePipelineDescriptor&) = 0;
64
65 virtual size_t GetTotalVRAM() const = 0;
66 virtual size_t GetCurrentVRAMInUse() const = 0;
67
68 virtual DeviceData GetDeviceData() = 0;
69
70 virtual RGLFencePtr CreateFence(bool preSignaled) = 0;
71 virtual void BlockUntilIdle() = 0;
72 };
73}
Definition Buffer.hpp:21
Definition Pipeline.hpp:269
Definition ShaderLibrary.hpp:11
Definition Device.hpp:35
Definition Pipeline.hpp:59
Definition Pipeline.hpp:164
Definition Sampler.hpp:33
Definition Texture.hpp:138
Definition Texture.hpp:162
Definition Texture.hpp:43
Definition Device.hpp:17