RavEngine
Loading...
Searching...
No Matches
D3D12Texture.hpp
1#pragma once
2#include <RGL/Types.hpp>
3#include <RGL/Texture.hpp>
4#include "RGLD3D12.hpp"
5#include "D3D12TrackedResource.hpp"
6#include <directx/d3d12.h>
7#include <RGL/Span.hpp>
8#undef max
9
10namespace D3D12MA {
11 struct Allocation;
12}
13
14namespace RGL {
15 struct IDevice;
16 struct DeviceD3D12;
17 struct TextureD3D12 : public ITexture, public D3D12TrackedResource {
18 friend class SwapchainD3D12;
19 Microsoft::WRL::ComPtr<ID3D12Resource> texture;
20 const std::shared_ptr<DeviceD3D12> owningDevice;
21 D3D12MA::Allocation* allocation = nullptr;
22
23 constexpr static UINT unallocated = std::numeric_limits<UINT>::max();
24
25 UINT dsvIDX = unallocated, rtvIDX = unallocated, srvIDX = unallocated, uavIDX = unallocated;
26
27 // also add a UAVallocated
28 bool dsvAllocated() const{
29 return dsvIDX != unallocated;
30 }
31 bool rtvAllocated() const{
32 return rtvIDX != unallocated;
33 }
34 bool srvAllocated() const{
35 return srvIDX != unallocated;
36 }
37 bool uavAllocated() const {
38 return uavIDX != unallocated;
39 }
40
41 std::vector<UINT> mipHeapIndicesSRV, mipHeapIndicesUAV, mipHeapIndicesRTV;
42 uint32_t numMips = 1;
43 uint32_t numLayers = 1;
44
45 TextureD3D12(decltype(texture) image, const Dimension& size, decltype(rtvIDX), decltype(owningDevice));
46 TextureD3D12(decltype(texture) image, const TextureConfig& config, std::shared_ptr<IDevice> device, D3D12_RESOURCE_STATES nativeStateOverride = D3D12_RESOURCE_STATE_COMMON); // for externally-managed rendertargets
47 TextureD3D12(decltype(owningDevice), const TextureConfig&, const TextureUploadData&);
48 TextureD3D12(decltype(owningDevice), const TextureConfig&);
49
50 void PlaceInHeaps(const std::shared_ptr<RGL::DeviceD3D12>& owningDevice, DXGI_FORMAT format, const RGL::TextureConfig& config);
51
52 uint32_t SubresourceIndexForMipLayer(uint32_t mip, uint32_t layer) const;
53
54 TextureView GetDefaultView() const final;
55 TextureView GetViewForMip(uint32_t mip) const final;
56
57 RGLCustomTextureViewPtr MakeCustomTextureView(const CustomTextureViewConfig& config) const;
58
59 Dimension GetSize() const final;
60 virtual ~TextureD3D12();
61
62 uint8_t GetNumMips() const final {
63 return numMips;
64 }
65
66 ID3D12Resource* GetResource() const final {
67 return texture.Get();
68 }
69
70 std::string debugName;
71
72 DXGI_FORMAT textureFormat = DXGI_FORMAT_UNKNOWN;
73 };
74
76
77 TextureView GetView() const;
78 };
79}
Definition Texture.hpp:152
Definition Texture.hpp:168
Definition Texture.hpp:157
Definition D3D12Texture.hpp:75
Definition D3D12TrackedResource.hpp:6
Definition Texture.hpp:25
Definition D3D12Swapchain.hpp:15
Definition Texture.hpp:138
Definition D3D12Texture.hpp:17
Definition Texture.hpp:162
Definition Texture.hpp:43