我的屏幕驱动程序如何处理这么多数据?

电器工程 沟通 展示 公共汽车 图形
2022-01-22 01:03:43

我只是做了一些快速计算:

在我的 MacBook 上,我的分辨率为2560x1440乘以24 位颜色,单张图片为 11.05MB 或60 fps时为每秒663MB

我想有一些压缩,但是例如当我用三个手指在我的触摸板上移动时,这是非常随机的,屏幕上接下来会发生什么,几乎每个像素都会发生变化。与几乎所有其他交互相同。

请解释我的计算是否错误以及这些数据是如何从我的显卡传输到我的屏幕的?我的显卡和屏幕之间的总线有多宽?或许可以简单地解释一下显示器是如何存储像素的?移位寄存器?缓存?

3个回答

你的计算本质上是正确的。对于 1440p60Hz 信号,一旦考虑到消隐时间(图像输出中的不可见像素边界),数据速率将为 5.8Gbps。

对于 HDMI/DVI,使用 10/8b 编码,这意味着虽然您说每个像素有 24 位颜色数据,但实际上在编码数据和添加协议控制字时发送了 30 位。根本不进行压缩,只发送原始数据,这意味着您需要7.25Gbps的数据带宽。

再次查看 HDMI/DVI。它使用“TDMS”信令标准进行数据传输。HDMI V1.2 标准要求单链路最高4.9Gbps (3 条串行数据线 + 1 条时钟线),或者在双链路 DVI 的情况下,最高9.8Gbps(6 条串行数据线,我认为)。因此,通过双链路 DVI 实现 1440p60 的带宽绰绰有余,但通过 HDMI V1.2 则不行。

在 HDMI V1.3 标准中(大多数设备实际上跳到了与 1.3 相同的带宽的 V1.4a),带宽翻了一番,达到了 10Gbps 左右,可以支持 1440p60,并且对于 30Hz(2160p30)的 UHD 也足够了。

作为另一个示例,DisplayPort 有 4 个串行数据流,每个数据流(在 V1.1 中)每个数据流的速度为2.16Gbps(考虑到编码),因此通过 V1.1 链接,您可以轻松地使用所有 4 个数据流实现 1440p60。他们还发布了更新的标准 V1.2,将其翻倍至4.32Gbps/流,允许 UHD @ 60Hz。还有一个更新的版本,他们将其进一步推到了6.4Gbps/stream


最初,这些数字听起来很庞大,但考虑到 USB 3.0 时,实际上并没有那么多。它仅通过一根电缆以 5Gbps 的数据速率发布(实际上是两根,一根用于 TX,一根用于 RX,但我离题了)。现在您的显卡在内部使用的 PCIe 通过单个差分对以高达 8Gbps 的速度运行,因此外部数据接口正在迎头赶上也就不足为奇了。


但问题仍然存在,它是如何完成的?当您想到 VGA 时,它由用于 R、G 和 B 数据的单线组成,这些数据以模拟格式发送。我们知道模拟非常容易受到噪声的影响,而且 DAC/ADC 的吞吐量也很有限,因此极大地限制了您可以通过它们的能力(据说如果幸运的话,您几乎无法在 VGA 上实现 1440p60Hz)。

但是,对于现代标准,我们使用的数字标准对噪声的影响更大(您只需要区分高低而不是两者之间的每个值),并且您无需在模拟和数字之间进行转换。

此外,在单端上使用差分标准的出现有很大帮助,因为您现在正在比较两条线之间的值(+ve 差 = 1,-ve 差 = 0),而不是比较单线与某个阈值。这意味着衰减不是问题,因为它会平等地影响两条电线并衰减到中点电压 - “眼睛”(电压差)变小,但您仍然可以判断它是 +ve 还是 -ve 甚至如果它只有 100mV 或更低。单端信号一旦信号衰减,它可能会低于您的阈值并变得无法区分,即使它仍然具有 1V 或更大的幅度。

通过在并行链路上使用串行链路,我们还可以获得更快的数据速率,因为偏移不再是一个问题。在并行总线中,例如 32 位宽,您需要完美匹配 32 根电缆的长度和传播特性,以使信号不会彼此异相(偏移)。在串行链路中,您只有一根电缆,因此不会发生歪斜。


TL;DR数据以您计算的完整比特率(几 Gbps)发送,没有压缩。差分对上的串行数字链路的现代信令技术使这成为可能。

现代计算机速度惊人。人们会很高兴地加载全高清 30fps 视频,却没有意识到这涉及每秒数十亿的算术运算。游戏玩家往往会稍微意识到这一点;GTX 1060 将为您提供 4.4 TFLOPS(每秒万亿次浮点运算)。

请解释我的计算是否错误以及这些数据是如何从我的显卡传输到我的屏幕的?

我的显卡和屏幕之间的总线有多宽?

另一个答案解决了 HDMI、DisplayLink 等的多千兆特性。

或许可以简单地解释一下显示器是如何存储像素的?移位寄存器?缓存?

理论上,显示器本身不存储图像数据。

(一些显示器,尤其是电视,会存储一两帧来应用图像处理。这会增加延迟并且不受游戏玩家的欢迎。)

计算机的图形子系统将像素存储在普通 DRAM 中。它通常不会在每一帧从处理器重新绘制整个内容,而是将一些功能交给专用子系统和合成器。例如,合成器将允许将桌面上的每个窗口存储为一组不同的像素,然后可以通过专用硬件对其进行移动、滚动或缩放。这在移动设备上滚动变得非常明显 - 您可以走一小段路,直到您用完“屏幕外”预先计算的像素并且软件必须停止并渲染更多到合成器的缓冲区。

游戏每帧都会重新绘制,并且有大量关于如何构建场景的文献。这是建立在图形卡上的帧缓冲区中的,然后在将下一帧绘制到不同的缓冲区时将其传输出去。

视频解码通常也交给专用硬件,尤其是 H.264。

显示卡和 LCD 面板之间的链接是通过使用 TMDS 信号的几个高速差分对进行的,通常称为“通道”。通常使用四个通道,因此可以说总线是 4 位宽。有关更多详细信息,请参阅stackhexchange answer

每个 LCD 面板型号通常都有多个接口化身,因此在尝试更换损坏的面板时需要小心并查看后缀。大多数现代数字链路 (HDMI 1.4) 具有 10.2 Gbps,或每通道仅 2.5 Gbps。在您的计算中 (663 MBps),它总计为每通道 1.2 Gbps(假设有 4 个通道),这并不算多(例如 SATA3 有 6Gbps)。

LCD面板上的添加。有源矩阵 LCD 实际上试图将帧图像(像素数据)存储在与“扭曲向列单元”(控制薄膜偏振的单元)相关的电容器中。问题是模拟存储上限的大小必须是存储时间和像素切换速度之间的权衡。所以它不能做得很大,很快就会失去存储的潜力,因此需要定期刷新每个像素单元都通过晶体管(“有源”元件)与数据线和地址线连接,请参阅这篇Tomshardware 文章LCD 驱动器控制器以逐行方式复用数据和地址线,从而保持显示的图像。图像本身存储在图形控制器内部的帧缓冲区 (RAM) 中。