You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
45 lines
1.6 KiB
C++
45 lines
1.6 KiB
C++
// Copyright 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 TShaderRef<TShaderClass>& RayGenerationShader,
|
|
typename TShaderClass::FParameters* Parameters,
|
|
FIntPoint Resolution)
|
|
{
|
|
ClearUnusedGraphResources(RayGenerationShader, Parameters);
|
|
|
|
GraphBuilder.AddPass(
|
|
Forward<FRDGEventName>(PassName),
|
|
Parameters,
|
|
ERDGPassFlags::Compute,
|
|
[RayGenerationShader, Parameters, Resolution](FRHIRayTracingCommandList& RHICmdList)
|
|
{
|
|
FRayTracingShaderBindingsWriter GlobalResources;
|
|
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);
|
|
});
|
|
}
|
|
};
|