Files
UnrealEngine/Engine/Shaders/Private/Lumen/LumenHardwareRayTracingPlatformCommon.ush
2025-05-18 13:04:45 +08:00

69 lines
2.4 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#if RAY_TRACING_USE_SER
#define NV_HITOBJECT_USE_MACRO_API
#include "/Engine/Shared/ThirdParty/NVIDIA/nvHLSLExtns.h"
#endif
#ifdef OVERRIDE_LUMENHARDWARERAYTRACINGPLATFORMCOMMON_USH
#include "/Platform/Private/LumenHardwareRayTracingPlatformCommon.ush"
#else
#define TraceLumenRay(TLAS, RayFlags, InstanceInclusionMask, ShaderSlot, NumShaderSlots, MissIndex, Ray, InOutPayload, OutBookmark){\
TraceRay(TLAS, RayFlags, InstanceInclusionMask, ShaderSlot, NumShaderSlots, MissIndex, Ray, InOutPayload);\
}
void TraceLumenShadingRay(
RaytracingAccelerationStructure AccelerationStructure,
uint RayFlags,
uint InstanceInclusionMask,
uint RayContributionToHitGroupIndex,
uint MultiplierForGeometryContributionToHitGroupIndex,
uint MissShaderIndex,
RayDesc Ray,
inout FPackedMaterialClosestHitPayload Payload)
{
#if RAY_TRACING_USE_SER
NvHitObject Hit;
NvTraceRayHitObject(AccelerationStructure, RayFlags, InstanceInclusionMask, RayContributionToHitGroupIndex, MultiplierForGeometryContributionToHitGroupIndex, MissShaderIndex, Ray, Payload, Hit);
NvReorderThread(Hit);
NvInvokeHitObject(AccelerationStructure, Hit, Payload);
#else
TraceRay(AccelerationStructure, RayFlags, InstanceInclusionMask, RayContributionToHitGroupIndex, MultiplierForGeometryContributionToHitGroupIndex, MissShaderIndex, Ray, Payload);
#endif
}
void TraceLumenShadingRay(
RaytracingAccelerationStructure AccelerationStructure,
uint RayFlags,
uint InstanceInclusionMask,
uint RayContributionToHitGroupIndex,
uint MultiplierForGeometryContributionToHitGroupIndex,
uint MissShaderIndex,
RayDesc Ray,
inout FLumenRayHitBookmark Bookmark,
inout FPackedMaterialClosestHitPayload Payload)
{
#if RAY_TRACING_USE_SER
NvHitObject Hit;
NvTraceRayHitObject(AccelerationStructure, RayFlags, InstanceInclusionMask, RayContributionToHitGroupIndex, MultiplierForGeometryContributionToHitGroupIndex, MissShaderIndex, Ray, Payload, Hit);
NvReorderThread(Hit);
NvInvokeHitObject(AccelerationStructure, Hit, Payload);
#else
TraceRay(AccelerationStructure, RayFlags, InstanceInclusionMask, RayContributionToHitGroupIndex, MultiplierForGeometryContributionToHitGroupIndex, MissShaderIndex, Ray, Payload);
#endif
}
#ifndef LUMEN_HARDWARE_RAYTRACING
float3 ComputeWorldNormal(uint PrimitiveIndex)
{
return GetGeometryNormalFromTriangleBaseAttributes(PrimitiveIndex);
}
#endif // LUMEN_HARDWARE_RAYTRACING
#endif