* Load and create the DXR Ray Generation program and global root signature. */
| 1190 | * Load and create the DXR Ray Generation program and global root signature. |
| 1191 | */ |
| 1192 | void CreateRTProgram(D3D12Global &d3d, DXRGlobal &dxr, D3D12ShaderCompilerInfo &shaderCompiler) |
| 1193 | { |
| 1194 | // Load and compile the ray generation shader |
| 1195 | dxr.rtProgram = RtProgram(D3D12ShaderInfo(L"shaders\\PathTracer.hlsl", L"", L"lib_6_3")); |
| 1196 | D3DShaders::CompileShader(shaderCompiler, dxr.rtProgram); |
| 1197 | |
| 1198 | // Describe the global root signature |
| 1199 | D3D12_DESCRIPTOR_RANGE ranges[6]; |
| 1200 | |
| 1201 | ranges[0].BaseShaderRegister = 0; |
| 1202 | ranges[0].NumDescriptors = UINT(DescriptorHeapConstants::CBTotal); |
| 1203 | ranges[0].RegisterSpace = 0; |
| 1204 | ranges[0].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_CBV; |
| 1205 | ranges[0].OffsetInDescriptorsFromTableStart = UINT(DescriptorHeapConstants::CBStart); |
| 1206 | |
| 1207 | ranges[1].BaseShaderRegister = 0; |
| 1208 | ranges[1].NumDescriptors = UINT(DescriptorHeapConstants::UAV0Total); |
| 1209 | ranges[1].RegisterSpace = 0; |
| 1210 | ranges[1].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; |
| 1211 | ranges[1].OffsetInDescriptorsFromTableStart = UINT(DescriptorHeapConstants::UAV0Start); |
| 1212 | |
| 1213 | ranges[2].BaseShaderRegister = 0; |
| 1214 | ranges[2].NumDescriptors = UINT(DescriptorHeapConstants::SRV0Total); |
| 1215 | ranges[2].RegisterSpace = 0; |
| 1216 | ranges[2].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; |
| 1217 | ranges[2].OffsetInDescriptorsFromTableStart = UINT(DescriptorHeapConstants::SRV0Start); |
| 1218 | |
| 1219 | ranges[3].BaseShaderRegister = 0; |
| 1220 | ranges[3].NumDescriptors = UINT(DescriptorHeapConstants::SRV1Total); |
| 1221 | ranges[3].RegisterSpace = 1; |
| 1222 | ranges[3].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; |
| 1223 | ranges[3].OffsetInDescriptorsFromTableStart = UINT(DescriptorHeapConstants::SRV1Start); |
| 1224 | |
| 1225 | ranges[4].BaseShaderRegister = 0; |
| 1226 | ranges[4].NumDescriptors = UINT(DescriptorHeapConstants::SRV2Total); |
| 1227 | ranges[4].RegisterSpace = 2; |
| 1228 | ranges[4].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; |
| 1229 | ranges[4].OffsetInDescriptorsFromTableStart = UINT(DescriptorHeapConstants::SRV2Start); |
| 1230 | |
| 1231 | ranges[5].BaseShaderRegister = 0; |
| 1232 | ranges[5].NumDescriptors = UINT(DescriptorHeapConstants::SRV3Total); |
| 1233 | ranges[5].RegisterSpace = 3; |
| 1234 | ranges[5].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; |
| 1235 | ranges[5].OffsetInDescriptorsFromTableStart = UINT(DescriptorHeapConstants::SRV3Start); |
| 1236 | |
| 1237 | D3D12_ROOT_PARAMETER param0 = {}; |
| 1238 | param0.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; |
| 1239 | param0.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; |
| 1240 | param0.DescriptorTable.NumDescriptorRanges = _countof(ranges); |
| 1241 | param0.DescriptorTable.pDescriptorRanges = ranges; |
| 1242 | |
| 1243 | D3D12_ROOT_PARAMETER rootParams[1] = { param0 }; |
| 1244 | |
| 1245 | D3D12_STATIC_SAMPLER_DESC staticSampler = {}; |
| 1246 | staticSampler.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; |
| 1247 | staticSampler.AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; |
| 1248 | staticSampler.AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; |
| 1249 | staticSampler.AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; |
no test coverage detected