Browse Source

Enabled DXC shader compiler on supported platforms, and use it to enable native 16-bit and wave operations where possible.

Moved common defines, pragmas and hacks into a new shared header file.
mac-autoexp
Nico de Poel 3 years ago
parent
commit
f429de28fb
  1. 3
      Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute
  2. 3
      Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute
  3. 12
      Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute
  4. 3
      Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute
  5. 3
      Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute
  6. 5
      Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute
  7. 8
      Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute
  8. 19
      Assets/Resources/FSR2/ffx_fsr2_unity_common.h
  9. 3
      Assets/Resources/FSR2/ffx_fsr2_unity_common.h.meta

3
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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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 // 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 #ifdef FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE

3
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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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" #include "shaders/ffx_fsr2_autogen_reactive_pass.hlsl"

12
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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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 #endif
#include "shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl" #include "shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl"

3
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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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" #include "shaders/ffx_fsr2_depth_clip_pass.hlsl"

3
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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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" #include "shaders/ffx_fsr2_lock_pass.hlsl"

5
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 kernel CS
#pragma multi_compile_local __ FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE #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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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" #include "shaders/ffx_fsr2_rcas_pass.hlsl"

8
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_INVERTED_DEPTH
#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING #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" #include "shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl"

19
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

3
Assets/Resources/FSR2/ffx_fsr2_unity_common.h.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bb2d4d4671c448698877526c29f2fc99
timeCreated: 1677836370
Loading…
Cancel
Save