From 1cfca9d0667926ff0b6c411b75c30cd54a38ce5a Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Mon, 18 Dec 2023 21:36:34 +0100 Subject: [PATCH] Upgraded to FSR 3.0 Upscaler and PPV2 v3.4.0 --- Assets/Fsr3UpscalerAssets.asset | 23 + Assets/Fsr3UpscalerAssets.asset.meta | 8 + .../FSR2/ffx_fsr2_lock_pass.compute.meta | 8 - .../FSR2/ffx_fsr2_rcas_pass.compute.meta | 8 - ...construct_previous_depth_pass.compute.meta | 8 - .../ffx_fsr2_tcr_autogen_pass.compute.meta | 8 - .../FSR2/shaders/ffx_common_types.h.meta | 60 -- Assets/Resources/FSR2/shaders/ffx_core.h.meta | 60 -- .../FSR2/shaders/ffx_core_cpu.h.meta | 60 -- .../FSR2/shaders/ffx_core_gpu_common.h.meta | 60 -- .../shaders/ffx_core_gpu_common_half.h.meta | 60 -- .../FSR2/shaders/ffx_core_hlsl.h.meta | 60 -- .../FSR2/shaders/ffx_core_portability.h.meta | 60 -- Assets/Resources/FSR2/shaders/ffx_fsr1.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_accumulate.h.meta | 60 -- .../shaders/ffx_fsr2_accumulate_pass.hlsl | 78 -- .../ffx_fsr2_autogen_reactive_pass.hlsl | 85 -- .../FSR2/shaders/ffx_fsr2_callbacks_hlsl.h | 817 --------------- .../shaders/ffx_fsr2_callbacks_hlsl.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_common.h.meta | 60 -- .../ffx_fsr2_compute_luminance_pyramid.h.meta | 60 -- ...x_fsr2_compute_luminance_pyramid_pass.hlsl | 131 --- .../FSR2/shaders/ffx_fsr2_depth_clip.h.meta | 60 -- .../shaders/ffx_fsr2_depth_clip_pass.hlsl | 66 -- .../FSR2/shaders/ffx_fsr2_lock.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_lock_pass.hlsl | 53 - .../FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta | 7 - .../ffx_fsr2_postprocess_lock_status.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_rcas.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_rcas_pass.hlsl | 75 -- .../FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta | 7 - ...dilated_velocity_and_previous_depth.h.meta | 60 -- ..._fsr2_reconstruct_previous_depth_pass.hlsl | 63 -- ..._reconstruct_previous_depth_pass.hlsl.meta | 7 - .../FSR2/shaders/ffx_fsr2_reproject.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_resources.h | 105 -- .../FSR2/shaders/ffx_fsr2_resources.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_sample.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta | 60 -- .../ffx_fsr2_tcr_autogen_pass.hlsl.meta | 7 - .../FSR2/shaders/ffx_fsr2_upsample.h.meta | 60 -- Assets/Resources/FSR2/shaders/ffx_spd.h.meta | 60 -- Assets/Scenes/SampleScene.unity | 4 +- Assets/Scenes/SampleScenePPV2.unity | 10 +- .../Scripts/Core/Fsr3ShaderIDs.cs | 8 +- ...haderIDs.cs.meta => Fsr3ShaderIDs.cs.meta} | 0 .../Scripts/Core/Fsr3Upscaler.cs | 100 +- .../{Fsr2.cs.meta => Fsr3Upscaler.cs.meta} | 0 Assets/Scripts/Core/Fsr3UpscalerAssets.cs | 151 +++ .../Scripts/Core/Fsr3UpscalerAssets.cs.meta | 2 +- .../Scripts/Core/Fsr3UpscalerCallbacks.cs | 35 +- ....cs.meta => Fsr3UpscalerCallbacks.cs.meta} | 0 ...{Fsr2Context.cs => Fsr3UpscalerContext.cs} | 212 ++-- ...xt.cs.meta => Fsr3UpscalerContext.cs.meta} | 0 .../Scripts/Core/Fsr3UpscalerPass.cs | 278 +++--- ...2Pass.cs.meta => Fsr3UpscalerPass.cs.meta} | 0 .../Scripts/Core/Fsr3UpscalerResources.cs | 110 +-- ....cs.meta => Fsr3UpscalerResources.cs.meta} | 0 ...geEffect.cs => Fsr3UpscalerImageEffect.cs} | 148 +-- ...s.meta => Fsr3UpscalerImageEffect.cs.meta} | 0 ...er.cs => Fsr3UpscalerImageEffectHelper.cs} | 18 +- ... => Fsr3UpscalerImageEffectHelper.cs.meta} | 0 Assets/{Resources.meta => Shaders.meta} | 0 .../FSR2.meta => Shaders/FSR3.meta} | 2 +- .../ffx_fsr3upscaler_accumulate_pass.compute | 24 +- ...fsr3upscaler_accumulate_pass.compute.meta} | 2 +- ...fsr3upscaler_autogen_reactive_pass.compute | 32 + ...scaler_autogen_reactive_pass.compute.meta} | 2 +- ...ler_compute_luminance_pyramid_pass.compute | 16 +- ...mpute_luminance_pyramid_pass.compute.meta} | 2 +- .../ffx_fsr3upscaler_depth_clip_pass.compute} | 12 +- ...fsr3upscaler_depth_clip_pass.compute.meta} | 2 +- .../FSR3/ffx_fsr3upscaler_lock_pass.compute} | 10 +- .../ffx_fsr3upscaler_lock_pass.compute.meta | 8 + .../FSR3/ffx_fsr3upscaler_rcas_pass.compute} | 10 +- .../ffx_fsr3upscaler_rcas_pass.compute.meta | 8 + ...r_reconstruct_previous_depth_pass.compute} | 14 +- ...construct_previous_depth_pass.compute.meta | 8 + ...ffx_fsr3upscaler_tcr_autogen_pass.compute} | 12 +- ...fsr3upscaler_tcr_autogen_pass.compute.meta | 8 + .../FSR3/ffx_fsr3upscaler_unity_common.cginc} | 11 +- .../ffx_fsr3upscaler_unity_common.cginc.meta} | 2 +- .../FSR2 => Assets/Shaders/FSR3}/shaders.meta | 2 +- .../ffx_fsr3upscaler_accumulate_pass.hlsl | 79 ++ ...fx_fsr3upscaler_accumulate_pass.hlsl.meta} | 2 +- ...fx_fsr3upscaler_autogen_reactive_pass.hlsl | 77 ++ ...3upscaler_autogen_reactive_pass.hlsl.meta} | 2 +- ...scaler_compute_luminance_pyramid_pass.hlsl | 55 ++ ..._compute_luminance_pyramid_pass.hlsl.meta} | 2 +- .../ffx_fsr3upscaler_depth_clip_pass.hlsl | 67 ++ ...ffx_fsr3upscaler_depth_clip_pass.hlsl.meta | 7 + .../shaders/ffx_fsr3upscaler_lock_pass.hlsl | 56 ++ .../ffx_fsr3upscaler_lock_pass.hlsl.meta | 7 + .../shaders/ffx_fsr3upscaler_rcas_pass.hlsl | 53 + .../ffx_fsr3upscaler_rcas_pass.hlsl.meta | 7 + ...caler_reconstruct_previous_depth_pass.hlsl | 64 ++ ..._reconstruct_previous_depth_pass.hlsl.meta | 7 + .../ffx_fsr3upscaler_tcr_autogen_pass.hlsl | 96 +- ...fx_fsr3upscaler_tcr_autogen_pass.hlsl.meta | 7 + .../Shaders/FSR3/shaders/fsr3upscaler.meta | 2 +- .../shaders/fsr3upscaler}/ffx_common_types.h | 167 +++- .../fsr3upscaler/ffx_common_types.h.meta} | 2 +- .../FSR3/shaders/fsr3upscaler}/ffx_core.h | 52 +- .../FSR3/shaders/fsr3upscaler/ffx_core.h.meta | 2 +- .../FSR3/shaders/fsr3upscaler}/ffx_core_cpu.h | 60 +- .../shaders/fsr3upscaler/ffx_core_cpu.h.meta | 27 + .../fsr3upscaler}/ffx_core_gpu_common.h | 486 ++++----- .../fsr3upscaler/ffx_core_gpu_common.h.meta | 27 + .../fsr3upscaler}/ffx_core_gpu_common_half.h | 423 ++++---- .../ffx_core_gpu_common_half.h.meta | 27 + .../shaders/fsr3upscaler}/ffx_core_hlsl.h | 399 +++++--- .../shaders/fsr3upscaler/ffx_core_hlsl.h.meta | 27 + .../fsr3upscaler}/ffx_core_portability.h | 9 +- .../fsr3upscaler/ffx_core_portability.h.meta | 27 + .../ffx_fsr3upscaler_accumulate.h | 47 +- .../ffx_fsr3upscaler_accumulate.h.meta | 27 + .../ffx_fsr3upscaler_callbacks_hlsl.h | 928 ++++++++++++++++++ .../ffx_fsr3upscaler_callbacks_hlsl.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_common.h | 49 +- .../ffx_fsr3upscaler_common.h.meta | 27 + ...x_fsr3upscaler_compute_luminance_pyramid.h | 73 +- ...3upscaler_compute_luminance_pyramid.h.meta | 27 + .../ffx_fsr3upscaler_depth_clip.h} | 19 +- .../ffx_fsr3upscaler_depth_clip.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_lock.h | 21 +- .../fsr3upscaler/ffx_fsr3upscaler_lock.h.meta | 27 + ...fx_fsr3upscaler_postprocess_lock_status.h} | 19 +- ...sr3upscaler_postprocess_lock_status.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_rcas.h} | 18 +- .../fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta | 27 + ...uct_dilated_velocity_and_previous_depth.h} | 21 +- ...dilated_velocity_and_previous_depth.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_reproject.h | 35 +- .../ffx_fsr3upscaler_reproject.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_resources.h | 104 ++ .../ffx_fsr3upscaler_resources.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_sample.h | 31 +- .../ffx_fsr3upscaler_sample.h.meta | 27 + .../ffx_fsr3upscaler_tcr_autogen.h | 2 +- .../ffx_fsr3upscaler_tcr_autogen.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_upsample.h} | 47 +- .../ffx_fsr3upscaler_upsample.h.meta | 27 + .../FSR3/shaders/fsr3upscaler/fsr1.meta | 8 + .../shaders/fsr3upscaler/fsr1}/ffx_fsr1.h | 54 +- .../shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta | 27 + .../FSR3/shaders/fsr3upscaler/spd.meta | 8 + .../FSR3/shaders/fsr3upscaler/spd}/ffx_spd.h | 210 ++-- .../shaders/fsr3upscaler/spd/ffx_spd.h.meta | 27 + README.md | 104 +- com.unity.postprocessing/CHANGELOG.md | 12 +- com.unity.postprocessing/LICENSE.md | 2 +- .../Editor/Effects/AmbientOcclusionEditor.cs | 6 +- .../Editor/Effects/AutoExposureEditor.cs | 6 +- .../Editor/PostProcessLayerEditor.cs | 2 +- .../PostProcessing/PostProcessResources.asset | 61 +- .../Runtime/Effects/AmbientOcclusion.cs | 2 +- .../Runtime/Effects/AutoExposure.cs | 2 +- .../Runtime/Effects/MultiScaleVO.cs | 99 +- .../Runtime/Effects/SuperResolution.cs | 111 +-- .../PostProcessing/Runtime/FSR2/Fsr2.cs.meta | 3 - .../Runtime/FSR2/Fsr2Context.cs.meta | 3 - .../Runtime/FSR2/Fsr2Pass.cs.meta | 3 - .../Runtime/FSR2/Fsr2Resources.cs.meta | 3 - .../Runtime/FSR2/Fsr2ShaderIDs.cs.meta | 3 - .../PostProcessing/Runtime/FSR3.meta | 8 + .../Runtime/FSR3/Fsr3ShaderIDs.cs | 8 +- .../Runtime/FSR3/Fsr3ShaderIDs.cs.meta | 3 + .../Runtime/FSR3/Fsr3Upscaler.cs | 100 +- .../Runtime/FSR3/Fsr3Upscaler.cs.meta | 3 + .../Runtime/FSR3/Fsr3UpscalerAssets.cs | 151 +++ .../Runtime/FSR3/Fsr3UpscalerAssets.cs.meta | 11 + .../Runtime/FSR3/Fsr3UpscalerCallbacks.cs | 35 +- .../FSR3/Fsr3UpscalerCallbacks.cs.meta | 11 + .../Fsr3UpscalerContext.cs} | 212 ++-- .../Runtime/FSR3/Fsr3UpscalerContext.cs.meta | 3 + .../Runtime/FSR3/Fsr3UpscalerPass.cs | 278 +++--- .../Runtime/FSR3/Fsr3UpscalerPass.cs.meta | 3 + .../Runtime/FSR3/Fsr3UpscalerResources.cs | 110 +-- .../FSR3/Fsr3UpscalerResources.cs.meta | 3 + .../Runtime/Monitors/Monitor.cs | 2 +- .../Runtime/PostProcessLayer.cs | 12 +- .../Runtime/PostProcessRenderContext.cs | 2 +- .../Runtime/PostProcessResources.cs | 23 +- .../Runtime/Utils/RuntimeUtilities.cs | 22 +- .../PostProcessing/Shaders/ACES.hlsl | 8 +- .../PostProcessing/Shaders/API/WebGPU.hlsl | 52 + .../Shaders/API/WebGPU.hlsl.meta | 7 + .../Shaders/Builtins/FinalPass.shader | 6 +- .../Builtins/MultiScaleVODownsample1.compute | 10 +- .../Builtins/MultiScaleVORender.compute | 10 + .../Builtins/MultiScaleVOUpsample.compute | 59 +- .../Shaders/Builtins/Uber.shader | 4 +- .../PostProcessing/Shaders/Colors.hlsl | 4 +- .../PostProcessing/Shaders/FSR2.meta | 8 - .../ffx_fsr2_accumulate_pass.compute.meta | 8 - ...fx_fsr2_autogen_reactive_pass.compute.meta | 8 - ...ompute_luminance_pyramid_pass.compute.meta | 8 - .../FSR2/ffx_fsr2_depth_clip_pass.compute | 32 - .../ffx_fsr2_depth_clip_pass.compute.meta | 8 - .../FSR2/ffx_fsr2_lock_pass.compute.meta | 8 - .../FSR2/ffx_fsr2_rcas_pass.compute.meta | 8 - ...r2_reconstruct_previous_depth_pass.compute | 33 - ...construct_previous_depth_pass.compute.meta | 8 - .../FSR2/ffx_fsr2_tcr_autogen_pass.compute | 32 - .../ffx_fsr2_tcr_autogen_pass.compute.meta | 8 - .../FSR2/shaders/ffx_common_types.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_core.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_core_cpu.h.meta | 60 -- .../FSR2/shaders/ffx_core_gpu_common.h.meta | 60 -- .../shaders/ffx_core_gpu_common_half.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_core_hlsl.h.meta | 60 -- .../FSR2/shaders/ffx_core_portability.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_fsr1.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_accumulate.h.meta | 60 -- .../shaders/ffx_fsr2_accumulate_pass.hlsl | 78 -- .../ffx_fsr2_accumulate_pass.hlsl.meta | 7 - .../ffx_fsr2_autogen_reactive_pass.hlsl | 85 -- .../ffx_fsr2_autogen_reactive_pass.hlsl.meta | 7 - .../FSR2/shaders/ffx_fsr2_callbacks_hlsl.h | 817 --------------- .../shaders/ffx_fsr2_callbacks_hlsl.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_common.h.meta | 60 -- .../ffx_fsr2_compute_luminance_pyramid.h.meta | 60 -- ...x_fsr2_compute_luminance_pyramid_pass.hlsl | 131 --- ...2_compute_luminance_pyramid_pass.hlsl.meta | 7 - .../FSR2/shaders/ffx_fsr2_depth_clip.h.meta | 60 -- .../shaders/ffx_fsr2_depth_clip_pass.hlsl | 66 -- .../ffx_fsr2_depth_clip_pass.hlsl.meta | 7 - .../Shaders/FSR2/shaders/ffx_fsr2_lock.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_lock_pass.hlsl | 53 - .../FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta | 7 - .../ffx_fsr2_postprocess_lock_status.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_fsr2_rcas.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_rcas_pass.hlsl | 75 -- .../FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta | 7 - ...dilated_velocity_and_previous_depth.h.meta | 60 -- ..._fsr2_reconstruct_previous_depth_pass.hlsl | 63 -- ..._reconstruct_previous_depth_pass.hlsl.meta | 7 - .../FSR2/shaders/ffx_fsr2_reproject.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_fsr2_resources.h | 105 -- .../FSR2/shaders/ffx_fsr2_resources.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_sample.h.meta | 60 -- .../FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta | 60 -- .../ffx_fsr2_tcr_autogen_pass.hlsl.meta | 7 - .../FSR2/shaders/ffx_fsr2_upsample.h.meta | 60 -- .../Shaders/FSR2/shaders/ffx_spd.h.meta | 60 -- .../PostProcessing/Shaders/FSR3.meta | 8 + .../ffx_fsr3upscaler_accumulate_pass.compute | 24 +- ..._fsr3upscaler_accumulate_pass.compute.meta | 8 + ...fsr3upscaler_autogen_reactive_pass.compute | 32 + ...pscaler_autogen_reactive_pass.compute.meta | 8 + ...ler_compute_luminance_pyramid_pass.compute | 16 +- ...ompute_luminance_pyramid_pass.compute.meta | 8 + .../ffx_fsr3upscaler_depth_clip_pass.compute} | 12 +- ..._fsr3upscaler_depth_clip_pass.compute.meta | 8 + .../ffx_fsr3upscaler_lock_pass.compute} | 10 +- .../ffx_fsr3upscaler_lock_pass.compute.meta | 8 + .../ffx_fsr3upscaler_rcas_pass.compute} | 10 +- .../ffx_fsr3upscaler_rcas_pass.compute.meta | 8 + ...er_reconstruct_previous_depth_pass.compute | 33 + ...construct_previous_depth_pass.compute.meta | 8 + .../ffx_fsr3upscaler_tcr_autogen_pass.compute | 12 +- ...fsr3upscaler_tcr_autogen_pass.compute.meta | 8 + .../ffx_fsr3upscaler_unity_common.cginc} | 11 +- .../ffx_fsr3upscaler_unity_common.cginc.meta | 7 + .../PostProcessing/Shaders/FSR3}/shaders.meta | 2 +- .../ffx_fsr3upscaler_accumulate_pass.hlsl | 79 ++ ...ffx_fsr3upscaler_accumulate_pass.hlsl.meta | 7 + ...fx_fsr3upscaler_autogen_reactive_pass.hlsl | 77 ++ ...r3upscaler_autogen_reactive_pass.hlsl.meta | 7 + ...scaler_compute_luminance_pyramid_pass.hlsl | 55 ++ ...r_compute_luminance_pyramid_pass.hlsl.meta | 7 + .../ffx_fsr3upscaler_depth_clip_pass.hlsl | 67 ++ ...ffx_fsr3upscaler_depth_clip_pass.hlsl.meta | 7 + .../shaders/ffx_fsr3upscaler_lock_pass.hlsl | 56 ++ .../ffx_fsr3upscaler_lock_pass.hlsl.meta | 7 + .../shaders/ffx_fsr3upscaler_rcas_pass.hlsl | 53 + .../ffx_fsr3upscaler_rcas_pass.hlsl.meta | 7 + ...caler_reconstruct_previous_depth_pass.hlsl | 64 ++ ..._reconstruct_previous_depth_pass.hlsl.meta | 7 + .../ffx_fsr3upscaler_tcr_autogen_pass.hlsl | 96 +- ...fx_fsr3upscaler_tcr_autogen_pass.hlsl.meta | 7 + .../Shaders/FSR3/shaders/fsr3upscaler.meta | 8 + .../shaders/fsr3upscaler}/ffx_common_types.h | 167 +++- .../fsr3upscaler/ffx_common_types.h.meta | 27 + .../FSR3/shaders/fsr3upscaler}/ffx_core.h | 52 +- .../FSR3/shaders/fsr3upscaler/ffx_core.h.meta | 27 + .../shaders/fsr3upscaler}/ffx_core_cpu.h | 60 +- .../shaders/fsr3upscaler/ffx_core_cpu.h.meta | 27 + .../fsr3upscaler}/ffx_core_gpu_common.h | 486 ++++----- .../fsr3upscaler/ffx_core_gpu_common.h.meta | 27 + .../fsr3upscaler}/ffx_core_gpu_common_half.h | 423 ++++---- .../ffx_core_gpu_common_half.h.meta | 27 + .../shaders/fsr3upscaler}/ffx_core_hlsl.h | 399 +++++--- .../shaders/fsr3upscaler/ffx_core_hlsl.h.meta | 27 + .../fsr3upscaler}/ffx_core_portability.h | 9 +- .../fsr3upscaler/ffx_core_portability.h.meta | 27 + .../ffx_fsr3upscaler_accumulate.h | 47 +- .../ffx_fsr3upscaler_accumulate.h.meta | 27 + .../ffx_fsr3upscaler_callbacks_hlsl.h | 928 ++++++++++++++++++ .../ffx_fsr3upscaler_callbacks_hlsl.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_common.h | 49 +- .../ffx_fsr3upscaler_common.h.meta | 27 + ...x_fsr3upscaler_compute_luminance_pyramid.h | 73 +- ...3upscaler_compute_luminance_pyramid.h.meta | 27 + .../ffx_fsr3upscaler_depth_clip.h} | 19 +- .../ffx_fsr3upscaler_depth_clip.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_lock.h | 21 +- .../fsr3upscaler/ffx_fsr3upscaler_lock.h.meta | 27 + ...fx_fsr3upscaler_postprocess_lock_status.h} | 19 +- ...sr3upscaler_postprocess_lock_status.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_rcas.h} | 18 +- .../fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta | 27 + ...uct_dilated_velocity_and_previous_depth.h} | 21 +- ...dilated_velocity_and_previous_depth.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_reproject.h | 35 +- .../ffx_fsr3upscaler_reproject.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_resources.h | 104 ++ .../ffx_fsr3upscaler_resources.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_sample.h | 31 +- .../ffx_fsr3upscaler_sample.h.meta | 27 + .../ffx_fsr3upscaler_tcr_autogen.h | 2 +- .../ffx_fsr3upscaler_tcr_autogen.h.meta | 27 + .../fsr3upscaler/ffx_fsr3upscaler_upsample.h} | 47 +- .../ffx_fsr3upscaler_upsample.h.meta | 27 + .../FSR3/shaders/fsr3upscaler/fsr1.meta | 8 + .../shaders/fsr3upscaler/fsr1}/ffx_fsr1.h | 54 +- .../shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta | 27 + .../FSR3/shaders/fsr3upscaler/spd.meta | 8 + .../shaders/fsr3upscaler/spd}/ffx_spd.h | 210 ++-- .../shaders/fsr3upscaler/spd/ffx_spd.h.meta | 27 + .../PostProcessing/Shaders/StdLib.hlsl | 2 + com.unity.postprocessing/package.json | 2 +- images/camera-ppv2.png | Bin 75688 -> 53666 bytes images/camera-simple.png | Bin 84356 -> 91454 bytes images/comparison.png | Bin 1037113 -> 1055873 bytes images/ppv2layer.png | Bin 55725 -> 54003 bytes 336 files changed, 8846 insertions(+), 9239 deletions(-) create mode 100644 Assets/Fsr3UpscalerAssets.asset create mode 100644 Assets/Fsr3UpscalerAssets.asset.meta delete mode 100644 Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute.meta delete mode 100644 Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute.meta delete mode 100644 Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta delete mode 100644 Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_common_types.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_core.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_core_cpu.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_core_hlsl.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_core_portability.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr1.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_common.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h.meta delete mode 100644 Assets/Resources/FSR2/shaders/ffx_spd.h.meta rename com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs => Assets/Scripts/Core/Fsr3ShaderIDs.cs (96%) rename Assets/Scripts/Core/{Fsr2ShaderIDs.cs.meta => Fsr3ShaderIDs.cs.meta} (100%) rename com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs => Assets/Scripts/Core/Fsr3Upscaler.cs (79%) rename Assets/Scripts/Core/{Fsr2.cs.meta => Fsr3Upscaler.cs.meta} (100%) create mode 100644 Assets/Scripts/Core/Fsr3UpscalerAssets.cs rename com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs.meta => Assets/Scripts/Core/Fsr3UpscalerAssets.cs.meta (83%) rename com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs => Assets/Scripts/Core/Fsr3UpscalerCallbacks.cs (76%) rename Assets/Scripts/Core/{Fsr2Callbacks.cs.meta => Fsr3UpscalerCallbacks.cs.meta} (100%) rename Assets/Scripts/Core/{Fsr2Context.cs => Fsr3UpscalerContext.cs} (70%) rename Assets/Scripts/Core/{Fsr2Context.cs.meta => Fsr3UpscalerContext.cs.meta} (100%) rename com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs => Assets/Scripts/Core/Fsr3UpscalerPass.cs (56%) rename Assets/Scripts/Core/{Fsr2Pass.cs.meta => Fsr3UpscalerPass.cs.meta} (100%) rename com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs => Assets/Scripts/Core/Fsr3UpscalerResources.cs (64%) rename Assets/Scripts/Core/{Fsr2Resources.cs.meta => Fsr3UpscalerResources.cs.meta} (100%) rename Assets/Scripts/{Fsr2ImageEffect.cs => Fsr3UpscalerImageEffect.cs} (76%) rename Assets/Scripts/{Fsr2ImageEffect.cs.meta => Fsr3UpscalerImageEffect.cs.meta} (100%) rename Assets/Scripts/{Fsr2ImageEffectHelper.cs => Fsr3UpscalerImageEffectHelper.cs} (75%) rename Assets/Scripts/{Fsr2ImageEffectHelper.cs.meta => Fsr3UpscalerImageEffectHelper.cs.meta} (100%) rename Assets/{Resources.meta => Shaders.meta} (100%) rename Assets/{Resources/FSR2.meta => Shaders/FSR3.meta} (77%) rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute => Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute (61%) rename Assets/{Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta => Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta} (79%) create mode 100644 Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute rename Assets/{Resources/FSR2/ffx_fsr2_depth_clip_pass.compute.meta => Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta} (79%) rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute => Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute (76%) rename Assets/{Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta => Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta} (79%) rename Assets/{Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute => Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute} (74%) rename Assets/{Resources/FSR2/ffx_fsr2_accumulate_pass.compute.meta => Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta} (79%) rename Assets/{Resources/FSR2/ffx_fsr2_lock_pass.compute => Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute} (77%) create mode 100644 Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta rename Assets/{Resources/FSR2/ffx_fsr2_rcas_pass.compute => Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute} (77%) create mode 100644 Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta rename Assets/{Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute => Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute} (70%) create mode 100644 Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta rename Assets/{Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute => Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute} (74%) create mode 100644 Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta rename Assets/{Resources/FSR2/ffx_fsr2_unity_common.cginc => Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc} (92%) rename Assets/{Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta => Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta} (75%) rename {com.unity.postprocessing/PostProcessing/Shaders/FSR2 => Assets/Shaders/FSR3}/shaders.meta (77%) create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl rename Assets/{Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta => Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta} (75%) create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl rename Assets/{Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta => Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta} (75%) create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl rename Assets/{Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta => Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta} (75%) create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl => Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl (56%) create mode 100644 Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta rename com.unity.postprocessing/PostProcessing/Runtime/FSR2.meta => Assets/Shaders/FSR3/shaders/fsr3upscaler.meta (77%) rename Assets/{Resources/FSR2/shaders => Shaders/FSR3/shaders/fsr3upscaler}/ffx_common_types.h (83%) rename Assets/{Resources/FSR2/ffx_fsr2_unity_common.cginc.meta => Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta} (92%) rename {com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders => Assets/Shaders/FSR3/shaders/fsr3upscaler}/ffx_core.h (66%) rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc.meta => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta (92%) rename Assets/{Resources/FSR2/shaders => Shaders/FSR3/shaders/fsr3upscaler}/ffx_core_cpu.h (93%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta rename Assets/{Resources/FSR2/shaders => Shaders/FSR3/shaders/fsr3upscaler}/ffx_core_gpu_common.h (91%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta rename Assets/{Resources/FSR2/shaders => Shaders/FSR3/shaders/fsr3upscaler}/ffx_core_gpu_common_half.h (94%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta rename {com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders => Assets/Shaders/FSR3/shaders/fsr3upscaler}/ffx_core_hlsl.h (86%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta rename Assets/{Resources/FSR2/shaders => Shaders/FSR3/shaders/fsr3upscaler}/ffx_core_portability.h (94%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h (90%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h (91%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h (85%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta rename Assets/{Resources/FSR2/shaders/ffx_fsr2_depth_clip.h => Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h} (97%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h (91%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta rename Assets/{Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h => Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h} (91%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta rename Assets/{Resources/FSR2/shaders/ffx_fsr2_rcas.h => Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h} (93%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta rename Assets/{Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h => Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h} (91%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h (77%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h (96%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h => Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h (99%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta rename Assets/{Resources/FSR2/shaders/ffx_fsr2_upsample.h => Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h} (85%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta rename {com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders => Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1}/ffx_fsr1.h (97%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/spd.meta rename Assets/{Resources/FSR2/shaders => Shaders/FSR3/shaders/fsr3upscaler/spd}/ffx_spd.h (82%) create mode 100644 Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs.meta create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3.meta rename Assets/Scripts/Core/Fsr2ShaderIDs.cs => com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs (96%) create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs.meta rename Assets/Scripts/Core/Fsr2.cs => com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs (79%) create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs.meta create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs.meta rename Assets/Scripts/Core/Fsr2Callbacks.cs => com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs (76%) create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs.meta rename com.unity.postprocessing/PostProcessing/Runtime/{FSR2/Fsr2Context.cs => FSR3/Fsr3UpscalerContext.cs} (70%) create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs.meta rename Assets/Scripts/Core/Fsr2Pass.cs => com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs (56%) create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs.meta rename Assets/Scripts/Core/Fsr2Resources.cs => com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs (64%) create mode 100644 com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h.meta delete mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3.meta rename Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute => com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute (61%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta rename Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute => com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute (76%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/ffx_fsr2_autogen_reactive_pass.compute => FSR3/ffx_fsr3upscaler_depth_clip_pass.compute} (74%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/ffx_fsr2_lock_pass.compute => FSR3/ffx_fsr3upscaler_lock_pass.compute} (77%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/ffx_fsr2_rcas_pass.compute => FSR3/ffx_fsr3upscaler_rcas_pass.compute} (77%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta rename Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute => com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute (74%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/ffx_fsr2_unity_common.cginc => FSR3/ffx_fsr3upscaler_unity_common.cginc} (92%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta rename {Assets/Resources/FSR2 => com.unity.postprocessing/PostProcessing/Shaders/FSR3}/shaders.meta (77%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl (56%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders => FSR3/shaders/fsr3upscaler}/ffx_common_types.h (83%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta rename {Assets/Resources/FSR2/shaders => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler}/ffx_core.h (66%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders => FSR3/shaders/fsr3upscaler}/ffx_core_cpu.h (93%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders => FSR3/shaders/fsr3upscaler}/ffx_core_gpu_common.h (91%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders => FSR3/shaders/fsr3upscaler}/ffx_core_gpu_common_half.h (94%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta rename {Assets/Resources/FSR2/shaders => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler}/ffx_core_hlsl.h (86%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders => FSR3/shaders/fsr3upscaler}/ffx_core_portability.h (94%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h (90%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_common.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h (91%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h (85%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders/ffx_fsr2_depth_clip.h => FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h} (97%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h (91%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders/ffx_fsr2_postprocess_lock_status.h => FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h} (91%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders/ffx_fsr2_rcas.h => FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h} (93%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h => FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h} (91%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h (77%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h (96%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta rename Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h (99%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders/ffx_fsr2_upsample.h => FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h} (85%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta rename {Assets/Resources/FSR2/shaders => com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1}/ffx_fsr1.h (97%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd.meta rename com.unity.postprocessing/PostProcessing/Shaders/{FSR2/shaders => FSR3/shaders/fsr3upscaler/spd}/ffx_spd.h (82%) create mode 100644 com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta diff --git a/Assets/Fsr3UpscalerAssets.asset b/Assets/Fsr3UpscalerAssets.asset new file mode 100644 index 0000000..f3f30ea --- /dev/null +++ b/Assets/Fsr3UpscalerAssets.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db26e15a33db6ab42a38daab0ba2712f, type: 3} + m_Name: Fsr3UpscalerAssets + m_EditorClassIdentifier: + shaders: + computeLuminancePyramidPass: {fileID: 7200000, guid: d253be05abcdc80428503d3e4cce3a36, type: 3} + reconstructPreviousDepthPass: {fileID: 7200000, guid: 4f59e5b9179d74844ae06a30ae1e0629, type: 3} + depthClipPass: {fileID: 7200000, guid: 20e44016ed34b0d4b8de499d1b566c69, type: 3} + lockPass: {fileID: 7200000, guid: a135306e6d1857e43a86ef20db2a47fe, type: 3} + accumulatePass: {fileID: 7200000, guid: c9b45f0ae7673694ba57a4aadfe212e9, type: 3} + sharpenPass: {fileID: 7200000, guid: 7aaf5cfff022de2499e9b0412f947f6c, type: 3} + autoGenReactivePass: {fileID: 7200000, guid: 5716b91fdaa4e9e439df6b96a796fe6e, type: 3} + tcrAutoGenPass: {fileID: 7200000, guid: 75cdc6ef23f08ed498d4da511923fcea, type: 3} diff --git a/Assets/Fsr3UpscalerAssets.asset.meta b/Assets/Fsr3UpscalerAssets.asset.meta new file mode 100644 index 0000000..1aa49b3 --- /dev/null +++ b/Assets/Fsr3UpscalerAssets.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4151befafd86e8740ab09463b4f1bdbb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute.meta b/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute.meta deleted file mode 100644 index a197b49..0000000 --- a/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3c96d72b39a840c428c901628dab92c0 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute.meta b/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute.meta deleted file mode 100644 index ea6c978..0000000 --- a/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5a82801f160ff6a4eb47db567216e592 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta b/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta deleted file mode 100644 index 6396b86..0000000 --- a/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6ef1b4c25874e334dad5ba3ac6345e32 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta b/Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta deleted file mode 100644 index 0002090..0000000 --- a/Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b478fba0a6a87b44b8be7c35deb5f0dc -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_common_types.h.meta b/Assets/Resources/FSR2/shaders/ffx_common_types.h.meta deleted file mode 100644 index f2cc805..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_common_types.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: c6da07d8aae05f04f87e4db20f84c73e -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core.h.meta b/Assets/Resources/FSR2/shaders/ffx_core.h.meta deleted file mode 100644 index a5f80a7..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_core.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: b37eb663a0ae01b469b0b5a54365b301 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_cpu.h.meta b/Assets/Resources/FSR2/shaders/ffx_core_cpu.h.meta deleted file mode 100644 index 7edf590..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_core_cpu.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 9d1d6ed5c9da0c64b882f3ebc2bac307 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h.meta b/Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h.meta deleted file mode 100644 index 8f9711f..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 402c509393f5bf647b41a962a48ed8e2 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h.meta b/Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h.meta deleted file mode 100644 index 1d826e4..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 142bf3947ada43541a0f31a328fdec07 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_hlsl.h.meta b/Assets/Resources/FSR2/shaders/ffx_core_hlsl.h.meta deleted file mode 100644 index 5a91c43..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_core_hlsl.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 89d6e02f97594f64ca2da4c8124df6cf -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_portability.h.meta b/Assets/Resources/FSR2/shaders/ffx_core_portability.h.meta deleted file mode 100644 index aad361f..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_core_portability.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 5d6e692075988194382122bac7819f02 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr1.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr1.h.meta deleted file mode 100644 index cf43a8b..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr1.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 7524e42f73f97f34bbeb414ea412a808 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h.meta deleted file mode 100644 index 51859c3..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: a04cb2522aaff1045869a272ed129964 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl deleted file mode 100644 index 747f380..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl +++ /dev/null @@ -1,78 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_EXPOSURE 0 -#define FSR2_BIND_SRV_DILATED_REACTIVE_MASKS 1 -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#define FSR2_BIND_SRV_DILATED_MOTION_VECTORS 2 -#else -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 2 -#endif -#define FSR2_BIND_SRV_INTERNAL_UPSCALED 3 -#define FSR2_BIND_SRV_LOCK_STATUS 4 -#define FSR2_BIND_SRV_PREPARED_INPUT_COLOR 5 -#define FSR2_BIND_SRV_LANCZOS_LUT 6 -#define FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT 7 -#define FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS 8 -#define FSR2_BIND_SRV_AUTO_EXPOSURE 9 -#define FSR2_BIND_SRV_LUMA_HISTORY 10 - -#define FSR2_BIND_UAV_INTERNAL_UPSCALED 0 -#define FSR2_BIND_UAV_LOCK_STATUS 1 -#define FSR2_BIND_UAV_UPSCALED_OUTPUT 2 -#define FSR2_BIND_UAV_NEW_LOCKS 3 -#define FSR2_BIND_UAV_LUMA_HISTORY 4 - -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_upsample.h" -#include "ffx_fsr2_postprocess_lock_status.h" -#include "ffx_fsr2_reproject.h" -#include "ffx_fsr2_accumulate.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) -{ - const uint GroupRows = (uint(DisplaySize().y) + FFX_FSR2_THREAD_GROUP_HEIGHT - 1) / FFX_FSR2_THREAD_GROUP_HEIGHT; - uGroupId.y = GroupRows - uGroupId.y - 1; - - uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId; - - Accumulate(uDispatchThreadId); -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl deleted file mode 100644 index a78a8e3..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl +++ /dev/null @@ -1,85 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_OPAQUE_ONLY 0 -#define FSR2_BIND_SRV_INPUT_COLOR 1 -#define FSR2_BIND_UAV_AUTOREACTIVE 0 - -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_REACTIVE 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -#if defined(FSR2_BIND_CB_REACTIVE) -cbuffer cbGenerateReactive : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_REACTIVE) -{ - float scale; - float threshold; - float binaryValue; - uint flags; -}; -#endif - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) -{ - uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId; - - float3 ColorPreAlpha = LoadOpaqueOnly( FFX_MIN16_I2(uDispatchThreadId) ).rgb; - float3 ColorPostAlpha = LoadInputColor(uDispatchThreadId).rgb; - - if (flags & FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_TONEMAP) - { - ColorPreAlpha = Tonemap(ColorPreAlpha); - ColorPostAlpha = Tonemap(ColorPostAlpha); - } - - if (flags & FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP) - { - ColorPreAlpha = InverseTonemap(ColorPreAlpha); - ColorPostAlpha = InverseTonemap(ColorPostAlpha); - } - - float out_reactive_value = 0.f; - float3 delta = abs(ColorPostAlpha - ColorPreAlpha); - - out_reactive_value = (flags & FFX_FSR2_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX) ? max(delta.x, max(delta.y, delta.z)) : length(delta); - out_reactive_value *= scale; - - out_reactive_value = (flags & FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_THRESHOLD) ? (out_reactive_value < threshold ? 0 : binaryValue) : out_reactive_value; - - rw_output_autoreactive[uDispatchThreadId] = out_reactive_value; -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h b/Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h deleted file mode 100644 index de79c82..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h +++ /dev/null @@ -1,817 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#include "ffx_fsr2_resources.h" - -#if defined(FFX_GPU) -#ifdef __hlsl_dx_compiler -#pragma dxc diagnostic push -#pragma dxc diagnostic ignored "-Wambig-lit-shift" -#endif //__hlsl_dx_compiler -#include "ffx_core.h" -#ifdef __hlsl_dx_compiler -#pragma dxc diagnostic pop -#endif //__hlsl_dx_compiler -#endif // #if defined(FFX_GPU) - -#if defined(FFX_GPU) -#ifndef FFX_FSR2_PREFER_WAVE64 -#define FFX_FSR2_PREFER_WAVE64 -#endif // #if defined(FFX_GPU) - -#if defined(FFX_GPU) -#pragma warning(disable: 3205) // conversion from larger type to smaller -#endif // #if defined(FFX_GPU) - -#define DECLARE_SRV_REGISTER(regIndex) t##regIndex -#define DECLARE_UAV_REGISTER(regIndex) u##regIndex -#define DECLARE_CB_REGISTER(regIndex) b##regIndex -#define FFX_FSR2_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) -#define FFX_FSR2_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) -#define FFX_FSR2_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) - -#if defined(FSR2_BIND_CB_FSR2) || defined(FFX_INTERNAL) - cbuffer cbFSR2 : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_FSR2) - { - FfxInt32x2 iRenderSize; - FfxInt32x2 iMaxRenderSize; - FfxInt32x2 iDisplaySize; - FfxInt32x2 iInputColorResourceDimensions; - FfxInt32x2 iLumaMipDimensions; - FfxInt32 iLumaMipLevelToUse; - FfxInt32 iFrameIndex; - - FfxFloat32x4 fDeviceToViewDepth; - FfxFloat32x2 fJitter; - FfxFloat32x2 fMotionVectorScale; - FfxFloat32x2 fDownscaleFactor; - FfxFloat32x2 fMotionVectorJitterCancellation; - FfxFloat32 fPreExposure; - FfxFloat32 fPreviousFramePreExposure; - FfxFloat32 fTanHalfFOV; - FfxFloat32 fJitterSequenceLength; - FfxFloat32 fDeltaTime; - FfxFloat32 fDynamicResChangeFactor; - FfxFloat32 fViewSpaceToMetersFactor; - - FfxInt32 iDummy; - }; - -#define FFX_FSR2_CONSTANT_BUFFER_1_SIZE (sizeof(cbFSR2) / 4) // Number of 32-bit values. This must be kept in sync with the cbFSR2 size. -#endif - -#if defined(FFX_GPU) -#define FFX_FSR2_ROOTSIG_STRINGIFY(p) FFX_FSR2_ROOTSIG_STR(p) -#define FFX_FSR2_ROOTSIG_STR(p) #p -#define FFX_FSR2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "RootConstants(num32BitConstants=" FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_CONSTANT_BUFFER_1_SIZE) ", b0), " \ - "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ - "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] - -#define FFX_FSR2_CONSTANT_BUFFER_2_SIZE 6 // Number of 32-bit values. This must be kept in sync with max( cbRCAS , cbSPD) size. - -#define FFX_FSR2_CB2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "RootConstants(num32BitConstants=" FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_CONSTANT_BUFFER_1_SIZE) ", b0), " \ - "RootConstants(num32BitConstants=" FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_CONSTANT_BUFFER_2_SIZE) ", b1), " \ - "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ - "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] -#if defined(FFX_FSR2_EMBED_ROOTSIG) -#define FFX_FSR2_EMBED_ROOTSIG_CONTENT FFX_FSR2_ROOTSIG -#define FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT FFX_FSR2_CB2_ROOTSIG -#else -#define FFX_FSR2_EMBED_ROOTSIG_CONTENT -#define FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT -#endif // #if FFX_FSR2_EMBED_ROOTSIG -#endif // #if defined(FFX_GPU) - -// Declare and sample camera buffers as regular textures, unless overridden -#if !defined(UNITY_FSR2_TEX2D) -#define UNITY_FSR2_TEX2D(type) Texture2D -#endif -#if !defined(UNITY_FSR2_POS) -#define UNITY_FSR2_POS(pxPos) (pxPos) -#endif -#if !defined(UNITY_FSR2_UV) -#define UNITY_FSR2_UV(uv) (uv) -#endif - -/* Define getter functions in the order they are defined in the CB! */ -FfxInt32x2 RenderSize() -{ - return iRenderSize; -} - -FfxInt32x2 MaxRenderSize() -{ - return iMaxRenderSize; -} - -FfxInt32x2 DisplaySize() -{ - return iDisplaySize; -} - -FfxInt32x2 InputColorResourceDimensions() -{ - return iInputColorResourceDimensions; -} - -FfxInt32x2 LumaMipDimensions() -{ - return iLumaMipDimensions; -} - -FfxInt32 LumaMipLevelToUse() -{ - return iLumaMipLevelToUse; -} - -FfxInt32 FrameIndex() -{ - return iFrameIndex; -} - -FfxFloat32x2 Jitter() -{ - return fJitter; -} - -FfxFloat32x4 DeviceToViewSpaceTransformFactors() -{ - return fDeviceToViewDepth; -} - -FfxFloat32x2 MotionVectorScale() -{ - return fMotionVectorScale; -} - -FfxFloat32x2 DownscaleFactor() -{ - return fDownscaleFactor; -} - -FfxFloat32x2 MotionVectorJitterCancellation() -{ - return fMotionVectorJitterCancellation; -} - -FfxFloat32 PreExposure() -{ - return fPreExposure; -} - -FfxFloat32 PreviousFramePreExposure() -{ - return fPreviousFramePreExposure; -} - -FfxFloat32 TanHalfFoV() -{ - return fTanHalfFOV; -} - -FfxFloat32 JitterSequenceLength() -{ - return fJitterSequenceLength; -} - -FfxFloat32 DeltaTime() -{ - return fDeltaTime; -} - -FfxFloat32 DynamicResChangeFactor() -{ - return fDynamicResChangeFactor; -} - -FfxFloat32 ViewSpaceToMetersFactor() -{ - return fViewSpaceToMetersFactor; -} - - -SamplerState s_PointClamp : register(s0); -SamplerState s_LinearClamp : register(s1); - -// SRVs -#if defined(FFX_INTERNAL) - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY); - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_COLOR); - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS); - UNITY_FSR2_TEX2D(FfxFloat32) r_input_depth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_DEPTH); - Texture2D r_input_exposure : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_EXPOSURE); - Texture2D r_auto_exposure : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE); - Texture2D r_reactive_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK); - Texture2D r_transparency_and_composition_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK); - Texture2D r_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH); - Texture2D r_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS); - Texture2D r_previous_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREVIOUS_DILATED_MOTION_VECTORS); - Texture2D r_dilatedDepth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH); - Texture2D r_internal_upscaled_color : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR); - Texture2D r_lock_status : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS); - Texture2D r_lock_input_luma : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA); - Texture2D r_new_locks : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS); - Texture2D r_prepared_input_color : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR); - Texture2D r_luma_history : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY); - Texture2D r_rcas_input : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RCAS_INPUT); - Texture2D r_lanczos_lut : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LANCZOS_LUT); - Texture2D r_imgMips : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE); - Texture2D r_upsample_maximum_bias_lut : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT); - Texture2D r_dilated_reactive_masks : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS); - Texture2D r_input_prev_color_pre_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); - Texture2D r_input_prev_color_post_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); - - Texture2D r_debug_out : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT); - - // UAV declarations - RWTexture2D rw_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH); - RWTexture2D rw_dilated_motion_vectors : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS); - RWTexture2D rw_dilatedDepth : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH); - RWTexture2D rw_internal_upscaled_color : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR); - RWTexture2D rw_lock_status : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS); - RWTexture2D rw_lock_input_luma : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA); - RWTexture2D rw_new_locks : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS); - RWTexture2D rw_prepared_input_color : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR); - RWTexture2D rw_luma_history : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY); - RWTexture2D rw_upscaled_output : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT); - - globallycoherent RWTexture2D rw_img_mip_shading_change : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE); - globallycoherent RWTexture2D rw_img_mip_5 : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_5); - RWTexture2D rw_dilated_reactive_masks : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS); - RWTexture2D rw_auto_exposure : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE); - globallycoherent RWTexture2D rw_spd_global_atomic : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT); - RWTexture2D rw_debug_out : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT); - - RWTexture2D rw_output_autoreactive : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTOREACTIVE); - RWTexture2D rw_output_autocomposition : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTOCOMPOSITION); - RWTexture2D rw_output_prev_color_pre_alpha : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); - RWTexture2D rw_output_prev_color_post_alpha : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); - -#else // #if defined(FFX_INTERNAL) - #if defined FSR2_BIND_SRV_INPUT_COLOR - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_COLOR); - #endif - #if defined FSR2_BIND_SRV_INPUT_OPAQUE_ONLY - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_OPAQUE_ONLY); - #endif - #if defined FSR2_BIND_SRV_INPUT_MOTION_VECTORS - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_SRV_INPUT_DEPTH - UNITY_FSR2_TEX2D(FfxFloat32) r_input_depth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_DEPTH); - #endif - #if defined FSR2_BIND_SRV_INPUT_EXPOSURE - Texture2D r_input_exposure : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_EXPOSURE); - #endif - #if defined FSR2_BIND_SRV_AUTO_EXPOSURE - Texture2D r_auto_exposure : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_AUTO_EXPOSURE); - #endif - #if defined FSR2_BIND_SRV_REACTIVE_MASK - Texture2D r_reactive_mask : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_REACTIVE_MASK); - #endif - #if defined FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK - Texture2D r_transparency_and_composition_mask : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK); - #endif - #if defined FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH - Texture2D r_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH); - #endif - #if defined FSR2_BIND_SRV_DILATED_MOTION_VECTORS - Texture2D r_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS - Texture2D r_previous_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_SRV_DILATED_DEPTH - Texture2D r_dilatedDepth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_DEPTH); - #endif - #if defined FSR2_BIND_SRV_INTERNAL_UPSCALED - Texture2D r_internal_upscaled_color : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INTERNAL_UPSCALED); - #endif - #if defined FSR2_BIND_SRV_LOCK_STATUS - Texture2D r_lock_status : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LOCK_STATUS); - #endif - #if defined FSR2_BIND_SRV_LOCK_INPUT_LUMA - Texture2D r_lock_input_luma : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LOCK_INPUT_LUMA); - #endif - #if defined FSR2_BIND_SRV_NEW_LOCKS - Texture2D r_new_locks : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_NEW_LOCKS); - #endif - #if defined FSR2_BIND_SRV_PREPARED_INPUT_COLOR - Texture2D r_prepared_input_color : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_PREPARED_INPUT_COLOR); - #endif - #if defined FSR2_BIND_SRV_LUMA_HISTORY - Texture2D r_luma_history : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LUMA_HISTORY); - #endif - #if defined FSR2_BIND_SRV_RCAS_INPUT - Texture2D r_rcas_input : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_RCAS_INPUT); - #endif - #if defined FSR2_BIND_SRV_LANCZOS_LUT - Texture2D r_lanczos_lut : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LANCZOS_LUT); - #endif - #if defined FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS - Texture2D r_imgMips : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS); - #endif - #if defined FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT - Texture2D r_upsample_maximum_bias_lut : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT); - #endif - #if defined FSR2_BIND_SRV_DILATED_REACTIVE_MASKS - Texture2D r_dilated_reactive_masks : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS); - #endif - - #if defined FSR2_BIND_SRV_PREV_PRE_ALPHA_COLOR - Texture2D r_input_prev_color_pre_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); - #endif - #if defined FSR2_BIND_SRV_PREV_POST_ALPHA_COLOR - Texture2D r_input_prev_color_post_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); - #endif - - // UAV declarations - #if defined FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH - RWTexture2D rw_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH); - #endif - #if defined FSR2_BIND_UAV_DILATED_MOTION_VECTORS - RWTexture2D rw_dilated_motion_vectors : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_UAV_DILATED_DEPTH - RWTexture2D rw_dilatedDepth : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_DEPTH); - #endif - #if defined FSR2_BIND_UAV_INTERNAL_UPSCALED - RWTexture2D rw_internal_upscaled_color : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_INTERNAL_UPSCALED); - #endif - #if defined FSR2_BIND_UAV_LOCK_STATUS - RWTexture2D rw_lock_status : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LOCK_STATUS); - #endif - #if defined FSR2_BIND_UAV_LOCK_INPUT_LUMA - RWTexture2D rw_lock_input_luma : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LOCK_INPUT_LUMA); - #endif - #if defined FSR2_BIND_UAV_NEW_LOCKS - RWTexture2D rw_new_locks : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_NEW_LOCKS); - #endif - #if defined FSR2_BIND_UAV_PREPARED_INPUT_COLOR - RWTexture2D rw_prepared_input_color : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREPARED_INPUT_COLOR); - #endif - #if defined FSR2_BIND_UAV_LUMA_HISTORY - RWTexture2D rw_luma_history : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LUMA_HISTORY); - #endif - #if defined FSR2_BIND_UAV_UPSCALED_OUTPUT - RWTexture2D rw_upscaled_output : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_UPSCALED_OUTPUT); - #endif - #if defined FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE - globallycoherent RWTexture2D rw_img_mip_shading_change : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE); - #endif - #if defined FSR2_BIND_UAV_EXPOSURE_MIP_5 - globallycoherent RWTexture2D rw_img_mip_5 : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE_MIP_5); - #endif - #if defined FSR2_BIND_UAV_DILATED_REACTIVE_MASKS - RWTexture2D rw_dilated_reactive_masks : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_REACTIVE_MASKS); - #endif - #if defined FSR2_BIND_UAV_EXPOSURE - RWTexture2D rw_exposure : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE); - #endif - #if defined FSR2_BIND_UAV_AUTO_EXPOSURE - RWTexture2D rw_auto_exposure : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_AUTO_EXPOSURE); - #endif - #if defined FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC - globallycoherent RWTexture2D rw_spd_global_atomic : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC); - #endif - - #if defined FSR2_BIND_UAV_AUTOREACTIVE - RWTexture2D rw_output_autoreactive : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_AUTOREACTIVE); - #endif - #if defined FSR2_BIND_UAV_AUTOCOMPOSITION - RWTexture2D rw_output_autocomposition : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_AUTOCOMPOSITION); - #endif - #if defined FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR - RWTexture2D rw_output_prev_color_pre_alpha : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR); - #endif - #if defined FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR - RWTexture2D rw_output_prev_color_post_alpha : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR); - #endif -#endif // #if defined(FFX_INTERNAL) - -#if defined(FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS) || defined(FFX_INTERNAL) -FfxFloat32 LoadMipLuma(FfxUInt32x2 iPxPos, FfxUInt32 mipLevel) -{ - return r_imgMips.mips[mipLevel][iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS) || defined(FFX_INTERNAL) -FfxFloat32 SampleMipLuma(FfxFloat32x2 fUV, FfxUInt32 mipLevel) -{ - return r_imgMips.SampleLevel(s_LinearClamp, fUV, mipLevel); -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 LoadInputDepth(FfxUInt32x2 iPxPos) -{ - return r_input_depth[UNITY_FSR2_POS(iPxPos)]; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 SampleInputDepth(FfxFloat32x2 fUV) -{ - return r_input_depth.SampleLevel(s_LinearClamp, UNITY_FSR2_UV(fUV), 0).x; -} -#endif - -#if defined(FSR2_BIND_SRV_REACTIVE_MASK) || defined(FFX_INTERNAL) -FfxFloat32 LoadReactiveMask(FfxUInt32x2 iPxPos) -{ - return r_reactive_mask[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) || defined(FFX_INTERNAL) -FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) -{ - return r_transparency_and_composition_mask[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadInputColor(FfxUInt32x2 iPxPos) -{ - return r_input_color_jittered[UNITY_FSR2_POS(iPxPos)].rgb; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 SampleInputColor(FfxFloat32x2 fUV) -{ - return r_input_color_jittered.SampleLevel(s_LinearClamp, UNITY_FSR2_UV(fUV), 0).rgb; -} -#endif - -#if defined(FSR2_BIND_SRV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadPreparedInputColor(FfxUInt32x2 iPxPos) -{ - return r_prepared_input_color[iPxPos].xyz; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_MOTION_VECTORS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadInputMotionVector(FfxUInt32x2 iPxDilatedMotionVectorPos) -{ - FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[UNITY_FSR2_POS(iPxDilatedMotionVectorPos)].xy; - - FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); - -#if FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS - fUvMotionVector -= MotionVectorJitterCancellation(); -#endif - - return fUvMotionVector; -} -#endif - -#if defined(FSR2_BIND_SRV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) -FfxFloat32x4 LoadHistory(FfxUInt32x2 iPxHistory) -{ - return r_internal_upscaled_color[iPxHistory]; -} -#endif - -#if defined(FSR2_BIND_UAV_LUMA_HISTORY) || defined(FFX_INTERNAL) -void StoreLumaHistory(FfxUInt32x2 iPxPos, FfxFloat32x4 fLumaHistory) -{ - rw_luma_history[iPxPos] = fLumaHistory; -} - -FfxFloat32x4 LoadRwLumaHistory(FFX_MIN16_I2 iPxPos) -{ - return rw_luma_history[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_LUMA_HISTORY) || defined(FFX_INTERNAL) -FfxFloat32x4 SampleLumaHistory(FfxFloat32x2 fUV) -{ - return r_luma_history.SampleLevel(s_LinearClamp, fUV, 0); -} -#endif - -#if defined(FFX_INTERNAL) -FfxFloat32x4 SampleDebug(FfxFloat32x2 fUV) -{ - return r_debug_out.SampleLevel(s_LinearClamp, fUV, 0).w; -} -#endif - -#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) -void StoreReprojectedHistory(FfxUInt32x2 iPxHistory, FfxFloat32x4 fHistory) -{ - rw_internal_upscaled_color[iPxHistory] = fHistory; -} -#endif - -#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) -void StoreInternalColorAndWeight(FfxUInt32x2 iPxPos, FfxFloat32x4 fColorAndWeight) -{ - rw_internal_upscaled_color[iPxPos] = fColorAndWeight; -} -#endif - -#if defined(FSR2_BIND_UAV_UPSCALED_OUTPUT) || defined(FFX_INTERNAL) -void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) -{ - rw_upscaled_output[iPxPos] = FfxFloat32x4(fColor, 1.f); -} -#endif - -//LOCK_LIFETIME_REMAINING == 0 -//Should make LockInitialLifetime() return a const 1.0f later -#if defined(FSR2_BIND_SRV_LOCK_STATUS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadLockStatus(FfxUInt32x2 iPxPos) -{ - return r_lock_status[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_LOCK_STATUS) || defined(FFX_INTERNAL) -void StoreLockStatus(FfxUInt32x2 iPxPos, FfxFloat32x2 fLockStatus) -{ - rw_lock_status[iPxPos] = fLockStatus; -} -#endif - -#if defined(FSR2_BIND_SRV_LOCK_INPUT_LUMA) || defined(FFX_INTERNAL) -FfxFloat32 LoadLockInputLuma(FfxUInt32x2 iPxPos) -{ - return r_lock_input_luma[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_LOCK_INPUT_LUMA) || defined(FFX_INTERNAL) -void StoreLockInputLuma(FfxUInt32x2 iPxPos, FfxFloat32 fLuma) -{ - rw_lock_input_luma[iPxPos] = fLuma; -} -#endif - -#if defined(FSR2_BIND_SRV_NEW_LOCKS) || defined(FFX_INTERNAL) -FfxFloat32 LoadNewLocks(FfxUInt32x2 iPxPos) -{ - return r_new_locks[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_NEW_LOCKS) || defined(FFX_INTERNAL) -FfxFloat32 LoadRwNewLocks(FfxUInt32x2 iPxPos) -{ - return rw_new_locks[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_NEW_LOCKS) || defined(FFX_INTERNAL) -void StoreNewLocks(FfxUInt32x2 iPxPos, FfxFloat32 newLock) -{ - rw_new_locks[iPxPos] = newLock; -} -#endif - -#if defined(FSR2_BIND_UAV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) -void StorePreparedInputColor(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 fTonemapped) -{ - rw_prepared_input_color[iPxPos] = fTonemapped; -} -#endif - -#if defined(FSR2_BIND_SRV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32 SampleDepthClip(FfxFloat32x2 fUV) -{ - return r_prepared_input_color.SampleLevel(s_LinearClamp, fUV, 0).w; -} -#endif - -#if defined(FSR2_BIND_SRV_LOCK_STATUS) || defined(FFX_INTERNAL) -FfxFloat32x2 SampleLockStatus(FfxFloat32x2 fUV) -{ - FfxFloat32x2 fLockStatus = r_lock_status.SampleLevel(s_LinearClamp, fUV, 0); - return fLockStatus; -} -#endif - -#if defined(FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 LoadReconstructedPrevDepth(FfxUInt32x2 iPxPos) -{ - return asfloat(r_reconstructed_previous_nearest_depth[iPxPos]); -} -#endif - -#if defined(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) -void StoreReconstructedDepth(FfxUInt32x2 iPxSample, FfxFloat32 fDepth) -{ - FfxUInt32 uDepth = asuint(fDepth); - - #if FFX_FSR2_OPTION_INVERTED_DEPTH - InterlockedMax(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); - #else - InterlockedMin(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); // min for standard, max for inverted depth - #endif -} -#endif - -#if defined(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) -void SetReconstructedDepth(FfxUInt32x2 iPxSample, const FfxUInt32 uValue) -{ - rw_reconstructed_previous_nearest_depth[iPxSample] = uValue; -} -#endif - -#if defined(FSR2_BIND_UAV_DILATED_DEPTH) || defined(FFX_INTERNAL) -void StoreDilatedDepth(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 fDepth) -{ - rw_dilatedDepth[iPxPos] = fDepth; -} -#endif - -#if defined(FSR2_BIND_UAV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) -void StoreDilatedMotionVector(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fMotionVector) -{ - rw_dilated_motion_vectors[iPxPos] = fMotionVector; -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadDilatedMotionVector(FfxUInt32x2 iPxInput) -{ - return r_dilated_motion_vectors[iPxInput].xy; -} -#endif - -#if defined(FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadPreviousDilatedMotionVector(FfxUInt32x2 iPxInput) -{ - return r_previous_dilated_motion_vectors[iPxInput].xy; -} - -FfxFloat32x2 SamplePreviousDilatedMotionVector(FfxFloat32x2 uv) -{ - return r_previous_dilated_motion_vectors.SampleLevel(s_LinearClamp, uv, 0).xy; -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 LoadDilatedDepth(FfxUInt32x2 iPxInput) -{ - return r_dilatedDepth[iPxInput]; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_EXPOSURE) || defined(FFX_INTERNAL) -FfxFloat32 Exposure() -{ - FfxFloat32 exposure = r_input_exposure[FfxUInt32x2(0, 0)].x; - - if (exposure == 0.0f) { - exposure = 1.0f; - } - - return exposure; -} -#endif - -#if defined(FSR2_BIND_SRV_AUTO_EXPOSURE) || defined(FFX_INTERNAL) -FfxFloat32 AutoExposure() -{ - FfxFloat32 exposure = r_auto_exposure[FfxUInt32x2(0, 0)].x; - - if (exposure == 0.0f) { - exposure = 1.0f; - } - - return exposure; -} -#endif - -FfxFloat32 SampleLanczos2Weight(FfxFloat32 x) -{ -#if defined(FSR2_BIND_SRV_LANCZOS_LUT) || defined(FFX_INTERNAL) - return r_lanczos_lut.SampleLevel(s_LinearClamp, FfxFloat32x2(x / 2, 0.5f), 0); -#else - return 0.f; -#endif -} - -#if defined(FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT) || defined(FFX_INTERNAL) -FfxFloat32 SampleUpsampleMaximumBias(FfxFloat32x2 uv) -{ - // Stored as a SNORM, so make sure to multiply by 2 to retrieve the actual expected range. - return FfxFloat32(2.0) * r_upsample_maximum_bias_lut.SampleLevel(s_LinearClamp, abs(uv) * 2.0, 0); -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) -FfxFloat32x2 SampleDilatedReactiveMasks(FfxFloat32x2 fUV) -{ - return r_dilated_reactive_masks.SampleLevel(s_LinearClamp, fUV, 0); -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos) -{ - return r_dilated_reactive_masks[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) -void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fDilatedReactiveMasks) -{ - rw_dilated_reactive_masks[iPxPos] = fDilatedReactiveMasks; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_OPAQUE_ONLY) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadOpaqueOnly(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) -{ - return r_input_opaque_only[UNITY_FSR2_POS(iPxPos)].xyz; -} -#endif - -#if defined(FSR2_BIND_SRV_PREV_PRE_ALPHA_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadPrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) -{ - return r_input_prev_color_pre_alpha[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_PREV_POST_ALPHA_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadPrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) -{ - return r_input_prev_color_post_alpha[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_AUTOREACTIVE) || defined(FFX_INTERNAL) -#if defined(FSR2_BIND_UAV_AUTOCOMPOSITION) || defined(FFX_INTERNAL) -void StoreAutoReactive(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F2 fReactive) -{ - rw_output_autoreactive[iPxPos] = fReactive.x; - - rw_output_autocomposition[iPxPos] = fReactive.y; -} -#endif -#endif - -#if defined(FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR) || defined(FFX_INTERNAL) -void StorePrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) -{ - rw_output_prev_color_pre_alpha[iPxPos] = color; - -} -#endif - -#if defined(FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR) || defined(FFX_INTERNAL) -void StorePrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) -{ - rw_output_prev_color_post_alpha[iPxPos] = color; -} -#endif - -#endif // #if defined(FFX_GPU) diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta deleted file mode 100644 index 97858ae..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: eb121968296f9ba44b35d7e18d2b79df -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_common.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_common.h.meta deleted file mode 100644 index 0e3bb9c..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_common.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 2176dca22b6e9604da8329c79abae68d -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta deleted file mode 100644 index c8cb631..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: dbcdb6dfb36311a49aa7b05bc5054280 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl deleted file mode 100644 index 2b96636..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl +++ /dev/null @@ -1,131 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_COLOR 0 -#define FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC 0 -#define FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE 1 -#define FSR2_BIND_UAV_EXPOSURE_MIP_5 2 -#define FSR2_BIND_UAV_AUTO_EXPOSURE 3 -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_SPD 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -#if defined(FSR2_BIND_CB_SPD) - cbuffer cbSPD : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_SPD) { - - FfxUInt32 mips; - FfxUInt32 numWorkGroups; - FfxUInt32x2 workGroupOffset; - FfxUInt32x2 renderSize; - }; - - FfxUInt32 MipCount() - { - return mips; - } - - FfxUInt32 NumWorkGroups() - { - return numWorkGroups; - } - - FfxUInt32x2 WorkGroupOffset() - { - return workGroupOffset; - } - - FfxUInt32x2 SPD_RenderSize() - { - return renderSize; - } -#endif - - -FfxFloat32x2 SPD_LoadExposureBuffer() -{ - return rw_auto_exposure[FfxInt32x2(0,0)]; -} - -void SPD_SetExposureBuffer(FfxFloat32x2 value) -{ - rw_auto_exposure[FfxInt32x2(0,0)] = value; -} - -FfxFloat32x4 SPD_LoadMipmap5(FfxInt32x2 iPxPos) -{ - return FfxFloat32x4(rw_img_mip_5[iPxPos], 0, 0, 0); -} - -void SPD_SetMipmap(FfxInt32x2 iPxPos, FfxInt32 slice, FfxFloat32 value) -{ - switch (slice) - { - case FFX_FSR2_SHADING_CHANGE_MIP_LEVEL: - rw_img_mip_shading_change[iPxPos] = value; - break; - case 5: - rw_img_mip_5[iPxPos] = value; - break; - default: - - // avoid flattened side effect -#if defined(FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE) || defined(FFX_INTERNAL) - rw_img_mip_shading_change[iPxPos] = rw_img_mip_shading_change[iPxPos]; -#elif defined(FSR2_BIND_UAV_EXPOSURE_MIP_5) || defined(FFX_INTERNAL) - rw_img_mip_5[iPxPos] = rw_img_mip_5[iPxPos]; -#endif - break; - } -} - -void SPD_IncreaseAtomicCounter(inout FfxUInt32 spdCounter) -{ - InterlockedAdd(rw_spd_global_atomic[FfxInt32x2(0,0)], 1, spdCounter); -} - -void SPD_ResetAtomicCounter() -{ - rw_spd_global_atomic[FfxInt32x2(0,0)] = 0; -} - -#include "ffx_fsr2_compute_luminance_pyramid.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 256 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT -void CS(uint3 WorkGroupId : SV_GroupID, uint LocalThreadIndex : SV_GroupIndex) -{ - ComputeAutoExposure(WorkGroupId, LocalThreadIndex); -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h.meta deleted file mode 100644 index dbdf299..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: f7c16477aeb3a9b4f94f4ef818d10d9b -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl deleted file mode 100644 index 3cf501c..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl +++ /dev/null @@ -1,66 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 -#define FSR2_BIND_SRV_DILATED_MOTION_VECTORS 1 -#define FSR2_BIND_SRV_DILATED_DEPTH 2 -#define FSR2_BIND_SRV_REACTIVE_MASK 3 -#define FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 4 -#define FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS 5 -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 6 -#define FSR2_BIND_SRV_INPUT_COLOR 7 -#define FSR2_BIND_SRV_INPUT_DEPTH 8 -#define FSR2_BIND_SRV_INPUT_EXPOSURE 9 - -#define FSR2_BIND_UAV_DILATED_REACTIVE_MASKS 0 -#define FSR2_BIND_UAV_PREPARED_INPUT_COLOR 1 - -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_depth_clip.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS( - int2 iGroupId : SV_GroupID, - int2 iDispatchThreadId : SV_DispatchThreadID, - int2 iGroupThreadId : SV_GroupThreadID, - int iGroupIndex : SV_GroupIndex) -{ - DepthClip(iDispatchThreadId); -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h.meta deleted file mode 100644 index 21f4814..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 9b4cdc5f81194ac4fa946c31b86234ed -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl deleted file mode 100644 index 1409dce..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_LOCK_INPUT_LUMA 0 -#define FSR2_BIND_UAV_NEW_LOCKS 0 -#define FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 1 -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_lock.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) -{ - uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId; - - ComputeLock(uDispatchThreadId); -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta deleted file mode 100644 index 4ded638..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 471a3f7a033c72f4fa737d4f8238a9bd -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta deleted file mode 100644 index ddb6dda..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 3945c3cfd2cc1a64cb0513864d88d8ca -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h.meta deleted file mode 100644 index e962499..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 7bd7d4eb34c626342966cb9b3fe00363 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl deleted file mode 100644 index f447b7e..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl +++ /dev/null @@ -1,75 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_EXPOSURE 0 -#define FSR2_BIND_SRV_RCAS_INPUT 1 -#define FSR2_BIND_UAV_UPSCALED_OUTPUT 0 -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_RCAS 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -//Move to prototype shader! -#if defined(FSR2_BIND_CB_RCAS) - cbuffer cbRCAS : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_RCAS) - { - uint4 rcasConfig; - }; - - uint4 RCASConfig() - { - return rcasConfig; - } -#else - uint4 RCASConfig() - { - return 0; - } -#endif - - -float4 LoadRCAS_Input(FfxInt32x2 iPxPos) -{ - return r_rcas_input[iPxPos]; -} - -#include "ffx_fsr2_rcas.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 64 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT -void CS(uint3 LocalThreadId : SV_GroupThreadID, uint3 WorkGroupId : SV_GroupID, uint3 Dtid : SV_DispatchThreadID) -{ - RCAS(LocalThreadId, WorkGroupId, Dtid); -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta deleted file mode 100644 index b7e089b..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 871ca1938c701d64f94ef8ec00ef06f4 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta deleted file mode 100644 index 9b82a1a..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 13cd33c3d34a317409049dfd939e64ef -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl b/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl deleted file mode 100644 index 33c044e..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 0 -#define FSR2_BIND_SRV_INPUT_DEPTH 1 -#define FSR2_BIND_SRV_INPUT_COLOR 2 -#define FSR2_BIND_SRV_INPUT_EXPOSURE 3 - -#define FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 -#define FSR2_BIND_UAV_DILATED_MOTION_VECTORS 1 -#define FSR2_BIND_UAV_DILATED_DEPTH 2 -#define FSR2_BIND_UAV_LOCK_INPUT_LUMA 3 - -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS( - int2 iGroupId : SV_GroupID, - int2 iDispatchThreadId : SV_DispatchThreadID, - int2 iGroupThreadId : SV_GroupThreadID, - int iGroupIndex : SV_GroupIndex -) -{ - ReconstructAndDilate(iDispatchThreadId); -} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta deleted file mode 100644 index 4f5036c..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9355c255c8505ae48ae89af286943747 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h.meta deleted file mode 100644 index ef8ce86..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 63fc917ca6895cb4aac237ea35edb838 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h b/Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h deleted file mode 100644 index 535dbc3..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h +++ /dev/null @@ -1,105 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#ifndef FFX_FSR2_RESOURCES_H -#define FFX_FSR2_RESOURCES_H - -#if defined(FFX_CPU) || defined(FFX_GPU) -#define FFX_FSR2_RESOURCE_IDENTIFIER_NULL 0 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY 1 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_COLOR 2 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS 3 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_DEPTH 4 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_EXPOSURE 5 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK 6 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK 7 -#define FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH 8 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 9 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH 10 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR 11 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS 12 -#define FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS 13 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR 14 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY 15 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 16 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LANCZOS_LUT 17 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT 18 -#define FFX_FSR2_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT 19 -#define FFX_FSR2_RESOURCE_IDENTIFIER_RCAS_INPUT 20 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_1 21 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_2 22 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_1 23 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_2 24 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_REACTIVITY 25 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_TRANSPARENCY_AND_COMPOSITION 26 -#define FFX_FSR2_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT 27 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS 28 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE 29 // same as FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 29 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_1 30 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_2 31 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_3 32 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 33 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_5 34 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_6 35 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_7 36 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_8 37 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_9 38 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_10 39 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_11 40 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12 41 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_EXPOSURE 42 -#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE 43 -#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTOREACTIVE 44 -#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTOCOMPOSITION 45 - -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR 46 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR 47 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_1 48 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_1 49 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_2 50 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_2 51 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREVIOUS_DILATED_MOTION_VECTORS 52 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DILATED_MOTION_VECTORS_1 53 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DILATED_MOTION_VECTORS_2 54 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY_1 55 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY_2 56 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA 57 - -// Shading change detection mip level setting, value must be in the range [FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0, FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12] -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 -#define FFX_FSR2_SHADING_CHANGE_MIP_LEVEL (FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE - FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE) - -#define FFX_FSR2_RESOURCE_IDENTIFIER_COUNT 58 - -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_FSR2 0 -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_SPD 1 -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_RCAS 2 -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_GENREACTIVE 3 - -#define FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_TONEMAP 1 -#define FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP 2 -#define FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_THRESHOLD 4 -#define FFX_FSR2_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX 8 - -#endif // #if defined(FFX_CPU) || defined(FFX_GPU) - -#endif //!defined( FFX_FSR2_RESOURCES_H ) diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h.meta deleted file mode 100644 index 69e95a4..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_resources.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: fd5bed2bf4ba07444ae815390168a15d -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h.meta deleted file mode 100644 index acc8bab..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: ba3ee190167b6c240aaeb1f8f4dbcb67 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta deleted file mode 100644 index a2af34e..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 18b8590c99b171a4e9af68dfd2c3ff02 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta deleted file mode 100644 index d133259..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9feb1fa4d6cff5a4799298dc69b12a8e -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h.meta b/Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h.meta deleted file mode 100644 index c9fa0a3..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 1ff3a385cfe07db4387e4d7b457238f8 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_spd.h.meta b/Assets/Resources/FSR2/shaders/ffx_spd.h.meta deleted file mode 100644 index d896fc1..0000000 --- a/Assets/Resources/FSR2/shaders/ffx_spd.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 3ef69a900a925bb498651c10581e0979 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 7dbd2f5..c1a3dff 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -314,7 +314,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 955cb66a9ecc20441a7e32934c9b4690, type: 3} m_Name: m_EditorClassIdentifier: - qualityMode: 1 + qualityMode: 2 performSharpenPass: 1 sharpness: 0.8 enableFP16: 0 @@ -335,7 +335,7 @@ MonoBehaviour: autoTcScale: 1 autoReactiveScale: 5 autoReactiveMax: 0.9 - outputMotionVectors: {fileID: 0} + assets: {fileID: 11400000, guid: 4151befafd86e8740ab09463b4f1bdbb, type: 2} --- !u!1001 &1313173313 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/SampleScenePPV2.unity b/Assets/Scenes/SampleScenePPV2.unity index 9cbd013..600d5e0 100644 --- a/Assets/Scenes/SampleScenePPV2.unity +++ b/Assets/Scenes/SampleScenePPV2.unity @@ -317,7 +317,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 955cb66a9ecc20441a7e32934c9b4690, type: 3} m_Name: m_EditorClassIdentifier: - qualityMode: 1 + qualityMode: 2 performSharpenPass: 1 sharpness: 0.8 enableFP16: 0 @@ -332,7 +332,13 @@ MonoBehaviour: cutoffThreshold: 0.2 binaryValue: 0.9 flags: 13 - outputMotionVectors: {fileID: 0} + autoGenerateTransparencyAndComposition: 0 + generateTransparencyAndCompositionParameters: + autoTcThreshold: 0.05 + autoTcScale: 1 + autoReactiveScale: 5 + autoReactiveMax: 0.9 + assets: {fileID: 11400000, guid: 4151befafd86e8740ab09463b4f1bdbb, type: 2} --- !u!114 &963194232 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs b/Assets/Scripts/Core/Fsr3ShaderIDs.cs similarity index 96% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs rename to Assets/Scripts/Core/Fsr3ShaderIDs.cs index b07c967..3a28843 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs +++ b/Assets/Scripts/Core/Fsr3ShaderIDs.cs @@ -22,7 +22,7 @@ using UnityEngine; namespace FidelityFX { - internal static class Fsr2ShaderIDs + internal static class Fsr3ShaderIDs { // Shader resource views, i.e. read-only bindings internal static readonly int SrvInputColor = Shader.PropertyToID("r_input_color_jittered"); @@ -36,7 +36,7 @@ namespace FidelityFX internal static readonly int SrvReconstructedPrevNearestDepth = Shader.PropertyToID("r_reconstructed_previous_nearest_depth"); internal static readonly int SrvDilatedMotionVectors = Shader.PropertyToID("r_dilated_motion_vectors"); internal static readonly int SrvPrevDilatedMotionVectors = Shader.PropertyToID("r_previous_dilated_motion_vectors"); - internal static readonly int SrvDilatedDepth = Shader.PropertyToID("r_dilatedDepth"); + internal static readonly int SrvDilatedDepth = Shader.PropertyToID("r_dilated_depth"); internal static readonly int SrvInternalUpscaled = Shader.PropertyToID("r_internal_upscaled_color"); internal static readonly int SrvLockStatus = Shader.PropertyToID("r_lock_status"); internal static readonly int SrvLockInputLuma = Shader.PropertyToID("r_lock_input_luma"); @@ -53,7 +53,7 @@ namespace FidelityFX // Unordered access views, i.e. random read/write bindings internal static readonly int UavReconstructedPrevNearestDepth = Shader.PropertyToID("rw_reconstructed_previous_nearest_depth"); internal static readonly int UavDilatedMotionVectors = Shader.PropertyToID("rw_dilated_motion_vectors"); - internal static readonly int UavDilatedDepth = Shader.PropertyToID("rw_dilatedDepth"); + internal static readonly int UavDilatedDepth = Shader.PropertyToID("rw_dilated_depth"); internal static readonly int UavInternalUpscaled = Shader.PropertyToID("rw_internal_upscaled_color"); internal static readonly int UavLockStatus = Shader.PropertyToID("rw_lock_status"); internal static readonly int UavLockInputLuma = Shader.PropertyToID("rw_lock_input_luma"); @@ -72,7 +72,7 @@ namespace FidelityFX internal static readonly int UavPrevColorPostAlpha = Shader.PropertyToID("rw_output_prev_color_post_alpha"); // Constant buffer bindings - internal static readonly int CbFsr2 = Shader.PropertyToID("cbFSR2"); + internal static readonly int CbFsr3Upscaler = Shader.PropertyToID("cbFSR3Upscaler"); internal static readonly int CbSpd = Shader.PropertyToID("cbSPD"); internal static readonly int CbRcas = Shader.PropertyToID("cbRCAS"); internal static readonly int CbGenReactive = Shader.PropertyToID("cbGenerateReactive"); diff --git a/Assets/Scripts/Core/Fsr2ShaderIDs.cs.meta b/Assets/Scripts/Core/Fsr3ShaderIDs.cs.meta similarity index 100% rename from Assets/Scripts/Core/Fsr2ShaderIDs.cs.meta rename to Assets/Scripts/Core/Fsr3ShaderIDs.cs.meta diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs b/Assets/Scripts/Core/Fsr3Upscaler.cs similarity index 79% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs rename to Assets/Scripts/Core/Fsr3Upscaler.cs index 1ba8192..c636c93 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs +++ b/Assets/Scripts/Core/Fsr3Upscaler.cs @@ -26,14 +26,14 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// A collection of helper functions and data structures required by the FSR2 process. + /// A collection of helper functions and data structures required by the FSR3 Upscaler process. /// - public static class Fsr2 + public static class Fsr3Upscaler { /// - /// Creates a new FSR2 context with standard parameters that are appropriate for the current platform. + /// Creates a new FSR3 Upscaler context with standard parameters that are appropriate for the current platform. /// - public static Fsr2Context CreateContext(Vector2Int displaySize, Vector2Int maxRenderSize, IFsr2Callbacks callbacks, InitializationFlags flags = 0) + public static Fsr3UpscalerContext CreateContext(Vector2Int displaySize, Vector2Int maxRenderSize, Fsr3UpscalerShaders shaders, InitializationFlags flags = 0) { if (SystemInfo.usesReversedZBuffer) flags |= InitializationFlags.EnableDepthInverted; @@ -44,17 +44,17 @@ namespace FidelityFX flags |= InitializationFlags.EnableDebugChecking; #endif - Debug.Log($"Setting up FSR2 with render size: {maxRenderSize.x}x{maxRenderSize.y}, display size: {displaySize.x}x{displaySize.y}, flags: {flags}"); + Debug.Log($"Setting up FSR3 Upscaler with render size: {maxRenderSize.x}x{maxRenderSize.y}, display size: {displaySize.x}x{displaySize.y}, flags: {flags}"); var contextDescription = new ContextDescription { Flags = flags, DisplaySize = displaySize, MaxRenderSize = maxRenderSize, - Callbacks = callbacks, + Shaders = shaders, }; - var context = new Fsr2Context(); + var context = new Fsr3UpscalerContext(); context.Create(contextDescription); return context; } @@ -63,6 +63,8 @@ namespace FidelityFX { switch (qualityMode) { + case QualityMode.NativeAA: + return 1.0f; case QualityMode.UltraQuality: return 1.2f; case QualityMode.Quality: @@ -134,11 +136,12 @@ namespace FidelityFX public enum QualityMode { - UltraQuality = 0, - Quality = 1, - Balanced = 2, - Performance = 3, - UltraPerformance = 4, + NativeAA = 0, + UltraQuality = 1, + Quality = 2, + Balanced = 3, + Performance = 4, + UltraPerformance = 5, } [Flags] @@ -155,47 +158,19 @@ namespace FidelityFX EnableDebugChecking = 1 << 8, } + /// + /// A structure encapsulating the parameters required to initialize FidelityFX Super Resolution 3 upscaling. + /// public struct ContextDescription { public InitializationFlags Flags; public Vector2Int MaxRenderSize; public Vector2Int DisplaySize; - public IFsr2Callbacks Callbacks; - } - - /// - /// An immutable structure wrapping all of the necessary information to bind a specific buffer or attachment of a render target to a compute shader. - /// - public readonly struct ResourceView - { - /// - /// This value is the equivalent of not setting any value at all; all struct fields will have their default values. - /// It does not refer to a valid texture, therefore any variable set to this value should be checked for IsValid and reassigned before being bound to a shader. - /// - public static readonly ResourceView Unassigned = new ResourceView(default); - - /// - /// This value contains a valid texture reference that can be bound to a shader, however it is just an empty placeholder texture. - /// Binding this to a shader can be seen as setting the texture variable inside the shader to null. - /// - public static readonly ResourceView None = new ResourceView(BuiltinRenderTextureType.None); - - public ResourceView(in RenderTargetIdentifier renderTarget, RenderTextureSubElement subElement = RenderTextureSubElement.Default, int mipLevel = 0) - { - RenderTarget = renderTarget; - SubElement = subElement; - MipLevel = mipLevel; - } - - public bool IsValid => !RenderTarget.Equals(default); - - public readonly RenderTargetIdentifier RenderTarget; - public readonly RenderTextureSubElement SubElement; - public readonly int MipLevel; + public Fsr3UpscalerShaders Shaders; } /// - /// A structure encapsulating the parameters for dispatching the various passes of FidelityFX Super Resolution 2. + /// A structure encapsulating the parameters for dispatching the various passes of FidelityFX Super Resolution 3. /// public class DispatchDescription { @@ -231,7 +206,7 @@ namespace FidelityFX /// /// A structure encapsulating the parameters for automatic generation of a reactive mask. - /// The default values for Scale, CutoffThreshold, BinaryValue and Flags were taken from the FSR2 demo project. + /// The default values for Scale, CutoffThreshold, BinaryValue and Flags were taken from the FSR3 demo project. /// public class GenerateReactiveDescription { @@ -255,7 +230,7 @@ namespace FidelityFX } [Serializable, StructLayout(LayoutKind.Sequential)] - internal struct Fsr2Constants + internal struct UpscalerConstants { public Vector2Int renderSize; public Vector2Int maxRenderSize; @@ -324,4 +299,35 @@ namespace FidelityFX public readonly uint dummy1; } } + + /// + /// An immutable structure wrapping all of the necessary information to bind a specific buffer or attachment of a render target to a compute shader. + /// + public readonly struct ResourceView + { + /// + /// This value is the equivalent of not setting any value at all; all struct fields will have their default values. + /// It does not refer to a valid texture, therefore any variable set to this value should be checked for IsValid and reassigned before being bound to a shader. + /// + public static readonly ResourceView Unassigned = new ResourceView(default); + + /// + /// This value contains a valid texture reference that can be bound to a shader, however it is just an empty placeholder texture. + /// Binding this to a shader can be seen as setting the texture variable inside the shader to null. + /// + public static readonly ResourceView None = new ResourceView(BuiltinRenderTextureType.None); + + public ResourceView(in RenderTargetIdentifier renderTarget, RenderTextureSubElement subElement = RenderTextureSubElement.Default, int mipLevel = 0) + { + RenderTarget = renderTarget; + SubElement = subElement; + MipLevel = mipLevel; + } + + public bool IsValid => !RenderTarget.Equals(default); + + public readonly RenderTargetIdentifier RenderTarget; + public readonly RenderTextureSubElement SubElement; + public readonly int MipLevel; + } } diff --git a/Assets/Scripts/Core/Fsr2.cs.meta b/Assets/Scripts/Core/Fsr3Upscaler.cs.meta similarity index 100% rename from Assets/Scripts/Core/Fsr2.cs.meta rename to Assets/Scripts/Core/Fsr3Upscaler.cs.meta diff --git a/Assets/Scripts/Core/Fsr3UpscalerAssets.cs b/Assets/Scripts/Core/Fsr3UpscalerAssets.cs new file mode 100644 index 0000000..3e4e24f --- /dev/null +++ b/Assets/Scripts/Core/Fsr3UpscalerAssets.cs @@ -0,0 +1,151 @@ +// Copyright (c) 2023 Nico de Poel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using UnityEngine; + +namespace FidelityFX +{ + /// + /// Scriptable object containing all shader resources required by FidelityFX Super Resolution 3 (FSR3) Upscaler. + /// These can be stored in an asset file and referenced from a scene or prefab, avoiding the need to load the shaders from a Resources folder. + /// + public class Fsr3UpscalerAssets : ScriptableObject + { + public Fsr3UpscalerShaders shaders; + +#if UNITY_EDITOR + private void Reset() + { + shaders = new Fsr3UpscalerShaders + { + computeLuminancePyramidPass = FindComputeShader("ffx_fsr3upscaler_compute_luminance_pyramid_pass"), + reconstructPreviousDepthPass = FindComputeShader("ffx_fsr3upscaler_reconstruct_previous_depth_pass"), + depthClipPass = FindComputeShader("ffx_fsr3upscaler_depth_clip_pass"), + lockPass = FindComputeShader("ffx_fsr3upscaler_lock_pass"), + accumulatePass = FindComputeShader("ffx_fsr3upscaler_accumulate_pass"), + sharpenPass = FindComputeShader("ffx_fsr3upscaler_rcas_pass"), + autoGenReactivePass = FindComputeShader("ffx_fsr3upscaler_autogen_reactive_pass"), + tcrAutoGenPass = FindComputeShader("ffx_fsr3upscaler_tcr_autogen_pass"), + }; + } + + private static ComputeShader FindComputeShader(string name) + { + string[] assetGuids = UnityEditor.AssetDatabase.FindAssets($"t:ComputeShader {name}"); + if (assetGuids == null || assetGuids.Length == 0) + return null; + + string assetPath = UnityEditor.AssetDatabase.GUIDToAssetPath(assetGuids[0]); + return UnityEditor.AssetDatabase.LoadAssetAtPath(assetPath); + } +#endif + } + + /// + /// All the compute shaders used by the FSR3 Upscaler. + /// + [System.Serializable] + public class Fsr3UpscalerShaders + { + /// + /// The compute shader used by the luminance pyramid computation pass. + /// + public ComputeShader computeLuminancePyramidPass; + + /// + /// The compute shader used by the previous depth reconstruction pass. + /// + public ComputeShader reconstructPreviousDepthPass; + + /// + /// The compute shader used by the depth clip pass. + /// + public ComputeShader depthClipPass; + + /// + /// The compute shader used by the lock pass. + /// + public ComputeShader lockPass; + + /// + /// The compute shader used by the accumulation pass. + /// + public ComputeShader accumulatePass; + + /// + /// The compute shader used by the RCAS sharpening pass. + /// + public ComputeShader sharpenPass; + + /// + /// The compute shader used to auto-generate a reactive mask. + /// + public ComputeShader autoGenReactivePass; + + /// + /// The compute shader used to auto-generate a transparency & composition mask. + /// + public ComputeShader tcrAutoGenPass; + + /// + /// Returns a copy of this class and its contents. + /// + public Fsr3UpscalerShaders Clone() + { + return (Fsr3UpscalerShaders)MemberwiseClone(); + } + + /// + /// Returns a copy of this class with clones of all its shaders. + /// This can be useful if you're running multiple FSR3 Upscaler instances with different shader configurations. + /// Be sure to clean up these clones through Dispose once you're done with them. + /// + public Fsr3UpscalerShaders DeepCopy() + { + return new Fsr3UpscalerShaders + { + computeLuminancePyramidPass = Object.Instantiate(computeLuminancePyramidPass), + reconstructPreviousDepthPass = Object.Instantiate(reconstructPreviousDepthPass), + depthClipPass = Object.Instantiate(depthClipPass), + lockPass = Object.Instantiate(lockPass), + accumulatePass = Object.Instantiate(accumulatePass), + sharpenPass = Object.Instantiate(sharpenPass), + autoGenReactivePass = Object.Instantiate(autoGenReactivePass), + tcrAutoGenPass = Object.Instantiate(tcrAutoGenPass), + }; + } + + /// + /// Destroy all the shaders within this instance. + /// Use this only on clones created through DeepCopy. + /// + public void Dispose() + { + Object.Destroy(computeLuminancePyramidPass); + Object.Destroy(reconstructPreviousDepthPass); + Object.Destroy(depthClipPass); + Object.Destroy(lockPass); + Object.Destroy(accumulatePass); + Object.Destroy(sharpenPass); + Object.Destroy(autoGenReactivePass); + Object.Destroy(tcrAutoGenPass); + } + } +} diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs.meta b/Assets/Scripts/Core/Fsr3UpscalerAssets.cs.meta similarity index 83% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs.meta rename to Assets/Scripts/Core/Fsr3UpscalerAssets.cs.meta index abc4d96..3c446ad 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs.meta +++ b/Assets/Scripts/Core/Fsr3UpscalerAssets.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5906deeb6ec2854449bf33db2e71a046 +guid: db26e15a33db6ab42a38daab0ba2712f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs b/Assets/Scripts/Core/Fsr3UpscalerCallbacks.cs similarity index 76% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs rename to Assets/Scripts/Core/Fsr3UpscalerCallbacks.cs index ad41d98..5b2c89c 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Callbacks.cs +++ b/Assets/Scripts/Core/Fsr3UpscalerCallbacks.cs @@ -23,16 +23,11 @@ using UnityEngine; namespace FidelityFX { /// - /// A collection of callbacks required by the FSR2 process. - /// This allows some customization by the game dev on how to integrate FSR2 into their own game setup. + /// A collection of callbacks required by the FSR3 Upscaler process. + /// This allows some customization by the game dev on how to integrate FSR3 upscaling into their own game setup. /// - public interface IFsr2Callbacks + public interface IFsr3UpscalerCallbacks { - Shader LoadShader(string name); - void UnloadShader(Shader shader); - ComputeShader LoadComputeShader(string name); - void UnloadComputeShader(ComputeShader shader); - /// /// Apply a mipmap bias to in-game textures to prevent them from becoming blurry as the internal rendering resolution lowers. /// This will need to be customized on a per-game basis, as there is no clear universal way to determine what are "in-game" textures. @@ -47,32 +42,12 @@ namespace FidelityFX } /// - /// Default implementation of IFsr2Callbacks using simple Resources calls. + /// Default implementation of IFsr3UpscalerCallbacks using simple Resources calls. /// These are fine for testing but a proper game will want to extend and override these methods. /// - public class Fsr2CallbacksBase: IFsr2Callbacks + public class Fsr3UpscalerCallbacksBase: IFsr3UpscalerCallbacks { protected float CurrentBiasOffset = 0; - - public virtual Shader LoadShader(string name) - { - return Resources.Load(name); - } - - public virtual void UnloadShader(Shader shader) - { - Resources.UnloadAsset(shader); - } - - public virtual ComputeShader LoadComputeShader(string name) - { - return Resources.Load(name); - } - - public virtual void UnloadComputeShader(ComputeShader shader) - { - Resources.UnloadAsset(shader); - } public virtual void ApplyMipmapBias(float biasOffset) { diff --git a/Assets/Scripts/Core/Fsr2Callbacks.cs.meta b/Assets/Scripts/Core/Fsr3UpscalerCallbacks.cs.meta similarity index 100% rename from Assets/Scripts/Core/Fsr2Callbacks.cs.meta rename to Assets/Scripts/Core/Fsr3UpscalerCallbacks.cs.meta diff --git a/Assets/Scripts/Core/Fsr2Context.cs b/Assets/Scripts/Core/Fsr3UpscalerContext.cs similarity index 70% rename from Assets/Scripts/Core/Fsr2Context.cs rename to Assets/Scripts/Core/Fsr3UpscalerContext.cs index 5c8975c..da02d9f 100644 --- a/Assets/Scripts/Core/Fsr2Context.cs +++ b/Assets/Scripts/Core/Fsr3UpscalerContext.cs @@ -19,7 +19,6 @@ // THE SOFTWARE. using System; -using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Rendering; @@ -27,69 +26,69 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// This class loosely matches the FfxFsr2Context struct from the original FSR2 codebase. - /// It manages the various resources and compute passes required by the FSR2 process. + /// This class loosely matches the FfxFsr3UpscalerContext struct from the original FSR3 codebase. + /// It manages the various resources and compute passes required by the FSR3 Upscaler process. /// Note that this class does not know anything about Unity render pipelines; all it knows is CommandBuffers and RenderTargetIdentifiers. /// This should make it suitable for integration with any of the available Unity render pipelines. /// - public class Fsr2Context + public class Fsr3UpscalerContext { private const int MaxQueuedFrames = 16; - private Fsr2.ContextDescription _contextDescription; + private Fsr3Upscaler.ContextDescription _contextDescription; private CommandBuffer _commandBuffer; - private Fsr2Pass _depthClipPass; - private Fsr2Pass _reconstructPreviousDepthPass; - private Fsr2Pass _lockPass; - private Fsr2Pass _accumulatePass; - private Fsr2Pass _rcasPass; - private Fsr2Pass _computeLuminancePyramidPass; - private Fsr2Pass _generateReactivePass; - private Fsr2Pass _tcrAutogeneratePass; + private Fsr3UpscalerPass _depthClipPass; + private Fsr3UpscalerPass _reconstructPreviousDepthPass; + private Fsr3UpscalerPass _lockPass; + private Fsr3UpscalerPass _accumulatePass; + private Fsr3UpscalerPass _sharpenPass; + private Fsr3UpscalerPass _computeLuminancePyramidPass; + private Fsr3UpscalerPass _generateReactivePass; + private Fsr3UpscalerPass _tcrAutogeneratePass; - private readonly Fsr2Resources _resources = new Fsr2Resources(); + private readonly Fsr3UpscalerResources _resources = new Fsr3UpscalerResources(); - private ComputeBuffer _fsr2ConstantsBuffer; - private readonly Fsr2.Fsr2Constants[] _fsr2ConstantsArray = { new Fsr2.Fsr2Constants() }; - private ref Fsr2.Fsr2Constants Constants => ref _fsr2ConstantsArray[0]; + private ComputeBuffer _upscalerConstantsBuffer; + private readonly Fsr3Upscaler.UpscalerConstants[] _upscalerConstantsArray = { new Fsr3Upscaler.UpscalerConstants() }; + private ref Fsr3Upscaler.UpscalerConstants UpscalerConsts => ref _upscalerConstantsArray[0]; private ComputeBuffer _spdConstantsBuffer; - private readonly Fsr2.SpdConstants[] _spdConstantsArray = { new Fsr2.SpdConstants() }; - private ref Fsr2.SpdConstants SpdConsts => ref _spdConstantsArray[0]; + private readonly Fsr3Upscaler.SpdConstants[] _spdConstantsArray = { new Fsr3Upscaler.SpdConstants() }; + private ref Fsr3Upscaler.SpdConstants SpdConsts => ref _spdConstantsArray[0]; private ComputeBuffer _rcasConstantsBuffer; - private readonly Fsr2.RcasConstants[] _rcasConstantsArray = new Fsr2.RcasConstants[1]; - private ref Fsr2.RcasConstants RcasConsts => ref _rcasConstantsArray[0]; + private readonly Fsr3Upscaler.RcasConstants[] _rcasConstantsArray = new Fsr3Upscaler.RcasConstants[1]; + private ref Fsr3Upscaler.RcasConstants RcasConsts => ref _rcasConstantsArray[0]; private ComputeBuffer _generateReactiveConstantsBuffer; - private readonly Fsr2.GenerateReactiveConstants[] _generateReactiveConstantsArray = { new Fsr2.GenerateReactiveConstants() }; - private ref Fsr2.GenerateReactiveConstants GenReactiveConsts => ref _generateReactiveConstantsArray[0]; + private readonly Fsr3Upscaler.GenerateReactiveConstants[] _generateReactiveConstantsArray = { new Fsr3Upscaler.GenerateReactiveConstants() }; + private ref Fsr3Upscaler.GenerateReactiveConstants GenReactiveConsts => ref _generateReactiveConstantsArray[0]; private ComputeBuffer _tcrAutogenerateConstantsBuffer; - private readonly Fsr2.GenerateReactiveConstants2[] _tcrAutogenerateConstantsArray = { new Fsr2.GenerateReactiveConstants2() }; - private ref Fsr2.GenerateReactiveConstants2 TcrAutoGenConsts => ref _tcrAutogenerateConstantsArray[0]; + private readonly Fsr3Upscaler.GenerateReactiveConstants2[] _tcrAutogenerateConstantsArray = { new Fsr3Upscaler.GenerateReactiveConstants2() }; + private ref Fsr3Upscaler.GenerateReactiveConstants2 TcrAutoGenConsts => ref _tcrAutogenerateConstantsArray[0]; private bool _firstExecution; private Vector2 _previousJitterOffset; private int _resourceFrameIndex; - public void Create(Fsr2.ContextDescription contextDescription) + public void Create(Fsr3Upscaler.ContextDescription contextDescription) { _contextDescription = contextDescription; - _commandBuffer = new CommandBuffer { name = "FSR2" }; + _commandBuffer = new CommandBuffer { name = "FSR3 Upscaler" }; - _fsr2ConstantsBuffer = CreateConstantBuffer(); - _spdConstantsBuffer = CreateConstantBuffer(); - _rcasConstantsBuffer = CreateConstantBuffer(); - _generateReactiveConstantsBuffer = CreateConstantBuffer(); - _tcrAutogenerateConstantsBuffer = CreateConstantBuffer(); + _upscalerConstantsBuffer = CreateConstantBuffer(); + _spdConstantsBuffer = CreateConstantBuffer(); + _rcasConstantsBuffer = CreateConstantBuffer(); + _generateReactiveConstantsBuffer = CreateConstantBuffer(); + _tcrAutogenerateConstantsBuffer = CreateConstantBuffer(); // Set defaults _firstExecution = true; _resourceFrameIndex = 0; - Constants.displaySize = _contextDescription.DisplaySize; + UpscalerConsts.displaySize = _contextDescription.DisplaySize; _resources.Create(_contextDescription); CreatePasses(); @@ -97,14 +96,14 @@ namespace FidelityFX private void CreatePasses() { - _computeLuminancePyramidPass = new Fsr2ComputeLuminancePyramidPass(_contextDescription, _resources, _fsr2ConstantsBuffer, _spdConstantsBuffer); - _reconstructPreviousDepthPass = new Fsr2ReconstructPreviousDepthPass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _depthClipPass = new Fsr2DepthClipPass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _lockPass = new Fsr2LockPass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _accumulatePass = new Fsr2AccumulatePass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _rcasPass = new Fsr2RcasPass(_contextDescription, _resources, _fsr2ConstantsBuffer, _rcasConstantsBuffer); - _generateReactivePass = new Fsr2GenerateReactivePass(_contextDescription, _resources, _generateReactiveConstantsBuffer); - _tcrAutogeneratePass = new Fsr2TcrAutogeneratePass(_contextDescription, _resources, _fsr2ConstantsBuffer, _tcrAutogenerateConstantsBuffer); + _computeLuminancePyramidPass = new Fsr3UpscalerComputeLuminancePyramidPass(_contextDescription, _resources, _upscalerConstantsBuffer, _spdConstantsBuffer); + _reconstructPreviousDepthPass = new Fsr3UpscalerReconstructPreviousDepthPass(_contextDescription, _resources, _upscalerConstantsBuffer); + _depthClipPass = new Fsr3UpscalerDepthClipPass(_contextDescription, _resources, _upscalerConstantsBuffer); + _lockPass = new Fsr3UpscalerLockPass(_contextDescription, _resources, _upscalerConstantsBuffer); + _accumulatePass = new Fsr3UpscalerAccumulatePass(_contextDescription, _resources, _upscalerConstantsBuffer); + _sharpenPass = new Fsr3UpscalerSharpenPass(_contextDescription, _resources, _upscalerConstantsBuffer, _rcasConstantsBuffer); + _generateReactivePass = new Fsr3UpscalerGenerateReactivePass(_contextDescription, _resources, _generateReactiveConstantsBuffer); + _tcrAutogeneratePass = new Fsr3UpscalerTcrAutogeneratePass(_contextDescription, _resources, _upscalerConstantsBuffer, _tcrAutogenerateConstantsBuffer); } public void Destroy() @@ -112,7 +111,7 @@ namespace FidelityFX DestroyPass(ref _tcrAutogeneratePass); DestroyPass(ref _generateReactivePass); DestroyPass(ref _computeLuminancePyramidPass); - DestroyPass(ref _rcasPass); + DestroyPass(ref _sharpenPass); DestroyPass(ref _accumulatePass); DestroyPass(ref _lockPass); DestroyPass(ref _reconstructPreviousDepthPass); @@ -124,22 +123,22 @@ namespace FidelityFX DestroyConstantBuffer(ref _generateReactiveConstantsBuffer); DestroyConstantBuffer(ref _rcasConstantsBuffer); DestroyConstantBuffer(ref _spdConstantsBuffer); - DestroyConstantBuffer(ref _fsr2ConstantsBuffer); + DestroyConstantBuffer(ref _upscalerConstantsBuffer); _commandBuffer.Dispose(); _commandBuffer = null; } - public void Dispatch(Fsr2.DispatchDescription dispatchParams) + public void Dispatch(Fsr3Upscaler.DispatchDescription dispatchParams) { _commandBuffer.Clear(); Dispatch(dispatchParams, _commandBuffer); Graphics.ExecuteCommandBuffer(_commandBuffer); } - public void Dispatch(Fsr2.DispatchDescription dispatchParams, CommandBuffer commandBuffer) + public void Dispatch(Fsr3Upscaler.DispatchDescription dispatchParams, CommandBuffer commandBuffer) { - if ((_contextDescription.Flags & Fsr2.InitializationFlags.EnableDebugChecking) != 0) + if ((_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDebugChecking) != 0) { DebugCheckDispatch(dispatchParams); } @@ -157,10 +156,10 @@ namespace FidelityFX _firstExecution = false; // If auto exposure is enabled use the auto exposure SRV, otherwise what the app sends - if ((_contextDescription.Flags & Fsr2.InitializationFlags.EnableAutoExposure) != 0) - dispatchParams.Exposure = new Fsr2.ResourceView(_resources.AutoExposure); + if ((_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableAutoExposure) != 0) + dispatchParams.Exposure = new ResourceView(_resources.AutoExposure); else if (!dispatchParams.Exposure.IsValid) - dispatchParams.Exposure = new Fsr2.ResourceView(_resources.DefaultExposure); + dispatchParams.Exposure = new ResourceView(_resources.DefaultExposure); if (dispatchParams.EnableAutoReactive) { @@ -170,7 +169,7 @@ namespace FidelityFX if (resetAccumulation) { - RenderTargetIdentifier opaqueOnly = dispatchParams.ColorOpaqueOnly.IsValid ? dispatchParams.ColorOpaqueOnly.RenderTarget : Fsr2ShaderIDs.SrvOpaqueOnly; + RenderTargetIdentifier opaqueOnly = dispatchParams.ColorOpaqueOnly.IsValid ? dispatchParams.ColorOpaqueOnly.RenderTarget : Fsr3ShaderIDs.SrvOpaqueOnly; commandBuffer.Blit(_resources.PrevPreAlpha[frameIndex ^ 1], opaqueOnly); } } @@ -180,16 +179,16 @@ namespace FidelityFX _resources.DestroyTcrAutogenResources(); } - if (!dispatchParams.Reactive.IsValid) dispatchParams.Reactive = new Fsr2.ResourceView(_resources.DefaultReactive); - if (!dispatchParams.TransparencyAndComposition.IsValid) dispatchParams.TransparencyAndComposition = new Fsr2.ResourceView(_resources.DefaultReactive); - Fsr2Resources.CreateAliasableResources(commandBuffer, _contextDescription, dispatchParams); + if (!dispatchParams.Reactive.IsValid) dispatchParams.Reactive = new ResourceView(_resources.DefaultReactive); + if (!dispatchParams.TransparencyAndComposition.IsValid) dispatchParams.TransparencyAndComposition = new ResourceView(_resources.DefaultReactive); + Fsr3UpscalerResources.CreateAliasableResources(commandBuffer, _contextDescription, dispatchParams); SetupConstants(dispatchParams, resetAccumulation); // Reactive mask bias const int threadGroupWorkRegionDim = 8; - int dispatchSrcX = (Constants.renderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; - int dispatchSrcY = (Constants.renderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; + int dispatchSrcX = (UpscalerConsts.renderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; + int dispatchSrcY = (UpscalerConsts.renderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; int dispatchDstX = (_contextDescription.DisplaySize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; int dispatchDstY = (_contextDescription.DisplaySize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; @@ -214,19 +213,24 @@ namespace FidelityFX commandBuffer.ClearRenderTarget(false, true, Color.clear); } + // FSR3: need to clear here since we need the content of this surface for frame interpolation, so clearing in the lock pass is not an option + bool depthInverted = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) == Fsr3Upscaler.InitializationFlags.EnableDepthInverted; + commandBuffer.SetRenderTarget(Fsr3ShaderIDs.UavReconstructedPrevNearestDepth); + commandBuffer.ClearRenderTarget(false, true, depthInverted ? Color.clear : Color.white); + // Auto exposure SetupSpdConstants(dispatchParams, out var dispatchThreadGroupCount); // Initialize constant buffers data - commandBuffer.SetBufferData(_fsr2ConstantsBuffer, _fsr2ConstantsArray); + commandBuffer.SetBufferData(_upscalerConstantsBuffer, _upscalerConstantsArray); commandBuffer.SetBufferData(_spdConstantsBuffer, _spdConstantsArray); // Auto reactive if (dispatchParams.EnableAutoReactive) { GenerateTransparencyCompositionReactive(dispatchParams, commandBuffer, frameIndex); - dispatchParams.Reactive = new Fsr2.ResourceView(_resources.AutoReactive); - dispatchParams.TransparencyAndComposition = new Fsr2.ResourceView(_resources.AutoComposition); + dispatchParams.Reactive = new ResourceView(_resources.AutoReactive); + dispatchParams.TransparencyAndComposition = new ResourceView(_resources.AutoComposition); } // Compute luminance pyramid @@ -254,22 +258,22 @@ namespace FidelityFX const int threadGroupWorkRegionDimRcas = 16; int threadGroupsX = (Screen.width + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; int threadGroupsY = (Screen.height + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; - _rcasPass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, threadGroupsX, threadGroupsY); + _sharpenPass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, threadGroupsX, threadGroupsY); } _resourceFrameIndex = (_resourceFrameIndex + 1) % MaxQueuedFrames; - Fsr2Resources.DestroyAliasableResources(commandBuffer); + Fsr3UpscalerResources.DestroyAliasableResources(commandBuffer); } - public void GenerateReactiveMask(Fsr2.GenerateReactiveDescription dispatchParams) + public void GenerateReactiveMask(Fsr3Upscaler.GenerateReactiveDescription dispatchParams) { _commandBuffer.Clear(); GenerateReactiveMask(dispatchParams, _commandBuffer); Graphics.ExecuteCommandBuffer(_commandBuffer); } - public void GenerateReactiveMask(Fsr2.GenerateReactiveDescription dispatchParams, CommandBuffer commandBuffer) + public void GenerateReactiveMask(Fsr3Upscaler.GenerateReactiveDescription dispatchParams, CommandBuffer commandBuffer) { const int threadGroupWorkRegionDim = 8; int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; @@ -281,10 +285,10 @@ namespace FidelityFX GenReactiveConsts.flags = (uint)dispatchParams.Flags; commandBuffer.SetBufferData(_generateReactiveConstantsBuffer, _generateReactiveConstantsArray); - ((Fsr2GenerateReactivePass)_generateReactivePass).ScheduleDispatch(commandBuffer, dispatchParams, dispatchSrcX, dispatchSrcY); + ((Fsr3UpscalerGenerateReactivePass)_generateReactivePass).ScheduleDispatch(commandBuffer, dispatchParams, dispatchSrcX, dispatchSrcY); } - private void GenerateTransparencyCompositionReactive(Fsr2.DispatchDescription dispatchParams, CommandBuffer commandBuffer, int frameIndex) + private void GenerateTransparencyCompositionReactive(Fsr3Upscaler.DispatchDescription dispatchParams, CommandBuffer commandBuffer, int frameIndex) { const int threadGroupWorkRegionDim = 8; int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; @@ -299,9 +303,9 @@ namespace FidelityFX _tcrAutogeneratePass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, dispatchSrcX, dispatchSrcY); } - private void SetupConstants(Fsr2.DispatchDescription dispatchParams, bool resetAccumulation) + private void SetupConstants(Fsr3Upscaler.DispatchDescription dispatchParams, bool resetAccumulation) { - ref Fsr2.Fsr2Constants constants = ref Constants; + ref Fsr3Upscaler.UpscalerConstants constants = ref UpscalerConsts; constants.jitterOffset = dispatchParams.JitterOffset; constants.renderSize = dispatchParams.RenderSize; @@ -323,17 +327,17 @@ namespace FidelityFX constants.preExposure = (dispatchParams.PreExposure != 0) ? dispatchParams.PreExposure : 1.0f; // Motion vector data - Vector2Int motionVectorsTargetSize = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDisplayResolutionMotionVectors) != 0 ? constants.displaySize : constants.renderSize; + Vector2Int motionVectorsTargetSize = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDisplayResolutionMotionVectors) != 0 ? constants.displaySize : constants.renderSize; constants.motionVectorScale = dispatchParams.MotionVectorScale / motionVectorsTargetSize; // Compute jitter cancellation - if ((_contextDescription.Flags & Fsr2.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) + if ((_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) { constants.motionVectorJitterCancellation = (_previousJitterOffset - constants.jitterOffset) / motionVectorsTargetSize; _previousJitterOffset = constants.jitterOffset; } - int jitterPhaseCount = Fsr2.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.DisplaySize.x); + int jitterPhaseCount = Fsr3Upscaler.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.DisplaySize.x); if (resetAccumulation || constants.jitterPhaseCount == 0) { constants.jitterPhaseCount = jitterPhaseCount; @@ -356,17 +360,17 @@ namespace FidelityFX constants.frameIndex++; // Shading change usage of the SPD mip levels - constants.lumaMipLevelToUse = Fsr2Pass.ShadingChangeMipLevel; + constants.lumaMipLevelToUse = Fsr3UpscalerPass.ShadingChangeMipLevel; float mipDiv = 2 << constants.lumaMipLevelToUse; constants.lumaMipDimensions.x = (int)(constants.maxRenderSize.x / mipDiv); constants.lumaMipDimensions.y = (int)(constants.maxRenderSize.y / mipDiv); } - private Vector4 SetupDeviceDepthToViewSpaceDepthParams(Fsr2.DispatchDescription dispatchParams) + private Vector4 SetupDeviceDepthToViewSpaceDepthParams(Fsr3Upscaler.DispatchDescription dispatchParams) { - bool inverted = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInverted) != 0; - bool infinite = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInfinite) != 0; + bool inverted = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) != 0; + bool infinite = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInfinite) != 0; // make sure it has no impact if near and far plane values are swapped in dispatch params // the flags "inverted" and "infinite" will decide what transform to use @@ -396,19 +400,19 @@ namespace FidelityFX 1.0f / cotHalfFovY); } - private void SetupRcasConstants(Fsr2.DispatchDescription dispatchParams) + private void SetupRcasConstants(Fsr3Upscaler.DispatchDescription dispatchParams) { int sharpnessIndex = Mathf.RoundToInt(Mathf.Clamp01(dispatchParams.Sharpness) * (RcasConfigs.Length - 1)); RcasConsts = RcasConfigs[sharpnessIndex]; } - private void SetupSpdConstants(Fsr2.DispatchDescription dispatchParams, out Vector2Int dispatchThreadGroupCount) + private void SetupSpdConstants(Fsr3Upscaler.DispatchDescription dispatchParams, out Vector2Int dispatchThreadGroupCount) { RectInt rectInfo = new RectInt(0, 0, dispatchParams.RenderSize.x, dispatchParams.RenderSize.y); SpdSetup(rectInfo, out dispatchThreadGroupCount, out var workGroupOffset, out var numWorkGroupsAndMips); // Downsample - ref Fsr2.SpdConstants spdConstants = ref SpdConsts; + ref Fsr3Upscaler.SpdConstants spdConstants = ref SpdConsts; spdConstants.numWorkGroups = (uint)numWorkGroupsAndMips.x; spdConstants.mips = (uint)numWorkGroupsAndMips.y; spdConstants.workGroupOffsetX = (uint)workGroupOffset.x; @@ -434,7 +438,7 @@ namespace FidelityFX } } - private void DebugCheckDispatch(Fsr2.DispatchDescription dispatchParams) + private void DebugCheckDispatch(Fsr3Upscaler.DispatchDescription dispatchParams) { if (!dispatchParams.Color.IsValid) { @@ -456,7 +460,7 @@ namespace FidelityFX Debug.LogError("Output resource is null"); } - if (dispatchParams.Exposure.IsValid && (_contextDescription.Flags & Fsr2.InitializationFlags.EnableAutoExposure) != 0) + if (dispatchParams.Exposure.IsValid && (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableAutoExposure) != 0) { Debug.LogWarning("Exposure resource provided, however auto exposure flag is present"); } @@ -496,8 +500,8 @@ namespace FidelityFX Debug.LogError("PreExposure provided as 0.0f which is invalid"); } - bool infiniteDepth = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInfinite) != 0; - bool inverseDepth = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInverted) != 0; + bool infiniteDepth = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInfinite) != 0; + bool inverseDepth = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) != 0; if (inverseDepth) { @@ -552,32 +556,32 @@ namespace FidelityFX } /// - /// The FSR2 C++ codebase uses floats bitwise converted to ints to pass sharpness parameters to the RCAS shader. + /// The FSR3 C++ codebase uses floats bitwise converted to ints to pass sharpness parameters to the RCAS shader. /// This is not possible in C# without enabling unsafe code compilation, so to avoid that we instead use a table of precomputed values. /// - private static readonly Fsr2.RcasConstants[] RcasConfigs = new [] + private static readonly Fsr3Upscaler.RcasConstants[] RcasConfigs = new [] { - new Fsr2.RcasConstants(1048576000u, 872428544u), - new Fsr2.RcasConstants(1049178080u, 877212745u), - new Fsr2.RcasConstants(1049823372u, 882390168u), - new Fsr2.RcasConstants(1050514979u, 887895276u), - new Fsr2.RcasConstants(1051256227u, 893859143u), - new Fsr2.RcasConstants(1052050675u, 900216232u), - new Fsr2.RcasConstants(1052902144u, 907032080u), - new Fsr2.RcasConstants(1053814727u, 914306687u), - new Fsr2.RcasConstants(1054792807u, 922105590u), - new Fsr2.RcasConstants(1055841087u, 930494326u), - new Fsr2.RcasConstants(1056964608u, 939538432u), - new Fsr2.RcasConstants(1057566688u, 944322633u), - new Fsr2.RcasConstants(1058211980u, 949500056u), - new Fsr2.RcasConstants(1058903587u, 955005164u), - new Fsr2.RcasConstants(1059644835u, 960969031u), - new Fsr2.RcasConstants(1060439283u, 967326120u), - new Fsr2.RcasConstants(1061290752u, 974141968u), - new Fsr2.RcasConstants(1062203335u, 981416575u), - new Fsr2.RcasConstants(1063181415u, 989215478u), - new Fsr2.RcasConstants(1064229695u, 997604214u), - new Fsr2.RcasConstants(1065353216u, 1006648320), + new Fsr3Upscaler.RcasConstants(1048576000u, 872428544u), + new Fsr3Upscaler.RcasConstants(1049178080u, 877212745u), + new Fsr3Upscaler.RcasConstants(1049823372u, 882390168u), + new Fsr3Upscaler.RcasConstants(1050514979u, 887895276u), + new Fsr3Upscaler.RcasConstants(1051256227u, 893859143u), + new Fsr3Upscaler.RcasConstants(1052050675u, 900216232u), + new Fsr3Upscaler.RcasConstants(1052902144u, 907032080u), + new Fsr3Upscaler.RcasConstants(1053814727u, 914306687u), + new Fsr3Upscaler.RcasConstants(1054792807u, 922105590u), + new Fsr3Upscaler.RcasConstants(1055841087u, 930494326u), + new Fsr3Upscaler.RcasConstants(1056964608u, 939538432u), + new Fsr3Upscaler.RcasConstants(1057566688u, 944322633u), + new Fsr3Upscaler.RcasConstants(1058211980u, 949500056u), + new Fsr3Upscaler.RcasConstants(1058903587u, 955005164u), + new Fsr3Upscaler.RcasConstants(1059644835u, 960969031u), + new Fsr3Upscaler.RcasConstants(1060439283u, 967326120u), + new Fsr3Upscaler.RcasConstants(1061290752u, 974141968u), + new Fsr3Upscaler.RcasConstants(1062203335u, 981416575u), + new Fsr3Upscaler.RcasConstants(1063181415u, 989215478u), + new Fsr3Upscaler.RcasConstants(1064229695u, 997604214u), + new Fsr3Upscaler.RcasConstants(1065353216u, 1006648320), }; private static ComputeBuffer CreateConstantBuffer() where TConstants: struct @@ -594,7 +598,7 @@ namespace FidelityFX bufferRef = null; } - private static void DestroyPass(ref Fsr2Pass pass) + private static void DestroyPass(ref Fsr3UpscalerPass pass) { if (pass == null) return; diff --git a/Assets/Scripts/Core/Fsr2Context.cs.meta b/Assets/Scripts/Core/Fsr3UpscalerContext.cs.meta similarity index 100% rename from Assets/Scripts/Core/Fsr2Context.cs.meta rename to Assets/Scripts/Core/Fsr3UpscalerContext.cs.meta diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs b/Assets/Scripts/Core/Fsr3UpscalerPass.cs similarity index 56% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs rename to Assets/Scripts/Core/Fsr3UpscalerPass.cs index 23b8e6c..e1dc225 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs +++ b/Assets/Scripts/Core/Fsr3UpscalerPass.cs @@ -26,24 +26,22 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// Base class for all of the compute passes that make up the FSR2 process. - /// This loosely matches the FfxPipelineState struct from the original FSR2 codebase, wrapped in an object-oriented blanket. + /// Base class for all of the compute passes that make up the FSR3 Upscaler process. + /// This loosely matches the FfxPipelineState struct from the original FSR3 codebase, wrapped in an object-oriented blanket. /// These classes are responsible for loading compute shaders, managing temporary resources, binding resources to shader kernels and dispatching said shaders. /// - internal abstract class Fsr2Pass: IDisposable + internal abstract class Fsr3UpscalerPass: IDisposable { - internal const int ShadingChangeMipLevel = 4; // This matches the FFX_FSR2_SHADING_CHANGE_MIP_LEVEL define + internal const int ShadingChangeMipLevel = 4; // This matches the FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL define - protected readonly Fsr2.ContextDescription ContextDescription; - protected readonly Fsr2Resources Resources; + protected readonly Fsr3Upscaler.ContextDescription ContextDescription; + protected readonly Fsr3UpscalerResources Resources; protected readonly ComputeBuffer Constants; protected ComputeShader ComputeShader; protected int KernelIndex; - protected virtual bool AllowFP16 => true; - - protected Fsr2Pass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + protected Fsr3UpscalerPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) { ContextDescription = contextDescription; Resources = resources; @@ -52,26 +50,24 @@ namespace FidelityFX public virtual void Dispose() { - UnloadComputeShader(); } - public abstract void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY); + public abstract void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY); - protected void LoadComputeShader(string name) + protected void InitComputeShader(string passName, ComputeShader shader) { - LoadComputeShader(name, ContextDescription.Flags, ref ComputeShader, out KernelIndex); + InitComputeShader(passName, shader, ContextDescription.Flags); } - private void LoadComputeShader(string name, Fsr2.InitializationFlags flags, ref ComputeShader shaderRef, out int kernelIndex) + private void InitComputeShader(string passName, ComputeShader shader, Fsr3Upscaler.InitializationFlags flags) { - if (shaderRef == null) + if (shader == null) { - shaderRef = ContextDescription.Callbacks.LoadComputeShader(name); - if (shaderRef == null) - throw new MissingReferenceException($"Shader '{name}' could not be loaded! Please ensure it is included in the project correctly."); + throw new MissingReferenceException($"Shader for FSR3 Upscaler '{passName}' could not be loaded! Please ensure it is included in the project correctly."); } - kernelIndex = shaderRef.FindKernel("CS"); + ComputeShader = shader; + KernelIndex = ComputeShader.FindKernel("CS"); bool useLut = false; #if UNITY_2022_1_OR_NEWER // This will also work in 2020.3.43+ and 2021.3.14+ @@ -81,106 +77,89 @@ namespace FidelityFX } #endif - // Allow 16-bit floating point as a configuration option, except on passes that explicitly disable it - bool supportedFP16 = ((flags & Fsr2.InitializationFlags.EnableFP16Usage) != 0 && AllowFP16); - // This matches the permutation rules from the CreatePipeline* functions - if ((flags & Fsr2.InitializationFlags.EnableHighDynamicRange) != 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_HDR_COLOR_INPUT"); - if ((flags & Fsr2.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS"); - if ((flags & Fsr2.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS"); - if ((flags & Fsr2.InitializationFlags.EnableDepthInverted) != 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_INVERTED_DEPTH"); - if (useLut) shaderRef.EnableKeyword("FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE"); - if (supportedFP16) shaderRef.EnableKeyword("FFX_HALF"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableHighDynamicRange) != 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) != 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH"); + if (useLut) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableFP16Usage) != 0) ComputeShader.EnableKeyword("FFX_HALF"); // Inform the shader which render pipeline we're currently using var pipeline = GraphicsSettings.currentRenderPipeline; if (pipeline != null && pipeline.GetType().Name.Contains("HDRenderPipeline")) { - shaderRef.EnableKeyword("UNITY_FSR2_HDRP"); + ComputeShader.EnableKeyword("UNITY_FSR3UPSCALER_HDRP"); } } - - private void UnloadComputeShader() - { - UnloadComputeShader(ref ComputeShader); - } - - private void UnloadComputeShader(ref ComputeShader shaderRef) - { - if (shaderRef == null) - return; - - ContextDescription.Callbacks.UnloadComputeShader(shaderRef); - shaderRef = null; - } } - internal class Fsr2ComputeLuminancePyramidPass : Fsr2Pass + internal class Fsr3UpscalerComputeLuminancePyramidPass : Fsr3UpscalerPass { private readonly ComputeBuffer _spdConstants; - public Fsr2ComputeLuminancePyramidPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants, ComputeBuffer spdConstants) + public Fsr3UpscalerComputeLuminancePyramidPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants, ComputeBuffer spdConstants) : base(contextDescription, resources, constants) { _spdConstants = spdConstants; - LoadComputeShader("FSR2/ffx_fsr2_compute_luminance_pyramid_pass"); + InitComputeShader("compute_luminance_pyramid_pass", contextDescription.Shaders.computeLuminancePyramidPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavSpdAtomicCount, Resources.SpdAtomicCounter); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavExposureMipLumaChange, Resources.SceneLuminance, ShadingChangeMipLevel); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavExposureMip5, Resources.SceneLuminance, 5); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoExposure, Resources.AutoExposure); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavSpdAtomicCount, Resources.SpdAtomicCounter); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavExposureMipLumaChange, Resources.SceneLuminance, ShadingChangeMipLevel); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavExposureMip5, Resources.SceneLuminance, 5); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoExposure, Resources.AutoExposure); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbSpd, _spdConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbSpd, _spdConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2ReconstructPreviousDepthPass : Fsr2Pass + internal class Fsr3UpscalerReconstructPreviousDepthPass : Fsr3UpscalerPass { - public Fsr2ReconstructPreviousDepthPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerReconstructPreviousDepthPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_reconstruct_previous_depth_pass"); + InitComputeShader("reconstruct_previous_depth_pass", contextDescription.Shaders.reconstructPreviousDepthPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; ref var depth = ref dispatchParams.Depth; ref var motionVectors = ref dispatchParams.MotionVectors; ref var exposure = ref dispatchParams.Exposure; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2DepthClipPass : Fsr2Pass + internal class Fsr3UpscalerDepthClipPass : Fsr3UpscalerPass { - public Fsr2DepthClipPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerDepthClipPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_depth_clip_pass"); + InitComputeShader("depth_clip_pass", contextDescription.Shaders.depthClipPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; ref var depth = ref dispatchParams.Depth; @@ -189,62 +168,59 @@ namespace FidelityFX ref var reactive = ref dispatchParams.Reactive; ref var tac = ref dispatchParams.TransparencyAndComposition; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvReconstructedPrevNearestDepth, Fsr2ShaderIDs.UavReconstructedPrevNearestDepth); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedDepth, Fsr2ShaderIDs.UavDilatedDepth); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPrevDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex ^ 1]); - - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvReconstructedPrevNearestDepth, Fsr3ShaderIDs.UavReconstructedPrevNearestDepth); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedDepth, Fsr3ShaderIDs.UavDilatedDepth); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPrevDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex ^ 1]); + + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2LockPass : Fsr2Pass + internal class Fsr3UpscalerLockPass : Fsr3UpscalerPass { - public Fsr2LockPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerLockPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_lock_pass"); + InitComputeShader("lock_pass", contextDescription.Shaders.lockPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLockInputLuma, Fsr2ShaderIDs.UavLockInputLuma); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLockInputLuma, Fsr3ShaderIDs.UavLockInputLuma); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2AccumulatePass : Fsr2Pass + internal class Fsr3UpscalerAccumulatePass : Fsr3UpscalerPass { - private const string SharpeningKeyword = "FFX_FSR2_OPTION_APPLY_SHARPENING"; - - // Workaround: Disable FP16 path for the accumulate pass on NVIDIA due to reduced occupancy and high VRAM throughput. - protected override bool AllowFP16 => SystemInfo.graphicsDeviceVendorID != 0x10DE; + private const string SharpeningKeyword = "FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING"; #if UNITY_2021_2_OR_NEWER private readonly LocalKeyword _sharpeningKeyword; #endif - public Fsr2AccumulatePass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerAccumulatePass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_accumulate_pass"); + InitComputeShader("accumulate_pass", contextDescription.Shaders.accumulatePass); #if UNITY_2021_2_OR_NEWER _sharpeningKeyword = new LocalKeyword(ComputeShader, SharpeningKeyword); #endif } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { #if UNITY_2021_2_OR_NEWER if (dispatchParams.EnableSharpening) @@ -258,115 +234,115 @@ namespace FidelityFX commandBuffer.DisableShaderKeyword(SharpeningKeyword); #endif - if ((ContextDescription.Flags & Fsr2.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) + if ((ContextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) { - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); } else { ref var motionVectors = ref dispatchParams.MotionVectors; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); } ref var exposure = ref dispatchParams.Exposure; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedReactiveMasks, Fsr2ShaderIDs.UavDilatedReactiveMasks); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInternalUpscaled, Resources.InternalUpscaled[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLockStatus, Resources.LockStatus[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPreparedInputColor, Fsr2ShaderIDs.UavPreparedInputColor); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLanczosLut, Resources.LanczosLut); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvUpscaleMaximumBiasLut, Resources.MaximumBiasLut); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvSceneLuminanceMips, Resources.SceneLuminance); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvAutoExposure, Resources.AutoExposure); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLumaHistory, Resources.LumaHistory[frameIndex ^ 1]); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavInternalUpscaled, Resources.InternalUpscaled[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavLockStatus, Resources.LockStatus[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavLumaHistory, Resources.LumaHistory[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedReactiveMasks, Fsr3ShaderIDs.UavDilatedReactiveMasks); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInternalUpscaled, Resources.InternalUpscaled[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLockStatus, Resources.LockStatus[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPreparedInputColor, Fsr3ShaderIDs.UavPreparedInputColor); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLanczosLut, Resources.LanczosLut); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvUpscaleMaximumBiasLut, Resources.MaximumBiasLut); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvSceneLuminanceMips, Resources.SceneLuminance); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvAutoExposure, Resources.AutoExposure); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLumaHistory, Resources.LumaHistory[frameIndex ^ 1]); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavInternalUpscaled, Resources.InternalUpscaled[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavLockStatus, Resources.LockStatus[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavLumaHistory, Resources.LumaHistory[frameIndex]); ref var output = ref dispatchParams.Output; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2RcasPass : Fsr2Pass + internal class Fsr3UpscalerSharpenPass : Fsr3UpscalerPass { private readonly ComputeBuffer _rcasConstants; - public Fsr2RcasPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants, ComputeBuffer rcasConstants) + public Fsr3UpscalerSharpenPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants, ComputeBuffer rcasConstants) : base(contextDescription, resources, constants) { _rcasConstants = rcasConstants; - LoadComputeShader("FSR2/ffx_fsr2_rcas_pass"); + InitComputeShader("rcas_pass", contextDescription.Shaders.sharpenPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var exposure = ref dispatchParams.Exposure; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvRcasInput, Resources.InternalUpscaled[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvRcasInput, Resources.InternalUpscaled[frameIndex]); ref var output = ref dispatchParams.Output; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbRcas, _rcasConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbRcas, _rcasConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2GenerateReactivePass : Fsr2Pass + internal class Fsr3UpscalerGenerateReactivePass : Fsr3UpscalerPass { private readonly ComputeBuffer _generateReactiveConstants; - public Fsr2GenerateReactivePass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer generateReactiveConstants) + public Fsr3UpscalerGenerateReactivePass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer generateReactiveConstants) : base(contextDescription, resources, null) { _generateReactiveConstants = generateReactiveConstants; - LoadComputeShader("FSR2/ffx_fsr2_autogen_reactive_pass"); + InitComputeShader("autogen_reactive_pass", contextDescription.Shaders.autoGenReactivePass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { } - public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.GenerateReactiveDescription dispatchParams, int dispatchX, int dispatchY) + public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.GenerateReactiveDescription dispatchParams, int dispatchX, int dispatchY) { ref var opaqueOnly = ref dispatchParams.ColorOpaqueOnly; ref var color = ref dispatchParams.ColorPreUpscale; ref var reactive = ref dispatchParams.OutReactive; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoReactive, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoReactive, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbGenReactive, _generateReactiveConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbGenReactive, _generateReactiveConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2TcrAutogeneratePass : Fsr2Pass + internal class Fsr3UpscalerTcrAutogeneratePass : Fsr3UpscalerPass { private readonly ComputeBuffer _tcrAutogenerateConstants; - public Fsr2TcrAutogeneratePass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants, ComputeBuffer tcrAutogenerateConstants) + public Fsr3UpscalerTcrAutogeneratePass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants, ComputeBuffer tcrAutogenerateConstants) : base(contextDescription, resources, constants) { _tcrAutogenerateConstants = tcrAutogenerateConstants; - LoadComputeShader("FSR2/ffx_fsr2_tcr_autogen_pass"); + InitComputeShader("tcr_autogen_pass", contextDescription.Shaders.tcrAutoGenPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; ref var motionVectors = ref dispatchParams.MotionVectors; @@ -374,21 +350,21 @@ namespace FidelityFX ref var reactive = ref dispatchParams.Reactive; ref var tac = ref dispatchParams.TransparencyAndComposition; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoReactive, Resources.AutoReactive); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoComposition, Resources.AutoComposition); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoReactive, Resources.AutoReactive); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoComposition, Resources.AutoComposition); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex]); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbGenReactive, _tcrAutogenerateConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbGenReactive, _tcrAutogenerateConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } diff --git a/Assets/Scripts/Core/Fsr2Pass.cs.meta b/Assets/Scripts/Core/Fsr3UpscalerPass.cs.meta similarity index 100% rename from Assets/Scripts/Core/Fsr2Pass.cs.meta rename to Assets/Scripts/Core/Fsr3UpscalerPass.cs.meta diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs b/Assets/Scripts/Core/Fsr3UpscalerResources.cs similarity index 64% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs rename to Assets/Scripts/Core/Fsr3UpscalerResources.cs index a3e8e27..676867b 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs +++ b/Assets/Scripts/Core/Fsr3UpscalerResources.cs @@ -26,10 +26,10 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// Helper class for bundling and managing persistent resources required by the FSR2 process. + /// Helper class for bundling and managing persistent resources required by the FSR3 Upscaler process. /// This includes lookup tables, default fallback resources and double-buffered resources that get swapped between frames. /// - internal class Fsr2Resources + internal class Fsr3UpscalerResources { public Texture2D DefaultExposure; public Texture2D DefaultReactive; @@ -47,7 +47,7 @@ namespace FidelityFX public readonly RenderTexture[] PrevPreAlpha = new RenderTexture[2]; public readonly RenderTexture[] PrevPostAlpha = new RenderTexture[2]; - public void Create(Fsr2.ContextDescription contextDescription) + public void Create(Fsr3Upscaler.ContextDescription contextDescription) { // Generate the data for the LUT const int lanczos2LutWidth = 128; @@ -55,7 +55,7 @@ namespace FidelityFX for (int currentLanczosWidthIndex = 0; currentLanczosWidthIndex < lanczos2LutWidth; ++currentLanczosWidthIndex) { float x = 2.0f * currentLanczosWidthIndex / (lanczos2LutWidth - 1); - float y = Fsr2.Lanczos2(x); + float y = Fsr3Upscaler.Lanczos2(x); lanczos2Weights[currentLanczosWidthIndex] = y; } @@ -65,108 +65,108 @@ namespace FidelityFX maximumBias[i] = MaximumBias[i] / 2.0f; } - // Resource FSR2_LanczosLutData: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE + // Resource FSR3UPSCALER_LanczosLutData: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE // R16_SNorm textures are not supported by Unity on most platforms, strangely enough. So instead we use R32_SFloat and upload pre-normalized float data. - LanczosLut = new Texture2D(lanczos2LutWidth, 1, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR2_LanczosLutData" }; + LanczosLut = new Texture2D(lanczos2LutWidth, 1, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR3UPSCALER_LanczosLutData" }; LanczosLut.SetPixelData(lanczos2Weights, 0); LanczosLut.Apply(); - // Resource FSR2_MaximumUpsampleBias: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE - MaximumBiasLut = new Texture2D(MaximumBiasTextureWidth, MaximumBiasTextureHeight, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR2_MaximumUpsampleBias" }; + // Resource FSR3UPSCALER_MaximumUpsampleBias: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE + MaximumBiasLut = new Texture2D(MaximumBiasTextureWidth, MaximumBiasTextureHeight, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR3UPSCALER_MaximumUpsampleBias" }; MaximumBiasLut.SetPixelData(maximumBias, 0); MaximumBiasLut.Apply(); - // Resource FSR2_DefaultExposure: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE - DefaultExposure = new Texture2D(1, 1, GraphicsFormat.R32G32_SFloat, TextureCreationFlags.None) { name = "FSR2_DefaultExposure" }; + // Resource FSR3UPSCALER_DefaultExposure: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE + DefaultExposure = new Texture2D(1, 1, GraphicsFormat.R32G32_SFloat, TextureCreationFlags.None) { name = "FSR3UPSCALER_DefaultExposure" }; DefaultExposure.SetPixel(0, 0, Color.clear); DefaultExposure.Apply(); - // Resource FSR2_DefaultReactivityMask: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE - DefaultReactive = new Texture2D(1, 1, GraphicsFormat.R8_UNorm, TextureCreationFlags.None) { name = "FSR2_DefaultReactivityMask" }; + // Resource FSR3UPSCALER_DefaultReactivityMask: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE + DefaultReactive = new Texture2D(1, 1, GraphicsFormat.R8_UNorm, TextureCreationFlags.None) { name = "FSR3UPSCALER_DefaultReactivityMask" }; DefaultReactive.SetPixel(0, 0, Color.clear); DefaultReactive.Apply(); - // Resource FSR2_SpdAtomicCounter: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE - // Despite what the original FSR2 codebase says, this resource really isn't aliasable. Resetting this counter to 0 every frame breaks auto-exposure on MacOS Metal. - SpdAtomicCounter = new RenderTexture(1, 1, 0, GraphicsFormat.R32_UInt) { name = "FSR2_SpdAtomicCounter", enableRandomWrite = true }; + // Resource FSR3UPSCALER_SpdAtomicCounter: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE + // Despite what the original FSR3 codebase says, this resource really isn't aliasable. Resetting this counter to 0 every frame breaks auto-exposure on MacOS Metal. + SpdAtomicCounter = new RenderTexture(1, 1, 0, GraphicsFormat.R32_UInt) { name = "FSR3UPSCALER_SpdAtomicCounter", enableRandomWrite = true }; SpdAtomicCounter.Create(); - // Resource FSR2_AutoExposure: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE - AutoExposure = new RenderTexture(1, 1, 0, GraphicsFormat.R32G32_SFloat) { name = "FSR2_AutoExposure", enableRandomWrite = true }; + // Resource FSR3UPSCALER_AutoExposure: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE + AutoExposure = new RenderTexture(1, 1, 0, GraphicsFormat.R32G32_SFloat) { name = "FSR3UPSCALER_AutoExposure", enableRandomWrite = true }; AutoExposure.Create(); - // Resource FSR2_ExposureMips: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + // Resource FSR3UPSCALER_ExposureMips: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE // This is a rather special case: it's an aliasable resource, but because we require a mipmap chain and bind specific mip levels per shader, we can't easily use temporary RTs for this. int w = contextDescription.MaxRenderSize.x / 2, h = contextDescription.MaxRenderSize.y / 2; int mipCount = 1 + Mathf.FloorToInt(Mathf.Log(Math.Max(w, h), 2.0f)); - SceneLuminance = new RenderTexture(w, h, 0, GraphicsFormat.R16_SFloat, mipCount) { name = "FSR2_ExposureMips", enableRandomWrite = true, useMipMap = true, autoGenerateMips = false }; + SceneLuminance = new RenderTexture(w, h, 0, GraphicsFormat.R16_SFloat, mipCount) { name = "FSR3UPSCALER_ExposureMips", enableRandomWrite = true, useMipMap = true, autoGenerateMips = false }; SceneLuminance.Create(); - // Resources FSR2_InternalDilatedVelocity1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(DilatedMotionVectors, "FSR2_InternalDilatedVelocity", contextDescription.MaxRenderSize, GraphicsFormat.R16G16_SFloat); + // Resources FSR3UPSCALER_InternalDilatedVelocity1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(DilatedMotionVectors, "FSR3UPSCALER_InternalDilatedVelocity", contextDescription.MaxRenderSize, GraphicsFormat.R16G16_SFloat); - // Resources FSR2_LockStatus1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(LockStatus, "FSR2_LockStatus", contextDescription.DisplaySize, GraphicsFormat.R16G16_SFloat); + // Resources FSR3UPSCALER_LockStatus1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(LockStatus, "FSR3UPSCALER_LockStatus", contextDescription.DisplaySize, GraphicsFormat.R16G16_SFloat); - // Resources FSR2_InternalUpscaled1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(InternalUpscaled, "FSR2_InternalUpscaled", contextDescription.DisplaySize, GraphicsFormat.R16G16B16A16_SFloat); + // Resources FSR3UPSCALER_InternalUpscaled1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(InternalUpscaled, "FSR3UPSCALER_InternalUpscaled", contextDescription.DisplaySize, GraphicsFormat.R16G16B16A16_SFloat); - // Resources FSR2_LumaHistory1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8B8A8_UNORM, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(LumaHistory, "FSR2_LumaHistory", contextDescription.DisplaySize, GraphicsFormat.R8G8B8A8_UNorm); + // Resources FSR3UPSCALER_LumaHistory1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8B8A8_UNORM, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(LumaHistory, "FSR3UPSCALER_LumaHistory", contextDescription.DisplaySize, GraphicsFormat.R8G8B8A8_UNorm); } - public void CreateTcrAutogenResources(Fsr2.ContextDescription contextDescription) + public void CreateTcrAutogenResources(Fsr3Upscaler.ContextDescription contextDescription) { - // Resource FSR2_AutoReactive: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE - AutoReactive = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR2_AutoReactive", enableRandomWrite = true }; + // Resource FSR3UPSCALER_AutoReactive: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE + AutoReactive = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR3UPSCALER_AutoReactive", enableRandomWrite = true }; AutoReactive.Create(); - // Resource FSR2_AutoComposition: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE - AutoComposition = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR2_AutoComposition", enableRandomWrite = true }; + // Resource FSR3UPSCALER_AutoComposition: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE + AutoComposition = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR3UPSCALER_AutoComposition", enableRandomWrite = true }; AutoComposition.Create(); - // Resources FSR2_PrevPreAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(PrevPreAlpha, "FSR2_PrevPreAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); + // Resources FSR3UPSCALER_PrevPreAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(PrevPreAlpha, "FSR3UPSCALER_PrevPreAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); - // Resources FSR2_PrevPostAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(PrevPostAlpha, "FSR2_PrevPostAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); + // Resources FSR3UPSCALER_PrevPostAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(PrevPostAlpha, "FSR3UPSCALER_PrevPostAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); } // Set up shared aliasable resources, i.e. temporary render textures // These do not need to persist between frames, but they do need to be available between passes - public static void CreateAliasableResources(CommandBuffer commandBuffer, Fsr2.ContextDescription contextDescription, Fsr2.DispatchDescription dispatchParams) + public static void CreateAliasableResources(CommandBuffer commandBuffer, Fsr3Upscaler.ContextDescription contextDescription, Fsr3Upscaler.DispatchDescription dispatchParams) { Vector2Int displaySize = contextDescription.DisplaySize; Vector2Int maxRenderSize = contextDescription.MaxRenderSize; - // FSR2_ReconstructedPrevNearestDepth: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavReconstructedPrevNearestDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_UInt, 1, true); + // FSR3UPSCALER_ReconstructedPrevNearestDepth: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavReconstructedPrevNearestDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_UInt, 1, true); - // FSR2_DilatedDepth: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavDilatedDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_SFloat, 1, true); + // FSR3UPSCALER_DilatedDepth: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavDilatedDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_SFloat, 1, true); - // FSR2_LockInputLuma: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavLockInputLuma, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16_SFloat, 1, true); + // FSR3UPSCALER_LockInputLuma: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavLockInputLuma, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16_SFloat, 1, true); - // FSR2_DilatedReactiveMasks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavDilatedReactiveMasks, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R8G8_UNorm, 1, true); + // FSR3UPSCALER_DilatedReactiveMasks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavDilatedReactiveMasks, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R8G8_UNorm, 1, true); - // FSR2_PreparedInputColor: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavPreparedInputColor, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16G16B16A16_SFloat, 1, true); + // FSR3UPSCALER_PreparedInputColor: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavPreparedInputColor, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16G16B16A16_SFloat, 1, true); - // FSR2_NewLocks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavNewLocks, displaySize.x, displaySize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); + // FSR3UPSCALER_NewLocks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavNewLocks, displaySize.x, displaySize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); } public static void DestroyAliasableResources(CommandBuffer commandBuffer) { // Release all of the aliasable resources used this frame - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavReconstructedPrevNearestDepth); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavDilatedDepth); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavLockInputLuma); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavDilatedReactiveMasks); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavPreparedInputColor); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavNewLocks); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavReconstructedPrevNearestDepth); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavDilatedDepth); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavLockInputLuma); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavDilatedReactiveMasks); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavPreparedInputColor); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavNewLocks); } private static void CreateDoubleBufferedResource(RenderTexture[] resource, string name, Vector2Int size, GraphicsFormat format) diff --git a/Assets/Scripts/Core/Fsr2Resources.cs.meta b/Assets/Scripts/Core/Fsr3UpscalerResources.cs.meta similarity index 100% rename from Assets/Scripts/Core/Fsr2Resources.cs.meta rename to Assets/Scripts/Core/Fsr3UpscalerResources.cs.meta diff --git a/Assets/Scripts/Fsr2ImageEffect.cs b/Assets/Scripts/Fsr3UpscalerImageEffect.cs similarity index 76% rename from Assets/Scripts/Fsr2ImageEffect.cs rename to Assets/Scripts/Fsr3UpscalerImageEffect.cs index e0f87d7..a5591a5 100644 --- a/Assets/Scripts/Fsr2ImageEffect.cs +++ b/Assets/Scripts/Fsr3UpscalerImageEffect.cs @@ -19,7 +19,6 @@ // THE SOFTWARE. using System; -using System.Collections; using UnityEngine; using UnityEngine.Experimental.Rendering; using UnityEngine.Rendering; @@ -27,17 +26,17 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// This class is responsible for hooking into various Unity events and translating them to the FSR2 subsystem. - /// This includes creation and destruction of the FSR2 context, as well as dispatching commands at the right time. - /// This component also exposes various FSR2 parameters to the Unity inspector. + /// This class is responsible for hooking into various Unity events and translating them to the FSR3 Upscaler subsystem. + /// This includes creation and destruction of the FSR3 Upscaler context, as well as dispatching commands at the right time. + /// This component also exposes various FSR3 Upscaler parameters to the Unity inspector. /// [RequireComponent(typeof(Camera))] - public class Fsr2ImageEffect : MonoBehaviour + public class Fsr3UpscalerImageEffect : MonoBehaviour { - public IFsr2Callbacks Callbacks { get; set; } = new Fsr2CallbacksBase(); + public IFsr3UpscalerCallbacks Callbacks { get; set; } = new Fsr3UpscalerCallbacksBase(); [Tooltip("Standard scaling ratio presets.")] - public Fsr2.QualityMode qualityMode = Fsr2.QualityMode.Quality; + public Fsr3Upscaler.QualityMode qualityMode = Fsr3Upscaler.QualityMode.Quality; [Tooltip("Apply RCAS sharpening to the image after upscaling.")] public bool performSharpenPass = true; @@ -76,7 +75,7 @@ namespace FidelityFX [Tooltip("A value to set for the binary reactive mask")] [Range(0, 1)] public float binaryValue = 0.9f; [Tooltip("Flags to determine how to generate the reactive mask")] - public Fsr2.GenerateReactiveFlags flags = Fsr2.GenerateReactiveFlags.ApplyTonemap | Fsr2.GenerateReactiveFlags.ApplyThreshold | Fsr2.GenerateReactiveFlags.UseComponentsMax; + public Fsr3Upscaler.GenerateReactiveFlags flags = Fsr3Upscaler.GenerateReactiveFlags.ApplyTonemap | Fsr3Upscaler.GenerateReactiveFlags.ApplyThreshold | Fsr3Upscaler.GenerateReactiveFlags.UseComponentsMax; } [Tooltip("(Experimental) Automatically generate and use Reactive mask and Transparency & composition mask internally.")] @@ -98,26 +97,25 @@ namespace FidelityFX [Range(0, 1)] public float autoReactiveMax = 0.9f; } - [Header("Output resources")] - [Tooltip("Optional render texture to copy motion vector data to, for additional post-processing after upscaling.")] - public RenderTexture outputMotionVectors; + [SerializeField] + private Fsr3UpscalerAssets assets; - private Fsr2Context _context; + private Fsr3UpscalerContext _context; private Vector2Int _maxRenderSize; private Vector2Int _displaySize; private bool _resetHistory; - private readonly Fsr2.DispatchDescription _dispatchDescription = new Fsr2.DispatchDescription(); - private readonly Fsr2.GenerateReactiveDescription _genReactiveDescription = new Fsr2.GenerateReactiveDescription(); + private readonly Fsr3Upscaler.DispatchDescription _dispatchDescription = new Fsr3Upscaler.DispatchDescription(); + private readonly Fsr3Upscaler.GenerateReactiveDescription _genReactiveDescription = new Fsr3Upscaler.GenerateReactiveDescription(); - private Fsr2ImageEffectHelper _helper; + private Fsr3UpscalerImageEffectHelper _helper; private Camera _renderCamera; private RenderTexture _originalRenderTarget; private DepthTextureMode _originalDepthTextureMode; private Rect _originalRect; - private Fsr2.QualityMode _prevQualityMode; + private Fsr3Upscaler.QualityMode _prevQualityMode; private Vector2Int _prevDisplaySize; private bool _prevAutoExposure; @@ -129,7 +127,7 @@ namespace FidelityFX private void OnEnable() { - // Set up the original camera to output all of the required FSR2 input resources at the desired resolution + // Set up the original camera to output all of the required FSR3 input resources at the desired resolution _renderCamera = GetComponent(); _originalRenderTarget = _renderCamera.targetTexture; _originalDepthTextureMode = _renderCamera.depthTextureMode; @@ -138,24 +136,31 @@ namespace FidelityFX // Determine the desired rendering and display resolutions _displaySize = GetDisplaySize(); - Fsr2.GetRenderResolutionFromQualityMode(out var maxRenderWidth, out var maxRenderHeight, _displaySize.x, _displaySize.y, qualityMode); + Fsr3Upscaler.GetRenderResolutionFromQualityMode(out var maxRenderWidth, out var maxRenderHeight, _displaySize.x, _displaySize.y, qualityMode); _maxRenderSize = new Vector2Int(maxRenderWidth, maxRenderHeight); if (!SystemInfo.supportsComputeShaders) { - Debug.LogError("FSR2 requires compute shader support!"); + Debug.LogError("FSR3 Upscaler requires compute shader support!"); + enabled = false; + return; + } + + if (assets == null) + { + Debug.LogError($"FSR3 Upscaler assets are not assigned! Please ensure an {nameof(Fsr3UpscalerAssets)} asset is assigned to the Assets property of this component."); enabled = false; return; } if (_maxRenderSize.x == 0 || _maxRenderSize.y == 0) { - Debug.LogError($"FSR2 render size is invalid: {_maxRenderSize.x}x{_maxRenderSize.y}. Please check your screen resolution and camera viewport parameters."); + Debug.LogError($"FSR3 Upscaler render size is invalid: {_maxRenderSize.x}x{_maxRenderSize.y}. Please check your screen resolution and camera viewport parameters."); enabled = false; return; } - _helper = GetComponent(); + _helper = GetComponent(); _copyWithDepthMaterial = new Material(Shader.Find("Hidden/BlitCopyWithDepth")); CreateFsrContext(); @@ -180,14 +185,14 @@ namespace FidelityFX private void CreateFsrContext() { - // Initialize FSR2 context - Fsr2.InitializationFlags flags = 0; - if (_renderCamera.allowHDR) flags |= Fsr2.InitializationFlags.EnableHighDynamicRange; - if (enableFP16) flags |= Fsr2.InitializationFlags.EnableFP16Usage; - if (enableAutoExposure) flags |= Fsr2.InitializationFlags.EnableAutoExposure; - if (UsingDynamicResolution()) flags |= Fsr2.InitializationFlags.EnableDynamicResolution; + // Initialize FSR3 Upscaler context + Fsr3Upscaler.InitializationFlags flags = 0; + if (_renderCamera.allowHDR) flags |= Fsr3Upscaler.InitializationFlags.EnableHighDynamicRange; + if (enableFP16) flags |= Fsr3Upscaler.InitializationFlags.EnableFP16Usage; + if (enableAutoExposure) flags |= Fsr3Upscaler.InitializationFlags.EnableAutoExposure; + if (UsingDynamicResolution()) flags |= Fsr3Upscaler.InitializationFlags.EnableDynamicResolution; - _context = Fsr2.CreateContext(_displaySize, _maxRenderSize, Callbacks, flags); + _context = Fsr3Upscaler.CreateContext(_displaySize, _maxRenderSize, assets.shaders, flags); _prevDisplaySize = _displaySize; _prevQualityMode = qualityMode; @@ -209,8 +214,8 @@ namespace FidelityFX private void CreateCommandBuffers() { - _dispatchCommandBuffer = new CommandBuffer { name = "FSR2 Dispatch" }; - _opaqueInputCommandBuffer = new CommandBuffer { name = "FSR2 Opaque Input" }; + _dispatchCommandBuffer = new CommandBuffer { name = "FSR3 Upscaler Dispatch" }; + _opaqueInputCommandBuffer = new CommandBuffer { name = "FSR3 Upscaler Opaque Input" }; _renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer); } @@ -233,7 +238,7 @@ namespace FidelityFX private void ApplyMipmapBias() { // Apply a mipmap bias so that textures retain their sharpness - float biasOffset = Fsr2.GetMipmapBiasOffset(_maxRenderSize.x, _displaySize.x); + float biasOffset = Fsr3Upscaler.GetMipmapBiasOffset(_maxRenderSize.x, _displaySize.x); if (!float.IsNaN(biasOffset) && !float.IsInfinity(biasOffset)) { Callbacks.ApplyMipmapBias(biasOffset); @@ -248,7 +253,7 @@ namespace FidelityFX private void Update() { - // Monitor for any changes in parameters that require a reset of the FSR2 context + // Monitor for any changes in parameters that require a reset of the FSR3 Upscaler context var displaySize = GetDisplaySize(); if (displaySize.x != _prevDisplaySize.x || displaySize.y != _prevDisplaySize.y || qualityMode != _prevQualityMode || enableAutoExposure != _prevAutoExposure) { @@ -275,7 +280,7 @@ namespace FidelityFX if (_helper == null || !_helper.enabled) { // Render to a smaller portion of the screen by manipulating the camera's viewport rect - _renderCamera.aspect = (_displaySize.x * _originalRect.width) / (_displaySize.y * _originalRect.height); + _renderCamera.aspect = (float)_displaySize.x / _displaySize.y; _renderCamera.rect = new Rect(0, 0, _originalRect.width * _maxRenderSize.x / _renderCamera.pixelWidth, _originalRect.height * _maxRenderSize.y / _renderCamera.pixelHeight); } @@ -300,21 +305,21 @@ namespace FidelityFX private void SetupDispatchDescription() { - // Set up the main FSR2 dispatch parameters - _dispatchDescription.Color = new Fsr2.ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Color); - _dispatchDescription.Depth = new Fsr2.ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Depth); - _dispatchDescription.MotionVectors = new Fsr2.ResourceView(BuiltinRenderTextureType.MotionVectors); - _dispatchDescription.Exposure = Fsr2.ResourceView.Unassigned; - _dispatchDescription.Reactive = Fsr2.ResourceView.Unassigned; - _dispatchDescription.TransparencyAndComposition = Fsr2.ResourceView.Unassigned; + // Set up the main FSR3 Upscaler dispatch parameters + _dispatchDescription.Color = new ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Color); + _dispatchDescription.Depth = new ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Depth); + _dispatchDescription.MotionVectors = new ResourceView(BuiltinRenderTextureType.MotionVectors); + _dispatchDescription.Exposure = ResourceView.Unassigned; + _dispatchDescription.Reactive = ResourceView.Unassigned; + _dispatchDescription.TransparencyAndComposition = ResourceView.Unassigned; - if (!enableAutoExposure && exposure != null) _dispatchDescription.Exposure = new Fsr2.ResourceView(exposure); - if (reactiveMask != null) _dispatchDescription.Reactive = new Fsr2.ResourceView(reactiveMask); - if (transparencyAndCompositionMask != null) _dispatchDescription.TransparencyAndComposition = new Fsr2.ResourceView(transparencyAndCompositionMask); + if (!enableAutoExposure && exposure != null) _dispatchDescription.Exposure = new ResourceView(exposure); + if (reactiveMask != null) _dispatchDescription.Reactive = new ResourceView(reactiveMask); + if (transparencyAndCompositionMask != null) _dispatchDescription.TransparencyAndComposition = new ResourceView(transparencyAndCompositionMask); var scaledRenderSize = GetScaledRenderSize(); - _dispatchDescription.Output = new Fsr2.ResourceView(Fsr2ShaderIDs.UavUpscaledOutput); + _dispatchDescription.Output = new ResourceView(Fsr3ShaderIDs.UavUpscaledOutput); _dispatchDescription.PreExposure = preExposure; _dispatchDescription.EnableSharpening = performSharpenPass; _dispatchDescription.Sharpness = sharpness; @@ -333,7 +338,7 @@ namespace FidelityFX _dispatchDescription.EnableAutoReactive = autoGenerateTransparencyAndComposition; if (autoGenerateTransparencyAndComposition) { - _dispatchDescription.ColorOpaqueOnly = new Fsr2.ResourceView(_colorOpaqueOnly); + _dispatchDescription.ColorOpaqueOnly = new ResourceView(_colorOpaqueOnly); _dispatchDescription.AutoTcThreshold = generateTransparencyAndCompositionParameters.autoTcThreshold; _dispatchDescription.AutoTcScale = generateTransparencyAndCompositionParameters.autoTcScale; _dispatchDescription.AutoReactiveScale = generateTransparencyAndCompositionParameters.autoReactiveScale; @@ -342,7 +347,7 @@ namespace FidelityFX if (SystemInfo.usesReversedZBuffer) { - // Swap the near and far clip plane distances as FSR2 expects this when using inverted depth + // Swap the near and far clip plane distances as FSR3 expects this when using inverted depth (_dispatchDescription.CameraNear, _dispatchDescription.CameraFar) = (_dispatchDescription.CameraFar, _dispatchDescription.CameraNear); } } @@ -350,9 +355,9 @@ namespace FidelityFX private void SetupAutoReactiveDescription() { // Set up the parameters to auto-generate a reactive mask - _genReactiveDescription.ColorOpaqueOnly = new Fsr2.ResourceView(_colorOpaqueOnly); - _genReactiveDescription.ColorPreUpscale = new Fsr2.ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Color); - _genReactiveDescription.OutReactive = new Fsr2.ResourceView(Fsr2ShaderIDs.UavAutoReactive); + _genReactiveDescription.ColorOpaqueOnly = new ResourceView(_colorOpaqueOnly); + _genReactiveDescription.ColorPreUpscale = new ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Color); + _genReactiveDescription.OutReactive = new ResourceView(Fsr3ShaderIDs.UavAutoReactive); _genReactiveDescription.RenderSize = GetScaledRenderSize(); _genReactiveDescription.Scale = generateReactiveParameters.scale; _genReactiveDescription.CutoffThreshold = generateReactiveParameters.cutoffThreshold; @@ -364,9 +369,9 @@ namespace FidelityFX { var scaledRenderSize = GetScaledRenderSize(); - // Perform custom jittering of the camera's projection matrix according to FSR2's recipe - int jitterPhaseCount = Fsr2.GetJitterPhaseCount(scaledRenderSize.x, _displaySize.x); - Fsr2.GetJitterOffset(out float jitterX, out float jitterY, Time.frameCount, jitterPhaseCount); + // Perform custom jittering of the camera's projection matrix according to FSR3's recipe + int jitterPhaseCount = Fsr3Upscaler.GetJitterPhaseCount(scaledRenderSize.x, _displaySize.x); + Fsr3Upscaler.GetJitterOffset(out float jitterX, out float jitterY, Time.frameCount, jitterPhaseCount); _dispatchDescription.JitterOffset = new Vector2(jitterX, jitterY); @@ -392,38 +397,36 @@ namespace FidelityFX if (autoGenerateReactiveMask) { - // The auto-reactive mask pass is executed separately from the main FSR2 passes + // The auto-reactive mask pass is executed separately from the main FSR3 Upscaler passes var scaledRenderSize = GetScaledRenderSize(); - _dispatchCommandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavAutoReactive, scaledRenderSize.x, scaledRenderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); + _dispatchCommandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavAutoReactive, scaledRenderSize.x, scaledRenderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); _context.GenerateReactiveMask(_genReactiveDescription, _dispatchCommandBuffer); - _dispatchDescription.Reactive = new Fsr2.ResourceView(Fsr2ShaderIDs.UavAutoReactive); + _dispatchDescription.Reactive = new ResourceView(Fsr3ShaderIDs.UavAutoReactive); } - // The backbuffer is not set up to allow random-write access, so we need a temporary render texture for FSR2 to output to - _dispatchCommandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavUpscaledOutput, _displaySize.x, _displaySize.y, 0, default, GetDefaultFormat(), default, 1, true); + // The backbuffer is not set up to allow random-write access, so we need a temporary render texture for FSR3 to output to + _dispatchCommandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavUpscaledOutput, _displaySize.x, _displaySize.y, 0, default, GetDefaultFormat(), default, 1, true); _context.Dispatch(_dispatchDescription, _dispatchCommandBuffer); // Output the upscaled image if (_originalRenderTarget != null) { - // Output to the camera target texture, passing through depth and motion vectors + // Output to the camera target texture, passing through depth as well _dispatchCommandBuffer.SetGlobalTexture("_DepthTex", BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Depth); - _dispatchCommandBuffer.Blit(Fsr2ShaderIDs.UavUpscaledOutput, _originalRenderTarget, _copyWithDepthMaterial); - if (outputMotionVectors != null) - _dispatchCommandBuffer.Blit(BuiltinRenderTextureType.MotionVectors, outputMotionVectors); + _dispatchCommandBuffer.Blit(Fsr3ShaderIDs.UavUpscaledOutput, _originalRenderTarget, _copyWithDepthMaterial); } else { // Output directly to the backbuffer - _dispatchCommandBuffer.Blit(Fsr2ShaderIDs.UavUpscaledOutput, dest); + _dispatchCommandBuffer.Blit(Fsr3ShaderIDs.UavUpscaledOutput, dest); } - _dispatchCommandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavUpscaledOutput); - _dispatchCommandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavAutoReactive); + _dispatchCommandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavUpscaledOutput); + _dispatchCommandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavAutoReactive); Graphics.ExecuteCommandBuffer(_dispatchCommandBuffer); - + if (_colorOpaqueOnly != null) { RenderTexture.ReleaseTemporary(_colorOpaqueOnly); @@ -462,5 +465,20 @@ namespace FidelityFX return _maxRenderSize; } + + #if UNITY_EDITOR + private void Reset() + { + if (assets != null) + return; + + string[] assetGuids = UnityEditor.AssetDatabase.FindAssets($"t:{nameof(Fsr3UpscalerAssets)}"); + if (assetGuids == null || assetGuids.Length == 0) + return; + + string assetPath = UnityEditor.AssetDatabase.GUIDToAssetPath(assetGuids[0]); + assets = UnityEditor.AssetDatabase.LoadAssetAtPath(assetPath); + } + #endif } } diff --git a/Assets/Scripts/Fsr2ImageEffect.cs.meta b/Assets/Scripts/Fsr3UpscalerImageEffect.cs.meta similarity index 100% rename from Assets/Scripts/Fsr2ImageEffect.cs.meta rename to Assets/Scripts/Fsr3UpscalerImageEffect.cs.meta diff --git a/Assets/Scripts/Fsr2ImageEffectHelper.cs b/Assets/Scripts/Fsr3UpscalerImageEffectHelper.cs similarity index 75% rename from Assets/Scripts/Fsr2ImageEffectHelper.cs rename to Assets/Scripts/Fsr3UpscalerImageEffectHelper.cs index 25b2902..785ab8c 100644 --- a/Assets/Scripts/Fsr2ImageEffectHelper.cs +++ b/Assets/Scripts/Fsr3UpscalerImageEffectHelper.cs @@ -24,23 +24,23 @@ using UnityEngine; namespace FidelityFX { /// - /// Small helper script to be used in conjunction with the Fsr2ImageEffect script. - /// The FSR2 image effect needs to be the last effect in the post-processing chain but for render scaling to work properly, it also needs to be the first to execute OnPreCull. + /// Small helper script to be used in conjunction with the Fsr3UpscalerImageEffect script. + /// The FSR3 Upscaler image effect needs to be the last effect in the post-processing chain but for render scaling to work properly, it also needs to be the first to execute OnPreCull. /// Unfortunately altering the script execution order does not affect the order in which OnPreCull is executed. Only the order of scripts on the same game object matters. /// - /// When combining FSR2 upscaling with other post-processing effects (most notably Unity's Post-Processing Stack V2), + /// When combining FSR3 upscaling with other post-processing effects (most notably Unity's Post-Processing Stack V2), /// this script should be added to the same camera and moved up above any other scripts that have an OnPreCull method. /// - [RequireComponent(typeof(Camera), typeof(Fsr2ImageEffect))] - public class Fsr2ImageEffectHelper : MonoBehaviour + [RequireComponent(typeof(Camera), typeof(Fsr3UpscalerImageEffect))] + public class Fsr3UpscalerImageEffectHelper : MonoBehaviour { private Camera _renderCamera; - private Fsr2ImageEffect _imageEffect; + private Fsr3UpscalerImageEffect _imageEffect; private void OnEnable() { _renderCamera = GetComponent(); - _imageEffect = GetComponent(); + _imageEffect = GetComponent(); } private void OnPreCull() @@ -49,10 +49,10 @@ namespace FidelityFX return; var originalRect = _renderCamera.rect; - float upscaleRatio = Fsr2.GetUpscaleRatioFromQualityMode(_imageEffect.qualityMode); + float upscaleRatio = Fsr3Upscaler.GetUpscaleRatioFromQualityMode(_imageEffect.qualityMode); // Render to a smaller portion of the screen by manipulating the camera's viewport rect - _renderCamera.aspect = (_renderCamera.pixelWidth * originalRect.width) / (_renderCamera.pixelHeight * originalRect.height); + _renderCamera.aspect = (float)_renderCamera.pixelWidth / _renderCamera.pixelHeight; _renderCamera.rect = new Rect(0, 0, originalRect.width / upscaleRatio, originalRect.height / upscaleRatio); } } diff --git a/Assets/Scripts/Fsr2ImageEffectHelper.cs.meta b/Assets/Scripts/Fsr3UpscalerImageEffectHelper.cs.meta similarity index 100% rename from Assets/Scripts/Fsr2ImageEffectHelper.cs.meta rename to Assets/Scripts/Fsr3UpscalerImageEffectHelper.cs.meta diff --git a/Assets/Resources.meta b/Assets/Shaders.meta similarity index 100% rename from Assets/Resources.meta rename to Assets/Shaders.meta diff --git a/Assets/Resources/FSR2.meta b/Assets/Shaders/FSR3.meta similarity index 77% rename from Assets/Resources/FSR2.meta rename to Assets/Shaders/FSR3.meta index 6d47067..ca8a4cc 100644 --- a/Assets/Resources/FSR2.meta +++ b/Assets/Shaders/FSR3.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cad7d53fa2166a0449bec7a9b4f17d69 +guid: 661ffc6dbd7389b4da99fb9f749745de folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute similarity index 61% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute index a359485..5cbfb80 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute @@ -21,21 +21,21 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE -#pragma multi_compile_local __ FFX_FSR2_OPTION_HDR_COLOR_INPUT -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" // 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 -#undef FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE -#define FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE 1 +#ifdef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#undef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE 1 #endif -#include "shaders/ffx_fsr2_accumulate_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_accumulate_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta similarity index 79% rename from Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta index 49033cb..dbe5282 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0894ebeefb6aa7d4680c71dffbda3fee +guid: c9b45f0ae7673694ba57a4aadfe212e9 ComputeShaderImporter: externalObjects: {} preprocessorOverride: 0 diff --git a/Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute new file mode 100644 index 0000000..e13c001 --- /dev/null +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute @@ -0,0 +1,32 @@ +// Copyright (c) 2023 Nico de Poel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma kernel CS + +#pragma multi_compile_local __ FFX_HALF +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP + +#include "ffx_fsr3upscaler_unity_common.cginc" + +#include "shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta similarity index 79% rename from Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute.meta rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta index 26fb9ba..1df041b 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute.meta +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8026d9d8542eab6499c32d5d46beb2b6 +guid: 5716b91fdaa4e9e439df6b96a796fe6e ComputeShaderImporter: externalObjects: {} preprocessorOverride: 0 diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute similarity index 76% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute index 385dfe4..d5903c0 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute @@ -20,14 +20,14 @@ #pragma kernel CS -//#pragma multi_compile_local __ FFX_HALF // causes a hard-coded error message from the shader include ¯\_(ツ)_/¯ -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_HALF +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" // Wave operations require shader model 6.0; this can only be enabled when using DXC on D3D12 // These pragmas are commented out by default as Unity will sometimes ignore the #if's and try to enable these features anyway. @@ -36,7 +36,7 @@ //#pragma require WaveBasic // Required for WaveGetLaneIndex //#pragma require WaveBallot // Required for WaveReadLaneAt //#else -#define SPD_NO_WAVE_OPERATIONS +#define FFX_SPD_NO_WAVE_OPERATIONS //#endif -#include "shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta similarity index 79% rename from Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta index 19d1df3..9e002c0 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d18fb8811ca4753469c439784546104e +guid: d253be05abcdc80428503d3e4cce3a36 ComputeShaderImporter: externalObjects: {} preprocessorOverride: 0 diff --git a/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute similarity index 74% rename from Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute index d27a02d..0ccd388 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_autogen_reactive_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute @@ -21,12 +21,12 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_autogen_reactive_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl" diff --git a/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta similarity index 79% rename from Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute.meta rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta index 3864379..d695f48 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute.meta +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 702560780e923c84394c9b22ba460a9c +guid: 20e44016ed34b0d4b8de499d1b566c69 ComputeShaderImporter: externalObjects: {} preprocessorOverride: 0 diff --git a/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute similarity index 77% rename from Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute index 5f8c13d..e38ad99 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_lock_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute @@ -21,10 +21,10 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_lock_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_lock_pass.hlsl" diff --git a/Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta new file mode 100644 index 0000000..c01e009 --- /dev/null +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a135306e6d1857e43a86ef20db2a47fe +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute similarity index 77% rename from Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute index 6d97414..04c2fe4 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_rcas_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute @@ -20,10 +20,10 @@ #pragma kernel CS -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_rcas_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_rcas_pass.hlsl" diff --git a/Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta new file mode 100644 index 0000000..cd12641 --- /dev/null +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7aaf5cfff022de2499e9b0412f947f6c +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute similarity index 70% rename from Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute index c6cc99f..ee2f276 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute @@ -21,13 +21,13 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_HDR_COLOR_INPUT -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl" diff --git a/Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta new file mode 100644 index 0000000..1053c34 --- /dev/null +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f59e5b9179d74844ae06a30ae1e0629 +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute b/Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute similarity index 74% rename from Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute index 62d386b..6338918 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_tcr_autogen_pass.compute +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute @@ -21,12 +21,12 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_tcr_autogen_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl" diff --git a/Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta new file mode 100644 index 0000000..ad42fbb --- /dev/null +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75cdc6ef23f08ed498d4da511923fcea +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_unity_common.cginc b/Assets/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc similarity index 92% rename from Assets/Resources/FSR2/ffx_fsr2_unity_common.cginc rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc index 98c5b17..758bb0c 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_unity_common.cginc +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Nico de Poel +// Copyright (c) 2023 Nico de Poel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -46,7 +46,7 @@ // Workaround for HDRP using texture arrays for its camera buffers on some platforms // The below defines are copied from: Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/TextureXR.hlsl -#if defined(UNITY_FSR2_HDRP) +#if defined(UNITY_FSR3UPSCALER_HDRP) // Must be in sync with C# with property useTexArray in TextureXR.cs #if ((defined(SHADER_API_D3D11) || defined(SHADER_API_D3D12)) && !defined(SHADER_API_XBOXONE) && !defined(SHADER_API_GAMECORE)) || defined(SHADER_API_PSSL) || defined(SHADER_API_VULKAN) #define UNITY_TEXTURE2D_X_ARRAY_SUPPORTED @@ -73,9 +73,10 @@ #endif // Declare and sample camera buffers as texture arrays - #define UNITY_FSR2_TEX2D(type) Texture2DArray - #define UNITY_FSR2_POS(pxPos) FfxUInt32x3(pxPos, SLICE_ARRAY_INDEX) - #define UNITY_FSR2_UV(uv) FfxFloat32x3(uv, SLICE_ARRAY_INDEX) + #define UNITY_FSR3_TEX2D(type) Texture2DArray + #define UNITY_FSR3_RWTEX2D(type) RWTexture2DArray + #define UNITY_FSR3_POS(pxPos) FfxUInt32x3(pxPos, SLICE_ARRAY_INDEX) + #define UNITY_FSR3_UV(uv) FfxFloat32x3(uv, SLICE_ARRAY_INDEX) #endif #endif diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta b/Assets/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta similarity index 75% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta rename to Assets/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta index 2e93435..5a68b6c 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta +++ b/Assets/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cc76bd6f46792f3418a56b79eb5c959b +guid: 3ce00ba677bb7e14bb91772fd68bfe6b ShaderIncludeImporter: externalObjects: {} userData: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders.meta b/Assets/Shaders/FSR3/shaders.meta similarity index 77% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders.meta rename to Assets/Shaders/FSR3/shaders.meta index 676ff9a..8a4ff2b 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders.meta +++ b/Assets/Shaders/FSR3/shaders.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4a24e63edc822264a871f58397325d51 +guid: 8364d4f86c613ec4d999d062f5f773b8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl new file mode 100644 index 0000000..d2f1b32 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl @@ -0,0 +1,79 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS 1 +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 2 +#else +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 2 +#endif +#define FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED 3 +#define FSR3UPSCALER_BIND_SRV_LOCK_STATUS 4 +#define FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR 5 +#define FSR3UPSCALER_BIND_SRV_LANCZOS_LUT 6 +#define FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT 7 +#define FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS 8 +#define FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE 9 +#define FSR3UPSCALER_BIND_SRV_LUMA_HISTORY 10 + +#define FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED 0 +#define FSR3UPSCALER_BIND_UAV_LOCK_STATUS 1 +#define FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT 2 +#define FSR3UPSCALER_BIND_UAV_NEW_LOCKS 3 +#define FSR3UPSCALER_BIND_UAV_LUMA_HISTORY 4 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_upsample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h" +#include "fsr3upscaler/ffx_fsr3upscaler_reproject.h" +#include "fsr3upscaler/ffx_fsr3upscaler_accumulate.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) +{ + const uint GroupRows = (uint(DisplaySize().y) + FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT - 1) / FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT; + uGroupId.y = GroupRows - uGroupId.y - 1; + + uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId; + + Accumulate(uDispatchThreadId); +} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta similarity index 75% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta rename to Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta index ac39806..80f209e 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 19dfb00afb70c3144b43ec2dc05ecdd9 +guid: 507ab779c38eddb429cdcedf9c108d1b ShaderIncludeImporter: externalObjects: {} userData: diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl new file mode 100644 index 0000000..0d6e2eb --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl @@ -0,0 +1,77 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 1 + +#define FSR3UPSCALER_BIND_UAV_AUTOREACTIVE 0 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_REACTIVE 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) +{ + uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId; + + float3 ColorPreAlpha = LoadOpaqueOnly( FFX_MIN16_I2(uDispatchThreadId) ).rgb; + float3 ColorPostAlpha = LoadInputColor(uDispatchThreadId).rgb; + + if (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_TONEMAP) + { + ColorPreAlpha = Tonemap(ColorPreAlpha); + ColorPostAlpha = Tonemap(ColorPostAlpha); + } + + if (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP) + { + ColorPreAlpha = InverseTonemap(ColorPreAlpha); + ColorPostAlpha = InverseTonemap(ColorPostAlpha); + } + + float out_reactive_value = 0.f; + float3 delta = abs(ColorPostAlpha - ColorPreAlpha); + + out_reactive_value = (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX) ? max(delta.x, max(delta.y, delta.z)) : length(delta); + out_reactive_value *= GenReactiveScale(); + + out_reactive_value = (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_THRESHOLD) ? (out_reactive_value < GenReactiveThreshold() ? 0 : GenReactiveBinaryValue()) : out_reactive_value; + + rw_output_autoreactive[uDispatchThreadId] = out_reactive_value; +} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta similarity index 75% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta rename to Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta index d7ce66d..c55f004 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7981b48622ddaa944909ebf209284d83 +guid: 52cdb7a7c30cb614984908593ed19082 ShaderIncludeImporter: externalObjects: {} userData: diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl new file mode 100644 index 0000000..93b7332 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl @@ -0,0 +1,55 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 0 + +#define FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC 0 +#define FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE 1 +#define FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 2 +#define FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE 3 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_SPD 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT +void CS(uint3 WorkGroupId : SV_GroupID, uint LocalThreadIndex : SV_GroupIndex) +{ + ComputeAutoExposure(WorkGroupId, LocalThreadIndex); +} diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta similarity index 75% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta rename to Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta index cad5022..508b43e 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 356ec46d3f01672428b5a7a0de727548 +guid: 2d149b52ba0f5bb468a94a71dbbcb66f ShaderIncludeImporter: externalObjects: {} userData: diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl new file mode 100644 index 0000000..70cc7ba --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl @@ -0,0 +1,67 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 1 +#define FSR3UPSCALER_BIND_SRV_DILATED_DEPTH 2 +#define FSR3UPSCALER_BIND_SRV_REACTIVE_MASK 3 +#define FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 4 +#define FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS 5 +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 6 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 7 +#define FSR3UPSCALER_BIND_SRV_INPUT_DEPTH 8 +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 9 + +#define FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS 0 +#define FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR 1 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_depth_clip.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS( + int2 iGroupId : SV_GroupID, + int2 iDispatchThreadId : SV_DispatchThreadID, + int2 iGroupThreadId : SV_GroupThreadID, + int iGroupIndex : SV_GroupIndex) +{ + DepthClip(iDispatchThreadId); +} diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta new file mode 100644 index 0000000..cde3a5e --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da435b71cf57e2247b80ae0f0f86d1f8 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl new file mode 100644 index 0000000..26b28f0 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl @@ -0,0 +1,56 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA 0 + +#define FSR3UPSCALER_BIND_UAV_NEW_LOCKS 0 +#define FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 1 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_lock.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) +{ + uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId; + + ComputeLock(uDispatchThreadId); +} diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta new file mode 100644 index 0000000..45c99dc --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 98d2cbbda5e90dd4ebd1d70abbb63a09 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl new file mode 100644 index 0000000..bebdeb3 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl @@ -0,0 +1,53 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_RCAS_INPUT 1 + +#define FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT 0 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_RCAS 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_rcas.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 64 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT +void CS(uint3 LocalThreadId : SV_GroupThreadID, uint3 WorkGroupId : SV_GroupID, uint3 Dtid : SV_DispatchThreadID) +{ + RCAS(LocalThreadId, WorkGroupId, Dtid); +} diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta new file mode 100644 index 0000000..fb9bfe2 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a15fc73170a9bc478801c8fa4d8d574 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl new file mode 100644 index 0000000..f277fd1 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl @@ -0,0 +1,64 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_DEPTH 1 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 2 +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 3 + +#define FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 +#define FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS 1 +#define FSR3UPSCALER_BIND_UAV_DILATED_DEPTH 2 +#define FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA 3 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS( + int2 iGroupId : SV_GroupID, + int2 iDispatchThreadId : SV_DispatchThreadID, + int2 iGroupThreadId : SV_GroupThreadID, + int iGroupIndex : SV_GroupIndex +) +{ + ReconstructAndDilate(iDispatchThreadId); +} diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta new file mode 100644 index 0000000..6489d6d --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bafb3726a76b97a49bb343d8a4323754 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl similarity index 56% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl rename to Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl index 8e635d1..6180885 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl @@ -19,68 +19,44 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#define FSR2_BIND_SRV_INPUT_OPAQUE_ONLY 0 -#define FSR2_BIND_SRV_INPUT_COLOR 1 -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 2 -#define FSR2_BIND_SRV_PREV_PRE_ALPHA_COLOR 3 -#define FSR2_BIND_SRV_PREV_POST_ALPHA_COLOR 4 -#define FSR2_BIND_SRV_REACTIVE_MASK 4 -#define FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 5 - -#define FSR2_BIND_UAV_AUTOREACTIVE 0 -#define FSR2_BIND_UAV_AUTOCOMPOSITION 1 -#define FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR 2 -#define FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR 3 - -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_AUTOREACTIVE 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -#if defined(FSR2_BIND_CB_AUTOREACTIVE) - cbuffer cbGenerateReactive : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_AUTOREACTIVE) - { - float fTcThreshold; // 0.1 is a good starting value, lower will result in more TC pixels - float fTcScale; - float fReactiveScale; - float fReactiveMax; - }; - float getTcThreshold() - { - return fTcThreshold; - } -#else - #define fTcThreshold 0.05f - #define fTcScale 1.00f - #define fReactiveScale 10.0f - #define fReactiveMax 0.90f - float getTcThreshold() - { - return fTcThreshold; - } -#endif - -#include "ffx_fsr2_tcr_autogen.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT +#define FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 1 +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 2 +#define FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR 3 +#define FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR 4 +#define FSR3UPSCALER_BIND_SRV_REACTIVE_MASK 4 +#define FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 5 + +#define FSR3UPSCALER_BIND_UAV_AUTOREACTIVE 0 +#define FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION 1 +#define FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR 2 +#define FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR 3 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_AUTOREACTIVE 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) { - FFX_MIN16_I2 uDispatchThreadId = FFX_MIN16_I2(uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId); + FFX_MIN16_I2 uDispatchThreadId = FFX_MIN16_I2(uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId); // ToDo: take into account jitter (i.e. add delta of previous jitter and current jitter to previous UV // fetch pre- and post-alpha color values diff --git a/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta new file mode 100644 index 0000000..02c5f46 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 712d171118b59fc4fb28d0d487060d42 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler.meta similarity index 77% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2.meta rename to Assets/Shaders/FSR3/shaders/fsr3upscaler.meta index 1579387..2626a2e 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2.meta +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9e2d87f36f288024cb500a20acaae11e +guid: ae9c6d015ae76544f9e8117e79ea862b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Resources/FSR2/shaders/ffx_common_types.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h similarity index 83% rename from Assets/Resources/FSR2/shaders/ffx_common_types.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h index 4594dc1..f0b62ab 100644 --- a/Assets/Resources/FSR2/shaders/ffx_common_types.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -18,6 +18,8 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + + #ifndef FFX_COMMON_TYPES_H #define FFX_COMMON_TYPES_H @@ -25,127 +27,200 @@ #define FFX_PARAMETER_IN #define FFX_PARAMETER_OUT #define FFX_PARAMETER_INOUT +#define FFX_PARAMETER_UNIFORM #elif defined(FFX_HLSL) #define FFX_PARAMETER_IN in #define FFX_PARAMETER_OUT out #define FFX_PARAMETER_INOUT inout +#define FFX_PARAMETER_UNIFORM uniform #elif defined(FFX_GLSL) #define FFX_PARAMETER_IN in #define FFX_PARAMETER_OUT out #define FFX_PARAMETER_INOUT inout +#define FFX_PARAMETER_UNIFORM const //[cacao_placeholder] until a better fit is found! #endif // #if defined(FFX_CPU) #if defined(FFX_CPU) /// A typedef for a boolean value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef bool FfxBoolean; /// A typedef for a unsigned 8bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint8_t FfxUInt8; /// A typedef for a unsigned 16bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint16_t FfxUInt16; /// A typedef for a unsigned 32bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32; /// A typedef for a unsigned 64bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint64_t FfxUInt64; /// A typedef for a signed 8bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int8_t FfxInt8; /// A typedef for a signed 16bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int16_t FfxInt16; /// A typedef for a signed 32bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int32_t FfxInt32; /// A typedef for a signed 64bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int64_t FfxInt64; /// A typedef for a floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32; /// A typedef for a 2-dimensional floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32x2[2]; /// A typedef for a 3-dimensional floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32x3[3]; /// A typedef for a 4-dimensional floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32x4[4]; /// A typedef for a 2-dimensional 32bit unsigned integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32x2[2]; /// A typedef for a 3-dimensional 32bit unsigned integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32x3[3]; /// A typedef for a 4-dimensional 32bit unsigned integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32x4[4]; #endif // #if defined(FFX_CPU) #if defined(FFX_HLSL) + +#define FfxFloat32Mat4 matrix +#define FfxFloat32Mat3 matrix + /// A typedef for a boolean value. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef bool FfxBoolean; -#if FFX_HLSL_6_2 +#if FFX_HLSL_SM>=62 + +/// @defgroup HLSL62Types HLSL 6.2 And Above Types +/// HLSL 6.2 and above type defines for all commonly used variables +/// +/// @ingroup HLSLTypes + +/// A typedef for a floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t FfxFloat32; + +/// A typedef for a 2-dimensional floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t2 FfxFloat32x2; + +/// A typedef for a 3-dimensional floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t3 FfxFloat32x3; + +/// A typedef for a 4-dimensional floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t4 FfxFloat32x4; +/// A [cacao_placeholder] typedef for matrix type until confirmed. +typedef float4x4 FfxFloat32x4x4; +typedef float3x3 FfxFloat32x3x3; +typedef float2x2 FfxFloat32x2x2; + /// A typedef for a unsigned 32bit integer. /// -/// @ingroup GPU +/// @ingroup HLSL62Types typedef uint32_t FfxUInt32; + +/// A typedef for a 2-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types typedef uint32_t2 FfxUInt32x2; + +/// A typedef for a 3-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types typedef uint32_t3 FfxUInt32x3; + +/// A typedef for a 4-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types typedef uint32_t4 FfxUInt32x4; + +/// A typedef for a signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t FfxInt32; + +/// A typedef for a 2-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t2 FfxInt32x2; + +/// A typedef for a 3-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t3 FfxInt32x3; + +/// A typedef for a 4-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t4 FfxInt32x4; -#else + +#else // #if FFX_HLSL_SM>=62 + +/// @defgroup HLSLBaseTypes HLSL 6.1 And Below Types +/// HLSL 6.1 and below type defines for all commonly used variables +/// +/// @ingroup HLSLTypes + #define FfxFloat32 float #define FfxFloat32x2 float2 #define FfxFloat32x3 float3 #define FfxFloat32x4 float4 +/// A [cacao_placeholder] typedef for matrix type until confirmed. +#define FfxFloat32x4x4 float4x4 +#define FfxFloat32x3x3 float3x3 +#define FfxFloat32x2x2 float2x2 + /// A typedef for a unsigned 32bit integer. /// /// @ingroup GPU @@ -153,14 +228,18 @@ typedef uint FfxUInt32; typedef uint2 FfxUInt32x2; typedef uint3 FfxUInt32x3; typedef uint4 FfxUInt32x4; + typedef int FfxInt32; typedef int2 FfxInt32x2; typedef int3 FfxInt32x3; typedef int4 FfxInt32x4; -#endif // #if defined(FFX_HLSL_6_2) + +#endif // #if FFX_HLSL_SM>=62 #if FFX_HALF -#if FFX_HLSL_6_2 + +#if FFX_HLSL_SM >= 62 + typedef float16_t FfxFloat16; typedef float16_t2 FfxFloat16x2; typedef float16_t3 FfxFloat16x3; @@ -168,7 +247,7 @@ typedef float16_t4 FfxFloat16x4; /// A typedef for an unsigned 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef uint16_t FfxUInt16; typedef uint16_t2 FfxUInt16x2; typedef uint16_t3 FfxUInt16x3; @@ -176,7 +255,7 @@ typedef uint16_t4 FfxUInt16x4; /// A typedef for a signed 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef int16_t FfxInt16; typedef int16_t2 FfxInt16x2; typedef int16_t3 FfxInt16x3; @@ -204,7 +283,7 @@ typedef short FfxInt16; typedef short2 FfxInt16x2; typedef short3 FfxInt16x3; typedef short4 FfxInt16x4; -#else +#else // #if FFX_HLSL_SM>=62 typedef min16float FfxFloat16; typedef min16float2 FfxFloat16x2; typedef min16float3 FfxFloat16x3; @@ -212,7 +291,7 @@ typedef min16float4 FfxFloat16x4; /// A typedef for an unsigned 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef min16uint FfxUInt16; typedef min16uint2 FfxUInt16x2; typedef min16uint3 FfxUInt16x3; @@ -220,19 +299,25 @@ typedef min16uint4 FfxUInt16x4; /// A typedef for a signed 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef min16int FfxInt16; typedef min16int2 FfxInt16x2; typedef min16int3 FfxInt16x3; typedef min16int4 FfxInt16x4; -#endif // FFX_HLSL_6_2 +#endif // #if FFX_HLSL_SM>=62 + #endif // FFX_HALF + #endif // #if defined(FFX_HLSL) #if defined(FFX_GLSL) + +#define FfxFloat32Mat4 mat4 +#define FfxFloat32Mat3 mat3 + /// A typedef for a boolean value. /// -/// @ingroup GPU +/// @ingroup GLSLTypes #define FfxBoolean bool #define FfxFloat32 float #define FfxFloat32x2 vec2 @@ -246,6 +331,12 @@ typedef min16int4 FfxInt16x4; #define FfxInt32x2 ivec2 #define FfxInt32x3 ivec3 #define FfxInt32x4 ivec4 + +/// A [cacao_placeholder] typedef for matrix type until confirmed. +#define FfxFloat32x4x4 mat4 +#define FfxFloat32x3x3 mat3 +#define FfxFloat32x2x2 mat2 + #if FFX_HALF #define FfxFloat16 float16_t #define FfxFloat16x2 f16vec2 @@ -264,11 +355,11 @@ typedef min16int4 FfxInt16x4; // Global toggles: // #define FFX_HALF (1) -// #define FFX_HLSL_6_2 (1) +// #define FFX_HLSL_SM (62) -#if defined(FFX_HALF) && !defined(SHADER_API_PSSL) +#if FFX_HALF && !defined(SHADER_API_PSSL) -#if FFX_HLSL_6_2 +#if FFX_HLSL_SM >= 62 #define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef BaseComponentType##16_t TypeName; #define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; @@ -278,7 +369,7 @@ typedef min16int4 FfxInt16x4; #define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; #define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; -#else //FFX_HLSL_6_2 +#else //FFX_HLSL_SM>=62 #define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef min16##BaseComponentType TypeName; #define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; @@ -288,7 +379,7 @@ typedef min16int4 FfxInt16x4; #define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ); #define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) FFX_MIN16_MATRIX( TypeName, BaseComponentType, ROW, COL ); -#endif //FFX_HLSL_6_2 +#endif //FFX_HLSL_SM>=62 #else //FFX_HALF diff --git a/Assets/Resources/FSR2/ffx_fsr2_unity_common.cginc.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta similarity index 92% rename from Assets/Resources/FSR2/ffx_fsr2_unity_common.cginc.meta rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta index 8393144..8d9b15f 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_unity_common.cginc.meta +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bb2d4d4671c448698877526c29f2fc99 +guid: 7974b728d5c1b6d4a8a8e3965d03f96d PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h similarity index 66% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h index 4e687d6..02f6b3f 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,17 +19,40 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -/// @defgroup Core -/// @defgroup HLSL -/// @defgroup GLSL -/// @defgroup GPU -/// @defgroup CPU -/// @defgroup CAS -/// @defgroup FSR1 + +/// @defgroup FfxGPU GPU +/// The FidelityFX SDK GPU References +/// +/// @ingroup ffxSDK + +/// @defgroup FfxHLSL HLSL References +/// FidelityFX SDK HLSL GPU References +/// +/// @ingroup FfxGPU + +/// @defgroup FfxGLSL GLSL References +/// FidelityFX SDK GLSL GPU References +/// +/// @ingroup FfxGPU + +/// @defgroup FfxGPUEffects FidelityFX GPU References +/// FidelityFX Effect GPU Reference Documentation +/// +/// @ingroup FfxGPU + +/// @defgroup GPUCore GPU Core +/// GPU defines and functions +/// +/// @ingroup FfxGPU #if !defined(FFX_CORE_H) #define FFX_CORE_H +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler + #include "ffx_common_types.h" #if defined(FFX_CPU) @@ -49,4 +72,9 @@ #include "ffx_core_gpu_common_half.h" #include "ffx_core_portability.h" #endif // #if defined(FFX_GPU) -#endif // #if !defined(FFX_CORE_H) \ No newline at end of file + +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler + +#endif // #if !defined(FFX_CORE_H) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta similarity index 92% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc.meta rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta index 8393144..562741a 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc.meta +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bb2d4d4671c448698877526c29f2fc99 +guid: b91c5f52b89ff554dacb51045a802ed8 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Resources/FSR2/shaders/ffx_core_cpu.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h similarity index 93% rename from Assets/Resources/FSR2/shaders/ffx_core_cpu.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h index 3bf0295..865258d 100644 --- a/Assets/Resources/FSR2/shaders/ffx_core_cpu.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,23 +19,29 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + /// A define for a true value in a boolean expression. /// -/// @ingroup CPU +/// @ingroup CPUTypes #define FFX_TRUE (1) /// A define for a false value in a boolean expression. /// -/// @ingroup CPU +/// @ingroup CPUTypes #define FFX_FALSE (0) #if !defined(FFX_STATIC) /// A define to abstract declaration of static variables and functions. /// -/// @ingroup CPU +/// @ingroup CPUTypes #define FFX_STATIC static #endif // #if !defined(FFX_STATIC) +/// @defgroup CPUCore CPU Core +/// Core CPU-side defines and functions +/// +/// @ingroup ffxHost + #ifdef __clang__ #pragma clang diagnostic ignored "-Wunused-variable" #endif @@ -47,7 +53,7 @@ /// @returns /// An unsigned 32bit integer value containing the bit pattern of x. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxUInt32 ffxAsUInt32(FfxFloat32 x) { union @@ -89,7 +95,7 @@ FFX_STATIC FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) { return y * t + (-x * t + x); @@ -102,10 +108,10 @@ FFX_STATIC FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) /// @returns /// The reciprocal value of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 ffxReciprocal(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 ffxReciprocal(FfxFloat32 x) { - return 1.0f / a; + return 1.0f / x; } /// Compute the square root of a value. @@ -115,7 +121,7 @@ FFX_STATIC FfxFloat32 ffxReciprocal(FfxFloat32 a) /// @returns /// The the square root of x. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxFloat32 ffxSqrt(FfxFloat32 x) { return sqrt(x); @@ -135,10 +141,10 @@ FFX_STATIC FfxUInt32 AShrSU1(FfxUInt32 a, FfxUInt32 b) /// @returns /// The fractional part of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 ffxFract(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 ffxFract(FfxFloat32 x) { - return a - floor(a); + return x - floor(x); } /// Compute the reciprocal square root of a value. @@ -148,10 +154,10 @@ FFX_STATIC FfxFloat32 ffxFract(FfxFloat32 a) /// @returns /// The reciprocal square root value of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 rsqrt(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 rsqrt(FfxFloat32 x) { - return ffxReciprocal(ffxSqrt(a)); + return ffxReciprocal(ffxSqrt(x)); } FFX_STATIC FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) @@ -181,10 +187,10 @@ FFX_STATIC FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) /// @returns /// The clamped version of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 ffxSaturate(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 ffxSaturate(FfxFloat32 x) { - return ffxMin(1.0f, ffxMax(0.0f, a)); + return ffxMin(1.0f, ffxMax(0.0f, x)); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -245,7 +251,7 @@ FFX_STATIC void opARcpF3(FfxFloat32x3 d, FfxFloat32x3 a) /// @returns /// The closest 16bit floating point value to f. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxUInt32 f32tof16(FfxFloat32 f) { static FfxUInt16 base[512] = { @@ -320,13 +326,13 @@ FFX_STATIC FfxUInt32 f32tof16(FfxFloat32 f) /// point representation, and then stores the X and Y components in the lower and upper 16 bits of the /// 32bit unsigned integer respectively. /// -/// @param [in] value A 2-dimensional floating point value to convert and pack. +/// @param [in] x A 2-dimensional floating point value to convert and pack. /// /// @returns /// A packed 32bit value containing 2 16bit floating point values. /// -/// @ingroup CPU -FFX_STATIC FfxUInt32 packHalf2x16(FfxFloat32x2 a) +/// @ingroup CPUCore +FFX_STATIC FfxUInt32 packHalf2x16(FfxFloat32x2 x) { - return f32tof16(a[0]) + (f32tof16(a[1]) << 16); + return f32tof16(x[0]) + (f32tof16(x[1]) << 16); } diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta new file mode 100644 index 0000000..9aed874 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 4c88c0b7a4dec1e479272449c19ca981 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h similarity index 91% rename from Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h index ae07642..2f687df 100644 --- a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,31 +19,35 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + /// A define for a true value in a boolean expression. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_TRUE (true) /// A define for a false value in a boolean expression. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_FALSE (false) /// A define value for positive infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_POSITIVE_INFINITY_FLOAT ffxAsFloat(0x7f800000u) /// A define value for negative infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_NEGATIVE_INFINITY_FLOAT ffxAsFloat(0xff800000u) /// A define value for PI. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_PI (3.14159) +FFX_STATIC const FfxFloat32 FFX_FP16_MIN = 6.10e-05f; +FFX_STATIC const FfxFloat32 FFX_FP16_MAX = 65504.0f; +FFX_STATIC const FfxFloat32 FFX_TONEMAP_EPSILON = 1.0f / FFX_FP16_MAX; /// Compute the reciprocal of value. /// @@ -52,7 +56,7 @@ /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxReciprocal(FfxFloat32 value) { return rcp(value); @@ -65,7 +69,7 @@ FfxFloat32 ffxReciprocal(FfxFloat32 value) /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxReciprocal(FfxFloat32x2 value) { return rcp(value); @@ -78,7 +82,7 @@ FfxFloat32x2 ffxReciprocal(FfxFloat32x2 value) /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxReciprocal(FfxFloat32x3 value) { return rcp(value); @@ -91,7 +95,7 @@ FfxFloat32x3 ffxReciprocal(FfxFloat32x3 value) /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxReciprocal(FfxFloat32x4 value) { return rcp(value); @@ -105,7 +109,7 @@ FfxFloat32x4 ffxReciprocal(FfxFloat32x4 value) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) { return min(x, y); @@ -119,7 +123,7 @@ FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxMin(FfxFloat32x2 x, FfxFloat32x2 y) { return min(x, y); @@ -133,7 +137,7 @@ FfxFloat32x2 ffxMin(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxMin(FfxFloat32x3 x, FfxFloat32x3 y) { return min(x, y); @@ -147,7 +151,7 @@ FfxFloat32x3 ffxMin(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxMin(FfxFloat32x4 x, FfxFloat32x4 y) { return min(x, y); @@ -161,7 +165,7 @@ FfxFloat32x4 ffxMin(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32 ffxMin(FfxInt32 x, FfxInt32 y) { return min(x, y); @@ -175,7 +179,7 @@ FfxInt32 ffxMin(FfxInt32 x, FfxInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x2 ffxMin(FfxInt32x2 x, FfxInt32x2 y) { return min(x, y); @@ -189,7 +193,7 @@ FfxInt32x2 ffxMin(FfxInt32x2 x, FfxInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x3 ffxMin(FfxInt32x3 x, FfxInt32x3 y) { return min(x, y); @@ -203,7 +207,7 @@ FfxInt32x3 ffxMin(FfxInt32x3 x, FfxInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x4 ffxMin(FfxInt32x4 x, FfxInt32x4 y) { return min(x, y); @@ -217,7 +221,7 @@ FfxInt32x4 ffxMin(FfxInt32x4 x, FfxInt32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxMin(FfxUInt32 x, FfxUInt32 y) { return min(x, y); @@ -231,7 +235,7 @@ FfxUInt32 ffxMin(FfxUInt32 x, FfxUInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxMin(FfxUInt32x2 x, FfxUInt32x2 y) { return min(x, y); @@ -245,7 +249,7 @@ FfxUInt32x2 ffxMin(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxMin(FfxUInt32x3 x, FfxUInt32x3 y) { return min(x, y); @@ -259,7 +263,7 @@ FfxUInt32x3 ffxMin(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxMin(FfxUInt32x4 x, FfxUInt32x4 y) { return min(x, y); @@ -273,7 +277,7 @@ FfxUInt32x4 ffxMin(FfxUInt32x4 x, FfxUInt32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxMax(FfxFloat32 x, FfxFloat32 y) { return max(x, y); @@ -287,7 +291,7 @@ FfxFloat32 ffxMax(FfxFloat32 x, FfxFloat32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxMax(FfxFloat32x2 x, FfxFloat32x2 y) { return max(x, y); @@ -301,7 +305,7 @@ FfxFloat32x2 ffxMax(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxMax(FfxFloat32x3 x, FfxFloat32x3 y) { return max(x, y); @@ -315,7 +319,7 @@ FfxFloat32x3 ffxMax(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxMax(FfxFloat32x4 x, FfxFloat32x4 y) { return max(x, y); @@ -329,7 +333,7 @@ FfxFloat32x4 ffxMax(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32 ffxMax(FfxInt32 x, FfxInt32 y) { return max(x, y); @@ -343,7 +347,7 @@ FfxInt32 ffxMax(FfxInt32 x, FfxInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x2 ffxMax(FfxInt32x2 x, FfxInt32x2 y) { return max(x, y); @@ -357,7 +361,7 @@ FfxInt32x2 ffxMax(FfxInt32x2 x, FfxInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x3 ffxMax(FfxInt32x3 x, FfxInt32x3 y) { return max(x, y); @@ -371,7 +375,7 @@ FfxInt32x3 ffxMax(FfxInt32x3 x, FfxInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x4 ffxMax(FfxInt32x4 x, FfxInt32x4 y) { return max(x, y); @@ -385,7 +389,7 @@ FfxInt32x4 ffxMax(FfxInt32x4 x, FfxInt32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) { return max(x, y); @@ -399,7 +403,7 @@ FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxMax(FfxUInt32x2 x, FfxUInt32x2 y) { return max(x, y); @@ -413,7 +417,7 @@ FfxUInt32x2 ffxMax(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxMax(FfxUInt32x3 x, FfxUInt32x3 y) { return max(x, y); @@ -427,7 +431,7 @@ FfxUInt32x3 ffxMax(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxMax(FfxUInt32x4 x, FfxUInt32x4 y) { return max(x, y); @@ -441,7 +445,7 @@ FfxUInt32x4 ffxMax(FfxUInt32x4 x, FfxUInt32x4 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxPow(FfxFloat32 x, FfxFloat32 y) { return pow(x, y); @@ -455,7 +459,7 @@ FfxFloat32 ffxPow(FfxFloat32 x, FfxFloat32 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxPow(FfxFloat32x2 x, FfxFloat32x2 y) { return pow(x, y); @@ -469,7 +473,7 @@ FfxFloat32x2 ffxPow(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxPow(FfxFloat32x3 x, FfxFloat32x3 y) { return pow(x, y); @@ -483,7 +487,7 @@ FfxFloat32x3 ffxPow(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxPow(FfxFloat32x4 x, FfxFloat32x4 y) { return pow(x, y); @@ -496,7 +500,7 @@ FfxFloat32x4 ffxPow(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxSqrt(FfxFloat32 x) { return sqrt(x); @@ -509,7 +513,7 @@ FfxFloat32 ffxSqrt(FfxFloat32 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxSqrt(FfxFloat32x2 x) { return sqrt(x); @@ -522,7 +526,7 @@ FfxFloat32x2 ffxSqrt(FfxFloat32x2 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxSqrt(FfxFloat32x3 x) { return sqrt(x); @@ -535,7 +539,7 @@ FfxFloat32x3 ffxSqrt(FfxFloat32x3 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxSqrt(FfxFloat32x4 x) { return sqrt(x); @@ -549,7 +553,7 @@ FfxFloat32x4 ffxSqrt(FfxFloat32x4 x) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxCopySignBit(FfxFloat32 d, FfxFloat32 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & FfxUInt32(0x80000000u))); @@ -563,7 +567,7 @@ FfxFloat32 ffxCopySignBit(FfxFloat32 d, FfxFloat32 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxCopySignBit(FfxFloat32x2 d, FfxFloat32x2 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast2(0x80000000u))); @@ -577,7 +581,7 @@ FfxFloat32x2 ffxCopySignBit(FfxFloat32x2 d, FfxFloat32x2 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxCopySignBit(FfxFloat32x3 d, FfxFloat32x3 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast3(0x80000000u))); @@ -591,7 +595,7 @@ FfxFloat32x3 ffxCopySignBit(FfxFloat32x3 d, FfxFloat32x3 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxCopySignBit(FfxFloat32x4 d, FfxFloat32x4 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast4(0x80000000u))); @@ -614,7 +618,7 @@ FfxFloat32x4 ffxCopySignBit(FfxFloat32x4 d, FfxFloat32x4 s) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxIsSigned(FfxFloat32 m) { return ffxSaturate(m * FfxFloat32(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -637,7 +641,7 @@ FfxFloat32 ffxIsSigned(FfxFloat32 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxIsSigned(FfxFloat32x2 m) { return ffxSaturate(m * ffxBroadcast2(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -660,7 +664,7 @@ FfxFloat32x2 ffxIsSigned(FfxFloat32x2 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxIsSigned(FfxFloat32x3 m) { return ffxSaturate(m * ffxBroadcast3(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -683,7 +687,7 @@ FfxFloat32x3 ffxIsSigned(FfxFloat32x3 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or positive. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxIsSigned(FfxFloat32x4 m) { return ffxSaturate(m * ffxBroadcast4(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -701,7 +705,7 @@ FfxFloat32x4 ffxIsSigned(FfxFloat32x4 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxIsGreaterThanZero(FfxFloat32 m) { return ffxSaturate(m * FfxFloat32(FFX_POSITIVE_INFINITY_FLOAT)); @@ -719,7 +723,7 @@ FfxFloat32 ffxIsGreaterThanZero(FfxFloat32 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxIsGreaterThanZero(FfxFloat32x2 m) { return ffxSaturate(m * ffxBroadcast2(FFX_POSITIVE_INFINITY_FLOAT)); @@ -737,7 +741,7 @@ FfxFloat32x2 ffxIsGreaterThanZero(FfxFloat32x2 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxIsGreaterThanZero(FfxFloat32x3 m) { return ffxSaturate(m * ffxBroadcast3(FFX_POSITIVE_INFINITY_FLOAT)); @@ -755,7 +759,7 @@ FfxFloat32x3 ffxIsGreaterThanZero(FfxFloat32x3 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxIsGreaterThanZero(FfxFloat32x4 m) { return ffxSaturate(m * ffxBroadcast4(FFX_POSITIVE_INFINITY_FLOAT)); @@ -775,7 +779,7 @@ FfxFloat32x4 ffxIsGreaterThanZero(FfxFloat32x4 m) /// @returns /// The sortable integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxFloatToSortableInteger(FfxUInt32 value) { return value ^ ((AShrSU1(value, FfxUInt32(31))) | FfxUInt32(0x80000000)); @@ -792,7 +796,7 @@ FfxUInt32 ffxFloatToSortableInteger(FfxUInt32 value) /// @returns /// The sortable integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxSortableIntegerToFloat(FfxUInt32 value) { return value ^ ((~AShrSU1(value, FfxUInt32(31))) | FfxUInt32(0x80000000)); @@ -811,10 +815,10 @@ FfxUInt32 ffxSortableIntegerToFloat(FfxUInt32 value) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32 ffxApproximateSqrt(FfxFloat32 a) +/// @ingroup GPUCore +FfxFloat32 ffxApproximateSqrt(FfxFloat32 value) { - return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(1)) + FfxUInt32(0x1fbc4639)); + return ffxAsFloat((ffxAsUInt32(value) >> FfxUInt32(1)) + FfxUInt32(0x1fbc4639)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -830,10 +834,10 @@ FfxFloat32 ffxApproximateSqrt(FfxFloat32 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32 ffxApproximateReciprocal(FfxFloat32 a) +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocal(FfxFloat32 value) { - return ffxAsFloat(FfxUInt32(0x7ef07ebb) - ffxAsUInt32(a)); + return ffxAsFloat(FfxUInt32(0x7ef07ebb) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -849,7 +853,7 @@ FfxFloat32 ffxApproximateReciprocal(FfxFloat32 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateReciprocalMedium(FfxFloat32 value) { FfxFloat32 b = ffxAsFloat(FfxUInt32(0x7ef19fff) - ffxAsUInt32(value)); @@ -869,10 +873,10 @@ FfxFloat32 ffxApproximateReciprocalMedium(FfxFloat32 value) /// @returns /// An approximation of the reciprocal square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 a) +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 value) { - return ffxAsFloat(FfxUInt32(0x5f347d74) - (ffxAsUInt32(a) >> FfxUInt32(1))); + return ffxAsFloat(FfxUInt32(0x5f347d74) - (ffxAsUInt32(value) >> FfxUInt32(1))); } /// Calculate a low-quality approximation for the square root of a value. @@ -888,10 +892,10 @@ FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 value) { - return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(1u)) + ffxBroadcast2(0x1fbc4639u)); + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast2(1u)) + ffxBroadcast2(0x1fbc4639u)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -907,10 +911,10 @@ FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 value) { - return ffxAsFloat(ffxBroadcast2(0x7ef07ebbu) - ffxAsUInt32(a)); + return ffxAsFloat(ffxBroadcast2(0x7ef07ebbu) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -926,11 +930,11 @@ FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 value) { - FfxFloat32x2 b = ffxAsFloat(ffxBroadcast2(0x7ef19fffu) - ffxAsUInt32(a)); - return b * (-b * a + ffxBroadcast2(2.0f)); + FfxFloat32x2 b = ffxAsFloat(ffxBroadcast2(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast2(2.0f)); } /// Calculate a low-quality approximation for the square root of a value. @@ -946,10 +950,10 @@ FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 value) { - return ffxAsFloat(ffxBroadcast2(0x5f347d74u) - (ffxAsUInt32(a) >> ffxBroadcast2(1u))); + return ffxAsFloat(ffxBroadcast2(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast2(1u))); } /// Calculate a low-quality approximation for the square root of a value. @@ -965,10 +969,10 @@ FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 value) { - return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(1u)) + ffxBroadcast3(0x1fbc4639u)); + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast3(1u)) + ffxBroadcast3(0x1fbc4639u)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -984,10 +988,10 @@ FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 value) { - return ffxAsFloat(ffxBroadcast3(0x7ef07ebbu) - ffxAsUInt32(a)); + return ffxAsFloat(ffxBroadcast3(0x7ef07ebbu) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -1003,11 +1007,11 @@ FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 value) { - FfxFloat32x3 b = ffxAsFloat(ffxBroadcast3(0x7ef19fffu) - ffxAsUInt32(a)); - return b * (-b * a + ffxBroadcast3(2.0f)); + FfxFloat32x3 b = ffxAsFloat(ffxBroadcast3(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast3(2.0f)); } /// Calculate a low-quality approximation for the square root of a value. @@ -1023,10 +1027,10 @@ FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 value) { - return ffxAsFloat(ffxBroadcast3(0x5f347d74u) - (ffxAsUInt32(a) >> ffxBroadcast3(1u))); + return ffxAsFloat(ffxBroadcast3(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast3(1u))); } /// Calculate a low-quality approximation for the square root of a value. @@ -1042,10 +1046,10 @@ FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 value) { - return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(1u)) + ffxBroadcast4(0x1fbc4639u)); + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast4(1u)) + ffxBroadcast4(0x1fbc4639u)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -1061,10 +1065,10 @@ FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 value) { - return ffxAsFloat(ffxBroadcast4(0x7ef07ebbu) - ffxAsUInt32(a)); + return ffxAsFloat(ffxBroadcast4(0x7ef07ebbu) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -1080,11 +1084,11 @@ FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 value) { - FfxFloat32x4 b = ffxAsFloat(ffxBroadcast4(0x7ef19fffu) - ffxAsUInt32(a)); - return b * (-b * a + ffxBroadcast4(2.0f)); + FfxFloat32x4 b = ffxAsFloat(ffxBroadcast4(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast4(2.0f)); } /// Calculate a low-quality approximation for the square root of a value. @@ -1100,10 +1104,10 @@ FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 value) { - return ffxAsFloat(ffxBroadcast4(0x5f347d74u) - (ffxAsUInt32(a) >> ffxBroadcast4(1u))); + return ffxAsFloat(ffxBroadcast4(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast4(1u))); } /// Calculate dot product of 'a' and 'b'. @@ -1114,7 +1118,7 @@ FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 a) /// @returns /// The value of a dot b. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxDot2(FfxFloat32x2 a, FfxFloat32x2 b) { return dot(a, b); @@ -1128,7 +1132,7 @@ FfxFloat32 ffxDot2(FfxFloat32x2 a, FfxFloat32x2 b) /// @returns /// The value of a dot b. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxDot3(FfxFloat32x3 a, FfxFloat32x3 b) { return dot(a, b); @@ -1142,7 +1146,7 @@ FfxFloat32 ffxDot3(FfxFloat32x3 a, FfxFloat32x3 b) /// @returns /// The value of a dot b. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) { return dot(a, b); @@ -1160,7 +1164,7 @@ FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximatePQToGamma2Medium(FfxFloat32 a) { return a * a * a * a; @@ -1177,7 +1181,7 @@ FfxFloat32 ffxApproximatePQToGamma2Medium(FfxFloat32 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximatePQToLinear(FfxFloat32 a) { return a * a * a * a * a * a * a * a; @@ -1194,7 +1198,7 @@ FfxFloat32 ffxApproximatePQToLinear(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateGamma2ToPQ(FfxFloat32 a) { return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(2)) + FfxUInt32(0x2F9A4E46)); @@ -1211,7 +1215,7 @@ FfxFloat32 ffxApproximateGamma2ToPQ(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateGamma2ToPQMedium(FfxFloat32 a) { FfxFloat32 b = ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(2)) + FfxUInt32(0x2F9A4E46)); @@ -1230,7 +1234,7 @@ FfxFloat32 ffxApproximateGamma2ToPQMedium(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateGamma2ToPQHigh(FfxFloat32 a) { return ffxSqrt(ffxSqrt(a)); @@ -1247,7 +1251,7 @@ FfxFloat32 ffxApproximateGamma2ToPQHigh(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateLinearToPQ(FfxFloat32 a) { return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(3)) + FfxUInt32(0x378D8723)); @@ -1264,7 +1268,7 @@ FfxFloat32 ffxApproximateLinearToPQ(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateLinearToPQMedium(FfxFloat32 a) { FfxFloat32 b = ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(3)) + FfxUInt32(0x378D8723)); @@ -1283,7 +1287,7 @@ FfxFloat32 ffxApproximateLinearToPQMedium(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateLinearToPQHigh(FfxFloat32 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1300,7 +1304,7 @@ FfxFloat32 ffxApproximateLinearToPQHigh(FfxFloat32 a) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximatePQToGamma2Medium(FfxFloat32x2 a) { return a * a * a * a; @@ -1317,7 +1321,7 @@ FfxFloat32x2 ffxApproximatePQToGamma2Medium(FfxFloat32x2 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximatePQToLinear(FfxFloat32x2 a) { return a * a * a * a * a * a * a * a; @@ -1334,7 +1338,7 @@ FfxFloat32x2 ffxApproximatePQToLinear(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateGamma2ToPQ(FfxFloat32x2 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(2u)) + ffxBroadcast2(0x2F9A4E46u)); @@ -1351,7 +1355,7 @@ FfxFloat32x2 ffxApproximateGamma2ToPQ(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateGamma2ToPQMedium(FfxFloat32x2 a) { FfxFloat32x2 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(2u)) + ffxBroadcast2(0x2F9A4E46u)); @@ -1370,7 +1374,7 @@ FfxFloat32x2 ffxApproximateGamma2ToPQMedium(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateGamma2ToPQHigh(FfxFloat32x2 a) { return ffxSqrt(ffxSqrt(a)); @@ -1387,7 +1391,7 @@ FfxFloat32x2 ffxApproximateGamma2ToPQHigh(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateLinearToPQ(FfxFloat32x2 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(3u)) + ffxBroadcast2(0x378D8723u)); @@ -1404,7 +1408,7 @@ FfxFloat32x2 ffxApproximateLinearToPQ(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateLinearToPQMedium(FfxFloat32x2 a) { FfxFloat32x2 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(3u)) + ffxBroadcast2(0x378D8723u)); @@ -1423,7 +1427,7 @@ FfxFloat32x2 ffxApproximateLinearToPQMedium(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateLinearToPQHigh(FfxFloat32x2 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1440,7 +1444,7 @@ FfxFloat32x2 ffxApproximateLinearToPQHigh(FfxFloat32x2 a) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximatePQToGamma2Medium(FfxFloat32x3 a) { return a * a * a * a; @@ -1457,7 +1461,7 @@ FfxFloat32x3 ffxApproximatePQToGamma2Medium(FfxFloat32x3 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximatePQToLinear(FfxFloat32x3 a) { return a * a * a * a * a * a * a * a; @@ -1474,7 +1478,7 @@ FfxFloat32x3 ffxApproximatePQToLinear(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateGamma2ToPQ(FfxFloat32x3 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(2u)) + ffxBroadcast3(0x2F9A4E46u)); @@ -1491,7 +1495,7 @@ FfxFloat32x3 ffxApproximateGamma2ToPQ(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateGamma2ToPQMedium(FfxFloat32x3 a) { FfxFloat32x3 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(2u)) + ffxBroadcast3(0x2F9A4E46u)); @@ -1510,7 +1514,7 @@ FfxFloat32x3 ffxApproximateGamma2ToPQMedium(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateGamma2ToPQHigh(FfxFloat32x3 a) { return ffxSqrt(ffxSqrt(a)); @@ -1527,7 +1531,7 @@ FfxFloat32x3 ffxApproximateGamma2ToPQHigh(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateLinearToPQ(FfxFloat32x3 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(3u)) + ffxBroadcast3(0x378D8723u)); @@ -1544,7 +1548,7 @@ FfxFloat32x3 ffxApproximateLinearToPQ(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateLinearToPQMedium(FfxFloat32x3 a) { FfxFloat32x3 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(3u)) + ffxBroadcast3(0x378D8723u)); @@ -1563,7 +1567,7 @@ FfxFloat32x3 ffxApproximateLinearToPQMedium(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateLinearToPQHigh(FfxFloat32x3 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1580,7 +1584,7 @@ FfxFloat32x3 ffxApproximateLinearToPQHigh(FfxFloat32x3 a) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximatePQToGamma2Medium(FfxFloat32x4 a) { return a * a * a * a; @@ -1597,7 +1601,7 @@ FfxFloat32x4 ffxApproximatePQToGamma2Medium(FfxFloat32x4 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximatePQToLinear(FfxFloat32x4 a) { return a * a * a * a * a * a * a * a; @@ -1614,7 +1618,7 @@ FfxFloat32x4 ffxApproximatePQToLinear(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateGamma2ToPQ(FfxFloat32x4 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(2u)) + ffxBroadcast4(0x2F9A4E46u)); @@ -1631,7 +1635,7 @@ FfxFloat32x4 ffxApproximateGamma2ToPQ(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateGamma2ToPQMedium(FfxFloat32x4 a) { FfxFloat32x4 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(2u)) + ffxBroadcast4(0x2F9A4E46u)); @@ -1650,7 +1654,7 @@ FfxFloat32x4 ffxApproximateGamma2ToPQMedium(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateGamma2ToPQHigh(FfxFloat32x4 a) { return ffxSqrt(ffxSqrt(a)); @@ -1667,7 +1671,7 @@ FfxFloat32x4 ffxApproximateGamma2ToPQHigh(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateLinearToPQ(FfxFloat32x4 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(3u)) + ffxBroadcast4(0x378D8723u)); @@ -1684,7 +1688,7 @@ FfxFloat32x4 ffxApproximateLinearToPQ(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateLinearToPQMedium(FfxFloat32x4 a) { FfxFloat32x4 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(3u)) + ffxBroadcast4(0x378D8723u)); @@ -1703,7 +1707,7 @@ FfxFloat32x4 ffxApproximateLinearToPQMedium(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateLinearToPQHigh(FfxFloat32x4 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1793,7 +1797,7 @@ FfxFloat32x2 ffxParabolicSinCos(FfxFloat32 x) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneAnd(FfxUInt32 x, FfxUInt32 y) { return min(x, y); @@ -1807,7 +1811,7 @@ FfxUInt32 ffxZeroOneAnd(FfxUInt32 x, FfxUInt32 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x, FfxUInt32x2 y) { return min(x, y); @@ -1821,7 +1825,7 @@ FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x, FfxUInt32x3 y) { return min(x, y); @@ -1835,7 +1839,7 @@ FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x, FfxUInt32x4 y) { return min(x, y); @@ -1844,12 +1848,11 @@ FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x, FfxUInt32x4 y) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneAnd(FfxUInt32 x) { return x ^ FfxUInt32(1); @@ -1858,12 +1861,11 @@ FfxUInt32 ffxZeroOneAnd(FfxUInt32 x) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x) { return x ^ ffxBroadcast2(1u); @@ -1872,12 +1874,11 @@ FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x) { return x ^ ffxBroadcast3(1u); @@ -1886,12 +1887,11 @@ FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x) { return x ^ ffxBroadcast4(1u); @@ -1905,7 +1905,7 @@ FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneOr(FfxUInt32 x, FfxUInt32 y) { return max(x, y); @@ -1919,7 +1919,7 @@ FfxUInt32 ffxZeroOneOr(FfxUInt32 x, FfxUInt32 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneOr(FfxUInt32x2 x, FfxUInt32x2 y) { return max(x, y); @@ -1933,7 +1933,7 @@ FfxUInt32x2 ffxZeroOneOr(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneOr(FfxUInt32x3 x, FfxUInt32x3 y) { return max(x, y); @@ -1947,7 +1947,7 @@ FfxUInt32x3 ffxZeroOneOr(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneOr(FfxUInt32x4 x, FfxUInt32x4 y) { return max(x, y); @@ -1960,7 +1960,7 @@ FfxUInt32x4 ffxZeroOneOr(FfxUInt32x4 x, FfxUInt32x4 y) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneAndToU1(FfxFloat32 x) { return FfxUInt32(FfxFloat32(1.0) - x); @@ -1973,7 +1973,7 @@ FfxUInt32 ffxZeroOneAndToU1(FfxFloat32 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneAndToU2(FfxFloat32x2 x) { return FfxUInt32x2(ffxBroadcast2(1.0) - x); @@ -1986,7 +1986,7 @@ FfxUInt32x2 ffxZeroOneAndToU2(FfxFloat32x2 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneAndToU3(FfxFloat32x3 x) { return FfxUInt32x3(ffxBroadcast3(1.0) - x); @@ -1999,7 +1999,7 @@ FfxUInt32x3 ffxZeroOneAndToU3(FfxFloat32x3 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneAndToU4(FfxFloat32x4 x) { return FfxUInt32x4(ffxBroadcast4(1.0) - x); @@ -2015,7 +2015,7 @@ FfxUInt32x4 ffxZeroOneAndToU4(FfxFloat32x4 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneAndOr(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return ffxSaturate(x * y + z); @@ -2031,7 +2031,7 @@ FfxFloat32 ffxZeroOneAndOr(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneAndOr(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return ffxSaturate(x * y + z); @@ -2047,7 +2047,7 @@ FfxFloat32x2 ffxZeroOneAndOr(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneAndOr(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return ffxSaturate(x * y + z); @@ -2063,7 +2063,7 @@ FfxFloat32x3 ffxZeroOneAndOr(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneAndOr(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return ffxSaturate(x * y + z); @@ -2076,7 +2076,7 @@ FfxFloat32x4 ffxZeroOneAndOr(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneIsGreaterThanZero(FfxFloat32 x) { return ffxSaturate(x * FfxFloat32(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2089,7 +2089,7 @@ FfxFloat32 ffxZeroOneIsGreaterThanZero(FfxFloat32 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneIsGreaterThanZero(FfxFloat32x2 x) { return ffxSaturate(x * ffxBroadcast2(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2102,7 +2102,7 @@ FfxFloat32x2 ffxZeroOneIsGreaterThanZero(FfxFloat32x2 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneIsGreaterThanZero(FfxFloat32x3 x) { return ffxSaturate(x * ffxBroadcast3(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2115,7 +2115,7 @@ FfxFloat32x3 ffxZeroOneIsGreaterThanZero(FfxFloat32x3 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneIsGreaterThanZero(FfxFloat32x4 x) { return ffxSaturate(x * ffxBroadcast4(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2128,7 +2128,7 @@ FfxFloat32x4 ffxZeroOneIsGreaterThanZero(FfxFloat32x4 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneAnd(FfxFloat32 x) { return FfxFloat32(1.0) - x; @@ -2141,7 +2141,7 @@ FfxFloat32 ffxZeroOneAnd(FfxFloat32 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneAnd(FfxFloat32x2 x) { return ffxBroadcast2(1.0) - x; @@ -2154,7 +2154,7 @@ FfxFloat32x2 ffxZeroOneAnd(FfxFloat32x2 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneAnd(FfxFloat32x3 x) { return ffxBroadcast3(1.0) - x; @@ -2167,7 +2167,7 @@ FfxFloat32x3 ffxZeroOneAnd(FfxFloat32x3 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneAnd(FfxFloat32x4 x) { return ffxBroadcast4(1.0) - x; @@ -2181,7 +2181,7 @@ FfxFloat32x4 ffxZeroOneAnd(FfxFloat32x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneOr(FfxFloat32 x, FfxFloat32 y) { return max(x, y); @@ -2195,7 +2195,7 @@ FfxFloat32 ffxZeroOneOr(FfxFloat32 x, FfxFloat32 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneOr(FfxFloat32x2 x, FfxFloat32x2 y) { return max(x, y); @@ -2209,7 +2209,7 @@ FfxFloat32x2 ffxZeroOneOr(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneOr(FfxFloat32x3 x, FfxFloat32x3 y) { return max(x, y); @@ -2223,7 +2223,7 @@ FfxFloat32x3 ffxZeroOneOr(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneOr(FfxFloat32x4 x, FfxFloat32x4 y) { return max(x, y); @@ -2238,7 +2238,7 @@ FfxFloat32x4 ffxZeroOneOr(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneSelect(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { FfxFloat32 r = (-x) * z + z; @@ -2254,7 +2254,7 @@ FfxFloat32 ffxZeroOneSelect(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneSelect(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { FfxFloat32x2 r = (-x) * z + z; @@ -2270,7 +2270,7 @@ FfxFloat32x2 ffxZeroOneSelect(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneSelect(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { FfxFloat32x3 r = (-x) * z + z; @@ -2286,7 +2286,7 @@ FfxFloat32x3 ffxZeroOneSelect(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneSelect(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { FfxFloat32x4 r = (-x) * z + z; @@ -2300,7 +2300,7 @@ FfxFloat32x4 ffxZeroOneSelect(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneIsSigned(FfxFloat32 x) { return ffxSaturate(x * FfxFloat32(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2313,7 +2313,7 @@ FfxFloat32 ffxZeroOneIsSigned(FfxFloat32 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneIsSigned(FfxFloat32x2 x) { return ffxSaturate(x * ffxBroadcast2(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2326,7 +2326,7 @@ FfxFloat32x2 ffxZeroOneIsSigned(FfxFloat32x2 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneIsSigned(FfxFloat32x3 x) { return ffxSaturate(x * ffxBroadcast3(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2339,7 +2339,7 @@ FfxFloat32x3 ffxZeroOneIsSigned(FfxFloat32x3 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneIsSigned(FfxFloat32x4 x) { return ffxSaturate(x * ffxBroadcast4(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2358,7 +2358,7 @@ FfxFloat32x4 ffxZeroOneIsSigned(FfxFloat32x4 x) /// @returns /// The color in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxRec709FromLinear(FfxFloat32 color) { FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); @@ -2379,7 +2379,7 @@ FfxFloat32 ffxRec709FromLinear(FfxFloat32 color) /// @returns /// The color in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxRec709FromLinear(FfxFloat32x2 color) { FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); @@ -2400,7 +2400,7 @@ FfxFloat32x2 ffxRec709FromLinear(FfxFloat32x2 color) /// @returns /// The color in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxRec709FromLinear(FfxFloat32x3 color) { FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); @@ -2420,10 +2420,10 @@ FfxFloat32x3 ffxRec709FromLinear(FfxFloat32x3 color) /// @returns /// A value in gamma space. /// -/// @ingroup GPU -FfxFloat32 ffxGammaFromLinear(FfxFloat32 color, FfxFloat32 rcpX) +/// @ingroup GPUCore +FfxFloat32 ffxGammaFromLinear(FfxFloat32 value, FfxFloat32 power) { - return pow(color, FfxFloat32(rcpX)); + return pow(value, FfxFloat32(power)); } /// Compute a gamma value from a linear value. @@ -2438,10 +2438,10 @@ FfxFloat32 ffxGammaFromLinear(FfxFloat32 color, FfxFloat32 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU -FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 color, FfxFloat32 rcpX) +/// @ingroup GPUCore +FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 value, FfxFloat32 power) { - return pow(color, ffxBroadcast2(rcpX)); + return pow(value, ffxBroadcast2(power)); } /// Compute a gamma value from a linear value. @@ -2456,10 +2456,10 @@ FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 color, FfxFloat32 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU -FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 color, FfxFloat32 rcpX) +/// @ingroup GPUCore +FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 value, FfxFloat32 power) { - return pow(color, ffxBroadcast3(rcpX)); + return pow(value, ffxBroadcast3(power)); } /// Compute a PQ value from a linear value. @@ -2469,10 +2469,10 @@ FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 color, FfxFloat32 rcpX) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32 ffxPQToLinear(FfxFloat32 x) +/// @ingroup GPUCore +FfxFloat32 ffxPQToLinear(FfxFloat32 value) { - FfxFloat32 p = pow(x, FfxFloat32(0.159302)); + FfxFloat32 p = pow(value, FfxFloat32(0.159302)); return pow((FfxFloat32(0.835938) + FfxFloat32(18.8516) * p) / (FfxFloat32(1.0) + FfxFloat32(18.6875) * p), FfxFloat32(78.8438)); } @@ -2483,10 +2483,10 @@ FfxFloat32 ffxPQToLinear(FfxFloat32 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x2 ffxPQToLinear(FfxFloat32x2 x) +/// @ingroup GPUCore +FfxFloat32x2 ffxPQToLinear(FfxFloat32x2 value) { - FfxFloat32x2 p = pow(x, ffxBroadcast2(0.159302)); + FfxFloat32x2 p = pow(value, ffxBroadcast2(0.159302)); return pow((ffxBroadcast2(0.835938) + ffxBroadcast2(18.8516) * p) / (ffxBroadcast2(1.0) + ffxBroadcast2(18.6875) * p), ffxBroadcast2(78.8438)); } @@ -2497,10 +2497,10 @@ FfxFloat32x2 ffxPQToLinear(FfxFloat32x2 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x3 ffxPQToLinear(FfxFloat32x3 x) +/// @ingroup GPUCore +FfxFloat32x3 ffxPQToLinear(FfxFloat32x3 value) { - FfxFloat32x3 p = pow(x, ffxBroadcast3(0.159302)); + FfxFloat32x3 p = pow(value, ffxBroadcast3(0.159302)); return pow((ffxBroadcast3(0.835938) + ffxBroadcast3(18.8516) * p) / (ffxBroadcast3(1.0) + ffxBroadcast3(18.6875) * p), ffxBroadcast3(78.8438)); } @@ -2511,12 +2511,12 @@ FfxFloat32x3 ffxPQToLinear(FfxFloat32x3 x) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU -FfxFloat32 ffxSrgbToLinear(FfxFloat32 color) +/// @ingroup GPUCore +FfxFloat32 ffxSrgbToLinear(FfxFloat32 value) { FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); - return clamp(j.x, color * j.y, pow(color, j.z) * k.x + k.y); + return clamp(j.x, value * j.y, pow(value, j.z) * k.x + k.y); } /// Compute a linear value from a SRGB value. @@ -2526,12 +2526,12 @@ FfxFloat32 ffxSrgbToLinear(FfxFloat32 color) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU -FfxFloat32x2 ffxSrgbToLinear(FfxFloat32x2 color) +/// @ingroup GPUCore +FfxFloat32x2 ffxSrgbToLinear(FfxFloat32x2 value) { FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); - return clamp(j.xx, color * j.yy, pow(color, j.zz) * k.xx + k.yy); + return clamp(j.xx, value * j.yy, pow(value, j.zz) * k.xx + k.yy); } /// Compute a linear value from a SRGB value. @@ -2541,12 +2541,12 @@ FfxFloat32x2 ffxSrgbToLinear(FfxFloat32x2 color) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU -FfxFloat32x3 ffxSrgbToLinear(FfxFloat32x3 color) +/// @ingroup GPUCore +FfxFloat32x3 ffxSrgbToLinear(FfxFloat32x3 value) { FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); - return clamp(j.xxx, color * j.yyy, pow(color, j.zzz) * k.xxx + k.yyy); + return clamp(j.xxx, value * j.yyy, pow(value, j.zzz) * k.xxx + k.yyy); } /// Compute a linear value from a REC.709 value. @@ -2556,7 +2556,7 @@ FfxFloat32x3 ffxSrgbToLinear(FfxFloat32x3 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxLinearFromRec709(FfxFloat32 color) { FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2571,7 +2571,7 @@ FfxFloat32 ffxLinearFromRec709(FfxFloat32 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxLinearFromRec709(FfxFloat32x2 color) { FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2586,7 +2586,7 @@ FfxFloat32x2 ffxLinearFromRec709(FfxFloat32x2 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxLinearFromRec709(FfxFloat32x3 color) { FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2604,7 +2604,7 @@ FfxFloat32x3 ffxLinearFromRec709(FfxFloat32x3 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxLinearFromGamma(FfxFloat32 color, FfxFloat32 power) { return pow(color, FfxFloat32(power)); @@ -2620,7 +2620,7 @@ FfxFloat32 ffxLinearFromGamma(FfxFloat32 color, FfxFloat32 power) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxLinearFromGamma(FfxFloat32x2 color, FfxFloat32 power) { return pow(color, ffxBroadcast2(power)); @@ -2636,7 +2636,7 @@ FfxFloat32x2 ffxLinearFromGamma(FfxFloat32x2 color, FfxFloat32 power) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxLinearFromGamma(FfxFloat32x3 color, FfxFloat32 power) { return pow(color, ffxBroadcast3(power)); @@ -2651,10 +2651,10 @@ FfxFloat32x3 ffxLinearFromGamma(FfxFloat32x3 color, FfxFloat32 power) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32 ffxLinearFromPQ(FfxFloat32 x) +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromPQ(FfxFloat32 value) { - FfxFloat32 p = pow(x, FfxFloat32(0.0126833)); + FfxFloat32 p = pow(value, FfxFloat32(0.0126833)); return pow(ffxSaturate(p - FfxFloat32(0.835938)) / (FfxFloat32(18.8516) - FfxFloat32(18.6875) * p), FfxFloat32(6.27739)); } @@ -2667,10 +2667,10 @@ FfxFloat32 ffxLinearFromPQ(FfxFloat32 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 x) +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 value) { - FfxFloat32x2 p = pow(x, ffxBroadcast2(0.0126833)); + FfxFloat32x2 p = pow(value, ffxBroadcast2(0.0126833)); return pow(ffxSaturate(p - ffxBroadcast2(0.835938)) / (ffxBroadcast2(18.8516) - ffxBroadcast2(18.6875) * p), ffxBroadcast2(6.27739)); } @@ -2683,10 +2683,10 @@ FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 x) +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 value) { - FfxFloat32x3 p = pow(x, ffxBroadcast3(0.0126833)); + FfxFloat32x3 p = pow(value, ffxBroadcast3(0.0126833)); return pow(ffxSaturate(p - ffxBroadcast3(0.835938)) / (ffxBroadcast3(18.8516) - ffxBroadcast3(18.6875) * p), ffxBroadcast3(6.27739)); } @@ -2699,12 +2699,12 @@ FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32 ffxLinearFromSrgb(FfxFloat32 color) +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromSrgb(FfxFloat32 value) { FfxFloat32x3 j = FfxFloat32x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); - return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.x), color * j.y, pow(color * k.x + k.y, j.z)); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.x), value * j.y, pow(value * k.x + k.y, j.z)); } /// Compute a linear value from a value in a SRGB space. @@ -2716,12 +2716,12 @@ FfxFloat32 ffxLinearFromSrgb(FfxFloat32 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 color) +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 value) { FfxFloat32x3 j = FfxFloat32x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); - return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.xx), color * j.yy, pow(color * k.xx + k.yy, j.zz)); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.xx), value * j.yy, pow(value * k.xx + k.yy, j.zz)); } /// Compute a linear value from a value in a SRGB space. @@ -2733,12 +2733,12 @@ FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 color) +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 value) { FfxFloat32x3 j = FfxFloat32x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); - return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.xxx), color * j.yyy, pow(color * k.xxx + k.yyy, j.zzz)); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.xxx), value * j.yyy, pow(value * k.xxx + k.yyy, j.zzz)); } /// A remapping of 64x1 to 8x8 imposing rotated 2x2 pixel quads in quad linear. @@ -2753,7 +2753,7 @@ FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 color) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxRemapForQuad(FfxUInt32 a) { return FfxUInt32x2(bitfieldExtract(a, 1u, 3u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), a, 1u)); @@ -2777,7 +2777,7 @@ FfxUInt32x2 ffxRemapForQuad(FfxUInt32 a) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxRemapForWaveReduction(FfxUInt32 a) { return FfxUInt32x2(bitfieldInsertMask(bitfieldExtract(a, 2u, 3u), a, 1u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), bitfieldExtract(a, 1u, 2u), 2u)); diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta new file mode 100644 index 0000000..ec380d2 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 05b921699d1374a429e32afca13137e2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h similarity index 94% rename from Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h index c46ccb3..4c73daf 100644 --- a/Assets/Resources/FSR2/shaders/ffx_core_gpu_common_half.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,28 +19,29 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + #if FFX_HALF -#if FFX_HLSL_6_2 +#if FFX_HLSL_SM >= 62 /// A define value for 16bit positive infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_POSITIVE_INFINITY_HALF FFX_TO_FLOAT16((uint16_t)0x7c00u) /// A define value for 16bit negative infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_NEGATIVE_INFINITY_HALF FFX_TO_FLOAT16((uint16_t)0xfc00u) #else /// A define value for 16bit positive infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_POSITIVE_INFINITY_HALF FFX_TO_FLOAT16(0x7c00u) /// A define value for 16bit negative infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_NEGATIVE_INFINITY_HALF FFX_TO_FLOAT16(0xfc00u) -#endif // FFX_HLSL_6_2 +#endif // #if FFX_HLSL_SM>=62 /// Compute the min of two values. /// @@ -50,7 +51,7 @@ /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxMin(FfxFloat16 x, FfxFloat16 y) { return min(x, y); @@ -64,7 +65,7 @@ FfxFloat16 ffxMin(FfxFloat16 x, FfxFloat16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxMin(FfxFloat16x2 x, FfxFloat16x2 y) { return min(x, y); @@ -78,7 +79,7 @@ FfxFloat16x2 ffxMin(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxMin(FfxFloat16x3 x, FfxFloat16x3 y) { return min(x, y); @@ -92,7 +93,7 @@ FfxFloat16x3 ffxMin(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxMin(FfxFloat16x4 x, FfxFloat16x4 y) { return min(x, y); @@ -106,7 +107,7 @@ FfxFloat16x4 ffxMin(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16 ffxMin(FfxInt16 x, FfxInt16 y) { return min(x, y); @@ -120,7 +121,7 @@ FfxInt16 ffxMin(FfxInt16 x, FfxInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x2 ffxMin(FfxInt16x2 x, FfxInt16x2 y) { return min(x, y); @@ -134,7 +135,7 @@ FfxInt16x2 ffxMin(FfxInt16x2 x, FfxInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x3 ffxMin(FfxInt16x3 x, FfxInt16x3 y) { return min(x, y); @@ -148,7 +149,7 @@ FfxInt16x3 ffxMin(FfxInt16x3 x, FfxInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x4 ffxMin(FfxInt16x4 x, FfxInt16x4 y) { return min(x, y); @@ -162,7 +163,7 @@ FfxInt16x4 ffxMin(FfxInt16x4 x, FfxInt16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxMin(FfxUInt16 x, FfxUInt16 y) { return min(x, y); @@ -176,7 +177,7 @@ FfxUInt16 ffxMin(FfxUInt16 x, FfxUInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxMin(FfxUInt16x2 x, FfxUInt16x2 y) { return min(x, y); @@ -190,7 +191,7 @@ FfxUInt16x2 ffxMin(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxMin(FfxUInt16x3 x, FfxUInt16x3 y) { return min(x, y); @@ -204,7 +205,7 @@ FfxUInt16x3 ffxMin(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxMin(FfxUInt16x4 x, FfxUInt16x4 y) { return min(x, y); @@ -218,7 +219,7 @@ FfxUInt16x4 ffxMin(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxMax(FfxFloat16 x, FfxFloat16 y) { return max(x, y); @@ -232,7 +233,7 @@ FfxFloat16 ffxMax(FfxFloat16 x, FfxFloat16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxMax(FfxFloat16x2 x, FfxFloat16x2 y) { return max(x, y); @@ -246,7 +247,7 @@ FfxFloat16x2 ffxMax(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxMax(FfxFloat16x3 x, FfxFloat16x3 y) { return max(x, y); @@ -260,7 +261,7 @@ FfxFloat16x3 ffxMax(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxMax(FfxFloat16x4 x, FfxFloat16x4 y) { return max(x, y); @@ -274,7 +275,7 @@ FfxFloat16x4 ffxMax(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16 ffxMax(FfxInt16 x, FfxInt16 y) { return max(x, y); @@ -288,7 +289,7 @@ FfxInt16 ffxMax(FfxInt16 x, FfxInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x2 ffxMax(FfxInt16x2 x, FfxInt16x2 y) { return max(x, y); @@ -302,7 +303,7 @@ FfxInt16x2 ffxMax(FfxInt16x2 x, FfxInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x3 ffxMax(FfxInt16x3 x, FfxInt16x3 y) { return max(x, y); @@ -316,7 +317,7 @@ FfxInt16x3 ffxMax(FfxInt16x3 x, FfxInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x4 ffxMax(FfxInt16x4 x, FfxInt16x4 y) { return max(x, y); @@ -330,7 +331,7 @@ FfxInt16x4 ffxMax(FfxInt16x4 x, FfxInt16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxMax(FfxUInt16 x, FfxUInt16 y) { return max(x, y); @@ -344,7 +345,7 @@ FfxUInt16 ffxMax(FfxUInt16 x, FfxUInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxMax(FfxUInt16x2 x, FfxUInt16x2 y) { return max(x, y); @@ -358,7 +359,7 @@ FfxUInt16x2 ffxMax(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxMax(FfxUInt16x3 x, FfxUInt16x3 y) { return max(x, y); @@ -372,7 +373,7 @@ FfxUInt16x3 ffxMax(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxMax(FfxUInt16x4 x, FfxUInt16x4 y) { return max(x, y); @@ -386,7 +387,7 @@ FfxUInt16x4 ffxMax(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxPow(FfxFloat16 x, FfxFloat16 y) { return pow(x, y); @@ -400,7 +401,7 @@ FfxFloat16 ffxPow(FfxFloat16 x, FfxFloat16 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPow(FfxFloat16x2 x, FfxFloat16x2 y) { return pow(x, y); @@ -414,7 +415,7 @@ FfxFloat16x2 ffxPow(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxPow(FfxFloat16x3 x, FfxFloat16x3 y) { return pow(x, y); @@ -428,7 +429,7 @@ FfxFloat16x3 ffxPow(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxPow(FfxFloat16x4 x, FfxFloat16x4 y) { return pow(x, y); @@ -441,7 +442,7 @@ FfxFloat16x4 ffxPow(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSqrt(FfxFloat16 x) { return sqrt(x); @@ -454,7 +455,7 @@ FfxFloat16 ffxSqrt(FfxFloat16 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSqrt(FfxFloat16x2 x) { return sqrt(x); @@ -467,7 +468,7 @@ FfxFloat16x2 ffxSqrt(FfxFloat16x2 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSqrt(FfxFloat16x3 x) { return sqrt(x); @@ -480,7 +481,7 @@ FfxFloat16x3 ffxSqrt(FfxFloat16x3 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxSqrt(FfxFloat16x4 x) { return sqrt(x); @@ -494,7 +495,7 @@ FfxFloat16x4 ffxSqrt(FfxFloat16x4 x) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxCopySignBitHalf(FfxFloat16 d, FfxFloat16 s) { return FFX_TO_FLOAT16(FFX_TO_UINT16(d) | (FFX_TO_UINT16(s) & FFX_BROADCAST_UINT16(0x8000u))); @@ -508,7 +509,7 @@ FfxFloat16 ffxCopySignBitHalf(FfxFloat16 d, FfxFloat16 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxCopySignBitHalf(FfxFloat16x2 d, FfxFloat16x2 s) { return FFX_TO_FLOAT16X2(FFX_TO_UINT16X2(d) | (FFX_TO_UINT16X2(s) & FFX_BROADCAST_UINT16X2(0x8000u))); @@ -522,7 +523,7 @@ FfxFloat16x2 ffxCopySignBitHalf(FfxFloat16x2 d, FfxFloat16x2 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxCopySignBitHalf(FfxFloat16x3 d, FfxFloat16x3 s) { return FFX_TO_FLOAT16X3(FFX_TO_UINT16X3(d) | (FFX_TO_UINT16X3(s) & FFX_BROADCAST_UINT16X3(0x8000u))); @@ -536,7 +537,7 @@ FfxFloat16x3 ffxCopySignBitHalf(FfxFloat16x3 d, FfxFloat16x3 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxCopySignBitHalf(FfxFloat16x4 d, FfxFloat16x4 s) { return FFX_TO_FLOAT16X4(FFX_TO_UINT16X4(d) | (FFX_TO_UINT16X4(s) & FFX_BROADCAST_UINT16X4(0x8000u))); @@ -559,10 +560,10 @@ FfxFloat16x4 ffxCopySignBitHalf(FfxFloat16x4 d, FfxFloat16x4 s) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxIsSignedHalf(FfxFloat16 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -582,10 +583,10 @@ FfxFloat16 ffxIsSignedHalf(FfxFloat16 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxIsSignedHalf(FfxFloat16x2 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -605,10 +606,10 @@ FfxFloat16x2 ffxIsSignedHalf(FfxFloat16x2 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxIsSignedHalf(FfxFloat16x3 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -628,10 +629,10 @@ FfxFloat16x3 ffxIsSignedHalf(FfxFloat16x3 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxIsSignedHalf(FfxFloat16x4 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -646,10 +647,10 @@ FfxFloat16x4 ffxIsSignedHalf(FfxFloat16x4 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxIsGreaterThanZeroHalf(FfxFloat16 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -664,10 +665,10 @@ FfxFloat16 ffxIsGreaterThanZeroHalf(FfxFloat16 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxIsGreaterThanZeroHalf(FfxFloat16x2 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -682,10 +683,10 @@ FfxFloat16x2 ffxIsGreaterThanZeroHalf(FfxFloat16x2 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxIsGreaterThanZeroHalf(FfxFloat16x3 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -700,10 +701,10 @@ FfxFloat16x3 ffxIsGreaterThanZeroHalf(FfxFloat16x3 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxIsGreaterThanZeroHalf(FfxFloat16x4 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF))); } /// Convert a 16bit floating point value to sortable integer. @@ -720,7 +721,7 @@ FfxFloat16x4 ffxIsGreaterThanZeroHalf(FfxFloat16x4 m) /// @returns /// The sortable integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxFloatToSortableIntegerHalf(FfxUInt16 x) { return x ^ ((ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16(15))) | FFX_BROADCAST_UINT16(0x8000)); @@ -737,7 +738,7 @@ FfxUInt16 ffxFloatToSortableIntegerHalf(FfxUInt16 x) /// @returns /// The floating point value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxSortableIntegerToFloatHalf(FfxUInt16 x) { return x ^ ((~ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16(15))) | FFX_BROADCAST_UINT16(0x8000)); @@ -757,7 +758,7 @@ FfxUInt16 ffxSortableIntegerToFloatHalf(FfxUInt16 x) /// @returns /// The sortable integer values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxFloatToSortableIntegerHalf(FfxUInt16x2 x) { return x ^ ((ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16X2(15))) | FFX_BROADCAST_UINT16X2(0x8000)); @@ -774,7 +775,7 @@ FfxUInt16x2 ffxFloatToSortableIntegerHalf(FfxUInt16x2 x) /// @returns /// The floating point values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxSortableIntegerToFloatHalf(FfxUInt16x2 x) { return x ^ ((~ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16X2(15))) | FFX_BROADCAST_UINT16X2(0x8000)); @@ -790,7 +791,7 @@ FfxUInt16x2 ffxSortableIntegerToFloatHalf(FfxUInt16x2 x) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY0ZeroX0(FfxUInt32x2 i) { return ((i.x) & 0xffu) | ((i.y << 16) & 0xff0000u); @@ -806,7 +807,7 @@ FfxUInt32 ffxPackBytesZeroY0ZeroX0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY1ZeroX1(FfxUInt32x2 i) { return ((i.x >> 8) & 0xffu) | ((i.y << 8) & 0xff0000u); @@ -822,7 +823,7 @@ FfxUInt32 ffxPackBytesZeroY1ZeroX1(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY2ZeroX2(FfxUInt32x2 i) { return ((i.x >> 16) & 0xffu) | ((i.y) & 0xff0000u); @@ -838,7 +839,7 @@ FfxUInt32 ffxPackBytesZeroY2ZeroX2(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY3ZeroX3(FfxUInt32x2 i) { return ((i.x >> 24) & 0xffu) | ((i.y >> 8) & 0xff0000u); @@ -854,7 +855,7 @@ FfxUInt32 ffxPackBytesZeroY3ZeroX3(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2Y1X0(FfxUInt32x2 i) { return ((i.x) & 0x000000ffu) | (i.y & 0xffffff00u); @@ -870,7 +871,7 @@ FfxUInt32 ffxPackBytesY3Y2Y1X0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2Y1X2(FfxUInt32x2 i) { return ((i.x >> 16) & 0x000000ffu) | (i.y & 0xffffff00u); @@ -886,7 +887,7 @@ FfxUInt32 ffxPackBytesY3Y2Y1X2(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2X0Y0(FfxUInt32x2 i) { return ((i.x << 8) & 0x0000ff00u) | (i.y & 0xffff00ffu); @@ -902,7 +903,7 @@ FfxUInt32 ffxPackBytesY3Y2X0Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2X2Y0(FfxUInt32x2 i) { return ((i.x >> 8) & 0x0000ff00u) | (i.y & 0xffff00ffu); @@ -918,7 +919,7 @@ FfxUInt32 ffxPackBytesY3Y2X2Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3X0Y1Y0(FfxUInt32x2 i) { return ((i.x << 16) & 0x00ff0000u) | (i.y & 0xff00ffffu); @@ -934,7 +935,7 @@ FfxUInt32 ffxPackBytesY3X0Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3X2Y1Y0(FfxUInt32x2 i) { return ((i.x) & 0x00ff0000u) | (i.y & 0xff00ffffu); @@ -950,7 +951,7 @@ FfxUInt32 ffxPackBytesY3X2Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesX0Y2Y1Y0(FfxUInt32x2 i) { return ((i.x << 24) & 0xff000000u) | (i.y & 0x00ffffffu); @@ -966,7 +967,7 @@ FfxUInt32 ffxPackBytesX0Y2Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesX2Y2Y1Y0(FfxUInt32x2 i) { return ((i.x << 8) & 0xff000000u) | (i.y & 0x00ffffffu); @@ -982,7 +983,7 @@ FfxUInt32 ffxPackBytesX2Y2Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY2X2Y0X0(FfxUInt32x2 i) { return ((i.x) & 0x00ff00ffu) | ((i.y << 8) & 0xff00ff00u); @@ -998,7 +999,7 @@ FfxUInt32 ffxPackBytesY2X2Y0X0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY2Y0X2X0(FfxUInt32x2 i) { return (((i.x) & 0xffu) | ((i.x >> 8) & 0xff00u) | ((i.y << 16) & 0xff0000u) | ((i.y << 8) & 0xff000000u)); @@ -1012,7 +1013,7 @@ FfxUInt32 ffxPackBytesY2Y0X2X0(FfxUInt32x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxPackX0Y0X1Y1UnsignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) { x *= FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0); @@ -1037,7 +1038,7 @@ FfxUInt16x2 ffxPackX0Y0X1Y1UnsignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1061,7 +1062,7 @@ FfxUInt32x2 ffxPermuteUByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1085,7 +1086,7 @@ FfxUInt32x2 ffxPermuteUByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1109,7 +1110,7 @@ FfxUInt32x2 ffxPermuteUByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1123,7 +1124,7 @@ FfxUInt32x2 ffxPermuteUByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte0Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1136,7 +1137,7 @@ FfxFloat16x2 ffxPermuteUByte0Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte1Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1149,7 +1150,7 @@ FfxFloat16x2 ffxPermuteUByte1Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte2Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1162,7 +1163,7 @@ FfxFloat16x2 ffxPermuteUByte2Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte3Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1176,7 +1177,7 @@ FfxFloat16x2 ffxPermuteUByte3Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxPackX0Y0X1Y1SignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) { x = x * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0); @@ -1195,7 +1196,7 @@ FfxUInt16x2 ffxPackX0Y0X1Y1SignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1213,7 +1214,7 @@ FfxUInt32x2 ffxPermuteSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1231,7 +1232,7 @@ FfxUInt32x2 ffxPermuteSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1249,7 +1250,7 @@ FfxUInt32x2 ffxPermuteSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1270,7 +1271,7 @@ FfxUInt32x2 ffxPermuteSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1291,7 +1292,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1312,7 +1313,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1333,7 +1334,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1349,7 +1350,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte0Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1364,7 +1365,7 @@ FfxFloat16x2 ffxPermuteSByte0Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte1Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1379,7 +1380,7 @@ FfxFloat16x2 ffxPermuteSByte1Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte2Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1394,7 +1395,7 @@ FfxFloat16x2 ffxPermuteSByte2Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte3Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1409,7 +1410,7 @@ FfxFloat16x2 ffxPermuteSByte3Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte0Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1424,7 +1425,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte0Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte1Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1439,7 +1440,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte1Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte2Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1454,7 +1455,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte2Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte3Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1473,7 +1474,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte3Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateSqrtHalf(FfxFloat16 a) { return FFX_TO_FLOAT16((FFX_TO_UINT16(a) >> FFX_BROADCAST_UINT16(1)) + FFX_BROADCAST_UINT16(0x1de2)); @@ -1492,7 +1493,7 @@ FfxFloat16 ffxApproximateSqrtHalf(FfxFloat16 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateSqrtHalf(FfxFloat16x2 a) { return FFX_TO_FLOAT16X2((FFX_TO_UINT16X2(a) >> FFX_BROADCAST_UINT16X2(1)) + FFX_BROADCAST_UINT16X2(0x1de2)); @@ -1511,7 +1512,7 @@ FfxFloat16x2 ffxApproximateSqrtHalf(FfxFloat16x2 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateSqrtHalf(FfxFloat16x3 a) { return FFX_TO_FLOAT16X3((FFX_TO_UINT16X3(a) >> FFX_BROADCAST_UINT16X3(1)) + FFX_BROADCAST_UINT16X3(0x1de2)); @@ -1530,7 +1531,7 @@ FfxFloat16x3 ffxApproximateSqrtHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateReciprocalHalf(FfxFloat16 a) { return FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x7784) - FFX_TO_UINT16(a)); @@ -1549,7 +1550,7 @@ FfxFloat16 ffxApproximateReciprocalHalf(FfxFloat16 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateReciprocalHalf(FfxFloat16x2 a) { return FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x7784) - FFX_TO_UINT16X2(a)); @@ -1568,7 +1569,7 @@ FfxFloat16x2 ffxApproximateReciprocalHalf(FfxFloat16x2 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateReciprocalHalf(FfxFloat16x3 a) { return FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x7784) - FFX_TO_UINT16X3(a)); @@ -1587,7 +1588,7 @@ FfxFloat16x3 ffxApproximateReciprocalHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxApproximateReciprocalHalf(FfxFloat16x4 a) { return FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x7784) - FFX_TO_UINT16X4(a)); @@ -1606,7 +1607,7 @@ FfxFloat16x4 ffxApproximateReciprocalHalf(FfxFloat16x4 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateReciprocalMediumHalf(FfxFloat16 a) { FfxFloat16 b = FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x778d) - FFX_TO_UINT16(a)); @@ -1626,7 +1627,7 @@ FfxFloat16 ffxApproximateReciprocalMediumHalf(FfxFloat16 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateReciprocalMediumHalf(FfxFloat16x2 a) { FfxFloat16x2 b = FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x778d) - FFX_TO_UINT16X2(a)); @@ -1646,7 +1647,7 @@ FfxFloat16x2 ffxApproximateReciprocalMediumHalf(FfxFloat16x2 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateReciprocalMediumHalf(FfxFloat16x3 a) { FfxFloat16x3 b = FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x778d) - FFX_TO_UINT16X3(a)); @@ -1666,7 +1667,7 @@ FfxFloat16x3 ffxApproximateReciprocalMediumHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxApproximateReciprocalMediumHalf(FfxFloat16x4 a) { FfxFloat16x4 b = FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x778d) - FFX_TO_UINT16X4(a)); @@ -1686,7 +1687,7 @@ FfxFloat16x4 ffxApproximateReciprocalMediumHalf(FfxFloat16x4 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateReciprocalSquareRootHalf(FfxFloat16 a) { return FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x59a3) - (FFX_TO_UINT16(a) >> FFX_BROADCAST_UINT16(1))); @@ -1705,7 +1706,7 @@ FfxFloat16 ffxApproximateReciprocalSquareRootHalf(FfxFloat16 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x2 a) { return FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x59a3) - (FFX_TO_UINT16X2(a) >> FFX_BROADCAST_UINT16X2(1))); @@ -1724,7 +1725,7 @@ FfxFloat16x2 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x2 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x3 a) { return FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x59a3) - (FFX_TO_UINT16X3(a) >> FFX_BROADCAST_UINT16X3(1))); @@ -1743,7 +1744,7 @@ FfxFloat16x3 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x4 a) { return FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x59a3) - (FFX_TO_UINT16X4(a) >> FFX_BROADCAST_UINT16X4(1))); @@ -1833,7 +1834,7 @@ FfxFloat16x2 ffxParabolicSinCosHalf(FfxFloat16 x) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneAndHalf(FfxUInt16 x, FfxUInt16 y) { return min(x, y); @@ -1847,7 +1848,7 @@ FfxUInt16 ffxZeroOneAndHalf(FfxUInt16 x, FfxUInt16 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneAndHalf(FfxUInt16x2 x, FfxUInt16x2 y) { return min(x, y); @@ -1861,7 +1862,7 @@ FfxUInt16x2 ffxZeroOneAndHalf(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneAndHalf(FfxUInt16x3 x, FfxUInt16x3 y) { return min(x, y); @@ -1875,7 +1876,7 @@ FfxUInt16x3 ffxZeroOneAndHalf(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneAndHalf(FfxUInt16x4 x, FfxUInt16x4 y) { return min(x, y); @@ -1889,7 +1890,7 @@ FfxUInt16x4 ffxZeroOneAndHalf(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneNotHalf(FfxUInt16 x) { return x ^ FFX_BROADCAST_UINT16(1); @@ -1903,7 +1904,7 @@ FfxUInt16 ffxZeroOneNotHalf(FfxUInt16 x) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneNotHalf(FfxUInt16x2 x) { return x ^ FFX_BROADCAST_UINT16X2(1); @@ -1917,7 +1918,7 @@ FfxUInt16x2 ffxZeroOneNotHalf(FfxUInt16x2 x) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneNotHalf(FfxUInt16x3 x) { return x ^ FFX_BROADCAST_UINT16X3(1); @@ -1931,7 +1932,7 @@ FfxUInt16x3 ffxZeroOneNotHalf(FfxUInt16x3 x) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneNotHalf(FfxUInt16x4 x) { return x ^ FFX_BROADCAST_UINT16X4(1); @@ -1945,7 +1946,7 @@ FfxUInt16x4 ffxZeroOneNotHalf(FfxUInt16x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneOrHalf(FfxUInt16 x, FfxUInt16 y) { return max(x, y); @@ -1959,7 +1960,7 @@ FfxUInt16 ffxZeroOneOrHalf(FfxUInt16 x, FfxUInt16 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneOrHalf(FfxUInt16x2 x, FfxUInt16x2 y) { return max(x, y); @@ -1973,7 +1974,7 @@ FfxUInt16x2 ffxZeroOneOrHalf(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneOrHalf(FfxUInt16x3 x, FfxUInt16x3 y) { return max(x, y); @@ -1987,7 +1988,7 @@ FfxUInt16x3 ffxZeroOneOrHalf(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneOrHalf(FfxUInt16x4 x, FfxUInt16x4 y) { return max(x, y); @@ -2000,7 +2001,7 @@ FfxUInt16x4 ffxZeroOneOrHalf(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneFloat16ToUint16(FfxFloat16 x) { return FFX_TO_UINT16(x * FFX_TO_FLOAT16(FFX_TO_UINT16(1))); @@ -2013,7 +2014,7 @@ FfxUInt16 ffxZeroOneFloat16ToUint16(FfxFloat16 x) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneFloat16x2ToUint16x2(FfxFloat16x2 x) { return FFX_TO_UINT16X2(x * FFX_TO_FLOAT16X2(FfxUInt16x2(1, 1))); @@ -2026,7 +2027,7 @@ FfxUInt16x2 ffxZeroOneFloat16x2ToUint16x2(FfxFloat16x2 x) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneFloat16x3ToUint16x3(FfxFloat16x3 x) { return FFX_TO_UINT16X3(x * FFX_TO_FLOAT16X3(FfxUInt16x3(1, 1, 1))); @@ -2039,7 +2040,7 @@ FfxUInt16x3 ffxZeroOneFloat16x3ToUint16x3(FfxFloat16x3 x) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneFloat16x4ToUint16x4(FfxFloat16x4 x) { return FFX_TO_UINT16X4(x * FFX_TO_FLOAT16X4(FfxUInt16x4(1, 1, 1, 1))); @@ -2052,7 +2053,7 @@ FfxUInt16x4 ffxZeroOneFloat16x4ToUint16x4(FfxFloat16x4 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneUint16ToFloat16(FfxUInt16 x) { return FFX_TO_FLOAT16(x * FFX_TO_UINT16(FFX_TO_FLOAT16(1.0))); @@ -2065,7 +2066,7 @@ FfxFloat16 ffxZeroOneUint16ToFloat16(FfxUInt16 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneUint16x2ToFloat16x2(FfxUInt16x2 x) { return FFX_TO_FLOAT16X2(x * FFX_TO_UINT16X2(FfxUInt16x2(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); @@ -2078,7 +2079,7 @@ FfxFloat16x2 ffxZeroOneUint16x2ToFloat16x2(FfxUInt16x2 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneUint16x3ToFloat16x3(FfxUInt16x3 x) { return FFX_TO_FLOAT16X3(x * FFX_TO_UINT16X3(FfxUInt16x3(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); @@ -2091,7 +2092,7 @@ FfxFloat16x3 ffxZeroOneUint16x3ToFloat16x3(FfxUInt16x3 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneUint16x4ToFloat16x4(FfxUInt16x4 x) { return FFX_TO_FLOAT16X4(x * FFX_TO_UINT16X4(FfxUInt16x4(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); @@ -2105,7 +2106,7 @@ FfxFloat16x4 ffxZeroOneUint16x4ToFloat16x4(FfxUInt16x4 x) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneAndHalf(FfxFloat16 x, FfxFloat16 y) { return min(x, y); @@ -2119,7 +2120,7 @@ FfxFloat16 ffxZeroOneAndHalf(FfxFloat16 x, FfxFloat16 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneAndHalf(FfxFloat16x2 x, FfxFloat16x2 y) { return min(x, y); @@ -2133,7 +2134,7 @@ FfxFloat16x2 ffxZeroOneAndHalf(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneAndHalf(FfxFloat16x3 x, FfxFloat16x3 y) { return min(x, y); @@ -2147,7 +2148,7 @@ FfxFloat16x3 ffxZeroOneAndHalf(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneAndHalf(FfxFloat16x4 x, FfxFloat16x4 y) { return min(x, y); @@ -2161,7 +2162,7 @@ FfxFloat16x4 ffxZeroOneAndHalf(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSignedZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y) { return (-x) * y + FFX_BROADCAST_FLOAT16(1.0); @@ -2175,7 +2176,7 @@ FfxFloat16 ffxSignedZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSignedZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) { return (-x) * y + FFX_BROADCAST_FLOAT16X2(1.0); @@ -2189,7 +2190,7 @@ FfxFloat16x2 ffxSignedZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSignedZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) { return (-x) * y + FFX_BROADCAST_FLOAT16X3(1.0); @@ -2203,7 +2204,7 @@ FfxFloat16x3 ffxSignedZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxSignedZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) { return (-x) * y + FFX_BROADCAST_FLOAT16X4(1.0); @@ -2219,10 +2220,10 @@ FfxFloat16x4 ffxSignedZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) { - return ffxSaturate(x * y + z); + return FfxFloat16(ffxSaturate(x * y + z)); } /// Conditional free logic AND operation using two half-precision values followed by @@ -2235,10 +2236,10 @@ FfxFloat16 ffxZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) { - return ffxSaturate(x * y + z); + return FfxFloat16x2(ffxSaturate(x * y + z)); } /// Conditional free logic AND operation using two half-precision values followed by @@ -2251,10 +2252,10 @@ FfxFloat16x2 ffxZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) { - return ffxSaturate(x * y + z); + return FfxFloat16x3(ffxSaturate(x * y + z)); } /// Conditional free logic AND operation using two half-precision values followed by @@ -2267,10 +2268,10 @@ FfxFloat16x3 ffxZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) { - return ffxSaturate(x * y + z); + return FfxFloat16x4(ffxSaturate(x * y + z)); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2280,10 +2281,10 @@ FfxFloat16x4 ffxZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2293,10 +2294,10 @@ FfxFloat16 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x2 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2306,10 +2307,10 @@ FfxFloat16x2 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x2 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x3 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2319,10 +2320,10 @@ FfxFloat16x3 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x3 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x4 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF))); } /// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. @@ -2332,7 +2333,7 @@ FfxFloat16x4 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x4 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneNotHalf(FfxFloat16 x) { return FFX_BROADCAST_FLOAT16(1.0) - x; @@ -2345,7 +2346,7 @@ FfxFloat16 ffxZeroOneNotHalf(FfxFloat16 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneNotHalf(FfxFloat16x2 x) { return FFX_BROADCAST_FLOAT16X2(1.0) - x; @@ -2358,7 +2359,7 @@ FfxFloat16x2 ffxZeroOneNotHalf(FfxFloat16x2 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneNotHalf(FfxFloat16x3 x) { return FFX_BROADCAST_FLOAT16X3(1.0) - x; @@ -2371,7 +2372,7 @@ FfxFloat16x3 ffxZeroOneNotHalf(FfxFloat16x3 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneNotHalf(FfxFloat16x4 x) { return FFX_BROADCAST_FLOAT16X4(1.0) - x; @@ -2385,7 +2386,7 @@ FfxFloat16x4 ffxZeroOneNotHalf(FfxFloat16x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneOrHalf(FfxFloat16 x, FfxFloat16 y) { return max(x, y); @@ -2399,7 +2400,7 @@ FfxFloat16 ffxZeroOneOrHalf(FfxFloat16 x, FfxFloat16 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) { return max(x, y); @@ -2413,7 +2414,7 @@ FfxFloat16x2 ffxZeroOneOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) { return max(x, y); @@ -2427,7 +2428,7 @@ FfxFloat16x3 ffxZeroOneOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) { return max(x, y); @@ -2442,7 +2443,7 @@ FfxFloat16x4 ffxZeroOneOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneSelectHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) { FfxFloat16 r = (-x) * z + z; @@ -2458,7 +2459,7 @@ FfxFloat16 ffxZeroOneSelectHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneSelectHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) { FfxFloat16x2 r = (-x) * z + z; @@ -2474,7 +2475,7 @@ FfxFloat16x2 ffxZeroOneSelectHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneSelectHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) { FfxFloat16x3 r = (-x) * z + z; @@ -2490,7 +2491,7 @@ FfxFloat16x3 ffxZeroOneSelectHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneSelectHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) { FfxFloat16x4 r = (-x) * z + z; @@ -2504,10 +2505,10 @@ FfxFloat16x4 ffxZeroOneSelectHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneIsSignedHalf(FfxFloat16 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. @@ -2517,10 +2518,10 @@ FfxFloat16 ffxZeroOneIsSignedHalf(FfxFloat16 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneIsSignedHalf(FfxFloat16x2 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. @@ -2530,10 +2531,10 @@ FfxFloat16x2 ffxZeroOneIsSignedHalf(FfxFloat16x2 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneIsSignedHalf(FfxFloat16x3 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. @@ -2543,10 +2544,10 @@ FfxFloat16x3 ffxZeroOneIsSignedHalf(FfxFloat16x3 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneIsSignedHalf(FfxFloat16x4 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF))); } /// Compute a Rec.709 color space. @@ -2562,7 +2563,7 @@ FfxFloat16x4 ffxZeroOneIsSignedHalf(FfxFloat16x4 x) /// @returns /// The color in Rec.709 space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxRec709FromLinearHalf(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); @@ -2583,7 +2584,7 @@ FfxFloat16 ffxRec709FromLinearHalf(FfxFloat16 c) /// @returns /// The color in Rec.709 space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxRec709FromLinearHalf(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); @@ -2604,7 +2605,7 @@ FfxFloat16x2 ffxRec709FromLinearHalf(FfxFloat16x2 c) /// @returns /// The color in Rec.709 space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxRec709FromLinearHalf(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); @@ -2624,7 +2625,7 @@ FfxFloat16x3 ffxRec709FromLinearHalf(FfxFloat16x3 c) /// @returns /// A value in gamma space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxGammaFromLinearHalf(FfxFloat16 c, FfxFloat16 rcpX) { return pow(c, FFX_BROADCAST_FLOAT16(rcpX)); @@ -2642,7 +2643,7 @@ FfxFloat16 ffxGammaFromLinearHalf(FfxFloat16 c, FfxFloat16 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxGammaFromLinearHalf(FfxFloat16x2 c, FfxFloat16 rcpX) { return pow(c, FFX_BROADCAST_FLOAT16X2(rcpX)); @@ -2660,7 +2661,7 @@ FfxFloat16x2 ffxGammaFromLinearHalf(FfxFloat16x2 c, FfxFloat16 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxGammaFromLinearHalf(FfxFloat16x3 c, FfxFloat16 rcpX) { return pow(c, FFX_BROADCAST_FLOAT16X3(rcpX)); @@ -2673,7 +2674,7 @@ FfxFloat16x3 ffxGammaFromLinearHalf(FfxFloat16x3 c, FfxFloat16 rcpX) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSrgbFromLinearHalf(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); @@ -2688,7 +2689,7 @@ FfxFloat16 ffxSrgbFromLinearHalf(FfxFloat16 c) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSrgbFromLinearHalf(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); @@ -2703,7 +2704,7 @@ FfxFloat16x2 ffxSrgbFromLinearHalf(FfxFloat16x2 c) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSrgbFromLinearHalf(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); @@ -2718,7 +2719,7 @@ FfxFloat16x3 ffxSrgbFromLinearHalf(FfxFloat16x3 c) /// @returns /// A square root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSquareRootHalf(FfxFloat16 c) { return sqrt(c); @@ -2731,7 +2732,7 @@ FfxFloat16 ffxSquareRootHalf(FfxFloat16 c) /// @returns /// A square root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSquareRootHalf(FfxFloat16x2 c) { return sqrt(c); @@ -2744,7 +2745,7 @@ FfxFloat16x2 ffxSquareRootHalf(FfxFloat16x2 c) /// @returns /// A square root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSquareRootHalf(FfxFloat16x3 c) { return sqrt(c); @@ -2757,7 +2758,7 @@ FfxFloat16x3 ffxSquareRootHalf(FfxFloat16x3 c) /// @returns /// A cube root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxCubeRootHalf(FfxFloat16 c) { return pow(c, FFX_BROADCAST_FLOAT16(1.0 / 3.0)); @@ -2770,7 +2771,7 @@ FfxFloat16 ffxCubeRootHalf(FfxFloat16 c) /// @returns /// A cube root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxCubeRootHalf(FfxFloat16x2 c) { return pow(c, FFX_BROADCAST_FLOAT16X2(1.0 / 3.0)); @@ -2783,7 +2784,7 @@ FfxFloat16x2 ffxCubeRootHalf(FfxFloat16x2 c) /// @returns /// A cube root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxCubeRootHalf(FfxFloat16x3 c) { return pow(c, FFX_BROADCAST_FLOAT16X3(1.0 / 3.0)); @@ -2796,7 +2797,7 @@ FfxFloat16x3 ffxCubeRootHalf(FfxFloat16x3 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxLinearFromRec709Half(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2811,7 +2812,7 @@ FfxFloat16 ffxLinearFromRec709Half(FfxFloat16 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxLinearFromRec709Half(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2826,7 +2827,7 @@ FfxFloat16x2 ffxLinearFromRec709Half(FfxFloat16x2 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxLinearFromRec709Half(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2844,7 +2845,7 @@ FfxFloat16x3 ffxLinearFromRec709Half(FfxFloat16x3 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxLinearFromGammaHalf(FfxFloat16 c, FfxFloat16 x) { return pow(c, FFX_BROADCAST_FLOAT16(x)); @@ -2860,7 +2861,7 @@ FfxFloat16 ffxLinearFromGammaHalf(FfxFloat16 c, FfxFloat16 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxLinearFromGammaHalf(FfxFloat16x2 c, FfxFloat16 x) { return pow(c, FFX_BROADCAST_FLOAT16X2(x)); @@ -2876,7 +2877,7 @@ FfxFloat16x2 ffxLinearFromGammaHalf(FfxFloat16x2 c, FfxFloat16 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxLinearFromGammaHalf(FfxFloat16x3 c, FfxFloat16 x) { return pow(c, FFX_BROADCAST_FLOAT16X3(x)); @@ -2891,7 +2892,7 @@ FfxFloat16x3 ffxLinearFromGammaHalf(FfxFloat16x3 c, FfxFloat16 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxLinearFromSrgbHalf(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); @@ -2908,7 +2909,7 @@ FfxFloat16 ffxLinearFromSrgbHalf(FfxFloat16 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxLinearFromSrgbHalf(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); @@ -2925,7 +2926,7 @@ FfxFloat16x2 ffxLinearFromSrgbHalf(FfxFloat16x2 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxLinearFromSrgbHalf(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); @@ -2945,7 +2946,7 @@ FfxFloat16x3 ffxLinearFromSrgbHalf(FfxFloat16x3 c) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxRemapForQuadHalf(FfxUInt32 a) { return FfxUInt16x2(bitfieldExtract(a, 1u, 3u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), a, 1u)); @@ -2969,7 +2970,7 @@ FfxUInt16x2 ffxRemapForQuadHalf(FfxUInt32 a) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxRemapForWaveReductionHalf(FfxUInt32 a) { return FfxUInt16x2(bitfieldInsertMask(bitfieldExtract(a, 2u, 3u), a, 1u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), bitfieldExtract(a, 1u, 2u), 2u)); diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta new file mode 100644 index 0000000..e78eec4 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 1bdb323791a91a5438ee8e1e63187840 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h similarity index 86% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h index ad4ff65..337eb06 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,188 +19,221 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + +/// @defgroup HLSLCore HLSL Core +/// HLSL core defines and functions +/// +/// @ingroup FfxHLSL + +#define DECLARE_SRV_REGISTER(regIndex) t##regIndex +#define DECLARE_UAV_REGISTER(regIndex) u##regIndex +#define DECLARE_CB_REGISTER(regIndex) b##regIndex +#define FFX_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) +#define FFX_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) +#define FFX_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) + /// A define for abstracting shared memory between shading languages. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GROUPSHARED groupshared /// A define for abstracting compute memory barriers between shading languages. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GROUP_MEMORY_BARRIER GroupMemoryBarrierWithGroupSync +/// A define for abstracting compute atomic additions between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_ATOMIC_ADD(x, y) InterlockedAdd(x, y) + /// A define added to accept static markup on functions to aid CPU/GPU portability of code. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_STATIC static /// A define for abstracting loop unrolling between shading languages. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_UNROLL [unroll] /// A define for abstracting a 'greater than' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GREATER_THAN(x, y) x > y /// A define for abstracting a 'greater than or equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GREATER_THAN_EQUAL(x, y) x >= y /// A define for abstracting a 'less than' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_LESS_THAN(x, y) x < y /// A define for abstracting a 'less than or equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_LESS_THAN_EQUAL(x, y) x <= y /// A define for abstracting an 'equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_EQUAL(x, y) x == y /// A define for abstracting a 'not equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_NOT_EQUAL(x, y) x != y +/// A define for abstracting matrix multiply operations between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_MATRIX_MULTIPLY(a, b) mul(a, b) + +/// A define for abstracting vector transformations between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_TRANSFORM_VECTOR(a, b) mul(a, b) + +/// A define for abstracting modulo operations between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_MODULO(a, b) (fmod(a, b)) + /// Broadcast a scalar value to a 1-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32(x) FfxFloat32(x) /// Broadcast a scalar value to a 2-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32X2(x) FfxFloat32(x) /// Broadcast a scalar value to a 3-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32X3(x) FfxFloat32(x) /// Broadcast a scalar value to a 4-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32X4(x) FfxFloat32(x) /// Broadcast a scalar value to a 1-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32(x) FfxUInt32(x) /// Broadcast a scalar value to a 2-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32X2(x) FfxUInt32(x) /// Broadcast a scalar value to a 4-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32X3(x) FfxUInt32(x) /// Broadcast a scalar value to a 4-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32X4(x) FfxUInt32(x) /// Broadcast a scalar value to a 1-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32(x) FfxInt32(x) /// Broadcast a scalar value to a 2-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32X2(x) FfxInt32(x) /// Broadcast a scalar value to a 3-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32X3(x) FfxInt32(x) /// Broadcast a scalar value to a 4-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32X4(x) FfxInt32(x) /// Broadcast a scalar value to a 1-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 2-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16X2(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 3-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16X3(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 4-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16X4(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 1-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 2-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16X2(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 3-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16X3(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 4-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16X4(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 1-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16(a) FFX_MIN16_I(a) /// Broadcast a scalar value to a 2-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16X2(a) FFX_MIN16_I(a) /// Broadcast a scalar value to a 3-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16X3(a) FFX_MIN16_I(a) /// Broadcast a scalar value to a 4-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16X4(a) FFX_MIN16_I(a) /// Pack 2x32-bit floating point values in a single 32bit value. -/// +/// /// This function first converts each component of value into their nearest 16-bit floating /// point representation, and then stores the X and Y components in the lower and upper 16 bits of the /// 32bit unsigned integer respectively. /// /// @param [in] value A 2-dimensional floating point value to convert and pack. -/// +/// /// @returns /// A packed 32bit value containing 2 16bit floating point values. -/// -/// @ingroup HLSL +/// +/// @ingroup HLSLCore FfxUInt32 packHalf2x16(FfxFloat32x2 value) { return f32tof16(value.x) | (f32tof16(value.y) << 16); @@ -213,7 +246,7 @@ FfxUInt32 packHalf2x16(FfxFloat32x2 value) /// @returns /// A 2-dimensional floating point vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxBroadcast2(FfxFloat32 value) { return FfxFloat32x2(value, value); @@ -226,7 +259,7 @@ FfxFloat32x2 ffxBroadcast2(FfxFloat32 value) /// @returns /// A 3-dimensional floating point vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxBroadcast3(FfxFloat32 value) { return FfxFloat32x3(value, value, value); @@ -239,7 +272,7 @@ FfxFloat32x3 ffxBroadcast3(FfxFloat32 value) /// @returns /// A 4-dimensional floating point vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxBroadcast4(FfxFloat32 value) { return FfxFloat32x4(value, value, value, value); @@ -252,7 +285,7 @@ FfxFloat32x4 ffxBroadcast4(FfxFloat32 value) /// @returns /// A 2-dimensional signed integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxInt32x2 ffxBroadcast2(FfxInt32 value) { return FfxInt32x2(value, value); @@ -265,7 +298,7 @@ FfxInt32x2 ffxBroadcast2(FfxInt32 value) /// @returns /// A 3-dimensional signed integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxBroadcast3(FfxInt32 value) { return FfxUInt32x3(value, value, value); @@ -278,7 +311,7 @@ FfxUInt32x3 ffxBroadcast3(FfxInt32 value) /// @returns /// A 4-dimensional signed integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxInt32x4 ffxBroadcast4(FfxInt32 value) { return FfxInt32x4(value, value, value, value); @@ -291,7 +324,7 @@ FfxInt32x4 ffxBroadcast4(FfxInt32 value) /// @returns /// A 2-dimensional unsigned integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxBroadcast2(FfxUInt32 value) { return FfxUInt32x2(value, value); @@ -304,7 +337,7 @@ FfxUInt32x2 ffxBroadcast2(FfxUInt32 value) /// @returns /// A 3-dimensional unsigned integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxBroadcast3(FfxUInt32 value) { return FfxUInt32x3(value, value, value); @@ -317,7 +350,7 @@ FfxUInt32x3 ffxBroadcast3(FfxUInt32 value) /// @returns /// A 4-dimensional unsigned integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxBroadcast4(FfxUInt32 value) { return FfxUInt32x4(value, value, value, value); @@ -342,12 +375,12 @@ FfxUInt32 bitfieldInsertMask(FfxUInt32 src, FfxUInt32 ins, FfxUInt32 bits) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32 ffxAsUInt32(FfxFloat32 x) { return asuint(x); @@ -355,12 +388,12 @@ FfxUInt32 ffxAsUInt32(FfxFloat32 x) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxAsUInt32(FfxFloat32x2 x) { return asuint(x); @@ -368,12 +401,12 @@ FfxUInt32x2 ffxAsUInt32(FfxFloat32x2 x) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxAsUInt32(FfxFloat32x3 x) { return asuint(x); @@ -381,12 +414,12 @@ FfxUInt32x3 ffxAsUInt32(FfxFloat32x3 x) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxAsUInt32(FfxFloat32x4 x) { return asuint(x); @@ -394,12 +427,12 @@ FfxUInt32x4 ffxAsUInt32(FfxFloat32x4 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxAsFloat(FfxUInt32 x) { return asfloat(x); @@ -407,12 +440,12 @@ FfxFloat32 ffxAsFloat(FfxUInt32 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxAsFloat(FfxUInt32x2 x) { return asfloat(x); @@ -420,12 +453,12 @@ FfxFloat32x2 ffxAsFloat(FfxUInt32x2 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxAsFloat(FfxUInt32x3 x) { return asfloat(x); @@ -433,12 +466,12 @@ FfxFloat32x3 ffxAsFloat(FfxUInt32x3 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxAsFloat(FfxUInt32x4 x) { return asfloat(x); @@ -458,7 +491,7 @@ FfxFloat32x4 ffxAsFloat(FfxUInt32x4 x) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) { return lerp(x, y, t); @@ -478,7 +511,7 @@ FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32 t) { return lerp(x, y, t); @@ -498,7 +531,7 @@ FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 t) { return lerp(x, y, t); @@ -518,7 +551,7 @@ FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32 t) { return lerp(x, y, t); @@ -538,7 +571,7 @@ FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 t) { return lerp(x, y, t); @@ -558,7 +591,7 @@ FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32 t) { return lerp(x, y, t); @@ -578,7 +611,7 @@ FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 t) { return lerp(x, y, t); @@ -591,7 +624,7 @@ FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 t) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxSaturate(FfxFloat32 x) { return saturate(x); @@ -604,7 +637,7 @@ FfxFloat32 ffxSaturate(FfxFloat32 x) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxSaturate(FfxFloat32x2 x) { return saturate(x); @@ -617,7 +650,7 @@ FfxFloat32x2 ffxSaturate(FfxFloat32x2 x) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxSaturate(FfxFloat32x3 x) { return saturate(x); @@ -630,7 +663,7 @@ FfxFloat32x3 ffxSaturate(FfxFloat32x3 x) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxSaturate(FfxFloat32x4 x) { return saturate(x); @@ -645,11 +678,11 @@ FfxFloat32x4 ffxSaturate(FfxFloat32x4 x) /// function. /// /// @param [in] x The value to compute the fractional part from. -/// +/// /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxFract(FfxFloat32 x) { return x - floor(x); @@ -668,7 +701,7 @@ FfxFloat32 ffxFract(FfxFloat32 x) /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxFract(FfxFloat32x2 x) { return x - floor(x); @@ -687,7 +720,7 @@ FfxFloat32x2 ffxFract(FfxFloat32x2 x) /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxFract(FfxFloat32x3 x) { return x - floor(x); @@ -698,7 +731,7 @@ FfxFloat32x3 ffxFract(FfxFloat32x3 x) /// This function calculates x - floor(x). Where floor is the intrinsic HLSL function. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. It is -/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic +/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic /// function. /// /// @param [in] x The value to compute the fractional part from. @@ -706,7 +739,7 @@ FfxFloat32x3 ffxFract(FfxFloat32x3 x) /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxFract(FfxFloat32x4 x) { return x - floor(x); @@ -715,15 +748,15 @@ FfxFloat32x4 ffxFract(FfxFloat32x4 x) /// Compute the maximum of three values. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. -/// +/// /// @param [in] x The first value to include in the max calculation. /// @param [in] y The second value to include in the max calcuation. /// @param [in] z The third value to include in the max calcuation. -/// +/// /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return max(x, max(y, z)); @@ -732,7 +765,7 @@ FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// Compute the maximum of three values. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. -/// +/// /// @param [in] x The first value to include in the max calculation. /// @param [in] y The second value to include in the max calcuation. /// @param [in] z The third value to include in the max calcuation. @@ -740,7 +773,7 @@ FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return max(x, max(y, z)); @@ -749,7 +782,7 @@ FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// Compute the maximum of three values. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. -/// +/// /// @param [in] x The first value to include in the max calculation. /// @param [in] y The second value to include in the max calcuation. /// @param [in] z The third value to include in the max calcuation. @@ -757,7 +790,7 @@ FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxMax3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return max(x, max(y, z)); @@ -774,7 +807,7 @@ FfxFloat32x3 ffxMax3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxMax3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return max(x, max(y, z)); @@ -791,7 +824,7 @@ FfxFloat32x4 ffxMax3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32 ffxMax3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) { return max(x, max(y, z)); @@ -808,7 +841,7 @@ FfxUInt32 ffxMax3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxMax3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) { return max(x, max(y, z)); @@ -825,7 +858,7 @@ FfxUInt32x2 ffxMax3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxMax3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) { return max(x, max(y, z)); @@ -842,7 +875,7 @@ FfxUInt32x3 ffxMax3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxMax3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) { return max(x, max(y, z)); @@ -859,7 +892,7 @@ FfxUInt32x4 ffxMax3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxMed3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return max(min(x, y), min(max(x, y), z)); @@ -876,7 +909,7 @@ FfxFloat32 ffxMed3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxMed3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return max(min(x, y), min(max(x, y), z)); @@ -893,7 +926,7 @@ FfxFloat32x2 ffxMed3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxMed3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return max(min(x, y), min(max(x, y), z)); @@ -910,7 +943,7 @@ FfxFloat32x3 ffxMed3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxMed3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return max(min(x, y), min(max(x, y), z)); @@ -990,7 +1023,7 @@ FfxInt32x4 ffxMed3(FfxInt32x4 x, FfxInt32x4 y, FfxInt32x4 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_I32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -999,7 +1032,7 @@ FfxInt32x4 ffxMed3(FfxInt32x4 x, FfxInt32x4 y, FfxInt32x4 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return min(x, min(y, z)); @@ -1007,7 +1040,7 @@ FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_I32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1016,7 +1049,7 @@ FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return min(x, min(y, z)); @@ -1024,7 +1057,7 @@ FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_I32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1033,7 +1066,7 @@ FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return min(x, min(y, z)); @@ -1041,7 +1074,7 @@ FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1050,7 +1083,7 @@ FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return min(x, min(y, z)); @@ -1058,7 +1091,7 @@ FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1067,7 +1100,7 @@ FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) { return min(x, min(y, z)); @@ -1075,7 +1108,7 @@ FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1084,7 +1117,7 @@ FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxMin3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) { return min(x, min(y, z)); @@ -1092,16 +1125,16 @@ FfxUInt32x2 ffxMin3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. -/// @param [in] y The second value to include in the min calcuation. -/// @param [in] z The third value to include in the min calcuation. +/// @param [in] y The second value to include in the min calculation. +/// @param [in] z The third value to include in the min calculation. /// /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) { return min(x, min(y, z)); @@ -1109,7 +1142,7 @@ FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1118,7 +1151,7 @@ FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxMin3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) { return min(x, min(y, z)); @@ -1130,11 +1163,18 @@ FfxUInt32 AShrSU1(FfxUInt32 a, FfxUInt32 b) return FfxUInt32(FfxInt32(a) >> FfxInt32(b)); } +FfxUInt32 ffxPackF32(FfxFloat32x2 v){ + FfxUInt32x2 p = FfxUInt32x2(f32tof16(FfxFloat32x2(v).x), f32tof16(FfxFloat32x2(v).y)); + return p.x | (p.y << 16); +} + +FfxFloat32x2 ffxUnpackF32(FfxUInt32 a){ + return f16tof32(FfxUInt32x2(a & 0xFFFF, a >> 16)); +} + //============================================================================================================================== // HLSL HALF //============================================================================================================================== -#if FFX_HALF - //============================================================================================================================== // Need to use manual unpack to get optimal execution (don't use packed types in buffers directly). // Unpack requires this pattern: https://gpuopen.com/first-steps-implementing-fp16/ @@ -1156,10 +1196,59 @@ FFX_MIN16_U4 ffxUint32x2ToUint16x4(FfxUInt32x2 x) { return FFX_MIN16_U4(ffxUint32ToUint16x2(x.x), ffxUint32ToUint16x2(x.y)); } + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32 ffxInvertSafe(FfxFloat32 v){ + FfxFloat32 s = sign(v); + FfxFloat32 s2 = s*s; + return s2/(v + s2 - 1.0); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x2 ffxInvertSafe(FfxFloat32x2 v){ + FfxFloat32x2 s = sign(v); + FfxFloat32x2 s2 = s*s; + return s2/(v + s2 - FfxFloat32x2(1.0, 1.0)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x3 ffxInvertSafe(FfxFloat32x3 v){ + FfxFloat32x3 s = sign(v); + FfxFloat32x3 s2 = s*s; + return s2/(v + s2 - FfxFloat32x3(1.0, 1.0, 1.0)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x4 ffxInvertSafe(FfxFloat32x4 v){ + FfxFloat32x4 s = sign(v); + FfxFloat32x4 s2 = s*s; + return s2/(v + s2 - FfxFloat32x4(1.0, 1.0, 1.0, 1.0)); +} + #define FFX_UINT32_TO_FLOAT16X2(x) ffxUint32ToFloat16x2(FfxUInt32(x)) +#if FFX_HALF + #define FFX_UINT32X2_TO_FLOAT16X4(x) ffxUint32x2ToFloat16x4(FfxUInt32x2(x)) #define FFX_UINT32_TO_UINT16X2(x) ffxUint32ToUint16x2(FfxUInt32(x)) #define FFX_UINT32X2_TO_UINT16X4(x) ffxUint32x2ToUint16x4(FfxUInt32x2(x)) + +FfxUInt32 ffxPackF16(FfxFloat16x2 v){ + FfxUInt32x2 p = FfxUInt32x2(f32tof16(FfxFloat32x2(v).x), f32tof16(FfxFloat32x2(v).y)); + return p.x | (p.y << 16); +} + +FfxFloat16x2 ffxUnpackF16(FfxUInt32 a){ + return FfxFloat16x2(f16tof32(FfxUInt32x2(a & 0xFFFF, a >> 16))); +} + //------------------------------------------------------------------------------------------------------------------------------ FfxUInt32 FFX_MIN16_F2ToUint32(FFX_MIN16_F2 x) { @@ -1182,7 +1271,7 @@ FfxUInt32x2 FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4 x) #define FFX_UINT16X2_TO_UINT32(x) FFX_MIN16_U2ToUint32(FFX_MIN16_U2(x)) #define FFX_UINT16X4_TO_UINT32X2(x) FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4(x)) -#if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#if (FFX_HLSL_SM >= 62) && !defined(FFX_NO_16_BIT_CAST) #define FFX_TO_UINT16(x) asuint16(x) #define FFX_TO_UINT16X2(x) asuint16(x) #define FFX_TO_UINT16X3(x) asuint16(x) @@ -1192,9 +1281,9 @@ FfxUInt32x2 FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4 x) #define FFX_TO_UINT16X2(a) FFX_MIN16_U2(FFX_TO_UINT16((a).x), FFX_TO_UINT16((a).y)) #define FFX_TO_UINT16X3(a) FFX_MIN16_U3(FFX_TO_UINT16((a).x), FFX_TO_UINT16((a).y), FFX_TO_UINT16((a).z)) #define FFX_TO_UINT16X4(a) FFX_MIN16_U4(FFX_TO_UINT16((a).x), FFX_TO_UINT16((a).y), FFX_TO_UINT16((a).z), FFX_TO_UINT16((a).w)) -#endif // #if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#endif // #if (FFX_HLSL_SM>=62) && !defined(FFX_NO_16_BIT_CAST) -#if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#if (FFX_HLSL_SM >= 62) && !defined(FFX_NO_16_BIT_CAST) #define FFX_TO_FLOAT16(x) asfloat16(x) #define FFX_TO_FLOAT16X2(x) asfloat16(x) #define FFX_TO_FLOAT16X3(x) asfloat16(x) @@ -1204,7 +1293,7 @@ FfxUInt32x2 FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4 x) #define FFX_TO_FLOAT16X2(a) FFX_MIN16_F2(FFX_TO_FLOAT16((a).x), FFX_TO_FLOAT16((a).y)) #define FFX_TO_FLOAT16X3(a) FFX_MIN16_F3(FFX_TO_FLOAT16((a).x), FFX_TO_FLOAT16((a).y), FFX_TO_FLOAT16((a).z)) #define FFX_TO_FLOAT16X4(a) FFX_MIN16_F4(FFX_TO_FLOAT16((a).x), FFX_TO_FLOAT16((a).y), FFX_TO_FLOAT16((a).z), FFX_TO_FLOAT16((a).w)) -#endif // #if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#endif // #if (FFX_HLSL_SM>=62) && !defined(FFX_NO_16_BIT_CAST) //============================================================================================================================== #define FFX_BROADCAST_FLOAT16(a) FFX_MIN16_F(a) @@ -1480,6 +1569,66 @@ FfxUInt32x4 AWaveXorU1(FfxUInt32x4 v, FfxUInt32 x) { return WaveReadLaneAt(v, WaveGetLaneIndex() ^ x); } +FfxBoolean AWaveIsFirstLane() +{ + return WaveIsFirstLane(); +} +FfxUInt32 AWaveLaneIndex() +{ + return WaveGetLaneIndex(); +} +FfxBoolean AWaveReadAtLaneIndexB1(FfxBoolean v, FfxUInt32 x) +{ + return WaveReadLaneAt(v, x); +} +FfxUInt32 AWavePrefixCountBits(FfxBoolean v) +{ + return WavePrefixCountBits(v); +} +FfxUInt32 AWaveActiveCountBits(FfxBoolean v) +{ + return WaveActiveCountBits(v); +} +FfxUInt32 AWaveReadLaneFirstU1(FfxUInt32 v) +{ + return WaveReadLaneFirst(v); +} +FfxUInt32 WaveOr(FfxUInt32 a) +{ + return WaveActiveBitOr(a); +} +FfxFloat32 WaveMin(FfxFloat32 a) +{ + return WaveActiveMin(a); +} +FfxFloat32 WaveMax(FfxFloat32 a) +{ + return WaveActiveMax(a); +} +FfxUInt32 WaveLaneCount() +{ + return WaveGetLaneCount(); +} +FfxBoolean WaveAllTrue(FfxBoolean v) +{ + return WaveActiveAllTrue(v); +} +FfxFloat32 QuadReadX(FfxFloat32 v) +{ + return QuadReadAcrossX(v); +} +FfxFloat32x2 QuadReadX(FfxFloat32x2 v) +{ + return QuadReadAcrossX(v); +} +FfxFloat32 QuadReadY(FfxFloat32 v) +{ + return QuadReadAcrossY(v); +} +FfxFloat32x2 QuadReadY(FfxFloat32x2 v) +{ + return QuadReadAcrossY(v); +} #if FFX_HALF FfxFloat16x2 ffxWaveXorFloat16x2(FfxFloat16x2 v, FfxUInt32 x) @@ -1496,7 +1645,7 @@ FfxUInt16x2 ffxWaveXorUint16x2(FfxUInt16x2 v, FfxUInt32 x) } FfxUInt16x4 ffxWaveXorUint16x4(FfxUInt16x4 v, FfxUInt32 x) { - return AW4_FFX_UINT32(WaveReadLaneAt(FFX_UINT32_AW4(v), WaveGetLaneIndex() ^ x)); + return FFX_UINT32X2_TO_UINT16X4(WaveReadLaneAt(FFX_UINT16X4_TO_UINT32X2(v), WaveGetLaneIndex() ^ x)); } #endif // FFX_HALF #endif // #if defined(FFX_WAVE) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta new file mode 100644 index 0000000..ff56bee --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 299f67e8b7e1d1a48a577bf8b328ac92 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_portability.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h similarity index 94% rename from Assets/Resources/FSR2/shaders/ffx_core_portability.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h index 45be059..84a62d6 100644 --- a/Assets/Resources/FSR2/shaders/ffx_core_portability.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,6 +19,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + FfxFloat32x3 opAAddOneF3(FfxFloat32x3 d, FfxFloat32x3 a, FfxFloat32 b) { d = a + ffxBroadcast3(b); diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta new file mode 100644 index 0000000..25ff64b --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 8d2ace0bd52e0e1438e08ddaccd3ba24 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h similarity index 90% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h index 7bd5892..c425de7 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_ACCUMULATE_H -#define FFX_FSR2_ACCUMULATE_H + +#ifndef FFX_FSR3UPSCALER_ACCUMULATE_H +#define FFX_FSR3UPSCALER_ACCUMULATE_H FfxFloat32 GetPxHrVelocity(FfxFloat32x2 fMotionVector) { @@ -36,9 +37,9 @@ FFX_MIN16_F GetPxHrVelocity(FFX_MIN16_F2 fMotionVector) void Accumulate(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT FfxFloat32x3 fHistoryColor, FfxFloat32x3 fAccumulation, FFX_PARAMETER_IN FfxFloat32x4 fUpsampledColorAndWeight) { // Aviod invalid values when accumulation and upsampled weight is 0 - fAccumulation = ffxMax(FSR2_EPSILON.xxx, fAccumulation + fUpsampledColorAndWeight.www); + fAccumulation = ffxMax(FSR3UPSCALER_EPSILON.xxx, fAccumulation + fUpsampledColorAndWeight.www); -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT //YCoCg -> RGB -> Tonemap -> YCoCg (Use RGB tonemapper to avoid color desaturation) fUpsampledColorAndWeight.xyz = RGBToYCoCg(Tonemap(YCoCgToRGB(fUpsampledColorAndWeight.xyz))); fHistoryColor = RGBToYCoCg(Tonemap(YCoCgToRGB(fHistoryColor))); @@ -49,7 +50,7 @@ void Accumulate(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT F fHistoryColor = YCoCgToRGB(fHistoryColor); -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT fHistoryColor = InverseTonemap(fHistoryColor); #endif } @@ -63,20 +64,13 @@ void RectifyHistory( FfxFloat32 fTemporalReactiveFactor, FfxFloat32 fLumaInstabilityFactor) { - FfxFloat32 fScaleFactorInfluence = ffxMin(20.0f, ffxPow(FfxFloat32(1.0f / length(DownscaleFactor().x * DownscaleFactor().y)), 3.0f)); - const FfxFloat32 fVecolityFactor = ffxSaturate(params.fHrVelocity / 20.0f); const FfxFloat32 fBoxScaleT = ffxMax(params.fDepthClipFactor, ffxMax(params.fAccumulationMask, fVecolityFactor)); - FfxFloat32 fBoxScale = ffxLerp(fScaleFactorInfluence, 1.0f, fBoxScaleT); - - FfxFloat32x3 fScaledBoxVec = clippingBox.boxVec * fBoxScale; - FfxFloat32x3 boxMin = clippingBox.boxCenter - fScaledBoxVec; - FfxFloat32x3 boxMax = clippingBox.boxCenter + fScaledBoxVec; - FfxFloat32x3 boxCenter = clippingBox.boxCenter; - FfxFloat32 boxVecSize = length(clippingBox.boxVec); + const FfxFloat32 fBoxScale = ffxLerp(3.0f, 1.0f, fBoxScaleT); - boxMin = ffxMax(clippingBox.aabbMin, boxMin); - boxMax = ffxMin(clippingBox.aabbMax, boxMax); + const FfxFloat32x3 fScaledBoxVec = clippingBox.boxVec * fBoxScale; + const FfxFloat32x3 boxMin = clippingBox.boxCenter - fScaledBoxVec; + const FfxFloat32x3 boxMax = clippingBox.boxCenter + fScaledBoxVec; if (any(FFX_GREATER_THAN(boxMin, fHistoryColor)) || any(FFX_GREATER_THAN(fHistoryColor, boxMax))) { @@ -143,7 +137,7 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param FfxFloat32 fCurrentFrameLuma = clippingBox.boxCenter.x; -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT fCurrentFrameLuma = fCurrentFrameLuma / (1.0f + ffxMax(0.0f, fCurrentFrameLuma)); #endif @@ -157,8 +151,7 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param FfxFloat32 fMin = abs(fDiffs0); - if (fMin >= fUnormThreshold) - { + if (fMin >= fUnormThreshold) { for (int i = N_MINUS_2; i <= N_MINUS_4; i++) { FfxFloat32 fDiffs1 = (fCurrentFrameLuma - fCurrentFrameLumaHistory[i]); @@ -170,7 +163,7 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param } } - const FfxFloat32 fBoxSize = clippingBox.boxVec.x; + const FfxFloat32 fBoxSize = clippingBox.boxVec.x; const FfxFloat32 fBoxSizeFactor = ffxPow(ffxSaturate(fBoxSize / 0.1f), 6.0f); fLumaInstability = FfxFloat32(fMin != abs(fDiffs0)) * fBoxSizeFactor; @@ -202,7 +195,7 @@ FfxFloat32 ComputeTemporalReactiveFactor(const AccumulationPassCommonParams para fNewFactor = params.bIsNewSample ? 1.0f : fNewFactor; if (ffxSaturate(params.fHrVelocity * 10.0f) >= 1.0f) { - fNewFactor = ffxMax(FSR2_EPSILON, fNewFactor) * -1.0f; + fNewFactor = ffxMax(FSR3UPSCALER_EPSILON, fNewFactor) * -1.0f; } return fNewFactor; @@ -286,10 +279,10 @@ void Accumulate(FfxInt32x2 iPxHrPos) StoreInternalColorAndWeight(iPxHrPos, FfxFloat32x4(fHistoryColor, fTemporalReactiveFactor)); // Output final color when RCAS is disabled -#if FFX_FSR2_OPTION_APPLY_SHARPENING == 0 +#if FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING == 0 WriteUpscaledOutput(iPxHrPos, fHistoryColor); #endif StoreNewLocks(iPxHrPos, 0); } -#endif // FFX_FSR2_ACCUMULATE_H +#endif // FFX_FSR3UPSCALER_ACCUMULATE_H diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta new file mode 100644 index 0000000..08c98e7 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 3fc2f7a2c8c31324a949e1761bf599cc +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h new file mode 100644 index 0000000..c70bc1d --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h @@ -0,0 +1,928 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#include "ffx_fsr3upscaler_resources.h" + +#if defined(FFX_GPU) +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler +#include "ffx_core.h" +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler +#endif // #if defined(FFX_GPU) + +#if defined(FFX_GPU) +#ifndef FFX_PREFER_WAVE64 +#define FFX_PREFER_WAVE64 +#endif // FFX_PREFER_WAVE64 + +#if defined(FFX_GPU) +#pragma warning(disable: 3205) // conversion from larger type to smaller +#endif // #if defined(FFX_GPU) + +#define DECLARE_SRV_REGISTER(regIndex) t##regIndex +#define DECLARE_UAV_REGISTER(regIndex) u##regIndex +#define DECLARE_CB_REGISTER(regIndex) b##regIndex +#define FFX_FSR3UPSCALER_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) +#define FFX_FSR3UPSCALER_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) +#define FFX_FSR3UPSCALER_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) + +#if defined(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + cbuffer cbFSR3Upscaler : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + { + FfxInt32x2 iRenderSize; + FfxInt32x2 iMaxRenderSize; + FfxInt32x2 iDisplaySize; + FfxInt32x2 iInputColorResourceDimensions; + FfxInt32x2 iLumaMipDimensions; + FfxInt32 iLumaMipLevelToUse; + FfxInt32 iFrameIndex; + + FfxFloat32x4 fDeviceToViewDepth; + FfxFloat32x2 fJitter; + FfxFloat32x2 fMotionVectorScale; + FfxFloat32x2 fDownscaleFactor; + FfxFloat32x2 fMotionVectorJitterCancellation; + FfxFloat32 fPreExposure; + FfxFloat32 fPreviousFramePreExposure; + FfxFloat32 fTanHalfFOV; + FfxFloat32 fJitterSequenceLength; + FfxFloat32 fDeltaTime; + FfxFloat32 fDynamicResChangeFactor; + FfxFloat32 fViewSpaceToMetersFactor; + + FfxInt32 iDummy; + }; + +#define FFX_FSR3UPSCALER_CONSTANT_BUFFER_1_SIZE (sizeof(cbFSR3Upscaler) / 4) // Number of 32-bit values. This must be kept in sync with the cbFSR3Upscaler size. + +/* Define getter functions in the order they are defined in the CB! */ +FfxInt32x2 RenderSize() +{ + return iRenderSize; +} + +FfxInt32x2 MaxRenderSize() +{ + return iMaxRenderSize; +} + +FfxInt32x2 DisplaySize() +{ + return iDisplaySize; +} + +FfxInt32x2 InputColorResourceDimensions() +{ + return iInputColorResourceDimensions; +} + +FfxInt32x2 LumaMipDimensions() +{ + return iLumaMipDimensions; +} + +FfxInt32 LumaMipLevelToUse() +{ + return iLumaMipLevelToUse; +} + +FfxInt32 FrameIndex() +{ + return iFrameIndex; +} + +FfxFloat32x2 Jitter() +{ + return fJitter; +} + +FfxFloat32x4 DeviceToViewSpaceTransformFactors() +{ + return fDeviceToViewDepth; +} + +FfxFloat32x2 MotionVectorScale() +{ + return fMotionVectorScale; +} + +FfxFloat32x2 DownscaleFactor() +{ + return fDownscaleFactor; +} + +FfxFloat32x2 MotionVectorJitterCancellation() +{ + return fMotionVectorJitterCancellation; +} + +FfxFloat32 PreExposure() +{ + return fPreExposure; +} + +FfxFloat32 PreviousFramePreExposure() +{ + return fPreviousFramePreExposure; +} + +FfxFloat32 TanHalfFoV() +{ + return fTanHalfFOV; +} + +FfxFloat32 JitterSequenceLength() +{ + return fJitterSequenceLength; +} + +FfxFloat32 DeltaTime() +{ + return fDeltaTime; +} + +FfxFloat32 DynamicResChangeFactor() +{ + return fDynamicResChangeFactor; +} + +FfxFloat32 ViewSpaceToMetersFactor() +{ + return fViewSpaceToMetersFactor; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + +#define FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(p) FFX_FSR3UPSCALER_ROOTSIG_STR(p) +#define FFX_FSR3UPSCALER_ROOTSIG_STR(p) #p +#define FFX_FSR3UPSCALER_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "RootConstants(num32BitConstants=" FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_CONSTANT_BUFFER_1_SIZE) ", b0), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ + "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] + +#define FFX_FSR3UPSCALER_CONSTANT_BUFFER_2_SIZE 6 // Number of 32-bit values. This must be kept in sync with max( cbRCAS , cbSPD) size. + +#define FFX_FSR3UPSCALER_CB2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "RootConstants(num32BitConstants=" FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_CONSTANT_BUFFER_1_SIZE) ", b0), " \ + "RootConstants(num32BitConstants=" FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_CONSTANT_BUFFER_2_SIZE) ", b1), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ + "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] +#if defined(FFX_FSR3UPSCALER_EMBED_ROOTSIG) +#define FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT FFX_FSR3UPSCALER_ROOTSIG +#define FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT FFX_FSR3UPSCALER_CB2_ROOTSIG +#else +#define FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +#define FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT +#endif // #if FFX_FSR3UPSCALER_EMBED_ROOTSIG + +#if defined(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) +cbuffer cbGenerateReactive : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) +{ + FfxFloat32 fTcThreshold; // 0.1 is a good starting value, lower will result in more TC pixels + FfxFloat32 fTcScale; + FfxFloat32 fReactiveScale; + FfxFloat32 fReactiveMax; +}; + +FfxFloat32 TcThreshold() +{ + return fTcThreshold; +} + +FfxFloat32 TcScale() +{ + return fTcScale; +} + +FfxFloat32 ReactiveScale() +{ + return fReactiveScale; +} + +FfxFloat32 ReactiveMax() +{ + return fReactiveMax; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) + +#if defined(FSR3UPSCALER_BIND_CB_RCAS) +cbuffer cbRCAS : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_RCAS) +{ + FfxUInt32x4 rcasConfig; +}; + +FfxUInt32x4 RCASConfig() +{ + return rcasConfig; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_RCAS) + + +#if defined(FSR3UPSCALER_BIND_CB_REACTIVE) +cbuffer cbGenerateReactive : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_REACTIVE) +{ + FfxFloat32 gen_reactive_scale; + FfxFloat32 gen_reactive_threshold; + FfxFloat32 gen_reactive_binaryValue; + FfxUInt32 gen_reactive_flags; +}; + +FfxFloat32 GenReactiveScale() +{ + return gen_reactive_scale; +} + +FfxFloat32 GenReactiveThreshold() +{ + return gen_reactive_threshold; +} + +FfxFloat32 GenReactiveBinaryValue() +{ + return gen_reactive_binaryValue; +} + +FfxUInt32 GenReactiveFlags() +{ + return gen_reactive_flags; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_REACTIVE) + +#if defined(FSR3UPSCALER_BIND_CB_SPD) +cbuffer cbSPD : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_SPD) { + + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + FfxUInt32x2 renderSize; +}; + +FfxUInt32 MipCount() +{ + return mips; +} + +FfxUInt32 NumWorkGroups() +{ + return numWorkGroups; +} + +FfxUInt32x2 WorkGroupOffset() +{ + return workGroupOffset; +} + +FfxUInt32x2 SPD_RenderSize() +{ + return renderSize; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_SPD) + +// Declare and sample camera buffers as regular textures, unless overridden +#if !defined(UNITY_FSR3_TEX2D) +#define UNITY_FSR3_TEX2D(type) Texture2D +#endif +#if !defined(UNITY_FSR3_RWTEX2D) +#define UNITY_FSR3_RWTEX2D(type) RWTexture2D +#endif +#if !defined(UNITY_FSR3_POS) +#define UNITY_FSR3_POS(pxPos) (pxPos) +#endif +#if !defined(UNITY_FSR3_UV) +#define UNITY_FSR3_UV(uv) (uv) +#endif + +SamplerState s_PointClamp : register(s0); +SamplerState s_LinearClamp : register(s1); + + // SRVs + #if defined FSR3UPSCALER_BIND_SRV_INPUT_COLOR + UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY + UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS + UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_DEPTH + UNITY_FSR3_TEX2D(FfxFloat32) r_input_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE + Texture2D r_input_exposure : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE + Texture2D r_auto_exposure : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_SRV_REACTIVE_MASK + Texture2D r_reactive_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK); + #endif + #if defined FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK + Texture2D r_transparency_and_composition_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK); + #endif + #if defined FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH + Texture2D r_reconstructed_previous_nearest_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS + Texture2D r_dilated_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS + Texture2D r_previous_dilated_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_DILATED_DEPTH + Texture2D r_dilated_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_DILATED_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED + Texture2D r_internal_upscaled_color : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LOCK_STATUS + Texture2D r_lock_status : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LOCK_STATUS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA + Texture2D r_lock_input_luma : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA); + #endif + #if defined FSR3UPSCALER_BIND_SRV_NEW_LOCKS + Texture2D r_new_locks : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_NEW_LOCKS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR + Texture2D r_prepared_input_color : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LUMA_HISTORY + Texture2D r_luma_history : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LUMA_HISTORY); + #endif + #if defined FSR3UPSCALER_BIND_SRV_RCAS_INPUT + Texture2D r_rcas_input : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_RCAS_INPUT); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LANCZOS_LUT + Texture2D r_lanczos_lut : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LANCZOS_LUT); + #endif + #if defined FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS + Texture2D r_imgMips : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT + Texture2D r_upsample_maximum_bias_lut : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT); + #endif + #if defined FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS + Texture2D r_dilated_reactive_masks : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS); + #endif + + #if defined FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR + Texture2D r_input_prev_color_pre_alpha : FFX_FSR3UPSCALER_DECLARE_SRV(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR + Texture2D r_input_prev_color_post_alpha : FFX_FSR3UPSCALER_DECLARE_SRV(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); + #endif + + // UAV declarations + #if defined FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH + RWTexture2D rw_reconstructed_previous_nearest_depth : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS + RWTexture2D rw_dilated_motion_vectors : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_DILATED_DEPTH + RWTexture2D rw_dilated_depth : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_DILATED_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED + RWTexture2D rw_internal_upscaled_color : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED); + #endif + #if defined FSR3UPSCALER_BIND_UAV_LOCK_STATUS + RWTexture2D rw_lock_status : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_LOCK_STATUS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA + RWTexture2D rw_lock_input_luma : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA); + #endif + #if defined FSR3UPSCALER_BIND_UAV_NEW_LOCKS + RWTexture2D rw_new_locks : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_NEW_LOCKS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR + RWTexture2D rw_prepared_input_color : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_UAV_LUMA_HISTORY + RWTexture2D rw_luma_history : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_LUMA_HISTORY); + #endif + #if defined FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT + UNITY_FSR3_RWTEX2D(FfxFloat32x4) rw_upscaled_output : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT); + #endif + #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE + globallycoherent RWTexture2D rw_img_mip_shading_change : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + globallycoherent RWTexture2D rw_img_mip_5 : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5); + #endif + #if defined FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS + RWTexture2D rw_dilated_reactive_masks : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE + RWTexture2D rw_exposure : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE + RWTexture2D rw_auto_exposure : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC + globallycoherent RWTexture2D rw_spd_global_atomic : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC); + #endif + + #if defined FSR3UPSCALER_BIND_UAV_AUTOREACTIVE + RWTexture2D rw_output_autoreactive : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_AUTOREACTIVE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION + RWTexture2D rw_output_autocomposition : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION); + #endif + #if defined FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR + RWTexture2D rw_output_prev_color_pre_alpha : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR + RWTexture2D rw_output_prev_color_post_alpha : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR); + #endif + +#if defined(FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS) +FfxFloat32 LoadMipLuma(FfxUInt32x2 iPxPos, FfxUInt32 mipLevel) +{ + return r_imgMips.mips[mipLevel][iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS) +FfxFloat32 SampleMipLuma(FfxFloat32x2 fUV, FfxUInt32 mipLevel) +{ + return r_imgMips.SampleLevel(s_LinearClamp, fUV, mipLevel); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) +FfxFloat32 LoadInputDepth(FfxUInt32x2 iPxPos) +{ + return r_input_depth[UNITY_FSR3_POS(iPxPos)]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) +FfxFloat32 SampleInputDepth(FfxFloat32x2 fUV) +{ + return r_input_depth.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK) +FfxFloat32 LoadReactiveMask(FfxUInt32x2 iPxPos) +{ + return r_reactive_mask[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) +FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) +{ + return r_transparency_and_composition_mask[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_COLOR) +FfxFloat32x3 LoadInputColor(FfxUInt32x2 iPxPos) +{ + return r_input_color_jittered[UNITY_FSR3_POS(iPxPos)].rgb; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_COLOR) +FfxFloat32x3 SampleInputColor(FfxFloat32x2 fUV) +{ + return r_input_color_jittered.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).rgb; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR) +FfxFloat32x3 LoadPreparedInputColor(FfxUInt32x2 iPxPos) +{ + return r_prepared_input_color[iPxPos].xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS) +FfxFloat32x2 LoadInputMotionVector(FfxUInt32x2 iPxDilatedMotionVectorPos) +{ + FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[UNITY_FSR3_POS(iPxDilatedMotionVectorPos)].xy; + + FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); + +#if FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS + fUvMotionVector -= MotionVectorJitterCancellation(); +#endif + + return fUvMotionVector; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED) +FfxFloat32x4 LoadHistory(FfxUInt32x2 iPxHistory) +{ + return r_internal_upscaled_color[iPxHistory]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LUMA_HISTORY) +void StoreLumaHistory(FfxUInt32x2 iPxPos, FfxFloat32x4 fLumaHistory) +{ + rw_luma_history[iPxPos] = fLumaHistory; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LUMA_HISTORY) +FfxFloat32x4 SampleLumaHistory(FfxFloat32x2 fUV) +{ + return r_luma_history.SampleLevel(s_LinearClamp, fUV, 0); +} +#endif + +FfxFloat32x4 LoadRCAS_Input(FfxInt32x2 iPxPos) +{ +#if defined(FSR3UPSCALER_BIND_SRV_RCAS_INPUT) + return r_rcas_input[iPxPos]; +#else + return 0.0; +#endif +} + +#if defined(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED) +void StoreReprojectedHistory(FfxUInt32x2 iPxHistory, FfxFloat32x4 fHistory) +{ + rw_internal_upscaled_color[iPxHistory] = fHistory; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED) +void StoreInternalColorAndWeight(FfxUInt32x2 iPxPos, FfxFloat32x4 fColorAndWeight) +{ + rw_internal_upscaled_color[iPxPos] = fColorAndWeight; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT) +void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) +{ + rw_upscaled_output[UNITY_FSR3_POS(iPxPos)] = FfxFloat32x4(fColor, 1.f); +} +#endif + +//LOCK_LIFETIME_REMAINING == 0 +//Should make LockInitialLifetime() return a const 1.0f later +#if defined(FSR3UPSCALER_BIND_SRV_LOCK_STATUS) +FfxFloat32x2 LoadLockStatus(FfxUInt32x2 iPxPos) +{ + return r_lock_status[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LOCK_STATUS) +void StoreLockStatus(FfxUInt32x2 iPxPos, FfxFloat32x2 fLockStatus) +{ + rw_lock_status[iPxPos] = fLockStatus; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA) +FfxFloat32 LoadLockInputLuma(FfxUInt32x2 iPxPos) +{ + return r_lock_input_luma[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA) +void StoreLockInputLuma(FfxUInt32x2 iPxPos, FfxFloat32 fLuma) +{ + rw_lock_input_luma[iPxPos] = fLuma; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_NEW_LOCKS) +FfxFloat32 LoadNewLocks(FfxUInt32x2 iPxPos) +{ + return r_new_locks[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_NEW_LOCKS) +FfxFloat32 LoadRwNewLocks(FfxUInt32x2 iPxPos) +{ + return rw_new_locks[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_NEW_LOCKS) +void StoreNewLocks(FfxUInt32x2 iPxPos, FfxFloat32 newLock) +{ + rw_new_locks[iPxPos] = newLock; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR) +void StorePreparedInputColor(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 fTonemapped) +{ + rw_prepared_input_color[iPxPos] = fTonemapped; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR) +FfxFloat32 SampleDepthClip(FfxFloat32x2 fUV) +{ + return r_prepared_input_color.SampleLevel(s_LinearClamp, fUV, 0).w; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LOCK_STATUS) +FfxFloat32x2 SampleLockStatus(FfxFloat32x2 fUV) +{ + FfxFloat32x2 fLockStatus = r_lock_status.SampleLevel(s_LinearClamp, fUV, 0); + return fLockStatus; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +FfxFloat32 LoadReconstructedPrevDepth(FfxUInt32x2 iPxPos) +{ + return asfloat(r_reconstructed_previous_nearest_depth[iPxPos]); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +void StoreReconstructedDepth(FfxUInt32x2 iPxSample, FfxFloat32 fDepth) +{ + FfxUInt32 uDepth = asuint(fDepth); + + #if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + InterlockedMax(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); + #else + InterlockedMin(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); // min for standard, max for inverted depth + #endif +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +void SetReconstructedDepth(FfxUInt32x2 iPxSample, const FfxUInt32 uValue) +{ + rw_reconstructed_previous_nearest_depth[iPxSample] = uValue; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_DEPTH) +void StoreDilatedDepth(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 fDepth) +{ + rw_dilated_depth[iPxPos] = fDepth; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS) +void StoreDilatedMotionVector(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fMotionVector) +{ + rw_dilated_motion_vectors[iPxPos] = fMotionVector; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS) +FfxFloat32x2 LoadDilatedMotionVector(FfxUInt32x2 iPxInput) +{ + return r_dilated_motion_vectors[iPxInput].xy; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS) +FfxFloat32x2 LoadPreviousDilatedMotionVector(FfxUInt32x2 iPxInput) +{ + return r_previous_dilated_motion_vectors[iPxInput].xy; +} + +FfxFloat32x2 SamplePreviousDilatedMotionVector(FfxFloat32x2 uv) +{ + return r_previous_dilated_motion_vectors.SampleLevel(s_LinearClamp, uv, 0).xy; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_DEPTH) +FfxFloat32 LoadDilatedDepth(FfxUInt32x2 iPxInput) +{ + return r_dilated_depth[iPxInput]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE) +FfxFloat32 Exposure() +{ + FfxFloat32 exposure = r_input_exposure[FfxUInt32x2(0, 0)].x; + + if (exposure == 0.0f) { + exposure = 1.0f; + } + + return exposure; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE) +FfxFloat32 AutoExposure() +{ + FfxFloat32 exposure = r_auto_exposure[FfxUInt32x2(0, 0)].x; + + if (exposure == 0.0f) { + exposure = 1.0f; + } + + return exposure; +} +#endif + +FfxFloat32 SampleLanczos2Weight(FfxFloat32 x) +{ +#if defined(FSR3UPSCALER_BIND_SRV_LANCZOS_LUT) + return r_lanczos_lut.SampleLevel(s_LinearClamp, FfxFloat32x2(x / 2, 0.5f), 0); +#else + return 0.f; +#endif +} + +#if defined(FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT) +FfxFloat32 SampleUpsampleMaximumBias(FfxFloat32x2 uv) +{ + // Stored as a SNORM, so make sure to multiply by 2 to retrieve the actual expected range. + return FfxFloat32(2.0) * r_upsample_maximum_bias_lut.SampleLevel(s_LinearClamp, abs(uv) * 2.0, 0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS) +FfxFloat32x2 SampleDilatedReactiveMasks(FfxFloat32x2 fUV) +{ + return r_dilated_reactive_masks.SampleLevel(s_LinearClamp, fUV, 0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS) +FfxFloat32x2 LoadDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos) +{ + return r_dilated_reactive_masks[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS) +void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fDilatedReactiveMasks) +{ + rw_dilated_reactive_masks[iPxPos] = fDilatedReactiveMasks; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY) +FfxFloat32x3 LoadOpaqueOnly(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return r_input_opaque_only[UNITY_FSR3_POS(iPxPos)].xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR) +FfxFloat32x3 LoadPrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return r_input_prev_color_pre_alpha[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR) +FfxFloat32x3 LoadPrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return r_input_prev_color_post_alpha[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_AUTOREACTIVE) +#if defined(FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION) +void StoreAutoReactive(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F2 fReactive) +{ + rw_output_autoreactive[iPxPos] = fReactive.x; + + rw_output_autocomposition[iPxPos] = fReactive.y; +} +#endif +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR) +void StorePrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) +{ + rw_output_prev_color_pre_alpha[iPxPos] = color; + +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR) +void StorePrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) +{ + rw_output_prev_color_post_alpha[iPxPos] = color; +} +#endif + +FfxFloat32x2 SPD_LoadExposureBuffer() +{ +#if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE + return rw_auto_exposure[FfxInt32x2(0, 0)]; +#else + return FfxFloat32x2(0.f, 0.f); +#endif // #if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE +} + +void SPD_SetExposureBuffer(FfxFloat32x2 value) +{ +#if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE + rw_auto_exposure[FfxInt32x2(0, 0)] = value; +#endif // #if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE +} + +FfxFloat32x4 SPD_LoadMipmap5(FfxInt32x2 iPxPos) +{ +#if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + return FfxFloat32x4(rw_img_mip_5[iPxPos], 0, 0, 0); +#else + return FfxFloat32x4(0.f, 0.f, 0.f, 0.f); +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 +} + +void SPD_SetMipmap(FfxInt32x2 iPxPos, FfxUInt32 slice, FfxFloat32 value) +{ + switch (slice) + { + case FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL: +#if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE + rw_img_mip_shading_change[iPxPos] = value; +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE + break; + case 5: +#if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + rw_img_mip_5[iPxPos] = value; +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + break; + default: + + // avoid flattened side effect +#if defined(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE) + rw_img_mip_shading_change[iPxPos] = rw_img_mip_shading_change[iPxPos]; +#elif defined(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5) + rw_img_mip_5[iPxPos] = rw_img_mip_5[iPxPos]; +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + break; + } +} + +void SPD_IncreaseAtomicCounter(inout FfxUInt32 spdCounter) +{ +#if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC + InterlockedAdd(rw_spd_global_atomic[FfxInt32x2(0, 0)], 1, spdCounter); +#endif // #if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC +} + +void SPD_ResetAtomicCounter() +{ +#if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC + rw_spd_global_atomic[FfxInt32x2(0, 0)] = 0; +#endif // #if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC +} + +#endif // #if defined(FFX_GPU) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta new file mode 100644 index 0000000..e060d2c --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: ba849fdeb042e7f458c81408414db834 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h similarity index 91% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h index 0c72aa8..1f78a29 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#if !defined(FFX_FSR2_COMMON_H) -#define FFX_FSR2_COMMON_H + +#if !defined(FFX_FSR3UPSCALER_COMMON_H) +#define FFX_FSR3UPSCALER_COMMON_H #if defined(FFX_CPU) || defined(FFX_GPU) //Locks @@ -29,12 +30,12 @@ #endif // #if defined(FFX_CPU) || defined(FFX_GPU) #if defined(FFX_GPU) -FFX_STATIC const FfxFloat32 FSR2_FP16_MIN = 6.10e-05f; -FFX_STATIC const FfxFloat32 FSR2_FP16_MAX = 65504.0f; -FFX_STATIC const FfxFloat32 FSR2_EPSILON = 1e-03f; -FFX_STATIC const FfxFloat32 FSR2_TONEMAP_EPSILON = 1.0f / FSR2_FP16_MAX; -FFX_STATIC const FfxFloat32 FSR2_FLT_MAX = 3.402823466e+38f; -FFX_STATIC const FfxFloat32 FSR2_FLT_MIN = 1.175494351e-38f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP16_MIN = 6.10e-05f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP16_MAX = 65504.0f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_EPSILON = 1e-03f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_TONEMAP_EPSILON = 1.0f / FSR3UPSCALER_FP16_MAX; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FLT_MAX = 3.402823466e+38f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FLT_MIN = 1.175494351e-38f; // treat vector truncation warnings as errors #pragma warning(error: 3206) @@ -128,8 +129,8 @@ void RectificationBoxReset(FFX_PARAMETER_INOUT RectificationBox rectificationBox rectificationBox.boxCenter = FfxFloat32x3(0, 0, 0); rectificationBox.boxVec = FfxFloat32x3(0, 0, 0); - rectificationBox.aabbMin = FfxFloat32x3(FSR2_FLT_MAX, FSR2_FLT_MAX, FSR2_FLT_MAX); - rectificationBox.aabbMax = -FfxFloat32x3(FSR2_FLT_MAX, FSR2_FLT_MAX, FSR2_FLT_MAX); + rectificationBox.aabbMin = FfxFloat32x3(FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX); + rectificationBox.aabbMax = -FfxFloat32x3(FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX); } #if FFX_HALF void RectificationBoxReset(FFX_PARAMETER_INOUT RectificationBoxMin16 rectificationBox) @@ -138,8 +139,8 @@ void RectificationBoxReset(FFX_PARAMETER_INOUT RectificationBoxMin16 rectificati rectificationBox.boxCenter = FFX_MIN16_F3(0, 0, 0); rectificationBox.boxVec = FFX_MIN16_F3(0, 0, 0); - rectificationBox.aabbMin = FFX_MIN16_F3(FSR2_FP16_MAX, FSR2_FP16_MAX, FSR2_FP16_MAX); - rectificationBox.aabbMax = -FFX_MIN16_F3(FSR2_FP16_MAX, FSR2_FP16_MAX, FSR2_FP16_MAX); + rectificationBox.aabbMin = FFX_MIN16_F3(FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX); + rectificationBox.aabbMax = -FFX_MIN16_F3(FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX); } #endif @@ -198,7 +199,7 @@ void RectificationBoxAddSample(FfxBoolean bInitialSample, FFX_PARAMETER_INOUT Re void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBox rectificationBox) { - rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FfxFloat32(FSR2_EPSILON) ? rectificationBox.fBoxCenterWeight : FfxFloat32(1.f)); + rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FfxFloat32(FSR3UPSCALER_EPSILON) ? rectificationBox.fBoxCenterWeight : FfxFloat32(1.f)); rectificationBox.boxCenter /= rectificationBox.fBoxCenterWeight; rectificationBox.boxVec /= rectificationBox.fBoxCenterWeight; FfxFloat32x3 stdDev = sqrt(abs(rectificationBox.boxVec - rectificationBox.boxCenter * rectificationBox.boxCenter)); @@ -207,7 +208,7 @@ void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBox #if FFX_HALF void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBoxMin16 rectificationBox) { - rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FFX_MIN16_F(FSR2_EPSILON) ? rectificationBox.fBoxCenterWeight : FFX_MIN16_F(1.f)); + rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FFX_MIN16_F(FSR3UPSCALER_EPSILON) ? rectificationBox.fBoxCenterWeight : FFX_MIN16_F(1.f)); rectificationBox.boxCenter /= rectificationBox.fBoxCenterWeight; rectificationBox.boxVec /= rectificationBox.fBoxCenterWeight; FFX_MIN16_F3 stdDev = sqrt(abs(rectificationBox.boxVec - rectificationBox.boxCenter * rectificationBox.boxCenter)); @@ -339,7 +340,7 @@ FfxFloat32x3 Tonemap(FfxFloat32x3 fRgb) FfxFloat32x3 InverseTonemap(FfxFloat32x3 fRgb) { - return fRgb / ffxMax(FSR2_TONEMAP_EPSILON, 1.f - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; + return fRgb / ffxMax(FSR3UPSCALER_TONEMAP_EPSILON, 1.f - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; } #if FFX_HALF @@ -350,7 +351,7 @@ FFX_MIN16_F3 Tonemap(FFX_MIN16_F3 fRgb) FFX_MIN16_F3 InverseTonemap(FFX_MIN16_F3 fRgb) { - return fRgb / ffxMax(FFX_MIN16_F(FSR2_TONEMAP_EPSILON), FFX_MIN16_F(1.f) - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; + return fRgb / ffxMax(FFX_MIN16_F(FSR3UPSCALER_TONEMAP_EPSILON), FFX_MIN16_F(1.f) - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; } #endif @@ -454,7 +455,7 @@ FfxFloat32 GetViewSpaceDepth(FfxFloat32 fDeviceDepth) { const FfxFloat32x4 fDeviceToViewDepth = DeviceToViewSpaceTransformFactors(); - // fDeviceToViewDepth details found in ffx_fsr2.cpp + // fDeviceToViewDepth details found in ffx_fsr3upscaler.cpp return (fDeviceToViewDepth[1] / (fDeviceDepth - fDeviceToViewDepth[0])); } @@ -483,7 +484,7 @@ FfxFloat32x3 GetViewSpacePositionInMeters(FfxInt32x2 iViewportPos, FfxInt32x2 iV FfxFloat32 GetMaxDistanceInMeters() { -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH return GetViewSpaceDepth(0.0f) * ViewSpaceToMetersFactor(); #else return GetViewSpaceDepth(1.0f) * ViewSpaceToMetersFactor(); @@ -495,7 +496,7 @@ FfxFloat32x3 PrepareRgb(FfxFloat32x3 fRgb, FfxFloat32 fExposure, FfxFloat32 fPre fRgb /= fPreExposure; fRgb *= fExposure; - fRgb = clamp(fRgb, 0.0f, FSR2_FP16_MAX); + fRgb = clamp(fRgb, 0.0f, FSR3UPSCALER_FP16_MAX); return fRgb; } @@ -562,4 +563,4 @@ FfxFloat32 PointToPlaneDistance(PlaneData plane, FfxFloat32x3 fPoint) #endif // #if defined(FFX_GPU) -#endif //!defined(FFX_FSR2_COMMON_H) +#endif //!defined(FFX_FSR3UPSCALER_COMMON_H) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta new file mode 100644 index 0000000..2ebe2aa --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 6a638bec681caac4fa8e2ca198726694 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h similarity index 85% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h index c63f182..d26cf23 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,24 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + FFX_GROUPSHARED FfxUInt32 spdCounter; +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ + SPD_IncreaseAtomicCounter(spdCounter); +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return spdCounter; +} + +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + SPD_ResetAtomicCounter(); +} + #ifndef SPD_PACKED_ONLY FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; @@ -36,7 +52,7 @@ FfxFloat32x4 SpdLoadSourceImage(FfxFloat32x2 tex, FfxUInt32 slice) fRgb /= PreExposure(); //compute log luma - const FfxFloat32 fLogLuma = log(ffxMax(FSR2_EPSILON, RGBToLuma(fRgb))); + const FfxFloat32 fLogLuma = log(ffxMax(FSR3UPSCALER_EPSILON, RGBToLuma(fRgb))); // Make sure out of screen pixels contribute no value to the end result const FfxFloat32 result = all(FFX_LESS_THAN(tex, RenderSize())) ? fLogLuma : 0.0f; @@ -74,21 +90,6 @@ void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 } } -void SpdIncreaseAtomicCounter(FfxUInt32 slice) -{ - SPD_IncreaseAtomicCounter(spdCounter); -} - -FfxUInt32 SpdGetAtomicCounter() -{ - return spdCounter; -} - -void SpdResetAtomicCounter(FfxUInt32 slice) -{ - SPD_ResetAtomicCounter(); -} - FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) { return FfxFloat32x4( @@ -112,40 +113,24 @@ FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFl // define fetch and store functions Packed #if FFX_HALF -#error Callback must be implemented FFX_GROUPSHARED FfxFloat16x2 spdIntermediateRG[16][16]; FFX_GROUPSHARED FfxFloat16x2 spdIntermediateBA[16][16]; FfxFloat16x4 SpdLoadSourceImageH(FfxFloat32x2 tex, FfxUInt32 slice) { - return FfxFloat16x4(imgDst[0][FfxFloat32x3(tex, slice)]); + return FfxFloat16x4(0, 0, 0, 0); } + FfxFloat16x4 SpdLoadH(FfxInt32x2 p, FfxUInt32 slice) { - return FfxFloat16x4(imgDst6[FfxUInt32x3(p, slice)]); + return FfxFloat16x4(0, 0, 0, 0); } + void SpdStoreH(FfxInt32x2 p, FfxFloat16x4 value, FfxUInt32 mip, FfxUInt32 slice) { - if (index == LumaMipLevelToUse() || index == 5) - { - imgDst6[FfxUInt32x3(p, slice)] = FfxFloat32x4(value); - return; - } - imgDst[mip + 1][FfxUInt32x3(p, slice)] = FfxFloat32x4(value); -} -void SpdIncreaseAtomicCounter(FfxUInt32 slice) -{ - InterlockedAdd(rw_spd_global_atomic[FfxInt16x2(0, 0)].counter[slice], 1, spdCounter); -} -FfxUInt32 SpdGetAtomicCounter() -{ - return spdCounter; -} -void SpdResetAtomicCounter(FfxUInt32 slice) -{ - rw_spd_global_atomic[FfxInt16x2(0, 0)].counter[slice] = 0; } + FfxFloat16x4 SpdLoadIntermediateH(FfxUInt32 x, FfxUInt32 y) { return FfxFloat16x4( @@ -154,18 +139,20 @@ FfxFloat16x4 SpdLoadIntermediateH(FfxUInt32 x, FfxUInt32 y) spdIntermediateBA[x][y].x, spdIntermediateBA[x][y].y); } + void SpdStoreIntermediateH(FfxUInt32 x, FfxUInt32 y, FfxFloat16x4 value) { spdIntermediateRG[x][y] = value.xy; spdIntermediateBA[x][y] = value.zw; } + FfxFloat16x4 SpdReduce4H(FfxFloat16x4 v0, FfxFloat16x4 v1, FfxFloat16x4 v2, FfxFloat16x4 v3) { return (v0 + v1 + v2 + v3) * FfxFloat16(0.25); } #endif -#include "ffx_spd.h" +#include "spd/ffx_spd.h" void ComputeAutoExposure(FfxUInt32x3 WorkGroupId, FfxUInt32 LocalThreadIndex) { @@ -186,4 +173,4 @@ void ComputeAutoExposure(FfxUInt32x3 WorkGroupId, FfxUInt32 LocalThreadIndex) FfxUInt32(WorkGroupId.z), FfxUInt32x2(WorkGroupOffset())); #endif -} \ No newline at end of file +} diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta new file mode 100644 index 0000000..9f1d2ab --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 61bd10363d44ee2478461c9e9efbcb67 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h similarity index 97% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h index fa4c975..53763c8 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_depth_clip.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_DEPTH_CLIP_H -#define FFX_FSR2_DEPTH_CLIP_H + +#ifndef FFX_FSR3UPSCALER_DEPTH_CLIP_H +#define FFX_FSR3UPSCALER_DEPTH_CLIP_H FFX_STATIC const FfxFloat32 DepthClipBaseScale = 4.0f; @@ -48,7 +49,7 @@ FfxFloat32 ComputeDepthClip(FfxFloat32x2 fUvSample, FfxFloat32 fCurrentDepthSamp if (fDepthDiff > 0.0f) { -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH const FfxFloat32 fPlaneDepth = ffxMin(fPrevDepthSample, fCurrentDepthSample); #else const FfxFloat32 fPlaneDepth = ffxMax(fPrevDepthSample, fCurrentDepthSample); @@ -243,7 +244,7 @@ void DepthClip(FfxInt32x2 iPxPos) StorePreparedInputColor(iPxPos, FfxFloat32x4(fPreparedYCoCg, fDepthClip)); // Compute dilated reactive mask -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS FfxInt32x2 iSamplePos = iPxPos; #else FfxInt32x2 iSamplePos = ComputeHrPosFromLrPos(iPxPos); @@ -255,4 +256,4 @@ void DepthClip(FfxInt32x2 iPxPos) PreProcessReactiveMasks(iPxPos, ffxMax(fTemporalMotionDifference, fMotionDivergence)); } -#endif //!defined( FFX_FSR2_DEPTH_CLIPH ) \ No newline at end of file +#endif //!defined( FFX_FSR3UPSCALER_DEPTH_CLIPH ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta new file mode 100644 index 0000000..21fe627 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 7c662249d70c4434da4f2da00e432c38 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h similarity index 91% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h index 8347fa8..e1a0d06 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,14 +19,15 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_LOCK_H -#define FFX_FSR2_LOCK_H + +#ifndef FFX_FSR3UPSCALER_LOCK_H +#define FFX_FSR3UPSCALER_LOCK_H void ClearResourcesForNextFrame(in FfxInt32x2 iPxHrPos) { if (all(FFX_LESS_THAN(iPxHrPos, FfxInt32x2(RenderSize())))) { -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH const FfxUInt32 farZ = 0x0; #else const FfxUInt32 farZ = 0x3f800000; @@ -42,7 +43,7 @@ FfxBoolean ComputeThinFeatureConfidence(FfxInt32x2 pos) FfxFloat32 fNucleus = LoadLockInputLuma(pos); FfxFloat32 similar_threshold = 1.05f; - FfxFloat32 dissimilarLumaMin = FSR2_FLT_MAX; + FfxFloat32 dissimilarLumaMin = FSR3UPSCALER_FLT_MAX; FfxFloat32 dissimilarLumaMax = 0; /* @@ -109,7 +110,7 @@ void ComputeLock(FfxInt32x2 iPxLrPos) StoreNewLocks(ComputeHrPosFromLrPos(iPxLrPos), 1.f); } - ClearResourcesForNextFrame(iPxLrPos); + // ClearResourcesForNextFrame(iPxLrPos); } -#endif // FFX_FSR2_LOCK_H +#endif // FFX_FSR3UPSCALER_LOCK_H diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta new file mode 100644 index 0000000..38a5a57 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: c7e9f53dd040b2645af5ccd936a94b0e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h similarity index 91% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h index cee9e14..3709113 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_POSTPROCESS_LOCK_STATUS_H -#define FFX_FSR2_POSTPROCESS_LOCK_STATUS_H + +#ifndef FFX_FSR3UPSCALER_POSTPROCESS_LOCK_STATUS_H +#define FFX_FSR3UPSCALER_POSTPROCESS_LOCK_STATUS_H FfxFloat32x4 WrapShadingChangeLuma(FfxInt32x2 iPxSample) { @@ -34,7 +35,7 @@ FFX_MIN16_F4 WrapShadingChangeLuma(FFX_MIN16_I2 iPxSample) } #endif -#if FFX_FSR2_OPTION_POSTPROCESSLOCKSTATUS_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_POSTPROCESSLOCKSTATUS_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBilinearSamplesMin16(FetchShadingChangeLumaSamples, WrapShadingChangeLuma) #else DeclareCustomFetchBicubicSamples(FetchShadingChangeLumaSamples, WrapShadingChangeLuma) @@ -49,7 +50,7 @@ FfxFloat32 GetShadingChangeLuma(FfxInt32x2 iPxHrPos, FfxFloat32x2 fUvCoord) fShadingChangeLuma = Exposure() * exp(ShadingChangeLumaSample(fUvCoord, LumaMipDimensions()).x); #else - const FfxFloat32 fDiv = FfxFloat32(2 << LumaMipLevelToUse()); + const FfxFloat32 fDiv = FfxFloat32(2u << LumaMipLevelToUse()); FfxInt32x2 iMipRenderSize = FfxInt32x2(RenderSize() / fDiv); fUvCoord = ClampUv(fUvCoord, iMipRenderSize, LumaMipDimensions()); @@ -103,4 +104,4 @@ void UpdateLockStatus(AccumulationPassCommonParams params, fLockContributionThisFrame = ffxSaturate(ffxSaturate(fLifetimeContribution * 4.0f) * fShadingChangeContribution); } -#endif //!defined( FFX_FSR2_POSTPROCESS_LOCK_STATUS_H ) +#endif //!defined( FFX_FSR3UPSCALER_POSTPROCESS_LOCK_STATUS_H ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta new file mode 100644 index 0000000..f8b5616 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 67a8b72ceb93d634f883b086fdccb348 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h similarity index 93% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h index d9006cd..77619a5 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_rcas.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,16 +19,18 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#define GROUP_SIZE 8 +#define GROUP_SIZE 8 #define FSR_RCAS_DENOISE 1 +#include "ffx_core.h" + void WriteUpscaledOutput(FFX_MIN16_U2 iPxHrPos, FfxFloat32x3 fUpscaledColor) { StoreUpscaledOutput(FFX_MIN16_I2(iPxHrPos), fUpscaledColor); } -#define FSR_RCAS_F +#define FSR_RCAS_F 1 FfxFloat32x4 FsrRcasLoadF(FfxInt32x2 p) { FfxFloat32x4 fColor = LoadRCAS_Input(p); @@ -37,11 +39,9 @@ FfxFloat32x4 FsrRcasLoadF(FfxInt32x2 p) return fColor; } - void FsrRcasInputF(inout FfxFloat32 r, inout FfxFloat32 g, inout FfxFloat32 b) {} -#include "ffx_fsr1.h" - +#include "fsr1/ffx_fsr1.h" void CurrFilter(FFX_MIN16_U2 pos) { diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta new file mode 100644 index 0000000..7a53a1f --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 692efb7cec0df67408a583a7ff34146a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h similarity index 91% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h index e9ccc4b..a822dfc 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H -#define FFX_FSR2_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H + +#ifndef FFX_FSR3UPSCALER_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H +#define FFX_FSR3UPSCALER_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H void ReconstructPrevDepth(FfxInt32x2 iPxPos, FfxFloat32 fDepth, FfxFloat32x2 fMotionVector, FfxInt32x2 iPxDepthSize) { @@ -83,7 +84,7 @@ void FindNearestDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxIn if (IsOnScreen(iPos, iPxSize)) { FfxFloat32 fNdDepth = depth[iSampleIndex]; -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH if (fNdDepth > fNearestDepth) { #else if (fNdDepth < fNearestDepth) { @@ -105,7 +106,7 @@ FfxFloat32 ComputeLockInputLuma(FfxInt32x2 iPxLrPos) fRgb /= PreExposure(); fRgb *= Exposure(); -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT fRgb = Tonemap(fRgb); #endif @@ -122,7 +123,7 @@ void ReconstructAndDilate(FfxInt32x2 iPxLrPos) FindNearestDepth(iPxLrPos, RenderSize(), fDilatedDepth, iNearestDepthCoord); -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS FfxInt32x2 iSamplePos = iPxLrPos; FfxInt32x2 iMotionVectorPos = iNearestDepthCoord; #else @@ -142,4 +143,4 @@ void ReconstructAndDilate(FfxInt32x2 iPxLrPos) } -#endif //!defined( FFX_FSR2_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H ) +#endif //!defined( FFX_FSR3UPSCALER_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta new file mode 100644 index 0000000..78ced0d --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: c8b3854bad30a8b40babc5a9805f294e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h similarity index 77% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h index f7f3961..29b7584 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,11 +19,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_REPROJECT_H -#define FFX_FSR2_REPROJECT_H -#ifndef FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE -#define FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE 0 // Reference +#ifndef FFX_FSR3UPSCALER_REPROJECT_H +#define FFX_FSR3UPSCALER_REPROJECT_H + +#ifndef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE 0 // Reference #endif FfxFloat32x4 WrapHistory(FfxInt32x2 iPxSample) @@ -39,12 +40,12 @@ FFX_MIN16_F4 WrapHistory(FFX_MIN16_I2 iPxSample) #endif -#if FFX_FSR2_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBicubicSamplesMin16(FetchHistorySamples, WrapHistory) -DeclareCustomTextureSampleMin16(HistorySample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) +DeclareCustomTextureSampleMin16(HistorySample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) #else DeclareCustomFetchBicubicSamples(FetchHistorySamples, WrapHistory) -DeclareCustomTextureSample(HistorySample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) +DeclareCustomTextureSample(HistorySample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) #endif FfxFloat32x4 WrapLockStatus(FfxInt32x2 iPxSample) @@ -63,7 +64,7 @@ FFX_MIN16_F4 WrapLockStatus(FFX_MIN16_I2 iPxSample) #endif #if 1 -#if FFX_FSR2_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBilinearSamplesMin16(FetchLockStatusSamples, WrapLockStatus) DeclareCustomTextureSampleMin16(LockStatusSample, Bilinear, FetchLockStatusSamples) #else @@ -71,18 +72,18 @@ DeclareCustomFetchBilinearSamples(FetchLockStatusSamples, WrapLockStatus) DeclareCustomTextureSample(LockStatusSample, Bilinear, FetchLockStatusSamples) #endif #else -#if FFX_FSR2_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBicubicSamplesMin16(FetchLockStatusSamples, WrapLockStatus) -DeclareCustomTextureSampleMin16(LockStatusSample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) +DeclareCustomTextureSampleMin16(LockStatusSample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) #else DeclareCustomFetchBicubicSamples(FetchLockStatusSamples, WrapLockStatus) -DeclareCustomTextureSample(LockStatusSample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) +DeclareCustomTextureSample(LockStatusSample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) #endif #endif FfxFloat32x2 GetMotionVector(FfxInt32x2 iPxHrPos, FfxFloat32x2 fHrUv) { -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS FfxFloat32x2 fDilatedMotionVector = LoadDilatedMotionVector(FFX_MIN16_I2(fHrUv * RenderSize())); #else FfxFloat32x2 fDilatedMotionVector = LoadInputMotionVector(iPxHrPos); @@ -133,4 +134,4 @@ LockState ReprojectHistoryLockStatus(const AccumulationPassCommonParams params, return state; } -#endif //!defined( FFX_FSR2_REPROJECT_H ) +#endif //!defined( FFX_FSR3UPSCALER_REPROJECT_H ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta new file mode 100644 index 0000000..ea2e14d --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 9d893016eebb2564f9a66b80afb0849f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h new file mode 100644 index 0000000..d98cfcc --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h @@ -0,0 +1,104 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#ifndef FFX_FSR3UPSCALER_RESOURCES_H +#define FFX_FSR3UPSCALER_RESOURCES_H + +#if defined(FFX_CPU) || defined(FFX_GPU) +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_NULL 0 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY 1 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_COLOR 2 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS 3 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_DEPTH 4 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_EXPOSURE 5 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK 6 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK 7 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH 8 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 9 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_DEPTH 10 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR 11 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_STATUS 12 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_NEW_LOCKS 13 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR 14 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY 15 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 16 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LANCZOS_LUT 17 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT 18 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT 19 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_RCAS_INPUT 20 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_STATUS_1 21 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_STATUS_2 22 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_1 23 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_2 24 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_REACTIVITY 25 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_TRANSPARENCY_AND_COMPOSITION 26 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT 27 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS 28 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE 29 // same as FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 29 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_1 30 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_2 31 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_3 32 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 33 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_5 34 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_6 35 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_7 36 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_8 37 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_9 38 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_10 39 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_11 40 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12 41 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_EXPOSURE 42 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTO_EXPOSURE 43 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTOREACTIVE 44 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTOCOMPOSITION_DEPRECATED 45 + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR 46 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR 47 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_1 48 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_1 49 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_2 50 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_2 51 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREVIOUS_DILATED_MOTION_VECTORS 52 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY_1 53 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY_2 54 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA 55 + +// Shading change detection mip level setting, value must be in the range [FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0, FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12] +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 +#define FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL (FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE - FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE) + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT 56 + +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_FSR3UPSCALER 0 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_SPD 1 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_RCAS 2 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_GENREACTIVE 3 + +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_TONEMAP 1 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP 2 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_THRESHOLD 4 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX 8 + +#endif // #if defined(FFX_CPU) || defined(FFX_GPU) + +#endif //!defined( FFX_FSR3UPSCALER_RESOURCES_H ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta new file mode 100644 index 0000000..24cdbd2 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: b5a95a38dcfaf3946a5095bbbc42939a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h similarity index 96% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h index f94f40a..d33f70c 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_SAMPLE_H -#define FFX_FSR2_SAMPLE_H + +#ifndef FFX_FSR3UPSCALER_SAMPLE_H +#define FFX_FSR3UPSCALER_SAMPLE_H // suppress warnings #ifdef FFX_HLSL @@ -127,7 +128,7 @@ FFX_MIN16_F4 Bilinear(FetchedBilinearSamplesMin16 BilinearSamples, FFX_MIN16_F2 FfxFloat32 Lanczos2NoClamp(FfxFloat32 x) { const FfxFloat32 PI = 3.141592653589793f; // TODO: share SDK constants - return abs(x) < FSR2_EPSILON ? 1.f : (sin(PI * x) / (PI * x)) * (sin(0.5f * PI * x) / (0.5f * PI * x)); + return abs(x) < FSR3UPSCALER_EPSILON ? 1.f : (sin(PI * x) / (PI * x)) * (sin(0.5f * PI * x) / (0.5f * PI * x)); } FfxFloat32 Lanczos2(FfxFloat32 x) @@ -142,7 +143,7 @@ FfxFloat32 Lanczos2(FfxFloat32 x) FFX_MIN16_F Lanczos2NoClamp(FFX_MIN16_F x) { const FFX_MIN16_F PI = FFX_MIN16_F(3.141592653589793f); // TODO: share SDK constants - return abs(x) < FFX_MIN16_F(FSR2_EPSILON) ? FFX_MIN16_F(1.f) : (sin(PI * x) / (PI * x)) * (sin(FFX_MIN16_F(0.5f) * PI * x) / (FFX_MIN16_F(0.5f) * PI * x)); + return abs(x) < FFX_MIN16_F(FSR3UPSCALER_EPSILON) ? FFX_MIN16_F(1.f) : (sin(PI * x) / (PI * x)) * (sin(FFX_MIN16_F(0.5f) * PI * x) / (FFX_MIN16_F(0.5f) * PI * x)); } #endif @@ -594,12 +595,12 @@ FFX_MIN16_I2 ClampCoord(FFX_MIN16_I2 iPxSample, FFX_MIN16_I2 iPxOffset, FFX_MIN1 return fColorXY; \ } -#define FFX_FSR2_CONCAT_ID(x, y) x ## y -#define FFX_FSR2_CONCAT(x, y) FFX_FSR2_CONCAT_ID(x, y) -#define FFX_FSR2_SAMPLER_1D_0 Lanczos2 -#define FFX_FSR2_SAMPLER_1D_1 Lanczos2LUT -#define FFX_FSR2_SAMPLER_1D_2 Lanczos2Approx +#define FFX_FSR3UPSCALER_CONCAT_ID(x, y) x ## y +#define FFX_FSR3UPSCALER_CONCAT(x, y) FFX_FSR3UPSCALER_CONCAT_ID(x, y) +#define FFX_FSR3UPSCALER_SAMPLER_1D_0 Lanczos2 +#define FFX_FSR3UPSCALER_SAMPLER_1D_1 Lanczos2LUT +#define FFX_FSR3UPSCALER_SAMPLER_1D_2 Lanczos2Approx -#define FFX_FSR2_GET_LANCZOS_SAMPLER1D(x) FFX_FSR2_CONCAT(FFX_FSR2_SAMPLER_1D_, x) +#define FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(x) FFX_FSR3UPSCALER_CONCAT(FFX_FSR3UPSCALER_SAMPLER_1D_, x) -#endif //!defined( FFX_FSR2_SAMPLE_H ) +#endif //!defined( FFX_FSR3UPSCALER_SAMPLE_H ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta new file mode 100644 index 0000000..1a46376 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: dcb900c9deecd06419a8a4c10c305890 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h similarity index 99% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h index 101b75d..2d446bb 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h @@ -52,7 +52,7 @@ FFX_MIN16_F ComputeAutoTC_01(FFX_MIN16_I2 uDispatchThreadId, FFX_MIN16_I2 iPrevI FFX_MIN16_F retVal = FFX_MIN16_F(ffxSaturate(dot(abs(abs(Y - X) - abs(W - Z)), FfxFloat32x3(1, 1, 1)))); // cleanup very small values - retVal = (retVal < getTcThreshold()) ? FFX_MIN16_F(0.0f) : FFX_MIN16_F(1.f); + retVal = (retVal < TcThreshold()) ? FFX_MIN16_F(0.0f) : FFX_MIN16_F(1.f); return retVal; } diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta new file mode 100644 index 0000000..99d54e7 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: f01d5a8fbd1f34a4ea8d971755a21b6c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h similarity index 85% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h index abdb888..47e7ccf 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_upsample.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_UPSAMPLE_H -#define FFX_FSR2_UPSAMPLE_H + +#ifndef FFX_FSR3UPSCALER_UPSAMPLE_H +#define FFX_FSR3UPSCALER_UPSAMPLE_H FFX_STATIC const FfxUInt32 iLanczos2SampleCount = 16; @@ -35,18 +36,18 @@ void Deringing(RectificationBoxMin16 clippingBox, FFX_PARAMETER_INOUT FFX_MIN16_ } #endif -#ifndef FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE -#define FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE 2 // Approximate +#ifndef FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE 2 // Approximate #endif FfxFloat32 GetUpsampleLanczosWeight(FfxFloat32x2 fSrcSampleOffset, FfxFloat32 fKernelWeight) { FfxFloat32x2 fSrcSampleOffsetBiased = fSrcSampleOffset * fKernelWeight.xx; -#if FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE +#if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE FfxFloat32 fSampleWeight = Lanczos2(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT FfxFloat32 fSampleWeight = Lanczos2_UseLUT(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE FfxFloat32 fSampleWeight = Lanczos2ApproxSq(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); #else #error "Invalid Lanczos type" @@ -58,11 +59,11 @@ FfxFloat32 GetUpsampleLanczosWeight(FfxFloat32x2 fSrcSampleOffset, FfxFloat32 fK FFX_MIN16_F GetUpsampleLanczosWeight(FFX_MIN16_F2 fSrcSampleOffset, FFX_MIN16_F fKernelWeight) { FFX_MIN16_F2 fSrcSampleOffsetBiased = fSrcSampleOffset * fKernelWeight.xx; -#if FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE +#if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE FFX_MIN16_F fSampleWeight = Lanczos2(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT FFX_MIN16_F fSampleWeight = Lanczos2_UseLUT(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE FFX_MIN16_F fSampleWeight = Lanczos2ApproxSq(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); // To Test: Save reciproqual sqrt compute @@ -85,16 +86,16 @@ FfxFloat32 ComputeMaxKernelWeight() { FfxFloat32x4 ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT RectificationBox clippingBox, FfxFloat32 fReactiveFactor) { - #if FFX_FSR2_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF - #include "ffx_fsr2_force16_begin.h" + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF + #include "ffx_fsr3upscaler_force16_begin.h" #endif // We compute a sliced lanczos filter with 2 lobes (other slices are accumulated temporaly) FfxFloat32x2 fDstOutputPos = FfxFloat32x2(params.iPxHrPos) + FFX_BROADCAST_FLOAT32X2(0.5f); // Destination resolution output pixel center position FfxFloat32x2 fSrcOutputPos = fDstOutputPos * DownscaleFactor(); // Source resolution output pixel center position FfxInt32x2 iSrcInputPos = FfxInt32x2(floor(fSrcOutputPos)); // TODO: what about weird upscale factors... - #if FFX_FSR2_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF - #include "ffx_fsr2_force16_end.h" + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF + #include "ffx_fsr3upscaler_force16_end.h" #endif FfxFloat32x3 fSamples[iLanczos2SampleCount]; @@ -174,9 +175,9 @@ FfxFloat32x4 ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams p RectificationBoxComputeVarianceBoxData(clippingBox); - fColorAndWeight.w *= FfxFloat32(fColorAndWeight.w > FSR2_EPSILON); + fColorAndWeight.w *= FfxFloat32(fColorAndWeight.w > FSR3UPSCALER_EPSILON); - if (fColorAndWeight.w > FSR2_EPSILON) { + if (fColorAndWeight.w > FSR3UPSCALER_EPSILON) { // Normalize for deringing (we need to compare colors) fColorAndWeight.xyz = fColorAndWeight.xyz / fColorAndWeight.w; fColorAndWeight.w *= fUpsampleLanczosWeightScale; @@ -184,11 +185,11 @@ FfxFloat32x4 ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams p Deringing(clippingBox, fColorAndWeight.xyz); } - #if FFX_FSR2_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF - #include "ffx_fsr2_force16_end.h" + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF + #include "ffx_fsr3upscaler_force16_end.h" #endif return fColorAndWeight; } -#endif //!defined( FFX_FSR2_UPSAMPLE_H ) +#endif //!defined( FFX_FSR3UPSCALER_UPSAMPLE_H ) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta new file mode 100644 index 0000000..e4153a0 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 3e7832c4a9154414f9eaa125acfe6cd5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta new file mode 100644 index 0000000..731c94f --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09438bc445e66204f970dc99ca8dae5a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h similarity index 97% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h index 1ac23cf..e780995 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,9 +19,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wunused-variable" -#endif + +/// @defgroup FfxGPUFsr1 FidelityFX FSR1 +/// FidelityFX Super Resolution 1 GPU documentation +/// +/// @ingroup FfxGPUEffects /// Setup required constant values for EASU (works on CPU or GPU). /// @@ -36,7 +38,7 @@ /// @param [in] outputSizeInPixelsX The display resolution which the input image gets upscaled to in X dimension. /// @param [in] outputSizeInPixelsY The display resolution which the input image gets upscaled to in Y dimension. /// -/// @ingroup FSR1 +/// @ingroup FfxGPUFsr1 FFX_STATIC void ffxFsrPopulateEasuConstants( FFX_PARAMETER_INOUT FfxUInt32x4 con0, FFX_PARAMETER_INOUT FfxUInt32x4 con1, @@ -102,7 +104,7 @@ FFX_STATIC void ffxFsrPopulateEasuConstants( /// @param [in] inputOffsetInPixelsX The input image offset in the X dimension into the resource containing it (useful for dynamic resolution). /// @param [in] inputOffsetInPixelsY The input image offset in the Y dimension into the resource containing it (useful for dynamic resolution). /// -/// @ingroup FSR1 +/// @ingroup FfxGPUFsr1 FFX_STATIC void ffxFsrPopulateEasuConstantsOffset( FFX_PARAMETER_INOUT FfxUInt32x4 con0, FFX_PARAMETER_INOUT FfxUInt32x4 con1, @@ -329,7 +331,7 @@ void ffxFsrEasuFloat( // Normalize with approximation, and cleanup close to zero. FfxFloat32x2 dir2 = dir * dir; FfxFloat32 dirR = dir2.x + dir2.y; - FfxUInt32 zro = dirR < FfxFloat32(1.0 / 32768.0); + FfxBoolean zro = dirR < FfxFloat32(1.0 / 32768.0); dirR = ffxApproximateReciprocalSquareRoot(dirR); dirR = zro ? FfxFloat32(1.0) : dirR; dir.x = zro ? FfxFloat32(1.0) : dir.x; @@ -457,7 +459,7 @@ void FsrEasuSetH( FfxFloat16x2 dirX = lD - lB; dirPX += dirX * w; - lenX = ffxSaturate(abs(dirX) * lenX); + lenX = FfxFloat16x2(ffxSaturate(abs(dirX) * lenX)); lenX *= lenX; lenP += lenX * w; FfxFloat16x2 ec = lE - lC; @@ -466,7 +468,7 @@ void FsrEasuSetH( lenY = ffxReciprocalHalf(lenY); FfxFloat16x2 dirY = lE - lA; dirPY += dirY * w; - lenY = ffxSaturate(abs(dirY) * lenY); + lenY = FfxFloat16x2(ffxSaturate(abs(dirY) * lenY)); lenY *= lenY; lenP += lenY * w; } @@ -526,8 +528,8 @@ void FsrEasuH( dirPY, lenP, ppp, - FfxUInt32(true), - FfxUInt32(false), + FfxBoolean(true), + FfxBoolean(false), FfxFloat16x2(bL, cL), FfxFloat16x2(eL, fL), FfxFloat16x2(fL, gL), @@ -537,8 +539,8 @@ void FsrEasuH( dirPY, lenP, ppp, - FfxUInt32(false), - FfxUInt32(true), + FfxBoolean(false), + FfxBoolean(true), FfxFloat16x2(fL, gL), FfxFloat16x2(iL, jL), FfxFloat16x2(jL, kL), @@ -549,7 +551,7 @@ void FsrEasuH( FfxFloat16x2 dir2 = dir * dir; FfxFloat16 dirR = dir2.x + dir2.y; - FfxBoolean zro = FfxBoolean(dirR < FFX_BROADCAST_FLOAT16(1.0 / 32768.0)); + FfxUInt32 zro = FfxUInt32(dirR < FFX_BROADCAST_FLOAT16(1.0 / 32768.0)); dirR = ffxApproximateReciprocalSquareRootHalf(dirR); dirR = (zro > 0) ? FFX_BROADCAST_FLOAT16(1.0) : dirR; dir.x = (zro > 0) ? FFX_BROADCAST_FLOAT16(1.0) : dir.x; @@ -834,7 +836,7 @@ void FsrEasuH( FfxFloat16 hL=hB*FFX_BROADCAST_FLOAT16(0.5)+(hR*FFX_BROADCAST_FLOAT16(0.5)+hG); // Noise detection. FfxFloat16 nz=FFX_BROADCAST_FLOAT16(0.25)*bL+FFX_BROADCAST_FLOAT16(0.25)*dL+FFX_BROADCAST_FLOAT16(0.25)*fL+FFX_BROADCAST_FLOAT16(0.25)*hL-eL; - nz=ffxSaturate(abs(nz)*ffxApproximateReciprocalMediumHalf(ffxMax3Half(ffxMax3Half(bL,dL,eL),fL,hL)-ffxMin3Half(ffxMin3Half(bL,dL,eL),fL,hL))); + nz=FfxFloat16(ffxSaturate(abs(nz)*ffxApproximateReciprocalMediumHalf(ffxMax3Half(ffxMax3Half(bL,dL,eL),fL,hL)-ffxMin3Half(ffxMin3Half(bL,dL,eL),fL,hL)))); nz=FFX_BROADCAST_FLOAT16(-0.5)*nz+FFX_BROADCAST_FLOAT16(1.0); // Min and max of ring. FfxFloat16 mn4R=min(ffxMin3Half(bR,dR,fR),hR); @@ -1175,7 +1177,7 @@ void FsrEasuH( FfxFloat16x3 b = n + FFX_BROADCAST_FLOAT16X3(1.0 / 255.0); b = b * b; FfxFloat16x3 r = (c - b) * ffxApproximateReciprocalMediumHalf(a - b); - c = ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 255.0)); + c = FfxFloat16x3(ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 255.0))); } //------------------------------------------------------------------------------------------------------------------------------ void FsrTepdC10H(inout FfxFloat16x3 c, FfxFloat16 dit) @@ -1186,7 +1188,7 @@ void FsrEasuH( FfxFloat16x3 b = n + FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0); b = b * b; FfxFloat16x3 r = (c - b) * ffxApproximateReciprocalMediumHalf(a - b); - c = ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0)); + c = FfxFloat16x3(ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0))); } //============================================================================================================================== // This computes dither for positions 'p' and 'p+{8,0}'. @@ -1222,9 +1224,9 @@ void FsrEasuH( FfxFloat16x2 rR = (cR - bR) * ffxApproximateReciprocalMediumHalf(aR - bR); FfxFloat16x2 rG = (cG - bG) * ffxApproximateReciprocalMediumHalf(aG - bG); FfxFloat16x2 rB = (cB - bB) * ffxApproximateReciprocalMediumHalf(aB - bB); - cR = ffxSaturate(nR + ffxIsGreaterThanZeroHalf(dit - rR) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); - cG = ffxSaturate(nG + ffxIsGreaterThanZeroHalf(dit - rG) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); - cB = ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); + cR = FfxFloat16x2(ffxSaturate(nR + ffxIsGreaterThanZeroHalf(dit - rR) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0))); + cG = FfxFloat16x2(ffxSaturate(nG + ffxIsGreaterThanZeroHalf(dit - rG) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0))); + cB = FfxFloat16x2(ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0))); } //------------------------------------------------------------------------------------------------------------------------------ void FsrTepdC10Hx2(inout FfxFloat16x2 cR,inout FfxFloat16x2 cG,inout FfxFloat16x2 cB,FfxFloat16x2 dit){ @@ -1243,8 +1245,8 @@ void FsrEasuH( FfxFloat16x2 rR=(cR-bR)*ffxApproximateReciprocalMediumHalf(aR-bR); FfxFloat16x2 rG=(cG-bG)*ffxApproximateReciprocalMediumHalf(aG-bG); FfxFloat16x2 rB=(cB-bB)*ffxApproximateReciprocalMediumHalf(aB-bB); - cR=ffxSaturate(nR+ffxIsGreaterThanZeroHalf(dit-rR)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0)); - cG=ffxSaturate(nG+ffxIsGreaterThanZeroHalf(dit-rG)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0)); - cB = ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 1023.0)); + cR=FfxFloat16x2(ffxSaturate(nR+ffxIsGreaterThanZeroHalf(dit-rR)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0))); + cG=FfxFloat16x2(ffxSaturate(nG+ffxIsGreaterThanZeroHalf(dit-rG)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0))); + cB=FfxFloat16x2(ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 1023.0))); } #endif diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta new file mode 100644 index 0000000..64e4ffa --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 628e23510f46ef44bbf0035ce9a63be0 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd.meta new file mode 100644 index 0000000..0b775af --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f03de1579ac3294595ae4f40106b7a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_spd.h b/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h similarity index 82% rename from Assets/Resources/FSR2/shaders/ffx_spd.h rename to Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h index b94f46f..6441419 100644 --- a/Assets/Resources/FSR2/shaders/ffx_spd.h +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,22 +19,42 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifdef FFX_CPU -FFX_STATIC void SpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, // CPU side: dispatch thread group count xy - FfxUInt32x2 workGroupOffset, // GPU side: pass in as constant - FfxUInt32x2 numWorkGroupsAndMips, // GPU side: pass in as constant - FfxUInt32x4 rectInfo, // left, top, width, height - FfxInt32 mips) // optional: if -1, calculate based on rect width and height -{ - workGroupOffset[0] = rectInfo[0] / 64; // rectInfo[0] = left - workGroupOffset[1] = rectInfo[1] / 64; // rectInfo[1] = top + +/// @defgroup FfxGPUSpd FidelityFX SPD +/// FidelityFX Single Pass Downsampler 2.0 GPU documentation +/// +/// @ingroup FfxGPUEffects + +/// Setup required constant values for SPD (CPU). +/// +/// @param [out] dispatchThreadGroupCountXY CPU side: dispatch thread group count xy. z is number of slices of the input texture +/// @param [out] workGroupOffset GPU side: pass in as constant +/// @param [out] numWorkGroupsAndMips GPU side: pass in as constant +/// @param [in] rectInfo left, top, width, height +/// @param [in] mips optional: if -1, calculate based on rect width and height +/// +/// @ingroup FfxGPUSpd +#if defined(FFX_CPU) +FFX_STATIC void ffxSpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, + FfxUInt32x2 workGroupOffset, + FfxUInt32x2 numWorkGroupsAndMips, + FfxUInt32x4 rectInfo, + FfxInt32 mips) +{ + // determines the offset of the first tile to downsample based on + // left (rectInfo[0]) and top (rectInfo[1]) of the subregion. + workGroupOffset[0] = rectInfo[0] / 64; + workGroupOffset[1] = rectInfo[1] / 64; FfxUInt32 endIndexX = (rectInfo[0] + rectInfo[2] - 1) / 64; // rectInfo[0] = left, rectInfo[2] = width FfxUInt32 endIndexY = (rectInfo[1] + rectInfo[3] - 1) / 64; // rectInfo[1] = top, rectInfo[3] = height + // we only need to dispatch as many thread groups as tiles we need to downsample + // number of tiles per slice depends on the subregion to downsample dispatchThreadGroupCountXY[0] = endIndexX + 1 - workGroupOffset[0]; dispatchThreadGroupCountXY[1] = endIndexY + 1 - workGroupOffset[1]; + // number of thread groups per slice numWorkGroupsAndMips[0] = (dispatchThreadGroupCountXY[0]) * (dispatchThreadGroupCountXY[1]); if (mips >= 0) @@ -42,29 +62,37 @@ FFX_STATIC void SpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, // CPU side numWorkGroupsAndMips[1] = FfxUInt32(mips); } else - { + { // calculate based on rect width and height FfxUInt32 resolution = ffxMax(rectInfo[2], rectInfo[3]); numWorkGroupsAndMips[1] = FfxUInt32((ffxMin(floor(log2(FfxFloat32(resolution))), FfxFloat32(12)))); } } -FFX_STATIC void SpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, // CPU side: dispatch thread group count xy - FfxUInt32x2 workGroupOffset, // GPU side: pass in as constant - FfxUInt32x2 numWorkGroupsAndMips, // GPU side: pass in as constant - FfxUInt32x4 rectInfo) // left, top, width, height +/// Setup required constant values for SPD (CPU). +/// +/// @param [out] dispatchThreadGroupCountXY CPU side: dispatch thread group count xy. z is number of slices of the input texture +/// @param [out] workGroupOffset GPU side: pass in as constant +/// @param [out] numWorkGroupsAndMips GPU side: pass in as constant +/// @param [in] rectInfo left, top, width, height +/// +/// @ingroup FfxGPUSpd +FFX_STATIC void ffxSpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, + FfxUInt32x2 workGroupOffset, + FfxUInt32x2 numWorkGroupsAndMips, + FfxUInt32x4 rectInfo) { - SpdSetup(dispatchThreadGroupCountXY, workGroupOffset, numWorkGroupsAndMips, rectInfo, -1); + ffxSpdSetup(dispatchThreadGroupCountXY, workGroupOffset, numWorkGroupsAndMips, rectInfo, -1); } -#endif // #ifdef FFX_CPU +#endif // #if defined(FFX_CPU) //============================================================================================================================== // NON-PACKED VERSION //============================================================================================================================== -#ifdef FFX_GPU -#ifdef SPD_PACKED_ONLY -// Avoid compiler error +#if defined(FFX_GPU) +#if defined(FFX_SPD_PACKED_ONLY) +// Avoid compiler errors by including default implementations of these callbacks. FfxFloat32x4 SpdLoadSourceImage(FfxInt32x2 p, FfxUInt32 slice) { return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); @@ -88,18 +116,13 @@ FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFl { return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); } -#endif // #ifdef SPD_PACKED_ONLY +#endif // #if FFX_SPD_PACKED_ONLY //_____________________________________________________________/\_______________________________________________________________ -void SpdWorkgroupShuffleBarrier() +void ffxSpdWorkgroupShuffleBarrier() { -#ifdef FFX_GLSL - barrier(); -#endif -#ifdef FFX_HLSL - GroupMemoryBarrierWithGroupSync(); -#endif + FFX_GROUP_MEMORY_BARRIER(); } // Only last active workgroup should proceed @@ -111,14 +134,14 @@ bool SpdExitWorkgroup(FfxUInt32 numWorkGroups, FfxUInt32 localInvocationIndex, F SpdIncreaseAtomicCounter(slice); } - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); return (SpdGetAtomicCounter() != (numWorkGroups - 1)); } // User defined: FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3); FfxFloat32x4 SpdReduceQuad(FfxFloat32x4 v) { -#if defined(FFX_GLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) FfxFloat32x4 v0 = v; FfxFloat32x4 v1 = subgroupQuadSwapHorizontal(v); @@ -126,7 +149,7 @@ FfxFloat32x4 SpdReduceQuad(FfxFloat32x4 v) FfxFloat32x4 v3 = subgroupQuadSwapDiagonal(v); return SpdReduce4(v0, v1, v2, v3); -#elif defined(FFX_HLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#elif defined(FFX_HLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) // requires SM6.0 FfxUInt32 quad = WaveGetLaneIndex() & (~0x3); @@ -196,7 +219,7 @@ FfxFloat32x4 SpdReduceLoadSourceImage4(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32 FfxFloat32x4 SpdReduceLoadSourceImage(FfxUInt32x2 base, FfxUInt32 slice) { -#ifdef SPD_LINEAR_SAMPLER +#if defined(SPD_LINEAR_SAMPLER) return SpdLoadSourceImage(FfxInt32x2(base), slice); #else return SpdReduceLoadSourceImage4(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); @@ -281,13 +304,13 @@ void SpdDownsampleMips_0_1_LDS(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID for (FfxUInt32 i = 0; i < 4; i++) { SpdStoreIntermediate(x, y, v[i]); - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); if (localInvocationIndex < 64) { v[i] = SpdReduceIntermediate(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x + (i % 2) * 8, y + (i / 2) * 8), v[i], 1, slice); } - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); } if (localInvocationIndex < 64) @@ -301,7 +324,7 @@ void SpdDownsampleMips_0_1_LDS(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID void SpdDownsampleMips_0_1(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) SpdDownsampleMips_0_1_LDS(x, y, workGroupID, localInvocationIndex, mip, slice); #else SpdDownsampleMips_0_1_Intrinsics(x, y, workGroupID, localInvocationIndex, mip, slice); @@ -311,7 +334,7 @@ void SpdDownsampleMips_0_1(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, Ff void SpdDownsampleMip_2(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 64) { FfxFloat32x4 v = SpdReduceIntermediate(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); @@ -340,7 +363,7 @@ void SpdDownsampleMip_2(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUI void SpdDownsampleMip_3(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 16) { // x 0 x 0 @@ -380,7 +403,7 @@ void SpdDownsampleMip_3(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUI void SpdDownsampleMip_4(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 4) { // x 0 0 0 x 0 0 0 @@ -413,7 +436,7 @@ void SpdDownsampleMip_4(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUI void SpdDownsampleMip_5(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 1) { // x x x x 0 ... @@ -470,48 +493,75 @@ void SpdDownsampleNextFour(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, Ff { if (mips <= baseMip) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_2(x, y, workGroupID, localInvocationIndex, baseMip, slice); if (mips <= baseMip + 1) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_3(x, y, workGroupID, localInvocationIndex, baseMip + 1, slice); if (mips <= baseMip + 2) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_4(x, y, workGroupID, localInvocationIndex, baseMip + 2, slice); if (mips <= baseMip + 3) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_5(workGroupID, localInvocationIndex, baseMip + 3, slice); } +/// Downsamples a 64x64 tile based on the work group id. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// +/// @ingroup FfxGPUSpd void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice) { + // compute MIP level 0 and 1 FfxUInt32x2 sub_xy = ffxRemapForWaveReduction(localInvocationIndex % 64); FfxUInt32 x = sub_xy.x + 8 * ((localInvocationIndex >> 6) % 2); FfxUInt32 y = sub_xy.y + 8 * ((localInvocationIndex >> 7)); SpdDownsampleMips_0_1(x, y, workGroupID, localInvocationIndex, mips, slice); + // compute MIP level 2, 3, 4, 5 SpdDownsampleNextFour(x, y, workGroupID, localInvocationIndex, 2, mips, slice); if (mips <= 6) return; + // increase the global atomic counter for the given slice and check if it's the last remaining thread group: + // terminate if not, continue if yes. if (SpdExitWorkgroup(numWorkGroups, localInvocationIndex, slice)) return; + // reset the global atomic counter back to 0 for the next spd dispatch SpdResetAtomicCounter(slice); - // After mip 6 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // After mip 5 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // compute MIP level 6 and 7 SpdDownsampleMips_6_7(x, y, mips, slice); + // compute MIP level 8, 9, 10, 11 SpdDownsampleNextFour(x, y, FfxUInt32x2(0, 0), localInvocationIndex, 8, mips, slice); } - +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// @param [in] workGroupOffset the work group offset. it's (0,0) in case the entire input texture is downsampled. +/// +/// @ingroup FfxGPUSpd void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice, FfxUInt32x2 workGroupOffset) { SpdDownsample(workGroupID + workGroupOffset, localInvocationIndex, mips, numWorkGroups, slice); @@ -528,13 +578,13 @@ void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxU FfxFloat16x4 SpdReduceQuadH(FfxFloat16x4 v) { -#if defined(FFX_GLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) FfxFloat16x4 v0 = v; FfxFloat16x4 v1 = subgroupQuadSwapHorizontal(v); FfxFloat16x4 v2 = subgroupQuadSwapVertical(v); FfxFloat16x4 v3 = subgroupQuadSwapDiagonal(v); return SpdReduce4H(v0, v1, v2, v3); -#elif defined(FFX_HLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#elif defined(FFX_HLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) // requires SM6.0 FfxUInt32 quad = WaveGetLaneIndex() & (~0x3); FfxFloat16x4 v0 = v; @@ -603,7 +653,7 @@ FfxFloat16x4 SpdReduceLoadSourceImage4H(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt3 FfxFloat16x4 SpdReduceLoadSourceImageH(FfxUInt32x2 base, FfxUInt32 slice) { -#ifdef SPD_LINEAR_SAMPLER +#if defined(SPD_LINEAR_SAMPLER) return SpdLoadSourceImageH(FfxInt32x2(base), slice); #else return SpdReduceLoadSourceImage4H(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); @@ -685,16 +735,16 @@ void SpdDownsampleMips_0_1_LDSH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupI if (mips <= 1) return; - for (FfxInt32 i = 0; i < 4; i++) + for (FfxUInt32 i = 0; i < 4; i++) { SpdStoreIntermediateH(x, y, v[i]); - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); if (localInvocationIndex < 64) { v[i] = SpdReduceIntermediateH(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x + (i % 2) * 8, y + (i / 2) * 8), v[i], 1, slice); } - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); } if (localInvocationIndex < 64) @@ -708,7 +758,7 @@ void SpdDownsampleMips_0_1_LDSH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupI void SpdDownsampleMips_0_1H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) SpdDownsampleMips_0_1_LDSH(x, y, workGroupID, localInvocationIndex, mips, slice); #else SpdDownsampleMips_0_1_IntrinsicsH(x, y, workGroupID, localInvocationIndex, mips, slice); @@ -718,7 +768,7 @@ void SpdDownsampleMips_0_1H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, F void SpdDownsampleMip_2H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 64) { FfxFloat16x4 v = SpdReduceIntermediateH(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); @@ -747,7 +797,7 @@ void SpdDownsampleMip_2H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxU void SpdDownsampleMip_3H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 16) { // x 0 x 0 @@ -787,7 +837,7 @@ void SpdDownsampleMip_3H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxU void SpdDownsampleMip_4H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 4) { // x 0 0 0 x 0 0 0 @@ -820,7 +870,7 @@ void SpdDownsampleMip_4H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxU void SpdDownsampleMip_5H(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 1) { // x x x x 0 ... @@ -877,53 +927,83 @@ void SpdDownsampleNextFourH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, F { if (mips <= baseMip) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_2H(x, y, workGroupID, localInvocationIndex, baseMip, slice); if (mips <= baseMip + 1) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_3H(x, y, workGroupID, localInvocationIndex, baseMip + 1, slice); if (mips <= baseMip + 2) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_4H(x, y, workGroupID, localInvocationIndex, baseMip + 2, slice); if (mips <= baseMip + 3) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_5H(workGroupID, localInvocationIndex, baseMip + 3, slice); } +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// Uses half types. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// +/// @ingroup FfxGPUSpd void SpdDownsampleH(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice) { FfxUInt32x2 sub_xy = ffxRemapForWaveReduction(localInvocationIndex % 64); FfxUInt32 x = sub_xy.x + 8 * ((localInvocationIndex >> 6) % 2); FfxUInt32 y = sub_xy.y + 8 * ((localInvocationIndex >> 7)); + // compute MIP level 0 and 1 SpdDownsampleMips_0_1H(x, y, workGroupID, localInvocationIndex, mips, slice); + // compute MIP level 2, 3, 4, 5 SpdDownsampleNextFourH(x, y, workGroupID, localInvocationIndex, 2, mips, slice); if (mips < 7) return; + // increase the global atomic counter for the given slice and check if it's the last remaining thread group: + // terminate if not, continue if yes. if (SpdExitWorkgroup(numWorkGroups, localInvocationIndex, slice)) return; + // reset the global atomic counter back to 0 for the next spd dispatch SpdResetAtomicCounter(slice); - // After mip 6 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // After mip 5 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // compute MIP level 6 and 7 SpdDownsampleMips_6_7H(x, y, mips, slice); + // compute MIP level 8, 9, 10, 11 SpdDownsampleNextFourH(x, y, FfxUInt32x2(0, 0), localInvocationIndex, 8, mips, slice); } +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// Uses half types. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// @param [in] workGroupOffset the work group offset. it's (0,0) in case the entire input texture is downsampled. +/// +/// @ingroup FfxGPUSpd void SpdDownsampleH(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice, FfxUInt32x2 workGroupOffset) { SpdDownsampleH(workGroupID + workGroupOffset, localInvocationIndex, mips, numWorkGroups, slice); } #endif // #if FFX_HALF -#endif // #ifdef FFX_GPU +#endif // #if defined(FFX_GPU) diff --git a/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta b/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta new file mode 100644 index 0000000..8d4e716 --- /dev/null +++ b/Assets/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: face65176ee3b82498bd0b8fed0ddacd +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md index dcc6597..5cb4f7d 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -# FSR 2.2 for Unity +# FSR 3.0 Upscaler for Unity -FidelityFX Super Resolution 2 (FSR2) is an advanced image upscaling and temporal reconstruction technique developed by AMD and [released as open source](https://github.com/GPUOpen-Effects/FidelityFX-FSR2). It provides both high-quality anti-aliasing and the ability for games to output at high resolutions while rendering at a lower internal resolution, improving performance. +FidelityFX Super Resolution 3 (FSR3) Upscaler is an advanced image upscaling and temporal reconstruction technique developed by AMD and [released as open source](https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/tree/release-FSR3-3.0.3) through the GPUOpen initiative. It provides both high-quality anti-aliasing and the ability for games to output at high resolutions while rendering at a lower internal resolution, improving performance. -This project aims to bring FSR2 to Unity, as an alternative to Unity's existing FXAA, SMAA and TAA anti-aliasing solutions. Compared to Unity's TAA implementation, FSR2 offers a sharper and more stable image, with a better sub-pixel detail resolve and better performance due to its reliance on upscaling. +This project aims to bring FSR3 upscaling to Unity as an alternative to Unity's existing FXAA, SMAA and TAA anti-aliasing solutions. Compared to Unity's TAA implementation, FSR3 Upscaler offers a sharper and more stable image, with a better sub-pixel detail resolve and better performance due to its reliance on upscaling. ![Comparison](images/comparison.png) -Rather than attempting to integrate AMD's open source C++ libraries for FSR2, this project instead reimplements the C++ backend in C# while adapting FSR2's HLSL shader code to work within Unity. This allows for maximum compatibility with the platforms and graphics APIs that Unity supports, including ones that normally wouldn't be supported by FSR2. +Rather than attempting to integrate AMD's open source C++ libraries for FSR3, this project instead reimplements the C++ backend in C# while adapting FSR3's HLSL shader code to work within Unity. This allows for maximum compatibility with the platforms and graphics APIs that Unity supports, including ones that normally wouldn't be supported by FSR3. -Focus of this project lies initially on making FSR2 work with the traditional Unity built-in render pipeline. However the core FSR2 classes are render pipeline-agnostic, so there is every possibility for URP and HDRP to be supported as well in the future. +Focus of this project lies initially on making FSR3 Upscaler work with the traditional Unity built-in render pipeline. However the core FSR3 Upscaler classes are render pipeline-agnostic, so there is every possibility for URP and HDRP to be supported as well in the future. ## Table of Contents @@ -31,9 +31,9 @@ Focus of this project lies initially on making FSR2 work with the traditional Un ## Requirements -FSR2 for Unity requires Unity 2020.1 or higher. This version of Unity added support for the `multi_compile` keyword in compute shaders, which the FSR2 implementation makes use of. +FSR3 Upscaler for Unity requires Unity 2020.1 or higher. This version of Unity added support for the `multi_compile` keyword in compute shaders, which the FSR3 Upscaler implementation makes use of. -Other than the above, requirements are no different from normal FSR2: it requires a GPU with compute shader support, typed UAV load and R16G16B16A16_UNORM support. In practice, almost every GPU made in the past decade will be able to run it. +Other than the above, requirements are no different from standard FSR3 Upscaler: it requires a GPU with compute shader support, typed UAV load and R16G16B16A16_UNORM support. In practice, almost every GPU made in the past decade will be able to run it. Platforms tested and confirmed working: - Windows @@ -60,57 +60,53 @@ Platforms tested and confirmed working: The exact hardware requirements for mobile devices (Android and iOS) are still to be determined. -Note that OpenGL on MacOS does not support compute shaders, so it will never be able to run FSR2. +Note that OpenGL on MacOS does not support compute shaders, so it will never be able to run FSR3 Upscaler. ## Integration -Integration generally follows the same guidelines as the [FSR2 documentation on Github](https://github.com/GPUOpen-Effects/FidelityFX-FSR2#integration-guidelines), with a few specifics for the Unity implementation. +Integration generally follows the same guidelines as the [FSR3 Upscaler documentation by GPUOpen](https://gpuopen.com/manuals/fidelityfx_sdk/fidelityfx_sdk-page_techniques_super-resolution-upscaler/#integration-guidelines), with a few specifics for the Unity implementation. ### Built-in Render Pipeline -To apply FSR2 to a camera, simply add the `Fsr2ImageEffect` script to your camera game object. It should be placed at the bottom of the components list, to ensure that it's the last image effect in the chain. +To apply FSR3 Upscaler to a camera, simply add the `Fsr3UpscalerImageEffect` script to your camera game object. It should be placed at the bottom of the components list, to ensure that it's the last image effect in the chain. ![Simple Camera Setup](images/camera-simple.png) -This component contains settings for changing the scaling factor (Quality Mode), enabling or disabling various features, and for providing certain optional inputs that are further explained below. +This component contains settings for changing the scaling factor (Quality Mode), enabling or disabling various features, and for providing certain optional inputs that are further explained below. Be sure that the Assets field contains a valid reference to an `Fsr3UpscalerAssets` object. This should get filled in automatically when creating the component. -If you have any other post-processing effects on your camera that make use of the `OnPreCull` method, then also add the `Fsr2ImageEffectHelper` script to the camera and move it up, above those other post-processing effects. Specifically: it needs to be above any script that queries the camera's viewport size properties (i.e. `rect`, `pixelRect`, `pixelWidth`/`Height`) in `OnPreCull`. Unity's `PostProcessLayer` script is a particularly good example of this. +If you have any other post-processing effects on your camera that make use of the `OnPreCull` method, then also add the `Fsr3UpscalerImageEffectHelper` script to the camera and move it up, above those other post-processing effects. Specifically: it needs to be above any script that queries the camera's viewport size properties (i.e. `rect`, `pixelRect`, `pixelWidth`/`Height`) in `OnPreCull`. Unity's `PostProcessLayer` script is a particularly good example of this. ![PPV2 Camera Setup](images/camera-ppv2.png) -Also make sure that any other anti-aliasing methods (MSAA, FXAA, SMAA, TAA) are disabled when enabling FSR2. +Also make sure that any other anti-aliasing methods (MSAA, FXAA, SMAA, TAA) are disabled when enabling FSR3 Upscaler. ### Post-Processing Stack V2 -FSR2 for Unity is also available as a full integration into the Post-Processing Stack V2 (PPV2) from Unity. This integration gets closer to the ideal placement in the render pipeline [as recommended by the FSR2 documentation](https://github.com/GPUOpen-Effects/FidelityFX-FSR2#placement-in-the-frame). The post-processing effects from PPV2 are split into groups before and after upscaling, meaning that effects that should be applied at full resolution (e.g. film grain, bloom, depth of field, motion blur) are indeed applied on the full resolution upscaled image. +FSR3 Upscaler for Unity is also available as a full integration into the Post-Processing Stack V2 (PPV2) from Unity. This integration gets closer to the ideal placement in the render pipeline [as recommended by the FSR3 Upscaler documentation](https://gpuopen.com/manuals/fidelityfx_sdk/fidelityfx_sdk-page_techniques_super-resolution-upscaler/#placement-in-the-frame). The post-processing effects from PPV2 are split into groups before and after upscaling, meaning that effects that should be applied at full resolution (e.g. film grain, bloom, depth of field, motion blur) are indeed applied on the full resolution upscaled image. -Post-Processing Stack V2 with FSR2 is intended to be used as a drop-in replacement package for the official PPV2 package from Unity. It can be [downloaded from the Releases page](https://github.com/ndepoel/FSR2Unity/releases/latest) and should be extracted into the `Packages` directory of your project. From there it will automatically get picked up by Unity when you refresh your project. +Post-Processing Stack V2 with FSR3 Upscaler is intended to be used as a drop-in replacement package for the official PPV2 package from Unity. It can be [downloaded from the Releases page](https://github.com/ndepoel/FSR2Unity/releases/latest) and should be extracted into the `Packages` directory of your project. From there it will automatically get picked up by Unity when you refresh your project. -When the package is installed correctly, FSR2 should appear as an Anti-aliasing Mode on the Post-process Layer component: +When the package is installed correctly, 'FidelityFX Super Resolution 3 (FSR3) Upscaler' should appear as an Anti-aliasing Mode on the Post-process Layer component: -![FSR2 Anti-aliasing Mode](images/ppv2layer.png) +![FSR3 Upscaler Anti-aliasing Mode](images/ppv2layer.png) -From here you can configure the usual FSR2 settings, including quality mode, sharpness, exposure and reactive mask. +From here you can configure the usual FSR3 Upscaler settings, including quality mode, sharpness, exposure and reactive mask. ### Callbacks -FSR2 for Unity requires the application to provide a few services that it can't make any assumptions about itself. For this purpose, it exposes an `IFsr2Callbacks` interface with a default implementation `Fsr2CallbacksBase`. The application can provide these callbacks by either implementing the `IFsr2Callbacks` interface or inheriting the `Fsr2CallbacksBase` class and overriding one or more methods. Assign these callbacks to the `Callbacks` property on the `Fsr2ImageEffect` script component, before the script is enabled. - -#### Resource management - -By default, FSR2 for Unity loads its shaders directly from a Resources folder. This is not recommended behavior and many applications choose to manage shaders in a different way. To accomodate this, FSR2 for Unity makes it possible to override the methods by which shaders are loaded and unloaded. For example, they may be loaded from an asset bundle instead. +FSR3 Upscaler for Unity requires the application to provide a few services that it can't make any assumptions about itself. For this purpose, it exposes an `IFsr3UpscalerCallbacks` interface with a default implementation `Fsr3UpscalerCallbacksBase`. The application can provide these callbacks by either implementing the `IFsr3UpscalerCallbacks` interface or inheriting the `Fsr3UpscalerCallbacksBase` class and overriding one or more methods. Assign these callbacks to the `Callbacks` property on the `Fsr3UpscalerImageEffect` script component, before the script is enabled. #### Mipmap biasing -One key part of FSR2 is adjusting the mipmap bias of textures. Normally when lowering the rendering resolution, Unity will also sample textures at lower mipmap levels to prevent texture aliasing. When upscaling is in use, this will result in noticeably blurry textures. To combat this, FSR2 suggests that applications adjust the mipmap bias for texture content in the scene that is to be upscaled. This is [further explained in the FSR2 documentation](https://github.com/GPUOpen-Effects/FidelityFX-FSR2#mipmap-biasing). +One key part of FSR3 Upscaler is adjusting the mipmap bias of textures. Normally when lowering the rendering resolution, Unity will also sample textures at lower mipmap levels to prevent texture aliasing. When upscaling is in use, this will result in noticeably blurry textures. To combat this, FSR3 suggests that applications adjust the mipmap bias for texture content in the scene that is to be upscaled. This is [further explained in the FSR3 Upscaler documentation](https://gpuopen.com/manuals/fidelityfx_sdk/fidelityfx_sdk-page_techniques_super-resolution-upscaler/#mipmap-biasing). Unfortunately Unity has no single unified way to identify textures that are part of the 3D scene, nor does it offer a way to set a global mipmap bias at run-time. There are also many different ways in which textures may be applied to a scene, depending on which third-party asset packages the application chooses to use. This makes the implementation of texture mipmap biasing a highly application-specific thing. -The default implementation in `Fsr2CallbackBase` will very naively look up every `Texture2D` object in the current scene and apply the mipmap bias offset to it. This generally works fine but it will also include textures that shouldn't have the mipmap bias applied (e.g. UI textures) and potentially misses textures that should have the mipmap bias applied (e.g. texture arrays for terrain rendering). You will want to override this callback to more selectively specify the textures that need to have this mipmap bias applied, and possibly store the current mipmap bias value to retroactively apply it to assets that are loaded on demand. +The default implementation in `Fsr3UpscalerCallbacksBase` will very naively look up every `Texture2D` object in the current scene and apply the mipmap bias offset to it. This generally works fine but it will also include textures that shouldn't have the mipmap bias applied (e.g. UI textures) and potentially misses textures that should have the mipmap bias applied (e.g. texture arrays for terrain rendering). You will want to override this callback to more selectively specify the textures that need to have this mipmap bias applied, and possibly store the current mipmap bias value to retroactively apply it to assets that are loaded on demand. ### Motion vectors -FSR2 relies on depth and motion vector data to track pixels across frames and to detect areas that 'became visible' on the current frame and therefore should not be reconstructed using historical data. For all of this to work properly, it is very important that the application renders correct motion vector data for all moving objects in the scene, in addition to camera motion vectors. +FSR3 Upscaler relies on depth and motion vector data to track pixels across frames and to detect areas that 'became visible' on the current frame and therefore should not be reconstructed using historical data. For all of this to work properly, it is very important that the application renders correct motion vector data for all moving objects in the scene, in addition to camera motion vectors. Unfortunately not all community-made Unity asset packages have gotten the message that temporal image techniques are here to stay, and either don't output motion vectors from their shaders or poorly document how this is enabled. This is not helped by Unity itself being rather obscure in how motion vectors are to be rendered and accessed. @@ -124,9 +120,9 @@ Again, make sure that all of your moving objects render motion vectors and compl ### Reactive mask -The reactive mask is a special input texture that tells FSR2 how much of the current frame should be taken into account when reconstructing each pixel. This is important when reconstructing pixels containing transparency effects, such as glass, water or particles. Transparencies are usually not rendered to motion vectors (and even if they did it wouldn't match the opaque content behind the transparent object), so FSR2 has no way to track these pixels across frames. +The reactive mask is a special input texture that tells the FSR3 Upscaler how much of the current frame should be taken into account when reconstructing each pixel. This is important when reconstructing pixels containing transparency effects, such as glass, water or particles. Transparencies are usually not rendered to motion vectors (and even if they did it wouldn't match the opaque content behind the transparent object), so FSR3 Upscaler has no way to track these pixels across frames. -Here is an example of a transparent particle effect upscaled by FSR2 without a reactive mask applied: +Here is an example of a transparent particle effect upscaled by FSR3 Upscaler without a reactive mask applied: ![No Reactive Mask](images/reactive-none.png) @@ -138,9 +134,9 @@ A reactive mask can be provided in two different ways. The easiest way is to mak The artifacting is mostly gone but the particles remain somewhat blurry and streaky. -Enabling the auto-generate reactive mask feature is as simple as ticking the corresponding checkbox on the `Fsr2ImageEffect` script. This will automatically capture the opaque-only image on the `BeforeForwardAlpha` camera event and dispatch the relevant compute shader when it's time to apply FSR2 upscaling. There are various parameters available for tweaking the auto-generate process, however what these values do is rather poorly documented. The defaults should give decent results in most cases. +Enabling the auto-generate reactive mask feature is as simple as ticking the corresponding checkbox on the `Fsr3UpscalerImageEffect` script. This will automatically capture the opaque-only image on the `BeforeForwardAlpha` camera event and dispatch the relevant compute shader when it's time to apply the FSR3 Upscaler. There are various parameters available for tweaking the auto-generate process, however what these values do is rather poorly documented. The defaults should give decent results in most cases. -The other way to provide a reactive mask is by generating one yourself. Essentially, you need to have your transparent shaders output directly to a reactive mask texture with a value representing both the pixel's luminance and opacity values. The FSR2 sample does this as follows: +The other way to provide a reactive mask is by generating one yourself. Essentially, you need to have your transparent shaders output directly to a reactive mask texture with a value representing both the pixel's luminance and opacity values. The FSR3 Upscaler sample does this as follows: output.reactiveMask = max( output.color.r, max( output.color.g, output.color.b ) ) * albedo.a; @@ -148,29 +144,29 @@ Of course this means that you have to modify your application's shaders to outpu ![Manual Reactive Mask](images/reactive-manual.png) -The manually generated reactive mask can be supplied to the `Fsr2ImageEffect` script through its Reactive Mask texture parameter. +The manually generated reactive mask can be supplied to the `Fsr3UpscalerImageEffect` script through its Reactive Mask texture parameter. ### Exposure -FSR2 accepts a 1x1 input texture containing an exposure value for the current frame. Typically this exposure value is output by an eye adaptation shader, as is the case with PPV2's Auto Exposure effect. The need for this exposure value in FSR2 isn't immediately obvious, so I'll try to explain. +FSR3 Upscaler accepts a 1x1 input texture containing an exposure value for the current frame. Typically this exposure value is output by an eye adaptation shader, as is the case with PPV2's Auto Exposure effect. The need for this exposure value by the FSR3 Upscaler isn't immediately obvious, so I'll try to explain. -Imagine walking from a bright outdoors area into a dark tunnel and standing still while the camera adjusts to the darkness. Without any additional information, FSR2 will see the pixels changing as the picture becomes brighter and will attempt to temporally reconstruct the intended image. This reconstruction is visible as a slight fizzling effect, especially on lower resolutions, lower framerates and lower quality modes. In a situation like this, FSR2 needs to be told that it's not the geometry that is changing but rather the light level. +Imagine walking from a bright outdoors area into a dark tunnel and standing still while the camera adjusts to the darkness. Without any additional information, the FSR3 Upscaler will see the pixels changing as the picture becomes brighter and will attempt to temporally reconstruct the intended image. This reconstruction is visible as a slight fizzling effect, especially on lower resolutions, lower framerates and lower quality modes. In a situation like this, FSR3 Upscaler needs to be told that it's not the geometry that is changing but rather the light level. -By providing FSR2 with the image's current exposure value, it can derive each pixel's original unadjusted color value and will be able to tell that the pixels are not actually changing. This results in a sharper and more stable image, without any temporal fizzling artifacts. +By providing the FSR3 Upscaler with the image's current exposure value, it can derive each pixel's original unadjusted color value and will be able to tell that the pixels are not actually changing. This results in a sharper and more stable image, without any temporal fizzling artifacts. -The exposure value can be supplied to the `Fsr2ImageEffect` script through its Exposure texture parameter. PPV2's Auto Exposure effect outputs a compatible texture, however this value is kept internal by PPV2 so it'll require some trickery to plug this into FSR2. It's also possible to allow FSR2 to compute an exposure value by itself by enabling the Auto Exposure feature, however results may vary and this feature has some issues on a couple of platforms. +The exposure value can be supplied to the `Fsr3UpscalerImageEffect` script through its Exposure texture parameter. PPV2's Auto Exposure effect outputs a compatible texture, however this value is kept internal by PPV2 so it'll require some trickery to plug this into the FSR3 Upscaler. It's also possible to allow FSR3 Upscaler to compute an exposure value by itself by enabling the Auto Exposure feature, however results may vary and this feature has some issues on a couple of platforms. ### Dynamic resolution -FSR2 for Unity supports dynamic resolution through Unity's `ScalableBufferManager` class. This is distinct from FSR2's own internal upscaling mechanism, which works by manipulating the camera's viewport size (see [Built-in Render Pipeline upscaling](#built-in-render-pipeline-upscaling)). The selected FSR2 quality mode determines the maximum render size that will be used by FSR2's upscaling; the dynamic resolution from `ScalableBufferManager` can be added on top of that to further reduce the actual render size on a frame-by-frame basis. +FSR3 Upscaler for Unity supports dynamic resolution through Unity's `ScalableBufferManager` class. This is distinct from FSR3 Upscaler's own internal resolution scaling mechanism, which works by manipulating the camera's viewport size (see [Built-in Render Pipeline upscaling](#built-in-render-pipeline-upscaling)). The selected quality mode determines the maximum render size that will be used by FSR3's upscaling; the dynamic resolution from `ScalableBufferManager` can be added on top of that to further reduce the actual render size on a frame-by-frame basis. -The use of `ScalableBufferManager` is not mandatory in any way, as this form of dynamic resolution is not supported by all graphics APIs in Unity. All that FSR2 does with it is: if `ScalableBufferManager` is supported, and the camera or render target has dynamic scaling enabled, then FSR2 will respect the width and height scale factors set by the application to reduce its internal render size. It is up to the application to control the dynamic resolution scale, for example by measuring GPU times using `FrameTimingManager` and adjusting the resolution according to a target framerate. +The use of `ScalableBufferManager` is not mandatory in any way, as this form of dynamic resolution is not supported by all graphics APIs in Unity. All that FSR3 Upscaler does with it is: if `ScalableBufferManager` is supported, and the camera or render target has dynamic scaling enabled, then FSR3 Upscaler will respect the width and height scale factors set by the application to reduce its internal render size. It is up to the application to control the dynamic resolution scale, for example by measuring GPU times using `FrameTimingManager` and adjusting the resolution according to a target framerate. -Dynamic resolution works really well in combination with FSR2. Any run-time change in resolution is barely noticeable due to FSR2's robust upscaling and image reconstruction, with only a small drop in texture sharpness that can be observed. It is recommended not to scale dynamic resolution below 50%, as the image reconstruction has trouble drawing a stable image below that figure. Typically scaling down to 70% provides the best balance between performance gain and maintaining image quality. +Dynamic resolution works really well in combination with FSR3 Upscaler. Any run-time change in resolution is barely noticeable due to FSR3's robust upscaling and image reconstruction, with only a small drop in texture sharpness that can be observed. It is recommended not to scale dynamic resolution below 50%, as the image reconstruction has trouble drawing a stable image below that figure. Typically scaling down to 70% provides the best balance between performance gain and maintaining image quality. ## Known issues -- Enabling Auto Exposure causes artifacting on OpenGL Core. +- Enabling Auto Exposure causes artifacting in OpenGL Core on Nvidia GPUs. It's uncertain what is causing this. Further investigation is required. Workaround: disable Auto Exposure on affected platforms. - Texture mipmap bias adjustment is not working on MacOS Metal. @@ -179,23 +175,23 @@ Dynamic resolution works really well in combination with FSR2. Any run-time chan ## Details on implementation -This section goes more in-depth on how the implementation of FSR2 into Unity was accomplished, as well as the rationale behind some of its design decisions. For more information on how the FSR2 algorithm itself works, see the [official documentation on Github](https://github.com/GPUOpen-Effects/FidelityFX-FSR2#the-technique). +This section goes more in-depth on how the implementation of FSR3 Upscaler into Unity was accomplished, as well as the rationale behind some of its design decisions. For more information on how the FSR3 Upscaler algorithm itself works, see the [official documentation on GPUOpen](https://gpuopen.com/manuals/fidelityfx_sdk/fidelityfx_sdk-page_techniques_super-resolution-upscaler/#the-technique). ### Supporting unsupported platforms -Officially, FSR2 only offers support for DX12 and Vulkan, with DX11 and Xbox implementations available at request for licensed developers. So how did we manage to get FSR2 working on OpenGL, MacOS and PlayStation? +Officially, FSR3 Upscaler only offers support for DX12 and Vulkan, with DX11 and Xbox implementations available at request for licensed developers. So how did we manage to get FSR3 upscaling working on OpenGL, MacOS and PlayStation? -FSR2 for Unity relies heavily on Unity's ability to cross-compile HLSL and translate code to other shader languages. As it turns out, FSR2's shader codebase consists largely of very straightforward and portable HLSL code. Only a few shader keywords were necessary to make these shaders compile for DX11 and OpenGL Core in Unity, with a couple of additional patches and hacks required to make them work in Metal and PSSL as well. Additionally by translating FSR2's C++ backend code to C# code using Unity's APIs, we take advantage of Unity's platform abstractions to implement compute shader dispatch and resource management for all the platforms that we want to support. +FSR3 Upscaler for Unity relies heavily on Unity's ability to cross-compile HLSL and translate code to other shader languages. As it turns out, FSR3's shader codebase consists largely of very straightforward and portable HLSL code. Only a few shader keywords were necessary to make these shaders compile for DX11 and OpenGL Core in Unity, with a couple of additional patches and hacks required to make them work in Metal and PSSL as well. Additionally by translating FSR3's C++ backend code to C# code using Unity's APIs, we take advantage of Unity's platform abstractions to implement compute shader dispatch and resource management for all the platforms that we want to support. -With Metal, the biggest limitation is the lack of support for atomic texture operations in Unity. FSR2's HLSL code uses three such operations: `InterlockedAdd`, `InterlockedMin` and `InterlockedMax`. These allow values to be accumulated between multiple threads, without the risk of one thread overwriting another thread's write actions. In order to "just make it compile" I redefined these functions as simple, non-atomic code blocks. This was already enough to make FSR2 work on Metal and there were no obvious visual issues caused by this hack. It should be possible to properly reimplement these atomic functions by using a compare-and-swap technique, but I've decided to leave well enough alone for now. +With Metal, the biggest limitation is the lack of support for atomic texture operations in Unity. FSR3 Upscaler's HLSL code uses three such operations: `InterlockedAdd`, `InterlockedMin` and `InterlockedMax`. These allow values to be accumulated between multiple threads, without the risk of one thread overwriting another thread's write actions. In order to "just make it compile" I redefined these functions as simple, non-atomic code blocks. This was already enough to make FSR3 Upscaler work on Metal and there were no obvious visual issues caused by this hack. It should be possible to properly reimplement these atomic functions by using a compare-and-swap technique, but I've decided to leave well enough alone for now. -For PSSL, the main missing element were type definitions for the various float and vector types that FSR2 uses. These are all defined in a single common header file (`ffx_common_types.h`) and are primarily aimed at HLSL and GLSL as expected. PSSL uses different type names so in order to make the FSR2 shaders compile for PS4/5, I added the required type definitions to this header file. Additionally, the FSR2 shader code uses two type qualifiers (`unorm` and `globallycoherent`) that PSSL doesn't understand. I simply defined these keywords as blanks, which was enough to make the shaders work. Again there is probably a proper way to redefine these keywords using PSSL equivalents, but I haven't found the correct ones yet. +For PSSL, the main missing element were type definitions for the various float and vector types that FSR3 uses. These are all defined in a single common header file (`ffx_common_types.h`) and are primarily aimed at HLSL and GLSL as expected. PSSL uses different type names so in order to make the FSR3 shaders compile for PS4/5, I added the required type definitions to this header file. Additionally, the FSR3 Upscaler shader code uses two type qualifiers (`unorm` and `globallycoherent`) that PSSL doesn't understand. I simply defined these keywords as blanks, which was enough to make the shaders work. Again there is probably a proper way to redefine these keywords using PSSL equivalents, but I haven't found the correct ones yet. -These hacks mean that technically speaking, the FSR2 shaders are not 'correct' on Metal and PSSL. However during my testing I have not seen any problems or visual artifacts caused by these modifications, and the results look as good as they do on any other platform. It's certainly possible that there are issues that I haven't seen yet, particularly in applications with heavy use of high contrast colors and HDR lighting, but until I see a clear example of this I'm going to leave things as-is. +These hacks mean that technically speaking, the FSR3 Upscaler shaders are not 'correct' on Metal and PSSL. However during my testing I have not seen any problems or visual artifacts caused by these modifications, and the results look as good as they do on any other platform. It's certainly possible that there are issues that I haven't seen yet, particularly in applications with heavy use of high contrast colors and HDR lighting, but until I see a clear example of this I'm going to leave things as-is. ### Built-in Render Pipeline upscaling -FSR2 for Unity performs upscaling by manipulating the camera's viewport parameters ahead of rendering, then restoring them during the post-processing phase and outputting the upscaled image directly to the camera's backbuffer. This approach has several advantages and drawbacks: +FSR3 Upscaler for Unity performs upscaling by manipulating the camera's viewport parameters ahead of rendering, then restoring them during the post-processing phase and outputting the upscaled image directly to the camera's backbuffer. This approach has several advantages and drawbacks: Advantages: - It's very simple and works well together with most other rendering effects. @@ -205,26 +201,26 @@ Advantages: Drawbacks: - The upscaled output cannot be blitted back to the camera's target texture, it can only be blitted directly to the backbuffer. -- Consequently, FSR2 upscaling has to be the last image effect in the camera's post-processing chain. -- This makes it difficult to apply additional post-processing effects after FSR2 upscaling. +- Consequently, FSR3 Upscaler has to be the last image effect in the camera's post-processing chain. +- This makes it difficult to apply additional post-processing effects after FSR3 upscaling. -It is now possible to have FSR2 output to a camera target texture, but this is accomplished by taking over control of the target texture and removing it from the camera. This allows the upscaled output to be used as a render texture on a different camera (e.g. for UI usage), but it does not remove the limitation of FSR2 having to be the last image effect on its camera. +It is possible to have FSR3 Upscaler output to a camera target texture, but this is accomplished by taking over control of the target texture and removing it from the camera. This allows the upscaled output to be used as a render texture on a different camera (e.g. for UI usage), but it does not remove the limitation of FSR3 Upscaler having to be the last image effect on its camera. Initial prototypes of the upscaler used a two-camera setup with an intermediate render texture created at runtime. This approach worked, but it had several problems: - It added a lot of complexity of having to create and manage an additional camera. - It added extra rendering overhead; Unity cameras will always render *something* even if you tell it not to draw anything (Clear Flags set to Don't Clear, Culling Mask set to Nothing, etc) and that had a visible performance impact in the GPU profiler. -- It doesn't work well on all platforms. Particularly on Xbox One, Unity has some unsolved issues with render texture blitting when ESRAM usage is enabled. This was causing jittering artifacts when FSR2 upscaling was in use. Disabling ESRAM solved the problem, but at the cost of measurably worse rendering performance. +- It doesn't work well on all platforms. Particularly on Xbox One, Unity has some unsolved issues with render texture blitting when ESRAM usage is enabled. This was causing jittering artifacts when FSR3 Upscaler was in use. Disabling ESRAM solved the problem, but at the cost of measurably worse rendering performance. -Unity also offers a dynamic resolution system (through `ScalableBufferManager`) which would be a good fit for upscaling techniques, but the problem there is that it's not supported on every platform. In particular DirectX 11 on Windows does not support `ScalableBufferManager`, which is a deal breaker. Additionally `ScalableBufferManager` has a long-standing issue where UI gets scaled as well, even if the UI camera is set not to allow dynamic resolution. +Unity also offers a dynamic resolution system (through `ScalableBufferManager`) which would be a good fit for upscaling techniques, but the problem there is that it's not supported on every platform. In particular DirectX 11 on Windows does not support `ScalableBufferManager`, which is a deal breaker. Additionally `ScalableBufferManager` has a long-standing issue where UI gets scaled as well, even if the UI camera is set not to allow dynamic resolution scaling. After looking around for alternative solutions, I came across this discussion: https://answers.unity.com/questions/1322637/best-way-to-downsample-camera-viewport.html. Using camera viewport rect manipulation turned out to be an easy, unassuming and unintrusive solution offering the best balance of platform support, performance and simplicity. ### 16-bit Floating Point support -FSR2 supports the use of half-precision floating point calculations (or FP16) by enabling the `FFX_HALF` keyword on its shaders. This allows FSR2 to take advantage of double-rate floating point operations on modern graphics cards to improve performance. +FSR3 Upscaler supports the use of half-precision floating point calculations (or FP16) by enabling the `FFX_HALF` keyword on its shaders. This allows FSR3 Upscaler to take advantage of double-rate floating point operations on modern graphics cards to improve performance. -FSR2 for Unity supports enabling FP16 too, however the feature is rendered practically useless by how Unity compiles shaders. By default on most non-mobile platforms, any half-precision variables and operations are compiled as 32-bit floating point anyway by Unity's shader compiler. This means on those platforms, FSR2's shaders will behave the same regardless of whether the `FFX_HALF` keyword is enabled or not. +FSR3 Upscaler for Unity supports enabling FP16 too, however the feature is rendered practically useless by how Unity compiles shaders. By default on most non-mobile platforms, any half-precision variables and operations are compiled as 32-bit floating point anyway by Unity's shader compiler. This means on those platforms, FSR3's shaders will behave the same regardless of whether the `FFX_HALF` keyword is enabled or not. There are some exceptions however. First of all, mobile platforms should see an improvement from enabling FP16. Secondly, because the PlayStation platforms received their own custom floating point type definitions, these are not automatically detected and translated to 32-bit floating point types by Unity. This means that on PS4 Pro and PS5, enabling FP16 may have an effect and indeed, on PS5 a measurable performance improvement was observed. -Thirdly, FSR2 for Unity includes experimental support for the DXC shader compiler. Using this alternative shader compiler allows use of certain advanced shader features, such as wave operations and 16-bit floating point operations. The downside of using this compiler is that platform support is very limited; for instance DXC completely breaks DirectX 11 support, which makes it impossible to endorse the use of it. If you're not worried about this and only target platforms covered by the DXC compiler, then it may be worth enabling it in the `ffx_fsr2_unity_common.cginc` shader source file, enabling FP16 support in the inspector and measuring what the effect on performance is. +Thirdly, FSR3 Upscaler for Unity includes experimental support for the DXC shader compiler. Using this alternative shader compiler allows use of certain advanced shader features, such as wave operations and 16-bit floating point operations. The downside of using this compiler is that platform support is very limited; for instance DXC completely breaks DirectX 11 support, which makes it impossible to endorse the use of it. If you're not worried about this and only target platforms covered by the DXC compiler, then it may be worth enabling it in the `ffx_fsr3upscaler_unity_common.cginc` shader source file, enabling FP16 support in the inspector and measuring what the effect on performance is. diff --git a/com.unity.postprocessing/CHANGELOG.md b/com.unity.postprocessing/CHANGELOG.md index 12023f3..10b262d 100644 --- a/com.unity.postprocessing/CHANGELOG.md +++ b/com.unity.postprocessing/CHANGELOG.md @@ -4,10 +4,18 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [3.3.1] - 2023-06-02 +## [3.4.0] - 2023-12-11 + +### Added +- Added WebGPU support ### Fixed -- Fixed obsolete FormatUsage bug +- Fixed obsolete FormatUsage error +- Fixed non-scalar logical operation error +- Fixed MSVO to support platforms with limited storage texture support +- Fixed compute based effects not supported on WebGL and Android OpenGL (IN-2999) +- Fixed grid gizmo is visible through geometry when Post Process Layer is enabled (IN-10318) +- Fixed transparent objects rendering incorrectly when TAA is disabled (IN-31494) ## [3.3.0] - 2023-05-11 diff --git a/com.unity.postprocessing/LICENSE.md b/com.unity.postprocessing/LICENSE.md index bab8330..0ceebee 100644 --- a/com.unity.postprocessing/LICENSE.md +++ b/com.unity.postprocessing/LICENSE.md @@ -1,4 +1,4 @@ -com.unity.postprocessing copyright © 2020 Unity Technologies ApS +com.unity.postprocessing copyright © 2023 Unity Technologies Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). diff --git a/com.unity.postprocessing/PostProcessing/Editor/Effects/AmbientOcclusionEditor.cs b/com.unity.postprocessing/PostProcessing/Editor/Effects/AmbientOcclusionEditor.cs index ecb253d..e329c3f 100644 --- a/com.unity.postprocessing/PostProcessing/Editor/Effects/AmbientOcclusionEditor.cs +++ b/com.unity.postprocessing/PostProcessing/Editor/Effects/AmbientOcclusionEditor.cs @@ -49,10 +49,14 @@ namespace UnityEditor.Rendering.PostProcessing } else if (aoMode == (int)AmbientOcclusionMode.MultiScaleVolumetricObscurance) { - if (!SystemInfo.supportsComputeShaders || EditorUtilities.isTargetingWebGL) + if (!SystemInfo.supportsComputeShaders) { EditorGUILayout.HelpBox("Multi-scale volumetric obscurance requires compute shader support which is not available on this platform.", MessageType.Error); } + else if (EditorUtilities.isTargetingWebGL) + { + EditorGUILayout.HelpBox("Multi-scale volumetric obscurance requires compute shader support (WebGPU) when running on Web.", MessageType.Warning); + } else if(EditorUtilities.isTargetingAndroid) { EditorGUILayout.HelpBox("Multi-scale volumetric obscurance requires compute shader support (Vulkan) when running on Android.", MessageType.Warning); diff --git a/com.unity.postprocessing/PostProcessing/Editor/Effects/AutoExposureEditor.cs b/com.unity.postprocessing/PostProcessing/Editor/Effects/AutoExposureEditor.cs index 559cf51..ae2e1bd 100644 --- a/com.unity.postprocessing/PostProcessing/Editor/Effects/AutoExposureEditor.cs +++ b/com.unity.postprocessing/PostProcessing/Editor/Effects/AutoExposureEditor.cs @@ -31,10 +31,14 @@ namespace UnityEditor.Rendering.PostProcessing public override void OnInspectorGUI() { - if (!SystemInfo.supportsComputeShaders || EditorUtilities.isTargetingWebGL) + if (!SystemInfo.supportsComputeShaders) { EditorGUILayout.HelpBox("Auto exposure requires compute shader support which is not available on this platform.", MessageType.Error); } + else if (EditorUtilities.isTargetingWebGL) + { + EditorGUILayout.HelpBox("Auto exposure requires compute shader support (WebGPU) when running on Web.", MessageType.Warning); + } else if (EditorUtilities.isTargetingAndroid) { EditorGUILayout.HelpBox("Auto exposure requires compute shader support (Vulkan) when running on Android.", MessageType.Warning); diff --git a/com.unity.postprocessing/PostProcessing/Editor/PostProcessLayerEditor.cs b/com.unity.postprocessing/PostProcessing/Editor/PostProcessLayerEditor.cs index 20f363c..691483d 100644 --- a/com.unity.postprocessing/PostProcessing/Editor/PostProcessLayerEditor.cs +++ b/com.unity.postprocessing/PostProcessing/Editor/PostProcessLayerEditor.cs @@ -62,7 +62,7 @@ namespace UnityEditor.Rendering.PostProcessing new GUIContent("Fast Approximate Anti-aliasing (FXAA)"), new GUIContent("Subpixel Morphological Anti-aliasing (SMAA)"), new GUIContent("Temporal Anti-aliasing (TAA)"), - new GUIContent("FidelityFX Super Resolution 2 (FSR2)") + new GUIContent("FidelityFX Super Resolution 3 (FSR3) Upscaler") }; enum ExportMode diff --git a/com.unity.postprocessing/PostProcessing/PostProcessResources.asset b/com.unity.postprocessing/PostProcessing/PostProcessResources.asset index ae78db2..835a2eb 100644 --- a/com.unity.postprocessing/PostProcessing/PostProcessResources.asset +++ b/com.unity.postprocessing/PostProcessing/PostProcessResources.asset @@ -3,8 +3,9 @@ --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 @@ -92,19 +93,15 @@ MonoBehaviour: bloom: {fileID: 4800000, guid: c1e1d3119c6fd4646aea0b4b74cacc1a, type: 3} copy: {fileID: 4800000, guid: cdbdb71de5f9c454b980f6d0e87f0afb, type: 3} copyStd: {fileID: 4800000, guid: 4bf4cff0d0bac3d43894e2e8839feb40, type: 3} - copyStdFromTexArray: {fileID: 4800000, guid: 02d2da9bc88d25c4d878c1ed4e0b3854, - type: 3} - copyStdFromDoubleWide: {fileID: 4800000, guid: e8ce9961912f3214586fe8709b9012c1, - type: 3} + copyStdFromTexArray: {fileID: 4800000, guid: 02d2da9bc88d25c4d878c1ed4e0b3854, type: 3} + copyStdFromDoubleWide: {fileID: 4800000, guid: e8ce9961912f3214586fe8709b9012c1, type: 3} discardAlpha: {fileID: 4800000, guid: 5ab0816423f0dfe45841cab3b05ec9ef, type: 3} depthOfField: {fileID: 4800000, guid: 0ef78d24e85a44f4da9d5b5eaa00e50b, type: 3} finalPass: {fileID: 4800000, guid: f75014305794b3948a3c6d5ccd550e05, type: 3} grainBaker: {fileID: 4800000, guid: 0d8afcb51cc9f0349a6d190da929b838, type: 3} motionBlur: {fileID: 4800000, guid: 2c459b89a7c8b1a4fbefe0d81341651c, type: 3} - temporalAntialiasing: {fileID: 4800000, guid: 51bcf79c50dc92e47ba87821b61100c3, - type: 3} - subpixelMorphologicalAntialiasing: {fileID: 4800000, guid: 81af42a93ade3dd46a9b583d4eec76d6, - type: 3} + temporalAntialiasing: {fileID: 4800000, guid: 51bcf79c50dc92e47ba87821b61100c3, type: 3} + subpixelMorphologicalAntialiasing: {fileID: 4800000, guid: 81af42a93ade3dd46a9b583d4eec76d6, type: 3} texture2dLerp: {fileID: 4800000, guid: 34a819c9e33402547a81619693adc8d5, type: 3} uber: {fileID: 4800000, guid: 382151503e2a43a4ebb7366d1632731d, type: 3} lut2DBaker: {fileID: 4800000, guid: 7ad194cbe7d006f4bace915156972026, type: 3} @@ -116,8 +113,7 @@ MonoBehaviour: deferredFog: {fileID: 4800000, guid: 4117fce9491711c4094d33a048e36e73, type: 3} scalableAO: {fileID: 4800000, guid: d7640629310e79646af0f46eb55ae466, type: 3} multiScaleAO: {fileID: 4800000, guid: 67f9497810829eb4791ec19e95781e51, type: 3} - screenSpaceReflections: {fileID: 4800000, guid: f997a3dc9254c44459323cced085150c, - type: 3} + screenSpaceReflections: {fileID: 4800000, guid: f997a3dc9254c44459323cced085150c, type: 3} computeShaders: autoExposure: {fileID: 7200000, guid: 34845e0ca016b7448842e965db5890a5, type: 3} exposureHistogram: {fileID: 7200000, guid: 8c2fcbdf9bc58664f89917f7b9d79501, type: 3} @@ -126,30 +122,17 @@ MonoBehaviour: gammaHistogram: {fileID: 7200000, guid: 18183ebfeeab97749b43e38b928604a7, type: 3} waveform: {fileID: 7200000, guid: 92c63830cd50c0b4fbb8233613839958, type: 3} vectorscope: {fileID: 7200000, guid: e1efca7c36fd01840aae0dd10378de5c, type: 3} - multiScaleAODownsample1: {fileID: 7200000, guid: 4c63bc487e6c29a4a99f85a6c47b292b, - type: 3} - multiScaleAODownsample2: {fileID: 7200000, guid: e4d3e4779e48a374f91d48d4c0aedb7b, - type: 3} - multiScaleAORender: {fileID: 7200000, guid: 34a460e8a2e66c243a9c12024e5a798d, - type: 3} - multiScaleAOUpsample: {fileID: 7200000, guid: 600d6212b59bb40409d19d750b5fd1e9, - type: 3} - gaussianDownsample: {fileID: 7200000, guid: 6dba4103d23a7904fbc49099355aff3e, - type: 3} - namedShaders: - - name: FSR2/ffx_fsr2_compute_luminance_pyramid_pass - shader: {fileID: 7200000, guid: 0894ebeefb6aa7d4680c71dffbda3fee, type: 3} - - name: FSR2/ffx_fsr2_reconstruct_previous_depth_pass - shader: {fileID: 7200000, guid: 6ef1b4c25874e334dad5ba3ac6345e32, type: 3} - - name: FSR2/ffx_fsr2_depth_clip_pass - shader: {fileID: 7200000, guid: 8026d9d8542eab6499c32d5d46beb2b6, type: 3} - - name: FSR2/ffx_fsr2_lock_pass - shader: {fileID: 7200000, guid: 3c96d72b39a840c428c901628dab92c0, type: 3} - - name: FSR2/ffx_fsr2_accumulate_pass - shader: {fileID: 7200000, guid: 702560780e923c84394c9b22ba460a9c, type: 3} - - name: FSR2/ffx_fsr2_rcas_pass - shader: {fileID: 7200000, guid: 5a82801f160ff6a4eb47db567216e592, type: 3} - - name: FSR2/ffx_fsr2_autogen_reactive_pass - shader: {fileID: 7200000, guid: d18fb8811ca4753469c439784546104e, type: 3} - - name: FSR2/ffx_fsr2_tcr_autogen_pass - shader: {fileID: 7200000, guid: b478fba0a6a87b44b8be7c35deb5f0dc, type: 3} + multiScaleAODownsample1: {fileID: 7200000, guid: 4c63bc487e6c29a4a99f85a6c47b292b, type: 3} + multiScaleAODownsample2: {fileID: 7200000, guid: e4d3e4779e48a374f91d48d4c0aedb7b, type: 3} + multiScaleAORender: {fileID: 7200000, guid: 34a460e8a2e66c243a9c12024e5a798d, type: 3} + multiScaleAOUpsample: {fileID: 7200000, guid: 600d6212b59bb40409d19d750b5fd1e9, type: 3} + gaussianDownsample: {fileID: 7200000, guid: 6dba4103d23a7904fbc49099355aff3e, type: 3} + superResolution: + computeLuminancePyramidPass: {fileID: 7200000, guid: d253be05abcdc80428503d3e4cce3a36, type: 3} + reconstructPreviousDepthPass: {fileID: 7200000, guid: 4f59e5b9179d74844ae06a30ae1e0629, type: 3} + depthClipPass: {fileID: 7200000, guid: 20e44016ed34b0d4b8de499d1b566c69, type: 3} + lockPass: {fileID: 7200000, guid: a135306e6d1857e43a86ef20db2a47fe, type: 3} + accumulatePass: {fileID: 7200000, guid: c9b45f0ae7673694ba57a4aadfe212e9, type: 3} + sharpenPass: {fileID: 7200000, guid: 7aaf5cfff022de2499e9b0412f947f6c, type: 3} + autoGenReactivePass: {fileID: 7200000, guid: 5716b91fdaa4e9e439df6b96a796fe6e, type: 3} + tcrAutoGenPass: {fileID: 7200000, guid: 75cdc6ef23f08ed498d4da511923fcea, type: 3} diff --git a/com.unity.postprocessing/PostProcessing/Runtime/Effects/AmbientOcclusion.cs b/com.unity.postprocessing/PostProcessing/Runtime/Effects/AmbientOcclusion.cs index afffab9..ae5d00e 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/Effects/AmbientOcclusion.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/Effects/AmbientOcclusion.cs @@ -196,7 +196,7 @@ namespace UnityEngine.Rendering.PostProcessing state &= SystemInfo.supportsComputeShaders && !RuntimeUtilities.isAndroidOpenGL - && !RuntimeUtilities.isWebGL + && !RuntimeUtilities.isWebNonWebGPU #if UNITY_2023_2_OR_NEWER && SystemInfo.IsFormatSupported(GraphicsFormat.R32_SFloat, GraphicsFormatUsage.Render) && SystemInfo.IsFormatSupported(GraphicsFormat.R16_SFloat, GraphicsFormatUsage.Render) diff --git a/com.unity.postprocessing/PostProcessing/Runtime/Effects/AutoExposure.cs b/com.unity.postprocessing/PostProcessing/Runtime/Effects/AutoExposure.cs index 7a0e933..7995cdc 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/Effects/AutoExposure.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/Effects/AutoExposure.cs @@ -85,7 +85,7 @@ namespace UnityEngine.Rendering.PostProcessing return enabled.value && SystemInfo.supportsComputeShaders && !RuntimeUtilities.isAndroidOpenGL - && !RuntimeUtilities.isWebGL + && !RuntimeUtilities.isWebNonWebGPU && RenderTextureFormat.RFloat.IsSupported() && context.resources.computeShaders.autoExposure && context.resources.computeShaders.exposureHistogram; diff --git a/com.unity.postprocessing/PostProcessing/Runtime/Effects/MultiScaleVO.cs b/com.unity.postprocessing/PostProcessing/Runtime/Effects/MultiScaleVO.cs index a1af379..42719df 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/Effects/MultiScaleVO.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/Effects/MultiScaleVO.cs @@ -1,4 +1,5 @@ using System; +using UnityEngine.Experimental.Rendering; namespace UnityEngine.Rendering.PostProcessing { @@ -53,6 +54,10 @@ namespace UnityEngine.Rendering.PostProcessing // command buffer warning RenderTexture m_AmbientOnlyAO; + RenderTextureFormat m_R8Format; + RenderTextureFormat m_R16Format; + bool float4Texture = false; + readonly RenderTargetIdentifier[] m_MRT = { BuiltinRenderTextureType.GBuffer0, // Albedo, Occ @@ -62,6 +67,46 @@ namespace UnityEngine.Rendering.PostProcessing public MultiScaleVO(AmbientOcclusion settings) { m_Settings = settings; + // R16 is not supported on all platforms as a storage texture format + // R8 is not supported on all platforms as a storage texture format + m_R8Format = RenderTextureFormat.R8; + m_R16Format = RenderTextureFormat.RHalf; +#if UNITY_2023_2_OR_NEWER + if (!SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(m_R8Format, false), GraphicsFormatUsage.LoadStore)) + { + if (SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(RenderTextureFormat.ARGB32, false), GraphicsFormatUsage.LoadStore)) + { + m_R8Format = RenderTextureFormat.ARGB32; + float4Texture = true; + } + } + + if (!SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(m_R16Format, false), GraphicsFormatUsage.LoadStore)) + { + if (SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(RenderTextureFormat.RFloat, false), GraphicsFormatUsage.LoadStore)) + { + m_R16Format = RenderTextureFormat.RFloat; + } + } + +#else + if (!SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(m_R8Format, false), FormatUsage.LoadStore)) + { + if (SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(RenderTextureFormat.ARGB32, false), FormatUsage.LoadStore)) + { + m_R8Format = RenderTextureFormat.ARGB32; + float4Texture = true; + } + } + + if (!SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(m_R16Format, false), FormatUsage.LoadStore)) + { + if (SystemInfo.IsFormatSupported(GraphicsFormatUtility.GetGraphicsFormat(RenderTextureFormat.RFloat, false), FormatUsage.LoadStore)) + { + m_R16Format = RenderTextureFormat.RFloat; + } + } +#endif } public DepthTextureMode GetCameraFlags() @@ -237,26 +282,26 @@ namespace UnityEngine.Rendering.PostProcessing } else { - Alloc(cmd, ShaderIDs.LinearDepth, MipLevel.Original, RenderTextureFormat.RHalf, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.LinearDepth, MipLevel.Original, m_R16Format, true, dynamicResolutionEnabled); Alloc(cmd, ShaderIDs.LowDepth1, MipLevel.L1, RenderTextureFormat.RFloat, true, dynamicResolutionEnabled); Alloc(cmd, ShaderIDs.LowDepth2, MipLevel.L2, RenderTextureFormat.RFloat, true, dynamicResolutionEnabled); Alloc(cmd, ShaderIDs.LowDepth3, MipLevel.L3, RenderTextureFormat.RFloat, true, dynamicResolutionEnabled); Alloc(cmd, ShaderIDs.LowDepth4, MipLevel.L4, RenderTextureFormat.RFloat, true, dynamicResolutionEnabled); - AllocArray(cmd, ShaderIDs.TiledDepth1, MipLevel.L3, RenderTextureFormat.RHalf, true, dynamicResolutionEnabled); - AllocArray(cmd, ShaderIDs.TiledDepth2, MipLevel.L4, RenderTextureFormat.RHalf, true, dynamicResolutionEnabled); - AllocArray(cmd, ShaderIDs.TiledDepth3, MipLevel.L5, RenderTextureFormat.RHalf, true, dynamicResolutionEnabled); - AllocArray(cmd, ShaderIDs.TiledDepth4, MipLevel.L6, RenderTextureFormat.RHalf, true, dynamicResolutionEnabled); + AllocArray(cmd, ShaderIDs.TiledDepth1, MipLevel.L3, m_R16Format, true, dynamicResolutionEnabled); + AllocArray(cmd, ShaderIDs.TiledDepth2, MipLevel.L4, m_R16Format, true, dynamicResolutionEnabled); + AllocArray(cmd, ShaderIDs.TiledDepth3, MipLevel.L5, m_R16Format, true, dynamicResolutionEnabled); + AllocArray(cmd, ShaderIDs.TiledDepth4, MipLevel.L6, m_R16Format, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Occlusion1, MipLevel.L1, RenderTextureFormat.R8, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Occlusion2, MipLevel.L2, RenderTextureFormat.R8, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Occlusion3, MipLevel.L3, RenderTextureFormat.R8, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Occlusion4, MipLevel.L4, RenderTextureFormat.R8, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Occlusion1, MipLevel.L1, m_R8Format, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Occlusion2, MipLevel.L2, m_R8Format, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Occlusion3, MipLevel.L3, m_R8Format, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Occlusion4, MipLevel.L4, m_R8Format, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Combined1, MipLevel.L1, RenderTextureFormat.R8, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Combined2, MipLevel.L2, RenderTextureFormat.R8, true, dynamicResolutionEnabled); - Alloc(cmd, ShaderIDs.Combined3, MipLevel.L3, RenderTextureFormat.R8, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Combined1, MipLevel.L1, m_R8Format, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Combined2, MipLevel.L2, m_R8Format, true, dynamicResolutionEnabled); + Alloc(cmd, ShaderIDs.Combined3, MipLevel.L3, m_R8Format, true, dynamicResolutionEnabled); } } @@ -292,12 +337,11 @@ namespace UnityEngine.Rendering.PostProcessing cmd.SetComputeTextureParam(cs, kernel, "LinearZ", ShaderIDs.LinearDepth); cmd.SetComputeTextureParam(cs, kernel, "DS2x", ShaderIDs.LowDepth1); - cmd.SetComputeTextureParam(cs, kernel, "DS4x", ShaderIDs.LowDepth2); cmd.SetComputeTextureParam(cs, kernel, "DS2xAtlas", ShaderIDs.TiledDepth1); - cmd.SetComputeTextureParam(cs, kernel, "DS4xAtlas", ShaderIDs.TiledDepth2); cmd.SetComputeVectorParam(cs, "ZBufferParams", CalculateZBufferParams(camera)); cmd.SetComputeTextureParam(cs, kernel, "Depth", depthMapId); - + cmd.SetComputeTextureParam(cs, kernel, "DS4x", ShaderIDs.LowDepth2); + cmd.SetComputeTextureParam(cs, kernel, "DS4xAtlas", ShaderIDs.TiledDepth2); cmd.DispatchCompute(cs, kernel, m_ScaledWidths[(int)MipLevel.L4], m_ScaledHeights[(int)MipLevel.L4], 1); if (needDepthMapRelease) @@ -384,7 +428,9 @@ namespace UnityEngine.Rendering.PostProcessing // Set the arguments for the render kernel. var cs = m_Resources.computeShaders.multiScaleAORender; - int kernel = isMSAA ? cs.FindKernel("MultiScaleVORender_MSAA_interleaved") : cs.FindKernel("MultiScaleVORender_interleaved"); + string kernelName = isMSAA ? "MultiScaleVORender_MSAA_interleaved" : "MultiScaleVORender_interleaved"; + if (float4Texture) kernelName += "_Float4"; + int kernel = cs.FindKernel(kernelName); cmd.SetComputeFloatParams(cs, "gInvThicknessTable", m_InvThicknessTable); cmd.SetComputeFloatParams(cs, "gSampleWeightTable", m_SampleWeightTable); @@ -411,17 +457,27 @@ namespace UnityEngine.Rendering.PostProcessing int kernel = 0; if (!isMSAA) { - kernel = cs.FindKernel(highResAO == null ? invert + string kernelName = highResAO == null ? invert ? "MultiScaleVOUpSample_invert" : "MultiScaleVOUpSample" - : "MultiScaleVOUpSample_blendout"); + : "MultiScaleVOUpSample_blendout"; + if (float4Texture) + { + kernelName += "_Float4"; + } + kernel = cs.FindKernel(kernelName); } else { - kernel = cs.FindKernel(highResAO == null ? invert + string kernelName = highResAO == null ? invert ? "MultiScaleVOUpSample_MSAA_invert" : "MultiScaleVOUpSample_MSAA" - : "MultiScaleVOUpSample_MSAA_blendout"); + : "MultiScaleVOUpSample_MSAA_blendout"; + if (float4Texture) + { + kernelName += "_Float4"; + } + kernel = cs.FindKernel(kernelName); } @@ -491,8 +547,7 @@ namespace UnityEngine.Rendering.PostProcessing if (AOUpdateNeeded) { RuntimeUtilities.Destroy(m_AmbientOnlyAO); - - m_AmbientOnlyAO = new RenderTexture(context.width, context.height, 0, RenderTextureFormat.R8, RenderTextureReadWrite.Linear) + m_AmbientOnlyAO = new RenderTexture(context.width, context.height, 0, m_R8Format, RenderTextureReadWrite.Linear) { hideFlags = HideFlags.DontSave, filterMode = FilterMode.Point, diff --git a/com.unity.postprocessing/PostProcessing/Runtime/Effects/SuperResolution.cs b/com.unity.postprocessing/PostProcessing/Runtime/Effects/SuperResolution.cs index e7ff440..1148403 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/Effects/SuperResolution.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/Effects/SuperResolution.cs @@ -31,10 +31,10 @@ namespace UnityEngine.Rendering.PostProcessing [Serializable] public class SuperResolution { - public Func callbacksFactory { get; set; } = (context) => new Callbacks(context.resources); + public Func callbacksFactory { get; set; } = (context) => new Fsr3UpscalerCallbacksBase(); [Tooltip("Standard scaling ratio presets.")] - public Fsr2.QualityMode qualityMode = Fsr2.QualityMode.Quality; + public Fsr3Upscaler.QualityMode qualityMode = Fsr3Upscaler.QualityMode.Quality; [Tooltip("Apply RCAS sharpening to the image after upscaling.")] public bool performSharpenPass = true; @@ -44,7 +44,7 @@ namespace UnityEngine.Rendering.PostProcessing [Tooltip("Allow the use of half precision compute operations, potentially improving performance if the platform supports it.")] public bool enableFP16 = false; - [Tooltip("Choose where to get the exposure value from. Use auto-exposure from either FSR2 or Unity, provide a manual exposure texture, or use a default value.")] + [Tooltip("Choose where to get the exposure value from. Use auto-exposure from either FSR3 or Unity, provide a manual exposure texture, or use a default value.")] public ExposureSource exposureSource = ExposureSource.Auto; [Tooltip("Value by which the input signal will be divided, to get back to the original signal produced by the game.")] public float preExposure = 1.0f; @@ -78,7 +78,7 @@ namespace UnityEngine.Rendering.PostProcessing [Tooltip("A value to set for the binary reactive mask")] [Range(0, 1)] public float binaryValue = 0.9f; [Tooltip("Flags to determine how to generate the reactive mask")] - public Fsr2.GenerateReactiveFlags flags = Fsr2.GenerateReactiveFlags.ApplyTonemap | Fsr2.GenerateReactiveFlags.ApplyThreshold | Fsr2.GenerateReactiveFlags.UseComponentsMax; + public Fsr3Upscaler.GenerateReactiveFlags flags = Fsr3Upscaler.GenerateReactiveFlags.ApplyTonemap | Fsr3Upscaler.GenerateReactiveFlags.ApplyThreshold | Fsr3Upscaler.GenerateReactiveFlags.UseComponentsMax; } [Tooltip("(Experimental) Automatically generate and use Reactive mask and Transparency & composition mask internally.")] @@ -104,17 +104,17 @@ namespace UnityEngine.Rendering.PostProcessing public Vector2Int displaySize => _displaySize; public RenderTargetIdentifier colorOpaqueOnly { get; set; } - private Fsr2Context _fsrContext; + private Fsr3UpscalerContext _fsrContext; private Vector2Int _maxRenderSize; private Vector2Int _displaySize; private bool _resetHistory; - private IFsr2Callbacks _callbacks; + private IFsr3UpscalerCallbacks _callbacks; - private readonly Fsr2.DispatchDescription _dispatchDescription = new Fsr2.DispatchDescription(); - private readonly Fsr2.GenerateReactiveDescription _genReactiveDescription = new Fsr2.GenerateReactiveDescription(); + private readonly Fsr3Upscaler.DispatchDescription _dispatchDescription = new Fsr3Upscaler.DispatchDescription(); + private readonly Fsr3Upscaler.GenerateReactiveDescription _genReactiveDescription = new Fsr3Upscaler.GenerateReactiveDescription(); - private Fsr2.QualityMode _prevQualityMode; + private Fsr3Upscaler.QualityMode _prevQualityMode; private ExposureSource _prevExposureSource; private Vector2Int _prevDisplaySize; @@ -152,11 +152,11 @@ namespace UnityEngine.Rendering.PostProcessing // Determine the desired rendering and display resolutions _displaySize = new Vector2Int(camera.pixelWidth, camera.pixelHeight); - Fsr2.GetRenderResolutionFromQualityMode(out int maxRenderWidth, out int maxRenderHeight, _displaySize.x, _displaySize.y, qualityMode); + Fsr3Upscaler.GetRenderResolutionFromQualityMode(out int maxRenderWidth, out int maxRenderHeight, _displaySize.x, _displaySize.y, qualityMode); _maxRenderSize = new Vector2Int(maxRenderWidth, maxRenderHeight); // Render to a smaller portion of the screen by manipulating the camera's viewport rect - camera.aspect = (_displaySize.x * _originalRect.width) / (_displaySize.y * _originalRect.height); + camera.aspect = (float)_displaySize.x / _displaySize.y; camera.rect = new Rect(0, 0, _originalRect.width * _maxRenderSize.x / _displaySize.x, _originalRect.height * _maxRenderSize.y / _displaySize.y); } @@ -168,10 +168,10 @@ namespace UnityEngine.Rendering.PostProcessing public void Render(PostProcessRenderContext context) { var cmd = context.command; - cmd.BeginSample("FSR2"); + cmd.BeginSample("FSR3 Upscaler"); - // Monitor for any resolution changes and recreate the FSR2 context if necessary - // We can't create an FSR2 context without info from the post-processing context, so delay the initial setup until here + // Monitor for any resolution changes and recreate the FSR3 Upscaler context if necessary + // We can't create an FSR3 Upscaler context without info from the post-processing context, so delay the initial setup until here if (_fsrContext == null || _displaySize.x != _prevDisplaySize.x || _displaySize.y != _prevDisplaySize.y || qualityMode != _prevQualityMode || exposureSource != _prevExposureSource) { DestroyFsrContext(); @@ -185,14 +185,14 @@ namespace UnityEngine.Rendering.PostProcessing SetupAutoReactiveDescription(context); var scaledRenderSize = _genReactiveDescription.RenderSize; - cmd.GetTemporaryRT(Fsr2ShaderIDs.UavAutoReactive, scaledRenderSize.x, scaledRenderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); + cmd.GetTemporaryRT(Fsr3ShaderIDs.UavAutoReactive, scaledRenderSize.x, scaledRenderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); _fsrContext.GenerateReactiveMask(_genReactiveDescription, cmd); - _dispatchDescription.Reactive = new Fsr2.ResourceView(Fsr2ShaderIDs.UavAutoReactive); + _dispatchDescription.Reactive = new ResourceView(Fsr3ShaderIDs.UavAutoReactive); } _fsrContext.Dispatch(_dispatchDescription, cmd); - cmd.EndSample("FSR2"); + cmd.EndSample("FSR3 Upscaler"); _resetHistory = false; } @@ -203,18 +203,18 @@ namespace UnityEngine.Rendering.PostProcessing _prevExposureSource = exposureSource; _prevDisplaySize = _displaySize; - // Initialize FSR2 context - Fsr2.InitializationFlags flags = 0; - if (context.camera.allowHDR) flags |= Fsr2.InitializationFlags.EnableHighDynamicRange; - if (enableFP16) flags |= Fsr2.InitializationFlags.EnableFP16Usage; - if (exposureSource == ExposureSource.Auto) flags |= Fsr2.InitializationFlags.EnableAutoExposure; - if (RuntimeUtilities.IsDynamicResolutionEnabled(context.camera)) flags |= Fsr2.InitializationFlags.EnableDynamicResolution; + // Initialize FSR3 Upscaler context + Fsr3Upscaler.InitializationFlags flags = 0; + if (context.camera.allowHDR) flags |= Fsr3Upscaler.InitializationFlags.EnableHighDynamicRange; + if (enableFP16) flags |= Fsr3Upscaler.InitializationFlags.EnableFP16Usage; + if (exposureSource == ExposureSource.Auto) flags |= Fsr3Upscaler.InitializationFlags.EnableAutoExposure; + if (RuntimeUtilities.IsDynamicResolutionEnabled(context.camera)) flags |= Fsr3Upscaler.InitializationFlags.EnableDynamicResolution; _callbacks = callbacksFactory(context); - _fsrContext = Fsr2.CreateContext(_displaySize, _maxRenderSize, _callbacks, flags); + _fsrContext = Fsr3Upscaler.CreateContext(_displaySize, _maxRenderSize, context.resources.computeShaders.superResolution, flags); // Apply a mipmap bias so that textures retain their sharpness - float biasOffset = Fsr2.GetMipmapBiasOffset(_maxRenderSize.x, _displaySize.x); + float biasOffset = Fsr3Upscaler.GetMipmapBiasOffset(_maxRenderSize.x, _displaySize.x); if (!float.IsNaN(biasOffset) && !float.IsInfinity(biasOffset)) { _callbacks.ApplyMipmapBias(biasOffset); @@ -241,9 +241,9 @@ namespace UnityEngine.Rendering.PostProcessing { var scaledRenderSize = GetScaledRenderSize(camera); - // Perform custom jittering of the camera's projection matrix according to FSR2's recipe - int jitterPhaseCount = Fsr2.GetJitterPhaseCount(scaledRenderSize.x, _displaySize.x); - Fsr2.GetJitterOffset(out float jitterX, out float jitterY, Time.frameCount, jitterPhaseCount); + // Perform custom jittering of the camera's projection matrix according to FSR3's recipe + int jitterPhaseCount = Fsr3Upscaler.GetJitterPhaseCount(scaledRenderSize.x, _displaySize.x); + Fsr3Upscaler.GetJitterOffset(out float jitterX, out float jitterY, Time.frameCount, jitterPhaseCount); _dispatchDescription.JitterOffset = new Vector2(jitterX, jitterY); @@ -262,22 +262,22 @@ namespace UnityEngine.Rendering.PostProcessing { var camera = context.camera; - // Set up the main FSR2 dispatch parameters - _dispatchDescription.Color = new Fsr2.ResourceView(context.source); - _dispatchDescription.Depth = new Fsr2.ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Depth); - _dispatchDescription.MotionVectors = new Fsr2.ResourceView(BuiltinRenderTextureType.MotionVectors); - _dispatchDescription.Exposure = Fsr2.ResourceView.Unassigned; - _dispatchDescription.Reactive = Fsr2.ResourceView.Unassigned; - _dispatchDescription.TransparencyAndComposition = Fsr2.ResourceView.Unassigned; - - if (exposureSource == ExposureSource.Manual && exposure != null) _dispatchDescription.Exposure = new Fsr2.ResourceView(exposure); - if (exposureSource == ExposureSource.Unity) _dispatchDescription.Exposure = new Fsr2.ResourceView(context.autoExposureTexture); - if (reactiveMask != null) _dispatchDescription.Reactive = new Fsr2.ResourceView(reactiveMask); - if (transparencyAndCompositionMask != null) _dispatchDescription.TransparencyAndComposition = new Fsr2.ResourceView(transparencyAndCompositionMask); + // Set up the main FSR3 Upscaler dispatch parameters + _dispatchDescription.Color = new ResourceView(context.source); + _dispatchDescription.Depth = new ResourceView(BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Depth); + _dispatchDescription.MotionVectors = new ResourceView(BuiltinRenderTextureType.MotionVectors); + _dispatchDescription.Exposure = ResourceView.Unassigned; + _dispatchDescription.Reactive = ResourceView.Unassigned; + _dispatchDescription.TransparencyAndComposition = ResourceView.Unassigned; + + if (exposureSource == ExposureSource.Manual && exposure != null) _dispatchDescription.Exposure = new ResourceView(exposure); + if (exposureSource == ExposureSource.Unity) _dispatchDescription.Exposure = new ResourceView(context.autoExposureTexture); + if (reactiveMask != null) _dispatchDescription.Reactive = new ResourceView(reactiveMask); + if (transparencyAndCompositionMask != null) _dispatchDescription.TransparencyAndComposition = new ResourceView(transparencyAndCompositionMask); var scaledRenderSize = GetScaledRenderSize(context.camera); - _dispatchDescription.Output = new Fsr2.ResourceView(context.destination); + _dispatchDescription.Output = new ResourceView(context.destination); _dispatchDescription.PreExposure = preExposure; _dispatchDescription.EnableSharpening = performSharpenPass; _dispatchDescription.Sharpness = sharpness; @@ -296,7 +296,7 @@ namespace UnityEngine.Rendering.PostProcessing _dispatchDescription.EnableAutoReactive = autoGenerateTransparencyAndComposition; if (autoGenerateTransparencyAndComposition) { - _dispatchDescription.ColorOpaqueOnly = new Fsr2.ResourceView(colorOpaqueOnly); + _dispatchDescription.ColorOpaqueOnly = new ResourceView(colorOpaqueOnly); _dispatchDescription.AutoTcThreshold = generateTransparencyAndCompositionParameters.autoTcThreshold; _dispatchDescription.AutoTcScale = generateTransparencyAndCompositionParameters.autoTcScale; _dispatchDescription.AutoReactiveScale = generateTransparencyAndCompositionParameters.autoReactiveScale; @@ -305,7 +305,7 @@ namespace UnityEngine.Rendering.PostProcessing if (SystemInfo.usesReversedZBuffer) { - // Swap the near and far clip plane distances as FSR2 expects this when using inverted depth + // Swap the near and far clip plane distances as FSR3 expects this when using inverted depth (_dispatchDescription.CameraNear, _dispatchDescription.CameraFar) = (_dispatchDescription.CameraFar, _dispatchDescription.CameraNear); } } @@ -313,9 +313,9 @@ namespace UnityEngine.Rendering.PostProcessing private void SetupAutoReactiveDescription(PostProcessRenderContext context) { // Set up the parameters to auto-generate a reactive mask - _genReactiveDescription.ColorOpaqueOnly = new Fsr2.ResourceView(colorOpaqueOnly); - _genReactiveDescription.ColorPreUpscale = new Fsr2.ResourceView(context.source); - _genReactiveDescription.OutReactive = new Fsr2.ResourceView(Fsr2ShaderIDs.UavAutoReactive); + _genReactiveDescription.ColorOpaqueOnly = new ResourceView(colorOpaqueOnly); + _genReactiveDescription.ColorPreUpscale = new ResourceView(context.source); + _genReactiveDescription.OutReactive = new ResourceView(Fsr3ShaderIDs.UavAutoReactive); _genReactiveDescription.RenderSize = GetScaledRenderSize(context.camera); _genReactiveDescription.Scale = generateReactiveParameters.scale; _genReactiveDescription.CutoffThreshold = generateReactiveParameters.cutoffThreshold; @@ -330,24 +330,5 @@ namespace UnityEngine.Rendering.PostProcessing return new Vector2Int(Mathf.CeilToInt(_maxRenderSize.x * ScalableBufferManager.widthScaleFactor), Mathf.CeilToInt(_maxRenderSize.y * ScalableBufferManager.heightScaleFactor)); } - - private class Callbacks : Fsr2CallbacksBase - { - private readonly PostProcessResources _resources; - - public Callbacks(PostProcessResources resources) - { - _resources = resources; - } - - public override ComputeShader LoadComputeShader(string name) - { - return _resources.computeShaders.FindComputeShader(name); - } - - public override void UnloadComputeShader(ComputeShader shader) - { - } - } } } diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs.meta deleted file mode 100644 index 10fe120..0000000 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 742d52dc87714f0d93f3b59719859dff -timeCreated: 1673441954 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs.meta deleted file mode 100644 index ed50468..0000000 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2f00ea267c3443d88bbd0e9dd7c08b4a -timeCreated: 1673442225 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs.meta deleted file mode 100644 index 06ce7e4..0000000 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Pass.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 14234aed75ce454183019d2e20a44d24 -timeCreated: 1676885169 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs.meta deleted file mode 100644 index 0e993b4..0000000 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Resources.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 22ad49193f244ab4a36d0a1512f3015f -timeCreated: 1677236102 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs.meta deleted file mode 100644 index ef83135..0000000 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2ShaderIDs.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ad1eca9398174f6c85d8bc01d10993df -timeCreated: 1679060863 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3.meta new file mode 100644 index 0000000..e12cfa8 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfeca308812376e4a8e5e49e0d96c5c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Fsr2ShaderIDs.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs similarity index 96% rename from Assets/Scripts/Core/Fsr2ShaderIDs.cs rename to com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs index b07c967..3a28843 100644 --- a/Assets/Scripts/Core/Fsr2ShaderIDs.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs @@ -22,7 +22,7 @@ using UnityEngine; namespace FidelityFX { - internal static class Fsr2ShaderIDs + internal static class Fsr3ShaderIDs { // Shader resource views, i.e. read-only bindings internal static readonly int SrvInputColor = Shader.PropertyToID("r_input_color_jittered"); @@ -36,7 +36,7 @@ namespace FidelityFX internal static readonly int SrvReconstructedPrevNearestDepth = Shader.PropertyToID("r_reconstructed_previous_nearest_depth"); internal static readonly int SrvDilatedMotionVectors = Shader.PropertyToID("r_dilated_motion_vectors"); internal static readonly int SrvPrevDilatedMotionVectors = Shader.PropertyToID("r_previous_dilated_motion_vectors"); - internal static readonly int SrvDilatedDepth = Shader.PropertyToID("r_dilatedDepth"); + internal static readonly int SrvDilatedDepth = Shader.PropertyToID("r_dilated_depth"); internal static readonly int SrvInternalUpscaled = Shader.PropertyToID("r_internal_upscaled_color"); internal static readonly int SrvLockStatus = Shader.PropertyToID("r_lock_status"); internal static readonly int SrvLockInputLuma = Shader.PropertyToID("r_lock_input_luma"); @@ -53,7 +53,7 @@ namespace FidelityFX // Unordered access views, i.e. random read/write bindings internal static readonly int UavReconstructedPrevNearestDepth = Shader.PropertyToID("rw_reconstructed_previous_nearest_depth"); internal static readonly int UavDilatedMotionVectors = Shader.PropertyToID("rw_dilated_motion_vectors"); - internal static readonly int UavDilatedDepth = Shader.PropertyToID("rw_dilatedDepth"); + internal static readonly int UavDilatedDepth = Shader.PropertyToID("rw_dilated_depth"); internal static readonly int UavInternalUpscaled = Shader.PropertyToID("rw_internal_upscaled_color"); internal static readonly int UavLockStatus = Shader.PropertyToID("rw_lock_status"); internal static readonly int UavLockInputLuma = Shader.PropertyToID("rw_lock_input_luma"); @@ -72,7 +72,7 @@ namespace FidelityFX internal static readonly int UavPrevColorPostAlpha = Shader.PropertyToID("rw_output_prev_color_post_alpha"); // Constant buffer bindings - internal static readonly int CbFsr2 = Shader.PropertyToID("cbFSR2"); + internal static readonly int CbFsr3Upscaler = Shader.PropertyToID("cbFSR3Upscaler"); internal static readonly int CbSpd = Shader.PropertyToID("cbSPD"); internal static readonly int CbRcas = Shader.PropertyToID("cbRCAS"); internal static readonly int CbGenReactive = Shader.PropertyToID("cbGenerateReactive"); diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs.meta new file mode 100644 index 0000000..9012617 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3ShaderIDs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a0e0bcc2967836742b7864d1cafafbf0 +timeCreated: 1679060863 \ No newline at end of file diff --git a/Assets/Scripts/Core/Fsr2.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs similarity index 79% rename from Assets/Scripts/Core/Fsr2.cs rename to com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs index 1ba8192..c636c93 100644 --- a/Assets/Scripts/Core/Fsr2.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs @@ -26,14 +26,14 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// A collection of helper functions and data structures required by the FSR2 process. + /// A collection of helper functions and data structures required by the FSR3 Upscaler process. /// - public static class Fsr2 + public static class Fsr3Upscaler { /// - /// Creates a new FSR2 context with standard parameters that are appropriate for the current platform. + /// Creates a new FSR3 Upscaler context with standard parameters that are appropriate for the current platform. /// - public static Fsr2Context CreateContext(Vector2Int displaySize, Vector2Int maxRenderSize, IFsr2Callbacks callbacks, InitializationFlags flags = 0) + public static Fsr3UpscalerContext CreateContext(Vector2Int displaySize, Vector2Int maxRenderSize, Fsr3UpscalerShaders shaders, InitializationFlags flags = 0) { if (SystemInfo.usesReversedZBuffer) flags |= InitializationFlags.EnableDepthInverted; @@ -44,17 +44,17 @@ namespace FidelityFX flags |= InitializationFlags.EnableDebugChecking; #endif - Debug.Log($"Setting up FSR2 with render size: {maxRenderSize.x}x{maxRenderSize.y}, display size: {displaySize.x}x{displaySize.y}, flags: {flags}"); + Debug.Log($"Setting up FSR3 Upscaler with render size: {maxRenderSize.x}x{maxRenderSize.y}, display size: {displaySize.x}x{displaySize.y}, flags: {flags}"); var contextDescription = new ContextDescription { Flags = flags, DisplaySize = displaySize, MaxRenderSize = maxRenderSize, - Callbacks = callbacks, + Shaders = shaders, }; - var context = new Fsr2Context(); + var context = new Fsr3UpscalerContext(); context.Create(contextDescription); return context; } @@ -63,6 +63,8 @@ namespace FidelityFX { switch (qualityMode) { + case QualityMode.NativeAA: + return 1.0f; case QualityMode.UltraQuality: return 1.2f; case QualityMode.Quality: @@ -134,11 +136,12 @@ namespace FidelityFX public enum QualityMode { - UltraQuality = 0, - Quality = 1, - Balanced = 2, - Performance = 3, - UltraPerformance = 4, + NativeAA = 0, + UltraQuality = 1, + Quality = 2, + Balanced = 3, + Performance = 4, + UltraPerformance = 5, } [Flags] @@ -155,47 +158,19 @@ namespace FidelityFX EnableDebugChecking = 1 << 8, } + /// + /// A structure encapsulating the parameters required to initialize FidelityFX Super Resolution 3 upscaling. + /// public struct ContextDescription { public InitializationFlags Flags; public Vector2Int MaxRenderSize; public Vector2Int DisplaySize; - public IFsr2Callbacks Callbacks; - } - - /// - /// An immutable structure wrapping all of the necessary information to bind a specific buffer or attachment of a render target to a compute shader. - /// - public readonly struct ResourceView - { - /// - /// This value is the equivalent of not setting any value at all; all struct fields will have their default values. - /// It does not refer to a valid texture, therefore any variable set to this value should be checked for IsValid and reassigned before being bound to a shader. - /// - public static readonly ResourceView Unassigned = new ResourceView(default); - - /// - /// This value contains a valid texture reference that can be bound to a shader, however it is just an empty placeholder texture. - /// Binding this to a shader can be seen as setting the texture variable inside the shader to null. - /// - public static readonly ResourceView None = new ResourceView(BuiltinRenderTextureType.None); - - public ResourceView(in RenderTargetIdentifier renderTarget, RenderTextureSubElement subElement = RenderTextureSubElement.Default, int mipLevel = 0) - { - RenderTarget = renderTarget; - SubElement = subElement; - MipLevel = mipLevel; - } - - public bool IsValid => !RenderTarget.Equals(default); - - public readonly RenderTargetIdentifier RenderTarget; - public readonly RenderTextureSubElement SubElement; - public readonly int MipLevel; + public Fsr3UpscalerShaders Shaders; } /// - /// A structure encapsulating the parameters for dispatching the various passes of FidelityFX Super Resolution 2. + /// A structure encapsulating the parameters for dispatching the various passes of FidelityFX Super Resolution 3. /// public class DispatchDescription { @@ -231,7 +206,7 @@ namespace FidelityFX /// /// A structure encapsulating the parameters for automatic generation of a reactive mask. - /// The default values for Scale, CutoffThreshold, BinaryValue and Flags were taken from the FSR2 demo project. + /// The default values for Scale, CutoffThreshold, BinaryValue and Flags were taken from the FSR3 demo project. /// public class GenerateReactiveDescription { @@ -255,7 +230,7 @@ namespace FidelityFX } [Serializable, StructLayout(LayoutKind.Sequential)] - internal struct Fsr2Constants + internal struct UpscalerConstants { public Vector2Int renderSize; public Vector2Int maxRenderSize; @@ -324,4 +299,35 @@ namespace FidelityFX public readonly uint dummy1; } } + + /// + /// An immutable structure wrapping all of the necessary information to bind a specific buffer or attachment of a render target to a compute shader. + /// + public readonly struct ResourceView + { + /// + /// This value is the equivalent of not setting any value at all; all struct fields will have their default values. + /// It does not refer to a valid texture, therefore any variable set to this value should be checked for IsValid and reassigned before being bound to a shader. + /// + public static readonly ResourceView Unassigned = new ResourceView(default); + + /// + /// This value contains a valid texture reference that can be bound to a shader, however it is just an empty placeholder texture. + /// Binding this to a shader can be seen as setting the texture variable inside the shader to null. + /// + public static readonly ResourceView None = new ResourceView(BuiltinRenderTextureType.None); + + public ResourceView(in RenderTargetIdentifier renderTarget, RenderTextureSubElement subElement = RenderTextureSubElement.Default, int mipLevel = 0) + { + RenderTarget = renderTarget; + SubElement = subElement; + MipLevel = mipLevel; + } + + public bool IsValid => !RenderTarget.Equals(default); + + public readonly RenderTargetIdentifier RenderTarget; + public readonly RenderTextureSubElement SubElement; + public readonly int MipLevel; + } } diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs.meta new file mode 100644 index 0000000..6717df4 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3Upscaler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df8b18c192f2dc145b4b43e68fd3407d +timeCreated: 1673441954 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs new file mode 100644 index 0000000..3e4e24f --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs @@ -0,0 +1,151 @@ +// Copyright (c) 2023 Nico de Poel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using UnityEngine; + +namespace FidelityFX +{ + /// + /// Scriptable object containing all shader resources required by FidelityFX Super Resolution 3 (FSR3) Upscaler. + /// These can be stored in an asset file and referenced from a scene or prefab, avoiding the need to load the shaders from a Resources folder. + /// + public class Fsr3UpscalerAssets : ScriptableObject + { + public Fsr3UpscalerShaders shaders; + +#if UNITY_EDITOR + private void Reset() + { + shaders = new Fsr3UpscalerShaders + { + computeLuminancePyramidPass = FindComputeShader("ffx_fsr3upscaler_compute_luminance_pyramid_pass"), + reconstructPreviousDepthPass = FindComputeShader("ffx_fsr3upscaler_reconstruct_previous_depth_pass"), + depthClipPass = FindComputeShader("ffx_fsr3upscaler_depth_clip_pass"), + lockPass = FindComputeShader("ffx_fsr3upscaler_lock_pass"), + accumulatePass = FindComputeShader("ffx_fsr3upscaler_accumulate_pass"), + sharpenPass = FindComputeShader("ffx_fsr3upscaler_rcas_pass"), + autoGenReactivePass = FindComputeShader("ffx_fsr3upscaler_autogen_reactive_pass"), + tcrAutoGenPass = FindComputeShader("ffx_fsr3upscaler_tcr_autogen_pass"), + }; + } + + private static ComputeShader FindComputeShader(string name) + { + string[] assetGuids = UnityEditor.AssetDatabase.FindAssets($"t:ComputeShader {name}"); + if (assetGuids == null || assetGuids.Length == 0) + return null; + + string assetPath = UnityEditor.AssetDatabase.GUIDToAssetPath(assetGuids[0]); + return UnityEditor.AssetDatabase.LoadAssetAtPath(assetPath); + } +#endif + } + + /// + /// All the compute shaders used by the FSR3 Upscaler. + /// + [System.Serializable] + public class Fsr3UpscalerShaders + { + /// + /// The compute shader used by the luminance pyramid computation pass. + /// + public ComputeShader computeLuminancePyramidPass; + + /// + /// The compute shader used by the previous depth reconstruction pass. + /// + public ComputeShader reconstructPreviousDepthPass; + + /// + /// The compute shader used by the depth clip pass. + /// + public ComputeShader depthClipPass; + + /// + /// The compute shader used by the lock pass. + /// + public ComputeShader lockPass; + + /// + /// The compute shader used by the accumulation pass. + /// + public ComputeShader accumulatePass; + + /// + /// The compute shader used by the RCAS sharpening pass. + /// + public ComputeShader sharpenPass; + + /// + /// The compute shader used to auto-generate a reactive mask. + /// + public ComputeShader autoGenReactivePass; + + /// + /// The compute shader used to auto-generate a transparency & composition mask. + /// + public ComputeShader tcrAutoGenPass; + + /// + /// Returns a copy of this class and its contents. + /// + public Fsr3UpscalerShaders Clone() + { + return (Fsr3UpscalerShaders)MemberwiseClone(); + } + + /// + /// Returns a copy of this class with clones of all its shaders. + /// This can be useful if you're running multiple FSR3 Upscaler instances with different shader configurations. + /// Be sure to clean up these clones through Dispose once you're done with them. + /// + public Fsr3UpscalerShaders DeepCopy() + { + return new Fsr3UpscalerShaders + { + computeLuminancePyramidPass = Object.Instantiate(computeLuminancePyramidPass), + reconstructPreviousDepthPass = Object.Instantiate(reconstructPreviousDepthPass), + depthClipPass = Object.Instantiate(depthClipPass), + lockPass = Object.Instantiate(lockPass), + accumulatePass = Object.Instantiate(accumulatePass), + sharpenPass = Object.Instantiate(sharpenPass), + autoGenReactivePass = Object.Instantiate(autoGenReactivePass), + tcrAutoGenPass = Object.Instantiate(tcrAutoGenPass), + }; + } + + /// + /// Destroy all the shaders within this instance. + /// Use this only on clones created through DeepCopy. + /// + public void Dispose() + { + Object.Destroy(computeLuminancePyramidPass); + Object.Destroy(reconstructPreviousDepthPass); + Object.Destroy(depthClipPass); + Object.Destroy(lockPass); + Object.Destroy(accumulatePass); + Object.Destroy(sharpenPass); + Object.Destroy(autoGenReactivePass); + Object.Destroy(tcrAutoGenPass); + } + } +} diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs.meta new file mode 100644 index 0000000..de48032 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerAssets.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aaeb3d821f826d44b84289a2dd23f90e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Fsr2Callbacks.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs similarity index 76% rename from Assets/Scripts/Core/Fsr2Callbacks.cs rename to com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs index ad41d98..5b2c89c 100644 --- a/Assets/Scripts/Core/Fsr2Callbacks.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs @@ -23,16 +23,11 @@ using UnityEngine; namespace FidelityFX { /// - /// A collection of callbacks required by the FSR2 process. - /// This allows some customization by the game dev on how to integrate FSR2 into their own game setup. + /// A collection of callbacks required by the FSR3 Upscaler process. + /// This allows some customization by the game dev on how to integrate FSR3 upscaling into their own game setup. /// - public interface IFsr2Callbacks + public interface IFsr3UpscalerCallbacks { - Shader LoadShader(string name); - void UnloadShader(Shader shader); - ComputeShader LoadComputeShader(string name); - void UnloadComputeShader(ComputeShader shader); - /// /// Apply a mipmap bias to in-game textures to prevent them from becoming blurry as the internal rendering resolution lowers. /// This will need to be customized on a per-game basis, as there is no clear universal way to determine what are "in-game" textures. @@ -47,32 +42,12 @@ namespace FidelityFX } /// - /// Default implementation of IFsr2Callbacks using simple Resources calls. + /// Default implementation of IFsr3UpscalerCallbacks using simple Resources calls. /// These are fine for testing but a proper game will want to extend and override these methods. /// - public class Fsr2CallbacksBase: IFsr2Callbacks + public class Fsr3UpscalerCallbacksBase: IFsr3UpscalerCallbacks { protected float CurrentBiasOffset = 0; - - public virtual Shader LoadShader(string name) - { - return Resources.Load(name); - } - - public virtual void UnloadShader(Shader shader) - { - Resources.UnloadAsset(shader); - } - - public virtual ComputeShader LoadComputeShader(string name) - { - return Resources.Load(name); - } - - public virtual void UnloadComputeShader(ComputeShader shader) - { - Resources.UnloadAsset(shader); - } public virtual void ApplyMipmapBias(float biasOffset) { diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs.meta new file mode 100644 index 0000000..ae2ee1a --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1b555daa29ec3043a8cf89b4db31a26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs similarity index 70% rename from com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs rename to com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs index 5c8975c..da02d9f 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/FSR2/Fsr2Context.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs @@ -19,7 +19,6 @@ // THE SOFTWARE. using System; -using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Rendering; @@ -27,69 +26,69 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// This class loosely matches the FfxFsr2Context struct from the original FSR2 codebase. - /// It manages the various resources and compute passes required by the FSR2 process. + /// This class loosely matches the FfxFsr3UpscalerContext struct from the original FSR3 codebase. + /// It manages the various resources and compute passes required by the FSR3 Upscaler process. /// Note that this class does not know anything about Unity render pipelines; all it knows is CommandBuffers and RenderTargetIdentifiers. /// This should make it suitable for integration with any of the available Unity render pipelines. /// - public class Fsr2Context + public class Fsr3UpscalerContext { private const int MaxQueuedFrames = 16; - private Fsr2.ContextDescription _contextDescription; + private Fsr3Upscaler.ContextDescription _contextDescription; private CommandBuffer _commandBuffer; - private Fsr2Pass _depthClipPass; - private Fsr2Pass _reconstructPreviousDepthPass; - private Fsr2Pass _lockPass; - private Fsr2Pass _accumulatePass; - private Fsr2Pass _rcasPass; - private Fsr2Pass _computeLuminancePyramidPass; - private Fsr2Pass _generateReactivePass; - private Fsr2Pass _tcrAutogeneratePass; + private Fsr3UpscalerPass _depthClipPass; + private Fsr3UpscalerPass _reconstructPreviousDepthPass; + private Fsr3UpscalerPass _lockPass; + private Fsr3UpscalerPass _accumulatePass; + private Fsr3UpscalerPass _sharpenPass; + private Fsr3UpscalerPass _computeLuminancePyramidPass; + private Fsr3UpscalerPass _generateReactivePass; + private Fsr3UpscalerPass _tcrAutogeneratePass; - private readonly Fsr2Resources _resources = new Fsr2Resources(); + private readonly Fsr3UpscalerResources _resources = new Fsr3UpscalerResources(); - private ComputeBuffer _fsr2ConstantsBuffer; - private readonly Fsr2.Fsr2Constants[] _fsr2ConstantsArray = { new Fsr2.Fsr2Constants() }; - private ref Fsr2.Fsr2Constants Constants => ref _fsr2ConstantsArray[0]; + private ComputeBuffer _upscalerConstantsBuffer; + private readonly Fsr3Upscaler.UpscalerConstants[] _upscalerConstantsArray = { new Fsr3Upscaler.UpscalerConstants() }; + private ref Fsr3Upscaler.UpscalerConstants UpscalerConsts => ref _upscalerConstantsArray[0]; private ComputeBuffer _spdConstantsBuffer; - private readonly Fsr2.SpdConstants[] _spdConstantsArray = { new Fsr2.SpdConstants() }; - private ref Fsr2.SpdConstants SpdConsts => ref _spdConstantsArray[0]; + private readonly Fsr3Upscaler.SpdConstants[] _spdConstantsArray = { new Fsr3Upscaler.SpdConstants() }; + private ref Fsr3Upscaler.SpdConstants SpdConsts => ref _spdConstantsArray[0]; private ComputeBuffer _rcasConstantsBuffer; - private readonly Fsr2.RcasConstants[] _rcasConstantsArray = new Fsr2.RcasConstants[1]; - private ref Fsr2.RcasConstants RcasConsts => ref _rcasConstantsArray[0]; + private readonly Fsr3Upscaler.RcasConstants[] _rcasConstantsArray = new Fsr3Upscaler.RcasConstants[1]; + private ref Fsr3Upscaler.RcasConstants RcasConsts => ref _rcasConstantsArray[0]; private ComputeBuffer _generateReactiveConstantsBuffer; - private readonly Fsr2.GenerateReactiveConstants[] _generateReactiveConstantsArray = { new Fsr2.GenerateReactiveConstants() }; - private ref Fsr2.GenerateReactiveConstants GenReactiveConsts => ref _generateReactiveConstantsArray[0]; + private readonly Fsr3Upscaler.GenerateReactiveConstants[] _generateReactiveConstantsArray = { new Fsr3Upscaler.GenerateReactiveConstants() }; + private ref Fsr3Upscaler.GenerateReactiveConstants GenReactiveConsts => ref _generateReactiveConstantsArray[0]; private ComputeBuffer _tcrAutogenerateConstantsBuffer; - private readonly Fsr2.GenerateReactiveConstants2[] _tcrAutogenerateConstantsArray = { new Fsr2.GenerateReactiveConstants2() }; - private ref Fsr2.GenerateReactiveConstants2 TcrAutoGenConsts => ref _tcrAutogenerateConstantsArray[0]; + private readonly Fsr3Upscaler.GenerateReactiveConstants2[] _tcrAutogenerateConstantsArray = { new Fsr3Upscaler.GenerateReactiveConstants2() }; + private ref Fsr3Upscaler.GenerateReactiveConstants2 TcrAutoGenConsts => ref _tcrAutogenerateConstantsArray[0]; private bool _firstExecution; private Vector2 _previousJitterOffset; private int _resourceFrameIndex; - public void Create(Fsr2.ContextDescription contextDescription) + public void Create(Fsr3Upscaler.ContextDescription contextDescription) { _contextDescription = contextDescription; - _commandBuffer = new CommandBuffer { name = "FSR2" }; + _commandBuffer = new CommandBuffer { name = "FSR3 Upscaler" }; - _fsr2ConstantsBuffer = CreateConstantBuffer(); - _spdConstantsBuffer = CreateConstantBuffer(); - _rcasConstantsBuffer = CreateConstantBuffer(); - _generateReactiveConstantsBuffer = CreateConstantBuffer(); - _tcrAutogenerateConstantsBuffer = CreateConstantBuffer(); + _upscalerConstantsBuffer = CreateConstantBuffer(); + _spdConstantsBuffer = CreateConstantBuffer(); + _rcasConstantsBuffer = CreateConstantBuffer(); + _generateReactiveConstantsBuffer = CreateConstantBuffer(); + _tcrAutogenerateConstantsBuffer = CreateConstantBuffer(); // Set defaults _firstExecution = true; _resourceFrameIndex = 0; - Constants.displaySize = _contextDescription.DisplaySize; + UpscalerConsts.displaySize = _contextDescription.DisplaySize; _resources.Create(_contextDescription); CreatePasses(); @@ -97,14 +96,14 @@ namespace FidelityFX private void CreatePasses() { - _computeLuminancePyramidPass = new Fsr2ComputeLuminancePyramidPass(_contextDescription, _resources, _fsr2ConstantsBuffer, _spdConstantsBuffer); - _reconstructPreviousDepthPass = new Fsr2ReconstructPreviousDepthPass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _depthClipPass = new Fsr2DepthClipPass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _lockPass = new Fsr2LockPass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _accumulatePass = new Fsr2AccumulatePass(_contextDescription, _resources, _fsr2ConstantsBuffer); - _rcasPass = new Fsr2RcasPass(_contextDescription, _resources, _fsr2ConstantsBuffer, _rcasConstantsBuffer); - _generateReactivePass = new Fsr2GenerateReactivePass(_contextDescription, _resources, _generateReactiveConstantsBuffer); - _tcrAutogeneratePass = new Fsr2TcrAutogeneratePass(_contextDescription, _resources, _fsr2ConstantsBuffer, _tcrAutogenerateConstantsBuffer); + _computeLuminancePyramidPass = new Fsr3UpscalerComputeLuminancePyramidPass(_contextDescription, _resources, _upscalerConstantsBuffer, _spdConstantsBuffer); + _reconstructPreviousDepthPass = new Fsr3UpscalerReconstructPreviousDepthPass(_contextDescription, _resources, _upscalerConstantsBuffer); + _depthClipPass = new Fsr3UpscalerDepthClipPass(_contextDescription, _resources, _upscalerConstantsBuffer); + _lockPass = new Fsr3UpscalerLockPass(_contextDescription, _resources, _upscalerConstantsBuffer); + _accumulatePass = new Fsr3UpscalerAccumulatePass(_contextDescription, _resources, _upscalerConstantsBuffer); + _sharpenPass = new Fsr3UpscalerSharpenPass(_contextDescription, _resources, _upscalerConstantsBuffer, _rcasConstantsBuffer); + _generateReactivePass = new Fsr3UpscalerGenerateReactivePass(_contextDescription, _resources, _generateReactiveConstantsBuffer); + _tcrAutogeneratePass = new Fsr3UpscalerTcrAutogeneratePass(_contextDescription, _resources, _upscalerConstantsBuffer, _tcrAutogenerateConstantsBuffer); } public void Destroy() @@ -112,7 +111,7 @@ namespace FidelityFX DestroyPass(ref _tcrAutogeneratePass); DestroyPass(ref _generateReactivePass); DestroyPass(ref _computeLuminancePyramidPass); - DestroyPass(ref _rcasPass); + DestroyPass(ref _sharpenPass); DestroyPass(ref _accumulatePass); DestroyPass(ref _lockPass); DestroyPass(ref _reconstructPreviousDepthPass); @@ -124,22 +123,22 @@ namespace FidelityFX DestroyConstantBuffer(ref _generateReactiveConstantsBuffer); DestroyConstantBuffer(ref _rcasConstantsBuffer); DestroyConstantBuffer(ref _spdConstantsBuffer); - DestroyConstantBuffer(ref _fsr2ConstantsBuffer); + DestroyConstantBuffer(ref _upscalerConstantsBuffer); _commandBuffer.Dispose(); _commandBuffer = null; } - public void Dispatch(Fsr2.DispatchDescription dispatchParams) + public void Dispatch(Fsr3Upscaler.DispatchDescription dispatchParams) { _commandBuffer.Clear(); Dispatch(dispatchParams, _commandBuffer); Graphics.ExecuteCommandBuffer(_commandBuffer); } - public void Dispatch(Fsr2.DispatchDescription dispatchParams, CommandBuffer commandBuffer) + public void Dispatch(Fsr3Upscaler.DispatchDescription dispatchParams, CommandBuffer commandBuffer) { - if ((_contextDescription.Flags & Fsr2.InitializationFlags.EnableDebugChecking) != 0) + if ((_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDebugChecking) != 0) { DebugCheckDispatch(dispatchParams); } @@ -157,10 +156,10 @@ namespace FidelityFX _firstExecution = false; // If auto exposure is enabled use the auto exposure SRV, otherwise what the app sends - if ((_contextDescription.Flags & Fsr2.InitializationFlags.EnableAutoExposure) != 0) - dispatchParams.Exposure = new Fsr2.ResourceView(_resources.AutoExposure); + if ((_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableAutoExposure) != 0) + dispatchParams.Exposure = new ResourceView(_resources.AutoExposure); else if (!dispatchParams.Exposure.IsValid) - dispatchParams.Exposure = new Fsr2.ResourceView(_resources.DefaultExposure); + dispatchParams.Exposure = new ResourceView(_resources.DefaultExposure); if (dispatchParams.EnableAutoReactive) { @@ -170,7 +169,7 @@ namespace FidelityFX if (resetAccumulation) { - RenderTargetIdentifier opaqueOnly = dispatchParams.ColorOpaqueOnly.IsValid ? dispatchParams.ColorOpaqueOnly.RenderTarget : Fsr2ShaderIDs.SrvOpaqueOnly; + RenderTargetIdentifier opaqueOnly = dispatchParams.ColorOpaqueOnly.IsValid ? dispatchParams.ColorOpaqueOnly.RenderTarget : Fsr3ShaderIDs.SrvOpaqueOnly; commandBuffer.Blit(_resources.PrevPreAlpha[frameIndex ^ 1], opaqueOnly); } } @@ -180,16 +179,16 @@ namespace FidelityFX _resources.DestroyTcrAutogenResources(); } - if (!dispatchParams.Reactive.IsValid) dispatchParams.Reactive = new Fsr2.ResourceView(_resources.DefaultReactive); - if (!dispatchParams.TransparencyAndComposition.IsValid) dispatchParams.TransparencyAndComposition = new Fsr2.ResourceView(_resources.DefaultReactive); - Fsr2Resources.CreateAliasableResources(commandBuffer, _contextDescription, dispatchParams); + if (!dispatchParams.Reactive.IsValid) dispatchParams.Reactive = new ResourceView(_resources.DefaultReactive); + if (!dispatchParams.TransparencyAndComposition.IsValid) dispatchParams.TransparencyAndComposition = new ResourceView(_resources.DefaultReactive); + Fsr3UpscalerResources.CreateAliasableResources(commandBuffer, _contextDescription, dispatchParams); SetupConstants(dispatchParams, resetAccumulation); // Reactive mask bias const int threadGroupWorkRegionDim = 8; - int dispatchSrcX = (Constants.renderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; - int dispatchSrcY = (Constants.renderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; + int dispatchSrcX = (UpscalerConsts.renderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; + int dispatchSrcY = (UpscalerConsts.renderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; int dispatchDstX = (_contextDescription.DisplaySize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; int dispatchDstY = (_contextDescription.DisplaySize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; @@ -214,19 +213,24 @@ namespace FidelityFX commandBuffer.ClearRenderTarget(false, true, Color.clear); } + // FSR3: need to clear here since we need the content of this surface for frame interpolation, so clearing in the lock pass is not an option + bool depthInverted = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) == Fsr3Upscaler.InitializationFlags.EnableDepthInverted; + commandBuffer.SetRenderTarget(Fsr3ShaderIDs.UavReconstructedPrevNearestDepth); + commandBuffer.ClearRenderTarget(false, true, depthInverted ? Color.clear : Color.white); + // Auto exposure SetupSpdConstants(dispatchParams, out var dispatchThreadGroupCount); // Initialize constant buffers data - commandBuffer.SetBufferData(_fsr2ConstantsBuffer, _fsr2ConstantsArray); + commandBuffer.SetBufferData(_upscalerConstantsBuffer, _upscalerConstantsArray); commandBuffer.SetBufferData(_spdConstantsBuffer, _spdConstantsArray); // Auto reactive if (dispatchParams.EnableAutoReactive) { GenerateTransparencyCompositionReactive(dispatchParams, commandBuffer, frameIndex); - dispatchParams.Reactive = new Fsr2.ResourceView(_resources.AutoReactive); - dispatchParams.TransparencyAndComposition = new Fsr2.ResourceView(_resources.AutoComposition); + dispatchParams.Reactive = new ResourceView(_resources.AutoReactive); + dispatchParams.TransparencyAndComposition = new ResourceView(_resources.AutoComposition); } // Compute luminance pyramid @@ -254,22 +258,22 @@ namespace FidelityFX const int threadGroupWorkRegionDimRcas = 16; int threadGroupsX = (Screen.width + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; int threadGroupsY = (Screen.height + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; - _rcasPass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, threadGroupsX, threadGroupsY); + _sharpenPass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, threadGroupsX, threadGroupsY); } _resourceFrameIndex = (_resourceFrameIndex + 1) % MaxQueuedFrames; - Fsr2Resources.DestroyAliasableResources(commandBuffer); + Fsr3UpscalerResources.DestroyAliasableResources(commandBuffer); } - public void GenerateReactiveMask(Fsr2.GenerateReactiveDescription dispatchParams) + public void GenerateReactiveMask(Fsr3Upscaler.GenerateReactiveDescription dispatchParams) { _commandBuffer.Clear(); GenerateReactiveMask(dispatchParams, _commandBuffer); Graphics.ExecuteCommandBuffer(_commandBuffer); } - public void GenerateReactiveMask(Fsr2.GenerateReactiveDescription dispatchParams, CommandBuffer commandBuffer) + public void GenerateReactiveMask(Fsr3Upscaler.GenerateReactiveDescription dispatchParams, CommandBuffer commandBuffer) { const int threadGroupWorkRegionDim = 8; int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; @@ -281,10 +285,10 @@ namespace FidelityFX GenReactiveConsts.flags = (uint)dispatchParams.Flags; commandBuffer.SetBufferData(_generateReactiveConstantsBuffer, _generateReactiveConstantsArray); - ((Fsr2GenerateReactivePass)_generateReactivePass).ScheduleDispatch(commandBuffer, dispatchParams, dispatchSrcX, dispatchSrcY); + ((Fsr3UpscalerGenerateReactivePass)_generateReactivePass).ScheduleDispatch(commandBuffer, dispatchParams, dispatchSrcX, dispatchSrcY); } - private void GenerateTransparencyCompositionReactive(Fsr2.DispatchDescription dispatchParams, CommandBuffer commandBuffer, int frameIndex) + private void GenerateTransparencyCompositionReactive(Fsr3Upscaler.DispatchDescription dispatchParams, CommandBuffer commandBuffer, int frameIndex) { const int threadGroupWorkRegionDim = 8; int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; @@ -299,9 +303,9 @@ namespace FidelityFX _tcrAutogeneratePass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, dispatchSrcX, dispatchSrcY); } - private void SetupConstants(Fsr2.DispatchDescription dispatchParams, bool resetAccumulation) + private void SetupConstants(Fsr3Upscaler.DispatchDescription dispatchParams, bool resetAccumulation) { - ref Fsr2.Fsr2Constants constants = ref Constants; + ref Fsr3Upscaler.UpscalerConstants constants = ref UpscalerConsts; constants.jitterOffset = dispatchParams.JitterOffset; constants.renderSize = dispatchParams.RenderSize; @@ -323,17 +327,17 @@ namespace FidelityFX constants.preExposure = (dispatchParams.PreExposure != 0) ? dispatchParams.PreExposure : 1.0f; // Motion vector data - Vector2Int motionVectorsTargetSize = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDisplayResolutionMotionVectors) != 0 ? constants.displaySize : constants.renderSize; + Vector2Int motionVectorsTargetSize = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDisplayResolutionMotionVectors) != 0 ? constants.displaySize : constants.renderSize; constants.motionVectorScale = dispatchParams.MotionVectorScale / motionVectorsTargetSize; // Compute jitter cancellation - if ((_contextDescription.Flags & Fsr2.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) + if ((_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) { constants.motionVectorJitterCancellation = (_previousJitterOffset - constants.jitterOffset) / motionVectorsTargetSize; _previousJitterOffset = constants.jitterOffset; } - int jitterPhaseCount = Fsr2.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.DisplaySize.x); + int jitterPhaseCount = Fsr3Upscaler.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.DisplaySize.x); if (resetAccumulation || constants.jitterPhaseCount == 0) { constants.jitterPhaseCount = jitterPhaseCount; @@ -356,17 +360,17 @@ namespace FidelityFX constants.frameIndex++; // Shading change usage of the SPD mip levels - constants.lumaMipLevelToUse = Fsr2Pass.ShadingChangeMipLevel; + constants.lumaMipLevelToUse = Fsr3UpscalerPass.ShadingChangeMipLevel; float mipDiv = 2 << constants.lumaMipLevelToUse; constants.lumaMipDimensions.x = (int)(constants.maxRenderSize.x / mipDiv); constants.lumaMipDimensions.y = (int)(constants.maxRenderSize.y / mipDiv); } - private Vector4 SetupDeviceDepthToViewSpaceDepthParams(Fsr2.DispatchDescription dispatchParams) + private Vector4 SetupDeviceDepthToViewSpaceDepthParams(Fsr3Upscaler.DispatchDescription dispatchParams) { - bool inverted = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInverted) != 0; - bool infinite = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInfinite) != 0; + bool inverted = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) != 0; + bool infinite = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInfinite) != 0; // make sure it has no impact if near and far plane values are swapped in dispatch params // the flags "inverted" and "infinite" will decide what transform to use @@ -396,19 +400,19 @@ namespace FidelityFX 1.0f / cotHalfFovY); } - private void SetupRcasConstants(Fsr2.DispatchDescription dispatchParams) + private void SetupRcasConstants(Fsr3Upscaler.DispatchDescription dispatchParams) { int sharpnessIndex = Mathf.RoundToInt(Mathf.Clamp01(dispatchParams.Sharpness) * (RcasConfigs.Length - 1)); RcasConsts = RcasConfigs[sharpnessIndex]; } - private void SetupSpdConstants(Fsr2.DispatchDescription dispatchParams, out Vector2Int dispatchThreadGroupCount) + private void SetupSpdConstants(Fsr3Upscaler.DispatchDescription dispatchParams, out Vector2Int dispatchThreadGroupCount) { RectInt rectInfo = new RectInt(0, 0, dispatchParams.RenderSize.x, dispatchParams.RenderSize.y); SpdSetup(rectInfo, out dispatchThreadGroupCount, out var workGroupOffset, out var numWorkGroupsAndMips); // Downsample - ref Fsr2.SpdConstants spdConstants = ref SpdConsts; + ref Fsr3Upscaler.SpdConstants spdConstants = ref SpdConsts; spdConstants.numWorkGroups = (uint)numWorkGroupsAndMips.x; spdConstants.mips = (uint)numWorkGroupsAndMips.y; spdConstants.workGroupOffsetX = (uint)workGroupOffset.x; @@ -434,7 +438,7 @@ namespace FidelityFX } } - private void DebugCheckDispatch(Fsr2.DispatchDescription dispatchParams) + private void DebugCheckDispatch(Fsr3Upscaler.DispatchDescription dispatchParams) { if (!dispatchParams.Color.IsValid) { @@ -456,7 +460,7 @@ namespace FidelityFX Debug.LogError("Output resource is null"); } - if (dispatchParams.Exposure.IsValid && (_contextDescription.Flags & Fsr2.InitializationFlags.EnableAutoExposure) != 0) + if (dispatchParams.Exposure.IsValid && (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableAutoExposure) != 0) { Debug.LogWarning("Exposure resource provided, however auto exposure flag is present"); } @@ -496,8 +500,8 @@ namespace FidelityFX Debug.LogError("PreExposure provided as 0.0f which is invalid"); } - bool infiniteDepth = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInfinite) != 0; - bool inverseDepth = (_contextDescription.Flags & Fsr2.InitializationFlags.EnableDepthInverted) != 0; + bool infiniteDepth = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInfinite) != 0; + bool inverseDepth = (_contextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) != 0; if (inverseDepth) { @@ -552,32 +556,32 @@ namespace FidelityFX } /// - /// The FSR2 C++ codebase uses floats bitwise converted to ints to pass sharpness parameters to the RCAS shader. + /// The FSR3 C++ codebase uses floats bitwise converted to ints to pass sharpness parameters to the RCAS shader. /// This is not possible in C# without enabling unsafe code compilation, so to avoid that we instead use a table of precomputed values. /// - private static readonly Fsr2.RcasConstants[] RcasConfigs = new [] + private static readonly Fsr3Upscaler.RcasConstants[] RcasConfigs = new [] { - new Fsr2.RcasConstants(1048576000u, 872428544u), - new Fsr2.RcasConstants(1049178080u, 877212745u), - new Fsr2.RcasConstants(1049823372u, 882390168u), - new Fsr2.RcasConstants(1050514979u, 887895276u), - new Fsr2.RcasConstants(1051256227u, 893859143u), - new Fsr2.RcasConstants(1052050675u, 900216232u), - new Fsr2.RcasConstants(1052902144u, 907032080u), - new Fsr2.RcasConstants(1053814727u, 914306687u), - new Fsr2.RcasConstants(1054792807u, 922105590u), - new Fsr2.RcasConstants(1055841087u, 930494326u), - new Fsr2.RcasConstants(1056964608u, 939538432u), - new Fsr2.RcasConstants(1057566688u, 944322633u), - new Fsr2.RcasConstants(1058211980u, 949500056u), - new Fsr2.RcasConstants(1058903587u, 955005164u), - new Fsr2.RcasConstants(1059644835u, 960969031u), - new Fsr2.RcasConstants(1060439283u, 967326120u), - new Fsr2.RcasConstants(1061290752u, 974141968u), - new Fsr2.RcasConstants(1062203335u, 981416575u), - new Fsr2.RcasConstants(1063181415u, 989215478u), - new Fsr2.RcasConstants(1064229695u, 997604214u), - new Fsr2.RcasConstants(1065353216u, 1006648320), + new Fsr3Upscaler.RcasConstants(1048576000u, 872428544u), + new Fsr3Upscaler.RcasConstants(1049178080u, 877212745u), + new Fsr3Upscaler.RcasConstants(1049823372u, 882390168u), + new Fsr3Upscaler.RcasConstants(1050514979u, 887895276u), + new Fsr3Upscaler.RcasConstants(1051256227u, 893859143u), + new Fsr3Upscaler.RcasConstants(1052050675u, 900216232u), + new Fsr3Upscaler.RcasConstants(1052902144u, 907032080u), + new Fsr3Upscaler.RcasConstants(1053814727u, 914306687u), + new Fsr3Upscaler.RcasConstants(1054792807u, 922105590u), + new Fsr3Upscaler.RcasConstants(1055841087u, 930494326u), + new Fsr3Upscaler.RcasConstants(1056964608u, 939538432u), + new Fsr3Upscaler.RcasConstants(1057566688u, 944322633u), + new Fsr3Upscaler.RcasConstants(1058211980u, 949500056u), + new Fsr3Upscaler.RcasConstants(1058903587u, 955005164u), + new Fsr3Upscaler.RcasConstants(1059644835u, 960969031u), + new Fsr3Upscaler.RcasConstants(1060439283u, 967326120u), + new Fsr3Upscaler.RcasConstants(1061290752u, 974141968u), + new Fsr3Upscaler.RcasConstants(1062203335u, 981416575u), + new Fsr3Upscaler.RcasConstants(1063181415u, 989215478u), + new Fsr3Upscaler.RcasConstants(1064229695u, 997604214u), + new Fsr3Upscaler.RcasConstants(1065353216u, 1006648320), }; private static ComputeBuffer CreateConstantBuffer() where TConstants: struct @@ -594,7 +598,7 @@ namespace FidelityFX bufferRef = null; } - private static void DestroyPass(ref Fsr2Pass pass) + private static void DestroyPass(ref Fsr3UpscalerPass pass) { if (pass == null) return; diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs.meta new file mode 100644 index 0000000..673b2ef --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerContext.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 14c8dc4c7c3e4ac418e50a859cec0b2f +timeCreated: 1673442225 \ No newline at end of file diff --git a/Assets/Scripts/Core/Fsr2Pass.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs similarity index 56% rename from Assets/Scripts/Core/Fsr2Pass.cs rename to com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs index 23b8e6c..e1dc225 100644 --- a/Assets/Scripts/Core/Fsr2Pass.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs @@ -26,24 +26,22 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// Base class for all of the compute passes that make up the FSR2 process. - /// This loosely matches the FfxPipelineState struct from the original FSR2 codebase, wrapped in an object-oriented blanket. + /// Base class for all of the compute passes that make up the FSR3 Upscaler process. + /// This loosely matches the FfxPipelineState struct from the original FSR3 codebase, wrapped in an object-oriented blanket. /// These classes are responsible for loading compute shaders, managing temporary resources, binding resources to shader kernels and dispatching said shaders. /// - internal abstract class Fsr2Pass: IDisposable + internal abstract class Fsr3UpscalerPass: IDisposable { - internal const int ShadingChangeMipLevel = 4; // This matches the FFX_FSR2_SHADING_CHANGE_MIP_LEVEL define + internal const int ShadingChangeMipLevel = 4; // This matches the FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL define - protected readonly Fsr2.ContextDescription ContextDescription; - protected readonly Fsr2Resources Resources; + protected readonly Fsr3Upscaler.ContextDescription ContextDescription; + protected readonly Fsr3UpscalerResources Resources; protected readonly ComputeBuffer Constants; protected ComputeShader ComputeShader; protected int KernelIndex; - protected virtual bool AllowFP16 => true; - - protected Fsr2Pass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + protected Fsr3UpscalerPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) { ContextDescription = contextDescription; Resources = resources; @@ -52,26 +50,24 @@ namespace FidelityFX public virtual void Dispose() { - UnloadComputeShader(); } - public abstract void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY); + public abstract void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY); - protected void LoadComputeShader(string name) + protected void InitComputeShader(string passName, ComputeShader shader) { - LoadComputeShader(name, ContextDescription.Flags, ref ComputeShader, out KernelIndex); + InitComputeShader(passName, shader, ContextDescription.Flags); } - private void LoadComputeShader(string name, Fsr2.InitializationFlags flags, ref ComputeShader shaderRef, out int kernelIndex) + private void InitComputeShader(string passName, ComputeShader shader, Fsr3Upscaler.InitializationFlags flags) { - if (shaderRef == null) + if (shader == null) { - shaderRef = ContextDescription.Callbacks.LoadComputeShader(name); - if (shaderRef == null) - throw new MissingReferenceException($"Shader '{name}' could not be loaded! Please ensure it is included in the project correctly."); + throw new MissingReferenceException($"Shader for FSR3 Upscaler '{passName}' could not be loaded! Please ensure it is included in the project correctly."); } - kernelIndex = shaderRef.FindKernel("CS"); + ComputeShader = shader; + KernelIndex = ComputeShader.FindKernel("CS"); bool useLut = false; #if UNITY_2022_1_OR_NEWER // This will also work in 2020.3.43+ and 2021.3.14+ @@ -81,106 +77,89 @@ namespace FidelityFX } #endif - // Allow 16-bit floating point as a configuration option, except on passes that explicitly disable it - bool supportedFP16 = ((flags & Fsr2.InitializationFlags.EnableFP16Usage) != 0 && AllowFP16); - // This matches the permutation rules from the CreatePipeline* functions - if ((flags & Fsr2.InitializationFlags.EnableHighDynamicRange) != 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_HDR_COLOR_INPUT"); - if ((flags & Fsr2.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS"); - if ((flags & Fsr2.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS"); - if ((flags & Fsr2.InitializationFlags.EnableDepthInverted) != 0) shaderRef.EnableKeyword("FFX_FSR2_OPTION_INVERTED_DEPTH"); - if (useLut) shaderRef.EnableKeyword("FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE"); - if (supportedFP16) shaderRef.EnableKeyword("FFX_HALF"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableHighDynamicRange) != 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableMotionVectorsJitterCancellation) != 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableDepthInverted) != 0) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH"); + if (useLut) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE"); + if ((flags & Fsr3Upscaler.InitializationFlags.EnableFP16Usage) != 0) ComputeShader.EnableKeyword("FFX_HALF"); // Inform the shader which render pipeline we're currently using var pipeline = GraphicsSettings.currentRenderPipeline; if (pipeline != null && pipeline.GetType().Name.Contains("HDRenderPipeline")) { - shaderRef.EnableKeyword("UNITY_FSR2_HDRP"); + ComputeShader.EnableKeyword("UNITY_FSR3UPSCALER_HDRP"); } } - - private void UnloadComputeShader() - { - UnloadComputeShader(ref ComputeShader); - } - - private void UnloadComputeShader(ref ComputeShader shaderRef) - { - if (shaderRef == null) - return; - - ContextDescription.Callbacks.UnloadComputeShader(shaderRef); - shaderRef = null; - } } - internal class Fsr2ComputeLuminancePyramidPass : Fsr2Pass + internal class Fsr3UpscalerComputeLuminancePyramidPass : Fsr3UpscalerPass { private readonly ComputeBuffer _spdConstants; - public Fsr2ComputeLuminancePyramidPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants, ComputeBuffer spdConstants) + public Fsr3UpscalerComputeLuminancePyramidPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants, ComputeBuffer spdConstants) : base(contextDescription, resources, constants) { _spdConstants = spdConstants; - LoadComputeShader("FSR2/ffx_fsr2_compute_luminance_pyramid_pass"); + InitComputeShader("compute_luminance_pyramid_pass", contextDescription.Shaders.computeLuminancePyramidPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavSpdAtomicCount, Resources.SpdAtomicCounter); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavExposureMipLumaChange, Resources.SceneLuminance, ShadingChangeMipLevel); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavExposureMip5, Resources.SceneLuminance, 5); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoExposure, Resources.AutoExposure); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavSpdAtomicCount, Resources.SpdAtomicCounter); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavExposureMipLumaChange, Resources.SceneLuminance, ShadingChangeMipLevel); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavExposureMip5, Resources.SceneLuminance, 5); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoExposure, Resources.AutoExposure); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbSpd, _spdConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbSpd, _spdConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2ReconstructPreviousDepthPass : Fsr2Pass + internal class Fsr3UpscalerReconstructPreviousDepthPass : Fsr3UpscalerPass { - public Fsr2ReconstructPreviousDepthPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerReconstructPreviousDepthPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_reconstruct_previous_depth_pass"); + InitComputeShader("reconstruct_previous_depth_pass", contextDescription.Shaders.reconstructPreviousDepthPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; ref var depth = ref dispatchParams.Depth; ref var motionVectors = ref dispatchParams.MotionVectors; ref var exposure = ref dispatchParams.Exposure; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2DepthClipPass : Fsr2Pass + internal class Fsr3UpscalerDepthClipPass : Fsr3UpscalerPass { - public Fsr2DepthClipPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerDepthClipPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_depth_clip_pass"); + InitComputeShader("depth_clip_pass", contextDescription.Shaders.depthClipPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; ref var depth = ref dispatchParams.Depth; @@ -189,62 +168,59 @@ namespace FidelityFX ref var reactive = ref dispatchParams.Reactive; ref var tac = ref dispatchParams.TransparencyAndComposition; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvReconstructedPrevNearestDepth, Fsr2ShaderIDs.UavReconstructedPrevNearestDepth); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedDepth, Fsr2ShaderIDs.UavDilatedDepth); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPrevDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex ^ 1]); - - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputDepth, depth.RenderTarget, depth.MipLevel, depth.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvReconstructedPrevNearestDepth, Fsr3ShaderIDs.UavReconstructedPrevNearestDepth); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedDepth, Fsr3ShaderIDs.UavDilatedDepth); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPrevDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex ^ 1]); + + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2LockPass : Fsr2Pass + internal class Fsr3UpscalerLockPass : Fsr3UpscalerPass { - public Fsr2LockPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerLockPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_lock_pass"); + InitComputeShader("lock_pass", contextDescription.Shaders.lockPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLockInputLuma, Fsr2ShaderIDs.UavLockInputLuma); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLockInputLuma, Fsr3ShaderIDs.UavLockInputLuma); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2AccumulatePass : Fsr2Pass + internal class Fsr3UpscalerAccumulatePass : Fsr3UpscalerPass { - private const string SharpeningKeyword = "FFX_FSR2_OPTION_APPLY_SHARPENING"; - - // Workaround: Disable FP16 path for the accumulate pass on NVIDIA due to reduced occupancy and high VRAM throughput. - protected override bool AllowFP16 => SystemInfo.graphicsDeviceVendorID != 0x10DE; + private const string SharpeningKeyword = "FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING"; #if UNITY_2021_2_OR_NEWER private readonly LocalKeyword _sharpeningKeyword; #endif - public Fsr2AccumulatePass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) + public Fsr3UpscalerAccumulatePass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) : base(contextDescription, resources, constants) { - LoadComputeShader("FSR2/ffx_fsr2_accumulate_pass"); + InitComputeShader("accumulate_pass", contextDescription.Shaders.accumulatePass); #if UNITY_2021_2_OR_NEWER _sharpeningKeyword = new LocalKeyword(ComputeShader, SharpeningKeyword); #endif } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { #if UNITY_2021_2_OR_NEWER if (dispatchParams.EnableSharpening) @@ -258,115 +234,115 @@ namespace FidelityFX commandBuffer.DisableShaderKeyword(SharpeningKeyword); #endif - if ((ContextDescription.Flags & Fsr2.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) + if ((ContextDescription.Flags & Fsr3Upscaler.InitializationFlags.EnableDisplayResolutionMotionVectors) == 0) { - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedMotionVectors, Resources.DilatedMotionVectors[frameIndex]); } else { ref var motionVectors = ref dispatchParams.MotionVectors; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); } ref var exposure = ref dispatchParams.Exposure; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvDilatedReactiveMasks, Fsr2ShaderIDs.UavDilatedReactiveMasks); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInternalUpscaled, Resources.InternalUpscaled[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLockStatus, Resources.LockStatus[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPreparedInputColor, Fsr2ShaderIDs.UavPreparedInputColor); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLanczosLut, Resources.LanczosLut); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvUpscaleMaximumBiasLut, Resources.MaximumBiasLut); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvSceneLuminanceMips, Resources.SceneLuminance); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvAutoExposure, Resources.AutoExposure); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvLumaHistory, Resources.LumaHistory[frameIndex ^ 1]); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavInternalUpscaled, Resources.InternalUpscaled[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavLockStatus, Resources.LockStatus[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavLumaHistory, Resources.LumaHistory[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvDilatedReactiveMasks, Fsr3ShaderIDs.UavDilatedReactiveMasks); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInternalUpscaled, Resources.InternalUpscaled[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLockStatus, Resources.LockStatus[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPreparedInputColor, Fsr3ShaderIDs.UavPreparedInputColor); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLanczosLut, Resources.LanczosLut); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvUpscaleMaximumBiasLut, Resources.MaximumBiasLut); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvSceneLuminanceMips, Resources.SceneLuminance); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvAutoExposure, Resources.AutoExposure); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvLumaHistory, Resources.LumaHistory[frameIndex ^ 1]); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavInternalUpscaled, Resources.InternalUpscaled[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavLockStatus, Resources.LockStatus[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavLumaHistory, Resources.LumaHistory[frameIndex]); ref var output = ref dispatchParams.Output; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2RcasPass : Fsr2Pass + internal class Fsr3UpscalerSharpenPass : Fsr3UpscalerPass { private readonly ComputeBuffer _rcasConstants; - public Fsr2RcasPass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants, ComputeBuffer rcasConstants) + public Fsr3UpscalerSharpenPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants, ComputeBuffer rcasConstants) : base(contextDescription, resources, constants) { _rcasConstants = rcasConstants; - LoadComputeShader("FSR2/ffx_fsr2_rcas_pass"); + InitComputeShader("rcas_pass", contextDescription.Shaders.sharpenPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var exposure = ref dispatchParams.Exposure; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvRcasInput, Resources.InternalUpscaled[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputExposure, exposure.RenderTarget, exposure.MipLevel, exposure.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvRcasInput, Resources.InternalUpscaled[frameIndex]); ref var output = ref dispatchParams.Output; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavUpscaledOutput, output.RenderTarget, output.MipLevel, output.SubElement); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbRcas, _rcasConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbRcas, _rcasConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2GenerateReactivePass : Fsr2Pass + internal class Fsr3UpscalerGenerateReactivePass : Fsr3UpscalerPass { private readonly ComputeBuffer _generateReactiveConstants; - public Fsr2GenerateReactivePass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer generateReactiveConstants) + public Fsr3UpscalerGenerateReactivePass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer generateReactiveConstants) : base(contextDescription, resources, null) { _generateReactiveConstants = generateReactiveConstants; - LoadComputeShader("FSR2/ffx_fsr2_autogen_reactive_pass"); + InitComputeShader("autogen_reactive_pass", contextDescription.Shaders.autoGenReactivePass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { } - public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.GenerateReactiveDescription dispatchParams, int dispatchX, int dispatchY) + public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.GenerateReactiveDescription dispatchParams, int dispatchX, int dispatchY) { ref var opaqueOnly = ref dispatchParams.ColorOpaqueOnly; ref var color = ref dispatchParams.ColorPreUpscale; ref var reactive = ref dispatchParams.OutReactive; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoReactive, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoReactive, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbGenReactive, _generateReactiveConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbGenReactive, _generateReactiveConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } } - internal class Fsr2TcrAutogeneratePass : Fsr2Pass + internal class Fsr3UpscalerTcrAutogeneratePass : Fsr3UpscalerPass { private readonly ComputeBuffer _tcrAutogenerateConstants; - public Fsr2TcrAutogeneratePass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants, ComputeBuffer tcrAutogenerateConstants) + public Fsr3UpscalerTcrAutogeneratePass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants, ComputeBuffer tcrAutogenerateConstants) : base(contextDescription, resources, constants) { _tcrAutogenerateConstants = tcrAutogenerateConstants; - LoadComputeShader("FSR2/ffx_fsr2_tcr_autogen_pass"); + InitComputeShader("tcr_autogen_pass", contextDescription.Shaders.tcrAutoGenPass); } - public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) + public override void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { ref var color = ref dispatchParams.Color; ref var motionVectors = ref dispatchParams.MotionVectors; @@ -374,21 +350,21 @@ namespace FidelityFX ref var reactive = ref dispatchParams.Reactive; ref var tac = ref dispatchParams.TransparencyAndComposition; - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex ^ 1]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); - - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoReactive, Resources.AutoReactive); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavAutoComposition, Resources.AutoComposition); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex]); - commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr2ShaderIDs.UavPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvOpaqueOnly, opaqueOnly.RenderTarget, opaqueOnly.MipLevel, opaqueOnly.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputColor, color.RenderTarget, color.MipLevel, color.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvInputMotionVectors, motionVectors.RenderTarget, motionVectors.MipLevel, motionVectors.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex ^ 1]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvReactiveMask, reactive.RenderTarget, reactive.MipLevel, reactive.SubElement); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.SrvTransparencyAndCompositionMask, tac.RenderTarget, tac.MipLevel, tac.SubElement); + + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoReactive, Resources.AutoReactive); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavAutoComposition, Resources.AutoComposition); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavPrevColorPreAlpha, Resources.PrevPreAlpha[frameIndex]); + commandBuffer.SetComputeTextureParam(ComputeShader, KernelIndex, Fsr3ShaderIDs.UavPrevColorPostAlpha, Resources.PrevPostAlpha[frameIndex]); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbFsr2, Constants, 0, Marshal.SizeOf()); - commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr2ShaderIDs.CbGenReactive, _tcrAutogenerateConstants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbFsr3Upscaler, Constants, 0, Marshal.SizeOf()); + commandBuffer.SetComputeConstantBufferParam(ComputeShader, Fsr3ShaderIDs.CbGenReactive, _tcrAutogenerateConstants, 0, Marshal.SizeOf()); commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); } diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs.meta new file mode 100644 index 0000000..8ffd58e --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerPass.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cfd077da533b192458b0b548668776e7 +timeCreated: 1676885169 \ No newline at end of file diff --git a/Assets/Scripts/Core/Fsr2Resources.cs b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs similarity index 64% rename from Assets/Scripts/Core/Fsr2Resources.cs rename to com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs index a3e8e27..676867b 100644 --- a/Assets/Scripts/Core/Fsr2Resources.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs @@ -26,10 +26,10 @@ using UnityEngine.Rendering; namespace FidelityFX { /// - /// Helper class for bundling and managing persistent resources required by the FSR2 process. + /// Helper class for bundling and managing persistent resources required by the FSR3 Upscaler process. /// This includes lookup tables, default fallback resources and double-buffered resources that get swapped between frames. /// - internal class Fsr2Resources + internal class Fsr3UpscalerResources { public Texture2D DefaultExposure; public Texture2D DefaultReactive; @@ -47,7 +47,7 @@ namespace FidelityFX public readonly RenderTexture[] PrevPreAlpha = new RenderTexture[2]; public readonly RenderTexture[] PrevPostAlpha = new RenderTexture[2]; - public void Create(Fsr2.ContextDescription contextDescription) + public void Create(Fsr3Upscaler.ContextDescription contextDescription) { // Generate the data for the LUT const int lanczos2LutWidth = 128; @@ -55,7 +55,7 @@ namespace FidelityFX for (int currentLanczosWidthIndex = 0; currentLanczosWidthIndex < lanczos2LutWidth; ++currentLanczosWidthIndex) { float x = 2.0f * currentLanczosWidthIndex / (lanczos2LutWidth - 1); - float y = Fsr2.Lanczos2(x); + float y = Fsr3Upscaler.Lanczos2(x); lanczos2Weights[currentLanczosWidthIndex] = y; } @@ -65,108 +65,108 @@ namespace FidelityFX maximumBias[i] = MaximumBias[i] / 2.0f; } - // Resource FSR2_LanczosLutData: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE + // Resource FSR3UPSCALER_LanczosLutData: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE // R16_SNorm textures are not supported by Unity on most platforms, strangely enough. So instead we use R32_SFloat and upload pre-normalized float data. - LanczosLut = new Texture2D(lanczos2LutWidth, 1, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR2_LanczosLutData" }; + LanczosLut = new Texture2D(lanczos2LutWidth, 1, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR3UPSCALER_LanczosLutData" }; LanczosLut.SetPixelData(lanczos2Weights, 0); LanczosLut.Apply(); - // Resource FSR2_MaximumUpsampleBias: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE - MaximumBiasLut = new Texture2D(MaximumBiasTextureWidth, MaximumBiasTextureHeight, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR2_MaximumUpsampleBias" }; + // Resource FSR3UPSCALER_MaximumUpsampleBias: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R16_SNORM, FFX_RESOURCE_FLAGS_NONE + MaximumBiasLut = new Texture2D(MaximumBiasTextureWidth, MaximumBiasTextureHeight, GraphicsFormat.R32_SFloat, TextureCreationFlags.None) { name = "FSR3UPSCALER_MaximumUpsampleBias" }; MaximumBiasLut.SetPixelData(maximumBias, 0); MaximumBiasLut.Apply(); - // Resource FSR2_DefaultExposure: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE - DefaultExposure = new Texture2D(1, 1, GraphicsFormat.R32G32_SFloat, TextureCreationFlags.None) { name = "FSR2_DefaultExposure" }; + // Resource FSR3UPSCALER_DefaultExposure: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE + DefaultExposure = new Texture2D(1, 1, GraphicsFormat.R32G32_SFloat, TextureCreationFlags.None) { name = "FSR3UPSCALER_DefaultExposure" }; DefaultExposure.SetPixel(0, 0, Color.clear); DefaultExposure.Apply(); - // Resource FSR2_DefaultReactivityMask: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE - DefaultReactive = new Texture2D(1, 1, GraphicsFormat.R8_UNorm, TextureCreationFlags.None) { name = "FSR2_DefaultReactivityMask" }; + // Resource FSR3UPSCALER_DefaultReactivityMask: FFX_RESOURCE_USAGE_READ_ONLY, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE + DefaultReactive = new Texture2D(1, 1, GraphicsFormat.R8_UNorm, TextureCreationFlags.None) { name = "FSR3UPSCALER_DefaultReactivityMask" }; DefaultReactive.SetPixel(0, 0, Color.clear); DefaultReactive.Apply(); - // Resource FSR2_SpdAtomicCounter: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE - // Despite what the original FSR2 codebase says, this resource really isn't aliasable. Resetting this counter to 0 every frame breaks auto-exposure on MacOS Metal. - SpdAtomicCounter = new RenderTexture(1, 1, 0, GraphicsFormat.R32_UInt) { name = "FSR2_SpdAtomicCounter", enableRandomWrite = true }; + // Resource FSR3UPSCALER_SpdAtomicCounter: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE + // Despite what the original FSR3 codebase says, this resource really isn't aliasable. Resetting this counter to 0 every frame breaks auto-exposure on MacOS Metal. + SpdAtomicCounter = new RenderTexture(1, 1, 0, GraphicsFormat.R32_UInt) { name = "FSR3UPSCALER_SpdAtomicCounter", enableRandomWrite = true }; SpdAtomicCounter.Create(); - // Resource FSR2_AutoExposure: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE - AutoExposure = new RenderTexture(1, 1, 0, GraphicsFormat.R32G32_SFloat) { name = "FSR2_AutoExposure", enableRandomWrite = true }; + // Resource FSR3UPSCALER_AutoExposure: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32G32_FLOAT, FFX_RESOURCE_FLAGS_NONE + AutoExposure = new RenderTexture(1, 1, 0, GraphicsFormat.R32G32_SFloat) { name = "FSR3UPSCALER_AutoExposure", enableRandomWrite = true }; AutoExposure.Create(); - // Resource FSR2_ExposureMips: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + // Resource FSR3UPSCALER_ExposureMips: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE // This is a rather special case: it's an aliasable resource, but because we require a mipmap chain and bind specific mip levels per shader, we can't easily use temporary RTs for this. int w = contextDescription.MaxRenderSize.x / 2, h = contextDescription.MaxRenderSize.y / 2; int mipCount = 1 + Mathf.FloorToInt(Mathf.Log(Math.Max(w, h), 2.0f)); - SceneLuminance = new RenderTexture(w, h, 0, GraphicsFormat.R16_SFloat, mipCount) { name = "FSR2_ExposureMips", enableRandomWrite = true, useMipMap = true, autoGenerateMips = false }; + SceneLuminance = new RenderTexture(w, h, 0, GraphicsFormat.R16_SFloat, mipCount) { name = "FSR3UPSCALER_ExposureMips", enableRandomWrite = true, useMipMap = true, autoGenerateMips = false }; SceneLuminance.Create(); - // Resources FSR2_InternalDilatedVelocity1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(DilatedMotionVectors, "FSR2_InternalDilatedVelocity", contextDescription.MaxRenderSize, GraphicsFormat.R16G16_SFloat); + // Resources FSR3UPSCALER_InternalDilatedVelocity1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(DilatedMotionVectors, "FSR3UPSCALER_InternalDilatedVelocity", contextDescription.MaxRenderSize, GraphicsFormat.R16G16_SFloat); - // Resources FSR2_LockStatus1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(LockStatus, "FSR2_LockStatus", contextDescription.DisplaySize, GraphicsFormat.R16G16_SFloat); + // Resources FSR3UPSCALER_LockStatus1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(LockStatus, "FSR3UPSCALER_LockStatus", contextDescription.DisplaySize, GraphicsFormat.R16G16_SFloat); - // Resources FSR2_InternalUpscaled1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(InternalUpscaled, "FSR2_InternalUpscaled", contextDescription.DisplaySize, GraphicsFormat.R16G16B16A16_SFloat); + // Resources FSR3UPSCALER_InternalUpscaled1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(InternalUpscaled, "FSR3UPSCALER_InternalUpscaled", contextDescription.DisplaySize, GraphicsFormat.R16G16B16A16_SFloat); - // Resources FSR2_LumaHistory1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8B8A8_UNORM, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(LumaHistory, "FSR2_LumaHistory", contextDescription.DisplaySize, GraphicsFormat.R8G8B8A8_UNorm); + // Resources FSR3UPSCALER_LumaHistory1/2: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8B8A8_UNORM, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(LumaHistory, "FSR3UPSCALER_LumaHistory", contextDescription.DisplaySize, GraphicsFormat.R8G8B8A8_UNorm); } - public void CreateTcrAutogenResources(Fsr2.ContextDescription contextDescription) + public void CreateTcrAutogenResources(Fsr3Upscaler.ContextDescription contextDescription) { - // Resource FSR2_AutoReactive: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE - AutoReactive = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR2_AutoReactive", enableRandomWrite = true }; + // Resource FSR3UPSCALER_AutoReactive: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE + AutoReactive = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR3UPSCALER_AutoReactive", enableRandomWrite = true }; AutoReactive.Create(); - // Resource FSR2_AutoComposition: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE - AutoComposition = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR2_AutoComposition", enableRandomWrite = true }; + // Resource FSR3UPSCALER_AutoComposition: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_NONE + AutoComposition = new RenderTexture(contextDescription.MaxRenderSize.x, contextDescription.MaxRenderSize.y, 0, GraphicsFormat.R8_UNorm) { name = "FSR3UPSCALER_AutoComposition", enableRandomWrite = true }; AutoComposition.Create(); - // Resources FSR2_PrevPreAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(PrevPreAlpha, "FSR2_PrevPreAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); + // Resources FSR3UPSCALER_PrevPreAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(PrevPreAlpha, "FSR3UPSCALER_PrevPreAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); - // Resources FSR2_PrevPostAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE - CreateDoubleBufferedResource(PrevPostAlpha, "FSR2_PrevPostAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); + // Resources FSR3UPSCALER_PrevPostAlpha0/1: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R11G11B10_FLOAT, FFX_RESOURCE_FLAGS_NONE + CreateDoubleBufferedResource(PrevPostAlpha, "FSR3UPSCALER_PrevPostAlpha", contextDescription.MaxRenderSize, GraphicsFormat.B10G11R11_UFloatPack32); } // Set up shared aliasable resources, i.e. temporary render textures // These do not need to persist between frames, but they do need to be available between passes - public static void CreateAliasableResources(CommandBuffer commandBuffer, Fsr2.ContextDescription contextDescription, Fsr2.DispatchDescription dispatchParams) + public static void CreateAliasableResources(CommandBuffer commandBuffer, Fsr3Upscaler.ContextDescription contextDescription, Fsr3Upscaler.DispatchDescription dispatchParams) { Vector2Int displaySize = contextDescription.DisplaySize; Vector2Int maxRenderSize = contextDescription.MaxRenderSize; - // FSR2_ReconstructedPrevNearestDepth: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavReconstructedPrevNearestDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_UInt, 1, true); + // FSR3UPSCALER_ReconstructedPrevNearestDepth: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_UINT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavReconstructedPrevNearestDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_UInt, 1, true); - // FSR2_DilatedDepth: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavDilatedDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_SFloat, 1, true); + // FSR3UPSCALER_DilatedDepth: FFX_RESOURCE_USAGE_RENDERTARGET | FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R32_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavDilatedDepth, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R32_SFloat, 1, true); - // FSR2_LockInputLuma: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavLockInputLuma, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16_SFloat, 1, true); + // FSR3UPSCALER_LockInputLuma: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavLockInputLuma, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16_SFloat, 1, true); - // FSR2_DilatedReactiveMasks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavDilatedReactiveMasks, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R8G8_UNorm, 1, true); + // FSR3UPSCALER_DilatedReactiveMasks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8G8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavDilatedReactiveMasks, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R8G8_UNorm, 1, true); - // FSR2_PreparedInputColor: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavPreparedInputColor, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16G16B16A16_SFloat, 1, true); + // FSR3UPSCALER_PreparedInputColor: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavPreparedInputColor, maxRenderSize.x, maxRenderSize.y, 0, default, GraphicsFormat.R16G16B16A16_SFloat, 1, true); - // FSR2_NewLocks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE - commandBuffer.GetTemporaryRT(Fsr2ShaderIDs.UavNewLocks, displaySize.x, displaySize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); + // FSR3UPSCALER_NewLocks: FFX_RESOURCE_USAGE_UAV, FFX_SURFACE_FORMAT_R8_UNORM, FFX_RESOURCE_FLAGS_ALIASABLE + commandBuffer.GetTemporaryRT(Fsr3ShaderIDs.UavNewLocks, displaySize.x, displaySize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); } public static void DestroyAliasableResources(CommandBuffer commandBuffer) { // Release all of the aliasable resources used this frame - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavReconstructedPrevNearestDepth); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavDilatedDepth); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavLockInputLuma); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavDilatedReactiveMasks); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavPreparedInputColor); - commandBuffer.ReleaseTemporaryRT(Fsr2ShaderIDs.UavNewLocks); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavReconstructedPrevNearestDepth); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavDilatedDepth); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavLockInputLuma); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavDilatedReactiveMasks); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavPreparedInputColor); + commandBuffer.ReleaseTemporaryRT(Fsr3ShaderIDs.UavNewLocks); } private static void CreateDoubleBufferedResource(RenderTexture[] resource, string name, Vector2Int size, GraphicsFormat format) diff --git a/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs.meta b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs.meta new file mode 100644 index 0000000..bf03a07 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Runtime/FSR3/Fsr3UpscalerResources.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ec6c0c34c7b11f041885ddee4aa72818 +timeCreated: 1677236102 \ No newline at end of file diff --git a/com.unity.postprocessing/PostProcessing/Runtime/Monitors/Monitor.cs b/com.unity.postprocessing/PostProcessing/Runtime/Monitors/Monitor.cs index fbcbb21..0e5d1a8 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/Monitors/Monitor.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/Monitors/Monitor.cs @@ -48,7 +48,7 @@ namespace UnityEngine.Rendering.PostProcessing return requested && SystemInfo.supportsComputeShaders && !RuntimeUtilities.isAndroidOpenGL - && !RuntimeUtilities.isWebGL + && !RuntimeUtilities.isWebNonWebGPU && ShaderResourcesAvailable(context); } diff --git a/com.unity.postprocessing/PostProcessing/Runtime/PostProcessLayer.cs b/com.unity.postprocessing/PostProcessing/Runtime/PostProcessLayer.cs index dc0b571..42e42df 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/PostProcessLayer.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/PostProcessLayer.cs @@ -51,7 +51,7 @@ namespace UnityEngine.Rendering.PostProcessing TemporalAntialiasing, /// - /// FidelityFX Super Resolution 2 (FSR2). + /// FidelityFX Super Resolution 3 (FSR3) Upscaler. /// SuperResolution, } @@ -97,7 +97,7 @@ namespace UnityEngine.Rendering.PostProcessing public TemporalAntialiasing temporalAntialiasing; /// - /// FSR2 upscaling & anti-aliasing settings for this camera. + /// FSR3 upscaling & anti-aliasing settings for this camera. /// public SuperResolution superResolution; @@ -282,7 +282,9 @@ namespace UnityEngine.Rendering.PostProcessing #if UNITY_2019_1_OR_NEWER // We always use a CommandBuffer to blit to the final render target // OnRenderImage is used only to avoid the automatic blit from the RenderTexture of Camera.forceIntoRenderTexture to the actual target +#if !UNITY_EDITOR [ImageEffectUsesCommandBuffer] +#endif void OnRenderImage(RenderTexture src, RenderTexture dst) { if (m_opaqueOnly != null) @@ -540,6 +542,10 @@ namespace UnityEngine.Rendering.PostProcessing #endif } } + else + { + m_Camera.nonJitteredProjectionMatrix = m_Camera.projectionMatrix; + } #if (ENABLE_VR_MODULE && ENABLE_VR) if (m_Camera.stereoEnabled) @@ -1191,7 +1197,7 @@ namespace UnityEngine.Rendering.PostProcessing // Set the upscaler's output to full display resolution, as well as for all following post-processing effects context.SetRenderSize(superResolution.displaySize); - + var fsrTarget = m_TargetPool.Get(); var finalDestination = context.destination; context.GetScreenSpaceTemporaryRT(cmd, fsrTarget, 0, context.sourceFormat, isUpscaleOutput: true); diff --git a/com.unity.postprocessing/PostProcessing/Runtime/PostProcessRenderContext.cs b/com.unity.postprocessing/PostProcessing/Runtime/PostProcessRenderContext.cs index 4cbf865..8a23e55 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/PostProcessRenderContext.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/PostProcessRenderContext.cs @@ -216,7 +216,7 @@ namespace UnityEngine.Rendering.PostProcessing public TemporalAntialiasing temporalAntialiasing { get; internal set; } /// - /// A reference to the FSR2 settings for the rendering layer. + /// A reference to the FSR3 Upscaler settings for the rendering layer. /// public SuperResolution superResolution { get; internal set; } diff --git a/com.unity.postprocessing/PostProcessing/Runtime/PostProcessResources.cs b/com.unity.postprocessing/PostProcessing/Runtime/PostProcessResources.cs index fb9e469..35293ef 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/PostProcessResources.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/PostProcessResources.cs @@ -1,4 +1,5 @@ using System; +using FidelityFX; namespace UnityEngine.Rendering.PostProcessing { @@ -214,9 +215,9 @@ namespace UnityEngine.Rendering.PostProcessing public ComputeShader gaussianDownsample; /// - /// Compute shaders that need to be looked up by name. + /// Compute shaders used by the FidelityFX Super Resolution 3 (FSR3) Upscaler. /// - public NamedComputeShader[] namedShaders; + public Fsr3UpscalerShaders superResolution; /// /// Returns a copy of this class and its content. @@ -226,24 +227,6 @@ namespace UnityEngine.Rendering.PostProcessing { return (ComputeShaders)MemberwiseClone(); } - - public ComputeShader FindComputeShader(string name) - { - for (int i = 0; i < namedShaders.Length; ++i) - { - if (namedShaders[i].name == name) - return namedShaders[i].shader; - } - - return null; - } - } - - [Serializable] - public class NamedComputeShader - { - public string name; - public ComputeShader shader; } /// diff --git a/com.unity.postprocessing/PostProcessing/Runtime/Utils/RuntimeUtilities.cs b/com.unity.postprocessing/PostProcessing/Runtime/Utils/RuntimeUtilities.cs index a1d9154..7fd24a1 100644 --- a/com.unity.postprocessing/PostProcessing/Runtime/Utils/RuntimeUtilities.cs +++ b/com.unity.postprocessing/PostProcessing/Runtime/Utils/RuntimeUtilities.cs @@ -862,14 +862,28 @@ namespace UnityEngine.Rendering.PostProcessing /// Returns true if the target platform is WebGL, /// false otherwise. /// - public static bool isWebGL + public static bool isWebNonWebGPU { - get { -#if UNITY_WEBGL + get + { +#if UNITY_EDITOR + #if UNITY_WEBGL + #if UNITY_2023_2_OR_NEWER + return PlayerSettings.GetGraphicsAPIs(BuildTarget.WebGL).First() != GraphicsDeviceType.WebGPU; + #else return true; -#else + #endif + #else return false; + #endif +#else + return Application.platform == RuntimePlatform.WebGLPlayer + #if UNITY_2023_2_OR_NEWER + && SystemInfo.graphicsDeviceType != GraphicsDeviceType.WebGPU + #endif + ; #endif + } } diff --git a/com.unity.postprocessing/PostProcessing/Shaders/ACES.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/ACES.hlsl index 9f77efe..1405bb9 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/ACES.hlsl +++ b/com.unity.postprocessing/PostProcessing/Shaders/ACES.hlsl @@ -220,7 +220,9 @@ half3 ACES_to_ACEScc(half3 x) x = clamp(x, 0.0, HALF_MAX); // x is clamped to [0, HALF_MAX], skip the <= 0 check - return (x < 0.00003051757) ? (log2(0.00001525878 + x * 0.5) + 9.72) / 17.52 : (log2(x) + 9.72) / 17.52; + return half3((x.x < 0.00003051757) ? (log2(0.00001525878 + x.x * 0.5) + 9.72) / 17.52 : (log2(x.x) + 9.72) / 17.52, + (x.y < 0.00003051757) ? (log2(0.00001525878 + x.y * 0.5) + 9.72) / 17.52 : (log2(x.y) + 9.72) / 17.52, + (x.z < 0.00003051757) ? (log2(0.00001525878 + x.z * 0.5) + 9.72) / 17.52 : (log2(x.z) + 9.72) / 17.52); /* return half3( @@ -678,7 +680,9 @@ half roll_white_fwd( half3 linear_to_sRGB(half3 x) { - return (x <= 0.0031308 ? (x * 12.9232102) : 1.055 * pow(x, 1.0 / 2.4) - 0.055); + return half3(x.x <= 0.0031308 ? (x.x * 12.9232102) : 1.055 * pow(x.x, 1.0 / 2.4) - 0.055, + x.y <= 0.0031308 ? (x.y * 12.9232102) : 1.055 * pow(x.y, 1.0 / 2.4) - 0.055, + x.z <= 0.0031308 ? (x.z * 12.9232102) : 1.055 * pow(x.z, 1.0 / 2.4) - 0.055); } half3 linear_to_bt1886(half3 x, half gamma, half Lw, half Lb) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl new file mode 100644 index 0000000..1982bcb --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl @@ -0,0 +1,52 @@ +#define UNITY_UV_STARTS_AT_TOP 1 +#define UNITY_REVERSED_Z 1 +#define UNITY_GATHER_SUPPORTED (SHADER_TARGET >= 50) +#define UNITY_CAN_READ_POSITION_IN_FRAGMENT_PROGRAM 1 + +#define TEXTURE2D_SAMPLER2D(textureName, samplerName) Texture2D textureName; SamplerState samplerName +#define TEXTURE3D_SAMPLER3D(textureName, samplerName) Texture3D textureName; SamplerState samplerName + +#define TEXTURE2D(textureName) Texture2D textureName +#define SAMPLER2D(samplerName) SamplerState samplerName + +#define TEXTURE3D(textureName) Texture3D textureName +#define SAMPLER3D(samplerName) SamplerState samplerName + +#define TEXTURE2D_ARGS(textureName, samplerName) Texture2D textureName, SamplerState samplerName +#define TEXTURE2D_PARAM(textureName, samplerName) textureName, samplerName + +#define TEXTURE3D_ARGS(textureName, samplerName) Texture3D textureName, SamplerState samplerName +#define TEXTURE3D_PARAM(textureName, samplerName) textureName, samplerName + +#define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) +#define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) + +#define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) + +#define LOAD_TEXTURE2D(textureName, texelSize, icoord2) textureName.Load(int3(icoord2, 0)) +#define LOAD_TEXTURE2D_LOD(textureName, texelSize, icoord2) textureName.Load(int3(icoord2, lod)) + +#define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) +#define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) +#define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) +#define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) + +#define SAMPLE_DEPTH_TEXTURE(textureName, samplerName, coord2) SAMPLE_TEXTURE2D(textureName, samplerName, coord2).r +#define SAMPLE_DEPTH_TEXTURE_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod).r + +#define UNITY_BRANCH [branch] +#define UNITY_FLATTEN [flatten] +#define UNITY_UNROLL [unroll] +#define UNITY_LOOP [loop] +#define UNITY_FASTOPT [fastopt] + +#define CBUFFER_START(name) cbuffer name { +#define CBUFFER_END }; + +#if UNITY_GATHER_SUPPORTED + #define FXAA_HLSL_5 1 + #define SMAA_HLSL_4_1 1 +#else + #define FXAA_HLSL_4 1 + #define SMAA_HLSL_4 1 +#endif diff --git a/com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl.meta new file mode 100644 index 0000000..e4d7e2c --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/API/WebGPU.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9597bf0cd70376447ace14a366b40fe8 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/FinalPass.shader b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/FinalPass.shader index 879b7f7..17c9853 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/FinalPass.shader +++ b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/FinalPass.shader @@ -99,7 +99,7 @@ Shader "Hidden/PostProcessing/FinalPass" Pass { HLSLPROGRAM - #pragma exclude_renderers gles vulkan switch + #pragma exclude_renderers gles vulkan webgpu switch #pragma multi_compile __ STEREO_INSTANCING_ENABLED STEREO_DOUBLEWIDE_TARGET #pragma target 5.0 @@ -115,7 +115,7 @@ Shader "Hidden/PostProcessing/FinalPass" Pass { HLSLPROGRAM - #pragma exclude_renderers gles vulkan switch + #pragma exclude_renderers gles vulkan webgpu switch #pragma multi_compile __ STEREO_INSTANCING_ENABLED STEREO_DOUBLEWIDE_TARGET #pragma target 3.0 @@ -147,7 +147,7 @@ Shader "Hidden/PostProcessing/FinalPass" Pass { HLSLPROGRAM - #pragma only_renderers gles vulkan switch + #pragma only_renderers gles vulkan webgpu switch #pragma multi_compile __ STEREO_DOUBLEWIDE_TARGET //not supporting STEREO_INSTANCING_ENABLED ENDHLSL diff --git a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVODownsample1.compute b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVODownsample1.compute index 2fdb6c7..4e63737 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVODownsample1.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVODownsample1.compute @@ -29,11 +29,11 @@ #ifdef MSAA // Output textures +RWTexture2D DS4x; +RWTexture2DArray DS4xAtlas; RWTexture2D LinearZ; RWTexture2D DS2x; RWTexture2DArray DS2xAtlas; -RWTexture2D DS4x; -RWTexture2DArray DS4xAtlas; // Input textures Texture2D Depth; @@ -42,11 +42,11 @@ Texture2D Depth; groupshared float2 g_CacheW[256]; #else // Output textures +RWTexture2D DS4x; +RWTexture2DArray DS4xAtlas; RWTexture2D LinearZ; RWTexture2D DS2x; RWTexture2DArray DS2xAtlas; -RWTexture2D DS4x; -RWTexture2DArray DS4xAtlas; // Input textures Texture2D Depth; @@ -122,7 +122,6 @@ void main(uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_Group uint slice = ((st.x & 3) | (st.y << 2)) & 15; DS2x[st] = w1; DS2xAtlas[uint3(st >> 2, slice)] = w1; - if ((GI & 011) == 0) { st = DTid.xy >> 1; @@ -130,7 +129,6 @@ void main(uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_Group DS4x[st] = w1; DS4xAtlas[uint3(st >> 2, slice)] = w1; } - } #endif diff --git a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVORender.compute b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVORender.compute index f4cab26..033941d 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVORender.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVORender.compute @@ -27,6 +27,12 @@ #pragma kernel MultiScaleVORender_MSAA MAIN=MultiScaleVORender_MSAA MSAA #pragma kernel MultiScaleVORender_MSAA_interleaved MAIN=MultiScaleVORender_MSAA_interleaved MSAA INTERLEAVE_RESULT +#pragma kernel MultiScaleVORender_Float4 MAIN=MultiScaleVORender_Float4 FLOAT4 +#pragma kernel MultiScaleVORender_interleaved_Float4 MAIN=MultiScaleVORender_interleaved_Float4 INTERLEAVE_RESULT FLOAT4 +#pragma kernel MultiScaleVORender_MSAA_Float4 MAIN=MultiScaleVORender_MSAA_Float4 MSAA FLOAT4 +#pragma kernel MultiScaleVORender_MSAA_interleaved_Float4 MAIN=MultiScaleVORender_MSAA_interleaved_Float4 MSAA INTERLEAVE_RESULT FLOAT4 + + #include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl" #ifndef INTERLEAVE_RESULT @@ -68,7 +74,11 @@ #endif // Output texture +#ifdef FLOAT4 + RWTexture2D Occlusion; +#else RWTexture2D Occlusion; +#endif // Shared memory groupshared float DepthSamples[TILE_DIM * TILE_DIM]; diff --git a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVOUpsample.compute b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVOUpsample.compute index 6835f4e..2d29efa 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVOUpsample.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/MultiScaleVOUpsample.compute @@ -34,6 +34,19 @@ #pragma kernel MultiScaleVOUpSample_MSAA_blendout MAIN=MultiScaleVOUpSample_MSAA_blendout MSAA BLEND_WITH_HIGHER_RESOLUTION #pragma kernel MultiScaleVOUpSample_MSAA_premin_blendout MAIN=MultiScaleVOUpSample_MSAA_premin_blendout MSAA COMBINE_LOWER_RESOLUTIONS BLEND_WITH_HIGHER_RESOLUTION +#pragma kernel MultiScaleVOUpSample_Float4 MAIN=MultiScaleVOUpSample_Float4 FLOAT4 +#pragma kernel MultiScaleVOUpSample_invert_Float4 MAIN=MultiScaleVOUpSample_invert_Float4 INVERT FLOAT4 +#pragma kernel MultiScaleVOUpSample_premin_Float4 MAIN=MultiScaleVOUpSample_premin_Float4 COMBINE_LOWER_RESOLUTIONS FLOAT4 +#pragma kernel MultiScaleVOUpSample_blendout_Float4 MAIN=MultiScaleVOUpSample_blendout_Float4 BLEND_WITH_HIGHER_RESOLUTION FLOAT4 +#pragma kernel MultiScaleVOUpSample_premin_blendout_Float4 MAIN=MultiScaleVOUpSample_premin_blendout_Float4 COMBINE_LOWER_RESOLUTIONS BLEND_WITH_HIGHER_RESOLUTION FLOAT4 + +#pragma kernel MultiScaleVOUpSample_MSAA_Float4 MAIN=MultiScaleVOUpSample_MSAA_Float4 FLOAT4 +#pragma kernel MultiScaleVOUpSample_MSAA_invert_Float4 MAIN=MultiScaleVOUpSample_MSAA_invert_Float4 MSAA INVERT FLOAT4 +#pragma kernel MultiScaleVOUpSample_MSAA_premin_Float4 MAIN=MultiScaleVOUpSample_MSAA_premin_Float4 MSAA COMBINE_LOWER_RESOLUTIONS FLOAT4 +#pragma kernel MultiScaleVOUpSample_MSAA_blendout_Float4 MAIN=MultiScaleVOUpSample_MSAA_blendout_Float4 MSAA BLEND_WITH_HIGHER_RESOLUTION FLOAT4 +#pragma kernel MultiScaleVOUpSample_MSAA_premin_blendout_Float4 MAIN=MultiScaleVOUpSample_MSAA_premin_blendout_Float4 MSAA COMBINE_LOWER_RESOLUTIONS BLEND_WITH_HIGHER_RESOLUTION FLOAT4 + + #include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl" @@ -67,7 +80,11 @@ #endif // Ouput textures + #ifdef FLOAT4 + RWTexture2D AoResult; + #else RWTexture2D AoResult; + #endif // Shared memory groupshared float DepthCache[256]; @@ -416,15 +433,41 @@ void MAIN(uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_Group int2 OutST = DTid.xy << 1; #ifdef INVERT - AoResult[OutST + int2(-1, 0)] = 1.0 - BilateralUpsample(HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw); - AoResult[OutST + int2( 0, 0)] = 1.0 - BilateralUpsample(HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx); - AoResult[OutST + int2( 0, -1)] = 1.0 - BilateralUpsample(HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy); - AoResult[OutST + int2(-1, -1)] = 1.0 - BilateralUpsample(HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz); + float x = 1.0 - BilateralUpsample(HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw); + float y = 1.0 - BilateralUpsample(HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx); + float z = 1.0 - BilateralUpsample(HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy); + float w = 1.0 - BilateralUpsample(HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz); + + #ifdef FLOAT4 + AoResult[OutST + int2(-1, 0)] = float4(x, x, x, x); + AoResult[OutST + int2(0, 0)] = float4(y, y, y, y); + AoResult[OutST + int2(0, -1)] = float4(z, z, z, z); + AoResult[OutST + int2(-1, -1)] = float4(w, w, w, w); + #else + AoResult[OutST + int2(-1, 0)] = x; + AoResult[OutST + int2(0, 0)] = y; + AoResult[OutST + int2(0, -1)] = z; + AoResult[OutST + int2(-1, -1)] = w; + #endif + #else - AoResult[OutST + int2(-1, 0)] = BilateralUpsample(HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw); - AoResult[OutST + int2( 0, 0)] = BilateralUpsample(HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx); - AoResult[OutST + int2( 0, -1)] = BilateralUpsample(HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy); - AoResult[OutST + int2(-1, -1)] = BilateralUpsample(HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz); + float x = BilateralUpsample(HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw); + float y = BilateralUpsample(HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx); + float z = BilateralUpsample(HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy); + float w = BilateralUpsample(HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz); + + #ifdef FLOAT4 + AoResult[OutST + int2(-1, 0)] = float4(x, x, x, x); + AoResult[OutST + int2(0, 0)] = float4(y, y, y, y); + AoResult[OutST + int2(0, -1)] = float4(z, z, z, z); + AoResult[OutST + int2(-1, -1)] = float4(w, w, w, w); + #else + AoResult[OutST + int2(-1, 0)] = x; + AoResult[OutST + int2(0, 0)] = y; + AoResult[OutST + int2(0, -1)] = z; + AoResult[OutST + int2(-1, -1)] = w; + #endif + #endif #endif } diff --git a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/Uber.shader b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/Uber.shader index 8da2f91..2a0191e 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/Builtins/Uber.shader +++ b/com.unity.postprocessing/PostProcessing/Shaders/Builtins/Uber.shader @@ -275,7 +275,7 @@ Shader "Hidden/PostProcessing/Uber" Pass { HLSLPROGRAM - #pragma exclude_renderers gles vulkan switch + #pragma exclude_renderers gles vulkan webgpu switch #pragma multi_compile __ COLOR_GRADING_LDR_2D COLOR_GRADING_HDR_2D COLOR_GRADING_HDR_3D #pragma multi_compile __ STEREO_INSTANCING_ENABLED STEREO_DOUBLEWIDE_TARGET @@ -290,7 +290,7 @@ Shader "Hidden/PostProcessing/Uber" Pass { HLSLPROGRAM - #pragma only_renderers vulkan switch + #pragma only_renderers vulkan webgpu switch #pragma multi_compile __ COLOR_GRADING_LDR_2D COLOR_GRADING_HDR_2D COLOR_GRADING_HDR_3D #pragma multi_compile __ STEREO_DOUBLEWIDE_TARGET // disabled for Vulkan because of shader compiler issues in older Unity versions: STEREO_INSTANCING_ENABLED diff --git a/com.unity.postprocessing/PostProcessing/Shaders/Colors.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/Colors.hlsl index 5a25c30..8990830 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/Colors.hlsl +++ b/com.unity.postprocessing/PostProcessing/Shaders/Colors.hlsl @@ -179,7 +179,7 @@ half3 SRGBToLinear(half3 c) #else half3 linearRGBLo = c / 12.92; half3 linearRGBHi = PositivePow((c + 0.055) / 1.055, half3(2.4, 2.4, 2.4)); - half3 linearRGB = (c <= 0.04045) ? linearRGBLo : linearRGBHi; + half3 linearRGB = half3((c.x <= 0.04045) ? linearRGBLo.x : linearRGBHi.x, (c.y <= 0.04045) ? linearRGBLo.y : linearRGBHi.y, (c.z <= 0.04045) ? linearRGBLo.z : linearRGBHi.z); return linearRGB; #endif } @@ -212,7 +212,7 @@ half3 LinearToSRGB(half3 c) #else half3 sRGBLo = c * 12.92; half3 sRGBHi = (PositivePow(c, half3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055; - half3 sRGB = (c <= 0.0031308) ? sRGBLo : sRGBHi; + half3 sRGB = half3((c.x <= 0.0031308) ? sRGBLo.x : sRGBHi.x, (c.y <= 0.0031308) ? sRGBLo.y : sRGBHi.y, (c.z <= 0.0031308) ? sRGBLo.z : sRGBHi.z); return sRGB; #endif } diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2.meta deleted file mode 100644 index 6d47067..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cad7d53fa2166a0449bec7a9b4f17d69 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute.meta deleted file mode 100644 index 3864379..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_accumulate_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 702560780e923c84394c9b22ba460a9c -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta deleted file mode 100644 index 19d1df3..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d18fb8811ca4753469c439784546104e -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta deleted file mode 100644 index 49033cb..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0894ebeefb6aa7d4680c71dffbda3fee -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute deleted file mode 100644 index 4e41933..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2023 Nico de Poel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#pragma kernel CS - -#pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH - -#pragma multi_compile_local __ UNITY_FSR2_HDRP - -#include "ffx_fsr2_unity_common.cginc" - -#include "shaders/ffx_fsr2_depth_clip_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute.meta deleted file mode 100644 index 26fb9ba..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_depth_clip_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8026d9d8542eab6499c32d5d46beb2b6 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute.meta deleted file mode 100644 index a197b49..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3c96d72b39a840c428c901628dab92c0 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute.meta deleted file mode 100644 index ea6c978..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5a82801f160ff6a4eb47db567216e592 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute deleted file mode 100644 index c6cc99f..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2023 Nico de Poel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#pragma kernel CS - -#pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_HDR_COLOR_INPUT -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH - -#pragma multi_compile_local __ UNITY_FSR2_HDRP - -#include "ffx_fsr2_unity_common.cginc" - -#include "shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta deleted file mode 100644 index 6396b86..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_reconstruct_previous_depth_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6ef1b4c25874e334dad5ba3ac6345e32 -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute deleted file mode 100644 index 62d386b..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2023 Nico de Poel -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#pragma kernel CS - -#pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH - -#pragma multi_compile_local __ UNITY_FSR2_HDRP - -#include "ffx_fsr2_unity_common.cginc" - -#include "shaders/ffx_fsr2_tcr_autogen_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta deleted file mode 100644 index 0002090..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_tcr_autogen_pass.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b478fba0a6a87b44b8be7c35deb5f0dc -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h.meta deleted file mode 100644 index f2cc805..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: c6da07d8aae05f04f87e4db20f84c73e -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h.meta deleted file mode 100644 index a5f80a7..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: b37eb663a0ae01b469b0b5a54365b301 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h.meta deleted file mode 100644 index 7edf590..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 9d1d6ed5c9da0c64b882f3ebc2bac307 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h.meta deleted file mode 100644 index 8f9711f..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 402c509393f5bf647b41a962a48ed8e2 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h.meta deleted file mode 100644 index 1d826e4..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 142bf3947ada43541a0f31a328fdec07 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h.meta deleted file mode 100644 index 5a91c43..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_hlsl.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 89d6e02f97594f64ca2da4c8124df6cf -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h.meta deleted file mode 100644 index aad361f..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 5d6e692075988194382122bac7819f02 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h.meta deleted file mode 100644 index cf43a8b..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr1.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 7524e42f73f97f34bbeb414ea412a808 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h.meta deleted file mode 100644 index 51859c3..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: a04cb2522aaff1045869a272ed129964 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl deleted file mode 100644 index 747f380..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl +++ /dev/null @@ -1,78 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_EXPOSURE 0 -#define FSR2_BIND_SRV_DILATED_REACTIVE_MASKS 1 -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#define FSR2_BIND_SRV_DILATED_MOTION_VECTORS 2 -#else -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 2 -#endif -#define FSR2_BIND_SRV_INTERNAL_UPSCALED 3 -#define FSR2_BIND_SRV_LOCK_STATUS 4 -#define FSR2_BIND_SRV_PREPARED_INPUT_COLOR 5 -#define FSR2_BIND_SRV_LANCZOS_LUT 6 -#define FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT 7 -#define FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS 8 -#define FSR2_BIND_SRV_AUTO_EXPOSURE 9 -#define FSR2_BIND_SRV_LUMA_HISTORY 10 - -#define FSR2_BIND_UAV_INTERNAL_UPSCALED 0 -#define FSR2_BIND_UAV_LOCK_STATUS 1 -#define FSR2_BIND_UAV_UPSCALED_OUTPUT 2 -#define FSR2_BIND_UAV_NEW_LOCKS 3 -#define FSR2_BIND_UAV_LUMA_HISTORY 4 - -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_upsample.h" -#include "ffx_fsr2_postprocess_lock_status.h" -#include "ffx_fsr2_reproject.h" -#include "ffx_fsr2_accumulate.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) -{ - const uint GroupRows = (uint(DisplaySize().y) + FFX_FSR2_THREAD_GROUP_HEIGHT - 1) / FFX_FSR2_THREAD_GROUP_HEIGHT; - uGroupId.y = GroupRows - uGroupId.y - 1; - - uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId; - - Accumulate(uDispatchThreadId); -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta deleted file mode 100644 index cad5022..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_accumulate_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 356ec46d3f01672428b5a7a0de727548 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl deleted file mode 100644 index a78a8e3..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl +++ /dev/null @@ -1,85 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_OPAQUE_ONLY 0 -#define FSR2_BIND_SRV_INPUT_COLOR 1 -#define FSR2_BIND_UAV_AUTOREACTIVE 0 - -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_REACTIVE 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -#if defined(FSR2_BIND_CB_REACTIVE) -cbuffer cbGenerateReactive : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_REACTIVE) -{ - float scale; - float threshold; - float binaryValue; - uint flags; -}; -#endif - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) -{ - uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId; - - float3 ColorPreAlpha = LoadOpaqueOnly( FFX_MIN16_I2(uDispatchThreadId) ).rgb; - float3 ColorPostAlpha = LoadInputColor(uDispatchThreadId).rgb; - - if (flags & FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_TONEMAP) - { - ColorPreAlpha = Tonemap(ColorPreAlpha); - ColorPostAlpha = Tonemap(ColorPostAlpha); - } - - if (flags & FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP) - { - ColorPreAlpha = InverseTonemap(ColorPreAlpha); - ColorPostAlpha = InverseTonemap(ColorPostAlpha); - } - - float out_reactive_value = 0.f; - float3 delta = abs(ColorPostAlpha - ColorPreAlpha); - - out_reactive_value = (flags & FFX_FSR2_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX) ? max(delta.x, max(delta.y, delta.z)) : length(delta); - out_reactive_value *= scale; - - out_reactive_value = (flags & FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_THRESHOLD) ? (out_reactive_value < threshold ? 0 : binaryValue) : out_reactive_value; - - rw_output_autoreactive[uDispatchThreadId] = out_reactive_value; -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta deleted file mode 100644 index 2e93435..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_autogen_reactive_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: cc76bd6f46792f3418a56b79eb5c959b -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h deleted file mode 100644 index de79c82..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h +++ /dev/null @@ -1,817 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#include "ffx_fsr2_resources.h" - -#if defined(FFX_GPU) -#ifdef __hlsl_dx_compiler -#pragma dxc diagnostic push -#pragma dxc diagnostic ignored "-Wambig-lit-shift" -#endif //__hlsl_dx_compiler -#include "ffx_core.h" -#ifdef __hlsl_dx_compiler -#pragma dxc diagnostic pop -#endif //__hlsl_dx_compiler -#endif // #if defined(FFX_GPU) - -#if defined(FFX_GPU) -#ifndef FFX_FSR2_PREFER_WAVE64 -#define FFX_FSR2_PREFER_WAVE64 -#endif // #if defined(FFX_GPU) - -#if defined(FFX_GPU) -#pragma warning(disable: 3205) // conversion from larger type to smaller -#endif // #if defined(FFX_GPU) - -#define DECLARE_SRV_REGISTER(regIndex) t##regIndex -#define DECLARE_UAV_REGISTER(regIndex) u##regIndex -#define DECLARE_CB_REGISTER(regIndex) b##regIndex -#define FFX_FSR2_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) -#define FFX_FSR2_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) -#define FFX_FSR2_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) - -#if defined(FSR2_BIND_CB_FSR2) || defined(FFX_INTERNAL) - cbuffer cbFSR2 : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_FSR2) - { - FfxInt32x2 iRenderSize; - FfxInt32x2 iMaxRenderSize; - FfxInt32x2 iDisplaySize; - FfxInt32x2 iInputColorResourceDimensions; - FfxInt32x2 iLumaMipDimensions; - FfxInt32 iLumaMipLevelToUse; - FfxInt32 iFrameIndex; - - FfxFloat32x4 fDeviceToViewDepth; - FfxFloat32x2 fJitter; - FfxFloat32x2 fMotionVectorScale; - FfxFloat32x2 fDownscaleFactor; - FfxFloat32x2 fMotionVectorJitterCancellation; - FfxFloat32 fPreExposure; - FfxFloat32 fPreviousFramePreExposure; - FfxFloat32 fTanHalfFOV; - FfxFloat32 fJitterSequenceLength; - FfxFloat32 fDeltaTime; - FfxFloat32 fDynamicResChangeFactor; - FfxFloat32 fViewSpaceToMetersFactor; - - FfxInt32 iDummy; - }; - -#define FFX_FSR2_CONSTANT_BUFFER_1_SIZE (sizeof(cbFSR2) / 4) // Number of 32-bit values. This must be kept in sync with the cbFSR2 size. -#endif - -#if defined(FFX_GPU) -#define FFX_FSR2_ROOTSIG_STRINGIFY(p) FFX_FSR2_ROOTSIG_STR(p) -#define FFX_FSR2_ROOTSIG_STR(p) #p -#define FFX_FSR2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "RootConstants(num32BitConstants=" FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_CONSTANT_BUFFER_1_SIZE) ", b0), " \ - "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ - "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] - -#define FFX_FSR2_CONSTANT_BUFFER_2_SIZE 6 // Number of 32-bit values. This must be kept in sync with max( cbRCAS , cbSPD) size. - -#define FFX_FSR2_CB2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_RESOURCE_IDENTIFIER_COUNT) ")), " \ - "RootConstants(num32BitConstants=" FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_CONSTANT_BUFFER_1_SIZE) ", b0), " \ - "RootConstants(num32BitConstants=" FFX_FSR2_ROOTSIG_STRINGIFY(FFX_FSR2_CONSTANT_BUFFER_2_SIZE) ", b1), " \ - "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ - "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ - "addressU = TEXTURE_ADDRESS_CLAMP, " \ - "addressV = TEXTURE_ADDRESS_CLAMP, " \ - "addressW = TEXTURE_ADDRESS_CLAMP, " \ - "comparisonFunc = COMPARISON_NEVER, " \ - "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] -#if defined(FFX_FSR2_EMBED_ROOTSIG) -#define FFX_FSR2_EMBED_ROOTSIG_CONTENT FFX_FSR2_ROOTSIG -#define FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT FFX_FSR2_CB2_ROOTSIG -#else -#define FFX_FSR2_EMBED_ROOTSIG_CONTENT -#define FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT -#endif // #if FFX_FSR2_EMBED_ROOTSIG -#endif // #if defined(FFX_GPU) - -// Declare and sample camera buffers as regular textures, unless overridden -#if !defined(UNITY_FSR2_TEX2D) -#define UNITY_FSR2_TEX2D(type) Texture2D -#endif -#if !defined(UNITY_FSR2_POS) -#define UNITY_FSR2_POS(pxPos) (pxPos) -#endif -#if !defined(UNITY_FSR2_UV) -#define UNITY_FSR2_UV(uv) (uv) -#endif - -/* Define getter functions in the order they are defined in the CB! */ -FfxInt32x2 RenderSize() -{ - return iRenderSize; -} - -FfxInt32x2 MaxRenderSize() -{ - return iMaxRenderSize; -} - -FfxInt32x2 DisplaySize() -{ - return iDisplaySize; -} - -FfxInt32x2 InputColorResourceDimensions() -{ - return iInputColorResourceDimensions; -} - -FfxInt32x2 LumaMipDimensions() -{ - return iLumaMipDimensions; -} - -FfxInt32 LumaMipLevelToUse() -{ - return iLumaMipLevelToUse; -} - -FfxInt32 FrameIndex() -{ - return iFrameIndex; -} - -FfxFloat32x2 Jitter() -{ - return fJitter; -} - -FfxFloat32x4 DeviceToViewSpaceTransformFactors() -{ - return fDeviceToViewDepth; -} - -FfxFloat32x2 MotionVectorScale() -{ - return fMotionVectorScale; -} - -FfxFloat32x2 DownscaleFactor() -{ - return fDownscaleFactor; -} - -FfxFloat32x2 MotionVectorJitterCancellation() -{ - return fMotionVectorJitterCancellation; -} - -FfxFloat32 PreExposure() -{ - return fPreExposure; -} - -FfxFloat32 PreviousFramePreExposure() -{ - return fPreviousFramePreExposure; -} - -FfxFloat32 TanHalfFoV() -{ - return fTanHalfFOV; -} - -FfxFloat32 JitterSequenceLength() -{ - return fJitterSequenceLength; -} - -FfxFloat32 DeltaTime() -{ - return fDeltaTime; -} - -FfxFloat32 DynamicResChangeFactor() -{ - return fDynamicResChangeFactor; -} - -FfxFloat32 ViewSpaceToMetersFactor() -{ - return fViewSpaceToMetersFactor; -} - - -SamplerState s_PointClamp : register(s0); -SamplerState s_LinearClamp : register(s1); - -// SRVs -#if defined(FFX_INTERNAL) - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY); - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_COLOR); - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS); - UNITY_FSR2_TEX2D(FfxFloat32) r_input_depth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_DEPTH); - Texture2D r_input_exposure : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_EXPOSURE); - Texture2D r_auto_exposure : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE); - Texture2D r_reactive_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK); - Texture2D r_transparency_and_composition_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK); - Texture2D r_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH); - Texture2D r_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS); - Texture2D r_previous_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREVIOUS_DILATED_MOTION_VECTORS); - Texture2D r_dilatedDepth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH); - Texture2D r_internal_upscaled_color : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR); - Texture2D r_lock_status : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS); - Texture2D r_lock_input_luma : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA); - Texture2D r_new_locks : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS); - Texture2D r_prepared_input_color : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR); - Texture2D r_luma_history : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY); - Texture2D r_rcas_input : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RCAS_INPUT); - Texture2D r_lanczos_lut : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LANCZOS_LUT); - Texture2D r_imgMips : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE); - Texture2D r_upsample_maximum_bias_lut : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT); - Texture2D r_dilated_reactive_masks : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS); - Texture2D r_input_prev_color_pre_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); - Texture2D r_input_prev_color_post_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); - - Texture2D r_debug_out : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT); - - // UAV declarations - RWTexture2D rw_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH); - RWTexture2D rw_dilated_motion_vectors : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS); - RWTexture2D rw_dilatedDepth : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH); - RWTexture2D rw_internal_upscaled_color : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR); - RWTexture2D rw_lock_status : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS); - RWTexture2D rw_lock_input_luma : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA); - RWTexture2D rw_new_locks : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS); - RWTexture2D rw_prepared_input_color : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR); - RWTexture2D rw_luma_history : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY); - RWTexture2D rw_upscaled_output : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT); - - globallycoherent RWTexture2D rw_img_mip_shading_change : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE); - globallycoherent RWTexture2D rw_img_mip_5 : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_5); - RWTexture2D rw_dilated_reactive_masks : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS); - RWTexture2D rw_auto_exposure : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE); - globallycoherent RWTexture2D rw_spd_global_atomic : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT); - RWTexture2D rw_debug_out : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT); - - RWTexture2D rw_output_autoreactive : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTOREACTIVE); - RWTexture2D rw_output_autocomposition : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTOCOMPOSITION); - RWTexture2D rw_output_prev_color_pre_alpha : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); - RWTexture2D rw_output_prev_color_post_alpha : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); - -#else // #if defined(FFX_INTERNAL) - #if defined FSR2_BIND_SRV_INPUT_COLOR - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_COLOR); - #endif - #if defined FSR2_BIND_SRV_INPUT_OPAQUE_ONLY - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_OPAQUE_ONLY); - #endif - #if defined FSR2_BIND_SRV_INPUT_MOTION_VECTORS - UNITY_FSR2_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_SRV_INPUT_DEPTH - UNITY_FSR2_TEX2D(FfxFloat32) r_input_depth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_DEPTH); - #endif - #if defined FSR2_BIND_SRV_INPUT_EXPOSURE - Texture2D r_input_exposure : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_EXPOSURE); - #endif - #if defined FSR2_BIND_SRV_AUTO_EXPOSURE - Texture2D r_auto_exposure : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_AUTO_EXPOSURE); - #endif - #if defined FSR2_BIND_SRV_REACTIVE_MASK - Texture2D r_reactive_mask : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_REACTIVE_MASK); - #endif - #if defined FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK - Texture2D r_transparency_and_composition_mask : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK); - #endif - #if defined FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH - Texture2D r_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH); - #endif - #if defined FSR2_BIND_SRV_DILATED_MOTION_VECTORS - Texture2D r_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS - Texture2D r_previous_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_SRV_DILATED_DEPTH - Texture2D r_dilatedDepth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_DEPTH); - #endif - #if defined FSR2_BIND_SRV_INTERNAL_UPSCALED - Texture2D r_internal_upscaled_color : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INTERNAL_UPSCALED); - #endif - #if defined FSR2_BIND_SRV_LOCK_STATUS - Texture2D r_lock_status : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LOCK_STATUS); - #endif - #if defined FSR2_BIND_SRV_LOCK_INPUT_LUMA - Texture2D r_lock_input_luma : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LOCK_INPUT_LUMA); - #endif - #if defined FSR2_BIND_SRV_NEW_LOCKS - Texture2D r_new_locks : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_NEW_LOCKS); - #endif - #if defined FSR2_BIND_SRV_PREPARED_INPUT_COLOR - Texture2D r_prepared_input_color : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_PREPARED_INPUT_COLOR); - #endif - #if defined FSR2_BIND_SRV_LUMA_HISTORY - Texture2D r_luma_history : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LUMA_HISTORY); - #endif - #if defined FSR2_BIND_SRV_RCAS_INPUT - Texture2D r_rcas_input : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_RCAS_INPUT); - #endif - #if defined FSR2_BIND_SRV_LANCZOS_LUT - Texture2D r_lanczos_lut : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LANCZOS_LUT); - #endif - #if defined FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS - Texture2D r_imgMips : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS); - #endif - #if defined FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT - Texture2D r_upsample_maximum_bias_lut : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT); - #endif - #if defined FSR2_BIND_SRV_DILATED_REACTIVE_MASKS - Texture2D r_dilated_reactive_masks : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS); - #endif - - #if defined FSR2_BIND_SRV_PREV_PRE_ALPHA_COLOR - Texture2D r_input_prev_color_pre_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); - #endif - #if defined FSR2_BIND_SRV_PREV_POST_ALPHA_COLOR - Texture2D r_input_prev_color_post_alpha : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); - #endif - - // UAV declarations - #if defined FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH - RWTexture2D rw_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH); - #endif - #if defined FSR2_BIND_UAV_DILATED_MOTION_VECTORS - RWTexture2D rw_dilated_motion_vectors : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_MOTION_VECTORS); - #endif - #if defined FSR2_BIND_UAV_DILATED_DEPTH - RWTexture2D rw_dilatedDepth : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_DEPTH); - #endif - #if defined FSR2_BIND_UAV_INTERNAL_UPSCALED - RWTexture2D rw_internal_upscaled_color : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_INTERNAL_UPSCALED); - #endif - #if defined FSR2_BIND_UAV_LOCK_STATUS - RWTexture2D rw_lock_status : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LOCK_STATUS); - #endif - #if defined FSR2_BIND_UAV_LOCK_INPUT_LUMA - RWTexture2D rw_lock_input_luma : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LOCK_INPUT_LUMA); - #endif - #if defined FSR2_BIND_UAV_NEW_LOCKS - RWTexture2D rw_new_locks : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_NEW_LOCKS); - #endif - #if defined FSR2_BIND_UAV_PREPARED_INPUT_COLOR - RWTexture2D rw_prepared_input_color : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREPARED_INPUT_COLOR); - #endif - #if defined FSR2_BIND_UAV_LUMA_HISTORY - RWTexture2D rw_luma_history : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LUMA_HISTORY); - #endif - #if defined FSR2_BIND_UAV_UPSCALED_OUTPUT - RWTexture2D rw_upscaled_output : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_UPSCALED_OUTPUT); - #endif - #if defined FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE - globallycoherent RWTexture2D rw_img_mip_shading_change : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE); - #endif - #if defined FSR2_BIND_UAV_EXPOSURE_MIP_5 - globallycoherent RWTexture2D rw_img_mip_5 : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE_MIP_5); - #endif - #if defined FSR2_BIND_UAV_DILATED_REACTIVE_MASKS - RWTexture2D rw_dilated_reactive_masks : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_REACTIVE_MASKS); - #endif - #if defined FSR2_BIND_UAV_EXPOSURE - RWTexture2D rw_exposure : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE); - #endif - #if defined FSR2_BIND_UAV_AUTO_EXPOSURE - RWTexture2D rw_auto_exposure : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_AUTO_EXPOSURE); - #endif - #if defined FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC - globallycoherent RWTexture2D rw_spd_global_atomic : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC); - #endif - - #if defined FSR2_BIND_UAV_AUTOREACTIVE - RWTexture2D rw_output_autoreactive : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_AUTOREACTIVE); - #endif - #if defined FSR2_BIND_UAV_AUTOCOMPOSITION - RWTexture2D rw_output_autocomposition : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_AUTOCOMPOSITION); - #endif - #if defined FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR - RWTexture2D rw_output_prev_color_pre_alpha : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR); - #endif - #if defined FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR - RWTexture2D rw_output_prev_color_post_alpha : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR); - #endif -#endif // #if defined(FFX_INTERNAL) - -#if defined(FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS) || defined(FFX_INTERNAL) -FfxFloat32 LoadMipLuma(FfxUInt32x2 iPxPos, FfxUInt32 mipLevel) -{ - return r_imgMips.mips[mipLevel][iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_SCENE_LUMINANCE_MIPS) || defined(FFX_INTERNAL) -FfxFloat32 SampleMipLuma(FfxFloat32x2 fUV, FfxUInt32 mipLevel) -{ - return r_imgMips.SampleLevel(s_LinearClamp, fUV, mipLevel); -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 LoadInputDepth(FfxUInt32x2 iPxPos) -{ - return r_input_depth[UNITY_FSR2_POS(iPxPos)]; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 SampleInputDepth(FfxFloat32x2 fUV) -{ - return r_input_depth.SampleLevel(s_LinearClamp, UNITY_FSR2_UV(fUV), 0).x; -} -#endif - -#if defined(FSR2_BIND_SRV_REACTIVE_MASK) || defined(FFX_INTERNAL) -FfxFloat32 LoadReactiveMask(FfxUInt32x2 iPxPos) -{ - return r_reactive_mask[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) || defined(FFX_INTERNAL) -FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) -{ - return r_transparency_and_composition_mask[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadInputColor(FfxUInt32x2 iPxPos) -{ - return r_input_color_jittered[UNITY_FSR2_POS(iPxPos)].rgb; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 SampleInputColor(FfxFloat32x2 fUV) -{ - return r_input_color_jittered.SampleLevel(s_LinearClamp, UNITY_FSR2_UV(fUV), 0).rgb; -} -#endif - -#if defined(FSR2_BIND_SRV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadPreparedInputColor(FfxUInt32x2 iPxPos) -{ - return r_prepared_input_color[iPxPos].xyz; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_MOTION_VECTORS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadInputMotionVector(FfxUInt32x2 iPxDilatedMotionVectorPos) -{ - FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[UNITY_FSR2_POS(iPxDilatedMotionVectorPos)].xy; - - FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); - -#if FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS - fUvMotionVector -= MotionVectorJitterCancellation(); -#endif - - return fUvMotionVector; -} -#endif - -#if defined(FSR2_BIND_SRV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) -FfxFloat32x4 LoadHistory(FfxUInt32x2 iPxHistory) -{ - return r_internal_upscaled_color[iPxHistory]; -} -#endif - -#if defined(FSR2_BIND_UAV_LUMA_HISTORY) || defined(FFX_INTERNAL) -void StoreLumaHistory(FfxUInt32x2 iPxPos, FfxFloat32x4 fLumaHistory) -{ - rw_luma_history[iPxPos] = fLumaHistory; -} - -FfxFloat32x4 LoadRwLumaHistory(FFX_MIN16_I2 iPxPos) -{ - return rw_luma_history[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_LUMA_HISTORY) || defined(FFX_INTERNAL) -FfxFloat32x4 SampleLumaHistory(FfxFloat32x2 fUV) -{ - return r_luma_history.SampleLevel(s_LinearClamp, fUV, 0); -} -#endif - -#if defined(FFX_INTERNAL) -FfxFloat32x4 SampleDebug(FfxFloat32x2 fUV) -{ - return r_debug_out.SampleLevel(s_LinearClamp, fUV, 0).w; -} -#endif - -#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) -void StoreReprojectedHistory(FfxUInt32x2 iPxHistory, FfxFloat32x4 fHistory) -{ - rw_internal_upscaled_color[iPxHistory] = fHistory; -} -#endif - -#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) -void StoreInternalColorAndWeight(FfxUInt32x2 iPxPos, FfxFloat32x4 fColorAndWeight) -{ - rw_internal_upscaled_color[iPxPos] = fColorAndWeight; -} -#endif - -#if defined(FSR2_BIND_UAV_UPSCALED_OUTPUT) || defined(FFX_INTERNAL) -void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) -{ - rw_upscaled_output[iPxPos] = FfxFloat32x4(fColor, 1.f); -} -#endif - -//LOCK_LIFETIME_REMAINING == 0 -//Should make LockInitialLifetime() return a const 1.0f later -#if defined(FSR2_BIND_SRV_LOCK_STATUS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadLockStatus(FfxUInt32x2 iPxPos) -{ - return r_lock_status[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_LOCK_STATUS) || defined(FFX_INTERNAL) -void StoreLockStatus(FfxUInt32x2 iPxPos, FfxFloat32x2 fLockStatus) -{ - rw_lock_status[iPxPos] = fLockStatus; -} -#endif - -#if defined(FSR2_BIND_SRV_LOCK_INPUT_LUMA) || defined(FFX_INTERNAL) -FfxFloat32 LoadLockInputLuma(FfxUInt32x2 iPxPos) -{ - return r_lock_input_luma[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_LOCK_INPUT_LUMA) || defined(FFX_INTERNAL) -void StoreLockInputLuma(FfxUInt32x2 iPxPos, FfxFloat32 fLuma) -{ - rw_lock_input_luma[iPxPos] = fLuma; -} -#endif - -#if defined(FSR2_BIND_SRV_NEW_LOCKS) || defined(FFX_INTERNAL) -FfxFloat32 LoadNewLocks(FfxUInt32x2 iPxPos) -{ - return r_new_locks[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_NEW_LOCKS) || defined(FFX_INTERNAL) -FfxFloat32 LoadRwNewLocks(FfxUInt32x2 iPxPos) -{ - return rw_new_locks[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_NEW_LOCKS) || defined(FFX_INTERNAL) -void StoreNewLocks(FfxUInt32x2 iPxPos, FfxFloat32 newLock) -{ - rw_new_locks[iPxPos] = newLock; -} -#endif - -#if defined(FSR2_BIND_UAV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) -void StorePreparedInputColor(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 fTonemapped) -{ - rw_prepared_input_color[iPxPos] = fTonemapped; -} -#endif - -#if defined(FSR2_BIND_SRV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) -FfxFloat32 SampleDepthClip(FfxFloat32x2 fUV) -{ - return r_prepared_input_color.SampleLevel(s_LinearClamp, fUV, 0).w; -} -#endif - -#if defined(FSR2_BIND_SRV_LOCK_STATUS) || defined(FFX_INTERNAL) -FfxFloat32x2 SampleLockStatus(FfxFloat32x2 fUV) -{ - FfxFloat32x2 fLockStatus = r_lock_status.SampleLevel(s_LinearClamp, fUV, 0); - return fLockStatus; -} -#endif - -#if defined(FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 LoadReconstructedPrevDepth(FfxUInt32x2 iPxPos) -{ - return asfloat(r_reconstructed_previous_nearest_depth[iPxPos]); -} -#endif - -#if defined(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) -void StoreReconstructedDepth(FfxUInt32x2 iPxSample, FfxFloat32 fDepth) -{ - FfxUInt32 uDepth = asuint(fDepth); - - #if FFX_FSR2_OPTION_INVERTED_DEPTH - InterlockedMax(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); - #else - InterlockedMin(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); // min for standard, max for inverted depth - #endif -} -#endif - -#if defined(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) -void SetReconstructedDepth(FfxUInt32x2 iPxSample, const FfxUInt32 uValue) -{ - rw_reconstructed_previous_nearest_depth[iPxSample] = uValue; -} -#endif - -#if defined(FSR2_BIND_UAV_DILATED_DEPTH) || defined(FFX_INTERNAL) -void StoreDilatedDepth(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 fDepth) -{ - rw_dilatedDepth[iPxPos] = fDepth; -} -#endif - -#if defined(FSR2_BIND_UAV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) -void StoreDilatedMotionVector(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fMotionVector) -{ - rw_dilated_motion_vectors[iPxPos] = fMotionVector; -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadDilatedMotionVector(FfxUInt32x2 iPxInput) -{ - return r_dilated_motion_vectors[iPxInput].xy; -} -#endif - -#if defined(FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadPreviousDilatedMotionVector(FfxUInt32x2 iPxInput) -{ - return r_previous_dilated_motion_vectors[iPxInput].xy; -} - -FfxFloat32x2 SamplePreviousDilatedMotionVector(FfxFloat32x2 uv) -{ - return r_previous_dilated_motion_vectors.SampleLevel(s_LinearClamp, uv, 0).xy; -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_DEPTH) || defined(FFX_INTERNAL) -FfxFloat32 LoadDilatedDepth(FfxUInt32x2 iPxInput) -{ - return r_dilatedDepth[iPxInput]; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_EXPOSURE) || defined(FFX_INTERNAL) -FfxFloat32 Exposure() -{ - FfxFloat32 exposure = r_input_exposure[FfxUInt32x2(0, 0)].x; - - if (exposure == 0.0f) { - exposure = 1.0f; - } - - return exposure; -} -#endif - -#if defined(FSR2_BIND_SRV_AUTO_EXPOSURE) || defined(FFX_INTERNAL) -FfxFloat32 AutoExposure() -{ - FfxFloat32 exposure = r_auto_exposure[FfxUInt32x2(0, 0)].x; - - if (exposure == 0.0f) { - exposure = 1.0f; - } - - return exposure; -} -#endif - -FfxFloat32 SampleLanczos2Weight(FfxFloat32 x) -{ -#if defined(FSR2_BIND_SRV_LANCZOS_LUT) || defined(FFX_INTERNAL) - return r_lanczos_lut.SampleLevel(s_LinearClamp, FfxFloat32x2(x / 2, 0.5f), 0); -#else - return 0.f; -#endif -} - -#if defined(FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT) || defined(FFX_INTERNAL) -FfxFloat32 SampleUpsampleMaximumBias(FfxFloat32x2 uv) -{ - // Stored as a SNORM, so make sure to multiply by 2 to retrieve the actual expected range. - return FfxFloat32(2.0) * r_upsample_maximum_bias_lut.SampleLevel(s_LinearClamp, abs(uv) * 2.0, 0); -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) -FfxFloat32x2 SampleDilatedReactiveMasks(FfxFloat32x2 fUV) -{ - return r_dilated_reactive_masks.SampleLevel(s_LinearClamp, fUV, 0); -} -#endif - -#if defined(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) -FfxFloat32x2 LoadDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos) -{ - return r_dilated_reactive_masks[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) -void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fDilatedReactiveMasks) -{ - rw_dilated_reactive_masks[iPxPos] = fDilatedReactiveMasks; -} -#endif - -#if defined(FSR2_BIND_SRV_INPUT_OPAQUE_ONLY) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadOpaqueOnly(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) -{ - return r_input_opaque_only[UNITY_FSR2_POS(iPxPos)].xyz; -} -#endif - -#if defined(FSR2_BIND_SRV_PREV_PRE_ALPHA_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadPrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) -{ - return r_input_prev_color_pre_alpha[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_SRV_PREV_POST_ALPHA_COLOR) || defined(FFX_INTERNAL) -FfxFloat32x3 LoadPrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) -{ - return r_input_prev_color_post_alpha[iPxPos]; -} -#endif - -#if defined(FSR2_BIND_UAV_AUTOREACTIVE) || defined(FFX_INTERNAL) -#if defined(FSR2_BIND_UAV_AUTOCOMPOSITION) || defined(FFX_INTERNAL) -void StoreAutoReactive(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F2 fReactive) -{ - rw_output_autoreactive[iPxPos] = fReactive.x; - - rw_output_autocomposition[iPxPos] = fReactive.y; -} -#endif -#endif - -#if defined(FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR) || defined(FFX_INTERNAL) -void StorePrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) -{ - rw_output_prev_color_pre_alpha[iPxPos] = color; - -} -#endif - -#if defined(FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR) || defined(FFX_INTERNAL) -void StorePrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) -{ - rw_output_prev_color_post_alpha[iPxPos] = color; -} -#endif - -#endif // #if defined(FFX_GPU) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta deleted file mode 100644 index 97858ae..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_callbacks_hlsl.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: eb121968296f9ba44b35d7e18d2b79df -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h.meta deleted file mode 100644 index 0e3bb9c..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_common.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 2176dca22b6e9604da8329c79abae68d -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta deleted file mode 100644 index c8cb631..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: dbcdb6dfb36311a49aa7b05bc5054280 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl deleted file mode 100644 index 2b96636..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl +++ /dev/null @@ -1,131 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_COLOR 0 -#define FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC 0 -#define FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE 1 -#define FSR2_BIND_UAV_EXPOSURE_MIP_5 2 -#define FSR2_BIND_UAV_AUTO_EXPOSURE 3 -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_SPD 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -#if defined(FSR2_BIND_CB_SPD) - cbuffer cbSPD : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_SPD) { - - FfxUInt32 mips; - FfxUInt32 numWorkGroups; - FfxUInt32x2 workGroupOffset; - FfxUInt32x2 renderSize; - }; - - FfxUInt32 MipCount() - { - return mips; - } - - FfxUInt32 NumWorkGroups() - { - return numWorkGroups; - } - - FfxUInt32x2 WorkGroupOffset() - { - return workGroupOffset; - } - - FfxUInt32x2 SPD_RenderSize() - { - return renderSize; - } -#endif - - -FfxFloat32x2 SPD_LoadExposureBuffer() -{ - return rw_auto_exposure[FfxInt32x2(0,0)]; -} - -void SPD_SetExposureBuffer(FfxFloat32x2 value) -{ - rw_auto_exposure[FfxInt32x2(0,0)] = value; -} - -FfxFloat32x4 SPD_LoadMipmap5(FfxInt32x2 iPxPos) -{ - return FfxFloat32x4(rw_img_mip_5[iPxPos], 0, 0, 0); -} - -void SPD_SetMipmap(FfxInt32x2 iPxPos, FfxInt32 slice, FfxFloat32 value) -{ - switch (slice) - { - case FFX_FSR2_SHADING_CHANGE_MIP_LEVEL: - rw_img_mip_shading_change[iPxPos] = value; - break; - case 5: - rw_img_mip_5[iPxPos] = value; - break; - default: - - // avoid flattened side effect -#if defined(FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE) || defined(FFX_INTERNAL) - rw_img_mip_shading_change[iPxPos] = rw_img_mip_shading_change[iPxPos]; -#elif defined(FSR2_BIND_UAV_EXPOSURE_MIP_5) || defined(FFX_INTERNAL) - rw_img_mip_5[iPxPos] = rw_img_mip_5[iPxPos]; -#endif - break; - } -} - -void SPD_IncreaseAtomicCounter(inout FfxUInt32 spdCounter) -{ - InterlockedAdd(rw_spd_global_atomic[FfxInt32x2(0,0)], 1, spdCounter); -} - -void SPD_ResetAtomicCounter() -{ - rw_spd_global_atomic[FfxInt32x2(0,0)] = 0; -} - -#include "ffx_fsr2_compute_luminance_pyramid.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 256 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT -void CS(uint3 WorkGroupId : SV_GroupID, uint LocalThreadIndex : SV_GroupIndex) -{ - ComputeAutoExposure(WorkGroupId, LocalThreadIndex); -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta deleted file mode 100644 index ac39806..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 19dfb00afb70c3144b43ec2dc05ecdd9 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h.meta deleted file mode 100644 index dbdf299..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: f7c16477aeb3a9b4f94f4ef818d10d9b -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl deleted file mode 100644 index 3cf501c..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl +++ /dev/null @@ -1,66 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 -#define FSR2_BIND_SRV_DILATED_MOTION_VECTORS 1 -#define FSR2_BIND_SRV_DILATED_DEPTH 2 -#define FSR2_BIND_SRV_REACTIVE_MASK 3 -#define FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 4 -#define FSR2_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS 5 -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 6 -#define FSR2_BIND_SRV_INPUT_COLOR 7 -#define FSR2_BIND_SRV_INPUT_DEPTH 8 -#define FSR2_BIND_SRV_INPUT_EXPOSURE 9 - -#define FSR2_BIND_UAV_DILATED_REACTIVE_MASKS 0 -#define FSR2_BIND_UAV_PREPARED_INPUT_COLOR 1 - -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_depth_clip.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS( - int2 iGroupId : SV_GroupID, - int2 iDispatchThreadId : SV_DispatchThreadID, - int2 iGroupThreadId : SV_GroupThreadID, - int iGroupIndex : SV_GroupIndex) -{ - DepthClip(iDispatchThreadId); -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta deleted file mode 100644 index d7ce66d..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 7981b48622ddaa944909ebf209284d83 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h.meta deleted file mode 100644 index 21f4814..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 9b4cdc5f81194ac4fa946c31b86234ed -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl deleted file mode 100644 index 1409dce..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_LOCK_INPUT_LUMA 0 -#define FSR2_BIND_UAV_NEW_LOCKS 0 -#define FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 1 -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_lock.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) -{ - uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId; - - ComputeLock(uDispatchThreadId); -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta deleted file mode 100644 index 4ded638..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_lock_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 471a3f7a033c72f4fa737d4f8238a9bd -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta deleted file mode 100644 index ddb6dda..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 3945c3cfd2cc1a64cb0513864d88d8ca -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h.meta deleted file mode 100644 index e962499..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 7bd7d4eb34c626342966cb9b3fe00363 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl deleted file mode 100644 index f447b7e..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl +++ /dev/null @@ -1,75 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_EXPOSURE 0 -#define FSR2_BIND_SRV_RCAS_INPUT 1 -#define FSR2_BIND_UAV_UPSCALED_OUTPUT 0 -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_RCAS 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -//Move to prototype shader! -#if defined(FSR2_BIND_CB_RCAS) - cbuffer cbRCAS : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_RCAS) - { - uint4 rcasConfig; - }; - - uint4 RCASConfig() - { - return rcasConfig; - } -#else - uint4 RCASConfig() - { - return 0; - } -#endif - - -float4 LoadRCAS_Input(FfxInt32x2 iPxPos) -{ - return r_rcas_input[iPxPos]; -} - -#include "ffx_fsr2_rcas.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 64 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_CB2_ROOTSIG_CONTENT -void CS(uint3 LocalThreadId : SV_GroupThreadID, uint3 WorkGroupId : SV_GroupID, uint3 Dtid : SV_DispatchThreadID) -{ - RCAS(LocalThreadId, WorkGroupId, Dtid); -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta deleted file mode 100644 index b7e089b..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 871ca1938c701d64f94ef8ec00ef06f4 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta deleted file mode 100644 index 9b82a1a..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 13cd33c3d34a317409049dfd939e64ef -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl deleted file mode 100644 index 33c044e..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 0 -#define FSR2_BIND_SRV_INPUT_DEPTH 1 -#define FSR2_BIND_SRV_INPUT_COLOR 2 -#define FSR2_BIND_SRV_INPUT_EXPOSURE 3 - -#define FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 -#define FSR2_BIND_UAV_DILATED_MOTION_VECTORS 1 -#define FSR2_BIND_UAV_DILATED_DEPTH 2 -#define FSR2_BIND_UAV_LOCK_INPUT_LUMA 3 - -#define FSR2_BIND_CB_FSR2 0 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" -#include "ffx_fsr2_sample.h" -#include "ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_PREFER_WAVE64 -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT -void CS( - int2 iGroupId : SV_GroupID, - int2 iDispatchThreadId : SV_DispatchThreadID, - int2 iGroupThreadId : SV_GroupThreadID, - int iGroupIndex : SV_GroupIndex -) -{ - ReconstructAndDilate(iDispatchThreadId); -} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta deleted file mode 100644 index 4f5036c..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9355c255c8505ae48ae89af286943747 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h.meta deleted file mode 100644 index ef8ce86..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reproject.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 63fc917ca6895cb4aac237ea35edb838 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h deleted file mode 100644 index 535dbc3..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h +++ /dev/null @@ -1,105 +0,0 @@ -// This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#ifndef FFX_FSR2_RESOURCES_H -#define FFX_FSR2_RESOURCES_H - -#if defined(FFX_CPU) || defined(FFX_GPU) -#define FFX_FSR2_RESOURCE_IDENTIFIER_NULL 0 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY 1 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_COLOR 2 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS 3 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_DEPTH 4 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_EXPOSURE 5 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK 6 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK 7 -#define FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH 8 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 9 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH 10 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR 11 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS 12 -#define FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS 13 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR 14 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY 15 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 16 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LANCZOS_LUT 17 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT 18 -#define FFX_FSR2_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT 19 -#define FFX_FSR2_RESOURCE_IDENTIFIER_RCAS_INPUT 20 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_1 21 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_2 22 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_1 23 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_2 24 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_REACTIVITY 25 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_TRANSPARENCY_AND_COMPOSITION 26 -#define FFX_FSR2_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT 27 -#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS 28 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE 29 // same as FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 29 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_1 30 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_2 31 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_3 32 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 33 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_5 34 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_6 35 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_7 36 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_8 37 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_9 38 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_10 39 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_11 40 -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12 41 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_EXPOSURE 42 -#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE 43 -#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTOREACTIVE 44 -#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTOCOMPOSITION 45 - -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR 46 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR 47 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_1 48 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_1 49 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_2 50 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_2 51 -#define FFX_FSR2_RESOURCE_IDENTIFIER_PREVIOUS_DILATED_MOTION_VECTORS 52 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DILATED_MOTION_VECTORS_1 53 -#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DILATED_MOTION_VECTORS_2 54 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY_1 55 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY_2 56 -#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA 57 - -// Shading change detection mip level setting, value must be in the range [FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0, FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12] -#define FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 -#define FFX_FSR2_SHADING_CHANGE_MIP_LEVEL (FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE - FFX_FSR2_RESOURCE_IDENTIFIER_SCENE_LUMINANCE) - -#define FFX_FSR2_RESOURCE_IDENTIFIER_COUNT 58 - -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_FSR2 0 -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_SPD 1 -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_RCAS 2 -#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_GENREACTIVE 3 - -#define FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_TONEMAP 1 -#define FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP 2 -#define FFX_FSR2_AUTOREACTIVEFLAGS_APPLY_THRESHOLD 4 -#define FFX_FSR2_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX 8 - -#endif // #if defined(FFX_CPU) || defined(FFX_GPU) - -#endif //!defined( FFX_FSR2_RESOURCES_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h.meta deleted file mode 100644 index 69e95a4..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_resources.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: fd5bed2bf4ba07444ae815390168a15d -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h.meta deleted file mode 100644 index acc8bab..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_sample.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: ba3ee190167b6c240aaeb1f8f4dbcb67 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta deleted file mode 100644 index a2af34e..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 18b8590c99b171a4e9af68dfd2c3ff02 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta deleted file mode 100644 index d133259..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9feb1fa4d6cff5a4799298dc69b12a8e -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h.meta deleted file mode 100644 index c9fa0a3..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 1ff3a385cfe07db4387e4d7b457238f8 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h.meta deleted file mode 100644 index d896fc1..0000000 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h.meta +++ /dev/null @@ -1,60 +0,0 @@ -fileFormatVersion: 2 -guid: 3ef69a900a925bb498651c10581e0979 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude GameCoreScarlett: 1 - Exclude GameCoreXboxOne: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude PS4: 1 - Exclude PS5: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3.meta new file mode 100644 index 0000000..3e30dae --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37c436021e67c00459f44b59099c024a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute similarity index 61% rename from Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute index a359485..5cbfb80 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_accumulate_pass.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute @@ -21,21 +21,21 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE -#pragma multi_compile_local __ FFX_FSR2_OPTION_HDR_COLOR_INPUT -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ FFX_FSR2_OPTION_APPLY_SHARPENING +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" // 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 -#undef FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE -#define FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE 1 +#ifdef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#undef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE 1 #endif -#include "shaders/ffx_fsr2_accumulate_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_accumulate_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta new file mode 100644 index 0000000..dbe5282 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_accumulate_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9b45f0ae7673694ba57a4aadfe212e9 +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute new file mode 100644 index 0000000..e13c001 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute @@ -0,0 +1,32 @@ +// Copyright (c) 2023 Nico de Poel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma kernel CS + +#pragma multi_compile_local __ FFX_HALF +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP + +#include "ffx_fsr3upscaler_unity_common.cginc" + +#include "shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta new file mode 100644 index 0000000..1df041b --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_autogen_reactive_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5716b91fdaa4e9e439df6b96a796fe6e +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute similarity index 76% rename from Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute index 385dfe4..d5903c0 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_compute_luminance_pyramid_pass.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute @@ -20,14 +20,14 @@ #pragma kernel CS -//#pragma multi_compile_local __ FFX_HALF // causes a hard-coded error message from the shader include ¯\_(ツ)_/¯ -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_HALF +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" // Wave operations require shader model 6.0; this can only be enabled when using DXC on D3D12 // These pragmas are commented out by default as Unity will sometimes ignore the #if's and try to enable these features anyway. @@ -36,7 +36,7 @@ //#pragma require WaveBasic // Required for WaveGetLaneIndex //#pragma require WaveBallot // Required for WaveReadLaneAt //#else -#define SPD_NO_WAVE_OPERATIONS +#define FFX_SPD_NO_WAVE_OPERATIONS //#endif -#include "shaders/ffx_fsr2_compute_luminance_pyramid_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta new file mode 100644 index 0000000..9e002c0 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_compute_luminance_pyramid_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d253be05abcdc80428503d3e4cce3a36 +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute similarity index 74% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute index d27a02d..0ccd388 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_autogen_reactive_pass.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute @@ -21,12 +21,12 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_autogen_reactive_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta new file mode 100644 index 0000000..d695f48 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_depth_clip_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 20e44016ed34b0d4b8de499d1b566c69 +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute similarity index 77% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute index 5f8c13d..e38ad99 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_lock_pass.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute @@ -21,10 +21,10 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_lock_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_lock_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta new file mode 100644 index 0000000..c01e009 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_lock_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a135306e6d1857e43a86ef20db2a47fe +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute similarity index 77% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute index 6d97414..04c2fe4 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_rcas_pass.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute @@ -20,10 +20,10 @@ #pragma kernel CS -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_rcas_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_rcas_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta new file mode 100644 index 0000000..cd12641 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_rcas_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7aaf5cfff022de2499e9b0412f947f6c +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute new file mode 100644 index 0000000..ee2f276 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute @@ -0,0 +1,33 @@ +// Copyright (c) 2023 Nico de Poel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma kernel CS + +#pragma multi_compile_local __ FFX_HALF +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP + +#include "ffx_fsr3upscaler_unity_common.cginc" + +#include "shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta new file mode 100644 index 0000000..1053c34 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_reconstruct_previous_depth_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f59e5b9179d74844ae06a30ae1e0629 +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute similarity index 74% rename from Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute index 4e41933..6338918 100644 --- a/Assets/Resources/FSR2/ffx_fsr2_depth_clip_pass.compute +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute @@ -21,12 +21,12 @@ #pragma kernel CS #pragma multi_compile_local __ FFX_HALF -#pragma multi_compile_local __ FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS -#pragma multi_compile_local __ FFX_FSR2_OPTION_INVERTED_DEPTH +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS +#pragma multi_compile_local __ FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH -#pragma multi_compile_local __ UNITY_FSR2_HDRP +#pragma multi_compile_local __ UNITY_FSR3UPSCALER_HDRP -#include "ffx_fsr2_unity_common.cginc" +#include "ffx_fsr3upscaler_unity_common.cginc" -#include "shaders/ffx_fsr2_depth_clip_pass.hlsl" +#include "shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl" diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta new file mode 100644 index 0000000..ad42fbb --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_tcr_autogen_pass.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75cdc6ef23f08ed498d4da511923fcea +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc similarity index 92% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc index 98c5b17..758bb0c 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/ffx_fsr2_unity_common.cginc +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Nico de Poel +// Copyright (c) 2023 Nico de Poel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -46,7 +46,7 @@ // Workaround for HDRP using texture arrays for its camera buffers on some platforms // The below defines are copied from: Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/TextureXR.hlsl -#if defined(UNITY_FSR2_HDRP) +#if defined(UNITY_FSR3UPSCALER_HDRP) // Must be in sync with C# with property useTexArray in TextureXR.cs #if ((defined(SHADER_API_D3D11) || defined(SHADER_API_D3D12)) && !defined(SHADER_API_XBOXONE) && !defined(SHADER_API_GAMECORE)) || defined(SHADER_API_PSSL) || defined(SHADER_API_VULKAN) #define UNITY_TEXTURE2D_X_ARRAY_SUPPORTED @@ -73,9 +73,10 @@ #endif // Declare and sample camera buffers as texture arrays - #define UNITY_FSR2_TEX2D(type) Texture2DArray - #define UNITY_FSR2_POS(pxPos) FfxUInt32x3(pxPos, SLICE_ARRAY_INDEX) - #define UNITY_FSR2_UV(uv) FfxFloat32x3(uv, SLICE_ARRAY_INDEX) + #define UNITY_FSR3_TEX2D(type) Texture2DArray + #define UNITY_FSR3_RWTEX2D(type) RWTexture2DArray + #define UNITY_FSR3_POS(pxPos) FfxUInt32x3(pxPos, SLICE_ARRAY_INDEX) + #define UNITY_FSR3_UV(uv) FfxFloat32x3(uv, SLICE_ARRAY_INDEX) #endif #endif diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta new file mode 100644 index 0000000..5a68b6c --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/ffx_fsr3upscaler_unity_common.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ce00ba677bb7e14bb91772fd68bfe6b +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders.meta similarity index 77% rename from Assets/Resources/FSR2/shaders.meta rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders.meta index 676ff9a..8a4ff2b 100644 --- a/Assets/Resources/FSR2/shaders.meta +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4a24e63edc822264a871f58397325d51 +guid: 8364d4f86c613ec4d999d062f5f773b8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl new file mode 100644 index 0000000..d2f1b32 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl @@ -0,0 +1,79 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS 1 +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 2 +#else +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 2 +#endif +#define FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED 3 +#define FSR3UPSCALER_BIND_SRV_LOCK_STATUS 4 +#define FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR 5 +#define FSR3UPSCALER_BIND_SRV_LANCZOS_LUT 6 +#define FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT 7 +#define FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS 8 +#define FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE 9 +#define FSR3UPSCALER_BIND_SRV_LUMA_HISTORY 10 + +#define FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED 0 +#define FSR3UPSCALER_BIND_UAV_LOCK_STATUS 1 +#define FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT 2 +#define FSR3UPSCALER_BIND_UAV_NEW_LOCKS 3 +#define FSR3UPSCALER_BIND_UAV_LUMA_HISTORY 4 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_upsample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h" +#include "fsr3upscaler/ffx_fsr3upscaler_reproject.h" +#include "fsr3upscaler/ffx_fsr3upscaler_accumulate.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) +{ + const uint GroupRows = (uint(DisplaySize().y) + FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT - 1) / FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT; + uGroupId.y = GroupRows - uGroupId.y - 1; + + uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId; + + Accumulate(uDispatchThreadId); +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta new file mode 100644 index 0000000..80f209e --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_accumulate_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 507ab779c38eddb429cdcedf9c108d1b +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl new file mode 100644 index 0000000..0d6e2eb --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl @@ -0,0 +1,77 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 1 + +#define FSR3UPSCALER_BIND_UAV_AUTOREACTIVE 0 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_REACTIVE 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) +{ + uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId; + + float3 ColorPreAlpha = LoadOpaqueOnly( FFX_MIN16_I2(uDispatchThreadId) ).rgb; + float3 ColorPostAlpha = LoadInputColor(uDispatchThreadId).rgb; + + if (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_TONEMAP) + { + ColorPreAlpha = Tonemap(ColorPreAlpha); + ColorPostAlpha = Tonemap(ColorPostAlpha); + } + + if (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP) + { + ColorPreAlpha = InverseTonemap(ColorPreAlpha); + ColorPostAlpha = InverseTonemap(ColorPostAlpha); + } + + float out_reactive_value = 0.f; + float3 delta = abs(ColorPostAlpha - ColorPreAlpha); + + out_reactive_value = (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX) ? max(delta.x, max(delta.y, delta.z)) : length(delta); + out_reactive_value *= GenReactiveScale(); + + out_reactive_value = (GenReactiveFlags() & FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_THRESHOLD) ? (out_reactive_value < GenReactiveThreshold() ? 0 : GenReactiveBinaryValue()) : out_reactive_value; + + rw_output_autoreactive[uDispatchThreadId] = out_reactive_value; +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta new file mode 100644 index 0000000..c55f004 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_autogen_reactive_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 52cdb7a7c30cb614984908593ed19082 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl new file mode 100644 index 0000000..93b7332 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl @@ -0,0 +1,55 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 0 + +#define FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC 0 +#define FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE 1 +#define FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 2 +#define FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE 3 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_SPD 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT +void CS(uint3 WorkGroupId : SV_GroupID, uint LocalThreadIndex : SV_GroupIndex) +{ + ComputeAutoExposure(WorkGroupId, LocalThreadIndex); +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta new file mode 100644 index 0000000..508b43e --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_compute_luminance_pyramid_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d149b52ba0f5bb468a94a71dbbcb66f +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl new file mode 100644 index 0000000..70cc7ba --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl @@ -0,0 +1,67 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 1 +#define FSR3UPSCALER_BIND_SRV_DILATED_DEPTH 2 +#define FSR3UPSCALER_BIND_SRV_REACTIVE_MASK 3 +#define FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 4 +#define FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS 5 +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 6 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 7 +#define FSR3UPSCALER_BIND_SRV_INPUT_DEPTH 8 +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 9 + +#define FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS 0 +#define FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR 1 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_depth_clip.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS( + int2 iGroupId : SV_GroupID, + int2 iDispatchThreadId : SV_DispatchThreadID, + int2 iGroupThreadId : SV_GroupThreadID, + int iGroupIndex : SV_GroupIndex) +{ + DepthClip(iDispatchThreadId); +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta new file mode 100644 index 0000000..cde3a5e --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_depth_clip_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da435b71cf57e2247b80ae0f0f86d1f8 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl new file mode 100644 index 0000000..26b28f0 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl @@ -0,0 +1,56 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA 0 + +#define FSR3UPSCALER_BIND_UAV_NEW_LOCKS 0 +#define FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 1 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_lock.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) +{ + uint2 uDispatchThreadId = uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId; + + ComputeLock(uDispatchThreadId); +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta new file mode 100644 index 0000000..45c99dc --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_lock_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 98d2cbbda5e90dd4ebd1d70abbb63a09 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl new file mode 100644 index 0000000..bebdeb3 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl @@ -0,0 +1,53 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_RCAS_INPUT 1 + +#define FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT 0 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_RCAS 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_rcas.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 64 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT +void CS(uint3 LocalThreadId : SV_GroupThreadID, uint3 WorkGroupId : SV_GroupID, uint3 Dtid : SV_DispatchThreadID) +{ + RCAS(LocalThreadId, WorkGroupId, Dtid); +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta new file mode 100644 index 0000000..fb9bfe2 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_rcas_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a15fc73170a9bc478801c8fa4d8d574 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl new file mode 100644 index 0000000..f277fd1 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl @@ -0,0 +1,64 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_DEPTH 1 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 2 +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 3 + +#define FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 +#define FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS 1 +#define FSR3UPSCALER_BIND_UAV_DILATED_DEPTH 2 +#define FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA 3 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_PREFER_WAVE64 +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +void CS( + int2 iGroupId : SV_GroupID, + int2 iDispatchThreadId : SV_DispatchThreadID, + int2 iGroupThreadId : SV_GroupThreadID, + int iGroupIndex : SV_GroupIndex +) +{ + ReconstructAndDilate(iDispatchThreadId); +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta new file mode 100644 index 0000000..6489d6d --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_reconstruct_previous_depth_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bafb3726a76b97a49bb343d8a4323754 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl similarity index 56% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl index 8e635d1..6180885 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen_pass.hlsl +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl @@ -19,68 +19,44 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#define FSR2_BIND_SRV_INPUT_OPAQUE_ONLY 0 -#define FSR2_BIND_SRV_INPUT_COLOR 1 -#define FSR2_BIND_SRV_INPUT_MOTION_VECTORS 2 -#define FSR2_BIND_SRV_PREV_PRE_ALPHA_COLOR 3 -#define FSR2_BIND_SRV_PREV_POST_ALPHA_COLOR 4 -#define FSR2_BIND_SRV_REACTIVE_MASK 4 -#define FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 5 - -#define FSR2_BIND_UAV_AUTOREACTIVE 0 -#define FSR2_BIND_UAV_AUTOCOMPOSITION 1 -#define FSR2_BIND_UAV_PREV_PRE_ALPHA_COLOR 2 -#define FSR2_BIND_UAV_PREV_POST_ALPHA_COLOR 3 - -#define FSR2_BIND_CB_FSR2 0 -#define FSR2_BIND_CB_AUTOREACTIVE 1 - -#include "ffx_fsr2_callbacks_hlsl.h" -#include "ffx_fsr2_common.h" - -#if defined(FSR2_BIND_CB_AUTOREACTIVE) - cbuffer cbGenerateReactive : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_AUTOREACTIVE) - { - float fTcThreshold; // 0.1 is a good starting value, lower will result in more TC pixels - float fTcScale; - float fReactiveScale; - float fReactiveMax; - }; - float getTcThreshold() - { - return fTcThreshold; - } -#else - #define fTcThreshold 0.05f - #define fTcScale 1.00f - #define fReactiveScale 10.0f - #define fReactiveMax 0.90f - float getTcThreshold() - { - return fTcThreshold; - } -#endif - -#include "ffx_fsr2_tcr_autogen.h" - -#ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#define FFX_FSR2_THREAD_GROUP_WIDTH 8 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_WIDTH -#ifndef FFX_FSR2_THREAD_GROUP_HEIGHT -#define FFX_FSR2_THREAD_GROUP_HEIGHT 8 -#endif // FFX_FSR2_THREAD_GROUP_HEIGHT -#ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#define FFX_FSR2_THREAD_GROUP_DEPTH 1 -#endif // #ifndef FFX_FSR2_THREAD_GROUP_DEPTH -#ifndef FFX_FSR2_NUM_THREADS -#define FFX_FSR2_NUM_THREADS [numthreads(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT, FFX_FSR2_THREAD_GROUP_DEPTH)] -#endif // #ifndef FFX_FSR2_NUM_THREADS - -FFX_FSR2_NUM_THREADS -FFX_FSR2_EMBED_ROOTSIG_CONTENT +#define FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 1 +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 2 +#define FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR 3 +#define FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR 4 +#define FSR3UPSCALER_BIND_SRV_REACTIVE_MASK 4 +#define FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 5 + +#define FSR3UPSCALER_BIND_UAV_AUTOREACTIVE 0 +#define FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION 1 +#define FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR 2 +#define FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR 3 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 0 +#define FSR3UPSCALER_BIND_CB_AUTOREACTIVE 1 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS [numthreads(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH)] +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT void CS(uint2 uGroupId : SV_GroupID, uint2 uGroupThreadId : SV_GroupThreadID) { - FFX_MIN16_I2 uDispatchThreadId = FFX_MIN16_I2(uGroupId * uint2(FFX_FSR2_THREAD_GROUP_WIDTH, FFX_FSR2_THREAD_GROUP_HEIGHT) + uGroupThreadId); + FFX_MIN16_I2 uDispatchThreadId = FFX_MIN16_I2(uGroupId * uint2(FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT) + uGroupThreadId); // ToDo: take into account jitter (i.e. add delta of previous jitter and current jitter to previous UV // fetch pre- and post-alpha color values diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta new file mode 100644 index 0000000..02c5f46 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/ffx_fsr3upscaler_tcr_autogen_pass.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 712d171118b59fc4fb28d0d487060d42 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler.meta new file mode 100644 index 0000000..2626a2e --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae9c6d015ae76544f9e8117e79ea862b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h similarity index 83% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h index 4594dc1..f0b62ab 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_common_types.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -18,6 +18,8 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + + #ifndef FFX_COMMON_TYPES_H #define FFX_COMMON_TYPES_H @@ -25,127 +27,200 @@ #define FFX_PARAMETER_IN #define FFX_PARAMETER_OUT #define FFX_PARAMETER_INOUT +#define FFX_PARAMETER_UNIFORM #elif defined(FFX_HLSL) #define FFX_PARAMETER_IN in #define FFX_PARAMETER_OUT out #define FFX_PARAMETER_INOUT inout +#define FFX_PARAMETER_UNIFORM uniform #elif defined(FFX_GLSL) #define FFX_PARAMETER_IN in #define FFX_PARAMETER_OUT out #define FFX_PARAMETER_INOUT inout +#define FFX_PARAMETER_UNIFORM const //[cacao_placeholder] until a better fit is found! #endif // #if defined(FFX_CPU) #if defined(FFX_CPU) /// A typedef for a boolean value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef bool FfxBoolean; /// A typedef for a unsigned 8bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint8_t FfxUInt8; /// A typedef for a unsigned 16bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint16_t FfxUInt16; /// A typedef for a unsigned 32bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32; /// A typedef for a unsigned 64bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint64_t FfxUInt64; /// A typedef for a signed 8bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int8_t FfxInt8; /// A typedef for a signed 16bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int16_t FfxInt16; /// A typedef for a signed 32bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int32_t FfxInt32; /// A typedef for a signed 64bit integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef int64_t FfxInt64; /// A typedef for a floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32; /// A typedef for a 2-dimensional floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32x2[2]; /// A typedef for a 3-dimensional floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32x3[3]; /// A typedef for a 4-dimensional floating point value. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef float FfxFloat32x4[4]; /// A typedef for a 2-dimensional 32bit unsigned integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32x2[2]; /// A typedef for a 3-dimensional 32bit unsigned integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32x3[3]; /// A typedef for a 4-dimensional 32bit unsigned integer. /// -/// @ingroup CPU +/// @ingroup CPUTypes typedef uint32_t FfxUInt32x4[4]; #endif // #if defined(FFX_CPU) #if defined(FFX_HLSL) + +#define FfxFloat32Mat4 matrix +#define FfxFloat32Mat3 matrix + /// A typedef for a boolean value. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef bool FfxBoolean; -#if FFX_HLSL_6_2 +#if FFX_HLSL_SM>=62 + +/// @defgroup HLSL62Types HLSL 6.2 And Above Types +/// HLSL 6.2 and above type defines for all commonly used variables +/// +/// @ingroup HLSLTypes + +/// A typedef for a floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t FfxFloat32; + +/// A typedef for a 2-dimensional floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t2 FfxFloat32x2; + +/// A typedef for a 3-dimensional floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t3 FfxFloat32x3; + +/// A typedef for a 4-dimensional floating point value. +/// +/// @ingroup HLSL62Types typedef float32_t4 FfxFloat32x4; +/// A [cacao_placeholder] typedef for matrix type until confirmed. +typedef float4x4 FfxFloat32x4x4; +typedef float3x3 FfxFloat32x3x3; +typedef float2x2 FfxFloat32x2x2; + /// A typedef for a unsigned 32bit integer. /// -/// @ingroup GPU +/// @ingroup HLSL62Types typedef uint32_t FfxUInt32; + +/// A typedef for a 2-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types typedef uint32_t2 FfxUInt32x2; + +/// A typedef for a 3-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types typedef uint32_t3 FfxUInt32x3; + +/// A typedef for a 4-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types typedef uint32_t4 FfxUInt32x4; + +/// A typedef for a signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t FfxInt32; + +/// A typedef for a 2-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t2 FfxInt32x2; + +/// A typedef for a 3-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t3 FfxInt32x3; + +/// A typedef for a 4-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types typedef int32_t4 FfxInt32x4; -#else + +#else // #if FFX_HLSL_SM>=62 + +/// @defgroup HLSLBaseTypes HLSL 6.1 And Below Types +/// HLSL 6.1 and below type defines for all commonly used variables +/// +/// @ingroup HLSLTypes + #define FfxFloat32 float #define FfxFloat32x2 float2 #define FfxFloat32x3 float3 #define FfxFloat32x4 float4 +/// A [cacao_placeholder] typedef for matrix type until confirmed. +#define FfxFloat32x4x4 float4x4 +#define FfxFloat32x3x3 float3x3 +#define FfxFloat32x2x2 float2x2 + /// A typedef for a unsigned 32bit integer. /// /// @ingroup GPU @@ -153,14 +228,18 @@ typedef uint FfxUInt32; typedef uint2 FfxUInt32x2; typedef uint3 FfxUInt32x3; typedef uint4 FfxUInt32x4; + typedef int FfxInt32; typedef int2 FfxInt32x2; typedef int3 FfxInt32x3; typedef int4 FfxInt32x4; -#endif // #if defined(FFX_HLSL_6_2) + +#endif // #if FFX_HLSL_SM>=62 #if FFX_HALF -#if FFX_HLSL_6_2 + +#if FFX_HLSL_SM >= 62 + typedef float16_t FfxFloat16; typedef float16_t2 FfxFloat16x2; typedef float16_t3 FfxFloat16x3; @@ -168,7 +247,7 @@ typedef float16_t4 FfxFloat16x4; /// A typedef for an unsigned 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef uint16_t FfxUInt16; typedef uint16_t2 FfxUInt16x2; typedef uint16_t3 FfxUInt16x3; @@ -176,7 +255,7 @@ typedef uint16_t4 FfxUInt16x4; /// A typedef for a signed 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef int16_t FfxInt16; typedef int16_t2 FfxInt16x2; typedef int16_t3 FfxInt16x3; @@ -204,7 +283,7 @@ typedef short FfxInt16; typedef short2 FfxInt16x2; typedef short3 FfxInt16x3; typedef short4 FfxInt16x4; -#else +#else // #if FFX_HLSL_SM>=62 typedef min16float FfxFloat16; typedef min16float2 FfxFloat16x2; typedef min16float3 FfxFloat16x3; @@ -212,7 +291,7 @@ typedef min16float4 FfxFloat16x4; /// A typedef for an unsigned 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef min16uint FfxUInt16; typedef min16uint2 FfxUInt16x2; typedef min16uint3 FfxUInt16x3; @@ -220,19 +299,25 @@ typedef min16uint4 FfxUInt16x4; /// A typedef for a signed 16bit integer. /// -/// @ingroup GPU +/// @ingroup HLSLTypes typedef min16int FfxInt16; typedef min16int2 FfxInt16x2; typedef min16int3 FfxInt16x3; typedef min16int4 FfxInt16x4; -#endif // FFX_HLSL_6_2 +#endif // #if FFX_HLSL_SM>=62 + #endif // FFX_HALF + #endif // #if defined(FFX_HLSL) #if defined(FFX_GLSL) + +#define FfxFloat32Mat4 mat4 +#define FfxFloat32Mat3 mat3 + /// A typedef for a boolean value. /// -/// @ingroup GPU +/// @ingroup GLSLTypes #define FfxBoolean bool #define FfxFloat32 float #define FfxFloat32x2 vec2 @@ -246,6 +331,12 @@ typedef min16int4 FfxInt16x4; #define FfxInt32x2 ivec2 #define FfxInt32x3 ivec3 #define FfxInt32x4 ivec4 + +/// A [cacao_placeholder] typedef for matrix type until confirmed. +#define FfxFloat32x4x4 mat4 +#define FfxFloat32x3x3 mat3 +#define FfxFloat32x2x2 mat2 + #if FFX_HALF #define FfxFloat16 float16_t #define FfxFloat16x2 f16vec2 @@ -264,11 +355,11 @@ typedef min16int4 FfxInt16x4; // Global toggles: // #define FFX_HALF (1) -// #define FFX_HLSL_6_2 (1) +// #define FFX_HLSL_SM (62) -#if defined(FFX_HALF) && !defined(SHADER_API_PSSL) +#if FFX_HALF && !defined(SHADER_API_PSSL) -#if FFX_HLSL_6_2 +#if FFX_HLSL_SM >= 62 #define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef BaseComponentType##16_t TypeName; #define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; @@ -278,7 +369,7 @@ typedef min16int4 FfxInt16x4; #define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; #define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; -#else //FFX_HLSL_6_2 +#else //FFX_HLSL_SM>=62 #define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef min16##BaseComponentType TypeName; #define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; @@ -288,7 +379,7 @@ typedef min16int4 FfxInt16x4; #define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ); #define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) FFX_MIN16_MATRIX( TypeName, BaseComponentType, ROW, COL ); -#endif //FFX_HLSL_6_2 +#endif //FFX_HLSL_SM>=62 #else //FFX_HALF diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta new file mode 100644 index 0000000..8d9b15f --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_common_types.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 7974b728d5c1b6d4a8a8e3965d03f96d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h similarity index 66% rename from Assets/Resources/FSR2/shaders/ffx_core.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h index 4e687d6..02f6b3f 100644 --- a/Assets/Resources/FSR2/shaders/ffx_core.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,17 +19,40 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -/// @defgroup Core -/// @defgroup HLSL -/// @defgroup GLSL -/// @defgroup GPU -/// @defgroup CPU -/// @defgroup CAS -/// @defgroup FSR1 + +/// @defgroup FfxGPU GPU +/// The FidelityFX SDK GPU References +/// +/// @ingroup ffxSDK + +/// @defgroup FfxHLSL HLSL References +/// FidelityFX SDK HLSL GPU References +/// +/// @ingroup FfxGPU + +/// @defgroup FfxGLSL GLSL References +/// FidelityFX SDK GLSL GPU References +/// +/// @ingroup FfxGPU + +/// @defgroup FfxGPUEffects FidelityFX GPU References +/// FidelityFX Effect GPU Reference Documentation +/// +/// @ingroup FfxGPU + +/// @defgroup GPUCore GPU Core +/// GPU defines and functions +/// +/// @ingroup FfxGPU #if !defined(FFX_CORE_H) #define FFX_CORE_H +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler + #include "ffx_common_types.h" #if defined(FFX_CPU) @@ -49,4 +72,9 @@ #include "ffx_core_gpu_common_half.h" #include "ffx_core_portability.h" #endif // #if defined(FFX_GPU) -#endif // #if !defined(FFX_CORE_H) \ No newline at end of file + +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler + +#endif // #if !defined(FFX_CORE_H) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta new file mode 100644 index 0000000..562741a --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: b91c5f52b89ff554dacb51045a802ed8 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h similarity index 93% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h index 3bf0295..865258d 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_cpu.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,23 +19,29 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + /// A define for a true value in a boolean expression. /// -/// @ingroup CPU +/// @ingroup CPUTypes #define FFX_TRUE (1) /// A define for a false value in a boolean expression. /// -/// @ingroup CPU +/// @ingroup CPUTypes #define FFX_FALSE (0) #if !defined(FFX_STATIC) /// A define to abstract declaration of static variables and functions. /// -/// @ingroup CPU +/// @ingroup CPUTypes #define FFX_STATIC static #endif // #if !defined(FFX_STATIC) +/// @defgroup CPUCore CPU Core +/// Core CPU-side defines and functions +/// +/// @ingroup ffxHost + #ifdef __clang__ #pragma clang diagnostic ignored "-Wunused-variable" #endif @@ -47,7 +53,7 @@ /// @returns /// An unsigned 32bit integer value containing the bit pattern of x. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxUInt32 ffxAsUInt32(FfxFloat32 x) { union @@ -89,7 +95,7 @@ FFX_STATIC FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) { return y * t + (-x * t + x); @@ -102,10 +108,10 @@ FFX_STATIC FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) /// @returns /// The reciprocal value of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 ffxReciprocal(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 ffxReciprocal(FfxFloat32 x) { - return 1.0f / a; + return 1.0f / x; } /// Compute the square root of a value. @@ -115,7 +121,7 @@ FFX_STATIC FfxFloat32 ffxReciprocal(FfxFloat32 a) /// @returns /// The the square root of x. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxFloat32 ffxSqrt(FfxFloat32 x) { return sqrt(x); @@ -135,10 +141,10 @@ FFX_STATIC FfxUInt32 AShrSU1(FfxUInt32 a, FfxUInt32 b) /// @returns /// The fractional part of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 ffxFract(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 ffxFract(FfxFloat32 x) { - return a - floor(a); + return x - floor(x); } /// Compute the reciprocal square root of a value. @@ -148,10 +154,10 @@ FFX_STATIC FfxFloat32 ffxFract(FfxFloat32 a) /// @returns /// The reciprocal square root value of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 rsqrt(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 rsqrt(FfxFloat32 x) { - return ffxReciprocal(ffxSqrt(a)); + return ffxReciprocal(ffxSqrt(x)); } FFX_STATIC FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) @@ -181,10 +187,10 @@ FFX_STATIC FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) /// @returns /// The clamped version of x. /// -/// @ingroup CPU -FFX_STATIC FfxFloat32 ffxSaturate(FfxFloat32 a) +/// @ingroup CPUCore +FFX_STATIC FfxFloat32 ffxSaturate(FfxFloat32 x) { - return ffxMin(1.0f, ffxMax(0.0f, a)); + return ffxMin(1.0f, ffxMax(0.0f, x)); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -245,7 +251,7 @@ FFX_STATIC void opARcpF3(FfxFloat32x3 d, FfxFloat32x3 a) /// @returns /// The closest 16bit floating point value to f. /// -/// @ingroup CPU +/// @ingroup CPUCore FFX_STATIC FfxUInt32 f32tof16(FfxFloat32 f) { static FfxUInt16 base[512] = { @@ -320,13 +326,13 @@ FFX_STATIC FfxUInt32 f32tof16(FfxFloat32 f) /// point representation, and then stores the X and Y components in the lower and upper 16 bits of the /// 32bit unsigned integer respectively. /// -/// @param [in] value A 2-dimensional floating point value to convert and pack. +/// @param [in] x A 2-dimensional floating point value to convert and pack. /// /// @returns /// A packed 32bit value containing 2 16bit floating point values. /// -/// @ingroup CPU -FFX_STATIC FfxUInt32 packHalf2x16(FfxFloat32x2 a) +/// @ingroup CPUCore +FFX_STATIC FfxUInt32 packHalf2x16(FfxFloat32x2 x) { - return f32tof16(a[0]) + (f32tof16(a[1]) << 16); + return f32tof16(x[0]) + (f32tof16(x[1]) << 16); } diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta new file mode 100644 index 0000000..9aed874 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_cpu.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 4c88c0b7a4dec1e479272449c19ca981 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h similarity index 91% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h index ae07642..2f687df 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,31 +19,35 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + /// A define for a true value in a boolean expression. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_TRUE (true) /// A define for a false value in a boolean expression. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_FALSE (false) /// A define value for positive infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_POSITIVE_INFINITY_FLOAT ffxAsFloat(0x7f800000u) /// A define value for negative infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_NEGATIVE_INFINITY_FLOAT ffxAsFloat(0xff800000u) /// A define value for PI. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_PI (3.14159) +FFX_STATIC const FfxFloat32 FFX_FP16_MIN = 6.10e-05f; +FFX_STATIC const FfxFloat32 FFX_FP16_MAX = 65504.0f; +FFX_STATIC const FfxFloat32 FFX_TONEMAP_EPSILON = 1.0f / FFX_FP16_MAX; /// Compute the reciprocal of value. /// @@ -52,7 +56,7 @@ /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxReciprocal(FfxFloat32 value) { return rcp(value); @@ -65,7 +69,7 @@ FfxFloat32 ffxReciprocal(FfxFloat32 value) /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxReciprocal(FfxFloat32x2 value) { return rcp(value); @@ -78,7 +82,7 @@ FfxFloat32x2 ffxReciprocal(FfxFloat32x2 value) /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxReciprocal(FfxFloat32x3 value) { return rcp(value); @@ -91,7 +95,7 @@ FfxFloat32x3 ffxReciprocal(FfxFloat32x3 value) /// @returns /// The 1 / value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxReciprocal(FfxFloat32x4 value) { return rcp(value); @@ -105,7 +109,7 @@ FfxFloat32x4 ffxReciprocal(FfxFloat32x4 value) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) { return min(x, y); @@ -119,7 +123,7 @@ FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxMin(FfxFloat32x2 x, FfxFloat32x2 y) { return min(x, y); @@ -133,7 +137,7 @@ FfxFloat32x2 ffxMin(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxMin(FfxFloat32x3 x, FfxFloat32x3 y) { return min(x, y); @@ -147,7 +151,7 @@ FfxFloat32x3 ffxMin(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxMin(FfxFloat32x4 x, FfxFloat32x4 y) { return min(x, y); @@ -161,7 +165,7 @@ FfxFloat32x4 ffxMin(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32 ffxMin(FfxInt32 x, FfxInt32 y) { return min(x, y); @@ -175,7 +179,7 @@ FfxInt32 ffxMin(FfxInt32 x, FfxInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x2 ffxMin(FfxInt32x2 x, FfxInt32x2 y) { return min(x, y); @@ -189,7 +193,7 @@ FfxInt32x2 ffxMin(FfxInt32x2 x, FfxInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x3 ffxMin(FfxInt32x3 x, FfxInt32x3 y) { return min(x, y); @@ -203,7 +207,7 @@ FfxInt32x3 ffxMin(FfxInt32x3 x, FfxInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x4 ffxMin(FfxInt32x4 x, FfxInt32x4 y) { return min(x, y); @@ -217,7 +221,7 @@ FfxInt32x4 ffxMin(FfxInt32x4 x, FfxInt32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxMin(FfxUInt32 x, FfxUInt32 y) { return min(x, y); @@ -231,7 +235,7 @@ FfxUInt32 ffxMin(FfxUInt32 x, FfxUInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxMin(FfxUInt32x2 x, FfxUInt32x2 y) { return min(x, y); @@ -245,7 +249,7 @@ FfxUInt32x2 ffxMin(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxMin(FfxUInt32x3 x, FfxUInt32x3 y) { return min(x, y); @@ -259,7 +263,7 @@ FfxUInt32x3 ffxMin(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxMin(FfxUInt32x4 x, FfxUInt32x4 y) { return min(x, y); @@ -273,7 +277,7 @@ FfxUInt32x4 ffxMin(FfxUInt32x4 x, FfxUInt32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxMax(FfxFloat32 x, FfxFloat32 y) { return max(x, y); @@ -287,7 +291,7 @@ FfxFloat32 ffxMax(FfxFloat32 x, FfxFloat32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxMax(FfxFloat32x2 x, FfxFloat32x2 y) { return max(x, y); @@ -301,7 +305,7 @@ FfxFloat32x2 ffxMax(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxMax(FfxFloat32x3 x, FfxFloat32x3 y) { return max(x, y); @@ -315,7 +319,7 @@ FfxFloat32x3 ffxMax(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxMax(FfxFloat32x4 x, FfxFloat32x4 y) { return max(x, y); @@ -329,7 +333,7 @@ FfxFloat32x4 ffxMax(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32 ffxMax(FfxInt32 x, FfxInt32 y) { return max(x, y); @@ -343,7 +347,7 @@ FfxInt32 ffxMax(FfxInt32 x, FfxInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x2 ffxMax(FfxInt32x2 x, FfxInt32x2 y) { return max(x, y); @@ -357,7 +361,7 @@ FfxInt32x2 ffxMax(FfxInt32x2 x, FfxInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x3 ffxMax(FfxInt32x3 x, FfxInt32x3 y) { return max(x, y); @@ -371,7 +375,7 @@ FfxInt32x3 ffxMax(FfxInt32x3 x, FfxInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt32x4 ffxMax(FfxInt32x4 x, FfxInt32x4 y) { return max(x, y); @@ -385,7 +389,7 @@ FfxInt32x4 ffxMax(FfxInt32x4 x, FfxInt32x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) { return max(x, y); @@ -399,7 +403,7 @@ FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxMax(FfxUInt32x2 x, FfxUInt32x2 y) { return max(x, y); @@ -413,7 +417,7 @@ FfxUInt32x2 ffxMax(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxMax(FfxUInt32x3 x, FfxUInt32x3 y) { return max(x, y); @@ -427,7 +431,7 @@ FfxUInt32x3 ffxMax(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxMax(FfxUInt32x4 x, FfxUInt32x4 y) { return max(x, y); @@ -441,7 +445,7 @@ FfxUInt32x4 ffxMax(FfxUInt32x4 x, FfxUInt32x4 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxPow(FfxFloat32 x, FfxFloat32 y) { return pow(x, y); @@ -455,7 +459,7 @@ FfxFloat32 ffxPow(FfxFloat32 x, FfxFloat32 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxPow(FfxFloat32x2 x, FfxFloat32x2 y) { return pow(x, y); @@ -469,7 +473,7 @@ FfxFloat32x2 ffxPow(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxPow(FfxFloat32x3 x, FfxFloat32x3 y) { return pow(x, y); @@ -483,7 +487,7 @@ FfxFloat32x3 ffxPow(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxPow(FfxFloat32x4 x, FfxFloat32x4 y) { return pow(x, y); @@ -496,7 +500,7 @@ FfxFloat32x4 ffxPow(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxSqrt(FfxFloat32 x) { return sqrt(x); @@ -509,7 +513,7 @@ FfxFloat32 ffxSqrt(FfxFloat32 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxSqrt(FfxFloat32x2 x) { return sqrt(x); @@ -522,7 +526,7 @@ FfxFloat32x2 ffxSqrt(FfxFloat32x2 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxSqrt(FfxFloat32x3 x) { return sqrt(x); @@ -535,7 +539,7 @@ FfxFloat32x3 ffxSqrt(FfxFloat32x3 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxSqrt(FfxFloat32x4 x) { return sqrt(x); @@ -549,7 +553,7 @@ FfxFloat32x4 ffxSqrt(FfxFloat32x4 x) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxCopySignBit(FfxFloat32 d, FfxFloat32 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & FfxUInt32(0x80000000u))); @@ -563,7 +567,7 @@ FfxFloat32 ffxCopySignBit(FfxFloat32 d, FfxFloat32 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxCopySignBit(FfxFloat32x2 d, FfxFloat32x2 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast2(0x80000000u))); @@ -577,7 +581,7 @@ FfxFloat32x2 ffxCopySignBit(FfxFloat32x2 d, FfxFloat32x2 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxCopySignBit(FfxFloat32x3 d, FfxFloat32x3 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast3(0x80000000u))); @@ -591,7 +595,7 @@ FfxFloat32x3 ffxCopySignBit(FfxFloat32x3 d, FfxFloat32x3 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxCopySignBit(FfxFloat32x4 d, FfxFloat32x4 s) { return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast4(0x80000000u))); @@ -614,7 +618,7 @@ FfxFloat32x4 ffxCopySignBit(FfxFloat32x4 d, FfxFloat32x4 s) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxIsSigned(FfxFloat32 m) { return ffxSaturate(m * FfxFloat32(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -637,7 +641,7 @@ FfxFloat32 ffxIsSigned(FfxFloat32 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxIsSigned(FfxFloat32x2 m) { return ffxSaturate(m * ffxBroadcast2(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -660,7 +664,7 @@ FfxFloat32x2 ffxIsSigned(FfxFloat32x2 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxIsSigned(FfxFloat32x3 m) { return ffxSaturate(m * ffxBroadcast3(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -683,7 +687,7 @@ FfxFloat32x3 ffxIsSigned(FfxFloat32x3 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or positive. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxIsSigned(FfxFloat32x4 m) { return ffxSaturate(m * ffxBroadcast4(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -701,7 +705,7 @@ FfxFloat32x4 ffxIsSigned(FfxFloat32x4 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxIsGreaterThanZero(FfxFloat32 m) { return ffxSaturate(m * FfxFloat32(FFX_POSITIVE_INFINITY_FLOAT)); @@ -719,7 +723,7 @@ FfxFloat32 ffxIsGreaterThanZero(FfxFloat32 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxIsGreaterThanZero(FfxFloat32x2 m) { return ffxSaturate(m * ffxBroadcast2(FFX_POSITIVE_INFINITY_FLOAT)); @@ -737,7 +741,7 @@ FfxFloat32x2 ffxIsGreaterThanZero(FfxFloat32x2 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxIsGreaterThanZero(FfxFloat32x3 m) { return ffxSaturate(m * ffxBroadcast3(FFX_POSITIVE_INFINITY_FLOAT)); @@ -755,7 +759,7 @@ FfxFloat32x3 ffxIsGreaterThanZero(FfxFloat32x3 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxIsGreaterThanZero(FfxFloat32x4 m) { return ffxSaturate(m * ffxBroadcast4(FFX_POSITIVE_INFINITY_FLOAT)); @@ -775,7 +779,7 @@ FfxFloat32x4 ffxIsGreaterThanZero(FfxFloat32x4 m) /// @returns /// The sortable integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxFloatToSortableInteger(FfxUInt32 value) { return value ^ ((AShrSU1(value, FfxUInt32(31))) | FfxUInt32(0x80000000)); @@ -792,7 +796,7 @@ FfxUInt32 ffxFloatToSortableInteger(FfxUInt32 value) /// @returns /// The sortable integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxSortableIntegerToFloat(FfxUInt32 value) { return value ^ ((~AShrSU1(value, FfxUInt32(31))) | FfxUInt32(0x80000000)); @@ -811,10 +815,10 @@ FfxUInt32 ffxSortableIntegerToFloat(FfxUInt32 value) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32 ffxApproximateSqrt(FfxFloat32 a) +/// @ingroup GPUCore +FfxFloat32 ffxApproximateSqrt(FfxFloat32 value) { - return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(1)) + FfxUInt32(0x1fbc4639)); + return ffxAsFloat((ffxAsUInt32(value) >> FfxUInt32(1)) + FfxUInt32(0x1fbc4639)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -830,10 +834,10 @@ FfxFloat32 ffxApproximateSqrt(FfxFloat32 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32 ffxApproximateReciprocal(FfxFloat32 a) +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocal(FfxFloat32 value) { - return ffxAsFloat(FfxUInt32(0x7ef07ebb) - ffxAsUInt32(a)); + return ffxAsFloat(FfxUInt32(0x7ef07ebb) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -849,7 +853,7 @@ FfxFloat32 ffxApproximateReciprocal(FfxFloat32 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateReciprocalMedium(FfxFloat32 value) { FfxFloat32 b = ffxAsFloat(FfxUInt32(0x7ef19fff) - ffxAsUInt32(value)); @@ -869,10 +873,10 @@ FfxFloat32 ffxApproximateReciprocalMedium(FfxFloat32 value) /// @returns /// An approximation of the reciprocal square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 a) +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 value) { - return ffxAsFloat(FfxUInt32(0x5f347d74) - (ffxAsUInt32(a) >> FfxUInt32(1))); + return ffxAsFloat(FfxUInt32(0x5f347d74) - (ffxAsUInt32(value) >> FfxUInt32(1))); } /// Calculate a low-quality approximation for the square root of a value. @@ -888,10 +892,10 @@ FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 value) { - return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(1u)) + ffxBroadcast2(0x1fbc4639u)); + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast2(1u)) + ffxBroadcast2(0x1fbc4639u)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -907,10 +911,10 @@ FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 value) { - return ffxAsFloat(ffxBroadcast2(0x7ef07ebbu) - ffxAsUInt32(a)); + return ffxAsFloat(ffxBroadcast2(0x7ef07ebbu) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -926,11 +930,11 @@ FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 value) { - FfxFloat32x2 b = ffxAsFloat(ffxBroadcast2(0x7ef19fffu) - ffxAsUInt32(a)); - return b * (-b * a + ffxBroadcast2(2.0f)); + FfxFloat32x2 b = ffxAsFloat(ffxBroadcast2(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast2(2.0f)); } /// Calculate a low-quality approximation for the square root of a value. @@ -946,10 +950,10 @@ FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 a) +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 value) { - return ffxAsFloat(ffxBroadcast2(0x5f347d74u) - (ffxAsUInt32(a) >> ffxBroadcast2(1u))); + return ffxAsFloat(ffxBroadcast2(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast2(1u))); } /// Calculate a low-quality approximation for the square root of a value. @@ -965,10 +969,10 @@ FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 value) { - return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(1u)) + ffxBroadcast3(0x1fbc4639u)); + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast3(1u)) + ffxBroadcast3(0x1fbc4639u)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -984,10 +988,10 @@ FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 value) { - return ffxAsFloat(ffxBroadcast3(0x7ef07ebbu) - ffxAsUInt32(a)); + return ffxAsFloat(ffxBroadcast3(0x7ef07ebbu) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -1003,11 +1007,11 @@ FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 value) { - FfxFloat32x3 b = ffxAsFloat(ffxBroadcast3(0x7ef19fffu) - ffxAsUInt32(a)); - return b * (-b * a + ffxBroadcast3(2.0f)); + FfxFloat32x3 b = ffxAsFloat(ffxBroadcast3(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast3(2.0f)); } /// Calculate a low-quality approximation for the square root of a value. @@ -1023,10 +1027,10 @@ FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 a) +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 value) { - return ffxAsFloat(ffxBroadcast3(0x5f347d74u) - (ffxAsUInt32(a) >> ffxBroadcast3(1u))); + return ffxAsFloat(ffxBroadcast3(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast3(1u))); } /// Calculate a low-quality approximation for the square root of a value. @@ -1042,10 +1046,10 @@ FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 value) { - return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(1u)) + ffxBroadcast4(0x1fbc4639u)); + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast4(1u)) + ffxBroadcast4(0x1fbc4639u)); } /// Calculate a low-quality approximation for the reciprocal of a value. @@ -1061,10 +1065,10 @@ FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 value) { - return ffxAsFloat(ffxBroadcast4(0x7ef07ebbu) - ffxAsUInt32(a)); + return ffxAsFloat(ffxBroadcast4(0x7ef07ebbu) - ffxAsUInt32(value)); } /// Calculate a medium-quality approximation for the reciprocal of a value. @@ -1080,11 +1084,11 @@ FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 value) { - FfxFloat32x4 b = ffxAsFloat(ffxBroadcast4(0x7ef19fffu) - ffxAsUInt32(a)); - return b * (-b * a + ffxBroadcast4(2.0f)); + FfxFloat32x4 b = ffxAsFloat(ffxBroadcast4(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast4(2.0f)); } /// Calculate a low-quality approximation for the square root of a value. @@ -1100,10 +1104,10 @@ FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU -FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 a) +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 value) { - return ffxAsFloat(ffxBroadcast4(0x5f347d74u) - (ffxAsUInt32(a) >> ffxBroadcast4(1u))); + return ffxAsFloat(ffxBroadcast4(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast4(1u))); } /// Calculate dot product of 'a' and 'b'. @@ -1114,7 +1118,7 @@ FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 a) /// @returns /// The value of a dot b. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxDot2(FfxFloat32x2 a, FfxFloat32x2 b) { return dot(a, b); @@ -1128,7 +1132,7 @@ FfxFloat32 ffxDot2(FfxFloat32x2 a, FfxFloat32x2 b) /// @returns /// The value of a dot b. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxDot3(FfxFloat32x3 a, FfxFloat32x3 b) { return dot(a, b); @@ -1142,7 +1146,7 @@ FfxFloat32 ffxDot3(FfxFloat32x3 a, FfxFloat32x3 b) /// @returns /// The value of a dot b. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) { return dot(a, b); @@ -1160,7 +1164,7 @@ FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximatePQToGamma2Medium(FfxFloat32 a) { return a * a * a * a; @@ -1177,7 +1181,7 @@ FfxFloat32 ffxApproximatePQToGamma2Medium(FfxFloat32 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximatePQToLinear(FfxFloat32 a) { return a * a * a * a * a * a * a * a; @@ -1194,7 +1198,7 @@ FfxFloat32 ffxApproximatePQToLinear(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateGamma2ToPQ(FfxFloat32 a) { return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(2)) + FfxUInt32(0x2F9A4E46)); @@ -1211,7 +1215,7 @@ FfxFloat32 ffxApproximateGamma2ToPQ(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateGamma2ToPQMedium(FfxFloat32 a) { FfxFloat32 b = ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(2)) + FfxUInt32(0x2F9A4E46)); @@ -1230,7 +1234,7 @@ FfxFloat32 ffxApproximateGamma2ToPQMedium(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateGamma2ToPQHigh(FfxFloat32 a) { return ffxSqrt(ffxSqrt(a)); @@ -1247,7 +1251,7 @@ FfxFloat32 ffxApproximateGamma2ToPQHigh(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateLinearToPQ(FfxFloat32 a) { return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(3)) + FfxUInt32(0x378D8723)); @@ -1264,7 +1268,7 @@ FfxFloat32 ffxApproximateLinearToPQ(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateLinearToPQMedium(FfxFloat32 a) { FfxFloat32 b = ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(3)) + FfxUInt32(0x378D8723)); @@ -1283,7 +1287,7 @@ FfxFloat32 ffxApproximateLinearToPQMedium(FfxFloat32 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxApproximateLinearToPQHigh(FfxFloat32 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1300,7 +1304,7 @@ FfxFloat32 ffxApproximateLinearToPQHigh(FfxFloat32 a) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximatePQToGamma2Medium(FfxFloat32x2 a) { return a * a * a * a; @@ -1317,7 +1321,7 @@ FfxFloat32x2 ffxApproximatePQToGamma2Medium(FfxFloat32x2 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximatePQToLinear(FfxFloat32x2 a) { return a * a * a * a * a * a * a * a; @@ -1334,7 +1338,7 @@ FfxFloat32x2 ffxApproximatePQToLinear(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateGamma2ToPQ(FfxFloat32x2 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(2u)) + ffxBroadcast2(0x2F9A4E46u)); @@ -1351,7 +1355,7 @@ FfxFloat32x2 ffxApproximateGamma2ToPQ(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateGamma2ToPQMedium(FfxFloat32x2 a) { FfxFloat32x2 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(2u)) + ffxBroadcast2(0x2F9A4E46u)); @@ -1370,7 +1374,7 @@ FfxFloat32x2 ffxApproximateGamma2ToPQMedium(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateGamma2ToPQHigh(FfxFloat32x2 a) { return ffxSqrt(ffxSqrt(a)); @@ -1387,7 +1391,7 @@ FfxFloat32x2 ffxApproximateGamma2ToPQHigh(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateLinearToPQ(FfxFloat32x2 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(3u)) + ffxBroadcast2(0x378D8723u)); @@ -1404,7 +1408,7 @@ FfxFloat32x2 ffxApproximateLinearToPQ(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateLinearToPQMedium(FfxFloat32x2 a) { FfxFloat32x2 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(3u)) + ffxBroadcast2(0x378D8723u)); @@ -1423,7 +1427,7 @@ FfxFloat32x2 ffxApproximateLinearToPQMedium(FfxFloat32x2 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxApproximateLinearToPQHigh(FfxFloat32x2 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1440,7 +1444,7 @@ FfxFloat32x2 ffxApproximateLinearToPQHigh(FfxFloat32x2 a) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximatePQToGamma2Medium(FfxFloat32x3 a) { return a * a * a * a; @@ -1457,7 +1461,7 @@ FfxFloat32x3 ffxApproximatePQToGamma2Medium(FfxFloat32x3 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximatePQToLinear(FfxFloat32x3 a) { return a * a * a * a * a * a * a * a; @@ -1474,7 +1478,7 @@ FfxFloat32x3 ffxApproximatePQToLinear(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateGamma2ToPQ(FfxFloat32x3 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(2u)) + ffxBroadcast3(0x2F9A4E46u)); @@ -1491,7 +1495,7 @@ FfxFloat32x3 ffxApproximateGamma2ToPQ(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateGamma2ToPQMedium(FfxFloat32x3 a) { FfxFloat32x3 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(2u)) + ffxBroadcast3(0x2F9A4E46u)); @@ -1510,7 +1514,7 @@ FfxFloat32x3 ffxApproximateGamma2ToPQMedium(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateGamma2ToPQHigh(FfxFloat32x3 a) { return ffxSqrt(ffxSqrt(a)); @@ -1527,7 +1531,7 @@ FfxFloat32x3 ffxApproximateGamma2ToPQHigh(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateLinearToPQ(FfxFloat32x3 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(3u)) + ffxBroadcast3(0x378D8723u)); @@ -1544,7 +1548,7 @@ FfxFloat32x3 ffxApproximateLinearToPQ(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateLinearToPQMedium(FfxFloat32x3 a) { FfxFloat32x3 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(3u)) + ffxBroadcast3(0x378D8723u)); @@ -1563,7 +1567,7 @@ FfxFloat32x3 ffxApproximateLinearToPQMedium(FfxFloat32x3 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxApproximateLinearToPQHigh(FfxFloat32x3 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1580,7 +1584,7 @@ FfxFloat32x3 ffxApproximateLinearToPQHigh(FfxFloat32x3 a) /// @returns /// The value a converted into Gamma2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximatePQToGamma2Medium(FfxFloat32x4 a) { return a * a * a * a; @@ -1597,7 +1601,7 @@ FfxFloat32x4 ffxApproximatePQToGamma2Medium(FfxFloat32x4 a) /// @returns /// The value a converted into linear. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximatePQToLinear(FfxFloat32x4 a) { return a * a * a * a * a * a * a * a; @@ -1614,7 +1618,7 @@ FfxFloat32x4 ffxApproximatePQToLinear(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateGamma2ToPQ(FfxFloat32x4 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(2u)) + ffxBroadcast4(0x2F9A4E46u)); @@ -1631,7 +1635,7 @@ FfxFloat32x4 ffxApproximateGamma2ToPQ(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateGamma2ToPQMedium(FfxFloat32x4 a) { FfxFloat32x4 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(2u)) + ffxBroadcast4(0x2F9A4E46u)); @@ -1650,7 +1654,7 @@ FfxFloat32x4 ffxApproximateGamma2ToPQMedium(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateGamma2ToPQHigh(FfxFloat32x4 a) { return ffxSqrt(ffxSqrt(a)); @@ -1667,7 +1671,7 @@ FfxFloat32x4 ffxApproximateGamma2ToPQHigh(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateLinearToPQ(FfxFloat32x4 a) { return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(3u)) + ffxBroadcast4(0x378D8723u)); @@ -1684,7 +1688,7 @@ FfxFloat32x4 ffxApproximateLinearToPQ(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateLinearToPQMedium(FfxFloat32x4 a) { FfxFloat32x4 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(3u)) + ffxBroadcast4(0x378D8723u)); @@ -1703,7 +1707,7 @@ FfxFloat32x4 ffxApproximateLinearToPQMedium(FfxFloat32x4 a) /// @returns /// The value a converted into PQ. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxApproximateLinearToPQHigh(FfxFloat32x4 a) { return ffxSqrt(ffxSqrt(ffxSqrt(a))); @@ -1793,7 +1797,7 @@ FfxFloat32x2 ffxParabolicSinCos(FfxFloat32 x) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneAnd(FfxUInt32 x, FfxUInt32 y) { return min(x, y); @@ -1807,7 +1811,7 @@ FfxUInt32 ffxZeroOneAnd(FfxUInt32 x, FfxUInt32 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x, FfxUInt32x2 y) { return min(x, y); @@ -1821,7 +1825,7 @@ FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x, FfxUInt32x3 y) { return min(x, y); @@ -1835,7 +1839,7 @@ FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x, FfxUInt32x4 y) { return min(x, y); @@ -1844,12 +1848,11 @@ FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x, FfxUInt32x4 y) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneAnd(FfxUInt32 x) { return x ^ FfxUInt32(1); @@ -1858,12 +1861,11 @@ FfxUInt32 ffxZeroOneAnd(FfxUInt32 x) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x) { return x ^ ffxBroadcast2(1u); @@ -1872,12 +1874,11 @@ FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x) { return x ^ ffxBroadcast3(1u); @@ -1886,12 +1887,11 @@ FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x) /// Conditional free logic NOT operation using two values. /// /// @param [in] x The first value to be fed into the NOT operator. -/// @param [in] y The second value to be fed into the NOT operator. /// /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x) { return x ^ ffxBroadcast4(1u); @@ -1905,7 +1905,7 @@ FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneOr(FfxUInt32 x, FfxUInt32 y) { return max(x, y); @@ -1919,7 +1919,7 @@ FfxUInt32 ffxZeroOneOr(FfxUInt32 x, FfxUInt32 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneOr(FfxUInt32x2 x, FfxUInt32x2 y) { return max(x, y); @@ -1933,7 +1933,7 @@ FfxUInt32x2 ffxZeroOneOr(FfxUInt32x2 x, FfxUInt32x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneOr(FfxUInt32x3 x, FfxUInt32x3 y) { return max(x, y); @@ -1947,7 +1947,7 @@ FfxUInt32x3 ffxZeroOneOr(FfxUInt32x3 x, FfxUInt32x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneOr(FfxUInt32x4 x, FfxUInt32x4 y) { return max(x, y); @@ -1960,7 +1960,7 @@ FfxUInt32x4 ffxZeroOneOr(FfxUInt32x4 x, FfxUInt32x4 y) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxZeroOneAndToU1(FfxFloat32 x) { return FfxUInt32(FfxFloat32(1.0) - x); @@ -1973,7 +1973,7 @@ FfxUInt32 ffxZeroOneAndToU1(FfxFloat32 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxZeroOneAndToU2(FfxFloat32x2 x) { return FfxUInt32x2(ffxBroadcast2(1.0) - x); @@ -1986,7 +1986,7 @@ FfxUInt32x2 ffxZeroOneAndToU2(FfxFloat32x2 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x3 ffxZeroOneAndToU3(FfxFloat32x3 x) { return FfxUInt32x3(ffxBroadcast3(1.0) - x); @@ -1999,7 +1999,7 @@ FfxUInt32x3 ffxZeroOneAndToU3(FfxFloat32x3 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x4 ffxZeroOneAndToU4(FfxFloat32x4 x) { return FfxUInt32x4(ffxBroadcast4(1.0) - x); @@ -2015,7 +2015,7 @@ FfxUInt32x4 ffxZeroOneAndToU4(FfxFloat32x4 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneAndOr(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return ffxSaturate(x * y + z); @@ -2031,7 +2031,7 @@ FfxFloat32 ffxZeroOneAndOr(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneAndOr(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return ffxSaturate(x * y + z); @@ -2047,7 +2047,7 @@ FfxFloat32x2 ffxZeroOneAndOr(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneAndOr(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return ffxSaturate(x * y + z); @@ -2063,7 +2063,7 @@ FfxFloat32x3 ffxZeroOneAndOr(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneAndOr(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return ffxSaturate(x * y + z); @@ -2076,7 +2076,7 @@ FfxFloat32x4 ffxZeroOneAndOr(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneIsGreaterThanZero(FfxFloat32 x) { return ffxSaturate(x * FfxFloat32(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2089,7 +2089,7 @@ FfxFloat32 ffxZeroOneIsGreaterThanZero(FfxFloat32 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneIsGreaterThanZero(FfxFloat32x2 x) { return ffxSaturate(x * ffxBroadcast2(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2102,7 +2102,7 @@ FfxFloat32x2 ffxZeroOneIsGreaterThanZero(FfxFloat32x2 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneIsGreaterThanZero(FfxFloat32x3 x) { return ffxSaturate(x * ffxBroadcast3(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2115,7 +2115,7 @@ FfxFloat32x3 ffxZeroOneIsGreaterThanZero(FfxFloat32x3 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneIsGreaterThanZero(FfxFloat32x4 x) { return ffxSaturate(x * ffxBroadcast4(FFX_POSITIVE_INFINITY_FLOAT)); @@ -2128,7 +2128,7 @@ FfxFloat32x4 ffxZeroOneIsGreaterThanZero(FfxFloat32x4 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneAnd(FfxFloat32 x) { return FfxFloat32(1.0) - x; @@ -2141,7 +2141,7 @@ FfxFloat32 ffxZeroOneAnd(FfxFloat32 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneAnd(FfxFloat32x2 x) { return ffxBroadcast2(1.0) - x; @@ -2154,7 +2154,7 @@ FfxFloat32x2 ffxZeroOneAnd(FfxFloat32x2 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneAnd(FfxFloat32x3 x) { return ffxBroadcast3(1.0) - x; @@ -2167,7 +2167,7 @@ FfxFloat32x3 ffxZeroOneAnd(FfxFloat32x3 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneAnd(FfxFloat32x4 x) { return ffxBroadcast4(1.0) - x; @@ -2181,7 +2181,7 @@ FfxFloat32x4 ffxZeroOneAnd(FfxFloat32x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneOr(FfxFloat32 x, FfxFloat32 y) { return max(x, y); @@ -2195,7 +2195,7 @@ FfxFloat32 ffxZeroOneOr(FfxFloat32 x, FfxFloat32 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneOr(FfxFloat32x2 x, FfxFloat32x2 y) { return max(x, y); @@ -2209,7 +2209,7 @@ FfxFloat32x2 ffxZeroOneOr(FfxFloat32x2 x, FfxFloat32x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneOr(FfxFloat32x3 x, FfxFloat32x3 y) { return max(x, y); @@ -2223,7 +2223,7 @@ FfxFloat32x3 ffxZeroOneOr(FfxFloat32x3 x, FfxFloat32x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneOr(FfxFloat32x4 x, FfxFloat32x4 y) { return max(x, y); @@ -2238,7 +2238,7 @@ FfxFloat32x4 ffxZeroOneOr(FfxFloat32x4 x, FfxFloat32x4 y) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneSelect(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { FfxFloat32 r = (-x) * z + z; @@ -2254,7 +2254,7 @@ FfxFloat32 ffxZeroOneSelect(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneSelect(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { FfxFloat32x2 r = (-x) * z + z; @@ -2270,7 +2270,7 @@ FfxFloat32x2 ffxZeroOneSelect(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneSelect(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { FfxFloat32x3 r = (-x) * z + z; @@ -2286,7 +2286,7 @@ FfxFloat32x3 ffxZeroOneSelect(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneSelect(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { FfxFloat32x4 r = (-x) * z + z; @@ -2300,7 +2300,7 @@ FfxFloat32x4 ffxZeroOneSelect(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxZeroOneIsSigned(FfxFloat32 x) { return ffxSaturate(x * FfxFloat32(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2313,7 +2313,7 @@ FfxFloat32 ffxZeroOneIsSigned(FfxFloat32 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxZeroOneIsSigned(FfxFloat32x2 x) { return ffxSaturate(x * ffxBroadcast2(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2326,7 +2326,7 @@ FfxFloat32x2 ffxZeroOneIsSigned(FfxFloat32x2 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxZeroOneIsSigned(FfxFloat32x3 x) { return ffxSaturate(x * ffxBroadcast3(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2339,7 +2339,7 @@ FfxFloat32x3 ffxZeroOneIsSigned(FfxFloat32x3 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x4 ffxZeroOneIsSigned(FfxFloat32x4 x) { return ffxSaturate(x * ffxBroadcast4(FFX_NEGATIVE_INFINITY_FLOAT)); @@ -2358,7 +2358,7 @@ FfxFloat32x4 ffxZeroOneIsSigned(FfxFloat32x4 x) /// @returns /// The color in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxRec709FromLinear(FfxFloat32 color) { FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); @@ -2379,7 +2379,7 @@ FfxFloat32 ffxRec709FromLinear(FfxFloat32 color) /// @returns /// The color in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxRec709FromLinear(FfxFloat32x2 color) { FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); @@ -2400,7 +2400,7 @@ FfxFloat32x2 ffxRec709FromLinear(FfxFloat32x2 color) /// @returns /// The color in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxRec709FromLinear(FfxFloat32x3 color) { FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); @@ -2420,10 +2420,10 @@ FfxFloat32x3 ffxRec709FromLinear(FfxFloat32x3 color) /// @returns /// A value in gamma space. /// -/// @ingroup GPU -FfxFloat32 ffxGammaFromLinear(FfxFloat32 color, FfxFloat32 rcpX) +/// @ingroup GPUCore +FfxFloat32 ffxGammaFromLinear(FfxFloat32 value, FfxFloat32 power) { - return pow(color, FfxFloat32(rcpX)); + return pow(value, FfxFloat32(power)); } /// Compute a gamma value from a linear value. @@ -2438,10 +2438,10 @@ FfxFloat32 ffxGammaFromLinear(FfxFloat32 color, FfxFloat32 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU -FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 color, FfxFloat32 rcpX) +/// @ingroup GPUCore +FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 value, FfxFloat32 power) { - return pow(color, ffxBroadcast2(rcpX)); + return pow(value, ffxBroadcast2(power)); } /// Compute a gamma value from a linear value. @@ -2456,10 +2456,10 @@ FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 color, FfxFloat32 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU -FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 color, FfxFloat32 rcpX) +/// @ingroup GPUCore +FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 value, FfxFloat32 power) { - return pow(color, ffxBroadcast3(rcpX)); + return pow(value, ffxBroadcast3(power)); } /// Compute a PQ value from a linear value. @@ -2469,10 +2469,10 @@ FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 color, FfxFloat32 rcpX) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32 ffxPQToLinear(FfxFloat32 x) +/// @ingroup GPUCore +FfxFloat32 ffxPQToLinear(FfxFloat32 value) { - FfxFloat32 p = pow(x, FfxFloat32(0.159302)); + FfxFloat32 p = pow(value, FfxFloat32(0.159302)); return pow((FfxFloat32(0.835938) + FfxFloat32(18.8516) * p) / (FfxFloat32(1.0) + FfxFloat32(18.6875) * p), FfxFloat32(78.8438)); } @@ -2483,10 +2483,10 @@ FfxFloat32 ffxPQToLinear(FfxFloat32 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x2 ffxPQToLinear(FfxFloat32x2 x) +/// @ingroup GPUCore +FfxFloat32x2 ffxPQToLinear(FfxFloat32x2 value) { - FfxFloat32x2 p = pow(x, ffxBroadcast2(0.159302)); + FfxFloat32x2 p = pow(value, ffxBroadcast2(0.159302)); return pow((ffxBroadcast2(0.835938) + ffxBroadcast2(18.8516) * p) / (ffxBroadcast2(1.0) + ffxBroadcast2(18.6875) * p), ffxBroadcast2(78.8438)); } @@ -2497,10 +2497,10 @@ FfxFloat32x2 ffxPQToLinear(FfxFloat32x2 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x3 ffxPQToLinear(FfxFloat32x3 x) +/// @ingroup GPUCore +FfxFloat32x3 ffxPQToLinear(FfxFloat32x3 value) { - FfxFloat32x3 p = pow(x, ffxBroadcast3(0.159302)); + FfxFloat32x3 p = pow(value, ffxBroadcast3(0.159302)); return pow((ffxBroadcast3(0.835938) + ffxBroadcast3(18.8516) * p) / (ffxBroadcast3(1.0) + ffxBroadcast3(18.6875) * p), ffxBroadcast3(78.8438)); } @@ -2511,12 +2511,12 @@ FfxFloat32x3 ffxPQToLinear(FfxFloat32x3 x) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU -FfxFloat32 ffxSrgbToLinear(FfxFloat32 color) +/// @ingroup GPUCore +FfxFloat32 ffxSrgbToLinear(FfxFloat32 value) { FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); - return clamp(j.x, color * j.y, pow(color, j.z) * k.x + k.y); + return clamp(j.x, value * j.y, pow(value, j.z) * k.x + k.y); } /// Compute a linear value from a SRGB value. @@ -2526,12 +2526,12 @@ FfxFloat32 ffxSrgbToLinear(FfxFloat32 color) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU -FfxFloat32x2 ffxSrgbToLinear(FfxFloat32x2 color) +/// @ingroup GPUCore +FfxFloat32x2 ffxSrgbToLinear(FfxFloat32x2 value) { FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); - return clamp(j.xx, color * j.yy, pow(color, j.zz) * k.xx + k.yy); + return clamp(j.xx, value * j.yy, pow(value, j.zz) * k.xx + k.yy); } /// Compute a linear value from a SRGB value. @@ -2541,12 +2541,12 @@ FfxFloat32x2 ffxSrgbToLinear(FfxFloat32x2 color) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU -FfxFloat32x3 ffxSrgbToLinear(FfxFloat32x3 color) +/// @ingroup GPUCore +FfxFloat32x3 ffxSrgbToLinear(FfxFloat32x3 value) { FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); - return clamp(j.xxx, color * j.yyy, pow(color, j.zzz) * k.xxx + k.yyy); + return clamp(j.xxx, value * j.yyy, pow(value, j.zzz) * k.xxx + k.yyy); } /// Compute a linear value from a REC.709 value. @@ -2556,7 +2556,7 @@ FfxFloat32x3 ffxSrgbToLinear(FfxFloat32x3 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxLinearFromRec709(FfxFloat32 color) { FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2571,7 +2571,7 @@ FfxFloat32 ffxLinearFromRec709(FfxFloat32 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxLinearFromRec709(FfxFloat32x2 color) { FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2586,7 +2586,7 @@ FfxFloat32x2 ffxLinearFromRec709(FfxFloat32x2 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxLinearFromRec709(FfxFloat32x3 color) { FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2604,7 +2604,7 @@ FfxFloat32x3 ffxLinearFromRec709(FfxFloat32x3 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32 ffxLinearFromGamma(FfxFloat32 color, FfxFloat32 power) { return pow(color, FfxFloat32(power)); @@ -2620,7 +2620,7 @@ FfxFloat32 ffxLinearFromGamma(FfxFloat32 color, FfxFloat32 power) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x2 ffxLinearFromGamma(FfxFloat32x2 color, FfxFloat32 power) { return pow(color, ffxBroadcast2(power)); @@ -2636,7 +2636,7 @@ FfxFloat32x2 ffxLinearFromGamma(FfxFloat32x2 color, FfxFloat32 power) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat32x3 ffxLinearFromGamma(FfxFloat32x3 color, FfxFloat32 power) { return pow(color, ffxBroadcast3(power)); @@ -2651,10 +2651,10 @@ FfxFloat32x3 ffxLinearFromGamma(FfxFloat32x3 color, FfxFloat32 power) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32 ffxLinearFromPQ(FfxFloat32 x) +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromPQ(FfxFloat32 value) { - FfxFloat32 p = pow(x, FfxFloat32(0.0126833)); + FfxFloat32 p = pow(value, FfxFloat32(0.0126833)); return pow(ffxSaturate(p - FfxFloat32(0.835938)) / (FfxFloat32(18.8516) - FfxFloat32(18.6875) * p), FfxFloat32(6.27739)); } @@ -2667,10 +2667,10 @@ FfxFloat32 ffxLinearFromPQ(FfxFloat32 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 x) +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 value) { - FfxFloat32x2 p = pow(x, ffxBroadcast2(0.0126833)); + FfxFloat32x2 p = pow(value, ffxBroadcast2(0.0126833)); return pow(ffxSaturate(p - ffxBroadcast2(0.835938)) / (ffxBroadcast2(18.8516) - ffxBroadcast2(18.6875) * p), ffxBroadcast2(6.27739)); } @@ -2683,10 +2683,10 @@ FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 x) +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 value) { - FfxFloat32x3 p = pow(x, ffxBroadcast3(0.0126833)); + FfxFloat32x3 p = pow(value, ffxBroadcast3(0.0126833)); return pow(ffxSaturate(p - ffxBroadcast3(0.835938)) / (ffxBroadcast3(18.8516) - ffxBroadcast3(18.6875) * p), ffxBroadcast3(6.27739)); } @@ -2699,12 +2699,12 @@ FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32 ffxLinearFromSrgb(FfxFloat32 color) +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromSrgb(FfxFloat32 value) { FfxFloat32x3 j = FfxFloat32x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); - return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.x), color * j.y, pow(color * k.x + k.y, j.z)); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.x), value * j.y, pow(value * k.x + k.y, j.z)); } /// Compute a linear value from a value in a SRGB space. @@ -2716,12 +2716,12 @@ FfxFloat32 ffxLinearFromSrgb(FfxFloat32 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 color) +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 value) { FfxFloat32x3 j = FfxFloat32x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); - return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.xx), color * j.yy, pow(color * k.xx + k.yy, j.zz)); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.xx), value * j.yy, pow(value * k.xx + k.yy, j.zz)); } /// Compute a linear value from a value in a SRGB space. @@ -2733,12 +2733,12 @@ FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 color) /// @returns /// A value in linear space. /// -/// @ingroup GPU -FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 color) +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 value) { FfxFloat32x3 j = FfxFloat32x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); - return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.xxx), color * j.yyy, pow(color * k.xxx + k.yyy, j.zzz)); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.xxx), value * j.yyy, pow(value * k.xxx + k.yyy, j.zzz)); } /// A remapping of 64x1 to 8x8 imposing rotated 2x2 pixel quads in quad linear. @@ -2753,7 +2753,7 @@ FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 color) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxRemapForQuad(FfxUInt32 a) { return FfxUInt32x2(bitfieldExtract(a, 1u, 3u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), a, 1u)); @@ -2777,7 +2777,7 @@ FfxUInt32x2 ffxRemapForQuad(FfxUInt32 a) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxRemapForWaveReduction(FfxUInt32 a) { return FfxUInt32x2(bitfieldInsertMask(bitfieldExtract(a, 2u, 3u), a, 1u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), bitfieldExtract(a, 1u, 2u), 2u)); diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta new file mode 100644 index 0000000..ec380d2 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 05b921699d1374a429e32afca13137e2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h similarity index 94% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h index c46ccb3..4c73daf 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_gpu_common_half.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,28 +19,29 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + #if FFX_HALF -#if FFX_HLSL_6_2 +#if FFX_HLSL_SM >= 62 /// A define value for 16bit positive infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_POSITIVE_INFINITY_HALF FFX_TO_FLOAT16((uint16_t)0x7c00u) /// A define value for 16bit negative infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_NEGATIVE_INFINITY_HALF FFX_TO_FLOAT16((uint16_t)0xfc00u) #else /// A define value for 16bit positive infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_POSITIVE_INFINITY_HALF FFX_TO_FLOAT16(0x7c00u) /// A define value for 16bit negative infinity. /// -/// @ingroup GPU +/// @ingroup GPUCore #define FFX_NEGATIVE_INFINITY_HALF FFX_TO_FLOAT16(0xfc00u) -#endif // FFX_HLSL_6_2 +#endif // #if FFX_HLSL_SM>=62 /// Compute the min of two values. /// @@ -50,7 +51,7 @@ /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxMin(FfxFloat16 x, FfxFloat16 y) { return min(x, y); @@ -64,7 +65,7 @@ FfxFloat16 ffxMin(FfxFloat16 x, FfxFloat16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxMin(FfxFloat16x2 x, FfxFloat16x2 y) { return min(x, y); @@ -78,7 +79,7 @@ FfxFloat16x2 ffxMin(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxMin(FfxFloat16x3 x, FfxFloat16x3 y) { return min(x, y); @@ -92,7 +93,7 @@ FfxFloat16x3 ffxMin(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxMin(FfxFloat16x4 x, FfxFloat16x4 y) { return min(x, y); @@ -106,7 +107,7 @@ FfxFloat16x4 ffxMin(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16 ffxMin(FfxInt16 x, FfxInt16 y) { return min(x, y); @@ -120,7 +121,7 @@ FfxInt16 ffxMin(FfxInt16 x, FfxInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x2 ffxMin(FfxInt16x2 x, FfxInt16x2 y) { return min(x, y); @@ -134,7 +135,7 @@ FfxInt16x2 ffxMin(FfxInt16x2 x, FfxInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x3 ffxMin(FfxInt16x3 x, FfxInt16x3 y) { return min(x, y); @@ -148,7 +149,7 @@ FfxInt16x3 ffxMin(FfxInt16x3 x, FfxInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x4 ffxMin(FfxInt16x4 x, FfxInt16x4 y) { return min(x, y); @@ -162,7 +163,7 @@ FfxInt16x4 ffxMin(FfxInt16x4 x, FfxInt16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxMin(FfxUInt16 x, FfxUInt16 y) { return min(x, y); @@ -176,7 +177,7 @@ FfxUInt16 ffxMin(FfxUInt16 x, FfxUInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxMin(FfxUInt16x2 x, FfxUInt16x2 y) { return min(x, y); @@ -190,7 +191,7 @@ FfxUInt16x2 ffxMin(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxMin(FfxUInt16x3 x, FfxUInt16x3 y) { return min(x, y); @@ -204,7 +205,7 @@ FfxUInt16x3 ffxMin(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxMin(FfxUInt16x4 x, FfxUInt16x4 y) { return min(x, y); @@ -218,7 +219,7 @@ FfxUInt16x4 ffxMin(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxMax(FfxFloat16 x, FfxFloat16 y) { return max(x, y); @@ -232,7 +233,7 @@ FfxFloat16 ffxMax(FfxFloat16 x, FfxFloat16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxMax(FfxFloat16x2 x, FfxFloat16x2 y) { return max(x, y); @@ -246,7 +247,7 @@ FfxFloat16x2 ffxMax(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxMax(FfxFloat16x3 x, FfxFloat16x3 y) { return max(x, y); @@ -260,7 +261,7 @@ FfxFloat16x3 ffxMax(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxMax(FfxFloat16x4 x, FfxFloat16x4 y) { return max(x, y); @@ -274,7 +275,7 @@ FfxFloat16x4 ffxMax(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16 ffxMax(FfxInt16 x, FfxInt16 y) { return max(x, y); @@ -288,7 +289,7 @@ FfxInt16 ffxMax(FfxInt16 x, FfxInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x2 ffxMax(FfxInt16x2 x, FfxInt16x2 y) { return max(x, y); @@ -302,7 +303,7 @@ FfxInt16x2 ffxMax(FfxInt16x2 x, FfxInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x3 ffxMax(FfxInt16x3 x, FfxInt16x3 y) { return max(x, y); @@ -316,7 +317,7 @@ FfxInt16x3 ffxMax(FfxInt16x3 x, FfxInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxInt16x4 ffxMax(FfxInt16x4 x, FfxInt16x4 y) { return max(x, y); @@ -330,7 +331,7 @@ FfxInt16x4 ffxMax(FfxInt16x4 x, FfxInt16x4 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxMax(FfxUInt16 x, FfxUInt16 y) { return max(x, y); @@ -344,7 +345,7 @@ FfxUInt16 ffxMax(FfxUInt16 x, FfxUInt16 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxMax(FfxUInt16x2 x, FfxUInt16x2 y) { return max(x, y); @@ -358,7 +359,7 @@ FfxUInt16x2 ffxMax(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxMax(FfxUInt16x3 x, FfxUInt16x3 y) { return max(x, y); @@ -372,7 +373,7 @@ FfxUInt16x3 ffxMax(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// The the lowest of two values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxMax(FfxUInt16x4 x, FfxUInt16x4 y) { return max(x, y); @@ -386,7 +387,7 @@ FfxUInt16x4 ffxMax(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxPow(FfxFloat16 x, FfxFloat16 y) { return pow(x, y); @@ -400,7 +401,7 @@ FfxFloat16 ffxPow(FfxFloat16 x, FfxFloat16 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPow(FfxFloat16x2 x, FfxFloat16x2 y) { return pow(x, y); @@ -414,7 +415,7 @@ FfxFloat16x2 ffxPow(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxPow(FfxFloat16x3 x, FfxFloat16x3 y) { return pow(x, y); @@ -428,7 +429,7 @@ FfxFloat16x3 ffxPow(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// The value of the first parameter raised to the power of the second. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxPow(FfxFloat16x4 x, FfxFloat16x4 y) { return pow(x, y); @@ -441,7 +442,7 @@ FfxFloat16x4 ffxPow(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSqrt(FfxFloat16 x) { return sqrt(x); @@ -454,7 +455,7 @@ FfxFloat16 ffxSqrt(FfxFloat16 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSqrt(FfxFloat16x2 x) { return sqrt(x); @@ -467,7 +468,7 @@ FfxFloat16x2 ffxSqrt(FfxFloat16x2 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSqrt(FfxFloat16x3 x) { return sqrt(x); @@ -480,7 +481,7 @@ FfxFloat16x3 ffxSqrt(FfxFloat16x3 x) /// @returns /// The the square root of x. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxSqrt(FfxFloat16x4 x) { return sqrt(x); @@ -494,7 +495,7 @@ FfxFloat16x4 ffxSqrt(FfxFloat16x4 x) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxCopySignBitHalf(FfxFloat16 d, FfxFloat16 s) { return FFX_TO_FLOAT16(FFX_TO_UINT16(d) | (FFX_TO_UINT16(s) & FFX_BROADCAST_UINT16(0x8000u))); @@ -508,7 +509,7 @@ FfxFloat16 ffxCopySignBitHalf(FfxFloat16 d, FfxFloat16 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxCopySignBitHalf(FfxFloat16x2 d, FfxFloat16x2 s) { return FFX_TO_FLOAT16X2(FFX_TO_UINT16X2(d) | (FFX_TO_UINT16X2(s) & FFX_BROADCAST_UINT16X2(0x8000u))); @@ -522,7 +523,7 @@ FfxFloat16x2 ffxCopySignBitHalf(FfxFloat16x2 d, FfxFloat16x2 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxCopySignBitHalf(FfxFloat16x3 d, FfxFloat16x3 s) { return FFX_TO_FLOAT16X3(FFX_TO_UINT16X3(d) | (FFX_TO_UINT16X3(s) & FFX_BROADCAST_UINT16X3(0x8000u))); @@ -536,7 +537,7 @@ FfxFloat16x3 ffxCopySignBitHalf(FfxFloat16x3 d, FfxFloat16x3 s) /// @returns /// The value of d with the sign bit from s. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxCopySignBitHalf(FfxFloat16x4 d, FfxFloat16x4 s) { return FFX_TO_FLOAT16X4(FFX_TO_UINT16X4(d) | (FFX_TO_UINT16X4(s) & FFX_BROADCAST_UINT16X4(0x8000u))); @@ -559,10 +560,10 @@ FfxFloat16x4 ffxCopySignBitHalf(FfxFloat16x4 d, FfxFloat16x4 s) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxIsSignedHalf(FfxFloat16 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -582,10 +583,10 @@ FfxFloat16 ffxIsSignedHalf(FfxFloat16 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxIsSignedHalf(FfxFloat16x2 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -605,10 +606,10 @@ FfxFloat16x2 ffxIsSignedHalf(FfxFloat16x2 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxIsSignedHalf(FfxFloat16x3 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -628,10 +629,10 @@ FfxFloat16x3 ffxIsSignedHalf(FfxFloat16x3 m) /// @returns /// 1.0 when the value is negative, or 0.0 when the value is 0 or position. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxIsSignedHalf(FfxFloat16x4 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -646,10 +647,10 @@ FfxFloat16x4 ffxIsSignedHalf(FfxFloat16x4 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxIsGreaterThanZeroHalf(FfxFloat16 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -664,10 +665,10 @@ FfxFloat16 ffxIsGreaterThanZeroHalf(FfxFloat16 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxIsGreaterThanZeroHalf(FfxFloat16x2 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -682,10 +683,10 @@ FfxFloat16x2 ffxIsGreaterThanZeroHalf(FfxFloat16x2 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxIsGreaterThanZeroHalf(FfxFloat16x3 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF))); } /// A single operation to return the following: @@ -700,10 +701,10 @@ FfxFloat16x3 ffxIsGreaterThanZeroHalf(FfxFloat16x3 m) /// @returns /// 1.0 when the value is position, or 0.0 when the value is 0 or negative. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxIsGreaterThanZeroHalf(FfxFloat16x4 m) { - return ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF))); } /// Convert a 16bit floating point value to sortable integer. @@ -720,7 +721,7 @@ FfxFloat16x4 ffxIsGreaterThanZeroHalf(FfxFloat16x4 m) /// @returns /// The sortable integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxFloatToSortableIntegerHalf(FfxUInt16 x) { return x ^ ((ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16(15))) | FFX_BROADCAST_UINT16(0x8000)); @@ -737,7 +738,7 @@ FfxUInt16 ffxFloatToSortableIntegerHalf(FfxUInt16 x) /// @returns /// The floating point value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxSortableIntegerToFloatHalf(FfxUInt16 x) { return x ^ ((~ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16(15))) | FFX_BROADCAST_UINT16(0x8000)); @@ -757,7 +758,7 @@ FfxUInt16 ffxSortableIntegerToFloatHalf(FfxUInt16 x) /// @returns /// The sortable integer values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxFloatToSortableIntegerHalf(FfxUInt16x2 x) { return x ^ ((ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16X2(15))) | FFX_BROADCAST_UINT16X2(0x8000)); @@ -774,7 +775,7 @@ FfxUInt16x2 ffxFloatToSortableIntegerHalf(FfxUInt16x2 x) /// @returns /// The floating point values. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxSortableIntegerToFloatHalf(FfxUInt16x2 x) { return x ^ ((~ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16X2(15))) | FFX_BROADCAST_UINT16X2(0x8000)); @@ -790,7 +791,7 @@ FfxUInt16x2 ffxSortableIntegerToFloatHalf(FfxUInt16x2 x) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY0ZeroX0(FfxUInt32x2 i) { return ((i.x) & 0xffu) | ((i.y << 16) & 0xff0000u); @@ -806,7 +807,7 @@ FfxUInt32 ffxPackBytesZeroY0ZeroX0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY1ZeroX1(FfxUInt32x2 i) { return ((i.x >> 8) & 0xffu) | ((i.y << 8) & 0xff0000u); @@ -822,7 +823,7 @@ FfxUInt32 ffxPackBytesZeroY1ZeroX1(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY2ZeroX2(FfxUInt32x2 i) { return ((i.x >> 16) & 0xffu) | ((i.y) & 0xff0000u); @@ -838,7 +839,7 @@ FfxUInt32 ffxPackBytesZeroY2ZeroX2(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesZeroY3ZeroX3(FfxUInt32x2 i) { return ((i.x >> 24) & 0xffu) | ((i.y >> 8) & 0xff0000u); @@ -854,7 +855,7 @@ FfxUInt32 ffxPackBytesZeroY3ZeroX3(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2Y1X0(FfxUInt32x2 i) { return ((i.x) & 0x000000ffu) | (i.y & 0xffffff00u); @@ -870,7 +871,7 @@ FfxUInt32 ffxPackBytesY3Y2Y1X0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2Y1X2(FfxUInt32x2 i) { return ((i.x >> 16) & 0x000000ffu) | (i.y & 0xffffff00u); @@ -886,7 +887,7 @@ FfxUInt32 ffxPackBytesY3Y2Y1X2(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2X0Y0(FfxUInt32x2 i) { return ((i.x << 8) & 0x0000ff00u) | (i.y & 0xffff00ffu); @@ -902,7 +903,7 @@ FfxUInt32 ffxPackBytesY3Y2X0Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3Y2X2Y0(FfxUInt32x2 i) { return ((i.x >> 8) & 0x0000ff00u) | (i.y & 0xffff00ffu); @@ -918,7 +919,7 @@ FfxUInt32 ffxPackBytesY3Y2X2Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3X0Y1Y0(FfxUInt32x2 i) { return ((i.x << 16) & 0x00ff0000u) | (i.y & 0xff00ffffu); @@ -934,7 +935,7 @@ FfxUInt32 ffxPackBytesY3X0Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY3X2Y1Y0(FfxUInt32x2 i) { return ((i.x) & 0x00ff0000u) | (i.y & 0xff00ffffu); @@ -950,7 +951,7 @@ FfxUInt32 ffxPackBytesY3X2Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesX0Y2Y1Y0(FfxUInt32x2 i) { return ((i.x << 24) & 0xff000000u) | (i.y & 0x00ffffffu); @@ -966,7 +967,7 @@ FfxUInt32 ffxPackBytesX0Y2Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesX2Y2Y1Y0(FfxUInt32x2 i) { return ((i.x << 8) & 0xff000000u) | (i.y & 0x00ffffffu); @@ -982,7 +983,7 @@ FfxUInt32 ffxPackBytesX2Y2Y1Y0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY2X2Y0X0(FfxUInt32x2 i) { return ((i.x) & 0x00ff00ffu) | ((i.y << 8) & 0xff00ff00u); @@ -998,7 +999,7 @@ FfxUInt32 ffxPackBytesY2X2Y0X0(FfxUInt32x2 i) /// @returns /// The packed integer value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32 ffxPackBytesY2Y0X2X0(FfxUInt32x2 i) { return (((i.x) & 0xffu) | ((i.x >> 8) & 0xff00u) | ((i.y << 16) & 0xff0000u) | ((i.y << 8) & 0xff000000u)); @@ -1012,7 +1013,7 @@ FfxUInt32 ffxPackBytesY2Y0X2X0(FfxUInt32x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxPackX0Y0X1Y1UnsignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) { x *= FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0); @@ -1037,7 +1038,7 @@ FfxUInt16x2 ffxPackX0Y0X1Y1UnsignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1061,7 +1062,7 @@ FfxUInt32x2 ffxPermuteUByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1085,7 +1086,7 @@ FfxUInt32x2 ffxPermuteUByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1109,7 +1110,7 @@ FfxUInt32x2 ffxPermuteUByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteUByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); @@ -1123,7 +1124,7 @@ FfxUInt32x2 ffxPermuteUByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte0Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1136,7 +1137,7 @@ FfxFloat16x2 ffxPermuteUByte0Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte1Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1149,7 +1150,7 @@ FfxFloat16x2 ffxPermuteUByte1Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte2Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1162,7 +1163,7 @@ FfxFloat16x2 ffxPermuteUByte2Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteUByte3Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); @@ -1176,7 +1177,7 @@ FfxFloat16x2 ffxPermuteUByte3Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxPackX0Y0X1Y1SignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) { x = x * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0); @@ -1195,7 +1196,7 @@ FfxUInt16x2 ffxPackX0Y0X1Y1SignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1213,7 +1214,7 @@ FfxUInt32x2 ffxPermuteSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1231,7 +1232,7 @@ FfxUInt32x2 ffxPermuteSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1249,7 +1250,7 @@ FfxUInt32x2 ffxPermuteSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); @@ -1270,7 +1271,7 @@ FfxUInt32x2 ffxPermuteSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1291,7 +1292,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1312,7 +1313,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1333,7 +1334,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The packed FfxUInt32x2 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt32x2 ffxPermuteZeroBasedSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) { FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; @@ -1349,7 +1350,7 @@ FfxUInt32x2 ffxPermuteZeroBasedSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte0Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1364,7 +1365,7 @@ FfxFloat16x2 ffxPermuteSByte0Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte1Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1379,7 +1380,7 @@ FfxFloat16x2 ffxPermuteSByte1Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte2Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1394,7 +1395,7 @@ FfxFloat16x2 ffxPermuteSByte2Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteSByte3Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1409,7 +1410,7 @@ FfxFloat16x2 ffxPermuteSByte3Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte0Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1424,7 +1425,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte0Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte1Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1439,7 +1440,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte1Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte2Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1454,7 +1455,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte2Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// The unpacked FfxFloat16x2. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxPermuteZeroBasedSByte3Uint2ToFloat16x2(FfxUInt32x2 i) { return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); @@ -1473,7 +1474,7 @@ FfxFloat16x2 ffxPermuteZeroBasedSByte3Uint2ToFloat16x2(FfxUInt32x2 i) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateSqrtHalf(FfxFloat16 a) { return FFX_TO_FLOAT16((FFX_TO_UINT16(a) >> FFX_BROADCAST_UINT16(1)) + FFX_BROADCAST_UINT16(0x1de2)); @@ -1492,7 +1493,7 @@ FfxFloat16 ffxApproximateSqrtHalf(FfxFloat16 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateSqrtHalf(FfxFloat16x2 a) { return FFX_TO_FLOAT16X2((FFX_TO_UINT16X2(a) >> FFX_BROADCAST_UINT16X2(1)) + FFX_BROADCAST_UINT16X2(0x1de2)); @@ -1511,7 +1512,7 @@ FfxFloat16x2 ffxApproximateSqrtHalf(FfxFloat16x2 a) /// @returns /// An approximation of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateSqrtHalf(FfxFloat16x3 a) { return FFX_TO_FLOAT16X3((FFX_TO_UINT16X3(a) >> FFX_BROADCAST_UINT16X3(1)) + FFX_BROADCAST_UINT16X3(0x1de2)); @@ -1530,7 +1531,7 @@ FfxFloat16x3 ffxApproximateSqrtHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateReciprocalHalf(FfxFloat16 a) { return FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x7784) - FFX_TO_UINT16(a)); @@ -1549,7 +1550,7 @@ FfxFloat16 ffxApproximateReciprocalHalf(FfxFloat16 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateReciprocalHalf(FfxFloat16x2 a) { return FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x7784) - FFX_TO_UINT16X2(a)); @@ -1568,7 +1569,7 @@ FfxFloat16x2 ffxApproximateReciprocalHalf(FfxFloat16x2 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateReciprocalHalf(FfxFloat16x3 a) { return FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x7784) - FFX_TO_UINT16X3(a)); @@ -1587,7 +1588,7 @@ FfxFloat16x3 ffxApproximateReciprocalHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxApproximateReciprocalHalf(FfxFloat16x4 a) { return FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x7784) - FFX_TO_UINT16X4(a)); @@ -1606,7 +1607,7 @@ FfxFloat16x4 ffxApproximateReciprocalHalf(FfxFloat16x4 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateReciprocalMediumHalf(FfxFloat16 a) { FfxFloat16 b = FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x778d) - FFX_TO_UINT16(a)); @@ -1626,7 +1627,7 @@ FfxFloat16 ffxApproximateReciprocalMediumHalf(FfxFloat16 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateReciprocalMediumHalf(FfxFloat16x2 a) { FfxFloat16x2 b = FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x778d) - FFX_TO_UINT16X2(a)); @@ -1646,7 +1647,7 @@ FfxFloat16x2 ffxApproximateReciprocalMediumHalf(FfxFloat16x2 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateReciprocalMediumHalf(FfxFloat16x3 a) { FfxFloat16x3 b = FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x778d) - FFX_TO_UINT16X3(a)); @@ -1666,7 +1667,7 @@ FfxFloat16x3 ffxApproximateReciprocalMediumHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal, estimated to medium quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxApproximateReciprocalMediumHalf(FfxFloat16x4 a) { FfxFloat16x4 b = FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x778d) - FFX_TO_UINT16X4(a)); @@ -1686,7 +1687,7 @@ FfxFloat16x4 ffxApproximateReciprocalMediumHalf(FfxFloat16x4 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxApproximateReciprocalSquareRootHalf(FfxFloat16 a) { return FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x59a3) - (FFX_TO_UINT16(a) >> FFX_BROADCAST_UINT16(1))); @@ -1705,7 +1706,7 @@ FfxFloat16 ffxApproximateReciprocalSquareRootHalf(FfxFloat16 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x2 a) { return FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x59a3) - (FFX_TO_UINT16X2(a) >> FFX_BROADCAST_UINT16X2(1))); @@ -1724,7 +1725,7 @@ FfxFloat16x2 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x2 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x3 a) { return FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x59a3) - (FFX_TO_UINT16X3(a) >> FFX_BROADCAST_UINT16X3(1))); @@ -1743,7 +1744,7 @@ FfxFloat16x3 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x3 a) /// @returns /// An approximation of the reciprocal of the square root, estimated to low quality. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x4 a) { return FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x59a3) - (FFX_TO_UINT16X4(a) >> FFX_BROADCAST_UINT16X4(1))); @@ -1833,7 +1834,7 @@ FfxFloat16x2 ffxParabolicSinCosHalf(FfxFloat16 x) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneAndHalf(FfxUInt16 x, FfxUInt16 y) { return min(x, y); @@ -1847,7 +1848,7 @@ FfxUInt16 ffxZeroOneAndHalf(FfxUInt16 x, FfxUInt16 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneAndHalf(FfxUInt16x2 x, FfxUInt16x2 y) { return min(x, y); @@ -1861,7 +1862,7 @@ FfxUInt16x2 ffxZeroOneAndHalf(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneAndHalf(FfxUInt16x3 x, FfxUInt16x3 y) { return min(x, y); @@ -1875,7 +1876,7 @@ FfxUInt16x3 ffxZeroOneAndHalf(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneAndHalf(FfxUInt16x4 x, FfxUInt16x4 y) { return min(x, y); @@ -1889,7 +1890,7 @@ FfxUInt16x4 ffxZeroOneAndHalf(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneNotHalf(FfxUInt16 x) { return x ^ FFX_BROADCAST_UINT16(1); @@ -1903,7 +1904,7 @@ FfxUInt16 ffxZeroOneNotHalf(FfxUInt16 x) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneNotHalf(FfxUInt16x2 x) { return x ^ FFX_BROADCAST_UINT16X2(1); @@ -1917,7 +1918,7 @@ FfxUInt16x2 ffxZeroOneNotHalf(FfxUInt16x2 x) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneNotHalf(FfxUInt16x3 x) { return x ^ FFX_BROADCAST_UINT16X3(1); @@ -1931,7 +1932,7 @@ FfxUInt16x3 ffxZeroOneNotHalf(FfxUInt16x3 x) /// @returns /// Result of the NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneNotHalf(FfxUInt16x4 x) { return x ^ FFX_BROADCAST_UINT16X4(1); @@ -1945,7 +1946,7 @@ FfxUInt16x4 ffxZeroOneNotHalf(FfxUInt16x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneOrHalf(FfxUInt16 x, FfxUInt16 y) { return max(x, y); @@ -1959,7 +1960,7 @@ FfxUInt16 ffxZeroOneOrHalf(FfxUInt16 x, FfxUInt16 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneOrHalf(FfxUInt16x2 x, FfxUInt16x2 y) { return max(x, y); @@ -1973,7 +1974,7 @@ FfxUInt16x2 ffxZeroOneOrHalf(FfxUInt16x2 x, FfxUInt16x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneOrHalf(FfxUInt16x3 x, FfxUInt16x3 y) { return max(x, y); @@ -1987,7 +1988,7 @@ FfxUInt16x3 ffxZeroOneOrHalf(FfxUInt16x3 x, FfxUInt16x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneOrHalf(FfxUInt16x4 x, FfxUInt16x4 y) { return max(x, y); @@ -2000,7 +2001,7 @@ FfxUInt16x4 ffxZeroOneOrHalf(FfxUInt16x4 x, FfxUInt16x4 y) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16 ffxZeroOneFloat16ToUint16(FfxFloat16 x) { return FFX_TO_UINT16(x * FFX_TO_FLOAT16(FFX_TO_UINT16(1))); @@ -2013,7 +2014,7 @@ FfxUInt16 ffxZeroOneFloat16ToUint16(FfxFloat16 x) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxZeroOneFloat16x2ToUint16x2(FfxFloat16x2 x) { return FFX_TO_UINT16X2(x * FFX_TO_FLOAT16X2(FfxUInt16x2(1, 1))); @@ -2026,7 +2027,7 @@ FfxUInt16x2 ffxZeroOneFloat16x2ToUint16x2(FfxFloat16x2 x) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x3 ffxZeroOneFloat16x3ToUint16x3(FfxFloat16x3 x) { return FFX_TO_UINT16X3(x * FFX_TO_FLOAT16X3(FfxUInt16x3(1, 1, 1))); @@ -2039,7 +2040,7 @@ FfxUInt16x3 ffxZeroOneFloat16x3ToUint16x3(FfxFloat16x3 x) /// @returns /// The converted Uint value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x4 ffxZeroOneFloat16x4ToUint16x4(FfxFloat16x4 x) { return FFX_TO_UINT16X4(x * FFX_TO_FLOAT16X4(FfxUInt16x4(1, 1, 1, 1))); @@ -2052,7 +2053,7 @@ FfxUInt16x4 ffxZeroOneFloat16x4ToUint16x4(FfxFloat16x4 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneUint16ToFloat16(FfxUInt16 x) { return FFX_TO_FLOAT16(x * FFX_TO_UINT16(FFX_TO_FLOAT16(1.0))); @@ -2065,7 +2066,7 @@ FfxFloat16 ffxZeroOneUint16ToFloat16(FfxUInt16 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneUint16x2ToFloat16x2(FfxUInt16x2 x) { return FFX_TO_FLOAT16X2(x * FFX_TO_UINT16X2(FfxUInt16x2(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); @@ -2078,7 +2079,7 @@ FfxFloat16x2 ffxZeroOneUint16x2ToFloat16x2(FfxUInt16x2 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneUint16x3ToFloat16x3(FfxUInt16x3 x) { return FFX_TO_FLOAT16X3(x * FFX_TO_UINT16X3(FfxUInt16x3(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); @@ -2091,7 +2092,7 @@ FfxFloat16x3 ffxZeroOneUint16x3ToFloat16x3(FfxUInt16x3 x) /// @returns /// The converted half-precision FfxFloat32 value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneUint16x4ToFloat16x4(FfxUInt16x4 x) { return FFX_TO_FLOAT16X4(x * FFX_TO_UINT16X4(FfxUInt16x4(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); @@ -2105,7 +2106,7 @@ FfxFloat16x4 ffxZeroOneUint16x4ToFloat16x4(FfxUInt16x4 x) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneAndHalf(FfxFloat16 x, FfxFloat16 y) { return min(x, y); @@ -2119,7 +2120,7 @@ FfxFloat16 ffxZeroOneAndHalf(FfxFloat16 x, FfxFloat16 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneAndHalf(FfxFloat16x2 x, FfxFloat16x2 y) { return min(x, y); @@ -2133,7 +2134,7 @@ FfxFloat16x2 ffxZeroOneAndHalf(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneAndHalf(FfxFloat16x3 x, FfxFloat16x3 y) { return min(x, y); @@ -2147,7 +2148,7 @@ FfxFloat16x3 ffxZeroOneAndHalf(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// Result of the AND operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneAndHalf(FfxFloat16x4 x, FfxFloat16x4 y) { return min(x, y); @@ -2161,7 +2162,7 @@ FfxFloat16x4 ffxZeroOneAndHalf(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSignedZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y) { return (-x) * y + FFX_BROADCAST_FLOAT16(1.0); @@ -2175,7 +2176,7 @@ FfxFloat16 ffxSignedZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSignedZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) { return (-x) * y + FFX_BROADCAST_FLOAT16X2(1.0); @@ -2189,7 +2190,7 @@ FfxFloat16x2 ffxSignedZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSignedZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) { return (-x) * y + FFX_BROADCAST_FLOAT16X3(1.0); @@ -2203,7 +2204,7 @@ FfxFloat16x3 ffxSignedZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// Result of the AND NOT operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxSignedZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) { return (-x) * y + FFX_BROADCAST_FLOAT16X4(1.0); @@ -2219,10 +2220,10 @@ FfxFloat16x4 ffxSignedZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) { - return ffxSaturate(x * y + z); + return FfxFloat16(ffxSaturate(x * y + z)); } /// Conditional free logic AND operation using two half-precision values followed by @@ -2235,10 +2236,10 @@ FfxFloat16 ffxZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) { - return ffxSaturate(x * y + z); + return FfxFloat16x2(ffxSaturate(x * y + z)); } /// Conditional free logic AND operation using two half-precision values followed by @@ -2251,10 +2252,10 @@ FfxFloat16x2 ffxZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) { - return ffxSaturate(x * y + z); + return FfxFloat16x3(ffxSaturate(x * y + z)); } /// Conditional free logic AND operation using two half-precision values followed by @@ -2267,10 +2268,10 @@ FfxFloat16x3 ffxZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) { - return ffxSaturate(x * y + z); + return FfxFloat16x4(ffxSaturate(x * y + z)); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2280,10 +2281,10 @@ FfxFloat16x4 ffxZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2293,10 +2294,10 @@ FfxFloat16 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x2 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2306,10 +2307,10 @@ FfxFloat16x2 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x2 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x3 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. @@ -2319,10 +2320,10 @@ FfxFloat16x3 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x3 x) /// @returns /// Result of the greater than zero comparison. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x4 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF))); } /// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. @@ -2332,7 +2333,7 @@ FfxFloat16x4 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x4 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneNotHalf(FfxFloat16 x) { return FFX_BROADCAST_FLOAT16(1.0) - x; @@ -2345,7 +2346,7 @@ FfxFloat16 ffxZeroOneNotHalf(FfxFloat16 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneNotHalf(FfxFloat16x2 x) { return FFX_BROADCAST_FLOAT16X2(1.0) - x; @@ -2358,7 +2359,7 @@ FfxFloat16x2 ffxZeroOneNotHalf(FfxFloat16x2 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneNotHalf(FfxFloat16x3 x) { return FFX_BROADCAST_FLOAT16X3(1.0) - x; @@ -2371,7 +2372,7 @@ FfxFloat16x3 ffxZeroOneNotHalf(FfxFloat16x3 x) /// @returns /// Result of the AND OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneNotHalf(FfxFloat16x4 x) { return FFX_BROADCAST_FLOAT16X4(1.0) - x; @@ -2385,7 +2386,7 @@ FfxFloat16x4 ffxZeroOneNotHalf(FfxFloat16x4 x) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneOrHalf(FfxFloat16 x, FfxFloat16 y) { return max(x, y); @@ -2399,7 +2400,7 @@ FfxFloat16 ffxZeroOneOrHalf(FfxFloat16 x, FfxFloat16 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) { return max(x, y); @@ -2413,7 +2414,7 @@ FfxFloat16x2 ffxZeroOneOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) { return max(x, y); @@ -2427,7 +2428,7 @@ FfxFloat16x3 ffxZeroOneOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) /// @returns /// Result of the OR operation. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) { return max(x, y); @@ -2442,7 +2443,7 @@ FfxFloat16x4 ffxZeroOneOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneSelectHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) { FfxFloat16 r = (-x) * z + z; @@ -2458,7 +2459,7 @@ FfxFloat16 ffxZeroOneSelectHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneSelectHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) { FfxFloat16x2 r = (-x) * z + z; @@ -2474,7 +2475,7 @@ FfxFloat16x2 ffxZeroOneSelectHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneSelectHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) { FfxFloat16x3 r = (-x) * z + z; @@ -2490,7 +2491,7 @@ FfxFloat16x3 ffxZeroOneSelectHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z /// @returns /// The selected value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneSelectHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) { FfxFloat16x4 r = (-x) * z + z; @@ -2504,10 +2505,10 @@ FfxFloat16x4 ffxZeroOneSelectHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxZeroOneIsSignedHalf(FfxFloat16 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16(ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. @@ -2517,10 +2518,10 @@ FfxFloat16 ffxZeroOneIsSignedHalf(FfxFloat16 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxZeroOneIsSignedHalf(FfxFloat16x2 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x2(ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. @@ -2530,10 +2531,10 @@ FfxFloat16x2 ffxZeroOneIsSignedHalf(FfxFloat16x2 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxZeroOneIsSignedHalf(FfxFloat16x3 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x3(ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF))); } /// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. @@ -2543,10 +2544,10 @@ FfxFloat16x3 ffxZeroOneIsSignedHalf(FfxFloat16x3 x) /// @returns /// Result of the sign value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x4 ffxZeroOneIsSignedHalf(FfxFloat16x4 x) { - return ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF)); + return FfxFloat16x4(ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF))); } /// Compute a Rec.709 color space. @@ -2562,7 +2563,7 @@ FfxFloat16x4 ffxZeroOneIsSignedHalf(FfxFloat16x4 x) /// @returns /// The color in Rec.709 space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxRec709FromLinearHalf(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); @@ -2583,7 +2584,7 @@ FfxFloat16 ffxRec709FromLinearHalf(FfxFloat16 c) /// @returns /// The color in Rec.709 space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxRec709FromLinearHalf(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); @@ -2604,7 +2605,7 @@ FfxFloat16x2 ffxRec709FromLinearHalf(FfxFloat16x2 c) /// @returns /// The color in Rec.709 space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxRec709FromLinearHalf(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); @@ -2624,7 +2625,7 @@ FfxFloat16x3 ffxRec709FromLinearHalf(FfxFloat16x3 c) /// @returns /// A value in gamma space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxGammaFromLinearHalf(FfxFloat16 c, FfxFloat16 rcpX) { return pow(c, FFX_BROADCAST_FLOAT16(rcpX)); @@ -2642,7 +2643,7 @@ FfxFloat16 ffxGammaFromLinearHalf(FfxFloat16 c, FfxFloat16 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxGammaFromLinearHalf(FfxFloat16x2 c, FfxFloat16 rcpX) { return pow(c, FFX_BROADCAST_FLOAT16X2(rcpX)); @@ -2660,7 +2661,7 @@ FfxFloat16x2 ffxGammaFromLinearHalf(FfxFloat16x2 c, FfxFloat16 rcpX) /// @returns /// A value in gamma space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxGammaFromLinearHalf(FfxFloat16x3 c, FfxFloat16 rcpX) { return pow(c, FFX_BROADCAST_FLOAT16X3(rcpX)); @@ -2673,7 +2674,7 @@ FfxFloat16x3 ffxGammaFromLinearHalf(FfxFloat16x3 c, FfxFloat16 rcpX) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSrgbFromLinearHalf(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); @@ -2688,7 +2689,7 @@ FfxFloat16 ffxSrgbFromLinearHalf(FfxFloat16 c) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSrgbFromLinearHalf(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); @@ -2703,7 +2704,7 @@ FfxFloat16x2 ffxSrgbFromLinearHalf(FfxFloat16x2 c) /// @returns /// A value in SRGB space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSrgbFromLinearHalf(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); @@ -2718,7 +2719,7 @@ FfxFloat16x3 ffxSrgbFromLinearHalf(FfxFloat16x3 c) /// @returns /// A square root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxSquareRootHalf(FfxFloat16 c) { return sqrt(c); @@ -2731,7 +2732,7 @@ FfxFloat16 ffxSquareRootHalf(FfxFloat16 c) /// @returns /// A square root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxSquareRootHalf(FfxFloat16x2 c) { return sqrt(c); @@ -2744,7 +2745,7 @@ FfxFloat16x2 ffxSquareRootHalf(FfxFloat16x2 c) /// @returns /// A square root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxSquareRootHalf(FfxFloat16x3 c) { return sqrt(c); @@ -2757,7 +2758,7 @@ FfxFloat16x3 ffxSquareRootHalf(FfxFloat16x3 c) /// @returns /// A cube root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxCubeRootHalf(FfxFloat16 c) { return pow(c, FFX_BROADCAST_FLOAT16(1.0 / 3.0)); @@ -2770,7 +2771,7 @@ FfxFloat16 ffxCubeRootHalf(FfxFloat16 c) /// @returns /// A cube root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxCubeRootHalf(FfxFloat16x2 c) { return pow(c, FFX_BROADCAST_FLOAT16X2(1.0 / 3.0)); @@ -2783,7 +2784,7 @@ FfxFloat16x2 ffxCubeRootHalf(FfxFloat16x2 c) /// @returns /// A cube root of the input value. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxCubeRootHalf(FfxFloat16x3 c) { return pow(c, FFX_BROADCAST_FLOAT16X3(1.0 / 3.0)); @@ -2796,7 +2797,7 @@ FfxFloat16x3 ffxCubeRootHalf(FfxFloat16x3 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxLinearFromRec709Half(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2811,7 +2812,7 @@ FfxFloat16 ffxLinearFromRec709Half(FfxFloat16 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxLinearFromRec709Half(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2826,7 +2827,7 @@ FfxFloat16x2 ffxLinearFromRec709Half(FfxFloat16x2 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxLinearFromRec709Half(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); @@ -2844,7 +2845,7 @@ FfxFloat16x3 ffxLinearFromRec709Half(FfxFloat16x3 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxLinearFromGammaHalf(FfxFloat16 c, FfxFloat16 x) { return pow(c, FFX_BROADCAST_FLOAT16(x)); @@ -2860,7 +2861,7 @@ FfxFloat16 ffxLinearFromGammaHalf(FfxFloat16 c, FfxFloat16 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxLinearFromGammaHalf(FfxFloat16x2 c, FfxFloat16 x) { return pow(c, FFX_BROADCAST_FLOAT16X2(x)); @@ -2876,7 +2877,7 @@ FfxFloat16x2 ffxLinearFromGammaHalf(FfxFloat16x2 c, FfxFloat16 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxLinearFromGammaHalf(FfxFloat16x3 c, FfxFloat16 x) { return pow(c, FFX_BROADCAST_FLOAT16X3(x)); @@ -2891,7 +2892,7 @@ FfxFloat16x3 ffxLinearFromGammaHalf(FfxFloat16x3 c, FfxFloat16 x) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16 ffxLinearFromSrgbHalf(FfxFloat16 c) { FfxFloat16x3 j = FfxFloat16x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); @@ -2908,7 +2909,7 @@ FfxFloat16 ffxLinearFromSrgbHalf(FfxFloat16 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x2 ffxLinearFromSrgbHalf(FfxFloat16x2 c) { FfxFloat16x3 j = FfxFloat16x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); @@ -2925,7 +2926,7 @@ FfxFloat16x2 ffxLinearFromSrgbHalf(FfxFloat16x2 c) /// @returns /// A value in linear space. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxFloat16x3 ffxLinearFromSrgbHalf(FfxFloat16x3 c) { FfxFloat16x3 j = FfxFloat16x3(0.04045 / 12.92, 1.0 / 12.92, 2.4); @@ -2945,7 +2946,7 @@ FfxFloat16x3 ffxLinearFromSrgbHalf(FfxFloat16x3 c) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxRemapForQuadHalf(FfxUInt32 a) { return FfxUInt16x2(bitfieldExtract(a, 1u, 3u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), a, 1u)); @@ -2969,7 +2970,7 @@ FfxUInt16x2 ffxRemapForQuadHalf(FfxUInt32 a) /// @returns /// The remapped 2D coordinates. /// -/// @ingroup GPU +/// @ingroup GPUCore FfxUInt16x2 ffxRemapForWaveReductionHalf(FfxUInt32 a) { return FfxUInt16x2(bitfieldInsertMask(bitfieldExtract(a, 2u, 3u), a, 1u), bitfieldInsertMask(bitfieldExtract(a, 3u, 3u), bitfieldExtract(a, 1u, 2u), 2u)); diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta new file mode 100644 index 0000000..e78eec4 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_gpu_common_half.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 1bdb323791a91a5438ee8e1e63187840 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_core_hlsl.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h similarity index 86% rename from Assets/Resources/FSR2/shaders/ffx_core_hlsl.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h index ad4ff65..337eb06 100644 --- a/Assets/Resources/FSR2/shaders/ffx_core_hlsl.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,188 +19,221 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + +/// @defgroup HLSLCore HLSL Core +/// HLSL core defines and functions +/// +/// @ingroup FfxHLSL + +#define DECLARE_SRV_REGISTER(regIndex) t##regIndex +#define DECLARE_UAV_REGISTER(regIndex) u##regIndex +#define DECLARE_CB_REGISTER(regIndex) b##regIndex +#define FFX_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) +#define FFX_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) +#define FFX_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) + /// A define for abstracting shared memory between shading languages. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GROUPSHARED groupshared /// A define for abstracting compute memory barriers between shading languages. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GROUP_MEMORY_BARRIER GroupMemoryBarrierWithGroupSync +/// A define for abstracting compute atomic additions between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_ATOMIC_ADD(x, y) InterlockedAdd(x, y) + /// A define added to accept static markup on functions to aid CPU/GPU portability of code. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_STATIC static /// A define for abstracting loop unrolling between shading languages. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_UNROLL [unroll] /// A define for abstracting a 'greater than' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GREATER_THAN(x, y) x > y /// A define for abstracting a 'greater than or equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_GREATER_THAN_EQUAL(x, y) x >= y /// A define for abstracting a 'less than' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_LESS_THAN(x, y) x < y /// A define for abstracting a 'less than or equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_LESS_THAN_EQUAL(x, y) x <= y /// A define for abstracting an 'equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_EQUAL(x, y) x == y /// A define for abstracting a 'not equal' comparison operator between two types. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_NOT_EQUAL(x, y) x != y +/// A define for abstracting matrix multiply operations between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_MATRIX_MULTIPLY(a, b) mul(a, b) + +/// A define for abstracting vector transformations between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_TRANSFORM_VECTOR(a, b) mul(a, b) + +/// A define for abstracting modulo operations between shading languages. +/// +/// @ingroup HLSLCore +#define FFX_MODULO(a, b) (fmod(a, b)) + /// Broadcast a scalar value to a 1-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32(x) FfxFloat32(x) /// Broadcast a scalar value to a 2-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32X2(x) FfxFloat32(x) /// Broadcast a scalar value to a 3-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32X3(x) FfxFloat32(x) /// Broadcast a scalar value to a 4-dimensional floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_FLOAT32X4(x) FfxFloat32(x) /// Broadcast a scalar value to a 1-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32(x) FfxUInt32(x) /// Broadcast a scalar value to a 2-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32X2(x) FfxUInt32(x) /// Broadcast a scalar value to a 4-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32X3(x) FfxUInt32(x) /// Broadcast a scalar value to a 4-dimensional unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_UINT32X4(x) FfxUInt32(x) /// Broadcast a scalar value to a 1-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32(x) FfxInt32(x) /// Broadcast a scalar value to a 2-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32X2(x) FfxInt32(x) /// Broadcast a scalar value to a 3-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32X3(x) FfxInt32(x) /// Broadcast a scalar value to a 4-dimensional signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_INT32X4(x) FfxInt32(x) /// Broadcast a scalar value to a 1-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 2-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16X2(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 3-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16X3(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 4-dimensional half-precision floating point vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_FLOAT16X4(a) FFX_MIN16_F(a) /// Broadcast a scalar value to a 1-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 2-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16X2(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 3-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16X3(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 4-dimensional half-precision unsigned integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_UINT16X4(a) FFX_MIN16_U(a) /// Broadcast a scalar value to a 1-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16(a) FFX_MIN16_I(a) /// Broadcast a scalar value to a 2-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16X2(a) FFX_MIN16_I(a) /// Broadcast a scalar value to a 3-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16X3(a) FFX_MIN16_I(a) /// Broadcast a scalar value to a 4-dimensional half-precision signed integer vector. /// -/// @ingroup GPU +/// @ingroup HLSLCore #define FFX_BROADCAST_MIN_INT16X4(a) FFX_MIN16_I(a) /// Pack 2x32-bit floating point values in a single 32bit value. -/// +/// /// This function first converts each component of value into their nearest 16-bit floating /// point representation, and then stores the X and Y components in the lower and upper 16 bits of the /// 32bit unsigned integer respectively. /// /// @param [in] value A 2-dimensional floating point value to convert and pack. -/// +/// /// @returns /// A packed 32bit value containing 2 16bit floating point values. -/// -/// @ingroup HLSL +/// +/// @ingroup HLSLCore FfxUInt32 packHalf2x16(FfxFloat32x2 value) { return f32tof16(value.x) | (f32tof16(value.y) << 16); @@ -213,7 +246,7 @@ FfxUInt32 packHalf2x16(FfxFloat32x2 value) /// @returns /// A 2-dimensional floating point vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxBroadcast2(FfxFloat32 value) { return FfxFloat32x2(value, value); @@ -226,7 +259,7 @@ FfxFloat32x2 ffxBroadcast2(FfxFloat32 value) /// @returns /// A 3-dimensional floating point vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxBroadcast3(FfxFloat32 value) { return FfxFloat32x3(value, value, value); @@ -239,7 +272,7 @@ FfxFloat32x3 ffxBroadcast3(FfxFloat32 value) /// @returns /// A 4-dimensional floating point vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxBroadcast4(FfxFloat32 value) { return FfxFloat32x4(value, value, value, value); @@ -252,7 +285,7 @@ FfxFloat32x4 ffxBroadcast4(FfxFloat32 value) /// @returns /// A 2-dimensional signed integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxInt32x2 ffxBroadcast2(FfxInt32 value) { return FfxInt32x2(value, value); @@ -265,7 +298,7 @@ FfxInt32x2 ffxBroadcast2(FfxInt32 value) /// @returns /// A 3-dimensional signed integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxBroadcast3(FfxInt32 value) { return FfxUInt32x3(value, value, value); @@ -278,7 +311,7 @@ FfxUInt32x3 ffxBroadcast3(FfxInt32 value) /// @returns /// A 4-dimensional signed integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxInt32x4 ffxBroadcast4(FfxInt32 value) { return FfxInt32x4(value, value, value, value); @@ -291,7 +324,7 @@ FfxInt32x4 ffxBroadcast4(FfxInt32 value) /// @returns /// A 2-dimensional unsigned integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxBroadcast2(FfxUInt32 value) { return FfxUInt32x2(value, value); @@ -304,7 +337,7 @@ FfxUInt32x2 ffxBroadcast2(FfxUInt32 value) /// @returns /// A 3-dimensional unsigned integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxBroadcast3(FfxUInt32 value) { return FfxUInt32x3(value, value, value); @@ -317,7 +350,7 @@ FfxUInt32x3 ffxBroadcast3(FfxUInt32 value) /// @returns /// A 4-dimensional unsigned integer vector with value in each component. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxBroadcast4(FfxUInt32 value) { return FfxUInt32x4(value, value, value, value); @@ -342,12 +375,12 @@ FfxUInt32 bitfieldInsertMask(FfxUInt32 src, FfxUInt32 ins, FfxUInt32 bits) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32 ffxAsUInt32(FfxFloat32 x) { return asuint(x); @@ -355,12 +388,12 @@ FfxUInt32 ffxAsUInt32(FfxFloat32 x) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxAsUInt32(FfxFloat32x2 x) { return asuint(x); @@ -368,12 +401,12 @@ FfxUInt32x2 ffxAsUInt32(FfxFloat32x2 x) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxAsUInt32(FfxFloat32x3 x) { return asuint(x); @@ -381,12 +414,12 @@ FfxUInt32x3 ffxAsUInt32(FfxFloat32x3 x) /// Interprets the bit pattern of x as an unsigned integer. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as an unsigned integer. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxAsUInt32(FfxFloat32x4 x) { return asuint(x); @@ -394,12 +427,12 @@ FfxUInt32x4 ffxAsUInt32(FfxFloat32x4 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxAsFloat(FfxUInt32 x) { return asfloat(x); @@ -407,12 +440,12 @@ FfxFloat32 ffxAsFloat(FfxUInt32 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxAsFloat(FfxUInt32x2 x) { return asfloat(x); @@ -420,12 +453,12 @@ FfxFloat32x2 ffxAsFloat(FfxUInt32x2 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxAsFloat(FfxUInt32x3 x) { return asfloat(x); @@ -433,12 +466,12 @@ FfxFloat32x3 ffxAsFloat(FfxUInt32x3 x) /// Interprets the bit pattern of x as a floating-point number. /// -/// @param [in] value The input value. +/// @param [in] x The input value. /// /// @returns /// The input interpreted as a floating-point number. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxAsFloat(FfxUInt32x4 x) { return asfloat(x); @@ -458,7 +491,7 @@ FfxFloat32x4 ffxAsFloat(FfxUInt32x4 x) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) { return lerp(x, y, t); @@ -478,7 +511,7 @@ FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32 t) { return lerp(x, y, t); @@ -498,7 +531,7 @@ FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 t) { return lerp(x, y, t); @@ -518,7 +551,7 @@ FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32 t) { return lerp(x, y, t); @@ -538,7 +571,7 @@ FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 t) { return lerp(x, y, t); @@ -558,7 +591,7 @@ FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32 t) { return lerp(x, y, t); @@ -578,7 +611,7 @@ FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32 t) /// @returns /// A linearly interpolated value between x and y according to t. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 t) { return lerp(x, y, t); @@ -591,7 +624,7 @@ FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 t) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxSaturate(FfxFloat32 x) { return saturate(x); @@ -604,7 +637,7 @@ FfxFloat32 ffxSaturate(FfxFloat32 x) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxSaturate(FfxFloat32x2 x) { return saturate(x); @@ -617,7 +650,7 @@ FfxFloat32x2 ffxSaturate(FfxFloat32x2 x) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxSaturate(FfxFloat32x3 x) { return saturate(x); @@ -630,7 +663,7 @@ FfxFloat32x3 ffxSaturate(FfxFloat32x3 x) /// @returns /// The clamped version of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxSaturate(FfxFloat32x4 x) { return saturate(x); @@ -645,11 +678,11 @@ FfxFloat32x4 ffxSaturate(FfxFloat32x4 x) /// function. /// /// @param [in] x The value to compute the fractional part from. -/// +/// /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxFract(FfxFloat32 x) { return x - floor(x); @@ -668,7 +701,7 @@ FfxFloat32 ffxFract(FfxFloat32 x) /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxFract(FfxFloat32x2 x) { return x - floor(x); @@ -687,7 +720,7 @@ FfxFloat32x2 ffxFract(FfxFloat32x2 x) /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxFract(FfxFloat32x3 x) { return x - floor(x); @@ -698,7 +731,7 @@ FfxFloat32x3 ffxFract(FfxFloat32x3 x) /// This function calculates x - floor(x). Where floor is the intrinsic HLSL function. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. It is -/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic +/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic /// function. /// /// @param [in] x The value to compute the fractional part from. @@ -706,7 +739,7 @@ FfxFloat32x3 ffxFract(FfxFloat32x3 x) /// @returns /// The fractional part of x. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxFract(FfxFloat32x4 x) { return x - floor(x); @@ -715,15 +748,15 @@ FfxFloat32x4 ffxFract(FfxFloat32x4 x) /// Compute the maximum of three values. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. -/// +/// /// @param [in] x The first value to include in the max calculation. /// @param [in] y The second value to include in the max calcuation. /// @param [in] z The third value to include in the max calcuation. -/// +/// /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return max(x, max(y, z)); @@ -732,7 +765,7 @@ FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// Compute the maximum of three values. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. -/// +/// /// @param [in] x The first value to include in the max calculation. /// @param [in] y The second value to include in the max calcuation. /// @param [in] z The third value to include in the max calcuation. @@ -740,7 +773,7 @@ FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return max(x, max(y, z)); @@ -749,7 +782,7 @@ FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// Compute the maximum of three values. /// /// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. -/// +/// /// @param [in] x The first value to include in the max calculation. /// @param [in] y The second value to include in the max calcuation. /// @param [in] z The third value to include in the max calcuation. @@ -757,7 +790,7 @@ FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxMax3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return max(x, max(y, z)); @@ -774,7 +807,7 @@ FfxFloat32x3 ffxMax3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxMax3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return max(x, max(y, z)); @@ -791,7 +824,7 @@ FfxFloat32x4 ffxMax3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32 ffxMax3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) { return max(x, max(y, z)); @@ -808,7 +841,7 @@ FfxUInt32 ffxMax3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxMax3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) { return max(x, max(y, z)); @@ -825,7 +858,7 @@ FfxUInt32x2 ffxMax3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxMax3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) { return max(x, max(y, z)); @@ -842,7 +875,7 @@ FfxUInt32x3 ffxMax3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) /// @returns /// The maximum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxMax3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) { return max(x, max(y, z)); @@ -859,7 +892,7 @@ FfxUInt32x4 ffxMax3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxMed3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return max(min(x, y), min(max(x, y), z)); @@ -876,7 +909,7 @@ FfxFloat32 ffxMed3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxMed3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return max(min(x, y), min(max(x, y), z)); @@ -893,7 +926,7 @@ FfxFloat32x2 ffxMed3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxMed3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return max(min(x, y), min(max(x, y), z)); @@ -910,7 +943,7 @@ FfxFloat32x3 ffxMed3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The median value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxMed3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return max(min(x, y), min(max(x, y), z)); @@ -990,7 +1023,7 @@ FfxInt32x4 ffxMed3(FfxInt32x4 x, FfxInt32x4 y, FfxInt32x4 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_I32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -999,7 +1032,7 @@ FfxInt32x4 ffxMed3(FfxInt32x4 x, FfxInt32x4 y, FfxInt32x4 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) { return min(x, min(y, z)); @@ -1007,7 +1040,7 @@ FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_I32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1016,7 +1049,7 @@ FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) { return min(x, min(y, z)); @@ -1024,7 +1057,7 @@ FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_I32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1033,7 +1066,7 @@ FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) { return min(x, min(y, z)); @@ -1041,7 +1074,7 @@ FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1050,7 +1083,7 @@ FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) { return min(x, min(y, z)); @@ -1058,7 +1091,7 @@ FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1067,7 +1100,7 @@ FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) { return min(x, min(y, z)); @@ -1075,7 +1108,7 @@ FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1084,7 +1117,7 @@ FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x2 ffxMin3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) { return min(x, min(y, z)); @@ -1092,16 +1125,16 @@ FfxUInt32x2 ffxMin3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. -/// @param [in] y The second value to include in the min calcuation. -/// @param [in] z The third value to include in the min calcuation. +/// @param [in] y The second value to include in the min calculation. +/// @param [in] z The third value to include in the min calculation. /// /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) { return min(x, min(y, z)); @@ -1109,7 +1142,7 @@ FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) /// Compute the minimum of three values. /// -/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on GCN/RDNA hardware. /// /// @param [in] x The first value to include in the min calculation. /// @param [in] y The second value to include in the min calcuation. @@ -1118,7 +1151,7 @@ FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) /// @returns /// The minimum value of x, y, and z. /// -/// @ingroup HLSL +/// @ingroup HLSLCore FfxUInt32x4 ffxMin3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) { return min(x, min(y, z)); @@ -1130,11 +1163,18 @@ FfxUInt32 AShrSU1(FfxUInt32 a, FfxUInt32 b) return FfxUInt32(FfxInt32(a) >> FfxInt32(b)); } +FfxUInt32 ffxPackF32(FfxFloat32x2 v){ + FfxUInt32x2 p = FfxUInt32x2(f32tof16(FfxFloat32x2(v).x), f32tof16(FfxFloat32x2(v).y)); + return p.x | (p.y << 16); +} + +FfxFloat32x2 ffxUnpackF32(FfxUInt32 a){ + return f16tof32(FfxUInt32x2(a & 0xFFFF, a >> 16)); +} + //============================================================================================================================== // HLSL HALF //============================================================================================================================== -#if FFX_HALF - //============================================================================================================================== // Need to use manual unpack to get optimal execution (don't use packed types in buffers directly). // Unpack requires this pattern: https://gpuopen.com/first-steps-implementing-fp16/ @@ -1156,10 +1196,59 @@ FFX_MIN16_U4 ffxUint32x2ToUint16x4(FfxUInt32x2 x) { return FFX_MIN16_U4(ffxUint32ToUint16x2(x.x), ffxUint32ToUint16x2(x.y)); } + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32 ffxInvertSafe(FfxFloat32 v){ + FfxFloat32 s = sign(v); + FfxFloat32 s2 = s*s; + return s2/(v + s2 - 1.0); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x2 ffxInvertSafe(FfxFloat32x2 v){ + FfxFloat32x2 s = sign(v); + FfxFloat32x2 s2 = s*s; + return s2/(v + s2 - FfxFloat32x2(1.0, 1.0)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x3 ffxInvertSafe(FfxFloat32x3 v){ + FfxFloat32x3 s = sign(v); + FfxFloat32x3 s2 = s*s; + return s2/(v + s2 - FfxFloat32x3(1.0, 1.0, 1.0)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x4 ffxInvertSafe(FfxFloat32x4 v){ + FfxFloat32x4 s = sign(v); + FfxFloat32x4 s2 = s*s; + return s2/(v + s2 - FfxFloat32x4(1.0, 1.0, 1.0, 1.0)); +} + #define FFX_UINT32_TO_FLOAT16X2(x) ffxUint32ToFloat16x2(FfxUInt32(x)) +#if FFX_HALF + #define FFX_UINT32X2_TO_FLOAT16X4(x) ffxUint32x2ToFloat16x4(FfxUInt32x2(x)) #define FFX_UINT32_TO_UINT16X2(x) ffxUint32ToUint16x2(FfxUInt32(x)) #define FFX_UINT32X2_TO_UINT16X4(x) ffxUint32x2ToUint16x4(FfxUInt32x2(x)) + +FfxUInt32 ffxPackF16(FfxFloat16x2 v){ + FfxUInt32x2 p = FfxUInt32x2(f32tof16(FfxFloat32x2(v).x), f32tof16(FfxFloat32x2(v).y)); + return p.x | (p.y << 16); +} + +FfxFloat16x2 ffxUnpackF16(FfxUInt32 a){ + return FfxFloat16x2(f16tof32(FfxUInt32x2(a & 0xFFFF, a >> 16))); +} + //------------------------------------------------------------------------------------------------------------------------------ FfxUInt32 FFX_MIN16_F2ToUint32(FFX_MIN16_F2 x) { @@ -1182,7 +1271,7 @@ FfxUInt32x2 FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4 x) #define FFX_UINT16X2_TO_UINT32(x) FFX_MIN16_U2ToUint32(FFX_MIN16_U2(x)) #define FFX_UINT16X4_TO_UINT32X2(x) FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4(x)) -#if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#if (FFX_HLSL_SM >= 62) && !defined(FFX_NO_16_BIT_CAST) #define FFX_TO_UINT16(x) asuint16(x) #define FFX_TO_UINT16X2(x) asuint16(x) #define FFX_TO_UINT16X3(x) asuint16(x) @@ -1192,9 +1281,9 @@ FfxUInt32x2 FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4 x) #define FFX_TO_UINT16X2(a) FFX_MIN16_U2(FFX_TO_UINT16((a).x), FFX_TO_UINT16((a).y)) #define FFX_TO_UINT16X3(a) FFX_MIN16_U3(FFX_TO_UINT16((a).x), FFX_TO_UINT16((a).y), FFX_TO_UINT16((a).z)) #define FFX_TO_UINT16X4(a) FFX_MIN16_U4(FFX_TO_UINT16((a).x), FFX_TO_UINT16((a).y), FFX_TO_UINT16((a).z), FFX_TO_UINT16((a).w)) -#endif // #if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#endif // #if (FFX_HLSL_SM>=62) && !defined(FFX_NO_16_BIT_CAST) -#if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#if (FFX_HLSL_SM >= 62) && !defined(FFX_NO_16_BIT_CAST) #define FFX_TO_FLOAT16(x) asfloat16(x) #define FFX_TO_FLOAT16X2(x) asfloat16(x) #define FFX_TO_FLOAT16X3(x) asfloat16(x) @@ -1204,7 +1293,7 @@ FfxUInt32x2 FFX_MIN16_U4ToUint32x2(FFX_MIN16_U4 x) #define FFX_TO_FLOAT16X2(a) FFX_MIN16_F2(FFX_TO_FLOAT16((a).x), FFX_TO_FLOAT16((a).y)) #define FFX_TO_FLOAT16X3(a) FFX_MIN16_F3(FFX_TO_FLOAT16((a).x), FFX_TO_FLOAT16((a).y), FFX_TO_FLOAT16((a).z)) #define FFX_TO_FLOAT16X4(a) FFX_MIN16_F4(FFX_TO_FLOAT16((a).x), FFX_TO_FLOAT16((a).y), FFX_TO_FLOAT16((a).z), FFX_TO_FLOAT16((a).w)) -#endif // #if defined(FFX_HLSL_6_2) && !defined(FFX_NO_16_BIT_CAST) +#endif // #if (FFX_HLSL_SM>=62) && !defined(FFX_NO_16_BIT_CAST) //============================================================================================================================== #define FFX_BROADCAST_FLOAT16(a) FFX_MIN16_F(a) @@ -1480,6 +1569,66 @@ FfxUInt32x4 AWaveXorU1(FfxUInt32x4 v, FfxUInt32 x) { return WaveReadLaneAt(v, WaveGetLaneIndex() ^ x); } +FfxBoolean AWaveIsFirstLane() +{ + return WaveIsFirstLane(); +} +FfxUInt32 AWaveLaneIndex() +{ + return WaveGetLaneIndex(); +} +FfxBoolean AWaveReadAtLaneIndexB1(FfxBoolean v, FfxUInt32 x) +{ + return WaveReadLaneAt(v, x); +} +FfxUInt32 AWavePrefixCountBits(FfxBoolean v) +{ + return WavePrefixCountBits(v); +} +FfxUInt32 AWaveActiveCountBits(FfxBoolean v) +{ + return WaveActiveCountBits(v); +} +FfxUInt32 AWaveReadLaneFirstU1(FfxUInt32 v) +{ + return WaveReadLaneFirst(v); +} +FfxUInt32 WaveOr(FfxUInt32 a) +{ + return WaveActiveBitOr(a); +} +FfxFloat32 WaveMin(FfxFloat32 a) +{ + return WaveActiveMin(a); +} +FfxFloat32 WaveMax(FfxFloat32 a) +{ + return WaveActiveMax(a); +} +FfxUInt32 WaveLaneCount() +{ + return WaveGetLaneCount(); +} +FfxBoolean WaveAllTrue(FfxBoolean v) +{ + return WaveActiveAllTrue(v); +} +FfxFloat32 QuadReadX(FfxFloat32 v) +{ + return QuadReadAcrossX(v); +} +FfxFloat32x2 QuadReadX(FfxFloat32x2 v) +{ + return QuadReadAcrossX(v); +} +FfxFloat32 QuadReadY(FfxFloat32 v) +{ + return QuadReadAcrossY(v); +} +FfxFloat32x2 QuadReadY(FfxFloat32x2 v) +{ + return QuadReadAcrossY(v); +} #if FFX_HALF FfxFloat16x2 ffxWaveXorFloat16x2(FfxFloat16x2 v, FfxUInt32 x) @@ -1496,7 +1645,7 @@ FfxUInt16x2 ffxWaveXorUint16x2(FfxUInt16x2 v, FfxUInt32 x) } FfxUInt16x4 ffxWaveXorUint16x4(FfxUInt16x4 v, FfxUInt32 x) { - return AW4_FFX_UINT32(WaveReadLaneAt(FFX_UINT32_AW4(v), WaveGetLaneIndex() ^ x)); + return FFX_UINT32X2_TO_UINT16X4(WaveReadLaneAt(FFX_UINT16X4_TO_UINT32X2(v), WaveGetLaneIndex() ^ x)); } #endif // FFX_HALF #endif // #if defined(FFX_WAVE) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta new file mode 100644 index 0000000..ff56bee --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_hlsl.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 299f67e8b7e1d1a48a577bf8b328ac92 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h similarity index 94% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h index 45be059..84a62d6 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_core_portability.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,6 +19,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + FfxFloat32x3 opAAddOneF3(FfxFloat32x3 d, FfxFloat32x3 a, FfxFloat32 b) { d = a + ffxBroadcast3(b); diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta new file mode 100644 index 0000000..25ff64b --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_core_portability.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 8d2ace0bd52e0e1438e08ddaccd3ba24 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h similarity index 90% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h index 7bd5892..c425de7 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_accumulate.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_ACCUMULATE_H -#define FFX_FSR2_ACCUMULATE_H + +#ifndef FFX_FSR3UPSCALER_ACCUMULATE_H +#define FFX_FSR3UPSCALER_ACCUMULATE_H FfxFloat32 GetPxHrVelocity(FfxFloat32x2 fMotionVector) { @@ -36,9 +37,9 @@ FFX_MIN16_F GetPxHrVelocity(FFX_MIN16_F2 fMotionVector) void Accumulate(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT FfxFloat32x3 fHistoryColor, FfxFloat32x3 fAccumulation, FFX_PARAMETER_IN FfxFloat32x4 fUpsampledColorAndWeight) { // Aviod invalid values when accumulation and upsampled weight is 0 - fAccumulation = ffxMax(FSR2_EPSILON.xxx, fAccumulation + fUpsampledColorAndWeight.www); + fAccumulation = ffxMax(FSR3UPSCALER_EPSILON.xxx, fAccumulation + fUpsampledColorAndWeight.www); -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT //YCoCg -> RGB -> Tonemap -> YCoCg (Use RGB tonemapper to avoid color desaturation) fUpsampledColorAndWeight.xyz = RGBToYCoCg(Tonemap(YCoCgToRGB(fUpsampledColorAndWeight.xyz))); fHistoryColor = RGBToYCoCg(Tonemap(YCoCgToRGB(fHistoryColor))); @@ -49,7 +50,7 @@ void Accumulate(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT F fHistoryColor = YCoCgToRGB(fHistoryColor); -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT fHistoryColor = InverseTonemap(fHistoryColor); #endif } @@ -63,20 +64,13 @@ void RectifyHistory( FfxFloat32 fTemporalReactiveFactor, FfxFloat32 fLumaInstabilityFactor) { - FfxFloat32 fScaleFactorInfluence = ffxMin(20.0f, ffxPow(FfxFloat32(1.0f / length(DownscaleFactor().x * DownscaleFactor().y)), 3.0f)); - const FfxFloat32 fVecolityFactor = ffxSaturate(params.fHrVelocity / 20.0f); const FfxFloat32 fBoxScaleT = ffxMax(params.fDepthClipFactor, ffxMax(params.fAccumulationMask, fVecolityFactor)); - FfxFloat32 fBoxScale = ffxLerp(fScaleFactorInfluence, 1.0f, fBoxScaleT); - - FfxFloat32x3 fScaledBoxVec = clippingBox.boxVec * fBoxScale; - FfxFloat32x3 boxMin = clippingBox.boxCenter - fScaledBoxVec; - FfxFloat32x3 boxMax = clippingBox.boxCenter + fScaledBoxVec; - FfxFloat32x3 boxCenter = clippingBox.boxCenter; - FfxFloat32 boxVecSize = length(clippingBox.boxVec); + const FfxFloat32 fBoxScale = ffxLerp(3.0f, 1.0f, fBoxScaleT); - boxMin = ffxMax(clippingBox.aabbMin, boxMin); - boxMax = ffxMin(clippingBox.aabbMax, boxMax); + const FfxFloat32x3 fScaledBoxVec = clippingBox.boxVec * fBoxScale; + const FfxFloat32x3 boxMin = clippingBox.boxCenter - fScaledBoxVec; + const FfxFloat32x3 boxMax = clippingBox.boxCenter + fScaledBoxVec; if (any(FFX_GREATER_THAN(boxMin, fHistoryColor)) || any(FFX_GREATER_THAN(fHistoryColor, boxMax))) { @@ -143,7 +137,7 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param FfxFloat32 fCurrentFrameLuma = clippingBox.boxCenter.x; -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT fCurrentFrameLuma = fCurrentFrameLuma / (1.0f + ffxMax(0.0f, fCurrentFrameLuma)); #endif @@ -157,8 +151,7 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param FfxFloat32 fMin = abs(fDiffs0); - if (fMin >= fUnormThreshold) - { + if (fMin >= fUnormThreshold) { for (int i = N_MINUS_2; i <= N_MINUS_4; i++) { FfxFloat32 fDiffs1 = (fCurrentFrameLuma - fCurrentFrameLumaHistory[i]); @@ -170,7 +163,7 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param } } - const FfxFloat32 fBoxSize = clippingBox.boxVec.x; + const FfxFloat32 fBoxSize = clippingBox.boxVec.x; const FfxFloat32 fBoxSizeFactor = ffxPow(ffxSaturate(fBoxSize / 0.1f), 6.0f); fLumaInstability = FfxFloat32(fMin != abs(fDiffs0)) * fBoxSizeFactor; @@ -202,7 +195,7 @@ FfxFloat32 ComputeTemporalReactiveFactor(const AccumulationPassCommonParams para fNewFactor = params.bIsNewSample ? 1.0f : fNewFactor; if (ffxSaturate(params.fHrVelocity * 10.0f) >= 1.0f) { - fNewFactor = ffxMax(FSR2_EPSILON, fNewFactor) * -1.0f; + fNewFactor = ffxMax(FSR3UPSCALER_EPSILON, fNewFactor) * -1.0f; } return fNewFactor; @@ -286,10 +279,10 @@ void Accumulate(FfxInt32x2 iPxHrPos) StoreInternalColorAndWeight(iPxHrPos, FfxFloat32x4(fHistoryColor, fTemporalReactiveFactor)); // Output final color when RCAS is disabled -#if FFX_FSR2_OPTION_APPLY_SHARPENING == 0 +#if FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING == 0 WriteUpscaledOutput(iPxHrPos, fHistoryColor); #endif StoreNewLocks(iPxHrPos, 0); } -#endif // FFX_FSR2_ACCUMULATE_H +#endif // FFX_FSR3UPSCALER_ACCUMULATE_H diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta new file mode 100644 index 0000000..08c98e7 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 3fc2f7a2c8c31324a949e1761bf599cc +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h new file mode 100644 index 0000000..c70bc1d --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h @@ -0,0 +1,928 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#include "ffx_fsr3upscaler_resources.h" + +#if defined(FFX_GPU) +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler +#include "ffx_core.h" +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler +#endif // #if defined(FFX_GPU) + +#if defined(FFX_GPU) +#ifndef FFX_PREFER_WAVE64 +#define FFX_PREFER_WAVE64 +#endif // FFX_PREFER_WAVE64 + +#if defined(FFX_GPU) +#pragma warning(disable: 3205) // conversion from larger type to smaller +#endif // #if defined(FFX_GPU) + +#define DECLARE_SRV_REGISTER(regIndex) t##regIndex +#define DECLARE_UAV_REGISTER(regIndex) u##regIndex +#define DECLARE_CB_REGISTER(regIndex) b##regIndex +#define FFX_FSR3UPSCALER_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) +#define FFX_FSR3UPSCALER_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) +#define FFX_FSR3UPSCALER_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) + +#if defined(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + cbuffer cbFSR3Upscaler : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + { + FfxInt32x2 iRenderSize; + FfxInt32x2 iMaxRenderSize; + FfxInt32x2 iDisplaySize; + FfxInt32x2 iInputColorResourceDimensions; + FfxInt32x2 iLumaMipDimensions; + FfxInt32 iLumaMipLevelToUse; + FfxInt32 iFrameIndex; + + FfxFloat32x4 fDeviceToViewDepth; + FfxFloat32x2 fJitter; + FfxFloat32x2 fMotionVectorScale; + FfxFloat32x2 fDownscaleFactor; + FfxFloat32x2 fMotionVectorJitterCancellation; + FfxFloat32 fPreExposure; + FfxFloat32 fPreviousFramePreExposure; + FfxFloat32 fTanHalfFOV; + FfxFloat32 fJitterSequenceLength; + FfxFloat32 fDeltaTime; + FfxFloat32 fDynamicResChangeFactor; + FfxFloat32 fViewSpaceToMetersFactor; + + FfxInt32 iDummy; + }; + +#define FFX_FSR3UPSCALER_CONSTANT_BUFFER_1_SIZE (sizeof(cbFSR3Upscaler) / 4) // Number of 32-bit values. This must be kept in sync with the cbFSR3Upscaler size. + +/* Define getter functions in the order they are defined in the CB! */ +FfxInt32x2 RenderSize() +{ + return iRenderSize; +} + +FfxInt32x2 MaxRenderSize() +{ + return iMaxRenderSize; +} + +FfxInt32x2 DisplaySize() +{ + return iDisplaySize; +} + +FfxInt32x2 InputColorResourceDimensions() +{ + return iInputColorResourceDimensions; +} + +FfxInt32x2 LumaMipDimensions() +{ + return iLumaMipDimensions; +} + +FfxInt32 LumaMipLevelToUse() +{ + return iLumaMipLevelToUse; +} + +FfxInt32 FrameIndex() +{ + return iFrameIndex; +} + +FfxFloat32x2 Jitter() +{ + return fJitter; +} + +FfxFloat32x4 DeviceToViewSpaceTransformFactors() +{ + return fDeviceToViewDepth; +} + +FfxFloat32x2 MotionVectorScale() +{ + return fMotionVectorScale; +} + +FfxFloat32x2 DownscaleFactor() +{ + return fDownscaleFactor; +} + +FfxFloat32x2 MotionVectorJitterCancellation() +{ + return fMotionVectorJitterCancellation; +} + +FfxFloat32 PreExposure() +{ + return fPreExposure; +} + +FfxFloat32 PreviousFramePreExposure() +{ + return fPreviousFramePreExposure; +} + +FfxFloat32 TanHalfFoV() +{ + return fTanHalfFOV; +} + +FfxFloat32 JitterSequenceLength() +{ + return fJitterSequenceLength; +} + +FfxFloat32 DeltaTime() +{ + return fDeltaTime; +} + +FfxFloat32 DynamicResChangeFactor() +{ + return fDynamicResChangeFactor; +} + +FfxFloat32 ViewSpaceToMetersFactor() +{ + return fViewSpaceToMetersFactor; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + +#define FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(p) FFX_FSR3UPSCALER_ROOTSIG_STR(p) +#define FFX_FSR3UPSCALER_ROOTSIG_STR(p) #p +#define FFX_FSR3UPSCALER_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "RootConstants(num32BitConstants=" FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_CONSTANT_BUFFER_1_SIZE) ", b0), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ + "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] + +#define FFX_FSR3UPSCALER_CONSTANT_BUFFER_2_SIZE 6 // Number of 32-bit values. This must be kept in sync with max( cbRCAS , cbSPD) size. + +#define FFX_FSR3UPSCALER_CB2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "RootConstants(num32BitConstants=" FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_CONSTANT_BUFFER_1_SIZE) ", b0), " \ + "RootConstants(num32BitConstants=" FFX_FSR3UPSCALER_ROOTSIG_STRINGIFY(FFX_FSR3UPSCALER_CONSTANT_BUFFER_2_SIZE) ", b1), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ + "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] +#if defined(FFX_FSR3UPSCALER_EMBED_ROOTSIG) +#define FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT FFX_FSR3UPSCALER_ROOTSIG +#define FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT FFX_FSR3UPSCALER_CB2_ROOTSIG +#else +#define FFX_FSR3UPSCALER_EMBED_ROOTSIG_CONTENT +#define FFX_FSR3UPSCALER_EMBED_CB2_ROOTSIG_CONTENT +#endif // #if FFX_FSR3UPSCALER_EMBED_ROOTSIG + +#if defined(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) +cbuffer cbGenerateReactive : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) +{ + FfxFloat32 fTcThreshold; // 0.1 is a good starting value, lower will result in more TC pixels + FfxFloat32 fTcScale; + FfxFloat32 fReactiveScale; + FfxFloat32 fReactiveMax; +}; + +FfxFloat32 TcThreshold() +{ + return fTcThreshold; +} + +FfxFloat32 TcScale() +{ + return fTcScale; +} + +FfxFloat32 ReactiveScale() +{ + return fReactiveScale; +} + +FfxFloat32 ReactiveMax() +{ + return fReactiveMax; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) + +#if defined(FSR3UPSCALER_BIND_CB_RCAS) +cbuffer cbRCAS : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_RCAS) +{ + FfxUInt32x4 rcasConfig; +}; + +FfxUInt32x4 RCASConfig() +{ + return rcasConfig; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_RCAS) + + +#if defined(FSR3UPSCALER_BIND_CB_REACTIVE) +cbuffer cbGenerateReactive : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_REACTIVE) +{ + FfxFloat32 gen_reactive_scale; + FfxFloat32 gen_reactive_threshold; + FfxFloat32 gen_reactive_binaryValue; + FfxUInt32 gen_reactive_flags; +}; + +FfxFloat32 GenReactiveScale() +{ + return gen_reactive_scale; +} + +FfxFloat32 GenReactiveThreshold() +{ + return gen_reactive_threshold; +} + +FfxFloat32 GenReactiveBinaryValue() +{ + return gen_reactive_binaryValue; +} + +FfxUInt32 GenReactiveFlags() +{ + return gen_reactive_flags; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_REACTIVE) + +#if defined(FSR3UPSCALER_BIND_CB_SPD) +cbuffer cbSPD : FFX_FSR3UPSCALER_DECLARE_CB(FSR3UPSCALER_BIND_CB_SPD) { + + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + FfxUInt32x2 renderSize; +}; + +FfxUInt32 MipCount() +{ + return mips; +} + +FfxUInt32 NumWorkGroups() +{ + return numWorkGroups; +} + +FfxUInt32x2 WorkGroupOffset() +{ + return workGroupOffset; +} + +FfxUInt32x2 SPD_RenderSize() +{ + return renderSize; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_SPD) + +// Declare and sample camera buffers as regular textures, unless overridden +#if !defined(UNITY_FSR3_TEX2D) +#define UNITY_FSR3_TEX2D(type) Texture2D +#endif +#if !defined(UNITY_FSR3_RWTEX2D) +#define UNITY_FSR3_RWTEX2D(type) RWTexture2D +#endif +#if !defined(UNITY_FSR3_POS) +#define UNITY_FSR3_POS(pxPos) (pxPos) +#endif +#if !defined(UNITY_FSR3_UV) +#define UNITY_FSR3_UV(uv) (uv) +#endif + +SamplerState s_PointClamp : register(s0); +SamplerState s_LinearClamp : register(s1); + + // SRVs + #if defined FSR3UPSCALER_BIND_SRV_INPUT_COLOR + UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY + UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS + UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_DEPTH + UNITY_FSR3_TEX2D(FfxFloat32) r_input_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE + Texture2D r_input_exposure : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE + Texture2D r_auto_exposure : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_SRV_REACTIVE_MASK + Texture2D r_reactive_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK); + #endif + #if defined FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK + Texture2D r_transparency_and_composition_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK); + #endif + #if defined FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH + Texture2D r_reconstructed_previous_nearest_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS + Texture2D r_dilated_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS + Texture2D r_previous_dilated_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_DILATED_DEPTH + Texture2D r_dilated_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_DILATED_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED + Texture2D r_internal_upscaled_color : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LOCK_STATUS + Texture2D r_lock_status : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LOCK_STATUS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA + Texture2D r_lock_input_luma : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA); + #endif + #if defined FSR3UPSCALER_BIND_SRV_NEW_LOCKS + Texture2D r_new_locks : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_NEW_LOCKS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR + Texture2D r_prepared_input_color : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LUMA_HISTORY + Texture2D r_luma_history : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LUMA_HISTORY); + #endif + #if defined FSR3UPSCALER_BIND_SRV_RCAS_INPUT + Texture2D r_rcas_input : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_RCAS_INPUT); + #endif + #if defined FSR3UPSCALER_BIND_SRV_LANCZOS_LUT + Texture2D r_lanczos_lut : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_LANCZOS_LUT); + #endif + #if defined FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS + Texture2D r_imgMips : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS); + #endif + #if defined FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT + Texture2D r_upsample_maximum_bias_lut : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT); + #endif + #if defined FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS + Texture2D r_dilated_reactive_masks : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS); + #endif + + #if defined FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR + Texture2D r_input_prev_color_pre_alpha : FFX_FSR3UPSCALER_DECLARE_SRV(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR + Texture2D r_input_prev_color_post_alpha : FFX_FSR3UPSCALER_DECLARE_SRV(FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR); + #endif + + // UAV declarations + #if defined FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH + RWTexture2D rw_reconstructed_previous_nearest_depth : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS + RWTexture2D rw_dilated_motion_vectors : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_DILATED_DEPTH + RWTexture2D rw_dilated_depth : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_DILATED_DEPTH); + #endif + #if defined FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED + RWTexture2D rw_internal_upscaled_color : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED); + #endif + #if defined FSR3UPSCALER_BIND_UAV_LOCK_STATUS + RWTexture2D rw_lock_status : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_LOCK_STATUS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA + RWTexture2D rw_lock_input_luma : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA); + #endif + #if defined FSR3UPSCALER_BIND_UAV_NEW_LOCKS + RWTexture2D rw_new_locks : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_NEW_LOCKS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR + RWTexture2D rw_prepared_input_color : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_UAV_LUMA_HISTORY + RWTexture2D rw_luma_history : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_LUMA_HISTORY); + #endif + #if defined FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT + UNITY_FSR3_RWTEX2D(FfxFloat32x4) rw_upscaled_output : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT); + #endif + #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE + globallycoherent RWTexture2D rw_img_mip_shading_change : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + globallycoherent RWTexture2D rw_img_mip_5 : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5); + #endif + #if defined FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS + RWTexture2D rw_dilated_reactive_masks : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS); + #endif + #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE + RWTexture2D rw_exposure : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE + RWTexture2D rw_auto_exposure : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC + globallycoherent RWTexture2D rw_spd_global_atomic : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC); + #endif + + #if defined FSR3UPSCALER_BIND_UAV_AUTOREACTIVE + RWTexture2D rw_output_autoreactive : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_AUTOREACTIVE); + #endif + #if defined FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION + RWTexture2D rw_output_autocomposition : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION); + #endif + #if defined FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR + RWTexture2D rw_output_prev_color_pre_alpha : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR); + #endif + #if defined FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR + RWTexture2D rw_output_prev_color_post_alpha : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR); + #endif + +#if defined(FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS) +FfxFloat32 LoadMipLuma(FfxUInt32x2 iPxPos, FfxUInt32 mipLevel) +{ + return r_imgMips.mips[mipLevel][iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_SCENE_LUMINANCE_MIPS) +FfxFloat32 SampleMipLuma(FfxFloat32x2 fUV, FfxUInt32 mipLevel) +{ + return r_imgMips.SampleLevel(s_LinearClamp, fUV, mipLevel); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) +FfxFloat32 LoadInputDepth(FfxUInt32x2 iPxPos) +{ + return r_input_depth[UNITY_FSR3_POS(iPxPos)]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) +FfxFloat32 SampleInputDepth(FfxFloat32x2 fUV) +{ + return r_input_depth.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK) +FfxFloat32 LoadReactiveMask(FfxUInt32x2 iPxPos) +{ + return r_reactive_mask[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) +FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) +{ + return r_transparency_and_composition_mask[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_COLOR) +FfxFloat32x3 LoadInputColor(FfxUInt32x2 iPxPos) +{ + return r_input_color_jittered[UNITY_FSR3_POS(iPxPos)].rgb; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_COLOR) +FfxFloat32x3 SampleInputColor(FfxFloat32x2 fUV) +{ + return r_input_color_jittered.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).rgb; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR) +FfxFloat32x3 LoadPreparedInputColor(FfxUInt32x2 iPxPos) +{ + return r_prepared_input_color[iPxPos].xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS) +FfxFloat32x2 LoadInputMotionVector(FfxUInt32x2 iPxDilatedMotionVectorPos) +{ + FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[UNITY_FSR3_POS(iPxDilatedMotionVectorPos)].xy; + + FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); + +#if FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS + fUvMotionVector -= MotionVectorJitterCancellation(); +#endif + + return fUvMotionVector; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED) +FfxFloat32x4 LoadHistory(FfxUInt32x2 iPxHistory) +{ + return r_internal_upscaled_color[iPxHistory]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LUMA_HISTORY) +void StoreLumaHistory(FfxUInt32x2 iPxPos, FfxFloat32x4 fLumaHistory) +{ + rw_luma_history[iPxPos] = fLumaHistory; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LUMA_HISTORY) +FfxFloat32x4 SampleLumaHistory(FfxFloat32x2 fUV) +{ + return r_luma_history.SampleLevel(s_LinearClamp, fUV, 0); +} +#endif + +FfxFloat32x4 LoadRCAS_Input(FfxInt32x2 iPxPos) +{ +#if defined(FSR3UPSCALER_BIND_SRV_RCAS_INPUT) + return r_rcas_input[iPxPos]; +#else + return 0.0; +#endif +} + +#if defined(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED) +void StoreReprojectedHistory(FfxUInt32x2 iPxHistory, FfxFloat32x4 fHistory) +{ + rw_internal_upscaled_color[iPxHistory] = fHistory; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED) +void StoreInternalColorAndWeight(FfxUInt32x2 iPxPos, FfxFloat32x4 fColorAndWeight) +{ + rw_internal_upscaled_color[iPxPos] = fColorAndWeight; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT) +void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) +{ + rw_upscaled_output[UNITY_FSR3_POS(iPxPos)] = FfxFloat32x4(fColor, 1.f); +} +#endif + +//LOCK_LIFETIME_REMAINING == 0 +//Should make LockInitialLifetime() return a const 1.0f later +#if defined(FSR3UPSCALER_BIND_SRV_LOCK_STATUS) +FfxFloat32x2 LoadLockStatus(FfxUInt32x2 iPxPos) +{ + return r_lock_status[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LOCK_STATUS) +void StoreLockStatus(FfxUInt32x2 iPxPos, FfxFloat32x2 fLockStatus) +{ + rw_lock_status[iPxPos] = fLockStatus; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LOCK_INPUT_LUMA) +FfxFloat32 LoadLockInputLuma(FfxUInt32x2 iPxPos) +{ + return r_lock_input_luma[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LOCK_INPUT_LUMA) +void StoreLockInputLuma(FfxUInt32x2 iPxPos, FfxFloat32 fLuma) +{ + rw_lock_input_luma[iPxPos] = fLuma; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_NEW_LOCKS) +FfxFloat32 LoadNewLocks(FfxUInt32x2 iPxPos) +{ + return r_new_locks[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_NEW_LOCKS) +FfxFloat32 LoadRwNewLocks(FfxUInt32x2 iPxPos) +{ + return rw_new_locks[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_NEW_LOCKS) +void StoreNewLocks(FfxUInt32x2 iPxPos, FfxFloat32 newLock) +{ + rw_new_locks[iPxPos] = newLock; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREPARED_INPUT_COLOR) +void StorePreparedInputColor(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 fTonemapped) +{ + rw_prepared_input_color[iPxPos] = fTonemapped; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREPARED_INPUT_COLOR) +FfxFloat32 SampleDepthClip(FfxFloat32x2 fUV) +{ + return r_prepared_input_color.SampleLevel(s_LinearClamp, fUV, 0).w; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LOCK_STATUS) +FfxFloat32x2 SampleLockStatus(FfxFloat32x2 fUV) +{ + FfxFloat32x2 fLockStatus = r_lock_status.SampleLevel(s_LinearClamp, fUV, 0); + return fLockStatus; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +FfxFloat32 LoadReconstructedPrevDepth(FfxUInt32x2 iPxPos) +{ + return asfloat(r_reconstructed_previous_nearest_depth[iPxPos]); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +void StoreReconstructedDepth(FfxUInt32x2 iPxSample, FfxFloat32 fDepth) +{ + FfxUInt32 uDepth = asuint(fDepth); + + #if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + InterlockedMax(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); + #else + InterlockedMin(rw_reconstructed_previous_nearest_depth[iPxSample], uDepth); // min for standard, max for inverted depth + #endif +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +void SetReconstructedDepth(FfxUInt32x2 iPxSample, const FfxUInt32 uValue) +{ + rw_reconstructed_previous_nearest_depth[iPxSample] = uValue; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_DEPTH) +void StoreDilatedDepth(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 fDepth) +{ + rw_dilated_depth[iPxPos] = fDepth; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS) +void StoreDilatedMotionVector(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fMotionVector) +{ + rw_dilated_motion_vectors[iPxPos] = fMotionVector; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS) +FfxFloat32x2 LoadDilatedMotionVector(FfxUInt32x2 iPxInput) +{ + return r_dilated_motion_vectors[iPxInput].xy; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREVIOUS_DILATED_MOTION_VECTORS) +FfxFloat32x2 LoadPreviousDilatedMotionVector(FfxUInt32x2 iPxInput) +{ + return r_previous_dilated_motion_vectors[iPxInput].xy; +} + +FfxFloat32x2 SamplePreviousDilatedMotionVector(FfxFloat32x2 uv) +{ + return r_previous_dilated_motion_vectors.SampleLevel(s_LinearClamp, uv, 0).xy; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_DEPTH) +FfxFloat32 LoadDilatedDepth(FfxUInt32x2 iPxInput) +{ + return r_dilated_depth[iPxInput]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE) +FfxFloat32 Exposure() +{ + FfxFloat32 exposure = r_input_exposure[FfxUInt32x2(0, 0)].x; + + if (exposure == 0.0f) { + exposure = 1.0f; + } + + return exposure; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_AUTO_EXPOSURE) +FfxFloat32 AutoExposure() +{ + FfxFloat32 exposure = r_auto_exposure[FfxUInt32x2(0, 0)].x; + + if (exposure == 0.0f) { + exposure = 1.0f; + } + + return exposure; +} +#endif + +FfxFloat32 SampleLanczos2Weight(FfxFloat32 x) +{ +#if defined(FSR3UPSCALER_BIND_SRV_LANCZOS_LUT) + return r_lanczos_lut.SampleLevel(s_LinearClamp, FfxFloat32x2(x / 2, 0.5f), 0); +#else + return 0.f; +#endif +} + +#if defined(FSR3UPSCALER_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT) +FfxFloat32 SampleUpsampleMaximumBias(FfxFloat32x2 uv) +{ + // Stored as a SNORM, so make sure to multiply by 2 to retrieve the actual expected range. + return FfxFloat32(2.0) * r_upsample_maximum_bias_lut.SampleLevel(s_LinearClamp, abs(uv) * 2.0, 0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS) +FfxFloat32x2 SampleDilatedReactiveMasks(FfxFloat32x2 fUV) +{ + return r_dilated_reactive_masks.SampleLevel(s_LinearClamp, fUV, 0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS) +FfxFloat32x2 LoadDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos) +{ + return r_dilated_reactive_masks[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS) +void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fDilatedReactiveMasks) +{ + rw_dilated_reactive_masks[iPxPos] = fDilatedReactiveMasks; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY) +FfxFloat32x3 LoadOpaqueOnly(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return r_input_opaque_only[UNITY_FSR3_POS(iPxPos)].xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR) +FfxFloat32x3 LoadPrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return r_input_prev_color_pre_alpha[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR) +FfxFloat32x3 LoadPrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return r_input_prev_color_post_alpha[iPxPos]; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_AUTOREACTIVE) +#if defined(FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION) +void StoreAutoReactive(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F2 fReactive) +{ + rw_output_autoreactive[iPxPos] = fReactive.x; + + rw_output_autocomposition[iPxPos] = fReactive.y; +} +#endif +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR) +void StorePrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) +{ + rw_output_prev_color_pre_alpha[iPxPos] = color; + +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR) +void StorePrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) +{ + rw_output_prev_color_post_alpha[iPxPos] = color; +} +#endif + +FfxFloat32x2 SPD_LoadExposureBuffer() +{ +#if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE + return rw_auto_exposure[FfxInt32x2(0, 0)]; +#else + return FfxFloat32x2(0.f, 0.f); +#endif // #if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE +} + +void SPD_SetExposureBuffer(FfxFloat32x2 value) +{ +#if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE + rw_auto_exposure[FfxInt32x2(0, 0)] = value; +#endif // #if defined FSR3UPSCALER_BIND_UAV_AUTO_EXPOSURE +} + +FfxFloat32x4 SPD_LoadMipmap5(FfxInt32x2 iPxPos) +{ +#if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + return FfxFloat32x4(rw_img_mip_5[iPxPos], 0, 0, 0); +#else + return FfxFloat32x4(0.f, 0.f, 0.f, 0.f); +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 +} + +void SPD_SetMipmap(FfxInt32x2 iPxPos, FfxUInt32 slice, FfxFloat32 value) +{ + switch (slice) + { + case FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL: +#if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE + rw_img_mip_shading_change[iPxPos] = value; +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE + break; + case 5: +#if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + rw_img_mip_5[iPxPos] = value; +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + break; + default: + + // avoid flattened side effect +#if defined(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE) + rw_img_mip_shading_change[iPxPos] = rw_img_mip_shading_change[iPxPos]; +#elif defined(FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5) + rw_img_mip_5[iPxPos] = rw_img_mip_5[iPxPos]; +#endif // #if defined FSR3UPSCALER_BIND_UAV_EXPOSURE_MIP_5 + break; + } +} + +void SPD_IncreaseAtomicCounter(inout FfxUInt32 spdCounter) +{ +#if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC + InterlockedAdd(rw_spd_global_atomic[FfxInt32x2(0, 0)], 1, spdCounter); +#endif // #if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC +} + +void SPD_ResetAtomicCounter() +{ +#if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC + rw_spd_global_atomic[FfxInt32x2(0, 0)] = 0; +#endif // #if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC +} + +#endif // #if defined(FFX_GPU) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta new file mode 100644 index 0000000..e060d2c --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_callbacks_hlsl.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: ba849fdeb042e7f458c81408414db834 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_common.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h similarity index 91% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_common.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h index 0c72aa8..1f78a29 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_common.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#if !defined(FFX_FSR2_COMMON_H) -#define FFX_FSR2_COMMON_H + +#if !defined(FFX_FSR3UPSCALER_COMMON_H) +#define FFX_FSR3UPSCALER_COMMON_H #if defined(FFX_CPU) || defined(FFX_GPU) //Locks @@ -29,12 +30,12 @@ #endif // #if defined(FFX_CPU) || defined(FFX_GPU) #if defined(FFX_GPU) -FFX_STATIC const FfxFloat32 FSR2_FP16_MIN = 6.10e-05f; -FFX_STATIC const FfxFloat32 FSR2_FP16_MAX = 65504.0f; -FFX_STATIC const FfxFloat32 FSR2_EPSILON = 1e-03f; -FFX_STATIC const FfxFloat32 FSR2_TONEMAP_EPSILON = 1.0f / FSR2_FP16_MAX; -FFX_STATIC const FfxFloat32 FSR2_FLT_MAX = 3.402823466e+38f; -FFX_STATIC const FfxFloat32 FSR2_FLT_MIN = 1.175494351e-38f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP16_MIN = 6.10e-05f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP16_MAX = 65504.0f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_EPSILON = 1e-03f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_TONEMAP_EPSILON = 1.0f / FSR3UPSCALER_FP16_MAX; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FLT_MAX = 3.402823466e+38f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FLT_MIN = 1.175494351e-38f; // treat vector truncation warnings as errors #pragma warning(error: 3206) @@ -128,8 +129,8 @@ void RectificationBoxReset(FFX_PARAMETER_INOUT RectificationBox rectificationBox rectificationBox.boxCenter = FfxFloat32x3(0, 0, 0); rectificationBox.boxVec = FfxFloat32x3(0, 0, 0); - rectificationBox.aabbMin = FfxFloat32x3(FSR2_FLT_MAX, FSR2_FLT_MAX, FSR2_FLT_MAX); - rectificationBox.aabbMax = -FfxFloat32x3(FSR2_FLT_MAX, FSR2_FLT_MAX, FSR2_FLT_MAX); + rectificationBox.aabbMin = FfxFloat32x3(FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX); + rectificationBox.aabbMax = -FfxFloat32x3(FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX, FSR3UPSCALER_FLT_MAX); } #if FFX_HALF void RectificationBoxReset(FFX_PARAMETER_INOUT RectificationBoxMin16 rectificationBox) @@ -138,8 +139,8 @@ void RectificationBoxReset(FFX_PARAMETER_INOUT RectificationBoxMin16 rectificati rectificationBox.boxCenter = FFX_MIN16_F3(0, 0, 0); rectificationBox.boxVec = FFX_MIN16_F3(0, 0, 0); - rectificationBox.aabbMin = FFX_MIN16_F3(FSR2_FP16_MAX, FSR2_FP16_MAX, FSR2_FP16_MAX); - rectificationBox.aabbMax = -FFX_MIN16_F3(FSR2_FP16_MAX, FSR2_FP16_MAX, FSR2_FP16_MAX); + rectificationBox.aabbMin = FFX_MIN16_F3(FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX); + rectificationBox.aabbMax = -FFX_MIN16_F3(FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX, FSR3UPSCALER_FP16_MAX); } #endif @@ -198,7 +199,7 @@ void RectificationBoxAddSample(FfxBoolean bInitialSample, FFX_PARAMETER_INOUT Re void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBox rectificationBox) { - rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FfxFloat32(FSR2_EPSILON) ? rectificationBox.fBoxCenterWeight : FfxFloat32(1.f)); + rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FfxFloat32(FSR3UPSCALER_EPSILON) ? rectificationBox.fBoxCenterWeight : FfxFloat32(1.f)); rectificationBox.boxCenter /= rectificationBox.fBoxCenterWeight; rectificationBox.boxVec /= rectificationBox.fBoxCenterWeight; FfxFloat32x3 stdDev = sqrt(abs(rectificationBox.boxVec - rectificationBox.boxCenter * rectificationBox.boxCenter)); @@ -207,7 +208,7 @@ void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBox #if FFX_HALF void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBoxMin16 rectificationBox) { - rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FFX_MIN16_F(FSR2_EPSILON) ? rectificationBox.fBoxCenterWeight : FFX_MIN16_F(1.f)); + rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FFX_MIN16_F(FSR3UPSCALER_EPSILON) ? rectificationBox.fBoxCenterWeight : FFX_MIN16_F(1.f)); rectificationBox.boxCenter /= rectificationBox.fBoxCenterWeight; rectificationBox.boxVec /= rectificationBox.fBoxCenterWeight; FFX_MIN16_F3 stdDev = sqrt(abs(rectificationBox.boxVec - rectificationBox.boxCenter * rectificationBox.boxCenter)); @@ -339,7 +340,7 @@ FfxFloat32x3 Tonemap(FfxFloat32x3 fRgb) FfxFloat32x3 InverseTonemap(FfxFloat32x3 fRgb) { - return fRgb / ffxMax(FSR2_TONEMAP_EPSILON, 1.f - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; + return fRgb / ffxMax(FSR3UPSCALER_TONEMAP_EPSILON, 1.f - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; } #if FFX_HALF @@ -350,7 +351,7 @@ FFX_MIN16_F3 Tonemap(FFX_MIN16_F3 fRgb) FFX_MIN16_F3 InverseTonemap(FFX_MIN16_F3 fRgb) { - return fRgb / ffxMax(FFX_MIN16_F(FSR2_TONEMAP_EPSILON), FFX_MIN16_F(1.f) - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; + return fRgb / ffxMax(FFX_MIN16_F(FSR3UPSCALER_TONEMAP_EPSILON), FFX_MIN16_F(1.f) - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; } #endif @@ -454,7 +455,7 @@ FfxFloat32 GetViewSpaceDepth(FfxFloat32 fDeviceDepth) { const FfxFloat32x4 fDeviceToViewDepth = DeviceToViewSpaceTransformFactors(); - // fDeviceToViewDepth details found in ffx_fsr2.cpp + // fDeviceToViewDepth details found in ffx_fsr3upscaler.cpp return (fDeviceToViewDepth[1] / (fDeviceDepth - fDeviceToViewDepth[0])); } @@ -483,7 +484,7 @@ FfxFloat32x3 GetViewSpacePositionInMeters(FfxInt32x2 iViewportPos, FfxInt32x2 iV FfxFloat32 GetMaxDistanceInMeters() { -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH return GetViewSpaceDepth(0.0f) * ViewSpaceToMetersFactor(); #else return GetViewSpaceDepth(1.0f) * ViewSpaceToMetersFactor(); @@ -495,7 +496,7 @@ FfxFloat32x3 PrepareRgb(FfxFloat32x3 fRgb, FfxFloat32 fExposure, FfxFloat32 fPre fRgb /= fPreExposure; fRgb *= fExposure; - fRgb = clamp(fRgb, 0.0f, FSR2_FP16_MAX); + fRgb = clamp(fRgb, 0.0f, FSR3UPSCALER_FP16_MAX); return fRgb; } @@ -562,4 +563,4 @@ FfxFloat32 PointToPlaneDistance(PlaneData plane, FfxFloat32x3 fPoint) #endif // #if defined(FFX_GPU) -#endif //!defined(FFX_FSR2_COMMON_H) +#endif //!defined(FFX_FSR3UPSCALER_COMMON_H) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta new file mode 100644 index 0000000..2ebe2aa --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_common.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 6a638bec681caac4fa8e2ca198726694 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h similarity index 85% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h index c63f182..d26cf23 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_compute_luminance_pyramid.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,24 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. + FFX_GROUPSHARED FfxUInt32 spdCounter; +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ + SPD_IncreaseAtomicCounter(spdCounter); +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return spdCounter; +} + +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + SPD_ResetAtomicCounter(); +} + #ifndef SPD_PACKED_ONLY FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; @@ -36,7 +52,7 @@ FfxFloat32x4 SpdLoadSourceImage(FfxFloat32x2 tex, FfxUInt32 slice) fRgb /= PreExposure(); //compute log luma - const FfxFloat32 fLogLuma = log(ffxMax(FSR2_EPSILON, RGBToLuma(fRgb))); + const FfxFloat32 fLogLuma = log(ffxMax(FSR3UPSCALER_EPSILON, RGBToLuma(fRgb))); // Make sure out of screen pixels contribute no value to the end result const FfxFloat32 result = all(FFX_LESS_THAN(tex, RenderSize())) ? fLogLuma : 0.0f; @@ -74,21 +90,6 @@ void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 } } -void SpdIncreaseAtomicCounter(FfxUInt32 slice) -{ - SPD_IncreaseAtomicCounter(spdCounter); -} - -FfxUInt32 SpdGetAtomicCounter() -{ - return spdCounter; -} - -void SpdResetAtomicCounter(FfxUInt32 slice) -{ - SPD_ResetAtomicCounter(); -} - FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) { return FfxFloat32x4( @@ -112,40 +113,24 @@ FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFl // define fetch and store functions Packed #if FFX_HALF -#error Callback must be implemented FFX_GROUPSHARED FfxFloat16x2 spdIntermediateRG[16][16]; FFX_GROUPSHARED FfxFloat16x2 spdIntermediateBA[16][16]; FfxFloat16x4 SpdLoadSourceImageH(FfxFloat32x2 tex, FfxUInt32 slice) { - return FfxFloat16x4(imgDst[0][FfxFloat32x3(tex, slice)]); + return FfxFloat16x4(0, 0, 0, 0); } + FfxFloat16x4 SpdLoadH(FfxInt32x2 p, FfxUInt32 slice) { - return FfxFloat16x4(imgDst6[FfxUInt32x3(p, slice)]); + return FfxFloat16x4(0, 0, 0, 0); } + void SpdStoreH(FfxInt32x2 p, FfxFloat16x4 value, FfxUInt32 mip, FfxUInt32 slice) { - if (index == LumaMipLevelToUse() || index == 5) - { - imgDst6[FfxUInt32x3(p, slice)] = FfxFloat32x4(value); - return; - } - imgDst[mip + 1][FfxUInt32x3(p, slice)] = FfxFloat32x4(value); -} -void SpdIncreaseAtomicCounter(FfxUInt32 slice) -{ - InterlockedAdd(rw_spd_global_atomic[FfxInt16x2(0, 0)].counter[slice], 1, spdCounter); -} -FfxUInt32 SpdGetAtomicCounter() -{ - return spdCounter; -} -void SpdResetAtomicCounter(FfxUInt32 slice) -{ - rw_spd_global_atomic[FfxInt16x2(0, 0)].counter[slice] = 0; } + FfxFloat16x4 SpdLoadIntermediateH(FfxUInt32 x, FfxUInt32 y) { return FfxFloat16x4( @@ -154,18 +139,20 @@ FfxFloat16x4 SpdLoadIntermediateH(FfxUInt32 x, FfxUInt32 y) spdIntermediateBA[x][y].x, spdIntermediateBA[x][y].y); } + void SpdStoreIntermediateH(FfxUInt32 x, FfxUInt32 y, FfxFloat16x4 value) { spdIntermediateRG[x][y] = value.xy; spdIntermediateBA[x][y] = value.zw; } + FfxFloat16x4 SpdReduce4H(FfxFloat16x4 v0, FfxFloat16x4 v1, FfxFloat16x4 v2, FfxFloat16x4 v3) { return (v0 + v1 + v2 + v3) * FfxFloat16(0.25); } #endif -#include "ffx_spd.h" +#include "spd/ffx_spd.h" void ComputeAutoExposure(FfxUInt32x3 WorkGroupId, FfxUInt32 LocalThreadIndex) { @@ -186,4 +173,4 @@ void ComputeAutoExposure(FfxUInt32x3 WorkGroupId, FfxUInt32 LocalThreadIndex) FfxUInt32(WorkGroupId.z), FfxUInt32x2(WorkGroupOffset())); #endif -} \ No newline at end of file +} diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta new file mode 100644 index 0000000..9f1d2ab --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_compute_luminance_pyramid.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 61bd10363d44ee2478461c9e9efbcb67 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h similarity index 97% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h index fa4c975..53763c8 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_depth_clip.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_DEPTH_CLIP_H -#define FFX_FSR2_DEPTH_CLIP_H + +#ifndef FFX_FSR3UPSCALER_DEPTH_CLIP_H +#define FFX_FSR3UPSCALER_DEPTH_CLIP_H FFX_STATIC const FfxFloat32 DepthClipBaseScale = 4.0f; @@ -48,7 +49,7 @@ FfxFloat32 ComputeDepthClip(FfxFloat32x2 fUvSample, FfxFloat32 fCurrentDepthSamp if (fDepthDiff > 0.0f) { -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH const FfxFloat32 fPlaneDepth = ffxMin(fPrevDepthSample, fCurrentDepthSample); #else const FfxFloat32 fPlaneDepth = ffxMax(fPrevDepthSample, fCurrentDepthSample); @@ -243,7 +244,7 @@ void DepthClip(FfxInt32x2 iPxPos) StorePreparedInputColor(iPxPos, FfxFloat32x4(fPreparedYCoCg, fDepthClip)); // Compute dilated reactive mask -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS FfxInt32x2 iSamplePos = iPxPos; #else FfxInt32x2 iSamplePos = ComputeHrPosFromLrPos(iPxPos); @@ -255,4 +256,4 @@ void DepthClip(FfxInt32x2 iPxPos) PreProcessReactiveMasks(iPxPos, ffxMax(fTemporalMotionDifference, fMotionDivergence)); } -#endif //!defined( FFX_FSR2_DEPTH_CLIPH ) \ No newline at end of file +#endif //!defined( FFX_FSR3UPSCALER_DEPTH_CLIPH ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta new file mode 100644 index 0000000..21fe627 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_depth_clip.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 7c662249d70c4434da4f2da00e432c38 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h similarity index 91% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h index 8347fa8..e1a0d06 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_lock.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,14 +19,15 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_LOCK_H -#define FFX_FSR2_LOCK_H + +#ifndef FFX_FSR3UPSCALER_LOCK_H +#define FFX_FSR3UPSCALER_LOCK_H void ClearResourcesForNextFrame(in FfxInt32x2 iPxHrPos) { if (all(FFX_LESS_THAN(iPxHrPos, FfxInt32x2(RenderSize())))) { -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH const FfxUInt32 farZ = 0x0; #else const FfxUInt32 farZ = 0x3f800000; @@ -42,7 +43,7 @@ FfxBoolean ComputeThinFeatureConfidence(FfxInt32x2 pos) FfxFloat32 fNucleus = LoadLockInputLuma(pos); FfxFloat32 similar_threshold = 1.05f; - FfxFloat32 dissimilarLumaMin = FSR2_FLT_MAX; + FfxFloat32 dissimilarLumaMin = FSR3UPSCALER_FLT_MAX; FfxFloat32 dissimilarLumaMax = 0; /* @@ -109,7 +110,7 @@ void ComputeLock(FfxInt32x2 iPxLrPos) StoreNewLocks(ComputeHrPosFromLrPos(iPxLrPos), 1.f); } - ClearResourcesForNextFrame(iPxLrPos); + // ClearResourcesForNextFrame(iPxLrPos); } -#endif // FFX_FSR2_LOCK_H +#endif // FFX_FSR3UPSCALER_LOCK_H diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta new file mode 100644 index 0000000..38a5a57 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_lock.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: c7e9f53dd040b2645af5ccd936a94b0e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h similarity index 91% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h index cee9e14..3709113 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_postprocess_lock_status.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_POSTPROCESS_LOCK_STATUS_H -#define FFX_FSR2_POSTPROCESS_LOCK_STATUS_H + +#ifndef FFX_FSR3UPSCALER_POSTPROCESS_LOCK_STATUS_H +#define FFX_FSR3UPSCALER_POSTPROCESS_LOCK_STATUS_H FfxFloat32x4 WrapShadingChangeLuma(FfxInt32x2 iPxSample) { @@ -34,7 +35,7 @@ FFX_MIN16_F4 WrapShadingChangeLuma(FFX_MIN16_I2 iPxSample) } #endif -#if FFX_FSR2_OPTION_POSTPROCESSLOCKSTATUS_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_POSTPROCESSLOCKSTATUS_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBilinearSamplesMin16(FetchShadingChangeLumaSamples, WrapShadingChangeLuma) #else DeclareCustomFetchBicubicSamples(FetchShadingChangeLumaSamples, WrapShadingChangeLuma) @@ -49,7 +50,7 @@ FfxFloat32 GetShadingChangeLuma(FfxInt32x2 iPxHrPos, FfxFloat32x2 fUvCoord) fShadingChangeLuma = Exposure() * exp(ShadingChangeLumaSample(fUvCoord, LumaMipDimensions()).x); #else - const FfxFloat32 fDiv = FfxFloat32(2 << LumaMipLevelToUse()); + const FfxFloat32 fDiv = FfxFloat32(2u << LumaMipLevelToUse()); FfxInt32x2 iMipRenderSize = FfxInt32x2(RenderSize() / fDiv); fUvCoord = ClampUv(fUvCoord, iMipRenderSize, LumaMipDimensions()); @@ -103,4 +104,4 @@ void UpdateLockStatus(AccumulationPassCommonParams params, fLockContributionThisFrame = ffxSaturate(ffxSaturate(fLifetimeContribution * 4.0f) * fShadingChangeContribution); } -#endif //!defined( FFX_FSR2_POSTPROCESS_LOCK_STATUS_H ) +#endif //!defined( FFX_FSR3UPSCALER_POSTPROCESS_LOCK_STATUS_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta new file mode 100644 index 0000000..f8b5616 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_postprocess_lock_status.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 67a8b72ceb93d634f883b086fdccb348 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h similarity index 93% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h index d9006cd..77619a5 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_rcas.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,16 +19,18 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#define GROUP_SIZE 8 +#define GROUP_SIZE 8 #define FSR_RCAS_DENOISE 1 +#include "ffx_core.h" + void WriteUpscaledOutput(FFX_MIN16_U2 iPxHrPos, FfxFloat32x3 fUpscaledColor) { StoreUpscaledOutput(FFX_MIN16_I2(iPxHrPos), fUpscaledColor); } -#define FSR_RCAS_F +#define FSR_RCAS_F 1 FfxFloat32x4 FsrRcasLoadF(FfxInt32x2 p) { FfxFloat32x4 fColor = LoadRCAS_Input(p); @@ -37,11 +39,9 @@ FfxFloat32x4 FsrRcasLoadF(FfxInt32x2 p) return fColor; } - void FsrRcasInputF(inout FfxFloat32 r, inout FfxFloat32 g, inout FfxFloat32 b) {} -#include "ffx_fsr1.h" - +#include "fsr1/ffx_fsr1.h" void CurrFilter(FFX_MIN16_U2 pos) { diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta new file mode 100644 index 0000000..7a53a1f --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 692efb7cec0df67408a583a7ff34146a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h similarity index 91% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h index e9ccc4b..a822dfc 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_reconstruct_dilated_velocity_and_previous_depth.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H -#define FFX_FSR2_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H + +#ifndef FFX_FSR3UPSCALER_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H +#define FFX_FSR3UPSCALER_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H void ReconstructPrevDepth(FfxInt32x2 iPxPos, FfxFloat32 fDepth, FfxFloat32x2 fMotionVector, FfxInt32x2 iPxDepthSize) { @@ -83,7 +84,7 @@ void FindNearestDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxIn if (IsOnScreen(iPos, iPxSize)) { FfxFloat32 fNdDepth = depth[iSampleIndex]; -#if FFX_FSR2_OPTION_INVERTED_DEPTH +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH if (fNdDepth > fNearestDepth) { #else if (fNdDepth < fNearestDepth) { @@ -105,7 +106,7 @@ FfxFloat32 ComputeLockInputLuma(FfxInt32x2 iPxLrPos) fRgb /= PreExposure(); fRgb *= Exposure(); -#if FFX_FSR2_OPTION_HDR_COLOR_INPUT +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT fRgb = Tonemap(fRgb); #endif @@ -122,7 +123,7 @@ void ReconstructAndDilate(FfxInt32x2 iPxLrPos) FindNearestDepth(iPxLrPos, RenderSize(), fDilatedDepth, iNearestDepthCoord); -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS FfxInt32x2 iSamplePos = iPxLrPos; FfxInt32x2 iMotionVectorPos = iNearestDepthCoord; #else @@ -142,4 +143,4 @@ void ReconstructAndDilate(FfxInt32x2 iPxLrPos) } -#endif //!defined( FFX_FSR2_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H ) +#endif //!defined( FFX_FSR3UPSCALER_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta new file mode 100644 index 0000000..78ced0d --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reconstruct_dilated_velocity_and_previous_depth.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: c8b3854bad30a8b40babc5a9805f294e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h similarity index 77% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h index f7f3961..29b7584 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_reproject.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,11 +19,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_REPROJECT_H -#define FFX_FSR2_REPROJECT_H -#ifndef FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE -#define FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE 0 // Reference +#ifndef FFX_FSR3UPSCALER_REPROJECT_H +#define FFX_FSR3UPSCALER_REPROJECT_H + +#ifndef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE 0 // Reference #endif FfxFloat32x4 WrapHistory(FfxInt32x2 iPxSample) @@ -39,12 +40,12 @@ FFX_MIN16_F4 WrapHistory(FFX_MIN16_I2 iPxSample) #endif -#if FFX_FSR2_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBicubicSamplesMin16(FetchHistorySamples, WrapHistory) -DeclareCustomTextureSampleMin16(HistorySample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) +DeclareCustomTextureSampleMin16(HistorySample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) #else DeclareCustomFetchBicubicSamples(FetchHistorySamples, WrapHistory) -DeclareCustomTextureSample(HistorySample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) +DeclareCustomTextureSample(HistorySample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) #endif FfxFloat32x4 WrapLockStatus(FfxInt32x2 iPxSample) @@ -63,7 +64,7 @@ FFX_MIN16_F4 WrapLockStatus(FFX_MIN16_I2 iPxSample) #endif #if 1 -#if FFX_FSR2_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBilinearSamplesMin16(FetchLockStatusSamples, WrapLockStatus) DeclareCustomTextureSampleMin16(LockStatusSample, Bilinear, FetchLockStatusSamples) #else @@ -71,18 +72,18 @@ DeclareCustomFetchBilinearSamples(FetchLockStatusSamples, WrapLockStatus) DeclareCustomTextureSample(LockStatusSample, Bilinear, FetchLockStatusSamples) #endif #else -#if FFX_FSR2_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF +#if FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF && FFX_HALF DeclareCustomFetchBicubicSamplesMin16(FetchLockStatusSamples, WrapLockStatus) -DeclareCustomTextureSampleMin16(LockStatusSample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) +DeclareCustomTextureSampleMin16(LockStatusSample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) #else DeclareCustomFetchBicubicSamples(FetchLockStatusSamples, WrapLockStatus) -DeclareCustomTextureSample(LockStatusSample, FFX_FSR2_GET_LANCZOS_SAMPLER1D(FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) +DeclareCustomTextureSample(LockStatusSample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchLockStatusSamples) #endif #endif FfxFloat32x2 GetMotionVector(FfxInt32x2 iPxHrPos, FfxFloat32x2 fHrUv) { -#if FFX_FSR2_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS FfxFloat32x2 fDilatedMotionVector = LoadDilatedMotionVector(FFX_MIN16_I2(fHrUv * RenderSize())); #else FfxFloat32x2 fDilatedMotionVector = LoadInputMotionVector(iPxHrPos); @@ -133,4 +134,4 @@ LockState ReprojectHistoryLockStatus(const AccumulationPassCommonParams params, return state; } -#endif //!defined( FFX_FSR2_REPROJECT_H ) +#endif //!defined( FFX_FSR3UPSCALER_REPROJECT_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta new file mode 100644 index 0000000..ea2e14d --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_reproject.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 9d893016eebb2564f9a66b80afb0849f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h new file mode 100644 index 0000000..d98cfcc --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h @@ -0,0 +1,104 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#ifndef FFX_FSR3UPSCALER_RESOURCES_H +#define FFX_FSR3UPSCALER_RESOURCES_H + +#if defined(FFX_CPU) || defined(FFX_GPU) +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_NULL 0 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY 1 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_COLOR 2 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS 3 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_DEPTH 4 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_EXPOSURE 5 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK 6 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK 7 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH 8 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 9 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_DEPTH 10 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR 11 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_STATUS 12 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_NEW_LOCKS 13 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR 14 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY 15 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 16 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LANCZOS_LUT 17 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT 18 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT 19 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_RCAS_INPUT 20 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_STATUS_1 21 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_STATUS_2 22 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_1 23 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_2 24 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_REACTIVITY 25 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_TRANSPARENCY_AND_COMPOSITION 26 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT 27 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS 28 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE 29 // same as FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0 29 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_1 30 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_2 31 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_3 32 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 33 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_5 34 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_6 35 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_7 36 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_8 37 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_9 38 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_10 39 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_11 40 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12 41 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_EXPOSURE 42 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTO_EXPOSURE 43 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTOREACTIVE 44 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTOCOMPOSITION_DEPRECATED 45 + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR 46 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR 47 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_1 48 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_1 49 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_PRE_ALPHA_COLOR_2 50 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREV_POST_ALPHA_COLOR_2 51 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREVIOUS_DILATED_MOTION_VECTORS 52 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY_1 53 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY_2 54 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA 55 + +// Shading change detection mip level setting, value must be in the range [FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0, FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12] +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 +#define FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL (FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE - FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE) + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT 56 + +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_FSR3UPSCALER 0 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_SPD 1 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_RCAS 2 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_GENREACTIVE 3 + +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_TONEMAP 1 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP 2 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_THRESHOLD 4 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX 8 + +#endif // #if defined(FFX_CPU) || defined(FFX_GPU) + +#endif //!defined( FFX_FSR3UPSCALER_RESOURCES_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta new file mode 100644 index 0000000..24cdbd2 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_resources.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: b5a95a38dcfaf3946a5095bbbc42939a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h similarity index 96% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h index f94f40a..d33f70c 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_sample.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_SAMPLE_H -#define FFX_FSR2_SAMPLE_H + +#ifndef FFX_FSR3UPSCALER_SAMPLE_H +#define FFX_FSR3UPSCALER_SAMPLE_H // suppress warnings #ifdef FFX_HLSL @@ -127,7 +128,7 @@ FFX_MIN16_F4 Bilinear(FetchedBilinearSamplesMin16 BilinearSamples, FFX_MIN16_F2 FfxFloat32 Lanczos2NoClamp(FfxFloat32 x) { const FfxFloat32 PI = 3.141592653589793f; // TODO: share SDK constants - return abs(x) < FSR2_EPSILON ? 1.f : (sin(PI * x) / (PI * x)) * (sin(0.5f * PI * x) / (0.5f * PI * x)); + return abs(x) < FSR3UPSCALER_EPSILON ? 1.f : (sin(PI * x) / (PI * x)) * (sin(0.5f * PI * x) / (0.5f * PI * x)); } FfxFloat32 Lanczos2(FfxFloat32 x) @@ -142,7 +143,7 @@ FfxFloat32 Lanczos2(FfxFloat32 x) FFX_MIN16_F Lanczos2NoClamp(FFX_MIN16_F x) { const FFX_MIN16_F PI = FFX_MIN16_F(3.141592653589793f); // TODO: share SDK constants - return abs(x) < FFX_MIN16_F(FSR2_EPSILON) ? FFX_MIN16_F(1.f) : (sin(PI * x) / (PI * x)) * (sin(FFX_MIN16_F(0.5f) * PI * x) / (FFX_MIN16_F(0.5f) * PI * x)); + return abs(x) < FFX_MIN16_F(FSR3UPSCALER_EPSILON) ? FFX_MIN16_F(1.f) : (sin(PI * x) / (PI * x)) * (sin(FFX_MIN16_F(0.5f) * PI * x) / (FFX_MIN16_F(0.5f) * PI * x)); } #endif @@ -594,12 +595,12 @@ FFX_MIN16_I2 ClampCoord(FFX_MIN16_I2 iPxSample, FFX_MIN16_I2 iPxOffset, FFX_MIN1 return fColorXY; \ } -#define FFX_FSR2_CONCAT_ID(x, y) x ## y -#define FFX_FSR2_CONCAT(x, y) FFX_FSR2_CONCAT_ID(x, y) -#define FFX_FSR2_SAMPLER_1D_0 Lanczos2 -#define FFX_FSR2_SAMPLER_1D_1 Lanczos2LUT -#define FFX_FSR2_SAMPLER_1D_2 Lanczos2Approx +#define FFX_FSR3UPSCALER_CONCAT_ID(x, y) x ## y +#define FFX_FSR3UPSCALER_CONCAT(x, y) FFX_FSR3UPSCALER_CONCAT_ID(x, y) +#define FFX_FSR3UPSCALER_SAMPLER_1D_0 Lanczos2 +#define FFX_FSR3UPSCALER_SAMPLER_1D_1 Lanczos2LUT +#define FFX_FSR3UPSCALER_SAMPLER_1D_2 Lanczos2Approx -#define FFX_FSR2_GET_LANCZOS_SAMPLER1D(x) FFX_FSR2_CONCAT(FFX_FSR2_SAMPLER_1D_, x) +#define FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(x) FFX_FSR3UPSCALER_CONCAT(FFX_FSR3UPSCALER_SAMPLER_1D_, x) -#endif //!defined( FFX_FSR2_SAMPLE_H ) +#endif //!defined( FFX_FSR3UPSCALER_SAMPLE_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta new file mode 100644 index 0000000..1a46376 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_sample.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: dcb900c9deecd06419a8a4c10c305890 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h similarity index 99% rename from Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h index 101b75d..2d446bb 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr2_tcr_autogen.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h @@ -52,7 +52,7 @@ FFX_MIN16_F ComputeAutoTC_01(FFX_MIN16_I2 uDispatchThreadId, FFX_MIN16_I2 iPrevI FFX_MIN16_F retVal = FFX_MIN16_F(ffxSaturate(dot(abs(abs(Y - X) - abs(W - Z)), FfxFloat32x3(1, 1, 1)))); // cleanup very small values - retVal = (retVal < getTcThreshold()) ? FFX_MIN16_F(0.0f) : FFX_MIN16_F(1.f); + retVal = (retVal < TcThreshold()) ? FFX_MIN16_F(0.0f) : FFX_MIN16_F(1.f); return retVal; } diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta new file mode 100644 index 0000000..99d54e7 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_tcr_autogen.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: f01d5a8fbd1f34a4ea8d971755a21b6c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h similarity index 85% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h index abdb888..47e7ccf 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_fsr2_upsample.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,8 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifndef FFX_FSR2_UPSAMPLE_H -#define FFX_FSR2_UPSAMPLE_H + +#ifndef FFX_FSR3UPSCALER_UPSAMPLE_H +#define FFX_FSR3UPSCALER_UPSAMPLE_H FFX_STATIC const FfxUInt32 iLanczos2SampleCount = 16; @@ -35,18 +36,18 @@ void Deringing(RectificationBoxMin16 clippingBox, FFX_PARAMETER_INOUT FFX_MIN16_ } #endif -#ifndef FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE -#define FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE 2 // Approximate +#ifndef FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE 2 // Approximate #endif FfxFloat32 GetUpsampleLanczosWeight(FfxFloat32x2 fSrcSampleOffset, FfxFloat32 fKernelWeight) { FfxFloat32x2 fSrcSampleOffsetBiased = fSrcSampleOffset * fKernelWeight.xx; -#if FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE +#if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE FfxFloat32 fSampleWeight = Lanczos2(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT FfxFloat32 fSampleWeight = Lanczos2_UseLUT(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE FfxFloat32 fSampleWeight = Lanczos2ApproxSq(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); #else #error "Invalid Lanczos type" @@ -58,11 +59,11 @@ FfxFloat32 GetUpsampleLanczosWeight(FfxFloat32x2 fSrcSampleOffset, FfxFloat32 fK FFX_MIN16_F GetUpsampleLanczosWeight(FFX_MIN16_F2 fSrcSampleOffset, FFX_MIN16_F fKernelWeight) { FFX_MIN16_F2 fSrcSampleOffsetBiased = fSrcSampleOffset * fKernelWeight.xx; -#if FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE +#if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE FFX_MIN16_F fSampleWeight = Lanczos2(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT FFX_MIN16_F fSampleWeight = Lanczos2_UseLUT(length(fSrcSampleOffsetBiased)); -#elif FFX_FSR2_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE FFX_MIN16_F fSampleWeight = Lanczos2ApproxSq(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); // To Test: Save reciproqual sqrt compute @@ -85,16 +86,16 @@ FfxFloat32 ComputeMaxKernelWeight() { FfxFloat32x4 ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT RectificationBox clippingBox, FfxFloat32 fReactiveFactor) { - #if FFX_FSR2_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF - #include "ffx_fsr2_force16_begin.h" + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF + #include "ffx_fsr3upscaler_force16_begin.h" #endif // We compute a sliced lanczos filter with 2 lobes (other slices are accumulated temporaly) FfxFloat32x2 fDstOutputPos = FfxFloat32x2(params.iPxHrPos) + FFX_BROADCAST_FLOAT32X2(0.5f); // Destination resolution output pixel center position FfxFloat32x2 fSrcOutputPos = fDstOutputPos * DownscaleFactor(); // Source resolution output pixel center position FfxInt32x2 iSrcInputPos = FfxInt32x2(floor(fSrcOutputPos)); // TODO: what about weird upscale factors... - #if FFX_FSR2_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF - #include "ffx_fsr2_force16_end.h" + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF + #include "ffx_fsr3upscaler_force16_end.h" #endif FfxFloat32x3 fSamples[iLanczos2SampleCount]; @@ -174,9 +175,9 @@ FfxFloat32x4 ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams p RectificationBoxComputeVarianceBoxData(clippingBox); - fColorAndWeight.w *= FfxFloat32(fColorAndWeight.w > FSR2_EPSILON); + fColorAndWeight.w *= FfxFloat32(fColorAndWeight.w > FSR3UPSCALER_EPSILON); - if (fColorAndWeight.w > FSR2_EPSILON) { + if (fColorAndWeight.w > FSR3UPSCALER_EPSILON) { // Normalize for deringing (we need to compare colors) fColorAndWeight.xyz = fColorAndWeight.xyz / fColorAndWeight.w; fColorAndWeight.w *= fUpsampleLanczosWeightScale; @@ -184,11 +185,11 @@ FfxFloat32x4 ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams p Deringing(clippingBox, fColorAndWeight.xyz); } - #if FFX_FSR2_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF - #include "ffx_fsr2_force16_end.h" + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF && FFX_HALF + #include "ffx_fsr3upscaler_force16_end.h" #endif return fColorAndWeight; } -#endif //!defined( FFX_FSR2_UPSAMPLE_H ) +#endif //!defined( FFX_FSR3UPSCALER_UPSAMPLE_H ) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta new file mode 100644 index 0000000..e4153a0 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/ffx_fsr3upscaler_upsample.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 3e7832c4a9154414f9eaa125acfe6cd5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta new file mode 100644 index 0000000..731c94f --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09438bc445e66204f970dc99ca8dae5a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FSR2/shaders/ffx_fsr1.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h similarity index 97% rename from Assets/Resources/FSR2/shaders/ffx_fsr1.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h index 1ac23cf..e780995 100644 --- a/Assets/Resources/FSR2/shaders/ffx_fsr1.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,9 +19,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wunused-variable" -#endif + +/// @defgroup FfxGPUFsr1 FidelityFX FSR1 +/// FidelityFX Super Resolution 1 GPU documentation +/// +/// @ingroup FfxGPUEffects /// Setup required constant values for EASU (works on CPU or GPU). /// @@ -36,7 +38,7 @@ /// @param [in] outputSizeInPixelsX The display resolution which the input image gets upscaled to in X dimension. /// @param [in] outputSizeInPixelsY The display resolution which the input image gets upscaled to in Y dimension. /// -/// @ingroup FSR1 +/// @ingroup FfxGPUFsr1 FFX_STATIC void ffxFsrPopulateEasuConstants( FFX_PARAMETER_INOUT FfxUInt32x4 con0, FFX_PARAMETER_INOUT FfxUInt32x4 con1, @@ -102,7 +104,7 @@ FFX_STATIC void ffxFsrPopulateEasuConstants( /// @param [in] inputOffsetInPixelsX The input image offset in the X dimension into the resource containing it (useful for dynamic resolution). /// @param [in] inputOffsetInPixelsY The input image offset in the Y dimension into the resource containing it (useful for dynamic resolution). /// -/// @ingroup FSR1 +/// @ingroup FfxGPUFsr1 FFX_STATIC void ffxFsrPopulateEasuConstantsOffset( FFX_PARAMETER_INOUT FfxUInt32x4 con0, FFX_PARAMETER_INOUT FfxUInt32x4 con1, @@ -329,7 +331,7 @@ void ffxFsrEasuFloat( // Normalize with approximation, and cleanup close to zero. FfxFloat32x2 dir2 = dir * dir; FfxFloat32 dirR = dir2.x + dir2.y; - FfxUInt32 zro = dirR < FfxFloat32(1.0 / 32768.0); + FfxBoolean zro = dirR < FfxFloat32(1.0 / 32768.0); dirR = ffxApproximateReciprocalSquareRoot(dirR); dirR = zro ? FfxFloat32(1.0) : dirR; dir.x = zro ? FfxFloat32(1.0) : dir.x; @@ -457,7 +459,7 @@ void FsrEasuSetH( FfxFloat16x2 dirX = lD - lB; dirPX += dirX * w; - lenX = ffxSaturate(abs(dirX) * lenX); + lenX = FfxFloat16x2(ffxSaturate(abs(dirX) * lenX)); lenX *= lenX; lenP += lenX * w; FfxFloat16x2 ec = lE - lC; @@ -466,7 +468,7 @@ void FsrEasuSetH( lenY = ffxReciprocalHalf(lenY); FfxFloat16x2 dirY = lE - lA; dirPY += dirY * w; - lenY = ffxSaturate(abs(dirY) * lenY); + lenY = FfxFloat16x2(ffxSaturate(abs(dirY) * lenY)); lenY *= lenY; lenP += lenY * w; } @@ -526,8 +528,8 @@ void FsrEasuH( dirPY, lenP, ppp, - FfxUInt32(true), - FfxUInt32(false), + FfxBoolean(true), + FfxBoolean(false), FfxFloat16x2(bL, cL), FfxFloat16x2(eL, fL), FfxFloat16x2(fL, gL), @@ -537,8 +539,8 @@ void FsrEasuH( dirPY, lenP, ppp, - FfxUInt32(false), - FfxUInt32(true), + FfxBoolean(false), + FfxBoolean(true), FfxFloat16x2(fL, gL), FfxFloat16x2(iL, jL), FfxFloat16x2(jL, kL), @@ -549,7 +551,7 @@ void FsrEasuH( FfxFloat16x2 dir2 = dir * dir; FfxFloat16 dirR = dir2.x + dir2.y; - FfxBoolean zro = FfxBoolean(dirR < FFX_BROADCAST_FLOAT16(1.0 / 32768.0)); + FfxUInt32 zro = FfxUInt32(dirR < FFX_BROADCAST_FLOAT16(1.0 / 32768.0)); dirR = ffxApproximateReciprocalSquareRootHalf(dirR); dirR = (zro > 0) ? FFX_BROADCAST_FLOAT16(1.0) : dirR; dir.x = (zro > 0) ? FFX_BROADCAST_FLOAT16(1.0) : dir.x; @@ -834,7 +836,7 @@ void FsrEasuH( FfxFloat16 hL=hB*FFX_BROADCAST_FLOAT16(0.5)+(hR*FFX_BROADCAST_FLOAT16(0.5)+hG); // Noise detection. FfxFloat16 nz=FFX_BROADCAST_FLOAT16(0.25)*bL+FFX_BROADCAST_FLOAT16(0.25)*dL+FFX_BROADCAST_FLOAT16(0.25)*fL+FFX_BROADCAST_FLOAT16(0.25)*hL-eL; - nz=ffxSaturate(abs(nz)*ffxApproximateReciprocalMediumHalf(ffxMax3Half(ffxMax3Half(bL,dL,eL),fL,hL)-ffxMin3Half(ffxMin3Half(bL,dL,eL),fL,hL))); + nz=FfxFloat16(ffxSaturate(abs(nz)*ffxApproximateReciprocalMediumHalf(ffxMax3Half(ffxMax3Half(bL,dL,eL),fL,hL)-ffxMin3Half(ffxMin3Half(bL,dL,eL),fL,hL)))); nz=FFX_BROADCAST_FLOAT16(-0.5)*nz+FFX_BROADCAST_FLOAT16(1.0); // Min and max of ring. FfxFloat16 mn4R=min(ffxMin3Half(bR,dR,fR),hR); @@ -1175,7 +1177,7 @@ void FsrEasuH( FfxFloat16x3 b = n + FFX_BROADCAST_FLOAT16X3(1.0 / 255.0); b = b * b; FfxFloat16x3 r = (c - b) * ffxApproximateReciprocalMediumHalf(a - b); - c = ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 255.0)); + c = FfxFloat16x3(ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 255.0))); } //------------------------------------------------------------------------------------------------------------------------------ void FsrTepdC10H(inout FfxFloat16x3 c, FfxFloat16 dit) @@ -1186,7 +1188,7 @@ void FsrEasuH( FfxFloat16x3 b = n + FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0); b = b * b; FfxFloat16x3 r = (c - b) * ffxApproximateReciprocalMediumHalf(a - b); - c = ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0)); + c = FfxFloat16x3(ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0))); } //============================================================================================================================== // This computes dither for positions 'p' and 'p+{8,0}'. @@ -1222,9 +1224,9 @@ void FsrEasuH( FfxFloat16x2 rR = (cR - bR) * ffxApproximateReciprocalMediumHalf(aR - bR); FfxFloat16x2 rG = (cG - bG) * ffxApproximateReciprocalMediumHalf(aG - bG); FfxFloat16x2 rB = (cB - bB) * ffxApproximateReciprocalMediumHalf(aB - bB); - cR = ffxSaturate(nR + ffxIsGreaterThanZeroHalf(dit - rR) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); - cG = ffxSaturate(nG + ffxIsGreaterThanZeroHalf(dit - rG) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); - cB = ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); + cR = FfxFloat16x2(ffxSaturate(nR + ffxIsGreaterThanZeroHalf(dit - rR) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0))); + cG = FfxFloat16x2(ffxSaturate(nG + ffxIsGreaterThanZeroHalf(dit - rG) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0))); + cB = FfxFloat16x2(ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0))); } //------------------------------------------------------------------------------------------------------------------------------ void FsrTepdC10Hx2(inout FfxFloat16x2 cR,inout FfxFloat16x2 cG,inout FfxFloat16x2 cB,FfxFloat16x2 dit){ @@ -1243,8 +1245,8 @@ void FsrEasuH( FfxFloat16x2 rR=(cR-bR)*ffxApproximateReciprocalMediumHalf(aR-bR); FfxFloat16x2 rG=(cG-bG)*ffxApproximateReciprocalMediumHalf(aG-bG); FfxFloat16x2 rB=(cB-bB)*ffxApproximateReciprocalMediumHalf(aB-bB); - cR=ffxSaturate(nR+ffxIsGreaterThanZeroHalf(dit-rR)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0)); - cG=ffxSaturate(nG+ffxIsGreaterThanZeroHalf(dit-rG)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0)); - cB = ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 1023.0)); + cR=FfxFloat16x2(ffxSaturate(nR+ffxIsGreaterThanZeroHalf(dit-rR)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0))); + cG=FfxFloat16x2(ffxSaturate(nG+ffxIsGreaterThanZeroHalf(dit-rG)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0))); + cB=FfxFloat16x2(ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 1023.0))); } #endif diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta new file mode 100644 index 0000000..64e4ffa --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/fsr1/ffx_fsr1.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 628e23510f46ef44bbf0035ce9a63be0 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd.meta new file mode 100644 index 0000000..0b775af --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f03de1579ac3294595ae4f40106b7a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h similarity index 82% rename from com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h rename to com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h index b94f46f..6441419 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/FSR2/shaders/ffx_spd.h +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h @@ -1,7 +1,7 @@ // This file is part of the FidelityFX SDK. -// -// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved. -// +// +// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights @@ -10,7 +10,7 @@ // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -19,22 +19,42 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#ifdef FFX_CPU -FFX_STATIC void SpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, // CPU side: dispatch thread group count xy - FfxUInt32x2 workGroupOffset, // GPU side: pass in as constant - FfxUInt32x2 numWorkGroupsAndMips, // GPU side: pass in as constant - FfxUInt32x4 rectInfo, // left, top, width, height - FfxInt32 mips) // optional: if -1, calculate based on rect width and height -{ - workGroupOffset[0] = rectInfo[0] / 64; // rectInfo[0] = left - workGroupOffset[1] = rectInfo[1] / 64; // rectInfo[1] = top + +/// @defgroup FfxGPUSpd FidelityFX SPD +/// FidelityFX Single Pass Downsampler 2.0 GPU documentation +/// +/// @ingroup FfxGPUEffects + +/// Setup required constant values for SPD (CPU). +/// +/// @param [out] dispatchThreadGroupCountXY CPU side: dispatch thread group count xy. z is number of slices of the input texture +/// @param [out] workGroupOffset GPU side: pass in as constant +/// @param [out] numWorkGroupsAndMips GPU side: pass in as constant +/// @param [in] rectInfo left, top, width, height +/// @param [in] mips optional: if -1, calculate based on rect width and height +/// +/// @ingroup FfxGPUSpd +#if defined(FFX_CPU) +FFX_STATIC void ffxSpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, + FfxUInt32x2 workGroupOffset, + FfxUInt32x2 numWorkGroupsAndMips, + FfxUInt32x4 rectInfo, + FfxInt32 mips) +{ + // determines the offset of the first tile to downsample based on + // left (rectInfo[0]) and top (rectInfo[1]) of the subregion. + workGroupOffset[0] = rectInfo[0] / 64; + workGroupOffset[1] = rectInfo[1] / 64; FfxUInt32 endIndexX = (rectInfo[0] + rectInfo[2] - 1) / 64; // rectInfo[0] = left, rectInfo[2] = width FfxUInt32 endIndexY = (rectInfo[1] + rectInfo[3] - 1) / 64; // rectInfo[1] = top, rectInfo[3] = height + // we only need to dispatch as many thread groups as tiles we need to downsample + // number of tiles per slice depends on the subregion to downsample dispatchThreadGroupCountXY[0] = endIndexX + 1 - workGroupOffset[0]; dispatchThreadGroupCountXY[1] = endIndexY + 1 - workGroupOffset[1]; + // number of thread groups per slice numWorkGroupsAndMips[0] = (dispatchThreadGroupCountXY[0]) * (dispatchThreadGroupCountXY[1]); if (mips >= 0) @@ -42,29 +62,37 @@ FFX_STATIC void SpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, // CPU side numWorkGroupsAndMips[1] = FfxUInt32(mips); } else - { + { // calculate based on rect width and height FfxUInt32 resolution = ffxMax(rectInfo[2], rectInfo[3]); numWorkGroupsAndMips[1] = FfxUInt32((ffxMin(floor(log2(FfxFloat32(resolution))), FfxFloat32(12)))); } } -FFX_STATIC void SpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, // CPU side: dispatch thread group count xy - FfxUInt32x2 workGroupOffset, // GPU side: pass in as constant - FfxUInt32x2 numWorkGroupsAndMips, // GPU side: pass in as constant - FfxUInt32x4 rectInfo) // left, top, width, height +/// Setup required constant values for SPD (CPU). +/// +/// @param [out] dispatchThreadGroupCountXY CPU side: dispatch thread group count xy. z is number of slices of the input texture +/// @param [out] workGroupOffset GPU side: pass in as constant +/// @param [out] numWorkGroupsAndMips GPU side: pass in as constant +/// @param [in] rectInfo left, top, width, height +/// +/// @ingroup FfxGPUSpd +FFX_STATIC void ffxSpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, + FfxUInt32x2 workGroupOffset, + FfxUInt32x2 numWorkGroupsAndMips, + FfxUInt32x4 rectInfo) { - SpdSetup(dispatchThreadGroupCountXY, workGroupOffset, numWorkGroupsAndMips, rectInfo, -1); + ffxSpdSetup(dispatchThreadGroupCountXY, workGroupOffset, numWorkGroupsAndMips, rectInfo, -1); } -#endif // #ifdef FFX_CPU +#endif // #if defined(FFX_CPU) //============================================================================================================================== // NON-PACKED VERSION //============================================================================================================================== -#ifdef FFX_GPU -#ifdef SPD_PACKED_ONLY -// Avoid compiler error +#if defined(FFX_GPU) +#if defined(FFX_SPD_PACKED_ONLY) +// Avoid compiler errors by including default implementations of these callbacks. FfxFloat32x4 SpdLoadSourceImage(FfxInt32x2 p, FfxUInt32 slice) { return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); @@ -88,18 +116,13 @@ FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFl { return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); } -#endif // #ifdef SPD_PACKED_ONLY +#endif // #if FFX_SPD_PACKED_ONLY //_____________________________________________________________/\_______________________________________________________________ -void SpdWorkgroupShuffleBarrier() +void ffxSpdWorkgroupShuffleBarrier() { -#ifdef FFX_GLSL - barrier(); -#endif -#ifdef FFX_HLSL - GroupMemoryBarrierWithGroupSync(); -#endif + FFX_GROUP_MEMORY_BARRIER(); } // Only last active workgroup should proceed @@ -111,14 +134,14 @@ bool SpdExitWorkgroup(FfxUInt32 numWorkGroups, FfxUInt32 localInvocationIndex, F SpdIncreaseAtomicCounter(slice); } - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); return (SpdGetAtomicCounter() != (numWorkGroups - 1)); } // User defined: FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3); FfxFloat32x4 SpdReduceQuad(FfxFloat32x4 v) { -#if defined(FFX_GLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) FfxFloat32x4 v0 = v; FfxFloat32x4 v1 = subgroupQuadSwapHorizontal(v); @@ -126,7 +149,7 @@ FfxFloat32x4 SpdReduceQuad(FfxFloat32x4 v) FfxFloat32x4 v3 = subgroupQuadSwapDiagonal(v); return SpdReduce4(v0, v1, v2, v3); -#elif defined(FFX_HLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#elif defined(FFX_HLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) // requires SM6.0 FfxUInt32 quad = WaveGetLaneIndex() & (~0x3); @@ -196,7 +219,7 @@ FfxFloat32x4 SpdReduceLoadSourceImage4(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32 FfxFloat32x4 SpdReduceLoadSourceImage(FfxUInt32x2 base, FfxUInt32 slice) { -#ifdef SPD_LINEAR_SAMPLER +#if defined(SPD_LINEAR_SAMPLER) return SpdLoadSourceImage(FfxInt32x2(base), slice); #else return SpdReduceLoadSourceImage4(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); @@ -281,13 +304,13 @@ void SpdDownsampleMips_0_1_LDS(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID for (FfxUInt32 i = 0; i < 4; i++) { SpdStoreIntermediate(x, y, v[i]); - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); if (localInvocationIndex < 64) { v[i] = SpdReduceIntermediate(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x + (i % 2) * 8, y + (i / 2) * 8), v[i], 1, slice); } - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); } if (localInvocationIndex < 64) @@ -301,7 +324,7 @@ void SpdDownsampleMips_0_1_LDS(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID void SpdDownsampleMips_0_1(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) SpdDownsampleMips_0_1_LDS(x, y, workGroupID, localInvocationIndex, mip, slice); #else SpdDownsampleMips_0_1_Intrinsics(x, y, workGroupID, localInvocationIndex, mip, slice); @@ -311,7 +334,7 @@ void SpdDownsampleMips_0_1(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, Ff void SpdDownsampleMip_2(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 64) { FfxFloat32x4 v = SpdReduceIntermediate(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); @@ -340,7 +363,7 @@ void SpdDownsampleMip_2(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUI void SpdDownsampleMip_3(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 16) { // x 0 x 0 @@ -380,7 +403,7 @@ void SpdDownsampleMip_3(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUI void SpdDownsampleMip_4(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 4) { // x 0 0 0 x 0 0 0 @@ -413,7 +436,7 @@ void SpdDownsampleMip_4(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUI void SpdDownsampleMip_5(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 1) { // x x x x 0 ... @@ -470,48 +493,75 @@ void SpdDownsampleNextFour(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, Ff { if (mips <= baseMip) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_2(x, y, workGroupID, localInvocationIndex, baseMip, slice); if (mips <= baseMip + 1) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_3(x, y, workGroupID, localInvocationIndex, baseMip + 1, slice); if (mips <= baseMip + 2) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_4(x, y, workGroupID, localInvocationIndex, baseMip + 2, slice); if (mips <= baseMip + 3) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_5(workGroupID, localInvocationIndex, baseMip + 3, slice); } +/// Downsamples a 64x64 tile based on the work group id. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// +/// @ingroup FfxGPUSpd void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice) { + // compute MIP level 0 and 1 FfxUInt32x2 sub_xy = ffxRemapForWaveReduction(localInvocationIndex % 64); FfxUInt32 x = sub_xy.x + 8 * ((localInvocationIndex >> 6) % 2); FfxUInt32 y = sub_xy.y + 8 * ((localInvocationIndex >> 7)); SpdDownsampleMips_0_1(x, y, workGroupID, localInvocationIndex, mips, slice); + // compute MIP level 2, 3, 4, 5 SpdDownsampleNextFour(x, y, workGroupID, localInvocationIndex, 2, mips, slice); if (mips <= 6) return; + // increase the global atomic counter for the given slice and check if it's the last remaining thread group: + // terminate if not, continue if yes. if (SpdExitWorkgroup(numWorkGroups, localInvocationIndex, slice)) return; + // reset the global atomic counter back to 0 for the next spd dispatch SpdResetAtomicCounter(slice); - // After mip 6 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // After mip 5 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // compute MIP level 6 and 7 SpdDownsampleMips_6_7(x, y, mips, slice); + // compute MIP level 8, 9, 10, 11 SpdDownsampleNextFour(x, y, FfxUInt32x2(0, 0), localInvocationIndex, 8, mips, slice); } - +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// @param [in] workGroupOffset the work group offset. it's (0,0) in case the entire input texture is downsampled. +/// +/// @ingroup FfxGPUSpd void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice, FfxUInt32x2 workGroupOffset) { SpdDownsample(workGroupID + workGroupOffset, localInvocationIndex, mips, numWorkGroups, slice); @@ -528,13 +578,13 @@ void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxU FfxFloat16x4 SpdReduceQuadH(FfxFloat16x4 v) { -#if defined(FFX_GLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) FfxFloat16x4 v0 = v; FfxFloat16x4 v1 = subgroupQuadSwapHorizontal(v); FfxFloat16x4 v2 = subgroupQuadSwapVertical(v); FfxFloat16x4 v3 = subgroupQuadSwapDiagonal(v); return SpdReduce4H(v0, v1, v2, v3); -#elif defined(FFX_HLSL) && !defined(SPD_NO_WAVE_OPERATIONS) +#elif defined(FFX_HLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) // requires SM6.0 FfxUInt32 quad = WaveGetLaneIndex() & (~0x3); FfxFloat16x4 v0 = v; @@ -603,7 +653,7 @@ FfxFloat16x4 SpdReduceLoadSourceImage4H(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt3 FfxFloat16x4 SpdReduceLoadSourceImageH(FfxUInt32x2 base, FfxUInt32 slice) { -#ifdef SPD_LINEAR_SAMPLER +#if defined(SPD_LINEAR_SAMPLER) return SpdLoadSourceImageH(FfxInt32x2(base), slice); #else return SpdReduceLoadSourceImage4H(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); @@ -685,16 +735,16 @@ void SpdDownsampleMips_0_1_LDSH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupI if (mips <= 1) return; - for (FfxInt32 i = 0; i < 4; i++) + for (FfxUInt32 i = 0; i < 4; i++) { SpdStoreIntermediateH(x, y, v[i]); - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); if (localInvocationIndex < 64) { v[i] = SpdReduceIntermediateH(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x + (i % 2) * 8, y + (i / 2) * 8), v[i], 1, slice); } - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); } if (localInvocationIndex < 64) @@ -708,7 +758,7 @@ void SpdDownsampleMips_0_1_LDSH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupI void SpdDownsampleMips_0_1H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) SpdDownsampleMips_0_1_LDSH(x, y, workGroupID, localInvocationIndex, mips, slice); #else SpdDownsampleMips_0_1_IntrinsicsH(x, y, workGroupID, localInvocationIndex, mips, slice); @@ -718,7 +768,7 @@ void SpdDownsampleMips_0_1H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, F void SpdDownsampleMip_2H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 64) { FfxFloat16x4 v = SpdReduceIntermediateH(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); @@ -747,7 +797,7 @@ void SpdDownsampleMip_2H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxU void SpdDownsampleMip_3H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 16) { // x 0 x 0 @@ -787,7 +837,7 @@ void SpdDownsampleMip_3H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxU void SpdDownsampleMip_4H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 4) { // x 0 0 0 x 0 0 0 @@ -820,7 +870,7 @@ void SpdDownsampleMip_4H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxU void SpdDownsampleMip_5H(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) { -#ifdef SPD_NO_WAVE_OPERATIONS +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) if (localInvocationIndex < 1) { // x x x x 0 ... @@ -877,53 +927,83 @@ void SpdDownsampleNextFourH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, F { if (mips <= baseMip) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_2H(x, y, workGroupID, localInvocationIndex, baseMip, slice); if (mips <= baseMip + 1) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_3H(x, y, workGroupID, localInvocationIndex, baseMip + 1, slice); if (mips <= baseMip + 2) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_4H(x, y, workGroupID, localInvocationIndex, baseMip + 2, slice); if (mips <= baseMip + 3) return; - SpdWorkgroupShuffleBarrier(); + ffxSpdWorkgroupShuffleBarrier(); SpdDownsampleMip_5H(workGroupID, localInvocationIndex, baseMip + 3, slice); } +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// Uses half types. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// +/// @ingroup FfxGPUSpd void SpdDownsampleH(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice) { FfxUInt32x2 sub_xy = ffxRemapForWaveReduction(localInvocationIndex % 64); FfxUInt32 x = sub_xy.x + 8 * ((localInvocationIndex >> 6) % 2); FfxUInt32 y = sub_xy.y + 8 * ((localInvocationIndex >> 7)); + // compute MIP level 0 and 1 SpdDownsampleMips_0_1H(x, y, workGroupID, localInvocationIndex, mips, slice); + // compute MIP level 2, 3, 4, 5 SpdDownsampleNextFourH(x, y, workGroupID, localInvocationIndex, 2, mips, slice); if (mips < 7) return; + // increase the global atomic counter for the given slice and check if it's the last remaining thread group: + // terminate if not, continue if yes. if (SpdExitWorkgroup(numWorkGroups, localInvocationIndex, slice)) return; + // reset the global atomic counter back to 0 for the next spd dispatch SpdResetAtomicCounter(slice); - // After mip 6 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // After mip 5 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // compute MIP level 6 and 7 SpdDownsampleMips_6_7H(x, y, mips, slice); + // compute MIP level 8, 9, 10, 11 SpdDownsampleNextFourH(x, y, FfxUInt32x2(0, 0), localInvocationIndex, 8, mips, slice); } +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// Uses half types. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// @param [in] workGroupOffset the work group offset. it's (0,0) in case the entire input texture is downsampled. +/// +/// @ingroup FfxGPUSpd void SpdDownsampleH(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice, FfxUInt32x2 workGroupOffset) { SpdDownsampleH(workGroupID + workGroupOffset, localInvocationIndex, mips, numWorkGroups, slice); } #endif // #if FFX_HALF -#endif // #ifdef FFX_GPU +#endif // #if defined(FFX_GPU) diff --git a/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta new file mode 100644 index 0000000..8d4e716 --- /dev/null +++ b/com.unity.postprocessing/PostProcessing/Shaders/FSR3/shaders/fsr3upscaler/spd/ffx_spd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: face65176ee3b82498bd0b8fed0ddacd +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl b/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl index 01501ec..9259be0 100644 --- a/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl +++ b/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl @@ -27,6 +27,8 @@ #include "API/Metal.hlsl" #elif defined(SHADER_API_PSP2) #include "API/PSP2.hlsl" +#elif defined(SHADER_API_WEBGPU) + #include "API/WebGPU.hlsl" #else #include "API/OpenGL.hlsl" #endif diff --git a/com.unity.postprocessing/package.json b/com.unity.postprocessing/package.json index 6b5ef79..6d0688d 100644 --- a/com.unity.postprocessing/package.json +++ b/com.unity.postprocessing/package.json @@ -1,6 +1,6 @@ { "name": "com.unity.postprocessing", - "version": "3.3.1", + "version": "3.4.0", "displayName": "Post Processing", "unity": "2019.4", "unityRelease": "19f1", diff --git a/images/camera-ppv2.png b/images/camera-ppv2.png index 795d36fd2c61e8cfa0c4bbf56acfe5d53b25ad68..d417a13ec9ea4ed9bc2e14cc0d91a5e6c40c9de2 100644 GIT binary patch literal 53666 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 z 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 literal 75688 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 DhZX~i diff --git a/images/camera-simple.png b/images/camera-simple.png index 0b336da4a93cd70b0fc53b6df62e0eff4d441075..4c67dacbdbefbd0c2400565e4218b6c83632a0da 100644 GIT binary patch literal 91454 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 F{{Y0Z5#|5@ literal 84356 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

@cEtn1*LY0hX178-d&pH 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 Q>+rvQn)({I)NI23KWbLN9{>OV diff --git a/images/comparison.png b/images/comparison.png index 79671bff540df4ff29d4bb5ae374f2b1bfa65f87..e379f8cddc6eb3f906fcd0cccd7e95e7588a61ad 100644 GIT binary patch literal 1055873 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

-rp002QzHDMLTCSG0+a}A#fmCP~pq6n8yC7 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

Hv6y0)K}1*jd|G486n_G`%A%*#by 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ⅅaEo4 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�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

y!3?LbO^X$;gqD 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 KwCCJGR)kRlzZA4AaCMn?aOQ; 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%0DjO>@dU3PL&?AOnCO)_E$X@_BlH8U-1fa?mk6 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

3XepPv5D&A0aFQkbDymFc$+()#a>h%Vp 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⩔~DSn`LHp_0mGe?zI^`GFV9~* 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%0DR&>5uYf=T+r^ob8c`}W5mNk@N}-1lb; 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

7$IWE~gOELpkj64Kq6I4&y^vlW|o}^ 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⋘ zhSqjR+$;)0j;6`cpKrbENyHS&1>-u8)iEA|j0wQ9DqcXJX`3i)CP!)RDcZWBUPyrCX)~vM4_K~wI!ZV>2N}C)QijnMhu37n1Pd3 zxW!8_`Nl5f2HoxYwZnAcR;iO9B z1*SsFwhF~3-Dn&+M8kS=0XowvI?&!^$>8M3?s#njvr(bLP6R?lxW&=taV>_u0!HU86tQi zf6O6vU}*Edj%Zkn0NM*bph$-aP{<4!6@dNPLjr=aDO#bvLeYblqGrA@rf8ThWoAy; zi@e}2Go0h3>OCF$(XS{*9?k@1nNxviLb-|-F-k)?^_5Ot4TUEthUySh_(i0Uk*^Y&i7z`$dI=;A#mH8+zXe*jUviks%BG=$)#xiS@DAQ2if z_r4M8M8tSEpSq!Z0WQD-8mD4d%#5i{l=Mr}=|!I}F~Te>A%00jP;)>Rtcn&nVRIdA zzF<1e_+9P>q%j0yDba@jYJ==iKpT01IA&3>`uK54*+aw?6v#Ti^cZ+n+rA=)r@} ze*B{X8S0Xn)0KX9@cR(WKwdA2J`w!p&6c2pErN+0^QT;23W5Y6wA)?x z+x_n5`t0mXMR<)MxI7y*RE& zb{EUTj8U9koR;*5S-YCmi*a%6y{fgGpVvMB-4ik5M8*lPoUmiaM7?JM!V_~$P2kgA#$zylEJkACV{+PsDo3^UL2OW);r8UH8jL|sF5!Ep`sxnj6EIA7$ zLbN|pHf43hWV1<`B&3_{%OKR!7EZhvPC2L5dubqjME5&?#6F*Lltp>Uwcf-uIX^JH z9-HZ!snHZ6R6&Ms6Di>XAfD+#sGY}%x4JUvhux3d00OivoUmM zDj4_H6wE&nNT%TjExh>rXGL%}X?(H$UtOAxHyy5c3ECPHd>*W()>lH%?l?xzF0CLwru5oz6%tUx| zkt&x+%*Rbdkj~{flQ+mg7~Mwq$`#9i^#hbRA{!I{vkN#eM4%c(ciI1N^m_2B!i2T_ z3?edZu6jDT6j0YSi2}0VAOuMEGgS%-vR~QMXDr-${LSa>W^?CjA4GlXmsTp#35k{D$34!f6zcT( zMg_q)SV+^H#~#yRmO#|?Bmn?YQ@`~ryYW1o4-$BkC90mzXeE^FaSCd&7>?p4Fl49v z#`7GQQ6V*xPw1lw|fBV1u&(wip zfKm!nkag$TVtvnIjiR{i?SCz}Y_Kz_{It(^dSECXWLj{$VF`SSihL_Rn+!V(F__Y8 z9E6E)%%4#Wn;=G&MS> zSTQ}TEwfHjZXH=}ub)vw1(ZIkH?pDftK-41Obzdh_q|-q7Qg!G|0RKJ?|twc(nG=` zS;aVZ8V+N`abWB=054mp`}8A|b|)mV6NZk9qi>UrB)YS@bGT0$}4>@=v64UB1_ihbf==R-ix6`4DKt@R6=FdnN zfAMoRR&6tkhs%pQo3o9sYkDN=dV~t6p%Fk5p#>B-Y;Rs&-gyi9N%oG0*TrnV+rNJG z9K&$75tUL3Fz!|ckE4GeyK`RMZ1}k?xe5Zd8^zKI~hK#4AO{izhBQ zQ#GR{Qv!_NTpX{&CEbZd8mMHO4I$8gnMfhdf6S?w4{y5h4 zngF5-_B+Z}v1-jAx3L*yVsAkV=1roIT?&PUpNd}K6%79A?=h;>;MeiaGvy&GxCp;F zOYjz896C87Hju&5A`Zg>jGN$=kZvOkLLyoh9}@>!qSav%Zux;zjyR8kz!XIk9unQb zRWpEyoW%Gg70;pz>&Sraa6EbEo2M9{(`T^?HUf1Zl9qT9#$7X|3sb5>5dPz>GUMDh z(=eF9N)`Wj><3>~fz#21@tb($H6J~Ntyg+S_`IWh=If3~;Se{L=C3jZ*dF+UH7+uua&inrMS!!NF>L4d$uu@(>i1`E+b9{TLX1g4at``Uocx z9--)o`Y5TyJb*!`Vmbv6+I?ZOZXR=v*r+A=+*C$Ac#*MU8*({c>~}Xb*{s|6i>D-G z?%|y;@O}j3yedPQ@eHO6*1){Iu72wJj_--tknDkvm`_g$ySY|(}yNrTq5<+Wz0feQD9y%rGB%zNd=NfI)?)UHmNL1 zr#9B2$?{7C3AF`NOQ>tk9I8HqGN)QrxFl@%z99;94>LomOhOOKV2`8|Yq9ePXvSdT zLR*+kO&e9_aB9ViASp*F)#A}I~h-Toxm*z^~u0VS+C(p4tU)RrbLeQBt=}gq61-#oY z6FN@WIgOM7cW?<*3pO;dUq*MT`L*+#b!=_D&J{=sqd`!7_ z5*zN&Ie>wB)z+)NA9sWUDCjLds!nepv(MK&d2^3O>hR+Wx5-M$6us25%uTo6#sDBL ztAVZ0j{0o|Z=OF#zxD%L2$K!G>B1nO-c(H~FPlQ65JLtQ=>en5`r^uS3QYg1i&I7* zTdQS$(J%VZ-liH35;W0{V!0tL9!|)MP4LH#+EyyGV^}lOg@C?Ki_%anCbZEdW|EF% z&$_V$+L<`WiLEhxKqi5s5r|L-FkZrQb(ttjv08<&?47)^Gbs5=10jYN>e(Y5y9VYH z0!;tL!#nT3_s)Co=l8uwzxoA8qDmSZ@Ylm$W6xz4wK(pTP7&g1{8E{~>QF^G(DFN9 zu8+%le$2Y2KI6uYQbl$lN?F7gM!183JpzHrE#jw!aS70-2HAodzYaVn!XOl6Y#@b} zs{*p=ZwQx`Wyu3zX$Y#$mRC+ksA5NsPk1HOU6P=Y@5|7bBn4o>1%-n_oKe#7tC`Gri1niPyP&XUp>?TT$-gw1AIZ>nZ9TeZW@ zbLJ;ZHV)&>X-Sf8B0_avNv1!~uD^0c9KnUD3--k9 z1@kd9lJil)Mhh2vGPS($EI2yGR3Orq$4P5 z*%xUHmkub%M0%Jph=F!_c7BO=_WLc3bJkEo1S07{BY`Cd00ACDr&%wk8y}y8;$rMZ zGK$l1RxjSWbFuHc0c~sRg4uPw9?GT*u-UsRp{Xtkhsjv9*&Nr=EyFW8GGl&vODvKwand z#n5Z^$p>g9eZ|Ah8A)|oxxr6OJ&j5kd5CO|8?roQAl|NnTXRfxG7yKYNhyv^1~Bt| zh8y2KV;AaW(T#`Qu6yTPF#;lRyBKD}CDK`7nVK~)#p%NV3@;bsY4u|3LKtUY(f&*d zQ&0MoyCH9m5RJ6WXL7uAL0}K(XX~o=yM(!9H|d$6Y7W;4qvp}0uoEO7K@ zMXQzJAw7**{+DPz;D95O3Th;JdYQs_l!45ZbrsEqWPnC1&n5seRzN(GvDr05L4^Jz z4a`z8ujEd8E?gW!N;7sIsCl?~SpdT@%xg&aW81FJFtp&~n_>JSX3f|UiUR1%Qe;3{ zA{WxiTEb{_0095=NklBt=W73QhKlxzas!Obk=gz{iFP zwcF&Q;O{~h+|sX~`i+vpgkEEKnKqPXFoYD=f)uz<=2O2@?Vrp1`Jcu zmEk4h2ema-Em?^)1uWx9dWEZL55?)fZGNvff)bC?6t!D4 z=8y*K0pIAZEE(s_RK(FVf*ygG#xMci2uKE^n1Z2tlJ*D|!a8+uNIdzS!SObtGMFPu zaAXR_;Du1?ESaA7Qj`cqCuq%|V8=co4R57}7rMQ800^cR6STP@!IU|IXhRx@w;}PX zQp*>-Wcuh-iP1xJt*33d4j~TOF6L$I5OR;1Xi7}9uuq%l!PdqD0up#R=Ec|fg#xBx z@p0_vP4=}1?Mv5$E&iw(Wr#7{DJu3sUU0k8R6qb+tru42y>EH)<-w#2XjvR;Z?bA~ z=Q<)m0z+iSxAw*wGk2gET_;y75WtVTDk^<2Il_II)kYGTA{e>`&!i>*x$YtCGk$Yb z$H9bO2$0NnOc+kH+$ZKp8NirEArrfcb)8p{wzcG3A7$#{18Pnr{Ca7x3ZrlV04;T- zu6<#`Y}WYhAio0+L85Dd%bZyXrWE^uWumGECK_O2#&slgy?p+R+**rGmIsm%L}3Mk zE#qr8PEyMV0wSqtD>U4+O?`2t7Hp=qLlHN3(MstJbhd#Nkxo+%lY=G3dTcO}1k~*i zsptfS11Jm$5Zi>O$6+(UEX+s*u(UTTV|BH6+vUa{LxDrAa-i8{93g~ltX#>#;_a5t zP>#Ixn;x-bqc?2offT@x=FxZEE>qS-G%N{g@Jg08%#Z9W=3o2zx88gIy|2Ij{^w6V zhnO=K0m6>D!?@*h*__i8z|34;KxqavE!Y?jJ4>em)GyPO%5PZ6fLlfm7)@*~5PHaO zknm9iad1*0Vj{g-_`-hY6CoWjr$73@HZ=aslcT8vHiIMxo9cpVCw`}A#%u=_c|};U z((sH-p5i1Kx$c35VBMu*$e1aHyw7-K{V4m;mkm`3uVK+oYnIUtegY0eTrHr7=xITBUNyhe_zL@QI+!Yypf+_&d_{<$PS#G(UOe_19lde13IL zK2(aV;f>Bld=w4yS{_&H<+AqG8M9+`8uA^E$VrX}E5vjYm;SII6f?$nIeptjB!XI(S{73ouOx{bGm!smy%pvT%f&|H+y4iAS7JuedBNl2{@ad z(Vs=pr^&?IZ@+zUap@4IqC|-^a&0wTdupgx5k^k0U%g=Z2YvKI4MZUv4gLP~r@V<}vy|d+6yV~yiM~|P* z55sQt*3qwhmmvbL!+$P})7-gnvXGb*y*tE!1ETpbJzU1E>4V{>NMYAXY74;nLTG+b ztDARy)5I9j?XUa&4FVEqXlQd4Bt`|I@~6iMyQ$>v<`tIw&SmAzf1Zc3HzUxwAmi8G z`mc=`m9THeh)~pOpuhV3joF?^=1&^NWZ;4&LCaa~IR#nyPw{|DpnMmLym>Ex@!#2t6w?8X8So3kl*0!A(gS@^!3lsYr5`kyD2Msc zH4w001jCAGC|BAF1Y{cPFkOf?%4;gx2N^Q+#+~$hK#c~O>7$yJU1C>$DfvT_< zTUAJ(0;pktu@ONX!ea1r8yVAmu|+?pq?bcHXj=MA;w4IEONv5k-)CUP2o?Hv)9+M- zSh-o<=JZmqN|1s#X~%_i0X7;UCJf|WB*w=GYz0+ocSM0X9nD?R=$i9&{a?Y zTPrGRCW|3xk<^hwsb}Uh@xTZ!jy;L5nWCH^1u}>nCs4nuS@h}hE#TXnax10}6+mJk zSRBEah=GJ+`(|;CK+g!aKDsYM4sc><8R$?yYwe;>Z6H+wDngJhl>$G3C1-9>w^20U zhsJ<2cuMU?BHht(QH)Ty3=!JY4Jog;v~qx&wYAtM@dGXjaOKa!sKb-|$ztxlft;fb zyJ4L+fF$KKizf&{q+@);+75YAg{&1_a*mF?cZm!M4Wyn|!y=^k8Es%{K}z9N!6+%T zxC-MRS|UfnAV}9~2?yOUoV>c^SJ08@pf6`xx&E-w=Y^7L_U!BG3p%;?Mu#Eu#Bb*& z#Xjz1<^n&+9qj!nfr!e2Q`D}*;9al^GR{b}qM36lOo&)p)+cBTY#A9)gx>_m1be|W zX@x}z5tFrQxjJVCwr-tedZQ|ADlBK6V}Y5wDi7ObHgmq-kZ+M*T9>_~OCd+}RA%IyP7Np9Fzvl1@=vMJR@-2R zbQYx5Vb83(o8S8IgKt0h@WYQk{`OCQ`ZJiJo(_K4&By-GZ=o?;)-W@=$MESSq0|>#N^_)EM2oP3O0+WsRT(?asY-tXz0=ty6CG#bwpa>rLCjLygqv z3xJjt@sP7R*SsQ(49D`VaL#ki&d&k=RVNQ@J}WyT;a-d|vhs!6h)M=Ztl3nHcIlHN z7+d@X_VLClYwDnYdFZ`S(_z2gpKZ>w)V13b;PaA>4tH$p zC8_*dmzS?@wl8jW4lw$@nE;J2U_zxRmM!Yj5{zt;zr4J7_ucpE#;=x3*=@+MuAirc zJg5dXudt0ToGs{zr%%8ZC&$PY*A&Dn>cl`fl^N5o-EIqX9%{w3 zkFRNrhl@M+5&Zu8)Ob(%*sgqG$%_}yx7}%M-??Fw$jv9{T@1XM3f=&0RFyqLN#=RN zZ80hj^Q5`*Q@GNv6LE4Z(o+b^f1F+DWefpLIe?^mAwA+WYYf0!{0+vWl1-aBNdhb= z7kN&ji&5Cd>h5~EZhUPQr~(2GMHPFSF$G44NxT?0;ACP^elV}LtscE0yG>cxfp|8G z3?P=|05Swk1|G+C()X+yAR?AVy`gvQz6cJ7)G@=rZm63lSoHNQ{^mEZ2&H|NHf*Jw z4aBId$WS4(G%?dhlRLRl%PFDZ8TLYfk2DNLiP3PP3$~eYsgHyzKCvarAxodINE-ue z_zW9t0RT?StPOyAVpcporqL{N{=Dey5(oXH1FXj6*VbL`LQNi9Kn{2wg?-9caUCD{s zf{uxG8Q+~Y;}K|WaAXWG;eqTD?Q^W#NLQFmZ`el{mX&&iiZ-A>QlHJ4rt4zJq2945 zEBZw8$_yJ$vAhS2Udmb80zExN|LMe6V#sX~Uk89y zJCEUkgSiSbG$>fXNs*1Q6JIp)H(pWso$r0$PW>Y*#pccYLY8sVC)MaO`3L6fR26f@ zDtx=fY?dXLr0BT6+|$;#C?FitFurNt$`d|FOy$(77(U64UkFliaQhT?jm$|OhUYVR zY+fZpASbm9;XdXcn7mB|>j5Zx^|DE<+a#OK+?QI&&p%4&Hv+14&%?!>pyq`>gbKFi z=Oz|-EKGQFywRD-VC|xvFCIaG0E|tNOl5i98_f#qN}#!$8mJB7gHiAB0)Xyt*!N>U zblwo@b#sNp^GCck>(rVA?cf-w2}usPx-sW4S4I`)3rLedBXa>T8lgXflTH))mHt14*S|=}cm2ri^L(?I#D$^L(Qw`Z*E4*?G`wX0JVce*adA{1VFGDYC^P+IJITZPAawl$X z>vVR92?cF~C)Nm8ppLBj{SEyBg%e?7msYVvM1FM=pP@vpj&S0^G|V@LFbqI|Ojk`v z&}C5L=twB2wvUcwe?a7b$FHF|#ONON=Et`Ul=@if|W3(#!op4Q=0 zdJH(wwsI)bNxT*88DolR$r!&bboifc`2ZQ}*%N3FzLKA8hUVk}lBR-}OI)Y*Cb8Tn zmVPibgEI3IoWWE?K{A%-SFZ4yWY>qf^?@%wTBt?mL^0=s}#p z*5QXP*zv_yVy-$liOcDv&Q18FibJEA8GM1%X&GH{8nq^#aNfaR=zXNY)j=A9oi6O6 zl9>ln3S$=O7H=Wkg zOhGgn#{m5io)7p`-))Ee&CqR$Zc2r0Su3@wzOEn87N_e5Z@XWDcGY4#Sl{(4A80At z<>ejY?b7gQBQ4A60ht`K)u*w}m!-g*H^hno;(Is9Y3Y|&l8{&PVRjtqYC(B7&CZrU z1WRWP!F<;Gr6b5`FacNZ_?piMu;izsb0Vvvd_?uauitmaxYjd}`Q1)lvl_Si0jxKh z&9bVx-3|jwFX}Wwk8IenL)9d3we1=J@d&M&snl}b^+Q|NZ^({Kr%bZZfcG$#+vRBv z&6u=d?KIo0oA=&*`_7#^>hCb3Xm~g2wj=dG-?W$*ai8X=S1(`Qz4tb%2QCV#g`mBB z`QqmKwH17=mJ5G+XNH6I+Gj|#5M#m;FHA?8PQ_f^4ee`=%T>KOzhny6x;$q@0+MGh zUf%4xs=eABtJQHJPC7mjTSK2PXpo61v!Px6TK-+nHawLR9O%VL!d^NR^I&UqjHf%u z+S;{9XgGkFyAbnp>kh5!x~b|lk&V7p2h>)K#^h4e#By{P0?}X^v8Q8l!%a0itBpQ* zp?xsoEL@x4Y(q>nc^_ z%>v0U=>m~$ngb`pU}0*g%S$cjk;vx1hLI4czBu9|sIXxp#e+E&wy4dJty6jXh6}&C zvk(Usvm%bz!T`Oi_d?6|20%%KFZSszLS=jaWHQz$G=bBkUqyizk%2sgUY$13J`ftB zry)4TJ@=`S0-U`lKLAXfiXavF;kV41@|W(kAcl4-bCQOzLo3KKqEiA%^jn_R2*0r? zFXIeC5=zwJlO}LQeuzYl?_xp-g6Ev&R~WDy!?~4nDUbFr?foIH5QSrdS8^a(LpSCX z`em-?$O49AMJ*XUx{t>>d9#xGF>euJHZe3tWk14(XGc|8hjf`cd7#kzVOkRcE~04Dvz8J9xDuZoeh;E6Ep*wxtZI|*Yca6lDNhuCuAB%jed z#!qE>nG9G-%$F#)>y+wW=z>D;(qz9}h&zG)_4S+m&FgNzCG2oYZQ`rZKJldR4!@XM z2QEQ{LC)1r~*2;Hk(Qh#iEgxsFF= z#xZrUl-FY3h$vjZD#-B6hY$!TQJmzfJi@_|`MEe&F5ZJO*)GaP5^s5DLp&gcFiMMh z{3SUfu954Aa=8NONq`bwie*e!bBE-{L|N&TOqJQ8s)cW3Df-Y5o#`@XGUpmdpr)@= zOwQnX)xJN$HPMf*80OkWLr%Vt`;?N&p!p0^2A85`7{d5r2RqmBojI80Ft9O%Xa>&s zDL_h@R1&y}ze#`|VSF4RPXv#x$N>CvlKAXMP2)Mt2Zbn~PYm5eGA|G$!=M!5<<+ZM z>18rt)m+e`z%W%;)B=ZY?{{5kxF{xbEqWnnpvfqWUY6_idX*hPEL-nY3cjR<~JVL6D1AdBPzAW+UZ$UjCK07-*TQp}FAqXI9 z(THbn>w`a~oRTx$#GoIG)u;H#c|PINNQ3(ni%0-UC0Ovo|8k~^3S&-R!NM}<7|@YF zO}F?ZlBraiSucN~Lk;-Md>-eL0;S;Wy@6nn$J}saz1Er5Fy@=Jyyn4yZmH=SE7%ZK z=SV^eVg8liLy#fT=rSg_&Y4h9Cavgn{s-NX5+_L@4%?ucQ;a1#?p`f_d( z98oyypo=L9CRWCe$|5{E{c&hF$u2Z}=eARQ0}jmlwXw=3QBV6TvnU!)630aY69H^_ z%Q#Ip-rU9{L^f192P)4Va}8WAvN_|@_o63G2ZxE(tix+;870`KTrN*TKN~?~H(zb& z!ZZlVM+TVv*zJ#p9;jTQaG_=E@OM03zkXqF+0M__hNtcZCh>kWD^WNsw}LEJ$YCNm zpN+7A-ue6QzRhe0qi~jDeADIPqPUZ89nT6< z{OP&#r%xW=y?Y< zUU+fbwTWRLRM1C4it!Ep^l%zTz(I*|mVWeWn`4DW+^T8MPz>eNNq0!(JluXcn9X+E zYeLJ=?ICX4T!kLT+5I!(RaWc5nLv1lp=Q9orTCQ0B9RQx6dp*Gx5IKbYO(MLo_51I zs<_b<=8O!eFJqKrEESq|6WHY(6LAF$Sv*9l5TQ6+V^_L!)B~6ar?`$;1x41=Y^E)J z8fsD=W_{4#X%A-!uo=h@-FtEhuQXRyIxE=X^SMG|4CkL!*l`M<0B%Sy5|K69uWO*0 z4+OI`V5i&P^xckmAdOwgCCuq|A_jfx7`am#iexN~l5$pHQ~kvZj7ApA7rQbe!(MCg zD^Q>*Acao>U=tHKWaLFKt=v?_l+%!Fc*JHjF6~#9=@BxHWUAHloob23^vt zuvi<-q(=oCJME;u!U-hd+s}lB{eA}_8>HXhR5BAsPiW)}Ch9VQ+K>}B#DJnun0;ju zE*p9Th3Ur1kSHC|j2YEqp#CYyfybhrch@VNfA~bjvei%Bbl=fZ>hJq05yl)1`;||AjnW23Z}u)iDNs$u|beiYV|n6!}CXf#bMbd5X<%-{3m~+pE>djaa}J# zV13L}Ry7g7@T6ZwSZ66B4^%Fb7;*tkC>_$WY>GQ>b2E_wjYA?D3#;}01L zNe@YCN0edUn-p8(Clp8TOE#|CKcPtdWD`X#Rmw3J z4a+iv2Ik^uZLE(O>DyTDv6owoFa&_w%%`xVULkArIzLcPbJSdS4 znTVm_w(-^e5Jx~En9blJHjvA15z^`EfpTDgfSwO2I%ZzXX?zoU1TbtnZ+Q0GHt7~i z@r=m<(F98Lt+~NzKVnEQJOAZRe(b`43?u{_{oQ0dTY!lS`79f96fF5e0q=b92|IL3 z-%w?)K^=|3n;A}|^B4=pi25bBwSIuAM-@AKU0=DsU!wQflG?%l1^=l95lLI7}s|#ST z>~>SxzPl!!&KG!(1d9m}d5D*})-wk-h<*vo_Bj+!GtBPHy7xz z@l8zn8$yI+aL^Rci&*HMG#c|2$4wZAMAJH_Rvt~9N zSG#UpF*97O#^Z`GPq@_Bj0t{yA-pBg!4+Jd)FZqkdn5y6|IO=H``wo0I8NahtjPob zMy+POUV&z=LN8|hrd`9*v)!p#V!I^M2t-B4ftN3@*}(zME;g5Eo2$#qwn0`cNHsWn zCmxzO>v68<#8qjDcV?r6UYA*$S$R3yvTL4SW_S zgFE^9q9jv`K&4aoFB=MFGwf!j9nqMa%9R5_QZAY&d^sddGG{{^_=(qhWwm#4H}9dL z!NCPim0~rM+UywCh0c_*B0V^-=fCmpqW8-*CRBauY3^6f)BT)4uX&3+{fIuGn>n2} zZS&}+`sM3m<16E|jl!6`<|hM)FOyC98%V$S2U}oI9q`xCfIXvXSh58OgGOxgc_%%ML2tC@f5s(uZiTNmuIgS&VAVQrCM${(RWAHLprx6OE zj4lZ&b`m@(aTM3&1VUi*nCqBtzfl8AZ=fygamWx)Qv_F`)JRl;er!YS|GR(tFC?2y zcE8yELBcy8Ne6JiJOLI2 z=w#d;py>sNz8`Yefr%-+z%$0D1R)nkGjUgQjtdfv5B|zCS z5W_)r0EL(g*u(&AAJM5#8(6L8%fVF~ms({BM3xLp(H~@jAX-+iqZgVvw1>nkFex(I zGeU|ok>Bw$*i#q~U;?n+SDYx#876IYR%h=^#se`toR~ABNE(xIdJ~*Opcn;Z8tdZF zM;UboMuQ!B*pK8uOZhlfFIunH#wOeh$vlpKw^fC1Y8K@NWGtZi6R{YH>7rr+-H zM|Oa}u}|jOkxEaeod9QtL81ms>jD?9jcHj!qU(+Ry%I4D*7M88-4z`4X5X`ZgHkMp>jAdOQg?r_IGZ znznVFugcMN5DhvQ?rL#BHa*yH3}=jCmeq0W>_mP@2Yo0XzrS1~f(qOF{mZkn);M?5 zah@z5n`b;Xsl`a3j{WrB;a@R5r5sH_Ok?%CSxo7CmEU4<{rXwA+j0i0rqH$;voHQ) z0^?e{rBL-XIPB$?rwo3wFyDKdEA+)9wtOJ=B(}|=DIqom9y)P zTv77$@srCtcbJztaHup~WU=4xUOaz7A6Qh!9L{g0fclgH5RPb1zw+q2YD^C3(U$1V zB!_$&A6;BrzC{e9M+c4hY27r}H#ht1=k@x0tnM3cPseTN>+<-OEEZxOoIEC9z<12s zqUhFnoeXO;Fb`y!o3#Wtg$m7a&Sz8II<~ctjA<@q0g#PTeYY=5_!ebV6eb}$kxCs- zqRrK+o`~g}?CH864}be>%Tu?FCrBa@EtJG}(o{-r&k%}ytIBGeumAj!FP(!NeIdN0 zL!OG@!0<=5T2)QA_eHKvy9WG7Y8WI_lx7IpHDgv)tBVpAVLk)4%xeqeQKotXG=Ahk zD*`)70K2@RSpo1)ilm95k>zJPNVP?o9B5FQq2E_XW$KlCm1PMwl0Y-qLCtXxxv>Kh z^YP&0ra^Ud(&ekY#4OwzY|4Un$-n8<;Yi46$tg|MMFNmfMgdlGyJsKoMf4Dduxv}@ z7V)xiAb^p#bgGyI9}hXfKi_;k?6(qS^OnCkdZ$9XGu|O3fudcchxeWlol_igV2FaA zmC=P}j277C2O6TCM^<3i4)SmXoibEK9umKXsVQ}Gds|ulSEuwRMu9>p9Bva>(4wMw zPYOg~kFLp5=wTRiD=>}wC=yj62nE$0!zdoDTyZ7TN*7p|wvok3^9`TDMi4l+N8~2J zQn_qIg>XVemuTq@YNRq$HnO2XpD!)$&s4C31uK;=)5LL<0iJ1#@%XlG7(_MV?NDfP z?10ML!>BC#(6~v-V1U4Y&3PX{F?4C$12Pp47Y!Ry>_4a58jA9jjwsjN40f)d z!d2)iLLmy1REjTz7xqu(F6seaLAsE%S6wVD8*}W522)IrGSw3;INNsv+`F)AASFE| zhj1+?8W3~Dx-|fKb;54Yrwc+eyV#G1nn6M^brQ1O=nTTBmFPiVXa@n}yeI}g@ovDv zb2JuxFu6bEF@v}o1<Tl+NM@SHe4t3B8au5x637y7O2S==5;*u zuHli9*cX4kf!ha;ZTjNrlNZmQa~4800WDa~f3|%3ar=i{`TWXekYg;l|BVlkMMnwP zNL{G0(Py6EP{2TIi6=Cu=+cS-K-G8$7-DJ=27=h38Ob7^hr_LJ%@P!XiU5j*aBR+&T}+ z{pbJ1e=TS_i1P$KDMi-VVgpkZfif{cA3n{Qz$>_qLbc2iU=dQH>RjS=@-8cSs1%dd zCF&qYOt%wE8Ist}(s^~XmhWta|7q^ThMd$74N`b&VR9HSH38aEi8^Z1Lm0MinlVv1 z4hL`a^H%H?gO4i_(6f`@(+b7t z{dq_)m)d>xFxqc?;1P~i9pW#m^Octl2-jYm5)$p%3$#8E$h^9vuwicoe(U%}4fFNp z{Nmz*{8^lHfZuAPoF$0 ziSp~4o-~C{=^7gi9Wx24LBfa&a~N9!o%>`2%Zj-xg`4xY2tFplrf5F#GVX8QymCbsggAckgsgpRejBO9hy`JsN$~6V^Mf$X|vSGdv}qRD8cbY8MP6#!5~7Ub%jM0k`#axg z>RI3UJp^hXChJrH@^Vk-nS4eg>Mo)=>>d{9fAPq4O3gSm5?Dl#Jig=N3`2xNXJVyF zv0-kZA>cTHR1hz|BPf9g@JlCj;G`u+D7!&`!!Y0|OcOpdLB$D%NQvi!OXQ;5F7q5z zS`{Yw2S8@tDUzl$0vCoDFufrXve+)95yaY>G~5DuIw3bB{+Pe%=rX0<%8KL)gVyqK z_QEj3J(V;w?SaSynAYK=fSKWwlQA+`Xu9q|n2d#JmZ<`@v7f?#tpW`q z!W+GLI!P=Iu|4Z2nL&v#<9QuO|pIpWvZf-!(GhB4H)6g_`rTubzOJ; z>KRb9>+`eAJ75cP-hh`*Q8cE@j+2=Qqp? zWDnYiP9t~O;ds>YV%Dlq4Y@XkLg)3$Cu$G@?ZiEenbEfhIl!ZSsl>oghsl${hyh71 zL|KNRh7ZX%gp}C|I3L1^IXo0B%TgG}_72k=7G%7y$!vhGLYFQ1xs)s+O|TmPJmty; zn}(_=#JikDXWFOu!ii#Nyfg_R8h|P3V35fPvco060KY7`H)#4yfc3rp&IYp%%AjJd z?+vMPCNU#Ey-FwQq9$BZPIv6BNFQ^C0w}sWU$!gLtkLz!yh|9k*%%0D3sb&7%^tm} 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в@OAO7g-o8NhGi%^1& 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 JR3o4l@IS?81YiIF literal 1037113 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%0A=f3r~Jn;Aa$NZS4DvLl*xprQ=TR->AbR2 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

-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∨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μIm1mE!kCs2Q|}JI90%PbE4DkQS#qt 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

Jk6y{{ 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⋘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�iR#R`bcQxTuDCwi4(UZ10+&`ISDC)r2R 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ʹ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%0ADx7Gw@mi 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�ZM#GTn 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 z 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%0AMF7@(p@U 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 HaRBgtivl2N diff --git a/images/ppv2layer.png b/images/ppv2layer.png index 7904d1c46cc89be333d4cfef1c83d87be9323c40..592e68bdcc233eeba6ba801a491eba62e805fcb5 100644 GIT binary patch literal 54003 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 literal 55725 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 Axc~qF

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%0Au%GijYy`&|Ut(D*Q2u82y!KruD}+ansmY zPN6g02b~q`a|f64o^kOFiFDcZE8G;~z5ZF-yO?d$VUvI>mw9$W1ws&8$%a*083i6X*ssqeYkmnJG;L8 z>}HbwZ@>7NaGp{5v9XQj>qV2pTS3P`ic!A&W0m!FA|(;m@lP?3tX}_3mvDvoM=JieusPu&*_y zx08SPbH5tq^$5ZDcj1*^S_yB@N3=xM?%;MF^t+&J|ioiQb z#0BZjvllVY}-aOK6+r#eBJdV$g-t#GMIH3OaYbT%JFF9trCPFa#;3hGhnYVVFXY zZp{yEtA8c3qb=TL>l261^l`W34C7-jMdpHd8ayO% zORs<&)4%m?D#$O4wJgs--mXni=B}22=bJjh_%yz)G~%vFGnNqFXTyA%?7GM^Dfzk% zb}{>>5!nA7^NwZmb8HMMkXWQH^gyQ~nTii8sO!orfHh8X+*iz0Oz2o3cL8eb0^ipK z$m^w5p1mLfE+e_7EnJ3|f|eyo9Ei8Z#k?%CjC4(1w@ovdm7{p)14LseP<6}?a-cn= zMho$^8ZhpK%_<+4vag*mS0L zq8Yjp`Xj{0W-KQ(L>~&w)+mB-M}i&9VI7pPnIT(jB|u&t^4|pz+ifAF+@1IEiE**7 z3&eUpo%U=r$)mUtd4%YXd(-%#2^jG{Fh4(|%=oKA5{2<&OSk($cgSHSlB&FPg!-`c z2}j@1&Yp%b6CWgI2E#|Ml(7Dtrqjtvgi|DLf*aG?$?mS_1{8{tYv39S6>NfPFt=PT ztrLuc#o5et$-Y5i!%vvSeN$0cznwL0KQCcC`w%OeL3Lw~FcvfeY*Uo|ZH2K-xBIyh zfYIsWBFM1Kc1_Q{1>8~RANHK15binb0uy2@OLdYZRKX{x)VS+lSK6(8Uh9B*RwBh= z!S%Wl|4Fb)p<5fnO>jM1)$yKrj&8X?;xnWS+(6;vbip=CdDvrfjOBZW`S>1z@c!r7 zz}e3T*F}z>>*BBbc{XMrxGsD)hA&J>tSHzx%jYhSZ2LG|t4o|0Mcvf&Lyv_&GI-(z zUl=P{Mn?EL_vH~W(VArtsrwO-x*qscXOFP2Zv5=SW5Dn6&-imx*jMqoPqzQ?=!T33wW)~CR=C~TO zj~rni1Dp--AaaduBfRTl0Kt9w@q4$02I?IKx~T;AVkV?4e#Oj}B_OChMyo=^j*lyW z(3P^uSlaV&wU7N~&`7~m8DdYC&Q0h~rwBY(5p9|-7M_V3g?WLq(YIweuZC%v<@;9i zJ>FGC81sn4JVH~zxfGk{*;Us9>wA*r-a+h96TMF&`t4*W=ZmiGC_wYduIMlM&O~j0 zZE@Chgjv1U&b>k=qnx~SZEh`78{f##s~Z8q_QnfTx zz9g^%xBq$d0(_O`-qxo9yxF=C>72c^H|oxyJb8ry!ftk>Cj>!EaIz_-At=W&zxHz% zZUay@Dx4ItmUrFYJb^OF_`tDjHR6>~2~L4~1vuu9|0^FI3%Luo1Wo}Va!_nK9w2wL z0C+;YK1c69W(1SSmlFo(y))m*sWosFMxm@XsmI7TJpbrb4SNQE>7N$@Q(R3r2K*i) z$LNT;`DaWJpE1ks=XHUrKX+-yP{0`8N1k~i7=QIC0ogPDNHgk7+!ZfQgmE`Rn@qF$ zd@;w;NmI-Zv~w{p$QF6GtJBloTTBL6-)UDZE}a!vyJ}iwfRSqVvEr!cYSn;M`*#Op z{1|D1@e_nP#$5La3*h?57x;`-kjIQ?VqTU&pmCGNrByES2Zzd;u^SeKg$)sdICChb z$Y@uC_pbJ0|9$qek2xEN&xje|>R-Y5tASlN`C;RBx%Qti%?k(ipBo=t7l>-&TN`M) zQTC^G-6El|o)Jwk<*%}ZU_4?WcHCf(0Y7s}OPq|QjK$vkL-AKTW#FcXuS;_#KBB%( zt{Xq5-39hwWT5-`$TJB@tN{zb)3tF}+ybXG9(q`*kF8779IIu9#SN)woZ|drB)dH< z@=%B+N*%kp+#|Hvl!g1aAfu^T)vHrn6mU;wiSdIx2hUAi*G)q%Y$5L{M%8ZnJa<`d zERX=80#-|4;R3oS#CLH+9T_Km%`*x#y;mV8vA{A(3E_C9dEHcG^DPkZ&KCTv5nHxx z#CWWac!8U9YDwFTO&#~MkRUctg{406Dy^^$Y)Bj&F>JR@=>N^=mQXNHoo9~4mT(p1 zH9Y~U2j|no)AHV`JT@YhijY0tFlT2h)HRQBO-G6Y`FJN3tMg&%Kt2h=^B5b&1LaqE zWk@s^eYO+4G`wtU7%TT2yj^nQ)m|{pmc++Otz*VNT2AfwJ0zgbE^Uxx>$_J_&O4P1 zJ@7gXoHbNLwsh7l%3?bh%% zVzckO^xDO^+3er=7tXv-a1UcYZtHUwt_5(;&_f&;XQ%-pAdj|fVqO`ag^$)-R>;Y& zw@OqDkf;pa2cQZlar$rk^WQy|c^6&;1Ww@sc%p~qtGXr9*_Mrmy9mc*h1?FRLnN4I zN719SybHGoU<+J3spdS0u1cU(uLbJf;0eYioXs}No#T=bl37vaae6fdKw0U03WJ3@ z%e{S{R8jaV8lvYf_46$P(JAh)`B1&sAK}_Z*L==^E#Ak(a6TW1AAF5z_9c%$cNxb> ze|#NKBJKjZzi#$WPv*JebUMp4p*nA=3d_dj6t@@zkO`iTRg?^J>PX@O_NHySEXxP2rpMA{Pz#hnccC5$J zu7;m)-WV940zoa$KfD^cX}_*dy!(45@$T<6xy-S}wuS`K!CgT?Gh27)>~j!m-Ts6) zO4_E)5=iUnqkU6H*#CUKvgg0APke@?_b^twtNf<9ZUo91Yu^14#=pDB@d-bo#xcw< zH|Aj6j*~$$g)c|}urEOYrhZ#D7@JT5;+G7_^2r7-Wi-g2hp`tFSr3~c&%3^Fn;QL^ z!=$mKNuX)lb+y*sooq=!)sfLzs=BFhB-ZQGdFh44mZiN!Lre{Mc3oHIB{h&MNoQUX zz0qLD;eln3Z576{CO*bCosPwl&CL6*Hc844-Ikq1(2Uc*qX0XQShAVN&hQl11g~SX$t7cf?x`@0BF9zf} zM2yotvm(!ABiFTg;IPC*{?u(rZmo135;-E;$Gq3DSi60%HrWh38|geRR`;Zx5mb%egin+!(kSjK~8B(9^j6 zEb*Yu)`b*MfsGEf;6B73mStY}<{5B?*_vhrUf(YN4X`iyER51}e1yOqKeX`q@YVPi z>d1)X_<6SdBU~RilUUdX_HbQHB&MBp(2ycY840wqO~q3?qCR?@|PDv!<#oIrJ{YV7@vKL+h&x<2acU4Lq7n>&B%I zN}|;#SC08UJze1+Fj_QTKht|weak+?%&?(^y1vD9!m*($XM)v7ND1kFvfB`@pW&iH zj~i+_M^p5Spq1d-3a&f3e5GSxm$nk8c(D_<9Diw~Z}FqE*p2SNF9iJ_Mrj#0!okEY-lMTf~`VEGrs!}5Cd#76qNa7&={4C{w)WREKBDgqH) zgwa(ZTZ0q+5$)k2>dWwJG?;vjRCJ=N`^0ZQiLe@l@-2e}yr|D>1?(-NMcs8xAO_{? z&wYUZ`={4__VG6cuKQTj_;jCO3=p*++c6Ny{N|^L;-`iRLQtheVR20mYP75C|vewkhITRfx^KOu97j`Z+h9tKlsS((+bTgzz>UHSTo{;CrkZ*nf|KGqBHeQ~0`1 z$HLD(9>e>{YXb(ynDI0I9O1^m4RE&A8c#8=jNZWsvTlm^R z+Ru-8uc%k5Y8ug_G|3>M`_3O~P3>#lf5kdkg@y0@(k2 zK7RK%U|;4Kd*+!PL=V^ez^Qc&(`SeO2{3wv$XTdKSJ-GE8d9#8P$2P>(tW zXgm<_>jY>a%_d9T@(a~6!z1z*TwgG`Zrc`_K;PEub&=(BuW`d^vhlQ&BBPucvV!m^ z3NVRhp^^wYbE(f_n~A|s2$MZjm~p;Ne>U^so+CBPaJFb zux@RF*He^>WmBC_@%v+6UNmglv`_%lW7Wj#UxwL5MHFIL3_3%jqZFg_nghn_8-89Y zNLWegNTVV8F6RF%mf?U9&%Dtci|gAD7643)3sjNV<#lY`ijOY7m%C8%S>?zIHMm zYZ0!kW&FkWKKk0{-y*oN_FHO(cz{4O!?1}XMj1qOzuok{ETC6ffe5iQ%k%PdU47}R zS9aK-j{OHr?!Uj`XC#6#ybtU@w+JK8Mqy)Mgy##mTHv12p67S0%#C}XF*Yzy?O&`z zf{IyMz*c#d^32tT*b{~MK@~8UXBe)QHUgYZ0rA&g1k3pxNe*)n4--OGAegFg06_Pk zK_2$6%3zC+QB@UQ#(34xSg=e>FfJt{p>GLpd!lJGK{B?zyS4GJHbYkwdN>(g)?||B z?jNH|WjPO>LNc$Lit&2B_gL$`9pdWS?l;~a7{)o>PttH0Y~xk*I@V%H&4uqWMw5QG z>BZ*qkIukSv0X}Z#0S~JBl+K%@cI3s6y6ybL?HpXS+cC^;{ z7yxX5O2VRDpV7wXtC+>eNaLSWC((IsexN2$uItnz7+{}NTlmn37F1yZd@|EuGUuzi1iozd@De1n7TKbFvE{NXc}++2Kk-m zC7?N98r|-Qvb2zm^`oSw`s?~{ZNsvd^^~q!y z+G=@l$bv0YNmR;k))79o`R#(#G&D^6d4mJ0B|y*TOiiw>Y{l2N6)l zzRnjeZ~t^3pyP_uL>JXrAinsiIY=6(_p>xSk`T_|B=%XkLUQw(qsd1FpSW#Y3w~$z%QW6}Jk8TIte(j@Iy|AVLA=qd z!Iw0u5w@NBi)~#%gXfcCpObwXM~s}5pC(g1GjdPUmX-~^hMy)=>R>#WP|>Uh z*M<0Kmrrq7^;iaas2rQ(vSG+!P7fePGd_F@+KIF4Lm6D$uzl7`Ibz=*Hjn7oHD{gi#Bct4^KjG{ zeyL;RsjKN`Tp1y!V?Ie@>mwBE_VE`StxCqgC)(u9Kh#(40Whvw?yc7VL zF$=R8!Rg`!y8>YZcO60A5G?~V)QP29oTc6pLtdyP7!$^TVbP+9rV=E zCqs{yQWSF#?=j8Lkjq6`U;<=GSzv-{EHDh<9)3}}ihO>BnR(Y^e0c$!?!Ui0C13 z-OyqC3^7@2?EY~C_!=W_47@O0SI*aiTPf;g2P%bs&_S8oex|7}9rg_>I4YMeUjkch z#zu#9Ty?lqXhy1#xB}}!XI5}Bmaf!+`ED`GqXlD4Aa#RGfsq+!O_XgJ1 zd-N`i>2$STZ`!6P7j(d6F_Nlv-%RMXJz7V>>U8{1-wcZgi3^u?d}e*?8)JAhZcd{c zU+Xe;4;a!Kz>5gaKo7{DfLo#Dqv&!JJ~o_hHv)`Fa2Dbz(VK1Tp`r->&s;j$?J~#c zh}*Qr@@cp?f<>_a6o^Zuhd@FTfL5P{Z=y!T;gMV;b>tz!Tzuhxj82B-fG+wQ7Uj5! ziw4*t3e+9qkLkRTOOIuvmu9|ghJv=+I0l|}p+*W70WsBKg@L9$T%(w?BGaQF)ppXv zY3$MI=y46hzXAJ0@2g}Xt;Y8f*iF)?;5EX?-O*4Qr!(#9jEGy7-}bFv(WTq?+)?1x zmn}Lq-p(l*xR$8~9lS@}7t+hX@O4>~bS~H%&ZMJ35q{y*bdmKgym)|Hk#1NphT}Rw zSxzRBr?7iM&}@JEE6;V_Sc-fY#nC8NUQ;k~*{y%B2XM-_^Rmv`DuVdA0nskxL&-iZ zT&V}SNU2fyFd&F2@A)uw{2xV}m(sY^INX=J@QR21C|x&PXXD4u4xEpGP~}SA?X;?U zO@Y?{XxofNMpzjbOqiB%7&btP<(ektaz4&!x_|)Rks>Z7dR3w)Iu&M@b5%xw8ULaS zI?TF^Cr}!8l(@pmoMKqdo_gveO=G*x9Scg^jn*=D1zn@t5CvGkpO5vA!kIf|uj&va zpcrv1Ot0C09f&~JJH!>t(qTqqx4DvG>ryWO@)A8FJqakYnIzk*7($UKeR{ zcz7_HuOpxn7!D0+e2>HzHuw&-?KYX>QJ|tHM~6pv7o?;$WmcqlTD5Nbtk)Go+4U{) zq3a7GaZaL4@_Et(U4sh3BMU2E8$g*53uu-X(-|X9d`_HBN2r~d?_?y#i{^hSOoJBel>b&%-*L!M`tr{I(SuR8QdNMSlk4^C7mXw(g^-=c$O z+pLI_1+EL^PL^O(W+nPK*&o-rRTz%l($A(@w5kWNp{<9sl|q^QOnygAqNo z50H}7Wu8}%THAyzyf2zsW;n?n7K**`w3c=ZUF`x5=5E)Lh6Xov1vz6@k(j2=%SD#w z$O0^@xaHpVqIFO%;|vAm=rS?n(P4(wy-rEeTA8jEzxeMmLVT1El8CBGMHQ|Bq!CL4 zCbO~eB@pMVrkVJg8&5wi!UY0+k5FYuC8d-H*d@ITGcV>s!Pw|{kea5%IToA*0#gij zayXU8^Ko@2zH9_fO=$gOk4|X4@RPWxebY?hYE7ct<;oYr(hlGZIW0?Wof+zO63}Gh z&1TbqZc`pjb7`5kH?i|l7BC>?}>Cdn&$Ws$AkHN}|VW>vI>b2N)v=1pg!l;o-r18E%YS z-c}X7baZ&YfH1OM8_X#|?}mho@HRjG_#ge?7;_h11mLA3cIOx-nJ=VA*zJUlx5$q? z9(zhfxaJR`@q?Ki1-zo*EXUo-=UWPho2aJ~r)W*%v&>sI2it_cZuOZMzYCLe! zV_RsW4V^QdfmNO%9*d$#65prMdzb9w(bru7wY%J}2!NROMECVRFAPc$*W^^}WU$M)NG}!`p;20`GdbY2-JA7nf@fcA?!u_APyc6GBS+ zo;NIdw_s_EyLjNE=@dfA5@)^9pEt!TUfe8&|B%zJkb6EPN%T+hBG_$)A6U$N8$IDT z7Baz9o#+eE6>2~$hySnx=~FJ%vL^*jh+{mLpgitQVB9U4me>i8so)OK5Uu}EHmDqUgpgBfG%!P+ zOiu$tw9H357{`OBabW;z3RdZ1EZkZ(KS&AAz;1Hr?AF&e&gpZyi|Z;edCRqHFxe_T4D@b zSzaEUM>2Nnqbi8X?5aHt6bP9EaTEHv@6=w^-6JeCCZvE#kauuS$6s4Q0ngxB4CccBEch}k0J8Wm(LWD=-G76DoLssNC z-X2-uH!e+@7i9E^8r9+_Og1yza#vkk-WZ#L;?gwU8Oi<;L+Y@}5$;GdmOhS;NI?jD zPU7I_KF+W|`|v<0!a@iczzcAmG(4egKWwwG)9F%JC4~8BC~WhnPrtz@l%>bv4}eVm zwRFBsY%GBL<(4U)Y&@Kz{ci!j55|4(v2ww(dV5J7=H zBZ*BlbQQE}&jKCs@X63KzEDrwcItWGh_ab70*fUSnB_(0D?Eq1@Luq!g7LB_4Tx~r zV9T*-8VQNq7=6DBFF&AB;VkGb%iNtAT2l>)Cta;q48h{?XgkY>Ns^XJjW!sObnpd( z6#ocA89REt3ojm~h(DwlAy=rkgJN2dFzI`5%LT~_IEKcn-#Zz^adUd%-}YkM+XeF9 z*5}m&U=0M*r;sz=tU?$Uk&g$oJY%35gSbcWB(;ZVBrn7d7idESq_L2XZRzZasqeyT z6(EsOjqx|Meb;%rS2_3H)r-Y)T(yHv(1=hM$qHZE0R2c$I43~wNqPZp-)!Apa^+_#ITo-@#a~7=b+Rq;L;eGtsZ(tud3orZ>*f(Gd?3%Q*ez4m@_{1#928U!D zN&z)7#Cfk8;9?b;NV0Lwd;;7AT9>RJRhV*8LV+z+P= zs?{lYh9#}Q0s|NZiBwOCR?@hptpC7vnii zq#hJYwUHQ*j13cQwf>^YF<|@S51qxYBUxm#VnYm>zjV)|knuPQwvi*w@T0ra&TFHw zQ=^V3*V4mR@n!gDVJ{#?uvldb;V5W=1bI0x%0-@M zgNM8)|Kt;&b>C$076cWHA&tW1V}Wu-X(r;sc-f@u?-IGQFVcKaJFKzCB9e+B z*cEseZUM-|J+9g`ZPo|!Gp>8 z+G0JfPEIvj-BjZdO3Vg$4^t9mozLec8VlH!`Qkof_8Z~4$noc{saIhiCNPHgff1{O z_kr>Ig+Hd2KFov}HiaIX`E@g}(NM^|oI^-hM^{dcvm~zn(&*cL-B95Evwt)OfPG)S zUf@tX^W~2$nlD4Hz%9rJIGR*S@?F8_yalG=PaAgKf+>F?V;BRl_lEE=`3iKepw1VI7Xp<;W?9#@VaZ25`Rgx}~h(#LNCG&kC_ zhwB^_NT{z?6=RWR3E$3n4E=cKVLNQ~Oh%MJD}2EkSKiw@|?x+*9BiD95@ll3{G zw*UIN?!wCmjLvxCQ|eFMg9o=Pmdo|(crtVhLS3CSRsHjy`dnyG9C%sA5yGQ|sDq}i zrH#9Adl1|_gC{{G4$H`CV4JX_GJq6L0=Wo)#S^hS3)L={-i2EOi8hpzVSa#AzC#V6 zOJcR3zdXeh0ITYcz`gTfAfH@1Fq)Mip%l0wwO+FTdS3MB)dXHbrSi(lCEvZ5oDK(v zN6<`NulXsxco5ee=LBGFY?(aEPEJlxfX=@9UvB1h*A_5G%^#d3k`0>kxf zjV-au`I2B?$W0r`XAJQD!U2Hr9>(yPU?140ybi|5U1D%B3Mel-Mx1M(W_en~twK?37{Bl=!$7Iq$$GsSw$dl<#APNw?2O+uFUzW~ z=X2a?T#oKwzHIr^HRPgFLZLxy81jOO=q~Ta5vk>`9y*_4@c#q#0Q;Bnz}t*ufcNHyQ-7qi5qW=`N8?a zgY)N*#^epMQzV6}=VlB#15mM{=&OI7Y3_q|@4`0)7;Vqw4T!%QMg`??1p_hkeYrfU zn|i%kO_GceE6bAcAmvEPF<=hSIQ_pTrn_(p5bSj3gCN1TpN%qPIvtk~!LLuRiU8Qe zDH#5E+XO#mJ7^{tr?g5 zIX^d>X2pCnNs9SW!ixL8a9bcftZ+yyJYxC(DnO6puRXT*0bm~(MZx&}a>2fEU|;gt zNMQWQ_xRbvK4$;9DeU6G4*1h9@NNAX0P9l?iE>_CzH$jX9Uq@y!_BZ!RXWL=UVo3v zEoML4alXgT?ZS1<+y5K`e1F5h9==|Jec(E{CQ^|9$St}oDk3=DuimSut3(@N1{ z+rlx3X6Qu+!1>kvh>s;hKVg|@{coze(yxncS83`MwOLriI07VBfQK+2?PuhDS>!WM zu}4Y5&ep~}r6^LXCNS4MJ0#*yS0~=<5Pa)S&LnADJ)#W8#{}2ncT@>CZ9@k=ZxhX= zIp`bPBBB(U{{5n~j7bulv*ddwf@dZ@u& zK_kBW?}O+)>1dw=7^Wj&J85p1l&+QJmXHubvAF0Y+jwAxA|pGaJ<5H2<4+`M8^g7j7GK1Bn>C|59^IybU;W)DX2f=Mnmwk1Wof+YCn!p(IwY8xVoHnTd>N*Q%|ONu=0Q__+ehIneckTo zrNMQD-R|d`0Q-Vpbn$1itA=j)0B6Gz2$UfqO;KVQ|Ftb#76@^v?Iq7DHTgAQsnnR_ z!=Ryk<@lto>Wwd?3SG;$+fm4C>L~q2h=c+O#_+y9FXLx~8v}dTH{&|EG38k}`}ArF zapx(2#2u!>9x@NWS>Ix&}3+xlC zA6V5q%4mUZzhp$4oeiZX!*RyLB)g6hfc4zjZ=)4PURTV6(1{|H%F@|jOUA_(IW{f? z(Jpx&Xjr%`V;m-orEKUwl~R86C!Sfgx^oMa6G@pf{3nuch@58nTwr3y0B(H?n8jgw za{1e*7C-i4JGj0SsdjJ^MDYV5{qyC+c7%~ z(GVZqFb97~F*f2ZyzHQ}z1h~QO47j8A*0C}=G?LjLj*8mR5X5%fwM3s7-38> z2KL|IJh-kUXW^!gZj8Jd6Z_Gz%@BR?SiFsGTb9MDTEl%=KF@qFyEcvQW=oT%-{f(+ z?9~Sl6Fr0sFwYe`8lVtOk{9#3_O>_|6WSgptxRxsLtedF^lwmurZe3~RMRU>_9SU) zCxno~L)T|<-Ikjqhe?*_r)}pIX=eaB0V@>aWw+Z&ztNq*m_&5K(<&Z@ad;>^?1p7Vez@Hjbk27hc8mBgpB;z8jO;Jz94kVi- za_r{VK=)%HFm~pG836731~lQ*LPJxp1K=4-E@na9J4IG=8O?ul@4l%_TYT#dw=r8( zZ7K@a*U)t2du#%+xKJZR8+c4AA4PC%4~e!p0}-AN;1dTbS|4$S$IT)jJUT#WW_2ki zNWxd?GX7vE8qZfGA&08mc1QNBVAF2^QO6kPIkI;=^n!+;jT6M{1do*eR|rUcVmKZfN))# zcL9!}lpccrVwlF9cNWn1Tlst|0Bgnx4&}hKZCX5d!|;O>KwiSAO+A_X#^;~GkCESF zwbaNE9e3eY0o?JeEK>aKs25S=0Hi=$zu%Y!3-Rmp31$;<*iXLO3xtQrQz9a@;%ZA0 zB-7vc!n1A(yN>>;<3)U4GF(^Qt$$u&05)&@>|t#0*|wkU!Pzjd&v>?kTY>9pJo^Fm zPsg9~W7kyBMDL|lxwEuHVj!YVBnO`;F)hvR?v6pB}v;xDvD(`Bo}Fr|H-n5iF6ol=490Nlw5>e(UNyq#nfCyLRyv{WI1es1!f(>zf zVJ@&};WH1clNx7$pIA42*9CSr)VeEc&qpr2r=}Fma`CWXI8?x`H`R6MVZ3adCtMfH zP-Cc6aBs9c$NNQd z7N5plye{3i{xIGjY?T&334T+E!?UZMW=1FA*4+q2V{k0TZjs&kY^DCwpw+|kY3Ez% zT`8gVEWA8^beqXAOi{*RwNiT2VUUF8w{Rjzeg^Ebv;SEav$>opMA3H z0{ib5fNRnt4b#l`d!WTSOcT`hX4BLSiaqyr^}fdqav~B_W#i`XX)#}7i(q*#mdl~* z6DNbBQ@%n0B8v=H%YT{Rx}sis$uDEuQ1q&&}0PEW9F@JzH-Hj{(p;XF$h zh1_}X`9rX`%lYbp7$gw*edL0JX zK(hkh0wIgV$mr8uC%=;{$;UJ9Zv7dZnL%v`TuTh$;UMVYHT(|{M-ljY>-9Q_%cTLl zpSD@UcXB1a(Xco$Xjt_tR`0H)5r|o>PS@26?~y0aUQsS%Pnu^G50;AzvuTR^p#+!} z2L}gBtR`}x$uXy(X}+nGW@p&=zVDDy$E%5`QxjLGe7CGhDL7HC)nGv5ns(c?aM4!N zoIdl1++L~>hB#rHq)Kw?7@#*JHMjr)jwGXzrrciTA@mtZX1YV-L9ZcnqW+10cFEm! z6*2KD#(2O0;XTtPs-i)l;ue^?6#VA9UXasC847gIs^I!O9hQ6S$8DCLTiKt`0m2coVA$O)GeTw}~qJ0tqM$D%e* z^^Yi2lZynNmr^PZu@Dr<#3BP3kPTrRDF_NGvvGK;cj21=%RI*wM8u&y84(cP;j*;O zRX7B(1GsQ`R95bL7v!M^*_y|EpfM>iei`@{fX%#x&m9J68XE1%Ihg<^k&CZ>L@W|P zP9dDke(E28iay%O!OMlBfV*%@kO$QwR$L$%Mcq~8_pY3X=ZJA{n7AJg_#!6Nb7~Fn zP8dM0>Z*iSBgO3sy9S89-OpXP1vKoj1=7dw5&LJyU?1K;y%F{m-57XbxG|X%rF{Et z>Fopq1_~KD_vFfDl^f)e=BQpC!Q05$YIOpem-7R(8@bSMVGWFuRRPfLSo`ZW{?!BY z5YdMAq1*6g+qa+yD?CfHB{tx^Y}*#m2Pf8DmzQ&R?|9wly}UYs-iN&#q%fLBSj1TD z;0LoRs4vX2E%cT{DyZfME-qb@yTbu{f?n%MgePV0l#S7vYoI<~=!j~l5v4!? z=VD$KVen3}qNwW%gLYo#r?@4_f;OoY;($Yz=Sh~;ZlrJNlQ-dvjdlG(+sPHzaJLp^ z>2aiF+clkYXS9TN2Y6g9mUu!u1VtFu1Sb)r?@!wzTKsR>AkJR7O?-TSUuP=HwPy2} zJCgI|&k#P5H5O)~LjEh(qB@F->g)m#8GS~iGcaRWLexzCs?sPeYM|tFO9wq)La%md z1;R65tVnVlDas#k%gs0iiTY7IVd&)t)7Z>#(5YbTzFvpmOoy7 zKvm9u_^zw)Ir@PSwNIi-?}ZVKE#Ov0>m@^iR&NJEz8xZb^V;sh%K#vo0cN!LX84LC z&tm#Pi!C+{>o-aQ`oIvwKl+8=8d^7rktSq_Lq{4F^GgEDd4bQL{gFTTqksAj{pg?i z!+-8i|MNfkr~mMu`BVSgpZSw~{=mQgBmdl=`H?@!_rLeYf9TKt@IU+Ke&i4C%Dc0` zx5RevXq}4E>_6!YA1!Mku?KqB+%dy+2Vph)#wkbka@Rau;4Kj8q+XzaGxwbqw#3 zJqGrl5zdBz8w-3H0G-;q9PRrqkflzMZU)3+=rN~(kg`3Va41t_rXJm#Cdq1ba(a4< z8YbgTqE09MrpKOm{Pp*AyIZYZHJr~w_rrfIvfDBG^aS}8Kb zV?T6NT{YvDmRBFpDJcg7DNS)}v64a^_(lit(RbbW=6;0HEYH`~df0SWxnF(iR2_bY z16FC`Yrb_tMkK&WL*FK|^x)tSY21%@PPp^g*&`^xV>)O0O%@)*NHC)UdI~>Iu|+q& z7~Tvau$_~Kw34YS=aEZ<%B{}GV<*FRXTg0*DYOT5da<}~ln;&J{n4X8i5iJ54;c6f zaV8uXxD9`bEFEYL13A+v8r%l~rBA*43sEq`SsLo5COkSqN)HSI_o3l6#ZD_bs0&BS zW`pO=H@!QclqP)ZRwy~>`)IrC<MsVa43Q@SYrW5NbG+^i9iB7-y9~cI^L``_}x_dfpN_doW*_dXU>06lgpb-*P{7zbIT zcz~ypwBQ%w=ELuQ>xbU=)(^e+Ed)ONzPEhjeUE?eyC3`T```Y-_Y&sw)}Q^vXLi-R zVgTW_>1yyfOAGo2Ug;EqZxkL~H(>lAQ^Do^7Zw;bk3ISzxk3;m@A-~5{PL&2WbjUh z7egtx4ZRpuz=2?Xc73mq^P>RHi*b!nLDYeF$3mN6L^kmRuozH6a0+x!_KO$hkH7JC z#DC&fKNmIJh1-T-{Nyk1LTZ!m-i7WQfTYs-5{c+`^>&2~m7)#%z9QVY%gX`-SEZ-U z)uJUDbM_4n-E-x*CU#fG9SDkl?=+JOMgvjae%WTZf+QX z05$bV+EjI(>r}wOc~QDZ5|90?)A<+bJRWMLJW$N!r?wni@{mW@`I{D04c^-;*Cq23z*v;wALYbqbF4XQaH61H z;TX`^R$wGK0&MWf^~AjP5_ZoRoqbxCK#%sEVVSZo8SD>Ww2&i zn@bL-pa^M*S{PNj9TQg=NAr*Uq3<;AF1*|j*0A;#15i~pA2#D|)$)GmuHaF}^WI+iLbQo{?xm8FO*}02{7w$XvXMg1PK`GEKluYA-RUv(E(vX(< zCuvY$J=v^>e%<%YX4_4+?QGjl2ZVby-NK>R0UPtqaugn9IWO>wCC(rH(|_2{pZbG; z?oa-KKl{VK|40ASKlgw8lfVB*|HME0qd&~&_x-tl`}ge{^eqHW=_QB)-ytP)fX`{X zwPri%JEte;hHhG%)|K^L;PT3~hzoXkrNMPna4Vme0N0iD0w0hG#t=ygM9C)g zmbp7!64CmmZ$muOYxiZv`^DVTQFo0(Im~SEfF3W39OITu?bUaZ>>+H^ttaw_9_rE8 z+i6dQcH3{dURyfuqb(@Bi;bG2NY^5Db4e5wK+xSvo1twRe&#t8nX5I@1cL0k4&97Z z0grce)!?OQWQ5^?f!;T`91f;O7%;+(Vl1hPHjNsDf<5xF!L9PGF7!>;(+y?AUHmkrC*YMhA6W=r$7&g`(g!TkT5Uq;;Hg@WjT;nhQ?xG3c)#w@$Gd^G_WM&&N zmLSbX7x)%k9$tzQB0NM>M+3sEGOzxfrTBOZoQ0dLr~u%1aI5zekCJL2guoB(qbs($ zb<~R03sRBBlj->bh-rB9Blq?09l}c6m_^iy3KHv9656^1_G_PcDk`}PFDKMp3uDOk zuCZ>%-N5jgE@P5=XNCLtlDsIYs(J99#Wcwtedq!i8Nr|>CmhJac>eOuS5$5Z&fT*p z@*KeniTvWPfBu($>&u_~%`boIx4!a;Pk-^3Bk*&M zUf(hFo#+0i5D#1k#UiZXN+)HI9@35Brt2%jIwryf^WGf=k~9H2I`u9QBGXxh8t^(= z8t{9*_d7oJfp>oRy>I=<_q^>R1m6FSkG$_~AAbMaKl(lI_{jU;{^9q%?Pq`Kw|4D* znZUKgtN^EkZ5i&nuhxX0w{#Ha3JwC-Ap60KOOieI`umYcSUAKX6My+PzWFOE)cvi3 zZ)#Pe+b1$L0``A5OHaQ{Iqp`sT+i2hKuoDZiD~=p;rq|O>Cp$_ zfV(RyFBK6LZcETJ|8flVy02os0T4WIZ+uRvwt@#wgKF^cYX@940{i5}Q z{+L3SFLiNfH;AFGYutRO1I`L#5(mM{(1tDc;Wkg6zaSo6zLt@uMP6*W=5&3ECE&cl zY|{vy2iACf>}_Qi9Lq;sot*m4c+GJFO$I zOKBZe9_EnVN7NTi1evw%#u(iMS2m&+y*YfM9-_1)E3mRiX%sCCzlBHoA+ZD$eoiD# zCpu{2k_zY>*`o&Y$2yGD(O@+q=@F1l`xcV$ofvc&obv=z6GJb_^mYb%2$Jm*nQQ@n z&#tK4+)=?Fr7QErLPT!d%ngds>1cNb4=Fy1a@vz+zA@)@_d2EY=z|wDbe)1CnU0Fq zVz`EST3{rW(eFAc-wdeQO6rSwnyPM=2M0}4r&)#s#ISFX3wc(~OOiBAbKkiI{PySr z7qHjxW@3OKp^?(2FWON#ckz%R#+8K_ayZzXgA$JX3o+_^_@)sQ)v`?H+4SST_PJmB z^p`&S#ixGuQ=j|fuYcj^KJ~ee|N0j`{;Qw=)!+Wg|Mtnxf8bqjhVw0#LgV0p)a3#V zfqv81$ch;p(btA4w6D6p!BFk{mWl+Wi}wsdt`tNmaP`dP3z?O2Kc*-19UuL`I|+RB z{qOkj_q?6(hu-`6hu`z~2jBDN55Mm%Klh2xjwRh9AaFyvC0*AdQvqaK7KgiHvd2S2 zFcdwyc$m@T$KCoRlgPMW{>5$mBJ(#Nz9p612K3IFDR@VLsq9l7N-$_FRF1xilVmf` zq9EyFA`>hV2J;~+(HxGFIk(&U?>YF~m%jSuM<4pcuYTSNUc2z(hx!*k`Kev#j&)R~ zSqYsWy_#w@Y&UsY)J=nR)o-v%+3M3_()4tj$xR@??7D zv~jOQNU~QwfFP%u!JrNsq7JKan-#_J$qFt5C)jb|5Pl6LCrvlJ>#Ywz`P7LP=&K7P z70-faRfDV6Vh7LX2UufJP2F}Vrp#FqHyLVSyXV=-bg#y}(_uTQI#hGwDUmScQU870 zp%&Y=UMvnU>!ASTGyJ8kiWnaz^HMu@SAtS~dfK%xRF-8V@;r~HI`s-r-=0>%H0?KK zk)?Sa3VlKvO2**HvV3rH!lMVf;v~7)EezpJr)UHU<`-sa(^kne!JZ(2s@ZwojxOjp zmG0lhoEdPo$CsA4PC}9ip0iE=j74~OouDoB zn_Q*>ziu=$y)20NF{VX_nvw>XOasm8ND=N*B#-}eoOo(99-P{5Rc4%iiS`&_eY4ya z0(u-SEMaGj#*HYT_I8GsC52Fd>ntGCtzwo5+RPTf({wgH{><}^%C3qL{*OQW$HzeB zd}EjRa;90QAGtxD=Qyu}uV-R3!7R=t%(h%C2)y(4hjnK|e(wjrllt1WE6X`fWZ(CB zI=&o~CW!o@?f%-|e}2~OF5Eus#_~E?wN=}+2s>}XNOOkf`10j)aX^4U?&>DXi{)~` zh@7t0?|$swaz6jicRh-PNDA-Vga9RK*A6E?@wb0|Ec15Z1nb5?`%CxiXwMa zVX{4c?g(2k#c@ey2gR)Ex~A)&J88}z%)^&Pugm)INtvhkI!&v?kG7Ncunb(RfEq1a z&f9MOoj>-`WR^IY;ms-uZvQOt)dz62JInRk6b14m-^uvqRXB6BYr&(X$gmhES!r$_ zMXX#atIA@e!7GP!iC6EA_jUjnxZC0X`D6d%uJc!+9vWD7+_Wm+Ibox%4Eu}*bfnt8 z?G5Ls=b!y3#vBqLrJEG_mu&_E&bH$>iVp6aVHebmzbpXXCu3Ln?<3eIP{A549o3R2$587BOXiEEw_dmXs)bbMSDt(Bo{Pww z0oer!B`HRC%#iQ0-;n^#BWW+URiWXh8jbxplfG%wEU%k2?uL;GIuYXNu?X~Aw%9D& zWpWTZiFR<@4fCRm?QobjNbyedCNG=T3kkAhc5=GL?Oh%mVsoxmr$nw+>w7O=bfae9 zmow^B&W`|Pws57JgeOf^6$`|^XHc5DMK5TpwoRHBlc8;z4vn8?v#glA6AxwKb}UD* zD1FC6SFf=ru&l6v&z(DmadC2dIW0<0j?A`6I&Zo<3@V%xuPmD-2{K_`WS8pn=Z-Io zmiuhbFWXFe{&*^XGfB78F4?-V1P4MZV<*B%L8KQ0hj-EuOt*LhA*GyUn{8)tK-0NU z3L;airy!_eG|Xm|_z|>)Qb5{3Xh``E+)#|wIfFVnJT_3X35(44&|8!y)9BI|oQ9VI z7T{i|0bORHL*DTl4i8$Eb0|@MtjQ#$38a)9qJ( z>OYR6g`2Oa&@+ZXhmdy67%8xi3F0t4xzm3Z4Z3vH($&c;W0oCv>{1!8=x*n-d#`BoUM^kb$fDJ zT|QYq@ywOyuB=Z^)(8}o*~w{pva0VrztA_=qCVc1+0JGg zkIQcRG$uqo^8Uv^^zJu(?0X)2-*>*@V;^|?hu`DWe?TwFD&?zR{TcdjtXLWhBon%Qm&UQ19;JmJC%!P3(7lm~3+#Cvd{7sL(^0t26 zF++N%uc*k2N`(}huU1#Ets#tqgC#z#ay3o5y7oXV8qf<#y+LT3V0a~n4pd>87ge>6 znGOk)c+9MKzVV(Xo~d3dTfbaUal$9&k};i