Files
UnrealEngineUWP/Engine/Source/Runtime/RenderCore/Public/RayGenShaderUtils.h
Chris Gagnon d7d4ee7b38 Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) at CL 7473521
#rb none
#fyi Max.Chen, Tim.Gautier

[CL 7614721 by Chris Gagnon in Dev-Editor branch]
2019-07-24 15:05:52 -04:00

46 lines
1.6 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
RayGenShaderUtils.h: Utilities for ray generation shaders shaders.
=============================================================================*/
#pragma once
#include "RenderResource.h"
#include "RenderGraphUtils.h"
#include "PipelineStateCache.h"
/** All utils for ray generation shaders. */
struct RENDERCORE_API 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 TShaderClass* RayGenerationShader,
typename TShaderClass::FParameters* Parameters,
FIntPoint Resolution)
{
ClearUnusedGraphResources(RayGenerationShader, Parameters);
GraphBuilder.AddPass(
Forward<FRDGEventName>(PassName),
Parameters,
ERDGPassFlags::Compute,
[RayGenerationShader, Parameters, Resolution](FRHICommandList& RHICmdList)
{
FRayTracingShaderBindingsWriter GlobalResources;
SetShaderParameters(GlobalResources, RayGenerationShader, *Parameters);
FRayTracingPipelineStateInitializer Initializer;
FRHIRayTracingShader* RayGenShaderTable[] = { RayGenerationShader->GetRayTracingShader() };
Initializer.SetRayGenShaderTable(RayGenShaderTable);
FRHIRayTracingPipelineState* Pipeline = PipelineStateCache::GetAndOrCreateRayTracingPipelineState(Initializer);
RHICmdList.RayTraceDispatch(Pipeline, RayGenerationShader->GetRayTracingShader(), GlobalResources, Resolution.X, Resolution.Y);
});
}
};