FfxInterface
FfxInterface
FidelityFX SDK 函数签名和核心定义,需要后端实现进行覆盖。
Defines
FFX_SDK_VERSION_MAJOR
#define FFX_SDK_VERSION_MAJOR (1)FidelityFX SDK 主版本号。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 50 行,第 9 列)
FFX_SDK_VERSION_MINOR
#define FFX_SDK_VERSION_MINOR (1)FidelityFX SDK 次版本号。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 55 行,第 9 列)
FFX_SDK_VERSION_PATCH
#define FFX_SDK_VERSION_PATCH (4)FidelityFX SDK 修订版本号。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 60 行,第 9 列)
FFX_SDK_MAKE_VERSION
#define FFX_SDK_MAKE_VERSION(major, minor, patch) ( ( major <<22 ) | ( minor <<12 ) | patch )用于组合 FidelityFX SDK 版本 ID 的宏。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 65 行,第 9 列)
类型定义
FfxPass
typedef uint32_t FfxPassFfxPass 的占位符类型。
这些将为每个效果单独定义(例如 FfxFsr2Pass)。它们用于获取正确的 blob 索引来构建效果着色器。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 73 行,第 18 列)
FfxGetSDKVersionFunc
typedef FfxVersionNumber(* FfxGetSDKVersionFunc) (FfxInterface *backendInterface)获取后端上下文的 SDK 版本。
返回: 后端构建时使用的 SDK 版本。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 83 行,第 9 列)
FfxGetEffectGpuMemoryUsageFunc
typedef FfxErrorCode(* FfxGetEffectGpuMemoryUsageFunc) (FfxInterface *backendInterface, FfxUInt32 effectContextId, FfxEffectMemoryUsage *outVramUsage)获取效果 VRAM 使用量。
较新的效果可能需要 SDK 旧版本无法提供的支持。因此,需要进行版本查询以确保效果组件始终与支持所有必要功能的后端配对。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 102 行,第 9 列)
FfxCreateBackendContextFunc
typedef FfxErrorCode(* FfxCreateBackendContextFunc) (FfxInterface *backendInterface, FfxEffect effect, FfxEffectBindlessConfig *bindlessConfig, FfxUInt32 *effectContextId)创建并初始化后端上下文。
回调函数为渲染设置后端上下文。它将创建或引用设备并创建必需的内部数据结构。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 120 行,第 9 列)
FfxGetDeviceCapabilitiesFunc
typedef FfxErrorCode(* FfxGetDeviceCapabilitiesFunc) (FfxInterface *backendInterface, FfxDeviceCapabilities *outDeviceCapabilities)获取设备的功能列表。
在创建 FfxEffectContext 时,FFX 核心实现最好了解目标平台的某些特征。这是因为 FFX SDK 尝试执行的一些优化在某些类别的硬件上比其他硬件更有效,或者不被旧硬件支持。为了避免优化实际上会降低性能或减少 FFX SDK 提供的支持范围的情况,FFX 接口会查询设备的特性来做出这些决定。
对于具有固定硬件支持的目标平台,您无需通过查询设备来实现此回调函数,而是可以硬编码平台上可用的功能。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 150 行,第 9 列)
FfxDestroyBackendContextFunc
typedef FfxErrorCode(* FfxDestroyBackendContextFunc) (FfxInterface *backendInterface, FfxUInt32 effectContextId)销毁后端上下文并取消引用设备。
销毁 FfxEffectContext 时会调用此函数。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 167 行,第 9 列)
FfxCreateResourceFunc
typedef FfxErrorCode(* FfxCreateResourceFunc) (FfxInterface *backendInterface, const FfxCreateResourceDescription *createResourceDescription, FfxUInt32 effectContextId, FfxResourceInternal *outResource)创建资源。
此回调用于后端创建内部资源。
请注意: 通过简单地再次调用 FfxCreateResourceFunc 函数指针,创建资源也可能导致创建其他资源。这在处理需要初始化的资源的初始创建时很有用。这种情况下的流程是,首先调用以创建 CPU 端资源,然后调用以创建 GPU 端资源,最后调用以安排一个复制渲染作业以在两者之间移动数据。通常,这种类型的函数调用流程仅在创建 FfxEffectContext 时出现。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 196 行,第 9 列)
FfxRegisterResourceFunc
typedef FfxErrorCode(* FfxRegisterResourceFunc) (FfxInterface *backendInterface, const FfxResource *inResource, FfxUInt32 effectContextId, FfxResourceInternal *outResource)为当前帧在后端注册一个资源。
由于 FfxInterface 和后端不知道会随时间传入多少不同资源,因此同时在后端注册所有资源是不安全的。此外,传递的资源在 dispatch 调用后可能无效。因此,最安全的方法是将它们注册为 FfxResourceInternal,并在 dispatch 调用结束时清除它们。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 222 行,第 9 列)
FfxGetResourceFunc
typedef FfxResource(* FfxGetResourceFunc) (FfxInterface *backendInterface, FfxResourceInternal resource)从 FfxResourceInternal 资源获取 FfxResource。
有时需要创建内部创建资源的 FfxResource 表示,以便将其注册到子效果上下文中。此函数设置注册所需的 FfxResource。
返回: 从内部资源构建的 FfxResource
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 243 行,第 9 列)
FfxUnregisterResourcesFunc
typedef FfxErrorCode(* FfxUnregisterResourcesFunc) (FfxInterface *backendInterface, FfxCommandList commandList, FfxUInt32 effectContextId)取消注册后端中的所有临时 FfxResourceInternal。
取消注册引用传递给函数作为参数的资源的 FfxResourceInternal。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 262 行,第 9 列)
FfxRegisterStaticResourceFunc
typedef FfxErrorCode(* FfxRegisterStaticResourceFunc) (FfxInterface *backendInterface, const FfxStaticResourceDescription *desc, FfxUInt32 effectContextId)在后端的静态 bindless 表中注册资源。
静态资源将在其各自的 bindless 表中持续存在,直到被同一索引的不同资源覆盖。调用代码必须注意不要立即在可能正在被飞行帧使用的索引处注册新资源。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 284 行,第 9 列)
FfxGetResourceDescriptionFunc
typedef FfxResourceDescription(* FfxGetResourceDescriptionFunc) (FfxInterface *backendInterface, FfxResourceInternal resource)检索与 FfxResource 结构匹配的 FfxResourceDescription。
返回: 资源的描述。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 298 行,第 9 列)
FfxDestroyResourceFunc
typedef FfxErrorCode(* FfxDestroyResourceFunc) (FfxInterface *backendInterface, FfxResourceInternal resource, FfxUInt32 effectContextId)销毁资源。
此回调用于后端释放内部资源。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 316 行,第 9 列)
FfxMapResourceFunc
typedef FfxErrorCode(* FfxMapResourceFunc) (FfxInterface *backendInterface, FfxResourceInternal resource, void **ptr)映射资源内存。
将资源的内存映射到指针并返回。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 335 行,第 9 列)
FfxUnmapResourceFunc
typedef FfxErrorCode(* FfxUnmapResourceFunc) (FfxInterface *backendInterface, FfxResourceInternal resource)取消映射资源内存。
取消映射先前映射的资源内存。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 350 行,第 9 列)
FfxStageConstantBufferDataFunc
typedef FfxErrorCode(* FfxStageConstantBufferDataFunc) (FfxInterface *backendInterface, void *data, FfxUInt32 size, FfxConstantBuffer *constantBuffer)销毁资源。
此回调用于后端释放内部资源。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 365 行,第 9 列)
FfxCreatePipelineFunc
typedef FfxErrorCode(* FfxCreatePipelineFunc) (FfxInterface *backendInterface, FfxEffect effect, FfxPass pass, uint32_t permutationOptions, const FfxPipelineDescription *pipelineDescription, FfxUInt32 effectContextId, FfxPipelineState *outPipeline)创建渲染管线。
渲染管线包含着色器以及资源绑定点和采样器。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 388 行,第 9 列)
FfxDestroyPipelineFunc
typedef FfxErrorCode(* FfxDestroyPipelineFunc) (FfxInterface *backendInterface, FfxPipelineState *pipeline, FfxUInt32 effectContextId)销毁渲染管线。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 416 行,第 9 列)
FfxScheduleGpuJobFunc
typedef FfxErrorCode(* FfxScheduleGpuJobFunc) (FfxInterface *backendInterface, const FfxGpuJobDescription *job)计划一个渲染作业,以便在下次调用 FfxExecuteGpuJobsFunc 时执行。
渲染作业可以执行三种任务之一:清除、复制或计算调度。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 436 行,第 9 列)
FfxExecuteGpuJobsFunc
typedef FfxErrorCode(* FfxExecuteGpuJobsFunc) (FfxInterface *backendInterface, FfxCommandList commandList, FfxUInt32 effectContextId)在提供的 commandList 上执行计划的渲染作业。
图形 API 命令的记录应在此回调函数中进行,先前入队(通过调用 FfxScheduleGpuJobFunc 回调)的渲染作业应按接收顺序处理。高级用户可以选择重新排序渲染作业,但应谨慎进行,以尊重资源依赖性。
根据 FfxDispatchDescription 的确切内容,可能先前已入队不同数量的渲染作业(例如,如果启用了锐化)。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 463 行,第 9 列)
FfxBreadcrumbsAllocBlockFunc
typedef FfxErrorCode(* FfxBreadcrumbsAllocBlockFunc) (FfxInterface *backendInterface, uint64_t blockBytes, FfxBreadcrumbsBlockData *blockData)分配 AMD FidelityFX Breadcrumbs Library 标记缓冲区。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 513 行,第 9 列)
FfxBreadcrumbsFreeBlockFunc
typedef void(* FfxBreadcrumbsFreeBlockFunc) (FfxInterface *backendInterface, FfxBreadcrumbsBlockData *blockData)释放 AMD FidelityFX Breadcrumbs Library 标记缓冲区。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 525 行,第 9 列)
FfxBreadcrumbsWriteFunc
typedef void(* FfxBreadcrumbsWriteFunc) (FfxInterface *backendInterface, FfxCommandList commandList, uint32_t value, uint64_t gpuLocation, void *gpuBuffer, bool isBegin)在提供的 commandList 上将标记写入 AMD FidelityFX Breadcrumbs Library 缓冲区。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 540 行,第 9 列)
FfxBreadcrumbsPrintDeviceInfoFunc
typedef void(* FfxBreadcrumbsPrintDeviceInfoFunc) (FfxInterface *backendInterface, FfxAllocationCallbacks *allocs, bool extendedInfo, char **printBuffer, size_t *printSize)将 GPU 特定信息打印到 AMD FidelityFX Breadcrumbs Library 状态缓冲区。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 558 行,第 9 列)
FfxRegisterConstantBufferAllocatorFunc
typedef void(* FfxRegisterConstantBufferAllocatorFunc) (FfxInterface *backendInterface, FfxConstantBufferAllocator constantAllocator)注册一个线程安全常量缓冲区分配器供后端使用。
来源: sdk/include/FidelityFX/host/ffx_interface.h (第 572 行,第 9 列)