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
{
#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;

Loading…
Cancel
Save