Skip to content

Commit a093dcf

Browse files
committed
DirectX Raytracing samples
1 parent a3be0c1 commit a093dcf

File tree

220 files changed

+59828
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

220 files changed

+59828
-1
lines changed
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
///////////////////////////////////////////////////////////////////////////////
2+
// //
3+
// D3D12RaytracingFallback.h //
4+
// //
5+
// Provides a simplified interface for the DX12 Ray Tracing interface that //
6+
// will use native DX12 ray tracing when available. For drivers that do not //
7+
// support ray tracing, a fallback compute-shader based solution will be //
8+
// used instead. //
9+
// //
10+
///////////////////////////////////////////////////////////////////////////////
11+
12+
#pragma once
13+
#include "d3d12_1.h"
14+
15+
struct EMULATED_GPU_POINTER
16+
{
17+
UINT32 OffsetInBytes;
18+
UINT32 DescriptorHeapIndex;
19+
};
20+
21+
struct WRAPPED_GPU_POINTER
22+
{
23+
union
24+
{
25+
EMULATED_GPU_POINTER EmulatedGpuPtr;
26+
D3D12_GPU_VIRTUAL_ADDRESS GpuVA;
27+
};
28+
29+
WRAPPED_GPU_POINTER operator+(UINT64 offset)
30+
{
31+
WRAPPED_GPU_POINTER pointer = *this;
32+
pointer.GpuVA += offset;
33+
return pointer;
34+
}
35+
};
36+
37+
typedef struct D3D12_RAYTRACING_FALLBACK_INSTANCE_DESC
38+
{
39+
FLOAT Transform[3][4];
40+
UINT InstanceID : 24;
41+
UINT InstanceMask : 8;
42+
UINT InstanceContributionToHitGroupIndex : 24;
43+
UINT Flags : 8;
44+
WRAPPED_GPU_POINTER AccelerationStructure;
45+
} D3D12_RAYTRACING_FALLBACK_INSTANCE_DESC;
46+
47+
class
48+
_declspec(uuid("539e5c40-df25-4c7d-81d8-6537f54306ed"))
49+
ID3D12RaytracingFallbackStateObject : public IUnknown
50+
{
51+
public:
52+
virtual ~ID3D12RaytracingFallbackStateObject() {};
53+
54+
virtual void *STDMETHODCALLTYPE GetShaderIdentifier(
55+
_In_ LPCWSTR pExportName) = 0;
56+
57+
virtual UINT64 STDMETHODCALLTYPE GetShaderStackSize(
58+
_In_ LPCWSTR pExportName) = 0;
59+
60+
virtual UINT64 STDMETHODCALLTYPE GetPipelineStackSize(void) = 0;
61+
62+
virtual void STDMETHODCALLTYPE SetPipelineStackSize(
63+
UINT64 PipelineStackSizeInBytes) = 0;
64+
65+
virtual ID3D12StateObject *GetStateObject() = 0;
66+
};
67+
68+
class
69+
_declspec(uuid("348a2a6b-6760-4b78-a9a7-1758b6f78d46"))
70+
ID3D12RaytracingFallbackCommandList : public IUnknown
71+
{
72+
public:
73+
virtual ~ID3D12RaytracingFallbackCommandList() {}
74+
75+
virtual void BuildRaytracingAccelerationStructure(
76+
_In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
77+
_In_ UINT NumPostbuildInfoDescs,
78+
_In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs) = 0;
79+
80+
virtual void STDMETHODCALLTYPE EmitRaytracingAccelerationStructurePostbuildInfo(
81+
_In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
82+
_In_ UINT NumSourceAccelerationStructures,
83+
_In_reads_(NumSourceAccelerationStructures) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData) = 0;
84+
85+
virtual void STDMETHODCALLTYPE CopyRaytracingAccelerationStructure(
86+
_In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
87+
_In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
88+
_In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode) = 0;
89+
90+
virtual void STDMETHODCALLTYPE SetDescriptorHeaps(
91+
_In_ UINT NumDescriptorHeaps,
92+
_In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps) = 0;
93+
94+
virtual void STDMETHODCALLTYPE SetTopLevelAccelerationStructure(
95+
_In_ UINT RootParameterIndex,
96+
_In_ WRAPPED_GPU_POINTER BufferLocation) = 0;
97+
98+
virtual void STDMETHODCALLTYPE SetPipelineState1(
99+
_In_ ID3D12RaytracingFallbackStateObject *pStateObject) = 0;
100+
101+
virtual void STDMETHODCALLTYPE DispatchRays(
102+
_In_ const D3D12_DISPATCH_RAYS_DESC *pDesc) = 0;
103+
};
104+
105+
class
106+
_declspec(uuid("0a662ea0-ab43-423a-848f-4824ae4b25ba"))
107+
ID3D12RaytracingFallbackDevice : public IUnknown
108+
{
109+
public:
110+
virtual ~ID3D12RaytracingFallbackDevice() {};
111+
112+
virtual bool UsingRaytracingDriver() = 0;
113+
114+
// Automatically determine how to create WRAPPED_GPU_POINTER based on UsingRaytracingDriver()
115+
virtual WRAPPED_GPU_POINTER GetWrappedPointerSimple(UINT32 DescriptorHeapIndex, D3D12_GPU_VIRTUAL_ADDRESS GpuVA) = 0;
116+
117+
// Pre-condition: UsingRaytracingDriver() must be false
118+
virtual WRAPPED_GPU_POINTER GetWrappedPointerFromDescriptorHeapIndex(UINT32 DescriptorHeapIndex, UINT32 OffsetInBytes = 0) = 0;
119+
120+
// Pre-condition: UsingRaytracingDriver() must be true
121+
virtual WRAPPED_GPU_POINTER GetWrappedPointerFromGpuVA(D3D12_GPU_VIRTUAL_ADDRESS gpuVA) = 0;
122+
123+
virtual D3D12_RESOURCE_STATES GetAccelerationStructureResourceState() = 0;
124+
125+
virtual UINT STDMETHODCALLTYPE GetShaderIdentifierSize(void) = 0;
126+
127+
virtual HRESULT STDMETHODCALLTYPE CreateStateObject(
128+
const D3D12_STATE_OBJECT_DESC *pDesc,
129+
REFIID riid,
130+
_COM_Outptr_ void **ppStateObject) = 0;
131+
132+
virtual void STDMETHODCALLTYPE GetRaytracingAccelerationStructurePrebuildInfo(
133+
_In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
134+
_Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo) = 0;
135+
136+
virtual void QueryRaytracingCommandList(
137+
ID3D12GraphicsCommandList *pCommandList,
138+
REFIID riid,
139+
_COM_Outptr_ void **ppRaytracingCommandList) = 0;
140+
141+
virtual HRESULT STDMETHODCALLTYPE CreateRootSignature(
142+
_In_ UINT nodeMask,
143+
_In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature,
144+
_In_ SIZE_T blobLengthInBytes,
145+
REFIID riid,
146+
_COM_Outptr_ void **ppvRootSignature) = 0;
147+
148+
virtual HRESULT D3D12SerializeVersionedRootSignature(
149+
_In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature,
150+
_Out_ ID3DBlob** ppBlob,
151+
_Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) = 0;
152+
153+
virtual HRESULT WINAPI D3D12SerializeRootSignature(
154+
_In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature,
155+
_In_ D3D_ROOT_SIGNATURE_VERSION Version,
156+
_Out_ ID3DBlob** ppBlob,
157+
_Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) = 0;
158+
};
159+
160+
enum CreateRaytracingFallbackDeviceFlags
161+
{
162+
None = 0x0,
163+
ForceComputeFallback = 0x1,
164+
EnableRootDescriptorsInShaderRecords = 0x2
165+
};
166+
167+
HRESULT D3D12CreateRaytracingFallbackDevice(
168+
_In_ ID3D12Device *pDevice,
169+
_In_ DWORD createRaytracingFallbackDeviceFlags,
170+
_In_ UINT NodeMask,
171+
_In_ REFIID riid,
172+
_COM_Outptr_opt_ void** ppDevice);

0 commit comments

Comments
 (0)