Browse Source

Reworked ASR shaders for modern compilation on DX12, Vulkan, Metal, PS5 and Xbox Series:

- Use DXC compiler
- Enable native 16-bit
- Use wave operations where supported
armasr
Nico de Poel 10 months ago
parent
commit
5faf6c2a56
  1. 7
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_common.cginc
  2. 14
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_compute_luminance_pyramid_pass.compute
  3. 17
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_fragment_modern.shader
  4. 0
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_fragment_modern.shader.meta
  5. 3
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_lock_modern.compute
  6. 0
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_lock_modern.compute.meta
  7. 24
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_luma_pyramid_modern.compute
  8. 0
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_luma_pyramid_modern.compute.meta

7
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_common.cginc

@ -3,13 +3,6 @@
#pragma warning(disable: 3205) // Conversion from larger type to smaller, possible loss of data
#pragma warning(disable: 3556) // Integer divides might be much slower, try using uints if possible
// Doesn't work for:
// - DX11: forces use of DXC which is not supported
// - XB1: native FP16 seems to be unsupported
#if defined(SHADER_API_VULKAN) || defined(SHADER_API_PSSL)
//#pragma require Native16Bit // *sigh* Unity STILL ignores the #if guard when compiling for standalone
#endif
// If these keywords are set by Unity, redefine them to have a truthy value
#ifdef FFXM_FSR2_OPTION_SHADER_OPT_PERFORMANCE
#undef FFXM_FSR2_OPTION_SHADER_OPT_PERFORMANCE

14
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_compute_luminance_pyramid_pass.compute

@ -1,14 +0,0 @@
#pragma kernel main
#pragma multi_compile __ FFXM_HALF
#pragma multi_compile __ FFXM_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS
#pragma multi_compile __ FFXM_FSR2_OPTION_JITTERED_MOTION_VECTORS
#pragma multi_compile __ FFXM_FSR2_OPTION_INVERTED_DEPTH
#pragma multi_compile __ UNITY_FFXM_TEXTURE2D_X_ARRAY
#include "ffxm_fsr2_common.cginc"
#define FFXM_SPD_NO_WAVE_OPERATIONS
#include "shaders/ffxm_fsr2_compute_luminance_pyramid_pass.hlsl"

17
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_fs.shader → Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_fragment_modern.shader

@ -1,4 +1,4 @@
Shader "TND/ASR/ffx_fsr2_fs"
Shader "TND/ASR/ffxm_fsr2_fragment_modern"
{
SubShader
{
@ -12,6 +12,9 @@ Shader "TND/ASR/ffx_fsr2_fs"
#pragma vertex VertMain
#pragma fragment main
#pragma target 4.5
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
//#pragma enable_d3d11_debug_symbols
#pragma multi_compile __ FFXM_HALF
@ -32,6 +35,9 @@ Shader "TND/ASR/ffx_fsr2_fs"
#pragma vertex VertMain
#pragma fragment main
#pragma target 4.5
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
//#pragma enable_d3d11_debug_symbols
#pragma multi_compile __ FFXM_HALF
@ -56,6 +62,9 @@ Shader "TND/ASR/ffx_fsr2_fs"
#pragma vertex VertMain
#pragma fragment main
#pragma target 4.5
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
//#pragma enable_d3d11_debug_symbols
#pragma multi_compile __ FFXM_HALF
@ -81,6 +90,9 @@ Shader "TND/ASR/ffx_fsr2_fs"
#pragma vertex VertMain
#pragma fragment main
#pragma target 4.5
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
//#pragma enable_d3d11_debug_symbols
#pragma multi_compile __ FFXM_HALF
@ -108,6 +120,9 @@ Shader "TND/ASR/ffx_fsr2_fs"
#pragma vertex VertMain
#pragma fragment main
#pragma target 4.5
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
//#pragma enable_d3d11_debug_symbols
#pragma multi_compile __ UNITY_FFXM_TEXTURE2D_X_ARRAY

0
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_fs.shader.meta → Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_fragment_modern.shader.meta

3
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_lock_pass.compute → Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_lock_modern.compute

@ -1,4 +1,7 @@
#pragma kernel main
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
#pragma multi_compile __ FFXM_HALF
#pragma multi_compile __ FFXM_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS

0
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_lock_pass.compute.meta → Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_lock_modern.compute.meta

24
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_luma_pyramid_modern.compute

@ -0,0 +1,24 @@
#pragma kernel main
#pragma only_renderers d3d11 vulkan metal ps5 xboxseries
#pragma use_dxc
#pragma require Native16Bit
#pragma multi_compile __ FFXM_HALF
#pragma multi_compile __ FFXM_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS
#pragma multi_compile __ FFXM_FSR2_OPTION_JITTERED_MOTION_VECTORS
#pragma multi_compile __ FFXM_FSR2_OPTION_INVERTED_DEPTH
#pragma multi_compile __ UNITY_FFXM_TEXTURE2D_X_ARRAY
#include "ffxm_fsr2_common.cginc"
// Enable wave operations for the platforms that support it
#if (defined(SHADER_API_D3D12) || defined(SHADER_API_VULKAN) || defined(SHADER_API_METAL) || defined(SHADER_API_GAMECORE)) && !defined(SHADER_API_MOBILE)
#pragma require WaveBasic // Required for WaveGetLaneIndex
#pragma require WaveBallot // Required for WaveReadLaneAt
#pragma require QuadShuffle // Required for QuadReadAcross
#else
#define FFXM_SPD_NO_WAVE_OPERATIONS
#endif
#include "shaders/ffxm_fsr2_compute_luminance_pyramid_pass.hlsl"

0
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_compute_luminance_pyramid_pass.compute.meta → Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/ASR/Shaders/ffxm_fsr2_luma_pyramid_modern.compute.meta

Loading…
Cancel
Save