102 lines
4.6 KiB
C++
102 lines
4.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "BuiltInRayTracingShaders.h"
|
|
#include "RHIDefinitions.h"
|
|
#include "ShaderCompilerCore.h"
|
|
|
|
#if RHI_RAYTRACING
|
|
|
|
class FRayTracingValidateGeometryBuildParamsCS : public FBuiltInRayTracingShader
|
|
{
|
|
DECLARE_GLOBAL_SHADER(FRayTracingValidateGeometryBuildParamsCS);
|
|
|
|
public:
|
|
FRayTracingValidateGeometryBuildParamsCS() = default;
|
|
FRayTracingValidateGeometryBuildParamsCS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
|
|
: FBuiltInRayTracingShader(Initializer)
|
|
{
|
|
IndexBufferParam.Bind(Initializer.ParameterMap, TEXT("IndexBuffer"), SPF_Optional);
|
|
VertexBufferParam.Bind(Initializer.ParameterMap, TEXT("VertexBuffer"), SPF_Optional);
|
|
VertexBufferStrideParam.Bind(Initializer.ParameterMap, TEXT("VertexBufferStride"), SPF_Optional);
|
|
VertexBufferOffsetInBytesParam.Bind(Initializer.ParameterMap, TEXT("VertexBufferOffsetInBytes"), SPF_Optional);
|
|
IndexBufferOffsetInBytesParam.Bind(Initializer.ParameterMap, TEXT("IndexBufferOffsetInBytes"), SPF_Optional);
|
|
IndexBufferStrideParam.Bind(Initializer.ParameterMap, TEXT("IndexBufferStride"), SPF_Optional);
|
|
NumPrimitivesParam.Bind(Initializer.ParameterMap, TEXT("NumPrimitives"), SPF_Optional);
|
|
MaxVerticesParam.Bind(Initializer.ParameterMap, TEXT("MaxVertices"), SPF_Optional);
|
|
}
|
|
|
|
static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters)
|
|
{
|
|
return FBuiltInRayTracingShader::ShouldCompilePermutation(Parameters) && RHISupportsWaveOperations(Parameters.Platform);
|
|
}
|
|
|
|
// Large thread group to handle large meshes with a single 1D dispatch
|
|
static const uint32 NumThreadsX = 1024;
|
|
|
|
static inline void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
|
|
{
|
|
OutEnvironment.CompilerFlags.Add(CFLAG_ForceDXC);
|
|
OutEnvironment.SetDefine(TEXT("NUM_THREADS_X"), NumThreadsX);
|
|
FBuiltInRayTracingShader::ModifyCompilationEnvironment(Parameters, OutEnvironment);
|
|
}
|
|
|
|
static RENDERCORE_API void Dispatch(FRHICommandList& RHICmdList, const FRayTracingGeometryBuildParams& Params);
|
|
|
|
LAYOUT_FIELD(FShaderResourceParameter, IndexBufferParam);
|
|
LAYOUT_FIELD(FShaderResourceParameter, VertexBufferParam);
|
|
LAYOUT_FIELD(FShaderParameter, VertexBufferStrideParam);
|
|
LAYOUT_FIELD(FShaderParameter, VertexBufferOffsetInBytesParam);
|
|
LAYOUT_FIELD(FShaderParameter, IndexBufferOffsetInBytesParam);
|
|
LAYOUT_FIELD(FShaderParameter, IndexBufferStrideParam);
|
|
LAYOUT_FIELD(FShaderParameter, NumPrimitivesParam);
|
|
LAYOUT_FIELD(FShaderParameter, MaxVerticesParam);
|
|
|
|
};
|
|
|
|
class FRayTracingValidateSceneBuildParamsCS : public FBuiltInRayTracingShader
|
|
{
|
|
DECLARE_GLOBAL_SHADER(FRayTracingValidateSceneBuildParamsCS);
|
|
|
|
public:
|
|
FRayTracingValidateSceneBuildParamsCS() = default;
|
|
FRayTracingValidateSceneBuildParamsCS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
|
|
: FBuiltInRayTracingShader(Initializer)
|
|
{
|
|
InstanceBufferParam.Bind(Initializer.ParameterMap, TEXT("InstanceBuffer"), SPF_Optional);
|
|
InstanceBufferOffsetInBytesParam.Bind(Initializer.ParameterMap, TEXT("InstanceBufferOffsetInBytes"), SPF_Optional);
|
|
InstanceBufferStrideInBytesParam.Bind(Initializer.ParameterMap, TEXT("InstanceBufferStrideInBytes"), SPF_Optional);
|
|
NumInstancesParam.Bind(Initializer.ParameterMap, TEXT("NumInstances"), SPF_Optional);
|
|
NumHitGroupsParam.Bind(Initializer.ParameterMap, TEXT("NumHitGroups"), SPF_Optional);
|
|
}
|
|
|
|
static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters)
|
|
{
|
|
return FBuiltInRayTracingShader::ShouldCompilePermutation(Parameters) && RHISupportsWaveOperations(Parameters.Platform);
|
|
}
|
|
|
|
// Large thread group to handle large meshes with a single 1D dispatch
|
|
static const uint32 NumThreadsX = 1024;
|
|
|
|
static inline void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
|
|
{
|
|
OutEnvironment.CompilerFlags.Add(CFLAG_ForceDXC);
|
|
OutEnvironment.SetDefine(TEXT("NUM_THREADS_X"), NumThreadsX);
|
|
FBuiltInRayTracingShader::ModifyCompilationEnvironment(Parameters, OutEnvironment);
|
|
}
|
|
|
|
static RENDERCORE_API void Dispatch(FRHICommandList& RHICmdList,
|
|
uint32 NumHitGroups, uint32 NumInstances,
|
|
FRHIBuffer* InstanceBuffer, uint32 InstanceBufferOffset, uint32 InstanceBufferStride);
|
|
|
|
LAYOUT_FIELD(FShaderResourceParameter, InstanceBufferParam);
|
|
LAYOUT_FIELD(FShaderParameter, InstanceBufferOffsetInBytesParam);
|
|
LAYOUT_FIELD(FShaderParameter, InstanceBufferStrideInBytesParam);
|
|
LAYOUT_FIELD(FShaderParameter, NumInstancesParam);
|
|
LAYOUT_FIELD(FShaderParameter, NumHitGroupsParam);
|
|
};
|
|
|
|
|
|
#endif // RHI_RAYTRACING
|