You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Vulkan或DirectX底层编程中如何使用DLSS等超分辨率技术?

超分辨率技术(DLSS/CAS)在Vulkan与DirectX中的实现机制及API调用

首先明确:AMD CAS并非AI神经网络驱动,它是基于Compute Shader的纯算法锐化技术;而NVIDIA DLSS依赖Tensor Core运行预训练AI模型,仅支持RTX系列及以上GPU。两者的核心流程都是「低分辨率渲染→GPU端放大处理」,但具体实现细节和API调用差异较大,以下分技术分API说明:


DLSS(NVIDIA Deep Learning Super Sampling)

前置条件

  • 需集成NVIDIA官方DLSS SDK,获取预编译的模型与驱动级调用接口
  • 仅支持NVIDIA RTX系列GPU(具备Tensor Core)

实现步骤与对应API调用

  1. 初始化DLSS上下文

    • DirectX 12:
      • 先调用NvAPI_D3D12_Init完成SDK初始化
      • 通过NvAPI_D3D12_CreateDLSSContext创建ID3D12DLSSContext实例,传入D3D12设备、队列等核心句柄
    • Vulkan:
      • 调用NvAPI_VK_Init初始化SDK
      • 通过NvAPI_VK_CreateDLSSContext创建DLSS上下文,绑定Vulkan设备、队列族等资源
  2. 配置低分辨率渲染环境

    • 根据DLSS模式(质量/平衡/性能/超性能)计算渲染分辨率(如性能模式为目标分辨率的1/2)
    • 创建对应分辨率的帧缓冲(含颜色、深度附件):
      • DirectX 12:调用ID3D12Device::CreateCommittedResource创建纹理资源,再创建ID3D12ResourceView绑定到帧缓冲
      • Vulkan:通过vkCreateImage创建纹理,vkCreateImageView生成视图,最后用vkCreateFramebuffer组装帧缓冲
  3. 渲染低分辨率场景

    • 执行常规场景渲染流程,将画面输出到低分辨率帧缓冲,API调用与普通渲染一致:
      • DirectX 12:ID3D12GraphicsCommandList::DrawInstanced/DrawIndexedInstanced
      • Vulkan:vkCmdDraw/vkCmdDrawIndexed
  4. 执行DLSS超分辨率计算

    • 准备输入资源:低分辨率颜色缓冲、深度缓冲、运动向量缓冲(DLSS依赖帧间运动信息做预测)
    • 提交DLSS计算命令:
      • DirectX 12:调用ID3D12DLSSContext::Dispatch,传入输入输出资源、DLSS模式、当前帧时间等参数
      • Vulkan:通过NvAPI_VK_DispatchDLSS提交计算任务,需提前将输入输出资源绑定到对应的Descriptor Set
  5. 输出到目标分辨率缓冲

    • DLSS处理完成后,结果直接写入目标分辨率的交换链缓冲,可直接用于显示或后续后处理

CAS(AMD Contrast Adaptive Sharpening)

前置条件

  • CAS是开源算法,无需专属GPU(AMD/NVIDIA/Intel GPU均支持),只需实现对应的Shader代码
  • 可获取HLSL/GLSL版本的CAS Shader源码进行编译

实现步骤与对应API调用

  1. 编译CAS Shader

    • DirectX 12:使用D3DCompileFromFile编译HLSL格式的CAS Compute Shader,生成字节码后创建ID3D12PipelineState(Compute Pipeline类型)
    • Vulkan:将GLSL代码编译为SPIR-V字节码,通过vkCreateShaderModule创建Shader模块,再组装成Compute Pipeline
  2. 配置低分辨率渲染环境

    • CAS支持任意缩放比例(通常采用1.5x或2x缩放),计算低分辨率后创建对应帧缓冲,API调用同常规渲染帧缓冲创建流程
  3. 渲染低分辨率场景

    • 同常规渲染流程,将画面输出到低分辨率颜色缓冲,API调用与普通渲染一致
  4. 执行CAS锐化放大

    • 绑定资源:将低分辨率颜色缓冲设为输入,目标分辨率缓冲设为输出
    • 提交计算命令:
      • DirectX 12:在ID3D12GraphicsCommandList中设置Compute Pipeline,绑定Descriptor Heap,调用Dispatch(线程组数量根据目标分辨率计算,如width/8×height/8)
      • Vulkan:在VkCommandBuffer中绑定Compute Pipeline与对应Descriptor Set,调用vkCmdDispatch设置线程组数量
  5. 后处理(可选)

    • CAS输出可直接用于显示,也可结合色调映射、抗锯齿等其他后处理步骤

关键注意事项

  • DLSS必须生成运动向量缓冲:渲染场景时需额外计算每个像素的帧间运动向量(通过模型矩阵的帧间变换推导)
  • 资源状态转换:无论DirectX还是Vulkan,都需确保输入输出资源处于正确的读写状态(DirectX用ResourceBarrier,Vulkan用vkCmdPipelineBarrier)
  • CAS Shader需处理UV坐标:确保缩放后的采样坐标正确对齐,避免出现偏移或模糊

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:27:06