none
DXGI_SWAP_EFFECT_DISCARD模式Swap chain scaling产生的走样问题 RRS feed

  • 问题

  • 根据官方的这篇文章:

    Swap chain scaling and overlays

    https://learn.microsoft.com/en-us/windows/uwp/gaming/multisampling--scaling--and-overlay-swap-chains#use-swap-chain-scaling

    里面说到可以采用降低SwapChain分辨率的方式来优化性能,这样DX会负责把SwapChain上采样到屏幕的分辨率。

    我们遇到的问题是,如果采用传统的DXGI_SWAP_EFFECT_DISCARD的Swap方式,SwapChain上采样之后会产生大量的锯齿,类似临近采样的效果,如果采用DXGI_SWAP_EFFECT_FLIP_DISCARD模式,上采样就不会有锯齿,边缘很平滑。

    感觉二者在DX内部采用的上采样的过滤方式有明显的区别。请问是否有文档或者介绍详细说这块内容

    PS:我们需要采用DXGI_SWAP_EFFECT_DISCARD模式的原因是,采用这种模式无边框窗口模式和窗口模式会有比较好的防撕裂效果,如果采用DXGI_SWAP_EFFECT_FLIP_DISCARD的模式,关闭DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING允许撕裂的开关后,需要加大backbuffer的数量以提升帧率上限。当然我们也知道DXGI_SWAP_EFFECT_FLIP_DISCARD会有更好的性能。

    另外我们测试过在DXGI_SWAP_EFFECT_FLIP_DISCARD模式下,把backbuffer的数量改成4,这样可以将帧率限制放大到180帧(60hz的屏幕刷新率时),具体为什么是180可以看官方这个视频:https://www.youtube.com/watch?v=E3wTajGZOsA

    但是采用4缓冲后,发现DX11版本出现了比较多GPU Hung的情况(原因未知)

    2022年9月28日 9:11