|
|
|
@ -321,16 +321,19 @@ FfxUInt32x2 SPD_RenderSize() |
|
|
|
|
|
|
|
// Declare and sample camera buffers as regular textures, unless overridden |
|
|
|
#if !defined(UNITY_FSR3_TEX2D) |
|
|
|
#define UNITY_FSR3_TEX2D(type) Texture2D<type> |
|
|
|
#define UNITY_FSR3_TEX2D(type) Texture2D<type> |
|
|
|
#endif |
|
|
|
#if !defined(UNITY_FSR3_RWTEX2D) |
|
|
|
#define UNITY_FSR3_RWTEX2D(type) RWTexture2D<type> |
|
|
|
#define UNITY_FSR3_RWTEX2D(type) RWTexture2D<type> |
|
|
|
#endif |
|
|
|
#if !defined(UNITY_FSR3_POS) |
|
|
|
#define UNITY_FSR3_POS(pxPos) (pxPos) |
|
|
|
#define UNITY_FSR3_POS(pxPos) (pxPos) |
|
|
|
#endif |
|
|
|
#if !defined(UNITY_FSR3_UV) |
|
|
|
#define UNITY_FSR3_UV(uv) (uv) |
|
|
|
#define UNITY_FSR3_UV(uv) (uv) |
|
|
|
#endif |
|
|
|
#if !defined(UNITY_FSR3_GETDIMS) |
|
|
|
#define UNITY_FSR3_GETDIMS(tex, w, h) (tex).GetDimensions((w), (h)) |
|
|
|
#endif |
|
|
|
|
|
|
|
SamplerState s_PointClamp : register(s0); |
|
|
|
@ -356,85 +359,85 @@ FfxFloat32x2 SampleSPDMipLevel(FfxFloat32x2 fUV, FfxUInt32 mipLevel) |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) |
|
|
|
Texture2D<FfxFloat32> r_input_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH); |
|
|
|
UNITY_FSR3_TEX2D(FfxFloat32) r_input_depth : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH); |
|
|
|
|
|
|
|
FfxFloat32 LoadInputDepth(FfxUInt32x2 iPxPos) |
|
|
|
{ |
|
|
|
return r_input_depth[iPxPos]; |
|
|
|
return r_input_depth[UNITY_FSR3_POS(iPxPos)]; |
|
|
|
} |
|
|
|
|
|
|
|
FfxFloat32 SampleInputDepth(FfxFloat32x2 fUV) |
|
|
|
{ |
|
|
|
return r_input_depth.SampleLevel(s_LinearClamp, fUV, 0).x; |
|
|
|
return r_input_depth.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).x; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK) |
|
|
|
Texture2D<FfxFloat32> r_reactive_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK); |
|
|
|
UNITY_FSR3_TEX2D(FfxFloat32) r_reactive_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK); |
|
|
|
|
|
|
|
FfxFloat32 LoadReactiveMask(FfxUInt32x2 iPxPos) |
|
|
|
{ |
|
|
|
return r_reactive_mask[iPxPos]; |
|
|
|
return r_reactive_mask[UNITY_FSR3_POS(iPxPos)]; |
|
|
|
} |
|
|
|
|
|
|
|
FfxInt32x2 GetReactiveMaskResourceDimensions() |
|
|
|
{ |
|
|
|
FfxUInt32 uWidth; |
|
|
|
FfxUInt32 uHeight; |
|
|
|
r_reactive_mask.GetDimensions(uWidth, uHeight); |
|
|
|
UNITY_FSR3_GETDIMS(r_reactive_mask, uWidth, uHeight); |
|
|
|
|
|
|
|
return FfxInt32x2(uWidth, uHeight); |
|
|
|
} |
|
|
|
|
|
|
|
FfxFloat32 SampleReactiveMask(FfxFloat32x2 fUV) |
|
|
|
{ |
|
|
|
return r_reactive_mask.SampleLevel(s_LinearClamp, fUV, 0).x; |
|
|
|
return r_reactive_mask.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).x; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) |
|
|
|
Texture2D<FfxFloat32> r_transparency_and_composition_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK); |
|
|
|
UNITY_FSR3_TEX2D(FfxFloat32) r_transparency_and_composition_mask : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK); |
|
|
|
|
|
|
|
FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) |
|
|
|
{ |
|
|
|
return r_transparency_and_composition_mask[iPxPos]; |
|
|
|
return r_transparency_and_composition_mask[UNITY_FSR3_POS(iPxPos)]; |
|
|
|
} |
|
|
|
|
|
|
|
FfxInt32x2 GetTransparencyAndCompositionMaskResourceDimensions() |
|
|
|
{ |
|
|
|
FfxUInt32 uWidth; |
|
|
|
FfxUInt32 uHeight; |
|
|
|
r_transparency_and_composition_mask.GetDimensions(uWidth, uHeight); |
|
|
|
UNITY_FSR3_GETDIMS(r_transparency_and_composition_mask, uWidth, uHeight); |
|
|
|
|
|
|
|
return FfxInt32x2(uWidth, uHeight); |
|
|
|
} |
|
|
|
|
|
|
|
FfxFloat32 SampleTransparencyAndCompositionMask(FfxFloat32x2 fUV) |
|
|
|
{ |
|
|
|
return r_transparency_and_composition_mask.SampleLevel(s_LinearClamp, fUV, 0).x; |
|
|
|
return r_transparency_and_composition_mask.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).x; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_SRV_INPUT_COLOR) |
|
|
|
Texture2D<FfxFloat32x4> r_input_color_jittered : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_COLOR); |
|
|
|
UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_color_jittered : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_COLOR); |
|
|
|
|
|
|
|
FfxFloat32x3 LoadInputColor(FfxUInt32x2 iPxPos) |
|
|
|
{ |
|
|
|
return r_input_color_jittered[iPxPos].rgb; |
|
|
|
return r_input_color_jittered[UNITY_FSR3_POS(iPxPos)].rgb; |
|
|
|
} |
|
|
|
|
|
|
|
FfxFloat32x3 SampleInputColor(FfxFloat32x2 fUV) |
|
|
|
{ |
|
|
|
return r_input_color_jittered.SampleLevel(s_LinearClamp, fUV, 0).rgb; |
|
|
|
return r_input_color_jittered.SampleLevel(s_LinearClamp, UNITY_FSR3_UV(fUV), 0).rgb; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS) |
|
|
|
Texture2D<FfxFloat32x4> r_input_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS); |
|
|
|
UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_motion_vectors : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS); |
|
|
|
|
|
|
|
FfxFloat32x2 LoadInputMotionVector(FfxUInt32x2 iPxDilatedMotionVectorPos) |
|
|
|
{ |
|
|
|
FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[iPxDilatedMotionVectorPos].xy; |
|
|
|
FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[UNITY_FSR3_POS(iPxDilatedMotionVectorPos)].xy; |
|
|
|
|
|
|
|
FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); |
|
|
|
|
|
|
|
@ -512,11 +515,11 @@ void StoreInternalColorAndWeight(FfxUInt32x2 iPxPos, FfxFloat32x4 fColorAndWeigh |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT) |
|
|
|
RWTexture2D<FfxFloat32x4> rw_upscaled_output : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT); |
|
|
|
UNITY_FSR3_RWTEX2D(FfxFloat32x4) rw_upscaled_output : FFX_FSR3UPSCALER_DECLARE_UAV(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT); |
|
|
|
|
|
|
|
void StoreUpscaledOutput(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) |
|
|
|
{ |
|
|
|
rw_upscaled_output[iPxPos] = FfxFloat32x4(fColor, 1.f); |
|
|
|
rw_upscaled_output[UNITY_FSR3_POS(iPxPos)] = FfxFloat32x4(fColor, 1.f); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
@ -827,11 +830,11 @@ void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxUInt32x2 iPxPos, FFX_PARAMETE |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY) |
|
|
|
Texture2D<FfxFloat32x4> r_input_opaque_only : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY); |
|
|
|
UNITY_FSR3_TEX2D(FfxFloat32x4) r_input_opaque_only : FFX_FSR3UPSCALER_DECLARE_SRV(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY); |
|
|
|
|
|
|
|
FfxFloat32x3 LoadOpaqueOnly(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) |
|
|
|
{ |
|
|
|
return r_input_opaque_only[iPxPos].xyz; |
|
|
|
return r_input_opaque_only[UNITY_FSR3_POS(iPxPos)].xyz; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
|