using System; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Experimental.Rendering; namespace FidelityFX.FrameGen { public static class FrameInterpolation { public struct ContextDescription { public InitializationFlags flags; public Vector2Int maxRenderSize; public Vector2Int displaySize; public GraphicsFormat backBufferFormat; public FrameInterpolationShaders shaders; } public class PrepareDescription { public DispatchFlags flags; public Vector2Int renderSize; public Vector2 jitterOffset; public Vector2 motionVectorScale; public float frameTimeDelta; public float cameraNear; public float cameraFar; public float viewSpaceToMetersFactor; public float cameraFovAngleVertical; public ResourceView depth; public ResourceView motionVectors; public ulong frameID; } // TODO: turn all of these into structs public class DispatchDescription { public DispatchFlags flags; public Vector2Int displaySize; public Vector2Int renderSize; public ResourceView currentBackBuffer; public ResourceView currentBackBuffer_HUDLess; public ResourceView output; public RectInt interpolationRect; public ResourceView opticalFlowVector; public ResourceView opticalFlowSceneChangeDetection; public Vector2Int opticalFlowBufferSize; public Vector2 opticalFlowScale; public int opticalFlowBlockSize; public float cameraNear; public float cameraFar; public float cameraFovAngleVertical; public float viewSpaceToMetersFactor; public float frameTimeDelta; public bool reset; public BackbufferTransferFunction backbufferTransferFunction; public Vector2 minMaxLuminance; public ulong frameID; } public enum BackbufferTransferFunction { LDR_sRGB, HDR_PQ, HDR_scRGB, } [Flags] public enum InitializationFlags { EnableDepthInverted = 1 << 0, EnableDepthInfinite = 1 << 1, EnableHDRColorInput = 1 << 3, EnableDisplayResolutionMotionVectors = 1 << 4, EnableJitterMotionVectors = 1 << 5, EnableAsyncSupport = 1 << 6, } [Flags] public enum DispatchFlags { DrawDebugTearLines = 1 << 0, DrawDebugResetIndicators = 1 << 1, DrawDebugView = 1 << 2, } [Serializable, StructLayout(LayoutKind.Sequential)] internal struct Constants { public Vector2Int renderSize; public Vector2Int displaySize; public Vector2 displaySizeRcp; public float cameraNear; public float cameraFar; public Vector2Int upscalerTargetSize; public int mode; public int reset; public Vector4 deviceToViewDepth; public float deltaTime; public int HUDLessAttachedFactor; public Vector2 unused; public Vector2 opticalFlowScale; public int opticalFlowBlockSize; public uint dispatchFlags; public Vector2Int maxRenderSize; public int opticalFlowHalfResMode; public int numInstances; public Vector2Int interpolationRectBase; public Vector2Int interpolationRectSize; public Vector3 debugBarColor; public uint backBufferTransferFunction; public Vector2 minMaxLuminance; public float tanHalfFOV; public float pad; public Vector2 jitter; public Vector2 motionVectorScale; } [Serializable, StructLayout(LayoutKind.Sequential)] internal struct InpaintingPyramidConstants { public uint mips; public uint numWorkGroups; public uint workGroupOffsetX; public uint workGroupOffsetY; } } }