diff --git a/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute index 6265645..21eb745 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute @@ -8,8 +8,7 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL +#include "ffx_fsr2_unity_common.h" // Ensure the correct value is defined for this keyword, as it is used to select one of multiple sampler functions #ifdef FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE diff --git a/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute index e658561..7badfc3 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute @@ -8,7 +8,6 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL +#include "ffx_fsr2_unity_common.h" #include "shaders/ffx_fsr2_autogen_reactive_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute index b18636d..60695d0 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute @@ -8,12 +8,14 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL -#define SPD_NO_WAVE_OPERATIONS // Wave operations require shader model 6.0; this works with #pragma use_dxc but only on D3D12 +#include "ffx_fsr2_unity_common.h" -#if SHADER_API_METAL -#define InterlockedAdd(dest, val, orig) { (orig) = (dest); (dest) += (val); } +// Wave operations require shader model 6.0; this can only be enabled when using DXC on D3D12 +#if defined(UNITY_COMPILER_DXC) && defined(SHADER_API_D3D12) +#pragma require WaveBasic // Required for WaveGetLaneIndex +#pragma require WaveBallot // Required for WaveReadLaneAt +#else +#define SPD_NO_WAVE_OPERATIONS #endif #include "shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute index 88919d5..a6084ea 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute @@ -8,7 +8,6 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL +#include "ffx_fsr2_unity_common.h" #include "shaders/ffx_fsr2_depth_clip_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute index c48343d..18fa29e 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute @@ -8,7 +8,6 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL +#include "ffx_fsr2_unity_common.h" #include "shaders/ffx_fsr2_lock_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute index 02f4488..2af9b5b 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute @@ -1,4 +1,3 @@ -// Each #kernel tells which function to compile; you can have many kernels #pragma kernel CS #pragma multi_compile_local __ FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE @@ -8,8 +7,6 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -// Some global defines are needed -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL +#include "ffx_fsr2_unity_common.h" #include "shaders/ffx_fsr2_rcas_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute b/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute index 3bb6e5a..45dba34 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute +++ b/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute @@ -8,12 +8,6 @@ #pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH #pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING -#define FFX_GPU // Compiling for GPU -#define FFX_HLSL // Compile for plain HLSL - -#if SHADER_API_METAL -#define InterlockedMin(dest, val) { (dest) = min((dest), (val)); } -#define InterlockedMax(dest, val) { (dest) = max((dest), (val)); } -#endif +#include "ffx_fsr2_unity_common.h" #include "shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_unity_common.h b/Assets/Resources/FSR2/ffx_fsr2_unity_common.h new file mode 100644 index 0000000..d064ad1 --- /dev/null +++ b/Assets/Resources/FSR2/ffx_fsr2_unity_common.h @@ -0,0 +1,19 @@ +#define FFX_GPU // Compiling for GPU +#define FFX_HLSL // Compile for plain HLSL + +// Use the DXC shader compiler on modern graphics APIs to enable a few advanced features +#if defined(SHADER_API_D3D12) || defined(SHADER_API_VULKAN) || defined(SHADER_API_METAL) +#pragma use_dxc +#endif + +// Enable half precision data types on platforms that support it +#if defined(UNITY_COMPILER_DXC) && defined(FFX_HALF) +#pragma require Native16Bit +#endif + +// Hack to work around the lack of texture atomics on Metal +#if defined(SHADER_API_METAL) +#define InterlockedAdd(dest, val, orig) { (orig) = (dest); (dest) += (val); } +#define InterlockedMin(dest, val) { (dest) = min((dest), (val)); } +#define InterlockedMax(dest, val) { (dest) = max((dest), (val)); } +#endif diff --git a/Assets/Resources/FSR2/ffx_fsr2_unity_common.h.meta b/Assets/Resources/FSR2/ffx_fsr2_unity_common.h.meta new file mode 100644 index 0000000..3266648 --- /dev/null +++ b/Assets/Resources/FSR2/ffx_fsr2_unity_common.h.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bb2d4d4671c448698877526c29f2fc99 +timeCreated: 1677836370 \ No newline at end of file