Files
UnrealEngineUWP/Engine/Shaders/Shared/RayTracingDefinitions.h
chris kulla 408b0b8553 Ray Tracing: Compute the maximum payload size from the shader's payload type
Serialize the payload size as part of the raytracing shader so it can be examined in the RHI layer.

Validate that the RTPSO is configured with the appropriate payload size.

Add macros to ensure the payloads have the expected size

Ensure that all raytracing pipelines explicitly bind a miss shader

Add a shared shader header to implement static asserts for those shader compilers that support them (like dxc).

Fix payload type on main deferred reflection raygen shader

Fix incorrect raygen shader included in the deferred RTPSO list for RTGI

Don't add builtin shaders to the RTPSO from the RHI layer as these are unlikely to ever match the required payload type

Add new method to register payload types so that plugins can more easily describe custom payloads they may be using (up to a maximum of 32 unique payload types since we use a bitmask to represent payload sets).

#rb Yuriy.ODonnell
#jira UE-157946
#preflight 636aff4363037c102679f13a
#preflight 63869dde170bc34a93e8c90e

[CL 23337139 by chris kulla in ue5-main branch]
2022-11-30 13:53:00 -05:00

40 lines
2.6 KiB
C

// Copyright Epic Games, Inc. All Rights Reserved.
/*================================================================================================
RayTracingDefinitions.h: used in ray tracing shaders and C++ code to define common constants
!!! Changing this file requires recompilation of the engine !!!
=================================================================================================*/
#pragma once
// Change this to force recompilation of all ray tracing shaders (use https://www.random.org/cgi-bin/randbyte?nbytes=4&format=h)
// This avoids changing the global ShaderVersion.ush and forcing recompilation of all shaders in the engine (only RT shaders will be affected)
#define RAY_TRACING_SHADER_VERSION 0x4502E713
#define RAY_TRACING_REGISTER_SPACE_LOCAL 0 // default register space for hit group (closest hit, any hit, intersection) shader resources
#define RAY_TRACING_REGISTER_SPACE_GLOBAL 1 // register space for ray generation and miss shaders
#define RAY_TRACING_REGISTER_SPACE_SYSTEM 2 // register space for "system" parameters (index buffer, vertex buffer, fetch parameters)
#define RAY_TRACING_MASK_OPAQUE 0x01 // Opaque and alpha tested meshes and particles (e.g. used by reflection, shadow, AO and GI tracing passes)
#define RAY_TRACING_MASK_TRANSLUCENT 0x02 // Opaque and alpha tested meshes and particles (e.g. used by translucency tracing pass)
#define RAY_TRACING_MASK_THIN_SHADOW 0x04 // Whether the thin geometry (e.g. hair) is visible for shadow rays
#define RAY_TRACING_MASK_SHADOW 0x08 // Whether the geometry is visible for shadow rays
#define RAY_TRACING_MASK_SCENE_CAPTURE 0x10 // Whether the geometry is visible when rendering scene capture views
#define RAY_TRACING_MASK_FAR_FIELD 0x20
#define RAY_TRACING_MASK_HAIR_STRANDS 0x40 // For primary ray tracing against hair
#define RAY_TRACING_MASK_ALL 0xFF
#define RAY_TRACING_SHADER_SLOT_MATERIAL 0
#define RAY_TRACING_SHADER_SLOT_SHADOW 1
#define RAY_TRACING_NUM_SHADER_SLOTS 2
#define RAY_TRACING_MISS_SHADER_SLOT_DEFAULT 0 // Main miss shader that simply sets HitT to a "miss" value (see FMinimalPayload::SetMiss())
#define RAY_TRACING_MISS_SHADER_SLOT_LIGHTING 1 // Miss shader that may be used to evaluate light source radiance in ray traced reflections and translucency
#define RAY_TRACING_NUM_MISS_SHADER_SLOTS 2
#define RAY_TRACING_LIGHT_COUNT_MAXIMUM 256
#define RAY_TRACING_DECAL_COUNT_MAXIMUM 256
#define RAY_TRACING_MAX_ALLOWED_RECURSION_DEPTH 1 // Only allow ray tracing from RayGen shader
#define RAY_TRACING_MAX_ALLOWED_ATTRIBUTE_SIZE 8 // Sizeof 2 floats (barycentrics)