// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "RenderGraphDefinitions.h" #include "RHIUtilities.h" #include "CoreMinimal.h" #if RHI_RAYTRACING class FGPUScene; struct FRayTracingCullingParameters; struct FDFVector3; struct UE_DEPRECATED(5.6, "Use FRayTracingInstanceBufferBuilder instead.") FRayTracingInstanceDescriptor { uint32 GPUSceneInstanceOrTransformIndex; uint32 OutputDescriptorIndex; uint32 AccelerationStructureIndex; uint32 InstanceId; uint32 InstanceMaskAndFlags; uint32 InstanceContributionToHitGroupIndex; union { uint32 SceneInstanceIndexAndApplyLocalBoundsTransform; uint32 bApplyLocalBoundsTransform; }; }; struct UE_DEPRECATED(5.6, "Use FRayTracingInstanceBufferBuilder instead.") FRayTracingInstanceGroupEntryRef { uint32 GroupIndex; uint32 BaseIndexInGroup; }; PRAGMA_DISABLE_DEPRECATION_WARNINGS struct UE_DEPRECATED(5.6, "Use FRayTracingInstanceBufferBuilder instead.") FRayTracingSceneInitializationData { uint32 NumGPUInstanceGroups; uint32 NumCPUInstanceGroups; uint32 NumGPUInstanceDescriptors; uint32 NumCPUInstanceDescriptors; uint32 NumNativeGPUSceneInstances; uint32 NumNativeCPUInstances; UE_DEPRECATED(5.6, "No longer used. Use FShaderBindingTable instead.") uint32 TotalNumSegments; // index of each instance geometry in ReferencedGeometries TArray InstanceGeometryIndices; // base offset of each instance entries in the instance upload buffer TArray BaseUploadBufferOffsets; // prefix sum of `Instance.NumTransforms` for all instances in this scene TArray BaseInstancePrefixSum; // reference to corresponding instance group entry TArray InstanceGroupEntryRefs; // Unique list of geometries referenced by all instances in this scene. // Any referenced geometry is kept alive while the scene is alive. TArray ReferencedGeometries; UE_DEPRECATED(5.5, "No longer used as 'inline SBT' is managed using FShaderBindingTable.") TArray PerInstanceGeometries; FRayTracingSceneInitializationData() = default; FRayTracingSceneInitializationData(const FRayTracingSceneInitializationData&) = default; FRayTracingSceneInitializationData& operator=(const FRayTracingSceneInitializationData&) = default; FRayTracingSceneInitializationData(FRayTracingSceneInitializationData&&) = default; FRayTracingSceneInitializationData& operator=(FRayTracingSceneInitializationData&&) = default; ~FRayTracingSceneInitializationData() = default; }; UE_DEPRECATED(5.6, "Use FRayTracingInstanceBufferBuilder instead.") RENDERER_API FRayTracingSceneInitializationData BuildRayTracingSceneInitializationData(TConstArrayView Instances); UE_DEPRECATED(5.6, "Use FRayTracingInstanceBufferBuilder instead.") RENDERER_API void FillRayTracingInstanceUploadBuffer( FRayTracingSceneRHIRef RayTracingSceneRHI, FVector PreViewTranslation, TConstArrayView Instances, TConstArrayView InstanceGeometryIndices, TConstArrayView BaseUploadBufferOffsets, TConstArrayView BaseInstancePrefixSum, uint32 NumNativeGPUSceneInstances, uint32 NumNativeCPUInstances, TArrayView OutInstanceUploadData, TArrayView OutTransformData); UE_DEPRECATED(5.6, "Use FRayTracingInstanceBufferBuilder instead.") RENDERER_API void BuildRayTracingInstanceBuffer( FRHICommandList& RHICmdList, const FGPUScene* GPUScene, const FDFVector3& PreViewTranslation, FRHIUnorderedAccessView* InstancesUAV, FRHIShaderResourceView* InstanceUploadSRV, FRHIShaderResourceView* AccelerationStructureAddressesSRV, FRHIShaderResourceView* CPUInstanceTransformSRV, uint32 NumNativeGPUSceneInstances, uint32 NumNativeCPUInstances, const FRayTracingCullingParameters* CullingParameters, FRHIUnorderedAccessView* OutputStatsUAV, FRHIUnorderedAccessView* InstanceExtraDataUAV); PRAGMA_ENABLE_DEPRECATION_WARNINGS class FRayTracingInstanceBufferBuilder { public: RENDERER_API void Init(TConstArrayView InInstances, FVector InPreViewTranslation); RENDERER_API void FillRayTracingInstanceUploadBuffer(FRHICommandList& RHICmdList); RENDERER_API void FillAccelerationStructureAddressesBuffer(FRHICommandList& RHICmdList); RENDERER_API void BuildRayTracingInstanceBuffer( FRHICommandList& RHICmdList, const FGPUScene* GPUScene, const FRayTracingCullingParameters* CullingParameters, FRHIUnorderedAccessView* InstancesUAV, uint32 MaxNumInstances, bool bCompactOutput, FRHIUnorderedAccessView* OutputStatsUAV, uint32 OutputStatsOffset, FRHIUnorderedAccessView* InstanceExtraDataUAV); PRAGMA_DISABLE_DEPRECATION_WARNINGS RENDERER_API uint32 GetMaxNumInstances() const { return Data.NumNativeGPUSceneInstances + Data.NumNativeCPUInstances; } RENDERER_API TConstArrayView GetReferencedGeometries() const { return Data.ReferencedGeometries; } RENDERER_API TConstArrayView GetInstanceGeometryIndices() const { return Data.InstanceGeometryIndices; } RENDERER_API TConstArrayView GetBaseInstancePrefixSum() const { return Data.BaseInstancePrefixSum; } PRAGMA_ENABLE_DEPRECATION_WARNINGS private: TConstArrayView Instances; FVector PreViewTranslation; PRAGMA_DISABLE_DEPRECATION_WARNINGS FRayTracingSceneInitializationData Data; PRAGMA_ENABLE_DEPRECATION_WARNINGS FBufferRHIRef InstanceGroupUploadBuffer; FShaderResourceViewRHIRef InstanceGroupUploadSRV; FBufferRHIRef InstanceUploadBuffer; FShaderResourceViewRHIRef InstanceUploadSRV; FBufferRHIRef TransformUploadBuffer; FShaderResourceViewRHIRef TransformUploadSRV; FByteAddressBuffer AccelerationStructureAddressesBuffer; }; #endif // RHI_RAYTRACING