Skip to content

基于 D3D12 的渲染器#1348

Open
Blinue wants to merge 169 commits intodevfrom
d3d12
Open

基于 D3D12 的渲染器#1348
Blinue wants to merge 169 commits intodevfrom
d3d12

Conversation

@Blinue
Copy link
Copy Markdown
Owner

@Blinue Blinue commented Dec 10, 2025

这个 PR 用于跟踪开发进度和收集反馈。有以下几个目标:

  • 支持 WCG 和 HDR HDR support #55
    • 支持 SDR、WCG 和 HDR 之间无缝切换
    • 支持 SDR/WCG 转 HDR(使用着色器或 RTX Video HDR 等插件)
    • 正确处理色域转换。有些效果只支持 SDR,如何处理 WCG/HDR 是个问题
  • 渐进式编译效果
    • 正在编译时以 Bicubic 代替,编译完成后替换
  • 改进跨适配器捕获
    • 自动选择最快的中转方式
    • 所有捕获方式都会支持跨适配器
  • 中途改变效果
  • 提高渲染管线的并行度
    • 设计为在使用重量级着色器时提高 GPU 利用率,不会牺牲延迟
    • 新架构下生产者(后端)和消费者(前端)共用环形缓冲区,比旧架构减少两次复制
  • 通过资源别名降低中间纹理的显存占用
  • TDR 恢复
  • 优化光标绘制

MagpieFX 的变化

通用

  1. 版本号更新为 5,不再兼容 4。
  2. 要求文件必须使用 UTF-8 without BOM 编码。

指令

  1. //!CAPABILITY AdvancedColor:声明效果支持 WCG 和 HDR。默认情况下效果工作在无伽马校正的 sRGB 色彩空间,激活 WCG/HDR 后效果工作在 scRGB 色彩空间。
  2. 不再支持 //!USE MulAdd:现在 MulAdd 始终可用
  3. 重新支持 //!USE Dynamic
  4. //!MIN_FRAME_RATE:指定最低帧率。
    • 有多个效果使用这个指令时取最高的
    • 设置了全局最低帧率时取更高的
    • 如果设置了最高帧率,不合法的最低帧率将被忽略
  5. //!SCALE_FACTOR:对输入的缩放倍数,必须为整数。不指定或值为 0 表示支持自由缩放。OUTPUT 纹理不再支持指定尺寸,现在 OUTPUT 和 INPUT 一样是可选的。
  6. //!PARAMETER:支持把参数定义成 uint。
  7. //!TEXTURE
    • 新增格式 COLOR_SPACE_ADAPTIVE,它在不同色彩空间下提供不同的精度,可以认为这是 INPUT 和 OUTPUT 的格式。不能和 SOURCE 同时使用。
    • 如果指定了 SOURCE 则也必须指定 FORMAT,过去这是可选的,并假设为 R16G16B16A16_FLOAT。
  8. //!COMMON:现在只允许存在一个 COMMON 块。

  1. MP_CS_LINEAR_SRGB、MP_CS_SCRGB:表示当前色彩空间
  2. MP_SM_6_0、MP_SM_6_1 等:表示是否支持特定 shader model。不存在 MP_SM_5_1,因为 D3D12 始终支持 SM 5.1

内置函数

  1. WriteToOutput:不再支持直接写入 OUTPUT,而是应通过此函数,这使 Magpie 可以在幕后处理色域转换相关工作。只在 CS 风格下可用。
  2. GetMaxLuminance 和 GetSdrWhiteLevel:HDR 下的最大亮度和 SDR 内容亮度,1.0 表示 80 尼特。只在 WCG/HDR 模式下可用(即已定义 MP_CS_SCRGB 宏),WCG 下这两个函数固定返回 1.0。
  3. GetFrameCount 和 GetTimestamp:获取当前帧数和时间戳,只在声明 //!USE Dynamic 后可用。

Blinue and others added 30 commits March 15, 2026 19:24
修复编译错误
光标插值选项默认值改为 Bicubic
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

显示器DPI不一致时光标大小有问题

3 participants