Browse Source

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.

pssr
Nico de Poel 1 year ago
parent
commit
0bbf0de336
  1. 31
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs

31
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 internal class PSSRUpscaler : Upscaler
{ {
#if UNITY_PS5 #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 PSSRPlugin.DispatchParams _dispatchParams;
private IntPtr _dispatchParamsBuffer; private IntPtr _dispatchParamsBuffer;
@ -18,22 +20,27 @@ namespace UnityEngine.Rendering.PostProcessing
private RenderTexture _outputColor; private RenderTexture _outputColor;
private Texture2D _outputIntermediate; private Texture2D _outputIntermediate;
private bool _pluginInitialized;
private bool _contextInitialized; private bool _contextInitialized;
private uint _frameCount; private uint _frameCount;
// TODO: InitPssr from class constructor
public override void CreateContext(PostProcessRenderContext context, Upscaling config)
static PSSRUpscaler()
{ {
if (PSSRPlugin.InitPssr() < 0) if (PSSRPlugin.InitPssr() < 0)
{ {
Debug.LogError("Failed to initialize PSSR plugin!"); 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; PSSRPlugin.InitParams initParams;
initParams.displayWidth = (uint)config.UpscaleSize.x; initParams.displayWidth = (uint)config.UpscaleSize.x;
@ -88,18 +95,12 @@ namespace UnityEngine.Rendering.PostProcessing
Marshal.FreeHGlobal(_dispatchParamsBuffer); Marshal.FreeHGlobal(_dispatchParamsBuffer);
_dispatchParamsBuffer = IntPtr.Zero; _dispatchParamsBuffer = IntPtr.Zero;
} }
if (_pluginInitialized)
{
PSSRPlugin.ReleasePssr();
_pluginInitialized = false;
}
} }
public override void Render(PostProcessRenderContext context, Upscaling config) public override void Render(PostProcessRenderContext context, Upscaling config)
{ {
var cmd = context.command; var cmd = context.command;
if (!_pluginInitialized || !_contextInitialized)
if (!PluginInitialized || !_contextInitialized)
{ {
cmd.BlitFullscreenTriangle(context.source, context.destination); cmd.BlitFullscreenTriangle(context.source, context.destination);
return; return;

Loading…
Cancel
Save