From 0bbf0de336178dee4b924b4480bc4587604e45d9 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Fri, 8 Nov 2024 10:15:22 +0100 Subject: [PATCH] Initialize PSSR plugin once in class constructor and don't bother cleaning up, since we can reuse the same shared resources for the duration of the application's lifetime. --- .../Runtime/Effects/Upscaling/PSSRUpscaler.cs | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) 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 9c0f5af..4ff6c82 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 @@ -7,7 +7,9 @@ namespace UnityEngine.Rendering.PostProcessing internal class PSSRUpscaler : Upscaler { #if UNITY_PS5 - public static bool IsSupported => UnityEngine.PS5.Utility.isTrinityMode; + public static bool IsSupported => UnityEngine.PS5.Utility.isTrinityMode && PluginInitialized; + + private static readonly bool PluginInitialized; private PSSRPlugin.DispatchParams _dispatchParams; private IntPtr _dispatchParamsBuffer; @@ -18,22 +20,27 @@ namespace UnityEngine.Rendering.PostProcessing private RenderTexture _outputColor; private Texture2D _outputIntermediate; - private bool _pluginInitialized; private bool _contextInitialized; private uint _frameCount; - - // TODO: InitPssr from class constructor - public override void CreateContext(PostProcessRenderContext context, Upscaling config) + static PSSRUpscaler() { if (PSSRPlugin.InitPssr() < 0) { Debug.LogError("Failed to initialize PSSR plugin!"); - _pluginInitialized = false; - return; + PluginInitialized = false; } + + PluginInitialized = true; + } - _pluginInitialized = true; + public override void CreateContext(PostProcessRenderContext context, Upscaling config) + { + if (!PluginInitialized) + { + Debug.LogWarning("PSSR plugin is not initialized!"); + return; + } PSSRPlugin.InitParams initParams; initParams.displayWidth = (uint)config.UpscaleSize.x; @@ -88,18 +95,12 @@ namespace UnityEngine.Rendering.PostProcessing Marshal.FreeHGlobal(_dispatchParamsBuffer); _dispatchParamsBuffer = IntPtr.Zero; } - - if (_pluginInitialized) - { - PSSRPlugin.ReleasePssr(); - _pluginInitialized = false; - } } public override void Render(PostProcessRenderContext context, Upscaling config) { var cmd = context.command; - if (!_pluginInitialized || !_contextInitialized) + if (!PluginInitialized || !_contextInitialized) { cmd.BlitFullscreenTriangle(context.source, context.destination); return;