RavEngine
Loading...
Searching...
No Matches
D3D12Buffer.hpp
1#pragma once
2#include <RGL/Types.hpp>
3#include <RGL/Buffer.hpp>
4#include <directx/d3d12.h>
5#include "RGLD3D12.hpp"
6#include "D3D12TrackedResource.hpp"
7#include <directx/d3dx12.h>
8#include <memory>
9#include <limits>
10
11namespace RGL {
12 struct DeviceD3D12;
13
14 struct BufferD3D12 : public IBuffer, public D3D12TrackedResource {
15 Microsoft::WRL::ComPtr<ID3D12Resource> buffer;
16 D3D12_VERTEX_BUFFER_VIEW vertexBufferView{};
17 D3D12_INDEX_BUFFER_VIEW indexBufferView{}; // TODO: Union or something to optimize this
18 BufferConfig::Type myType;
19 const RGL::BufferAccess accessType;
20 bool isWritable = false;
21 bool canBeTransitioned = true;
22 uint32_t srvIdx = 0, uavIdx = std::numeric_limits<uint32_t>::max();
23 std::string debugName;
24
25 const std::shared_ptr<DeviceD3D12> owningDevice;
26 MutableSpan mappedMemory;
27
28 BufferD3D12(decltype(owningDevice), const BufferConfig&);
29
33 void MapMemory() final;
34
38 void UnmapMemory() final;
39
44 void UpdateBufferData(untyped_span newData, decltype(BufferConfig::nElements) offset = 0) final;
45
50 void SetBufferData(untyped_span data, decltype(BufferConfig::nElements) offset = 0) final;
51
52 decltype(BufferConfig::nElements) getBufferSize() const;
53
54 void* GetMappedDataPtr() final;
55
56 void SignalRangeChanged(const Range&) final;
57
58 virtual ~BufferD3D12();
59
60 uint32_t GetReadonlyBindlessGPUHandle() const final;
61 uint32_t GetReadwriteBindlessGPUHandle() const final;
62
63 ID3D12Resource* GetResource() const final {
64 return buffer.Get();
65 }
66 };
67}
Definition Span.hpp:11
Definition Buffer.hpp:25
Definition Buffer.hpp:21
Definition D3D12Buffer.hpp:14
void MapMemory() final
void SetBufferData(untyped_span data, decltype(BufferConfig::nElements) offset=0) final
void UnmapMemory() final
void UpdateBufferData(untyped_span newData, decltype(BufferConfig::nElements) offset=0) final
Definition D3D12TrackedResource.hpp:6
Definition Buffer.hpp:50
Definition Span.hpp:6
Definition Buffer.hpp:45