跳至内容

FidelityFX 单通道降采样器

alt text

本示例演示了 FidelityFX 单通道降采样器 (SPD) 效果的使用。

有关 FidelityFX SPD 效果底层技术的详细信息,请参阅相应的 技术文档

要求

  • Windows
  • DirectX(R)12
  • Vulkan(R)

UI 元素

该示例包含各种 UI 元素,可帮助您探索其展示的技术。下表总结了 UI 元素及其在示例中的作用。

元素名称描述
降采样器选项SPD CS, Multipass CS, Multipass PS在 FidelityFX 单通道降采样器计算着色器 (SPD CS)、多通道计算着色器实现 (Multipass CS) 和多通道像素着色器 (Multipass PS) 实现之间切换。
SPD Load/LinearLoad, Linear切换采样类型;线性插值采样或像素加载。用于在 SPD 计算着色器中收集输入颜色。
SPD Wave InteropWaveOps, LocalDataShare切换用于线程间互操作的方法;波前内在函数操作(例如 WaveReadLaneAt)或局部数据共享 (LDS) 和原子操作。WaveOps 通常速度更快。
SPD MathPacked, Non-Packed在打包的 16 位浮点数学和非打包的 32 位浮点数学之间切换。

设置 FidelityFX 单通道降采样器计算着色器

单通道降采样器头文件 ffx_spd.h 提供了一个名为 SpdSetup 的函数,用于计算启动计算着色器分派所需的线程组尺寸,以及工作组偏移量、工作组数量和 mip。后几个参数是 ffx_spd.h 中定义的 SpdDownsample 函数所需的输入,该函数在计算着色器中执行降采样。

头文件 ffx_spd.h 被设计为通过 #define 宏(如下所示)从 C++ 和 HLSL/GLSL 中包含。

C++

#define FFX_CPU
#include <gpu/ffx_core.h>
#include <gpu/ffx_spd.h>

HLSL

#define FFX_GPU
#define FFX_HLSL
#include "ffx_core.h"
#include "ffx_spd.h"

GLSL

#define FFX_GPU
#define FFX_GLSL
#include "ffx_core.h"
#include "ffx_spd.h"

请注意,ffx_spd.h 依赖于 ffx_core.h,因此两者都必须包含。

着色器选项

FidelityFX SPD 着色器,或者更具体地说 SpdDownsampler 有几个不同的选项。

一个选项是支持使用 16 位浮点 (FP16) 数学与 32 位浮点 (FP32) 数学。总的来说,FP16 数学在 AMD 硬件上的效率比 FP32 数学更高。

另一个选项是使用线性采样而不是纹素加载来收集降采样输出的输入纹素。

最后一个选项是使用波前内在函数进行线程互操作,而不是使用局部数据共享 (LDS)。

为了性能考虑,示例将这些选项编译成多个着色器排列,并在运行时根据示例的当前配置(参见上面的 UI Elements 部分)和硬件功能选择特定的着色器排列。总共,示例演示了 SPD 计算着色器的八种排列。

  • FP16-wave-ops-load (A_HALF=1 with spd_integration.hlsl)
  • FP16-no-wave-ops-load (A_HALF=1, SPD_NO_WAVE_OPERATIONS=1 with spd_integration.hlsl)
  • FP16-wave-ops-linear-sampler (A_HALF=1 with spd_integration_linear_sampler.hlsl)
  • FP16-no-wave-ops-linear-sampler (A_HALF=1, SPD_NO_WAVE_OPERATIONS=1 with spd_integration_linear_sampler.hlsl)
  • FP32-wave-ops-load (仅限 spd_integration.hlsl)
  • FP32-no-wave-ops-load (SPD_NO_WAVE_OPERATION=1 with spd_integration.hlsl)
  • FP32-wave-ops-linear-sampler (仅限 spd_integration_linear_sampler.hlsl)
  • FP32-no-wave-ops-linear-sampler (SPD_NO_WAVE_OPERATION=1 with spd_integration_linear_sampler.hlsl)

FidelityFX SPD 用法

SPD 可用于 2 种方式

  1. 低级用法 - 从 gpu\spd\ffx_spd.h 包含着色器代码,并手动设置输入。这可以为调用代码提供更大的灵活性。

  2. 高级用法 - 使用 host\ffx_spd.h 中的效果组件,它将根据传入的选项,通过简单的分派调用自动降采样给定的纹理。

示例控件和配置

有关示例控件、配置和 FidelityFX Cauldron Framework UI 元素的详细信息,请参阅 运行示例

另请参阅

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