Files
UnrealEngine/Engine/Source/Runtime/Renderer/Public/TemporalUpscaler.h
2025-05-18 13:04:45 +08:00

87 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "ScreenPass.h"
namespace UE::Renderer::Private
{
/** Interface for implementing third party temporal upscaler. */
class ITemporalUpscaler : public ISceneViewFamilyExtention
{
public:
/** Ref counted history to be saved in the history. */
class IHistory : public IRefCountedObject
{
public:
virtual ~IHistory() {}
/** Debug name of the history. Must exactly point to the same const TCHAR* as ITemporalUpscaler::GetDebugName().
* This is used for debugging GPU memory uses of a viewport, but also to ensure IHistory is fed to a compatible ITemporalUpscaler.
*/
virtual const TCHAR* GetDebugName() const = 0;
/** Size of the history on the GPU in bytes. */
virtual uint64 GetGPUSizeBytes() const = 0;
};
/** Inputs of the temporal upscaler. */
struct FInputs
{
/** Outputs view rect that must be on FOutputs::FullRes::ViewRect. */
FIntRect OutputViewRect;
/** Pixel jitter offset of the rendering pixel. */
FVector2f TemporalJitterPixels;
/** Pre exposure of the SceneColor. */
float PreExposure = 1.0f;
/** The post-DOF and pre-MotionBlur SceneColor. */
FScreenPassTexture SceneColor;
/** The scene depth. */
FScreenPassTexture SceneDepth;
/** The scene velocity. */
FScreenPassTexture SceneVelocity;
/** Texture that contain eye adaptation on the red channel. */
FRDGTextureRef EyeAdaptationTexture = nullptr;
/** The history of the previous frame set by FOutputs::NewHistory. PrevHistory->GetDebugName() is guarentee to match the ITemporalUpscaler. */
TRefCountPtr<IHistory> PrevHistory;
};
/** Outputs of the third party temporal upscaler. */
struct FOutputs
{
/** Output of the temporal upscaler. FullRes.ViewRect must match FInputs::OutputViewRect. */
FScreenPassTexture FullRes;
/** New history to be kept alive for next frame. NewHistory->GetDebugName() must exactly point to the same const TCHAR* as ITemporalUpscaler::GetDebugName(). */
TRefCountPtr<IHistory> NewHistory;
};
virtual ~ITemporalUpscaler() {};
/** Debug name of the history. Must exactly point to the same const TCHAR* as ITemporalUpscaler::IHistory::GetDebugName(). */
virtual const TCHAR* GetDebugName() const = 0;
/** Adds the necessary passes into RDG for temporal upscaling the rendering resolution to desired output res. */
virtual FOutputs AddPasses(
FRDGBuilder& GraphBuilder,
const FSceneView& View,
const FInputs& Inputs) const = 0;
virtual float GetMinUpsampleResolutionFraction() const = 0;
virtual float GetMaxUpsampleResolutionFraction() const = 0;
virtual ITemporalUpscaler* Fork_GameThread(const class FSceneViewFamily& ViewFamily) const = 0;
};
} // namespace UE::Renderer::Private