From 6118e308636265f33f5aef0d0dd4cc45f5fbaf99 Mon Sep 17 00:00:00 2001 From: connan Date: Wed, 18 Dec 2024 14:20:41 +0800 Subject: [PATCH] add metalfx spatial UpScale --- .gitignore | 3 +- .../Mac/libGfxPluginNativeRender.dylib | Bin 56576 -> 56672 bytes Assets/Settings/Mobile/Mobile_High.asset | 10 +++---- .../Mobile/Mobile_High_Renderer.asset | 2 +- NativeRenderPlugin/RenderAPI_Metal.mm | 27 +++++++++++++----- .../Runtime/Passes/PostProcessPass.cs | 4 +-- .../SuperRendering/SR/Scripts/MetalFx.cs | 22 +++++++++++++- .../Runtime/SuperRendering/SR/Scripts/XESS.cs | 1 - ProjectSettings/ProjectSettings.asset | 1 + 9 files changed, 52 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index b331511..ebfe867 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,5 @@ crashlytics-build.properties TJURP_BurstDebugInformation_DoNotShip/ UserSettings/ -**/.DS_Store \ No newline at end of file +**/.DS_Store +out/ \ No newline at end of file diff --git a/Assets/Plugins/Mac/libGfxPluginNativeRender.dylib b/Assets/Plugins/Mac/libGfxPluginNativeRender.dylib index 44b5642692354eda071207d4057760437e34014f..902a34055092c1c80ae05c57c6277626ff8165a1 100755 GIT binary patch delta 5082 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 @@ -80,10 +81,10 @@ void RenderAPI_Metal::spatialUpScale(void* data) id _device = metal_graphics->MetalDevice(); id cmd = (id)metal_graphics->CurrentCommandBuffer(); - + // metal_graphics->EndCurrentCommandEncoder(); cmd.label = @"Upscale Command Buffer"; - if (mfx_spatial_scaler == nil) + if (mfx_spatial_scaler == nil || data_pack->qulityChange) { MTLFXSpatialScalerDescriptor* desc = [[MTLFXSpatialScalerDescriptor alloc]init]; desc.inputWidth = [srctex width]; @@ -101,11 +102,23 @@ void RenderAPI_Metal::spatialUpScale(void* data) return; } } - mfx_spatial_scaler.colorTexture = srctex; mfx_spatial_scaler.outputTexture = dsttex; - [mfx_spatial_scaler encodeToCommandBuffer:cmd]; - [cmd commit]; + // if(!cmd) + { + id _commandQueue = [_device newCommandQueue]; + id upscaleCommandBuffer = [_commandQueue commandBuffer]; + upscaleCommandBuffer.label = @"Upscale Command Buffer"; + + [mfx_spatial_scaler encodeToCommandBuffer:upscaleCommandBuffer]; + [upscaleCommandBuffer commit]; + } + // else + { + // [mfx_spatial_scaler encodeToCommandBuffer:cmd]; + // [cmd commit]; + } + } } diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs index f515fba..b87f71d 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs @@ -504,10 +504,10 @@ namespace UnityEngine.Rendering.Universal ref var colorDescriptor = ref cameraData.cameraTargetDescriptor; colorDescriptor.width = cameraData.camera.pixelWidth; colorDescriptor.height = cameraData.camera.pixelHeight; - if (asset.SuperResolution == ESuperResolution.XESS13 || asset.SuperResolution == ESuperResolution.GSR2) + //if (asset.SuperResolution == ESuperResolution.XESS13 || asset.SuperResolution == ESuperResolution.GSR2) { colorDescriptor.graphicsFormat = GraphicsFormat.R16G16B16A16_SFloat; - colorDescriptor.enableRandomWrite = true; // compute + colorDescriptor.enableRandomWrite = true; // } renderer.m_ColorBufferSystem.SetCameraSettings(colorDescriptor, FilterMode.Bilinear); diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/MetalFx.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/MetalFx.cs index 660bf90..2440d49 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/MetalFx.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/MetalFx.cs @@ -15,10 +15,13 @@ namespace X.Rendering.Feature SrQuality quality; private ProfilingSampler profiler; + SrQuality lastQuality; + bool updateSrNextFrame = false; struct DataPack { public IntPtr src; public IntPtr dst; + public bool qulityChange; }; IntPtr dataPtr; public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) @@ -39,11 +42,28 @@ namespace X.Rendering.Feature public void DoSR(CommandBuffer cmd, RTHandle source, RTHandle destination, RTHandle motionVector, ref RenderingData renderingData) { + if (source.rt == null || destination.rt == null) + { + return; + } + using var scp = new ProfilingScope(cmd, profiler); DataPack * ptr = (DataPack*) dataPtr.ToPointer(); ptr->src = source.rt.GetNativeTexturePtr(); ptr->dst = destination.rt.GetNativeTexturePtr(); - cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.UpdateXESS1Config, dataPtr); + ptr->qulityChange = updateSrNextFrame; + if(updateSrNextFrame) + { + updateSrNextFrame = false; + } + if (lastQuality != quality) + { + updateSrNextFrame = true; + UniversalRenderPipeline.asset.renderScale = GetRenderScale(); + lastQuality = quality; + } + + cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.SpatialUpScale, dataPtr); } public float GetRenderScale() diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs index aa119d5..ad577df 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs @@ -1,6 +1,5 @@ using System; using System.Runtime.InteropServices; -using UnityEditor.VersionControl; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 8ab20e1..23b83af 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -266,6 +266,7 @@ PlayerSettings: - {fileID: 0} - {fileID: 0} - {fileID: 0} + - {fileID: 11400000, guid: 9e7be553448fa2546aea5752021cbcf7, type: 2} metroInputSource: 0 wsaTransparentSwapchain: 0 m_HolographicPauseOnTrackingLoss: 1