跳至内容

FidelityFX FSR2

导航: SDK效果组件

FidelityFX FSR2

FidelityFX Super Resolution 2 运行时库。

Defines

FFX_FSR2_VERSION_MAJOR

#define FFX_FSR2_VERSION_MAJOR (2)

FidelityFX Super Resolution 2 主版本号。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 36 行, 第 9 列)

FFX_FSR2_VERSION_MINOR

#define FFX_FSR2_VERSION_MINOR (3)

FidelityFX Super Resolution 2 次版本号。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 41 行, 第 9 列)

FFX_FSR2_VERSION_PATCH

#define FFX_FSR2_VERSION_PATCH (3)

FidelityFX Super Resolution 2 修订版本号。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 46 行, 第 9 列)

FFX_FSR2_CONTEXT_COUNT

#define FFX_FSR2_CONTEXT_COUNT 1

FidelityFX Super Resolution 2 上下文数量。

定义 FSR2 所需的内部效果上下文数量

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 53 行, 第 9 列)

FFX_FSR2_CONTEXT_SIZE

#define FFX_FSR2_CONTEXT_SIZE (FFX_SDK_DEFAULT_CONTEXT_SIZE)

以 32 位值为单位指定的上下文大小。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 58 行, 第 9 列)

函数

ffxFsr2ContextCreate

FFX_API FfxErrorCode ffxFsr2ContextCreate(FfxFsr2Context *pContext, const FfxFsr2ContextDescription *pContextDescription)

根据 FfxFsr2CreateParams 结构体中设定的参数创建一个 FidelityFX Super Resolution 2 上下文。

上下文结构体是与 FSR2 API 交互的主要对象,负责管理 FSR2 算法所使用的内部资源。调用此 API 时,将通过回调结构体中的指针进行多次调用。这些回调将尝试检索设备功能,并创建 FSR2 帧间功能所需的内部资源和管道。根据创建 FfxFsr2Context 时使用的具体配置,通过回调函数可能会请求不同的资源和管道集。

FfxFsr2Context 中的 flags 字段包含的标志与您的应用程序的配置以及 FSR2 的预期用途紧密相关。正确设置这些标志(以及正确的 FfxFsr2DispatchDescription)对于确保 FSR2 正确运行至关重要。建议查阅概述文档以了解 FSR2 如何集成到应用程序中的详细信息。

创建 FfxFsr2Context 后,您应该在每个需要应用 FSR2 升级的帧上调用 ffxFsr2ContextDispatch 函数。有关更多详细信息,请参阅 ffxFsr2ContextDispatch 的文档。

当 FfxFsr2Context 不再使用时,应将其销毁,通常在应用程序卸载或用户禁用 FSR2 升级时进行。要销毁 FSR2 上下文,应调用 ffxFsr2ContextDestroy。

参数

  • pContext (FfxFsr2Context *) – [输出] 指向一个 FfxFsr2Context 结构体的指针,将用于填充。
  • pContextDescription (const FfxFsr2ContextDescription *) – [输入] 指向一个 FfxFsr2ContextDescription 结构体的指针。

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 284 行, 第 22 列)

ffxFsr2ContextGetGpuMemoryUsage

FFX_API FfxErrorCode ffxFsr2ContextGetGpuMemoryUsage(FfxFsr2Context *pContext, FfxEffectMemoryUsage *pVramUsage)

获取 FidelityFX Super Resolution 上下文的 GPU 内存使用情况。

参数

  • pContext (FfxFsr2Context *) – [输入] 指向一个 FfxFsr2Context 结构体的指针。
  • pVramUsage (FfxEffectMemoryUsage *) – [输出] 指向一个 FfxEffectMemoryUsage 结构体的指针。

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 297 行, 第 22 列)

ffxFsr2ContextDispatch

FFX_API FfxErrorCode ffxFsr2ContextDispatch(FfxFsr2Context *pContext, const FfxFsr2DispatchDescription *pDispatchDescription)

调度构成 FidelityFX Super Resolution 2 的各种通道。

FSR2 是一个复合效果,这意味着它由多个组成通道构成(实现为一个或多个 clear、copy 和 compute dispatch)。ffxFsr2ContextDispatch 函数是(通过使用 FfxFsr2Context 结构体中回调字段的函数)最终生成每帧所需的图形 API 调用序列的函数。

与创建 FfxFsr2Context 一样,正确编程 FfxFsr2DispatchDescription 是确保 FSR2 正确运行的关键。确保将相机抖动正确应用于应用程序的投影矩阵(或光线追踪应用程序的相机原点)尤为重要。FSR2 提供了 ffxFsr2GetJitterPhaseCount 和 ffxFsr2GetJitterOffset 入口点,以帮助应用程序正确计算相机抖动。无论应用程序使用何种抖动模式,都应将其正确编程到 dispatchDescription 结构体的 jitterOffset 字段。有关相机抖动的更多指导,请参阅 ffxFsr2GetJitterOffset 的文档以及 FSR2 的配套概述文档。

参数

  • pContext (FfxFsr2Context *) – [输入] 指向一个 FfxFsr2Context 结构体的指针。
  • pDispatchDescription (const FfxFsr2DispatchDescription *) – [输入] 指向一个 FfxFsr2DispatchDescription 结构体的指针。

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 338 行, 第 22 列)

ffxFsr2ContextGenerateReactiveMask

FFX_API FfxErrorCode ffxFsr2ContextGenerateReactiveMask(FfxFsr2Context *pContext, const FfxFsr2GenerateReactiveDescription *pParams)

一个辅助函数,用于从不透明纹理和包含半透明对象的纹理生成一个 Reactive mask。

参数

  • pContext (FfxFsr2Context *) – [输入] 指向一个 FfxFsr2Context 结构体的指针。
  • pParams (const FfxFsr2GenerateReactiveDescription *) – [输入] 指向一个 FfxFsr2GenerateReactiveDescription 结构体的指针

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 349 行, 第 22 列)

ffxFsr2ContextDestroy

FFX_API FfxErrorCode ffxFsr2ContextDestroy(FfxFsr2Context *pContext)

销毁 FidelityFX Super Resolution 上下文。

参数

  • pContext (FfxFsr2Context *) – [输出] 指向一个 FfxFsr2Context 结构体的指针,将用于销毁。

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 361 行, 第 22 列)

ffxFsr2GetUpscaleRatioFromQualityMode

FFX_API float ffxFsr2GetUpscaleRatioFromQualityMode(FfxFsr2QualityMode qualityMode)

从质量模式获取缩放比例。

下表列出了质量模式与每维缩放比例的映射关系。

质量预设
缩放系数

FFX_FSR2_QUALITY_MODE_QUALITY
1.5x

FFX_FSR2_QUALITY_MODE_BALANCED
1.7x

FFX_FSR2_QUALITY_MODE_PERFORMANCE
2.0x

FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE
3.0x

传入无效的 qualityMode 将返回 0.0f。

返回值:根据上表,质量模式对应的每维缩放比例。

参数

  • qualityMode (FfxFsr2QualityMode) – [输入] 质量模式预设。

返回值: FFX_API float

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 384 行, 第 15 列)

ffxFsr2GetRenderResolutionFromQualityMode

FFX_API FfxErrorCode ffxFsr2GetRenderResolutionFromQualityMode(uint32_t *pRenderWidth, uint32_t *pRenderHeight, uint32_t displayWidth, uint32_t displayHeight, FfxFsr2QualityMode qualityMode)

一个辅助函数,用于根据目标分辨率和所需的质量级别计算渲染分辨率。

此函数将 ffxFsr2GetUpscaleRatioFromQualityMode 返回的缩放因子应用于每个维度。

参数

  • pRenderWidth (uint32_t *) – [输出] 指向一个 uint32_t 的指针,将保存计算出的渲染分辨率宽度。
  • pRenderHeight (uint32_t *) – [输出] 指向一个 uint32_t 的指针,将保存计算出的渲染分辨率高度。
  • displayWidth (uint32_t) – [输入] 目标显示分辨率宽度。
  • displayHeight (uint32_t) – [输入] 目标显示分辨率高度。
  • qualityMode (FfxFsr2QualityMode) – [输入] FSR 2 升级所需的质量模式。

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 406 行, 第 22 列)

ffxFsr2GetJitterPhaseCount

FFX_API int32_t ffxFsr2GetJitterPhaseCount(int32_t renderWidth, int32_t displayWidth)

一个辅助函数,用于根据显示分辨率计算抖动相位数。

有关将相机抖动应用于应用程序渲染的更详细信息,请参阅 ffxFsr2GetJitterOffset 函数。

下表显示了该函数为每个质量预设返回的抖动相位数。

质量预设
缩放系数
相位数

FFX_FSR2_QUALITY_MODE_QUALITY
1.5x
18

FFX_FSR2_QUALITY_MODE_BALANCED
1.7x
23

FFX_FSR2_QUALITY_MODE_PERFORMANCE
2.0x
32

FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE
3.0x
72

自定义
[1..n]x
ceil(8*n^2)

返回值:渲染宽度和显示宽度之间的缩放比例的抖动相位数。

参数

  • renderWidth (int32_t) – [输入] 渲染分辨率宽度。
  • displayWidth (int32_t) – [输入] 显示分辨率宽度。

返回值: FFX_API int32_t

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 438 行, 第 17 列)

ffxFsr2GetJitterOffset

FFX_API FfxErrorCode ffxFsr2GetJitterOffset(float *pOutX, float *pOutY, int32_t index, int32_t phaseCount)

一个辅助函数,用于计算亚像素抖动偏移。

FSR2 依赖应用程序在渲染时应用亚像素抖动。这通常包含在相机的投影矩阵中。为了简化相机抖动的应用,FSR2 API 提供了一组小型实用函数,用于计算序列中特定帧的亚像素抖动偏移。首先,必须计算抖动相位中的索引。要计算序列的长度,可以调用 ffxFsr2GetJitterPhaseCount 函数。索引应为一个值,该值在每个帧上模 ffxFsr2GetJitterPhaseCount 计算出的序列长度递增。抖动相位中的索引通过 index 参数传递给 ffxFsr2GetJitterOffset。

此函数使用 Halton(2,3) 序列来计算抖动偏移。序列的最终索引为 index % phaseCount。

理解从 ffxFsr2GetJitterOffset 函数返回的值是以像素单位计算的,并且为了正确地将其合成到投影矩阵中,我们必须将其转换为投影偏移。这按照下面显示的伪代码进行。const int32_t jitterPhaseCount = ffxFsr2GetJitterPhaseCount(renderWidth, displayWidth);

float jitterX = 0; float jitterY = 0; ffxFsr2GetJitterOffset(&jitterX, &jitterY, index, jitterPhaseCount);

const float jitterX = 2.0f * jitterX / (float)renderWidth; const float jitterY = -2.0f * jitterY / (float)renderHeight; const Matrix4 jitterTranslationMatrix = translateMatrix(Matrix3::identity, Vector3(jitterX, jitterY, 0)); const Matrix4 jitteredProjectionMatrix = jitterTranslationMatrix * projectionMatrix; 抖动应应用于所有渲染。这包括不透明、alpha 半透明和光线追踪对象。对于光栅化对象,ffxFsr2GetJitterOffset 函数计算出的亚像素抖动值可以应用于相机投影矩阵,该矩阵最终用于在顶点着色期间执行变换。对于光线追踪渲染,亚像素抖动应应用于射线的原点,通常是相机的位置。

无论您选择使用 ffxFsr2GetJitterOffset 函数还是自己的序列生成器,都必须将 FfxFsr2DispatchParameters 结构体的 jitterOffset 字段编程,以便告知 FSR2 已为渲染每个帧而应用的抖动偏移。

如果未使用推荐的 ffxFsr2GetJitterOffset 函数,应注意确保您的抖动序列绝不会生成空向量;即 X 和 Y 维度均为 0。

参数

  • pOutX (float *) – [输出] 指向一个 float 的指针,将包含 x 维度的亚像素抖动偏移。
  • pOutY (float *) – [输出] 指向一个 float 的指针,将包含 y 维度的亚像素抖动偏移。
  • index (int32_t) – [输入] 抖动序列中的索引。
  • phaseCount (int32_t) – [输入] 抖动相位的长度。请参阅 ffxFsr2GetJitterPhaseCount。

返回: FFX_API FfxErrorCode

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 506 行, 第 22 列)

ffxFsr2ResourceIsNull

FFX_API bool ffxFsr2ResourceIsNull(FfxResource resource)

一个辅助函数,用于检查资源是否为 FFX_FSR2_RESOURCE_IDENTIFIER_NULL。

返回值:true 资源不是 FFX_FSR2_RESOURCE_IDENTIFIER_NULL。

返回值:false 资源是 FFX_FSR2_RESOURCE_IDENTIFIER_NULL。

参数

  • resource (FfxResource) – [输入] 一个 FfxResource。

返回值: FFX_API bool

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 519 行, 第 14 列)

ffxFsr2GetEffectVersion

FFX_API FfxVersionNumber ffxFsr2GetEffectVersion()

查询效果版本号。

返回: 构建该效果的 SDK 版本。

返回: FFX_API FfxVersionNumber

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 527 行, 第 26 列)

类型定义

FfxFsr2Message

typedef void(* FfxFsr2Message) (FfxMsgType type, const wchar_t *message)

传递字符串消息。

用于调试消息。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 152 行, 第 9 列)

枚举

FfxFsr2Pass

enum FfxFsr2Pass

构成 FSR2 算法的所有通道的枚举。

FSR2 实现为多个计算通道的复合体,每个通道计算最终结果的关键部分。每次调用 FfxFsr2ScheduleGpuJobFunc 回调函数都对应 FfxFsr2Pass 中的一个通道。有关每个通道的更全面描述,请参阅 FSR2 参考文档。

请注意,在某些情况下(例如:FFX_FSR2_PASS_ACCUMULATE 和 FFX_FSR2_PASS_ACCUMULATE_SHARPEN),将使用其中一个通道(它们是互斥的)。选择哪个通道将取决于创建 FfxFsr2Context 的方式以及每次调用 ffxFsr2ContextDispatch 时 FfxFsr2DispatchParamters 的具体内容。

FFX_FSR2_PASS_DEPTH_CLIP

FFX_FSR2_PASS_DEPTH_CLIP = 0

执行深度裁剪的通道。

FFX_FSR2_PASS_RECONSTRUCT_PREVIOUS_DEPTH

FFX_FSR2_PASS_RECONSTRUCT_PREVIOUS_DEPTH = 1

执行上一帧深度重建的通道。

FFX_FSR2_PASS_LOCK

FFX_FSR2_PASS_LOCK = 2

计算像素锁定的通道。

FFX_FSR2_PASS_ACCUMULATE

FFX_FSR2_PASS_ACCUMULATE = 3

执行升级的通道。

FFX_FSR2_PASS_ACCUMULATE_SHARPEN

FFX_FSR2_PASS_ACCUMULATE_SHARPEN = 4

使用锐化时执行升级的通道。

FFX_FSR2_PASS_RCAS

FFX_FSR2_PASS_RCAS = 5

执行锐化的通道。

FFX_FSR2_PASS_COMPUTE_LUMINANCE_PYRAMID

FFX_FSR2_PASS_COMPUTE_LUMINANCE_PYRAMID = 6

生成当前帧亮度 mipmap 链的通道。

FFX_FSR2_PASS_GENERATE_REACTIVE

FFX_FSR2_PASS_GENERATE_REACTIVE = 7

生成反应式遮罩的可选通道。

FFX_FSR2_PASS_TCR_AUTOGENERATE

FFX_FSR2_PASS_TCR_AUTOGENERATE = 8

自动生成透明度/组合和反应式遮罩的可选通道。

FFX_FSR2_PASS_COUNT

FSR2 执行的通道数量。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 81 行, 第 1 列)

FfxFsr2QualityMode

enum FfxFsr2QualityMode

FidelityFX Super Resolution 2 升级支持的所有质量模式的枚举。

为了在实现 FSR2 的多个应用程序中提供一致的用户体验。强烈建议通过应用程序的用户界面提供以下预设缩放因子。

如果您的应用程序不公开升级算法的预设缩放因子的概念(可能而是实现一个不可变的固定比率)或实现更动态的缩放方案(例如动态分辨率缩放),则无需使用这些预设。

请注意,FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE 是一个可选模式,可能会导致最终图像的质量严重下降。因此,建议在决定是否应在应用程序中包含此缩放模式之前,先评估此缩放模式的最终效果。

FFX_FSR2_QUALITY_MODE_QUALITY

FFX_FSR2_QUALITY_MODE_QUALITY = 1

以 1.5 倍的每维缩放比例执行升级。

FFX_FSR2_QUALITY_MODE_BALANCED

FFX_FSR2_QUALITY_MODE_BALANCED = 2

以 1.7 倍的每维缩放比例执行升级。

FFX_FSR2_QUALITY_MODE_PERFORMANCE

FFX_FSR2_QUALITY_MODE_PERFORMANCE = 3

以 2.0 倍的每维缩放比例执行升级。

FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE

FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE = 4

以 3.0 倍的每维缩放比例执行升级。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 117 行, 第 1 列)

FfxFsr2InitializationFlagBits

enum FfxFsr2InitializationFlagBits

创建 FfxFsr2Context 时使用的位标志的枚举。请参阅 FfxFsr2ContextDescription。

FFX_FSR2_ENABLE_HIGH_DYNAMIC_RANGE

FFX_FSR2_ENABLE_HIGH_DYNAMIC_RANGE = (1<<0)

一个位,指示提供的输入颜色数据是否使用高动态范围。

FFX_FSR2_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS

FFX_FSR2_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS = (1<<1)

一个指示运动矢量是否以显示分辨率渲染的位。

FFX_FSR2_ENABLE_MOTION_VECTORS_JITTER_CANCELLATION

FFX_FSR2_ENABLE_MOTION_VECTORS_JITTER_CANCELLATION = (1<<2)

一个指示运动矢量应用了抖动模式的位。

FFX_FSR2_ENABLE_DEPTH_INVERTED

FFX_FSR2_ENABLE_DEPTH_INVERTED = (1<<3)

一个位,指示提供的输入深度缓冲区数据是反转的 [1..0]。

FFX_FSR2_ENABLE_DEPTH_INFINITE

FFX_FSR2_ENABLE_DEPTH_INFINITE = (1<<4)

一个位,指示提供的输入深度缓冲区数据使用的是无限远平面。

FFX_FSR2_ENABLE_AUTO_EXPOSURE

FFX_FSR2_ENABLE_AUTO_EXPOSURE = (1<<5)

一个位,指示是否应对输入颜色数据应用自动曝光。

FFX_FSR2_ENABLE_DYNAMIC_RESOLUTION

FFX_FSR2_ENABLE_DYNAMIC_RESOLUTION = (1<<6)

一个位,指示应用程序使用动态分辨率缩放。

FFX_FSR2_ENABLE_TEXTURE1D_USAGE

FFX_FSR2_ENABLE_TEXTURE1D_USAGE = (1<<7)

一个位,指示后端应使用 1D 纹理。

FFX_FSR2_ENABLE_DEBUG_CHECKING

FFX_FSR2_ENABLE_DEBUG_CHECKING = (1<<8)

一个指示运行时应检查某些 API 值并报告问题的位。

FFX_FSR2_ENABLE_RCAS_LOWER_LIMITER_COMPENSATION

FFX_FSR2_ENABLE_RCAS_LOWER_LIMITER_COMPENSATION = (1<<9)

一个位,指示是否应补偿 rcas 期间可能的负输出值。

来源: sdk/include/FidelityFX/host/ffx_fsr2.h (第 129 行, 第 1 列)

依赖项

此模块依赖于

© . This site is unofficial and not affiliated with AMD.