资讯动态

dlssg-to-fsr3 依赖中的 FidelityFX-SDK 如何集成 DXC:版本、更新流程与着色器编译链路全解析

发布时间:2026/10/5 1:42:57 来源:尧图企业网站定制
图形学游戏开发【免费下载链接】dlssg-to-fsr3Adds AMD FSR 3 Frame Generation to games by replacing Nvidia DLSS Frame Generation (nvngx_dlssg).项目地址https://gitcode.com/gh_mirrors/dl/dlssg-to-fsr3点击查看免费下载本篇技术指南围绕 dlssg-to-fsr3 仓库所依赖的 FidelityFX-SDK 中内嵌的DirectX Shader CompilerDXC组件展开深入讲解其在 SDK 中承担的角色、当前版本1.8.2403.2、标准更新维护流程并结合源码解析FidelityFX_SC.exe通过dxcompiler.dll完成 HLSL 着色器编译的底层调用链与全部命令行参数。读完本文你将掌握如何安全升级 FidelityFX-SDK 附带的 DXC、理解 shader permutation 的生成机制并能在自己的构建流程中正确驱动 FidelityFX Shader Compiler。dxc 在 FidelityFX-SDK 中的角色FidelityFX-SDK 采用“预编译 运行时加载”的策略SDK 在构建阶段通过一个名为FidelityFX Shader CompilerFidelityFX_SC.exe的命令行工具把所有 HLSL 着色器按“permutation置换/变体”预先编译成二进制与对应头文件运行时再直接加载这些预生成结果从而避免运行时 JIT 编译带来的卡顿与复杂性。在这一链路中dxcDirectX Shader Compiler是面向 DirectX 12 后端的关键编译器内核FidelityFX_SC通过dxcompiler.dll调用 DXC 的公开 COM 接口DxcCreateInstance将 HLSL 源码编译为可在 D3D12 上执行的 DXIL 二进制同时产出 shader hash、PDB 调试信息与反射reflection数据。也就是说dxc 是 FidelityFX-SDK DX12 后端所有预编译着色器的实际“翻译官”其版本与正确性直接决定 SDK 内 FSR 2/FSR 3、光学流、模糊、LPM 等全部 DX12 效果的编译结果。当前版本与目录布局FidelityFX-SDK 的 dxc 组件由 FFX_SDK_README.md 这一内嵌说明文档管理文档明确记录当前版本1.8.2403.2并特别标注其为DirectX12 Agility SDK 兼容编译器。这一“Agility SDK 兼容”特性并非营销话术在源码中有直接证据SDK 的 HLSL 编译器在 hlsl_compiler.cpp 中导出了与 Microsoft DirectX12 Agility SDK 版本号严格对齐的符号extern C { __declspec(dllexport) extern const UINT D3D12SDKVersion 614; } extern C { __declspec(dllexport) extern const char* D3D12SDKPath u8.\\D3D12\\; }其中D3D12SDKVersion 614对应的正是 SDK 内嵌 Agility SDK 版本1.614.1见 agilitysdk/FFX_SDK_README.md保证编译器加载的 D3D12 运行时与 SDK 期望的 Agility SDK 版本保持一致。在仓库中dxc 组件实际位于dependencies/FidelityFX-SDK/sdk/tools/ffx_shader_compiler/libs/dxc/其目录结构为路径内容说明inc/头文件dxcapi.hDXC 公共 API、d3d12shader.h、dxcerrors.h、dxcisense.hlib/x64/导入库dxcompiler.lib链接期使用运行时仍需dxcompiler.dllCMakeLists.txt以 INTERFACE 库形式接入构建系统并负责拷贝运行期 DLLFFX_SDK_README.md版本记录与更新说明即本文关联文档LICENSE-LLVM.txt/LICENSE-MIT.txt/LICENSE-MS.txtDXC 的三份许可证文本LLVM、MIT、Microsoft 条款注意仓库内嵌的 dxc 目录仅包含编译期头文件与导入库运行期所需的dxcompiler.dll、dxil.dll位于 sdk/tools/binary_store/与FidelityFX_SC.exe、D3D12Core.dll、d3d12SDKLayers.dll、d3dconfig.exe、glslangValidator.exe一同分发供构建与运行直接使用。如何更新 dxc 版本FFX_SDK_README.md给出了标准的 4 步更新流程这是维护者升级编译器内核时必须遵循的规范操作从微软 DirectXShaderCompiler 项目的官方发布渠道下载最新版本压缩包注意不要下载任意来源的第三方构建必须使用官方发布的 zip。解压该压缩包。将解压出的全部内容拷贝到本目录libs/dxc/覆盖原有头文件与导入库。同步更新本FFX_SDK_README.md中的版本号使其与实际下载的版本一致。结合仓库实际情况完整落地一次更新还需要注意以下配套动作否则新编译器可能无法正确工作同步检查 Agility SDK 版本dxc 需要与 hlsl_compiler.cpp 中导出的D3D12SDKVersion对齐。若 dxc 大版本更新对 Agility SDK 提出了新要求需要一并更新libs/agilitysdk/中的运行时并把hlsl_compiler.cpp顶部的版本常量改为新子版本号agilitysdk 的FFX_SDK_README.md也明确要求“Update D3D12SDKVersion … with the subversion number”。同步替换运行期 DLLbinary_store目录中的dxcompiler.dll与dxil.dll必须与新的编译器版本配套。因为 SDK 在构建阶段实际执行的是binary_store/FidelityFX_SC.exe而该 exe 在运行时通过LoadLibrary(dxcompiler.dll)动态加载详见下文“运行时加载”一节。全量重建由于 shader 二进制以哈希命名编译器更新后生成结果可能变化建议强制重建整个 SDK 解决方案保证所有 permutation 头文件与二进制都基于新编译器重新生成。CMake 构建集成dxc 如何被链接与分发dxc 在 FidelityFX-SDK 构建系统中以INTERFACE 库形式接入。查看 libs/dxc/CMakeLists.txt 可以看到核心逻辑add_library(dxc INTERFACE) target_include_directories(dxc INTERFACE BEFORE inc/) set(dxc_binaries ${CMAKE_CURRENT_SOURCE_DIR}/bin/${CMAKE_GENERATOR_PLATFORM}/dxcompiler.dll ${CMAKE_CURRENT_SOURCE_DIR}/bin/${CMAKE_GENERATOR_PLATFORM}/dxil.dll) copyTargetCommand(${dxc_binaries} ${CMAKE_HOME_DIRECTORY}/bin/Debug copied_dxc_bin_debug) copyTargetCommand(${dxc_binaries} ${CMAKE_HOME_DIRECTORY}/bin/Release copied_dxc_bin_release) add_dependencies(dxc copied_dxc_bin_debug copied_dxc_bin_release)它做了三件事把inc/暴露为包含目录BEFORE确保优先于其他同名头文件声明两个运行期 DLLdxcompiler.dll、dxil.dll通过copyTargetCommand自定义目标在构建时把 DLL 拷贝到输出目录bin/Debug与bin/Release确保FidelityFX_SC.exe运行时有依赖 DLL 可用。而在上层 ffx_shader_compiler/CMakeLists.txt 中dxc 与 agilitysdk、glslangValidator、tiny-process-library 一起被add_subdirectory引入并通过target_link_libraries(... dxc ...)完成链接。该项目还要求MSVC toolset 142 或更高Visual Studio 2019并输出二进制到bin/目录这是构建 shader compiler 自身的前提条件。运行时加载与编译链路源码级FidelityFX_SC.exe的 DX12 后端编译由 hlsl_compiler.cpp 中的HLSLCompiler类承担其构造器按后端类型走不同的加载路径DXC分支的核心逻辑如下1. 动态加载 dxcompiler.dllm_DllHandle LoadLibrary(dll.empty() ? dxcompiler.dll : dll.c_str()); m_DxcCreateInstanceFunc (DxcCreateInstanceProc)GetProcAddress(m_DllHandle, DxcCreateInstance);DXC 不是静态链接进 exe而是运行时通过LoadLibraryGetProcAddress(DxcCreateInstance)动态加载。因此-dxcdllDXC DLL Path命令行参数可以指定替代 DLL加载失败时例如 DLL 缺失工具会抛出“Failed to load DXC library!”并附上GetLastError的错误码这解释了为什么binary_store中必须随 exe 携带配套的dxcompiler.dll。2. 创建编译器与 utils 实例加载成功后通过DxcCreateInstance创建三类 COM 对象CLSID_DxcUtils→m_DxcUtils工具集参数构建、反射、默认 include handlerCLSID_DxcCompiler→m_DxcCompiler编译器主体m_DxcUtils-CreateDefaultIncludeHandler(m_DxcDefaultIncludeHandler)默认 include 处理器作为自定义处理器的兜底。3. 自定义 include handlerDXC 路径使用 DxcCustomIncludeHandler先尝试在着色器源码所在目录查找#include文件失败后再按-I传入的 include 搜索路径逐一尝试若仍找不到会逐级剥离路径前缀再做一次重试这是为了绕过多级嵌套 include 时pFilename可能带多余相对路径的缺陷。所有成功解析的依赖文件会被记录到dependencies集合中最终用于生成-depsgcc/msvc格式的 depfile供增量构建判断依赖变更。4. 参数解析与宏定义CompileDXC会逐项解析传入参数-E入口点、-Tprofile/目标、-Iinclude 路径、-D宏定义被提取后单独处理其余参数原样透传给 DXC。调试模式-debugcompile会自动追加-Zss源码名进 PDB、-Zi调试信息与跳过优化参数Xbox GDK 后端Scarlett/Xbox One则会追加-Qstrip_debug。最终通过m_DxcUtils-BuildArguments(...)组装完整参数数组交由m_DxcCompiler-Compile(...)执行。5. 哈希、PDB 与反射编译成功后工具从结果中提取三样关键产物Shaker hash读取DXC_OUT_SHADER_HASH得到 16 字节摘要并格式化为十六进制字符串作为 permutation 的唯一标识最终产物命名形如{ShaderName}_{hashDigest}.hPDB当需要调试信息时读取DXC_OUT_PDB以{hashDigest}.pdb命名落盘对超过MAX_PATH的长路径会自动加\\?\前缀规避 Windows 路径长度限制Reflection通过DXC_OUT_REFLECTION与ID3D12ShaderReflection遍历着色器的 Bound Resources把 CBV、SRV 纹理、UAV 纹理、SRV/UAV 缓冲区、采样器、光线追踪加速结构分别归类生成g_{permutation}_{ResourceType}ResourceNames/Bindings/Counts/Spaces静态数组写入头文件供运行时以零反射成本绑定资源。-reflection与-embed-arguments开关正是控制头文件中是否包含上述反射数据与编译参数记录。FidelityFX_SC 命令行完整参数关于 FidelityFX Shader Compiler 的官方命令行说明位于 docs/tools/ffx-sc.md其语法为FidelityFX_SC.exe [Options] InputFile全部选项如下该表格与 ffx_sc.cpp 中的帮助输出一一对应选项说明CompilerArgs以空格分隔的、目标编译器接受的一串参数原样透传给 dxc/fxc/glslang-outputPathshader permutation 的输出目录-DName定义一个宏作用于所有 permutation-DName{Value1, Value2, Value3 ...}声明一个 shader 选项对每个值生成一个 permutation使用-表示“不定义该宏”的 permutation-num-threadsNum生成 shader 使用的线程数默认取当前 CPU 的最大可用线程数-nameName生成头文件中变量的前缀名默认使用输入文件名-reflection生成包含反射数据的头文件-embed-arguments把每个 permutation 的编译参数写入各自头文件-print-arguments打印每个 permutation 使用的编译参数-disable-logs禁止输出编译警告与错误日志-compilerCompiler选择编译器后端dxc、gdk.scarlett.x64、gdk.xboxone.x64、fxc或glslang-dxcdllDXC DLL Path指定要使用的 dxcompiler.dll 路径-d3ddllD3D DLL Path指定要使用的 d3dcompiler.dll 路径fxc 后端-glslangexeglslangValidator.exe Path指定 glslangValidator 可执行文件路径Vulkan 后端-depsFormat输出记录 include 依赖的 depfile格式为gcc或msvc-debugcompile以调试信息编译 shader-debugcmdline打印所有输入参数用于排查问题在 SDK 构建中的实际调用示例FidelityFX_SC.exe并非手动逐个调用而是由各 GPU 组件的CMakeCompile*Shaders.txt驱动。以 FSR 3 Upscaler 为例CMakeCompileFSR3UpscalerShaders.txt 展示了典型的调用方式set(FSR3UPSCALER_BASE_ARGS -reflection -depsgcc -DFFX_GPU1 -DFFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE2) set(FSR3UPSCALER_PERMUTATION_ARGS -DFFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE{0,1} -DFFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT{0,1} -DFFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS{0,1} -DFFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS{0,1} -DFFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH{0,1} -DFFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING{0,1}) compile_shaders_with_depfile( ${FFX_SC_EXECUTABLE} ${FSR3UPSCALER_BASE_ARGS} ${FSR3UPSCALER_API_BASE_ARGS} ${FSR3UPSCALER_PERMUTATION_ARGS} ${FSR3UPSCALER_INCLUDE_ARGS} ${FSR3UPSCALER_SHADERS} ${FFX_PASS_SHADER_OUTPUT_PATH} FSR3UPSCALER_PERMUTATION_OUTPUTS)这里可以看到-DFFX_FSR3UPSCALER_OPTION_*{0,1}的花括号语法会为每个开关组合共 2⁶ 64 种组合生成一个 permutation加上 base args 中的固定宏最终产出全部变体的二进制与头文件-depsgcc同时生成依赖文件用于增量构建。FFX_SC_EXECUTABLE在 sdk/CMakeLists.txt 中定义为tools/binary_store/FidelityFX_SC.exe与dxcompiler.dll同目录保证运行时能被LoadLibrary找到。构建或修改 Shader Compiler 自身若需要修改或重新构建 shader compiler例如升级 dxc 后重新打包工具官方流程是进入sdk/tools/ffx_shader_compiler/目录运行 GenerateSolution.bat——该脚本会检测 CMake 与 CPU 架构x64/ARM64并在build/子目录生成解决方案构建成功后输出二进制位于sdk/tools/ffx_shader_compiler/bin/下的 Debug 或 Release 子目录由构建配置决定将新工具连同其运行期依赖dxcompiler.dll、dxil.dll等从bin目录拷贝到binary_store目录覆盖分发版本SDK 的正式构建即开始使用新编译器。GenerateSolution.bat会先检查 CMake 是否安装并要求 Visual Studio 2019 或更新版本的 MSVC 工具链142未满足条件时会直接报错退出。结语FFX_SDK_README.md虽只是一份简短的版本说明但它承载着 FidelityFX-SDK 中一个不可缺失的编译基础设施dxc 1.8.2403.2。从 CMake 的 INTERFACE 集成、运行期LoadLibrary动态加载到D3D12SDKVersion614与 Agility SDK 的版本对齐再到 permutation 哈希命名、PDB 与反射数据的产出dxc 深度嵌入在 FidelityFX Shader Compiler 的每条编译链路中。对于 dlssg-to-fsr3 这类以 FidelityFX-SDK 为依赖的项目理解 dxc 的版本管理与更新规范是确保 FSR 3 帧生成、超分等全部 DX12 着色器稳定产出、可复现构建的重要前提。赞分享图形学游戏开发【免费下载链接】dlssg-to-fsr3Adds AMD FSR 3 Frame Generation to games by replacing Nvidia DLSS Frame Generation (nvngx_dlssg).项目地址https://gitcode.com/gh_mirrors/dl/dlssg-to-fsr3点击查看免费下载相关推荐dlssg-to-fsr3 核心依赖解读AMD FidelityFX SDK 1.1 版本新特性、FSR 3.1 帧生成与 FSR API 全解析dlssg to fsr3 核心依赖解读AMD FidelityFX SDK 1.1 版本新特性、FSR 3.1 帧生成与 FSR API 全解析 本文围绕本图形学游戏开发dlssg-to-fsr3 依赖中的 RenderDoc 集成指南Cauldron 框架的捕获 API 版本、更新流程与启用方式dlssg to fsr3 依赖中的 RenderDoc 集成指南Cauldron 框架的捕获 API 版本、更新流程与启用方式 本篇技术指南以 Fideli图形学游戏开发FidelityFX Blur 1.1 技术详解Compute Shader 单趟高斯模糊的集成与实现原理dlssg-to-fsr3 仓库 FidelityFX SDK 依赖篇FidelityFX Blur 1.1 技术详解Compute Shader 单趟高斯模糊的集成与实现原理dlssg to fsr3 仓库 Fidelity图形学游戏开发上一篇《WindowsXPKg 项目安装与配置指南》下一篇GoldenDict-ng 安装与配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑