add metalfx spatial UpScale
This commit is contained in:
parent
69423ceca2
commit
6118e30863
1
.gitignore
vendored
1
.gitignore
vendored
@ -58,3 +58,4 @@ TJURP_BurstDebugInformation_DoNotShip/
|
||||
UserSettings/
|
||||
|
||||
**/.DS_Store
|
||||
out/
|
||||
Binary file not shown.
@ -28,7 +28,7 @@ MonoBehaviour:
|
||||
m_SupportsHDR: 1
|
||||
m_HDRColorBufferPrecision: 0
|
||||
m_MSAA: 1
|
||||
m_RenderScale: 0.8333333
|
||||
m_RenderScale: 0.58823526
|
||||
m_UpscalingFilter: 0
|
||||
m_FsrOverrideSharpness: 1
|
||||
m_FsrSharpness: 1
|
||||
@ -85,7 +85,7 @@ MonoBehaviour:
|
||||
blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3}
|
||||
bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3}
|
||||
m_PrefilteringModeMainLightShadows: 3
|
||||
m_PrefilteringModeAdditionalLight: 4
|
||||
m_PrefilteringModeAdditionalLight: 2
|
||||
m_PrefilteringModeAdditionalLightShadows: 0
|
||||
m_PrefilterXRKeywords: 1
|
||||
m_PrefilteringModeForwardPlus: 1
|
||||
@ -96,12 +96,12 @@ MonoBehaviour:
|
||||
m_PrefilterHDROutput: 1
|
||||
m_PrefilterSSAODepthNormals: 1
|
||||
m_PrefilterSSAOSourceDepthLow: 1
|
||||
m_PrefilterSSAOSourceDepthMedium: 0
|
||||
m_PrefilterSSAOSourceDepthMedium: 1
|
||||
m_PrefilterSSAOSourceDepthHigh: 1
|
||||
m_PrefilterSSAOInterleaved: 0
|
||||
m_PrefilterSSAOInterleaved: 1
|
||||
m_PrefilterSSAOBlueNoise: 1
|
||||
m_PrefilterSSAOSampleCountLow: 1
|
||||
m_PrefilterSSAOSampleCountMedium: 0
|
||||
m_PrefilterSSAOSampleCountMedium: 1
|
||||
m_PrefilterSSAOSampleCountHigh: 1
|
||||
m_PrefilterDBufferMRT1: 1
|
||||
m_PrefilterDBufferMRT2: 1
|
||||
|
||||
@ -259,4 +259,4 @@ MonoBehaviour:
|
||||
m_Name: MetalFxSpatialUpScale
|
||||
m_EditorClassIdentifier:
|
||||
m_Active: 1
|
||||
quality: 2
|
||||
quality: 4
|
||||
|
||||
@ -57,7 +57,7 @@ void RenderAPI_Metal::processDeviceEvent(UnityGfxDeviceEventType type, IUnityInt
|
||||
}
|
||||
void RenderAPI_Metal::initSupportFeature()
|
||||
{
|
||||
if (@available(iOS 16.0, macOS 13.0, *))
|
||||
if (@available(iOS 16, macOS 13, *))
|
||||
{
|
||||
support_features[GraphicsFeature::METAL_FX_SPATIAL_SR] = true;
|
||||
support_features[GraphicsFeature::METAL_FX_TEMPORAL_SR] = true;
|
||||
@ -66,12 +66,13 @@ void RenderAPI_Metal::initSupportFeature()
|
||||
|
||||
void RenderAPI_Metal::spatialUpScale(void* data)
|
||||
{
|
||||
if (@available(iOS 16.0, macOS 13.0, *))
|
||||
if (@available(iOS 16, macOS 13, *))
|
||||
{
|
||||
struct DataPack
|
||||
{
|
||||
void* src;
|
||||
void* dst;
|
||||
bool qulityChange;
|
||||
};
|
||||
DataPack* data_pack = static_cast<DataPack*>(data);
|
||||
|
||||
@ -80,10 +81,10 @@ void RenderAPI_Metal::spatialUpScale(void* data)
|
||||
|
||||
id<MTLDevice> _device = metal_graphics->MetalDevice();
|
||||
id<MTLCommandBuffer> cmd = (id<MTLCommandBuffer>)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 <MTLCommandQueue> _commandQueue = [_device newCommandQueue];
|
||||
id <MTLCommandBuffer> upscaleCommandBuffer = [_commandQueue commandBuffer];
|
||||
upscaleCommandBuffer.label = @"Upscale Command Buffer";
|
||||
|
||||
[mfx_spatial_scaler encodeToCommandBuffer:upscaleCommandBuffer];
|
||||
[upscaleCommandBuffer commit];
|
||||
}
|
||||
// else
|
||||
{
|
||||
// [mfx_spatial_scaler encodeToCommandBuffer:cmd];
|
||||
// [cmd commit];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEditor.VersionControl;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
@ -266,6 +266,7 @@ PlayerSettings:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 11400000, guid: 9e7be553448fa2546aea5752021cbcf7, type: 2}
|
||||
metroInputSource: 0
|
||||
wsaTransparentSwapchain: 0
|
||||
m_HolographicPauseOnTrackingLoss: 1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user