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.
208 lines
7.1 KiB
208 lines
7.1 KiB
using System;
|
|
|
|
namespace UnityEngine.Rendering.HighDefinition.AMD
|
|
{
|
|
public static class AMDUnityPlugin
|
|
{
|
|
public static bool Load() => UnityEngine.AMD.AMDUnityPlugin.Load();
|
|
|
|
public static bool IsLoaded() => UnityEngine.AMD.AMDUnityPlugin.IsLoaded();
|
|
}
|
|
|
|
public class GraphicsDevice
|
|
{
|
|
private readonly UnityEngine.AMD.GraphicsDevice _wrappedDevice;
|
|
|
|
public static GraphicsDevice device => new(UnityEngine.AMD.GraphicsDevice.device);
|
|
|
|
public static uint version => UnityEngine.AMD.GraphicsDevice.version;
|
|
|
|
private GraphicsDevice(UnityEngine.AMD.GraphicsDevice wrappedDevice)
|
|
{
|
|
_wrappedDevice = wrappedDevice;
|
|
}
|
|
|
|
public static GraphicsDevice CreateGraphicsDevice()
|
|
{
|
|
return new GraphicsDevice(UnityEngine.AMD.GraphicsDevice.CreateGraphicsDevice());
|
|
}
|
|
|
|
public FSR2Context CreateFeature(CommandBuffer cmd, in FSR2CommandInitializationData initSettings)
|
|
{
|
|
var wrappedInitSettings = initSettings.ToWrapped();
|
|
return new FSR2Context(_wrappedDevice.CreateFeature(cmd, in wrappedInitSettings));
|
|
}
|
|
|
|
public void DestroyFeature(CommandBuffer cmd, FSR2Context fsrContext)
|
|
{
|
|
_wrappedDevice.DestroyFeature(cmd, fsrContext.WrappedContext);
|
|
}
|
|
|
|
public void ExecuteFSR2(CommandBuffer cmd, FSR2Context fsr2Context, in FSR2TextureTable textures)
|
|
{
|
|
fsr2Context.SyncExecuteData();
|
|
var wrappedTextures = textures.ToWrapped();
|
|
_wrappedDevice.ExecuteFSR2(cmd, fsr2Context.WrappedContext, in wrappedTextures);
|
|
}
|
|
|
|
public bool GetRenderResolutionFromQualityMode(FSR2Quality qualityMode, uint displayWidth, uint displayHeight, out uint renderWidth, out uint renderHeight)
|
|
{
|
|
return _wrappedDevice.GetRenderResolutionFromQualityMode((UnityEngine.AMD.FSR2Quality)(qualityMode - 2), displayWidth, displayHeight, out renderWidth, out renderHeight);
|
|
}
|
|
|
|
public float GetUpscaleRatioFromQualityMode(FSR2Quality qualityMode)
|
|
{
|
|
return _wrappedDevice.GetUpscaleRatioFromQualityMode((UnityEngine.AMD.FSR2Quality)(qualityMode - 2));
|
|
}
|
|
}
|
|
|
|
public class FSR2Context
|
|
{
|
|
internal readonly UnityEngine.AMD.FSR2Context WrappedContext;
|
|
|
|
private FSR2CommandExecutionData _executeData;
|
|
public ref FSR2CommandExecutionData executeData => ref _executeData;
|
|
|
|
internal FSR2Context(UnityEngine.AMD.FSR2Context wrappedContext)
|
|
{
|
|
WrappedContext = wrappedContext;
|
|
}
|
|
|
|
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 struct FSR2CommandInitializationData
|
|
{
|
|
public uint displaySizeHeight;
|
|
|
|
public uint displaySizeWidth;
|
|
|
|
public FfxFsr2InitializationFlags ffxFsrFlags;
|
|
|
|
public uint maxRenderSizeHeight;
|
|
|
|
public uint maxRenderSizeWidth;
|
|
|
|
public bool GetFlag(FfxFsr2InitializationFlags flag)
|
|
{
|
|
return (ffxFsrFlags & flag) == flag;
|
|
}
|
|
|
|
public void SetFlag(FfxFsr2InitializationFlags flag, bool value)
|
|
{
|
|
if (value)
|
|
ffxFsrFlags |= flag;
|
|
else
|
|
ffxFsrFlags &= ~flag;
|
|
}
|
|
|
|
internal readonly UnityEngine.AMD.FSR2CommandInitializationData ToWrapped()
|
|
{
|
|
return new UnityEngine.AMD.FSR2CommandInitializationData
|
|
{
|
|
displaySizeHeight = displaySizeHeight,
|
|
displaySizeWidth = displaySizeWidth,
|
|
ffxFsrFlags = (UnityEngine.AMD.FfxFsr2InitializationFlags)ffxFsrFlags,
|
|
maxRenderSizeHeight = maxRenderSizeHeight,
|
|
maxRenderSizeWidth = maxRenderSizeWidth,
|
|
};
|
|
}
|
|
}
|
|
|
|
[Flags]
|
|
public enum FfxFsr2InitializationFlags
|
|
{
|
|
EnableHighDynamicRange = 1,
|
|
EnableDisplayResolutionMotionVectors = 2,
|
|
EnableMotionVectorsJitterCancellation = 4,
|
|
DepthInverted = 8,
|
|
EnableDepthInfinite = 16, // 0x00000010
|
|
EnableAutoExposure = 32, // 0x00000020
|
|
EnableDynamicResolution = 64, // 0x00000040
|
|
EnableTexture1DUsage = 128, // 0x00000080
|
|
}
|
|
|
|
public struct FSR2TextureTable
|
|
{
|
|
public Texture biasColorMask;
|
|
public Texture colorInput;
|
|
public Texture colorOutput;
|
|
public Texture depth;
|
|
public Texture exposureTexture;
|
|
public Texture motionVectors;
|
|
public Texture reactiveMask;
|
|
public Texture transparencyMask;
|
|
|
|
internal readonly UnityEngine.AMD.FSR2TextureTable ToWrapped()
|
|
{
|
|
return new UnityEngine.AMD.FSR2TextureTable
|
|
{
|
|
biasColorMask = biasColorMask,
|
|
colorInput = colorInput,
|
|
colorOutput = colorOutput,
|
|
depth = depth,
|
|
exposureTexture = exposureTexture,
|
|
motionVectors = motionVectors,
|
|
reactiveMask = reactiveMask,
|
|
transparencyMask = transparencyMask,
|
|
};
|
|
}
|
|
}
|
|
|
|
public enum FSR2Quality
|
|
{
|
|
NativeAA,
|
|
UltraQuality,
|
|
Quality,
|
|
Balanced,
|
|
Performance,
|
|
UltraPerformance,
|
|
}
|
|
|
|
public struct FSR2CommandExecutionData
|
|
{
|
|
public float jitterOffsetX;
|
|
public float jitterOffsetY;
|
|
public float MVScaleX;
|
|
public float MVScaleY;
|
|
public uint renderSizeWidth;
|
|
public uint renderSizeHeight;
|
|
public int enableSharpening;
|
|
public float sharpness;
|
|
public float frameTimeDelta;
|
|
public float preExposure;
|
|
public int reset;
|
|
public float cameraNear;
|
|
public float cameraFar;
|
|
public float cameraFovAngleVertical;
|
|
internal uint featureSlot;
|
|
|
|
internal enum Textures
|
|
{
|
|
ColorInput,
|
|
ColorOutput,
|
|
Depth,
|
|
MotionVectors,
|
|
TransparencyMask,
|
|
ExposureTexture,
|
|
ReactiveMask,
|
|
BiasColorMask,
|
|
}
|
|
}
|
|
}
|