You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
6.8 KiB
157 lines
6.8 KiB
using System;
|
|
|
|
#if UNITY_STANDALONE_WIN && false
|
|
namespace UnityEngine.Rendering.HighDefinition.AMD.FSR2Wrapper
|
|
{
|
|
/// <summary>
|
|
/// Wrapper plugin that simply forwards calls to the original Unity native plugin implementation of FSR2.
|
|
/// Use this to verify other plugins against Unity's reference implementation.
|
|
/// </summary>
|
|
public class FSR2WrapperUpscaler: UpscalerPlugin
|
|
{
|
|
public override string name => "FSR 2.1";
|
|
|
|
public override bool isSupported => UnityEngine.AMD.AMDUnityPlugin.IsLoaded();
|
|
|
|
public override bool Load()
|
|
{
|
|
if (!UnityEngine.AMD.AMDUnityPlugin.Load())
|
|
return false;
|
|
|
|
if (UnityEngine.AMD.GraphicsDevice.device == null)
|
|
UnityEngine.AMD.GraphicsDevice.CreateGraphicsDevice();
|
|
|
|
return UnityEngine.AMD.GraphicsDevice.device != null;
|
|
}
|
|
|
|
public override bool IsLoaded() => UnityEngine.AMD.AMDUnityPlugin.IsLoaded() && UnityEngine.AMD.GraphicsDevice.device != null;
|
|
|
|
public override UpscalerContext CreateContext(in FSR2CommandInitializationData initSettings)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override void DestroyContext(UpscalerContext context)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override bool GetRenderResolutionFromQualityMode(FSR2Quality qualityMode, uint displayWidth, uint displayHeight, out uint renderWidth, out uint renderHeight)
|
|
{
|
|
return UnityEngine.AMD.GraphicsDevice.device.GetRenderResolutionFromQualityMode((UnityEngine.AMD.FSR2Quality)qualityMode, displayWidth, displayHeight, out renderWidth, out renderHeight);
|
|
}
|
|
|
|
public override float GetUpscaleRatioFromQualityMode(FSR2Quality qualityMode)
|
|
{
|
|
return UnityEngine.AMD.GraphicsDevice.device.GetUpscaleRatioFromQualityMode((UnityEngine.AMD.FSR2Quality)qualityMode);
|
|
}
|
|
}
|
|
|
|
public class FSR2WrappedGraphicsDevice: GraphicsDevice
|
|
{
|
|
private readonly UnityEngine.AMD.GraphicsDevice _wrappedDevice;
|
|
|
|
internal FSR2WrappedGraphicsDevice(UnityEngine.AMD.GraphicsDevice wrappedDevice)
|
|
{
|
|
_wrappedDevice = wrappedDevice;
|
|
}
|
|
|
|
public override FSR2Context CreateFeature(CommandBuffer cmd, in FSR2CommandInitializationData initSettings)
|
|
{
|
|
var wrappedInitSettings = initSettings.ToWrapped();
|
|
return new FSR2WrappedContext(_wrappedDevice.CreateFeature(cmd, in wrappedInitSettings), in initSettings);
|
|
}
|
|
|
|
public override void DestroyFeature(CommandBuffer cmd, FSR2Context fsrContext)
|
|
{
|
|
_wrappedDevice.DestroyFeature(cmd, ((FSR2WrappedContext)fsrContext).WrappedContext);
|
|
}
|
|
|
|
public override void ExecuteFSR2(CommandBuffer cmd, FSR2Context fsr2Context, in FSR2TextureTable textures)
|
|
{
|
|
((FSR2WrappedContext)fsr2Context).SyncExecuteData();
|
|
var wrappedTextures = textures.ToWrapped();
|
|
_wrappedDevice.ExecuteFSR2(cmd, ((FSR2WrappedContext)fsr2Context).WrappedContext, in wrappedTextures);
|
|
}
|
|
|
|
public override bool GetRenderResolutionFromQualityMode(FSR2Quality qualityMode, uint displayWidth, uint displayHeight, out uint renderWidth, out uint renderHeight)
|
|
{
|
|
return _wrappedDevice.GetRenderResolutionFromQualityMode((UnityEngine.AMD.FSR2Quality)qualityMode, displayWidth, displayHeight, out renderWidth, out renderHeight);
|
|
}
|
|
|
|
public override float GetUpscaleRatioFromQualityMode(FSR2Quality qualityMode)
|
|
{
|
|
return _wrappedDevice.GetUpscaleRatioFromQualityMode((UnityEngine.AMD.FSR2Quality)qualityMode);
|
|
}
|
|
}
|
|
|
|
public class FSR2WrappedContext : UpscalerContext
|
|
{
|
|
private readonly FSR2CommandInitializationData _initData;
|
|
private UnityEngine.AMD.FSR2Context _wrappedContext;
|
|
|
|
internal FSR2WrappedContext(in FSR2CommandInitializationData initData)
|
|
{
|
|
_initData = initData;
|
|
}
|
|
|
|
internal void Init(UnityEngine.AMD.GraphicsDevice graphicsDevice)
|
|
{
|
|
_wrappedContext = graphicsDevice.CreateFeature()
|
|
}
|
|
|
|
internal void SyncExecuteData()
|
|
{
|
|
WrappedContext.executeData.jitterOffsetX = _executeData.jitterOffsetX;
|
|
WrappedContext.executeData.jitterOffsetY = _executeData.jitterOffsetY;
|
|
WrappedContext.executeData.MVScaleX = _executeData.MVScaleX;
|
|
WrappedContext.executeData.MVScaleY = _executeData.MVScaleY;
|
|
WrappedContext.executeData.renderSizeWidth = _executeData.renderSizeWidth;
|
|
WrappedContext.executeData.renderSizeHeight = _executeData.renderSizeHeight;
|
|
WrappedContext.executeData.enableSharpening = _executeData.enableSharpening;
|
|
WrappedContext.executeData.sharpness = _executeData.sharpness;
|
|
WrappedContext.executeData.frameTimeDelta = _executeData.frameTimeDelta;
|
|
WrappedContext.executeData.preExposure = _executeData.preExposure;
|
|
WrappedContext.executeData.reset = _executeData.reset;
|
|
WrappedContext.executeData.cameraNear = _executeData.cameraNear;
|
|
WrappedContext.executeData.cameraFar = _executeData.cameraFar;
|
|
WrappedContext.executeData.cameraFovAngleVertical = _executeData.cameraFovAngleVertical;
|
|
}
|
|
|
|
public override void Execute(CommandBuffer cmd, in FSR2CommandExecutionData executeData, in FSR2TextureTable textures)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
internal static class FSR2WrapperExtensions
|
|
{
|
|
public static UnityEngine.AMD.FSR2CommandInitializationData ToWrapped(this FSR2CommandInitializationData data)
|
|
{
|
|
return new UnityEngine.AMD.FSR2CommandInitializationData
|
|
{
|
|
displaySizeHeight = data.displaySizeHeight,
|
|
displaySizeWidth = data.displaySizeWidth,
|
|
ffxFsrFlags = (UnityEngine.AMD.FfxFsr2InitializationFlags)data.ffxFsrFlags,
|
|
maxRenderSizeHeight = data.maxRenderSizeHeight,
|
|
maxRenderSizeWidth = data.maxRenderSizeWidth,
|
|
};
|
|
}
|
|
|
|
public static UnityEngine.AMD.FSR2TextureTable ToWrapped(this FSR2TextureTable table)
|
|
{
|
|
return new UnityEngine.AMD.FSR2TextureTable
|
|
{
|
|
biasColorMask = table.biasColorMask,
|
|
colorInput = table.colorInput,
|
|
colorOutput = table.colorOutput,
|
|
depth = table.depth,
|
|
exposureTexture = table.exposureTexture,
|
|
motionVectors = table.motionVectors,
|
|
reactiveMask = table.reactiveMask,
|
|
transparencyMask = table.transparencyMask,
|
|
};
|
|
}
|
|
}
|
|
}
|
|
#endif // UNITY_STANDALONE_WIN
|