Skip to content

hdr工作面适配 - #24

Open
konodiodaaaaa1 wants to merge 9 commits into
SAOG0721:experimentalfrom
konodiodaaaaa1:local-0.6.5-hdr
Open

hdr工作面适配#24
konodiodaaaaa1 wants to merge 9 commits into
SAOG0721:experimentalfrom
konodiodaaaaa1:local-0.6.5-hdr

Conversation

@konodiodaaaaa1

Copy link
Copy Markdown

关联关系

  • 取代并关闭:feat(hdr): HDR 初步适配 DLSS5 #13(feat(hdr): HDR 初步适配 DLSS5)
  • 来源分支:konodiodaaaaa1:local-0.6.5-hdr
  • 目标分支:experimental
  • 当前合入提交:9c2309a283b3bfef59a5197b38a8354b135363f3
  • HDR 管道主提交:06435e47fb878780f4b5b1a2d18cd4937c5f01bf
  • 官方参考:v0.6.5-experimental 2d37f8c
  • 官方 0.6.6:v0.6.6-experimental 9824d75

这次 PR 的定位

这是一条完整的 HDR 工作面适配分支。实现以本地 0.6.5 已经完成的效果、native backend、DLSSNR 残差、Frame Guidance、FG 发布和参数会话为基础,加入官方 0.6.6 的会话生命周期、NGX 异常保护、捕获关闭保护、实时参数队列、inputRevision history 管理、窗口 owner 和 overlay 状态恢复。

HDR 适配采用显式全局开关:

HDR off:
  online 0.6.5 U8/LDR capture -> effect/native baseline -> online presenter

HDR on:
  capture -> HDR decode/exposure normalization
  -> canonical R16G16B16A16_FLOAT
  -> per-effect route adapter
  -> existing backend
  -> inverse adapter
  -> canonical FP16 or presentation terminal

关闭 HDR compatibility 时,HDR boundary 清空,HDR-only 参数进入 inactive/default,HDR capture pool、normalization、HDR compiler variant、HDR presenter 和 HDR terminal 均退出处理链。外部显示器或系统处于 HDR 状态时,关闭这个选项仍然选择线上 U8/LDR 路由;本地 0.6.5 的 DLSSNR residual、Frame Guidance、ZeroMV、FG failure recovery 和原有参数行为保持原逻辑。

Canonical FP16 与 route boundary

inter-effect canonical storage 为 DXGI_FORMAT_R16G16B16A16_FLOAT,并由 HdrFrameMetadata 与 ColorDescription 携带 transfer、primaries、range、reference white、SDR white、display peak、scene/display referred、pre-exposure 和 HDR metadata。

每个效果通过结构化 HdrFormatRoute 描述 input/output format、transfer、range、alpha mode、evidence level、HDR-native、adapter profile、HDR/SDR 默认值和 normalization scale。route 选择使用结构化字段,effect 名称只用于 catalog 分组和诊断。

已落地的 adapter profile:

  • DirectFP16:验证过的浮点 HDR backend,canonical FP16 只做必要的色彩变换。
  • BoundedHDR:backend 需要有界数值范围,使用成对的 normalization/inverse normalization。
  • SDRCompatible:backend 合同为 U8/UNORM/SDR,使用显式 HDR-to-SDR proxy 和 paired reconstruction。
  • ConditionalFP16:保留参考实现或实验支持的 FP16 路径,等待更完整的色彩合同验证。
  • PresentationTerminal:backend 拥有交换链或最终发布面,普通 post-effect 在此结束。

Native backend 适配

DLSSNR

保留本地 DLSSNR 的颜色、depth、motion、exposure、残差、输入分辨率和 history 逻辑。HDR 状态使用 canonical FP16 -> bounded HDR normalization -> DLSSNR color/depth/motion/exposure -> inverse normalization -> canonical FP16。

inputRevision 由 Renderer 传入;上游实时参数或输入 route 变化时刷新 history,避免旧静帧缓存与新输入混合。所有 NGX create/evaluate/release/shutdown、参数访问和 signed snippet 调用统一进入 NgxRuntimeGuard。

DLSS SR / DLSS FG

DLSS SR 使用 route-compatible float 输入和既有 guidance contract。DLSSFG 增加 _dlssFgNormalizedInput、_dlssFgCanonicalGenerated 和 _dlssFgHdrNormalizationScale,在 evaluate 前后完成 bounded/canonical 转换,并在 publication 前检查 canonical FP16 descriptor。原有 CPU Fence、D3D11/D3D12 共享资源、history reset、一次重建和当前会话禁用策略继续保留。

XeSS SR / XeSSFG

XeSS SR 的 HDR FP16 初始化和 SDR U8 初始化分开;XESS_INIT_FLAG_LDR_INPUT_COLOR 只用于 SDR 路由,HDR 浮点输入保留自己的 contract。XeSSZeroMVUpscaler 继续作为独立的线上 ZeroMV backend。

XeSSFG 作为 presentation terminal 使用 canonical FP16 -> Rec.709 to Rec.2020 -> PQ/BT.2100 -> R10G10B10A2_UNORM -> DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 -> XeSSFG proxy swap chain。backbuffer、HUD-less、UI surface 和 proxy swap chain 使用同一 HDR10 contract;HDR off 恢复线上 LDR terminal。

FSR2/FSR3/FSR4、RTX Video、光流

FSR2/3/4 保留本地 ZeroMV、motion、depth、exposure、reactive/transparency mask 和 FG/optical-flow 辅助资源,HDR 只在 boundary 增加 canonical/route conversion。RTX Video 使用显式 normalized-D3D/U8 bridge,inputScale 按实际 float/U8 输入选择。AMD OF 与 NVOF 在 HDR 状态从 canonical frame 做 provider-local conversion,SDR 状态优先线上 B8G8R8A8/U8 contract。

PassThrough 和普通 shader

PassThrough 分为 REFERENCE_HDR_HLSL 与 REFERENCE_LDR_HLSL。Effect compiler 的 MP_HDR_SATURATE、MP_HDR_ALPHA、MP_HDR_COMPATIBILITY 只注入 HDR variant。Group A 效果使用结构化 R8 SDR fallback;CAS 额外保留条件 FP16/linear route 和独立编译 gate。alpha 由 route 显式声明 Preserve、ForceOpaque 或 Premultiplied,publication 和 overlay 边界保持一致。

官方 0.6.6 流程合入

本地 9c2309a 保留官方 0.6.6 的核心设计:

  • ScalingSessionLifetime:session generation 和 stopping 标志,过滤延迟 capture/backend/presentation 回调。
  • NgxRuntimeGuard:NGX Core、DLSSNR、DLSSFG 的统一 SEH/API 保护;fault 后阻止新会话重入已污染的 SDK 状态。
  • capture shutdown:WM_DESTROY 早期发布停止状态,关闭后的 WGC Update 进入 Waiting,旧回调不会访问新会话。
  • window owner:初始化/清理阶段解除 owner,规避同步窗口消息传播等待。
  • overlay session:恢复工具栏、固定状态、分析器和参数窗口位置/尺寸。
  • live parameter queue:last-write-wins、帧边界应用、Applied/Desired 分离;DLSSNR 通过 inputRevision 刷新历史。
  • 15-360 FPS 工具栏滑条、捕获区临时尺寸约束和参数浮窗持久化。

官方 0.6.6 的用户可见设计和 HDR boundary 是两层职责:0.6.6 负责会话与资源生命周期,HDR 层负责 canonical FP16、色彩 metadata、格式适配和 terminal presentation。

配置与回退重点

重点审查入口:

  • ScalingFlags::EnableHdrCompatibility
  • ScalingOptions::IsHdrCompatibilityEnabled()
  • Renderer::_UpdateHdrEffectBoundaryContexts()
  • NativeEffectBackendFactory.cpp
  • EffectDrawer.cpp
  • GraphicsCaptureFrameSource.cpp
  • AdaptivePresenter.cpp
  • CompSwapchainPresenter.cpp
  • XeSSFGPresenter.cpp
  • PassThroughFrames.cpp
  • EffectCompiler.cpp
  • AppSettings.cpp / ProfilePage.xaml

HDR off 的强制合同:

  1. 所有 HdrEffectBoundaryContext 清空。
  2. canonical FP16、HDR normalization 和 HDR terminal 资源保持 inactive。
  3. native factory 选择线上 backend 类、参数和 U8/LDR 输入。
  4. XeSS LDR flag、RTX Video U8 scale、NVOF/AMD OF 原有 U8 provider 和 PassThrough LDR shader恢复线上语义。
  5. HDR-only selector 隐藏或回到基线选项,配置中残留的 HDR 参数不参与 SDR 处理。
  6. publication/presenter 使用线上 format/color-space。

验证

已在 E:\Magpie-0.6.5-build 完成 Release x64 全量重建,版本为 0.6.6-hdr-fp16compat。

  • Magpie.exe SHA-256:DC6FB593B8EABFA29D969274207DCB4304918C40E12EECB0CFE754FCD4B962C5
  • 已运行 scripts/Run-HdrMechanicalValidation.ps1,source-level checks 全部通过。
  • 用户 fork release:v0.6.6-hdr-fp16compat
  • 完整包:Magpie-Experimental-v0.6.6-hdr-fp16compat-x64.zip
  • ZIP SHA-256:18E30C33893127E03CBE2F184D17065DCE215AE2A5585B701383AF4AF169E3C1

Review focus

请按下面顺序审阅:

  1. 以官方 v0.6.6-experimental 对比 local-0.6.5-hdr,确认 0.6.6 session/NGX/capture/overlay 语义完整。
  2. 逐个检查 NativeEffectBackendFactory 的 legacy/U8 branch,确认 HDR off 完全回到线上 0.6.5 处理。
  3. 检查 DLSSNR 的实际 color/depth/motion/exposure descriptor、inputRevision 和 bounded inverse。
  4. 检查 DLSSFG、XeSSFG、PassThrough 和 shared publication 的 terminal/alpha/color-space contract。
  5. 用 HDR off + external display HDR on 和 HDR on 两组配置,记录 route、descriptor、尺寸、dispatch、readback、pixel statistics、image hash 和 presenter descriptor。

本 PR 提交源码、资源和已构建版本相关变更;详细交接稿留在本地工作树,作为本 PR 描述和后续上游审阅的依据,文件本身保持未加入本次推送。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant