Browse Source
- Simplified Unity RCAS shader to basically just a few defines and a direct import of the original FSR2 shader code.
- Simplified Unity RCAS shader to basically just a few defines and a direct import of the original FSR2 shader code.
- Implemented 1x1 exposure texture and bound it to the compute shader. - Implemented RCAS config data set with precomputed values (so we don't have to do any unsafe float-to-int conversions), apply it to a constant buffer, and made sharpness available as a slider in the inspector.mac-autoexp
9 changed files with 1175 additions and 78 deletions
-
849Assets/Resources/Shaders/ffx_fsr2_callbacks_hlsl.h
-
27Assets/Resources/Shaders/ffx_fsr2_callbacks_hlsl.h.meta
-
76Assets/Resources/Shaders/ffx_fsr2_rcas_pass.compute
-
89Assets/Resources/Shaders/ffx_fsr2_rcas_pass.hlsl
-
7Assets/Resources/Shaders/ffx_fsr2_rcas_pass.hlsl.meta
-
88Assets/Resources/Shaders/ffx_fsr2_resources.h
-
27Assets/Resources/Shaders/ffx_fsr2_resources.h.meta
-
2Assets/Scenes/SampleScene.unity
-
88Assets/Scripts/FSR2Thing.cs
@ -0,0 +1,849 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (c) 2022 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) |
||||
|
cbuffer cbFSR2 : FFX_FSR2_DECLARE_CB(FSR2_BIND_CB_FSR2) |
||||
|
{ |
||||
|
FfxInt32x2 uRenderSize; |
||||
|
FfxInt32x2 uDisplaySize; |
||||
|
FfxInt32x2 uLumaMipDimensions; |
||||
|
FfxInt32 uLumaMipLevelToUse; |
||||
|
FfxUInt32 uFrameIndex; |
||||
|
FfxFloat32x2 fDisplaySizeRcp; |
||||
|
FfxFloat32x2 fJitter; |
||||
|
FfxFloat32x4 fDeviceToViewDepth; |
||||
|
FfxFloat32x2 depthclip_uv_scale; |
||||
|
FfxFloat32x2 postprocessed_lockstatus_uv_scale; |
||||
|
FfxFloat32x2 reactive_mask_dim_rcp; |
||||
|
FfxFloat32x2 MotionVectorScale; |
||||
|
FfxFloat32x2 fDownscaleFactor; |
||||
|
FfxFloat32 fPreExposure; |
||||
|
FfxFloat32 fTanHalfFOV; |
||||
|
FfxFloat32x2 fMotionVectorJitterCancellation; |
||||
|
FfxFloat32 fJitterSequenceLength; |
||||
|
FfxFloat32 fLockInitialLifetime; |
||||
|
FfxFloat32 fLockTickDelta; |
||||
|
FfxFloat32 fDeltaTime; |
||||
|
FfxFloat32 fDynamicResChangeFactor; |
||||
|
FfxFloat32 fLumaMipRcp; |
||||
|
#define FFX_FSR2_CONSTANT_BUFFER_1_SIZE 36 // Number of 32-bit values. This must be kept in sync with the cbFSR2 size. |
||||
|
}; |
||||
|
#else |
||||
|
#define iRenderSize 0 |
||||
|
#define iDisplaySize 0 |
||||
|
#define iLumaMipDimensions 0 |
||||
|
#define iLumaMipLevelToUse 0 |
||||
|
#define iFrameIndex 0 |
||||
|
#define fDisplaySizeRcp 0 |
||||
|
#define fJitter 0 |
||||
|
#define fDeviceToViewDepth FfxFloat32x4(0,0,0,0) |
||||
|
#define depthclip_uv_scale 0 |
||||
|
#define postprocessed_lockstatus_uv_scale 0 |
||||
|
#define reactive_mask_dim_rcp 0 |
||||
|
#define MotionVectorScale 0 |
||||
|
#define fDownscaleFactor 0 |
||||
|
#define fPreExposure 0 |
||||
|
#define fTanHalfFOV 0 |
||||
|
#define fMotionVectorJitterCancellation 0 |
||||
|
#define fJitterSequenceLength 0 |
||||
|
#define fLockInitialLifetime 0 |
||||
|
#define fLockTickDelta 0 |
||||
|
#define fDeltaTime 0 |
||||
|
#define fDynamicResChangeFactor 0 |
||||
|
#define fLumaMipRcp 0 |
||||
|
#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) |
||||
|
|
||||
|
|
||||
|
FfxFloat32 LumaMipRcp() |
||||
|
{ |
||||
|
return fLumaMipRcp; |
||||
|
} |
||||
|
|
||||
|
FfxInt32x2 LumaMipDimensions() |
||||
|
{ |
||||
|
return uLumaMipDimensions; |
||||
|
} |
||||
|
|
||||
|
FfxInt32 LumaMipLevelToUse() |
||||
|
{ |
||||
|
return uLumaMipLevelToUse; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 DownscaleFactor() |
||||
|
{ |
||||
|
return fDownscaleFactor; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 Jitter() |
||||
|
{ |
||||
|
return fJitter; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 MotionVectorJitterCancellation() |
||||
|
{ |
||||
|
return fMotionVectorJitterCancellation; |
||||
|
} |
||||
|
|
||||
|
FfxInt32x2 RenderSize() |
||||
|
{ |
||||
|
return uRenderSize; |
||||
|
} |
||||
|
|
||||
|
FfxInt32x2 DisplaySize() |
||||
|
{ |
||||
|
return uDisplaySize; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 DisplaySizeRcp() |
||||
|
{ |
||||
|
return fDisplaySizeRcp; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 JitterSequenceLength() |
||||
|
{ |
||||
|
return fJitterSequenceLength; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LockInitialLifetime() |
||||
|
{ |
||||
|
return fLockInitialLifetime; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LockTickDelta() |
||||
|
{ |
||||
|
return fLockTickDelta; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 DeltaTime() |
||||
|
{ |
||||
|
return fDeltaTime; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 MaxAccumulationWeight() |
||||
|
{ |
||||
|
const FfxFloat32 averageLanczosWeightPerFrame = 0.74f; // Average lanczos weight for jitter accumulated samples |
||||
|
|
||||
|
return 12; //32.0f * averageLanczosWeightPerFrame; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 DynamicResChangeFactor() |
||||
|
{ |
||||
|
return fDynamicResChangeFactor; |
||||
|
} |
||||
|
|
||||
|
FfxUInt32 FrameIndex() |
||||
|
{ |
||||
|
return uFrameIndex; |
||||
|
} |
||||
|
|
||||
|
SamplerState s_PointClamp : register(s0); |
||||
|
SamplerState s_LinearClamp : register(s1); |
||||
|
|
||||
|
// SRVs |
||||
|
#if defined(FFX_INTERNAL) |
||||
|
Texture2D<FfxFloat32x4> r_input_color_jittered : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_COLOR); |
||||
|
Texture2D<FfxFloat32x4> r_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS); |
||||
|
Texture2D<FfxFloat32> r_depth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_DEPTH); |
||||
|
Texture2D<FfxFloat32x2> r_exposure : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_EXPOSURE); |
||||
|
Texture2D<FfxFloat32> r_reactive_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK); |
||||
|
Texture2D<FfxFloat32> r_transparency_and_composition_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK); |
||||
|
Texture2D<FfxUInt32> r_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH); |
||||
|
Texture2D<FfxFloat32x2> r_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS); |
||||
|
Texture2D<FfxFloat32> r_dilatedDepth : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH); |
||||
|
Texture2D<FfxFloat32x4> r_internal_upscaled_color : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR); |
||||
|
Texture2D<FfxFloat32x3> r_lock_status : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS); |
||||
|
Texture2D<FfxFloat32> r_depth_clip : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DEPTH_CLIP); |
||||
|
Texture2D<unorm FfxFloat32x4> r_prepared_input_color : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR); |
||||
|
Texture2D<unorm FfxFloat32x4> r_luma_history : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY); |
||||
|
Texture2D<FfxFloat32x4> r_rcas_input : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RCAS_INPUT); |
||||
|
Texture2D<FfxFloat32> r_lanczos_lut : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_LANCZOS_LUT); |
||||
|
Texture2D<FfxFloat32> r_imgMips : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE); |
||||
|
Texture2D<FfxFloat32> r_upsample_maximum_bias_lut : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT); |
||||
|
Texture2D<FfxFloat32x2> r_dilated_reactive_masks : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS); |
||||
|
Texture2D<FfxFloat32x4> r_debug_out : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT); |
||||
|
|
||||
|
// declarations not current form, no accessor functions |
||||
|
Texture2D<FfxFloat32x4> r_transparency_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_TRANSPARENCY_MASK); |
||||
|
Texture2D<FfxFloat32x4> r_bias_current_color_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_BIAS_CURRENT_COLOR_MASK); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_albedo : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_ALBEDO); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_roughness : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_ROUGHNESS); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_metallic : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_METALLIC); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_specular : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_SPECULAR); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_subsurface : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_SUBSURFACE); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_normals : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_NORMALS); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_shading_mode_id : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_SHADING_MODE_ID); |
||||
|
Texture2D<FfxFloat32x4> r_gbuffer_material_id : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_GBUFFER_MATERIAL_ID); |
||||
|
Texture2D<FfxFloat32x4> r_motion_vectors_3d : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_VELOCITY_3D); |
||||
|
Texture2D<FfxFloat32x4> r_is_particle_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_IS_PARTICLE_MASK); |
||||
|
Texture2D<FfxFloat32x4> r_animated_texture_mask : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_ANIMATED_TEXTURE_MASK); |
||||
|
Texture2D<FfxFloat32> r_depth_high_res : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_DEPTH_HIGH_RES); |
||||
|
Texture2D<FfxFloat32x4> r_position_view_space : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_POSITION_VIEW_SPACE); |
||||
|
Texture2D<FfxFloat32x4> r_ray_tracing_hit_distance : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_RAY_TRACING_HIT_DISTANCE); |
||||
|
Texture2D<FfxFloat32x4> r_motion_vectors_reflection : FFX_FSR2_DECLARE_SRV(FFX_FSR2_RESOURCE_IDENTIFIER_VELOCITY_REFLECTION); |
||||
|
|
||||
|
// UAV declarations |
||||
|
RWTexture2D<FfxUInt32> rw_reconstructed_previous_nearest_depth : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH); |
||||
|
RWTexture2D<FfxFloat32x2> rw_dilated_motion_vectors : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS); |
||||
|
RWTexture2D<FfxFloat32> rw_dilatedDepth : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH); |
||||
|
RWTexture2D<FfxFloat32x4> rw_internal_upscaled_color : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR); |
||||
|
RWTexture2D<FfxFloat32x3> rw_lock_status : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS); |
||||
|
RWTexture2D<FfxFloat32> rw_depth_clip : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DEPTH_CLIP); |
||||
|
RWTexture2D<unorm FfxFloat32x4> rw_prepared_input_color : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR); |
||||
|
RWTexture2D<unorm FfxFloat32x4> rw_luma_history : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY); |
||||
|
RWTexture2D<FfxFloat32x4> rw_upscaled_output : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT); |
||||
|
|
||||
|
globallycoherent RWTexture2D<FfxFloat32> rw_img_mip_shading_change : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_SHADING_CHANGE); |
||||
|
globallycoherent RWTexture2D<FfxFloat32> rw_img_mip_5 : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_5); |
||||
|
RWTexture2D<unorm FfxFloat32x2> rw_dilated_reactive_masks : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS); |
||||
|
RWTexture2D<FfxFloat32x2> rw_exposure : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_EXPOSURE); |
||||
|
globallycoherent RWTexture2D<FfxUInt32> rw_spd_global_atomic : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT); |
||||
|
RWTexture2D<FfxFloat32x4> rw_debug_out : FFX_FSR2_DECLARE_UAV(FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT); |
||||
|
|
||||
|
#else // #if defined(FFX_INTERNAL) |
||||
|
#if defined FSR2_BIND_SRV_INPUT_COLOR |
||||
|
Texture2D<FfxFloat32x4> r_input_color_jittered : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INPUT_COLOR); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_MOTION_VECTORS |
||||
|
Texture2D<FfxFloat32x4> r_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_MOTION_VECTORS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_DEPTH |
||||
|
Texture2D<FfxFloat32> r_depth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DEPTH); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_EXPOSURE |
||||
|
Texture2D<FfxFloat32x2> r_exposure : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_EXPOSURE); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_REACTIVE_MASK |
||||
|
Texture2D<FfxFloat32> r_reactive_mask : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_REACTIVE_MASK); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK |
||||
|
Texture2D<FfxFloat32> 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<FfxUInt32> 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<FfxFloat32x2> r_dilated_motion_vectors : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_MOTION_VECTORS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_DILATED_DEPTH |
||||
|
Texture2D<FfxFloat32> r_dilatedDepth : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_DEPTH); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_INTERNAL_UPSCALED |
||||
|
Texture2D<FfxFloat32x4> r_internal_upscaled_color : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_INTERNAL_UPSCALED); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_LOCK_STATUS |
||||
|
Texture2D<FfxFloat32x3> r_lock_status : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LOCK_STATUS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_DEPTH_CLIP |
||||
|
Texture2D<FfxFloat32> r_depth_clip : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DEPTH_CLIP); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_PREPARED_INPUT_COLOR |
||||
|
Texture2D<unorm FfxFloat32x4> r_prepared_input_color : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_PREPARED_INPUT_COLOR); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_LUMA_HISTORY |
||||
|
Texture2D<unorm FfxFloat32x4> r_luma_history : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LUMA_HISTORY); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_RCAS_INPUT |
||||
|
Texture2D<FfxFloat32x4> r_rcas_input : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_RCAS_INPUT); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_LANCZOS_LUT |
||||
|
Texture2D<FfxFloat32> r_lanczos_lut : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_LANCZOS_LUT); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_EXPOSURE_MIPS |
||||
|
Texture2D<FfxFloat32> r_imgMips : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_EXPOSURE_MIPS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT |
||||
|
Texture2D<FfxFloat32> 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<FfxFloat32x2> r_dilated_reactive_masks : FFX_FSR2_DECLARE_SRV(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS); |
||||
|
#endif |
||||
|
|
||||
|
// UAV declarations |
||||
|
#if defined FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH |
||||
|
RWTexture2D<FfxUInt32> 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<FfxFloat32x2> rw_dilated_motion_vectors : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_MOTION_VECTORS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_DILATED_DEPTH |
||||
|
RWTexture2D<FfxFloat32> rw_dilatedDepth : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_DEPTH); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_INTERNAL_UPSCALED |
||||
|
RWTexture2D<FfxFloat32x4> rw_internal_upscaled_color : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_INTERNAL_UPSCALED); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_LOCK_STATUS |
||||
|
RWTexture2D<FfxFloat32x3> rw_lock_status : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LOCK_STATUS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_DEPTH_CLIP |
||||
|
RWTexture2D<FfxFloat32> rw_depth_clip : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DEPTH_CLIP); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_PREPARED_INPUT_COLOR |
||||
|
RWTexture2D<unorm FfxFloat32x4> rw_prepared_input_color : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_PREPARED_INPUT_COLOR); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_LUMA_HISTORY |
||||
|
RWTexture2D<unorm FfxFloat32x4> rw_luma_history : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_LUMA_HISTORY); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_UPSCALED_OUTPUT |
||||
|
RWTexture2D<FfxFloat32x4> rw_upscaled_output : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_UPSCALED_OUTPUT); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_EXPOSURE_MIP_LUMA_CHANGE |
||||
|
globallycoherent RWTexture2D<FfxFloat32> 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<FfxFloat32> rw_img_mip_5 : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE_MIP_5); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_DILATED_REACTIVE_MASKS |
||||
|
RWTexture2D<unorm FfxFloat32x2> rw_dilated_reactive_masks : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_DILATED_REACTIVE_MASKS); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_EXPOSURE |
||||
|
RWTexture2D<FfxFloat32x2> rw_exposure : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_EXPOSURE); |
||||
|
#endif |
||||
|
#if defined FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC |
||||
|
globallycoherent RWTexture2D<FfxUInt32> rw_spd_global_atomic : FFX_FSR2_DECLARE_UAV(FSR2_BIND_UAV_SPD_GLOBAL_ATOMIC); |
||||
|
#endif |
||||
|
#endif // #if defined(FFX_INTERNAL) |
||||
|
|
||||
|
FfxFloat32 LoadMipLuma(FfxUInt32x2 iPxPos, FfxUInt32 mipLevel) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_EXPOSURE_MIPS) || defined(FFX_INTERNAL) |
||||
|
return r_imgMips.mips[mipLevel][iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 SampleMipLuma(FfxFloat32x2 fUV, FfxUInt32 mipLevel) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_EXPOSURE_MIPS) || defined(FFX_INTERNAL) |
||||
|
fUV *= depthclip_uv_scale; |
||||
|
return r_imgMips.SampleLevel(s_LinearClamp, fUV, mipLevel); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// |
||||
|
// a 0 0 0 x |
||||
|
// 0 b 0 0 y |
||||
|
// 0 0 c d z |
||||
|
// 0 0 e 0 1 |
||||
|
// |
||||
|
// z' = (z*c+d)/(z*e) |
||||
|
// z' = (c/e) + d/(z*e) |
||||
|
// z' - (c/e) = d/(z*e) |
||||
|
// (z'e - c)/e = d/(z*e) |
||||
|
// e / (z'e - c) = (z*e)/d |
||||
|
// (e * d) / (z'e - c) = z*e |
||||
|
// z = d / (z'e - c) |
||||
|
FfxFloat32 ConvertFromDeviceDepthToViewSpace(FfxFloat32 fDeviceDepth) |
||||
|
{ |
||||
|
return -fDeviceToViewDepth[2] / (fDeviceDepth * fDeviceToViewDepth[1] - fDeviceToViewDepth[0]); |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadInputDepth(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DEPTH) || defined(FFX_INTERNAL) |
||||
|
return r_depth[iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadReactiveMask(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_REACTIVE_MASK) || defined(FFX_INTERNAL) |
||||
|
return r_reactive_mask[iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x4 GatherReactiveMask(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_REACTIVE_MASK) || defined(FFX_INTERNAL) |
||||
|
return r_reactive_mask.GatherRed(s_LinearClamp, FfxFloat32x2(iPxPos) * reactive_mask_dim_rcp); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) || defined(FFX_INTERNAL) |
||||
|
return r_transparency_and_composition_mask[iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 SampleTransparencyAndCompositionMask(FfxFloat32x2 fUV) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) || defined(FFX_INTERNAL) |
||||
|
fUV *= depthclip_uv_scale; |
||||
|
return r_transparency_and_composition_mask.SampleLevel(s_LinearClamp, fUV, 0); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 PreExposure() |
||||
|
{ |
||||
|
//return fPreExposure; |
||||
|
return 1.0f; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x3 LoadInputColor(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_INPUT_COLOR) || defined(FFX_INTERNAL) |
||||
|
return r_input_color_jittered[iPxPos].rgb / PreExposure(); |
||||
|
#else |
||||
|
return 0; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x3 LoadInputColorWithoutPreExposure(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_INPUT_COLOR) || defined(FFX_INTERNAL) |
||||
|
return r_input_color_jittered[iPxPos].rgb; |
||||
|
#else |
||||
|
return 0; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x3 LoadPreparedInputColor(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) |
||||
|
return r_prepared_input_color[iPxPos].rgb; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadPreparedInputColorLuma(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) |
||||
|
return r_prepared_input_color[iPxPos].a; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 LoadInputMotionVector(FfxUInt32x2 iPxDilatedMotionVectorPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_MOTION_VECTORS) || defined(FFX_INTERNAL) |
||||
|
FfxFloat32x2 fSrcMotionVector = r_motion_vectors[iPxDilatedMotionVectorPos].xy; |
||||
|
#else |
||||
|
FfxFloat32x2 fSrcMotionVector = 0.f; |
||||
|
#endif |
||||
|
|
||||
|
FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale; |
||||
|
|
||||
|
#if FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS |
||||
|
fUvMotionVector -= fMotionVectorJitterCancellation; |
||||
|
#endif |
||||
|
|
||||
|
return fUvMotionVector; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x4 LoadHistory(FfxUInt32x2 iPxHistory) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) |
||||
|
return r_internal_upscaled_color[iPxHistory]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x4 LoadRwInternalUpscaledColorAndWeight(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) |
||||
|
return rw_internal_upscaled_color[iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreLumaHistory(FfxUInt32x2 iPxPos, FfxFloat32x4 fLumaHistory) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_LUMA_HISTORY) || defined(FFX_INTERNAL) |
||||
|
rw_luma_history[iPxPos] = fLumaHistory; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x4 LoadRwLumaHistory(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_LUMA_HISTORY) || defined(FFX_INTERNAL) |
||||
|
return rw_luma_history[iPxPos]; |
||||
|
#else |
||||
|
return 1.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadLumaStabilityFactor(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_LUMA_HISTORY) || defined(FFX_INTERNAL) |
||||
|
return r_luma_history[iPxPos].w; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 SampleLumaStabilityFactor(FfxFloat32x2 fUV) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_LUMA_HISTORY) || defined(FFX_INTERNAL) |
||||
|
fUV *= depthclip_uv_scale; |
||||
|
return r_luma_history.SampleLevel(s_LinearClamp, fUV, 0).w; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreReprojectedHistory(FfxUInt32x2 iPxHistory, FfxFloat32x4 fHistory) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) |
||||
|
rw_internal_upscaled_color[iPxHistory] = fHistory; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreInternalColorAndWeight(FfxUInt32x2 iPxPos, FfxFloat32x4 fColorAndWeight) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_INTERNAL_UPSCALED) || defined(FFX_INTERNAL) |
||||
|
rw_internal_upscaled_color[iPxPos] = fColorAndWeight; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_UPSCALED_OUTPUT) || defined(FFX_INTERNAL) |
||||
|
rw_upscaled_output[iPxPos] = FfxFloat32x4(fColor * PreExposure(), 1.f); |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
//LOCK_LIFETIME_REMAINING == 0 |
||||
|
//Should make LockInitialLifetime() return a const 1.0f later |
||||
|
FfxFloat32x3 LoadLockStatus(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_LOCK_STATUS) || defined(FFX_INTERNAL) |
||||
|
FfxFloat32x3 fLockStatus = r_lock_status[iPxPos]; |
||||
|
|
||||
|
fLockStatus[0] -= LockInitialLifetime() * 2.0f; |
||||
|
return fLockStatus; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
FfxFloat32x3 LoadRwLockStatus(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_LOCK_STATUS) || defined(FFX_INTERNAL) |
||||
|
FfxFloat32x3 fLockStatus = rw_lock_status[iPxPos]; |
||||
|
|
||||
|
fLockStatus[0] -= LockInitialLifetime() * 2.0f; |
||||
|
|
||||
|
return fLockStatus; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreLockStatus(FfxUInt32x2 iPxPos, FfxFloat32x3 fLockstatus) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_LOCK_STATUS) || defined(FFX_INTERNAL) |
||||
|
fLockstatus[0] += LockInitialLifetime() * 2.0f; |
||||
|
|
||||
|
rw_lock_status[iPxPos] = fLockstatus; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StorePreparedInputColor(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 fTonemapped) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_PREPARED_INPUT_COLOR) || defined(FFX_INTERNAL) |
||||
|
rw_prepared_input_color[iPxPos] = fTonemapped; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxBoolean IsResponsivePixel(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
return FFX_FALSE; //not supported in prototype |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadDepthClip(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DEPTH_CLIP) || defined(FFX_INTERNAL) |
||||
|
return r_depth_clip[iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 SampleDepthClip(FfxFloat32x2 fUV) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DEPTH_CLIP) || defined(FFX_INTERNAL) |
||||
|
fUV *= depthclip_uv_scale; |
||||
|
return r_depth_clip.SampleLevel(s_LinearClamp, fUV, 0); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x3 SampleLockStatus(FfxFloat32x2 fUV) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_LOCK_STATUS) || defined(FFX_INTERNAL) |
||||
|
fUV *= postprocessed_lockstatus_uv_scale; |
||||
|
FfxFloat32x3 fLockStatus = r_lock_status.SampleLevel(s_LinearClamp, fUV, 0); |
||||
|
fLockStatus[0] -= LockInitialLifetime() * 2.0f; |
||||
|
return fLockStatus; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreDepthClip(FfxUInt32x2 iPxPos, FfxFloat32 fClip) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_DEPTH_CLIP) || defined(FFX_INTERNAL) |
||||
|
rw_depth_clip[iPxPos] = fClip; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 TanHalfFoV() |
||||
|
{ |
||||
|
return fTanHalfFOV; |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadSceneDepth(FfxUInt32x2 iPxInput) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DEPTH) || defined(FFX_INTERNAL) |
||||
|
return r_depth[iPxInput]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadReconstructedPrevDepth(FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) |
||||
|
return asfloat(r_reconstructed_previous_nearest_depth[iPxPos]); |
||||
|
#else |
||||
|
return 0; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreReconstructedDepth(FfxUInt32x2 iPxSample, FfxFloat32 fDepth) |
||||
|
{ |
||||
|
FfxUInt32 uDepth = asuint(fDepth); |
||||
|
#if defined(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) |
||||
|
#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 |
||||
|
} |
||||
|
|
||||
|
void SetReconstructedDepth(FfxUInt32x2 iPxSample, const FfxUInt32 uValue) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) || defined(FFX_INTERNAL) |
||||
|
rw_reconstructed_previous_nearest_depth[iPxSample] = uValue; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreDilatedDepth(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 fDepth) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_DILATED_DEPTH) || defined(FFX_INTERNAL) |
||||
|
rw_dilatedDepth[iPxPos] = fDepth; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreDilatedMotionVector(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fMotionVector) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) |
||||
|
rw_dilated_motion_vectors[iPxPos] = fMotionVector; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 LoadDilatedMotionVector(FfxUInt32x2 iPxInput) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) |
||||
|
return r_dilated_motion_vectors[iPxInput].xy; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 SampleDilatedMotionVector(FfxFloat32x2 fUV) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DILATED_MOTION_VECTORS) || defined(FFX_INTERNAL) |
||||
|
fUV *= depthclip_uv_scale; // TODO: assuming these are (RenderSize() / MaxRenderSize()) |
||||
|
return r_dilated_motion_vectors.SampleLevel(s_LinearClamp, fUV, 0); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 LoadDilatedDepth(FfxUInt32x2 iPxInput) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DILATED_DEPTH) || defined(FFX_INTERNAL) |
||||
|
return r_dilatedDepth[iPxInput]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 Exposure() |
||||
|
{ |
||||
|
// return 1.0f; |
||||
|
#if defined(FSR2_BIND_SRV_EXPOSURE) || defined(FFX_INTERNAL) |
||||
|
FfxFloat32 exposure = r_exposure[FfxUInt32x2(0, 0)].x; |
||||
|
#else |
||||
|
FfxFloat32 exposure = 1.f; |
||||
|
#endif |
||||
|
|
||||
|
if (exposure == 0.0f) { |
||||
|
exposure = 1.0f; |
||||
|
} |
||||
|
|
||||
|
return exposure; |
||||
|
} |
||||
|
|
||||
|
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 |
||||
|
} |
||||
|
|
||||
|
FfxFloat32 SampleUpsampleMaximumBias(FfxFloat32x2 uv) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_UPSCALE_MAXIMUM_BIAS_LUT) || defined(FFX_INTERNAL) |
||||
|
// 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); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 SampleDilatedReactiveMasks(FfxFloat32x2 fUV) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) |
||||
|
fUV *= depthclip_uv_scale; |
||||
|
return r_dilated_reactive_masks.SampleLevel(s_LinearClamp, fUV, 0); |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
FfxFloat32x2 LoadDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_SRV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) |
||||
|
return r_dilated_reactive_masks[iPxPos]; |
||||
|
#else |
||||
|
return 0.f; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fDilatedReactiveMasks) |
||||
|
{ |
||||
|
#if defined(FSR2_BIND_UAV_DILATED_REACTIVE_MASKS) || defined(FFX_INTERNAL) |
||||
|
rw_dilated_reactive_masks[iPxPos] = fDilatedReactiveMasks; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
#endif // #if defined(FFX_GPU) |
||||
@ -0,0 +1,27 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 5c9c193ec7dc3064097ab1f74232c98d |
||||
|
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: |
||||
@ -1,84 +1,10 @@ |
|||||
// Each #kernel tells which function to compile; you can have many kernels |
// Each #kernel tells which function to compile; you can have many kernels |
||||
#pragma kernel CS |
#pragma kernel CS |
||||
|
|
||||
// Create a RenderTexture with enableRandomWrite flag and set it with cs.SetTexture |
|
||||
// NOTE: the .hlsl files conveniently contain a list of inputs and outputs in their header comments |
|
||||
//Texture2D<float2> r_exposure; // Expose is not used at the moment, so no need to bind it |
|
||||
Texture2D<float4> r_rcas_input; |
|
||||
RWTexture2D<float4> rw_upscaled_output; |
|
||||
|
|
||||
// Some global defines are needed |
// Some global defines are needed |
||||
#define FFX_GPU // Compiling for GPU |
#define FFX_GPU // Compiling for GPU |
||||
#define FFX_HLSL // Compile for plain HLSL |
#define FFX_HLSL // Compile for plain HLSL |
||||
|
|
||||
//#define FFX_FSR2_OPTION_HDR_COLOR_INPUT // This ought to be supported in the long run |
//#define FFX_FSR2_OPTION_HDR_COLOR_INPUT // This ought to be supported in the long run |
||||
|
|
||||
#define FSR_RCAS_F // Using 32-bit float mode (not half) |
|
||||
#define FSR2_BIND_UAV_UPSCALED_OUTPUT // Create an SRV binding for the output we need |
|
||||
|
|
||||
#include "ffx_core.h" // With the above defines this all compiles cleanly, yay! |
|
||||
|
|
||||
// This is from ffx_fsr2_callbacks_hlsl.h (bunch of macro use to declare SRVs, may need conversion) |
|
||||
FfxFloat32 Exposure() |
|
||||
{ |
|
||||
// return 1.0f; |
|
||||
#if defined(FSR2_BIND_SRV_EXPOSURE) || defined(FFX_INTERNAL) |
|
||||
FfxFloat32 exposure = r_exposure[FfxUInt32x2(0, 0)].x; |
|
||||
#else |
|
||||
FfxFloat32 exposure = 1.f; |
|
||||
#endif |
|
||||
|
|
||||
if (exposure == 0.0f) { |
|
||||
exposure = 1.0f; |
|
||||
} |
|
||||
|
|
||||
return exposure; |
|
||||
} |
|
||||
|
|
||||
FfxFloat32 PreExposure() |
|
||||
{ |
|
||||
//return fPreExposure; // TODO: requires constant buffer bindings, uhhh... (see FSR2_BIND_CB_FSR2) |
|
||||
return 1.0f; |
|
||||
} |
|
||||
|
|
||||
void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) |
|
||||
{ |
|
||||
#if defined(FSR2_BIND_UAV_UPSCALED_OUTPUT) || defined(FFX_INTERNAL) |
|
||||
rw_upscaled_output[iPxPos] = FfxFloat32x4(fColor * PreExposure(), 1.f); |
|
||||
#endif |
|
||||
} |
|
||||
|
|
||||
//#include "ffx_fsr2_common.h" // TODO: still depends on a bunch of CB's from callbacks_hlsl |
|
||||
|
|
||||
// Below is all converted from ffx_fsr2_rcas_pass.hlsl |
|
||||
uint4 RCASConfig() |
|
||||
{ |
|
||||
// These are not your typical config parameters... these are packed floats-as-ints, i.e. complete nonsense values |
|
||||
return uint4(1061290752, 974141968, 0, 0); // TODO: this needs to be a constant buffer value |
|
||||
} |
|
||||
|
|
||||
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 |
|
||||
void CS(uint3 LocalThreadId : SV_GroupThreadID, uint3 WorkGroupId : SV_GroupID, uint3 Dtid : SV_DispatchThreadID) |
|
||||
{ |
|
||||
RCAS(LocalThreadId, WorkGroupId, Dtid); |
|
||||
} |
|
||||
|
#include "ffx_fsr2_rcas_pass.hlsl" |
||||
@ -0,0 +1,89 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (c) 2022 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. |
||||
|
|
||||
|
// FSR2 pass 6 |
||||
|
// SRV 4 : m_Exposure : r_exposure |
||||
|
// SRV 19 : FSR2_InternalUpscaled1 : r_rcas_input |
||||
|
// UAV 18 : DisplayOutput : rw_upscaled_output |
||||
|
// CB 0 : cbFSR2 |
||||
|
// CB 1 : cbRCAS |
||||
|
|
||||
|
#define FSR2_BIND_SRV_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() |
||||
|
{ |
||||
|
// These are not your typical config parameters... these are packed floats-as-ints, i.e. complete nonsense values |
||||
|
return uint4(1061290752, 974141968, 0, 0); // TODO: this needs to be a constant buffer value |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
#if FFX_HALF |
||||
|
float4 LoadRCAS_Input(FfxInt16x2 iPxPos) |
||||
|
{ |
||||
|
return r_rcas_input[iPxPos]; |
||||
|
} |
||||
|
#else |
||||
|
float4 LoadRCAS_Input(FfxInt32x2 iPxPos) |
||||
|
{ |
||||
|
return r_rcas_input[iPxPos]; |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
#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); |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: 77fd29b4fc373da40881622c212f2505 |
||||
|
ShaderIncludeImporter: |
||||
|
externalObjects: {} |
||||
|
userData: |
||||
|
assetBundleName: |
||||
|
assetBundleVariant: |
||||
@ -0,0 +1,88 @@ |
|||||
|
// This file is part of the FidelityFX SDK. |
||||
|
// |
||||
|
// Copyright (c) 2022 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_COLOR 1 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS 2 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_DEPTH 3 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_EXPOSURE 4 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK 5 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK 6 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH 7 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 8 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_DEPTH 9 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR 10 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS 11 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_DEPTH_CLIP 12 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR 13 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_LUMA_HISTORY 14 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 15 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_LANCZOS_LUT 16 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT 17 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT 18 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_RCAS_INPUT 19 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_1 20 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_2 21 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_1 22 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_2 23 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_REACTIVITY 24 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_TRANSPARENCY_AND_COMPOSITION 25 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTITIER_UPSAMPLE_MAXIMUM_BIAS_LUT 26 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS 27 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE 28 // same as FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_0 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_0 28 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_1 29 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_2 30 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_3 31 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_4 32 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_5 33 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_6 34 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_7 35 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_8 36 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_9 37 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_10 38 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_11 39 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_12 40 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_EXPOSURE 41 |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_EXPOSURE 42 |
||||
|
|
||||
|
// Shading change detection mip level setting, value must be in the range [FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_0, FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_12] |
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_SHADING_CHANGE FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_4 |
||||
|
#define FFX_FSR2_SHADING_CHANGE_MIP_LEVEL (FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE_MIPMAP_SHADING_CHANGE - FFX_FSR2_RESOURCE_IDENTIFIER_AUTO_EXPOSURE) |
||||
|
|
||||
|
#define FFX_FSR2_RESOURCE_IDENTIFIER_COUNT 43 |
||||
|
|
||||
|
#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_FSR2 0 |
||||
|
#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_SPD 1 |
||||
|
#define FFX_FSR2_CONSTANTBUFFER_IDENTIFIER_RCAS 2 |
||||
|
|
||||
|
#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 ) |
||||
@ -0,0 +1,27 @@ |
|||||
|
fileFormatVersion: 2 |
||||
|
guid: f54305f51c7d4314e8f18b6470ca188e |
||||
|
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: |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue