前段时间购置了一个显示器,规格是 2K@240Hz,用起来之后感觉比 144Hz 流畅很多,但是很快我就发现这个显示器有一个问题。
当我进行全屏游戏的时候,如果这个时候切回到桌面,显示器会短暂黑屏一段时间,并且弹出 OSD 显示显示器目前的状态。因为我需要经常切出游戏做别的事情,这个黑屏带来的体验太差,我只好用无边框窗口化的显示模式来玩游戏。
线索一:刷新率
之前我的内存有一些问题,导致游戏不能稳定在 240fps,所以我决定把刷新率降到 200Hz 来玩,但随之也发现,如果用 200Hz,那么之前的切出游戏黑屏的问题也消失了。这个时候我开始怀疑是不是刷新率过高导致显卡到显示器的数据带宽超过了 DP 的上限,但是按理来说如果超过上限应该是直接不 work,因为我不怎么了解显示器所以后面也没有深入去思考这个问题了。
线索二:色深位数
几天前我在捣鼓显卡驱动里的一些设置,偶然注意到了显卡的输出色深是 10bit,这个时候我才想起来这个显示器是支持 10bit 的…… 这也让我回想起之前猜想数据带宽过高的问题,所以我把输出改到了 8bit,毕竟这种电竞显示器本身就没什么色准可言,臭打游戏的也不需要这个。
接下来事情真的按我预料的发展了,改成 8bit 之后,即使在 240Hz 下黑屏问题也消失了。为了验证猜想我计算了一下两种模式下的带宽需求:
在 8bit 下,显卡输出的数据带宽是:
查询了一下 DP1.4 的最大带宽为 32.4 Gbps,确实是小于这个上限的。但是再计算一下 10bit 下的数据带宽:
这个带宽还是小于 DP1.4 的 32.4 Gbps 上限,这样就无法解释我的猜想了。于是我决定学习一下 DP 这个东西。看了一圈维基百科之后,首先注意到一个问题,就是 DP 在传输数据的时候,使用了 8b/10b 这种编码。这种编码会将每 8bit 数据编码为一个 10bit 的数据(也就是说有 2bit 的 overhead),所以 DP 传输数据时的实际带宽上限是
到这里已经能解释一半之前的猜想了,10bit 下确实数据带宽超过了 DP 的上限,而学习 DP 的过程中我也了解到了 DSC(Display Stream Compression)这个东西,简单来说就是对数据进行压缩,我检查了显示器的设置,这个选项确实是打开的。也就是说当我开启 10bit 时,游戏中和游戏外显卡输出的色深不一样,导致显示器需要在 DSC 是否启动之间进行切换,从而会黑屏一段时间。
One More Thing
实际上上面的计算依然是错误的,维基百科的 DP 英文词条中列了各种分辨率在各种刷新率下带宽需求,但我发现和我上面的计算结果对不上,而词条中也标注了,计算结果考虑了 CVT-RB v2 的影响,所以我也了解了一下这个东西。
简单来说,显示器显示的时候并不是所有像素一起更新,而是逐行扫描的,为了避免干扰,实际的扫描长度和高度会比显示器的分辨率更多一些,实际的长度和高度由 VESA 的标准制定,不同分辨率和不同刷新率下都会不一样。VESA 提供了一个计算器来计算,以我的情况为例,2K@240Hz下,实际的扫描长度为 2640,而实际的扫描高度是 1619。因此 8bit 下的数据带宽其实是:
这个结果与维基百科中的值一致,也非常接近 DP1.4 的带宽上限。
更流畅的守望先锋
切换到 8bit,关闭 DSC,游戏会明显流畅不少,DSC 本身会带来延迟,虽然很多资料里说 DSC 带来的影响几乎无法被注意到,但是 reddit 上也有很多人表示这个影响很明显。对于竞技玩家来说,DSC 一定要关掉。