Files
UnrealEngineUWP/Engine/Source/Runtime/RenderCore/Public/RayGenShaderUtils.h
yuriy odonnell 4268a6dfa1 Deprecate FRayTracingShaderBindingsWriter and use FRHIBatchedShaderParameters instead in the high-level rendering code
#jira UE-215898
#rb christopher.waters

[CL 34045035 by yuriy odonnell in ue5-main branch]
2024-05-31 16:55:53 -04:00

49 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
RayGenShaderUtils.h: Utilities for ray generation shaders shaders.
=============================================================================*/
#pragma once
#include "RHIDefinitions.h"
#if RHI_RAYTRACING
#include "RenderResource.h"
#include "RenderGraphUtils.h"
#include "PipelineStateCache.h"
#include "ShaderParameters.h"
/** All utils for ray generation shaders. */
struct FRayGenShaderUtils
{
/** Dispatch a ray generation shader to render graph builder with its parameters. */
template<typename TShaderClass>
static inline void AddRayTraceDispatchPass(
FRDGBuilder& GraphBuilder,
FRDGEventName&& PassName,
const TShaderRef<TShaderClass>& RayGenerationShader,
typename TShaderClass::FParameters* Parameters,
FIntPoint Resolution)
{
ClearUnusedGraphResources(RayGenerationShader, Parameters);
GraphBuilder.AddPass(
Forward<FRDGEventName>(PassName),
Parameters,
ERDGPassFlags::Compute,
[RayGenerationShader, Parameters, Resolution](FRHICommandList& RHICmdList)
{
FRHIBatchedShaderParameters& GlobalResources = RHICmdList.GetScratchShaderParameters();
SetShaderParameters(GlobalResources, RayGenerationShader, *Parameters);
FRayTracingPipelineStateInitializer Initializer;
FRHIRayTracingShader* RayGenShaderTable[] = { RayGenerationShader.GetRayTracingShader() };
Initializer.SetRayGenShaderTable(RayGenShaderTable);
FRayTracingPipelineState* Pipeline = PipelineStateCache::GetAndOrCreateRayTracingPipelineState(RHICmdList, Initializer);
RHICmdList.RayTraceDispatch(Pipeline, RayGenerationShader.GetRayTracingShader(), GlobalResources, Resolution.X, Resolution.Y);
});
}
};
#endif //RHI_RAYTRACINGO