RavEngine
Loading...
Searching...
No Matches
D3D12RenderPipeline.hpp
1#pragma once
2#include <RGL/Types.hpp>
3#include <RGL/Pipeline.hpp>
4#include "RGLD3D12.hpp"
5#include <directx/d3d12.h>
6#include <directx/d3dx12.h>
7#include <vector>
8#include <unordered_map>
9#include "D3D12PipelineShared.hpp"
10
11namespace RGL {
12
14 uint32_t binding;
15 uint32_t space = 0;
16 textureBindingKey(uint32_t binding) : binding(binding) {}
17 textureBindingKey(uint32_t binding, uint32_t space) : binding(binding), space(space) {}
18
19 bool operator==(const textureBindingKey& other) const {
20 return binding == other.binding && space == other.space;
21 }
22 };
23}
24
25namespace std {
26 template <> struct hash<RGL::textureBindingKey>
27 {
28 size_t operator()(const RGL::textureBindingKey& x) const
29 {
30 return size_t(x.binding) << 32 + x.space;
31 }
32 };
33}
34
35
36namespace RGL {
37 struct DeviceD3D12;
39 const std::shared_ptr<DeviceD3D12> owningDevice;
40 Microsoft::WRL::ComPtr<ID3D12RootSignature> rootSignature;
41 const PipelineLayoutDescriptor config;
42
44 uint32_t slot;
45 bool isUAV;
46 };
47
49 uint32_t slot;
50 bool isUAV;
51 };
52
53
54
55 std::unordered_map<textureBindingKey, bufferBindInfo> bufferBindingToRootSlot;
56 std::unordered_map<textureBindingKey, textureBindInfo> textureBindingToRootSlot;
57 std::unordered_map < uint32_t, uint32_t> samplerBindingtoRootSlot;
58
59 auto slotForBufferIdx(uint32_t bindingPos, bool isBindless = false) {
60 return bufferBindingToRootSlot.at({ bindingPos, isBindless? bindingPos : 0u }).slot;
61 }
62
63 auto slotForSamplerIdx(uint32_t bindingPos) {
64 return samplerBindingtoRootSlot.at(bindingPos);
65 }
66
67 auto slotForTextureIdx(uint32_t bindingPos, bool isBindless) {
68 return textureBindingToRootSlot.at({ bindingPos, isBindless? bindingPos : 0u });
69 }
70
71 bool bufferIdxIsUAV(uint32_t bindingPos) {
72 return bufferBindingToRootSlot.at(bindingPos).isUAV;
73 }
74
75 PipelineLayoutD3D12(decltype(owningDevice), const PipelineLayoutDescriptor&);
76 };
77
79 const std::shared_ptr<DeviceD3D12> owningDevice;
80 Microsoft::WRL::ComPtr<ID3D12PipelineState> pipelineState;
81 const std::shared_ptr<PipelineLayoutD3D12> pipelineLayout;
82 const D3D12_PRIMITIVE_TOPOLOGY overrideMode;
83
84 BufferBindingStore vsBufferBindings, fsBufferBindings;
85
86 RenderPipelineD3D12(decltype(owningDevice), const RenderPipelineDescriptor&);
87 };
88}
Definition Pipeline.hpp:103
Definition Pipeline.hpp:274
Definition D3D12RenderPipeline.hpp:43
Definition D3D12RenderPipeline.hpp:48
Definition D3D12RenderPipeline.hpp:38
Definition Pipeline.hpp:59
Definition D3D12RenderPipeline.hpp:78
Definition Pipeline.hpp:164
Definition D3D12RenderPipeline.hpp:13