96 lines
3.7 KiB
C++
96 lines
3.7 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "DataDrivenShaderPlatformInfo.h"
|
|
#include "GlobalShader.h"
|
|
#include "RHIDefinitions.h"
|
|
#include "ShaderParameterMacros.h"
|
|
#include "ShaderParameterStruct.h"
|
|
|
|
#if RHI_RAYTRACING
|
|
|
|
class FBuiltInRayTracingShader : public FGlobalShader
|
|
{
|
|
protected:
|
|
static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
|
|
{}
|
|
|
|
public:
|
|
static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters)
|
|
{
|
|
return ShouldCompileRayTracingShadersForProject(Parameters.Platform);
|
|
}
|
|
|
|
FBuiltInRayTracingShader() = default;
|
|
FBuiltInRayTracingShader(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
|
|
: FGlobalShader(Initializer)
|
|
{}
|
|
};
|
|
|
|
|
|
class FDefaultPayloadMS : public FBuiltInRayTracingShader
|
|
{
|
|
DECLARE_EXPORTED_SHADER_TYPE(FDefaultPayloadMS, Global, RENDERCORE_API);
|
|
public:
|
|
static ERayTracingPayloadType GetRayTracingPayloadType(const int32 PermutationId);
|
|
|
|
FDefaultPayloadMS() = default;
|
|
FDefaultPayloadMS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
|
|
: FBuiltInRayTracingShader(Initializer)
|
|
{}
|
|
};
|
|
|
|
class FPackedMaterialClosestHitPayloadMS : public FBuiltInRayTracingShader
|
|
{
|
|
DECLARE_EXPORTED_SHADER_TYPE(FPackedMaterialClosestHitPayloadMS, Global, RENDERCORE_API);
|
|
public:
|
|
static ERayTracingPayloadType GetRayTracingPayloadType(const int32 PermutationId);
|
|
|
|
FPackedMaterialClosestHitPayloadMS() = default;
|
|
FPackedMaterialClosestHitPayloadMS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
|
|
: FBuiltInRayTracingShader(Initializer)
|
|
{}
|
|
};
|
|
|
|
class FRayTracingDispatchDescCS : public FBuiltInRayTracingShader
|
|
{
|
|
DECLARE_GLOBAL_SHADER(FRayTracingDispatchDescCS);
|
|
|
|
public:
|
|
FRayTracingDispatchDescCS() = default;
|
|
FRayTracingDispatchDescCS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
|
|
: FBuiltInRayTracingShader(Initializer)
|
|
{
|
|
DispatchDescInputParam.Bind(Initializer.ParameterMap, TEXT("DispatchDescInput"), SPF_Mandatory);
|
|
DispatchDescSizeDwordsParam.Bind(Initializer.ParameterMap, TEXT("DispatchDescSizeDwords"), SPF_Mandatory);
|
|
DispatchDescDimensionsOffsetDwordsParam.Bind(Initializer.ParameterMap, TEXT("DispatchDescDimensionsOffsetDwords"), SPF_Mandatory);
|
|
DimensionsBufferOffsetDwordsParam.Bind(Initializer.ParameterMap, TEXT("DimensionsBufferOffsetDwords"), SPF_Mandatory);
|
|
DispatchDimensionsParam.Bind(Initializer.ParameterMap, TEXT("DispatchDimensions"), SPF_Mandatory);
|
|
DispatchDescOutputParam.Bind(Initializer.ParameterMap, TEXT("DispatchDescOutput"), SPF_Mandatory);
|
|
}
|
|
|
|
static inline void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
|
|
{
|
|
OutEnvironment.SetDefine(TEXT("DISPATCH_DESC_MAX_SIZE_DWORDS"), DispatchDescMaxSizeDwords);
|
|
FGlobalShader::ModifyCompilationEnvironment(Parameters, OutEnvironment);
|
|
}
|
|
|
|
static RENDERCORE_API void Dispatch(FRHICommandList& RHICmdList,
|
|
const void* DispatchDescInput, uint32 DispatchDescSize, uint32 DispatchDescDimensionsOffset,
|
|
FRHIShaderResourceView* DispatchDimensionsSRV, uint32 DimensionsBufferOffset,
|
|
FRHIUnorderedAccessView* DispatchDescOutputUAV);
|
|
|
|
static constexpr uint32 DispatchDescMaxSizeDwords = 32;
|
|
|
|
LAYOUT_FIELD(FShaderParameter, DispatchDescInputParam);
|
|
LAYOUT_FIELD(FShaderParameter, DispatchDescSizeDwordsParam);
|
|
LAYOUT_FIELD(FShaderParameter, DispatchDescDimensionsOffsetDwordsParam);
|
|
LAYOUT_FIELD(FShaderParameter, DimensionsBufferOffsetDwordsParam);
|
|
LAYOUT_FIELD(FShaderResourceParameter, DispatchDimensionsParam);
|
|
LAYOUT_FIELD(FShaderResourceParameter, DispatchDescOutputParam);
|
|
};
|
|
|
|
#endif // RHI_RAYTRACING
|
|
|