diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PS5/PSSRPlugin.prx b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PS5/PSSRPlugin.prx index d0d7b92..8681e95 100644 Binary files a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PS5/PSSRPlugin.prx and b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PS5/PSSRPlugin.prx differ diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs index d54a765..86fdb69 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs @@ -98,6 +98,10 @@ namespace UnityEngine.Rendering.PostProcessing // TODO: if PSSR needs a copy of the previous depth and motion vectors anyway, why not just double-buffer those resources ourselves and make good use of these otherwise dumb copies? PrepareInputs(cmd, context, config, _inputColor, _inputDepth, _inputMotionVectors); + + var flags = PSSRPlugin.OptionFlags.None; + if (SystemInfo.usesReversedZBuffer) flags |= PSSRPlugin.OptionFlags.ReverseDepth; + if (config.exposureSource == Upscaling.ExposureSource.Auto) flags |= PSSRPlugin.OptionFlags.AutoExposure; _dispatchParams.color = ToNativePtr(_inputColor); _dispatchParams.depth = ToNativePtr(_inputDepth); @@ -119,6 +123,7 @@ namespace UnityEngine.Rendering.PostProcessing _dispatchParams.FromCamera(context.camera); _dispatchParams.preExposure = config.preExposure; _dispatchParams.resetHistory = config.Reset ? 1u : 0u; + _dispatchParams.flags = flags; Marshal.StructureToPtr(_dispatchParams, _dispatchParamsBuffer, false); cmd.IssuePluginEventAndData(PSSRPlugin.GetRenderEventAndDataFunc(), 1, _dispatchParamsBuffer); @@ -185,12 +190,11 @@ namespace UnityEngine.Rendering.PostProcessing public double camPositionX; public double camPositionY; public double camPositionZ; - public float pad; - public float camNear; public float camFar; public float preExposure; public uint resetHistory; + public OptionFlags flags; public void FromCamera(Camera cam) { @@ -201,12 +205,20 @@ namespace UnityEngine.Rendering.PostProcessing camPositionX = cam.transform.position.x; camPositionY = cam.transform.position.y; camPositionZ = cam.transform.position.z; - pad = 0f; - camNear = cam.nearClipPlane; camFar = cam.farClipPlane; } } + + [Flags] + public enum OptionFlags: uint + { + None = 0u, + ViewSpaceDepth = 1u << 14, + ReverseDepth = 1u << 15, + AutoExposure = 1u << 16, + PassThrough = 1u << 31, + } } #else public static bool IsSupported => false; diff --git a/Tools/PSSRPlugin/pssrplugin.cpp b/Tools/PSSRPlugin/pssrplugin.cpp index f842404..c1a958a 100644 --- a/Tools/PSSRPlugin/pssrplugin.cpp +++ b/Tools/PSSRPlugin/pssrplugin.cpp @@ -245,17 +245,16 @@ typedef struct pssr_dispatch_params_s Vector2f jitter; Vector2f motionVectorScale; - Matrix4f camProjection; + Matrix4f camProjectionNoJitter; Vector3f camForward; Vector3f camUp; Vector3f camRight; Vector3d camPosition; - float pad; - float camNear; float camFar; float preExposure; uint32_t resetHistory; + MfsrOptionFlags flags; } pssr_dispatch_params_t; @@ -410,7 +409,7 @@ static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data) dispatchParams.m_reactiveMask = params->reactiveMask; dispatchParams.m_prevMotionVectors = nullptr; // MFSR context keeps a copy of the previous motion vectors internally dispatchParams.m_preExposure = params->preExposure; - dispatchParams.m_projectionNoJitter = params->camProjection; + dispatchParams.m_projectionNoJitter = params->camProjectionNoJitter; dispatchParams.m_camForward = params->camForward; dispatchParams.m_camUp = params->camUp; dispatchParams.m_camRight = params->camRight; @@ -421,8 +420,9 @@ static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data) dispatchParams.m_renderHeight = params->renderHeight; dispatchParams.m_jitter = params->jitter; dispatchParams.m_motionVectorScale = params->motionVectorScale; + dispatchParams.m_motionVectorGamma = 1.0f; dispatchParams.m_reset = params->resetHistory != 0; - dispatchParams.m_flags = MfsrOptionFlags::kReverseDepth; // TODO: make flags available as plugin input + dispatchParams.m_flags = params->flags; dispatchMfsr(s_mfsrContext, cmd, &dispatchParams);