我有一个现代化的1920x1200
LED 显示屏,频率高达 96 kHz HorizSync
、76 HzVertRefresh
和 205 MHz 像素时钟。
除了其原始分辨率外,显示器还可以在1600x1200
75 Hz 下以 (4:3) 分辨率运行:
1600x1200 (0xa1) 202.500MHz +HSync +VSync
h: width 1600 start 1664 end 1856 total 2160 skew 0 clock 93.75KHz
v: height 1200 start 1201 end 1204 total 1250 clock 75.00Hz
现在,我尝试将其切换到800x600
与上述1600x1200
模式等效的双扫描模式(也是 75 Hz;所有模型行均取自这里):
xrandr --newmode "800x600d" 101.25 800 832 928 1080 600 600 602 625 DoubleScan +HSync +VSync
xrandr --addmode DP1 800x600d
生成的视频模式已成功添加,并且在输出中清晰可见xrandr
:
800x600d (0x1f7) 101.250MHz +HSync +VSync DoubleScan
h: width 800 start 832 end 928 total 1080 skew 0 clock 93.75KHz
v: height 600 start 600 end 602 total 625 clock 75.00Hz
但是一旦我尝试切换到新模式,我立即收到错误:
# Mode by name
$ xrandr --output DP1 --mode 800x600d
xrandr: cannot find mode 800x600d
# Mode by id
$ xrandr --output DP1 --mode 0x1f7
xrandr: Configure crtc 0 failed
现代显卡是否不再能够在双扫描模式下运行?或者我应该责怪我的显示器?
答案1
部分答案,快速回答:
显卡是从基于 CRTC(CRT 控制器)的传统模型发展而来的,最初是作为6845,用索引和数据寄存器来更改内部寄存器,与主要图形硬件系列(Intel、Nvidia、ATI/AMD 等)完全不同。
在传统 VGA 中,它是其中一个寄存器中的一种约定位。因为传统 VGA 是仍然基本上所有显卡都支持,这一点仍然存在。但特别是驱动数字输出的电路已经发生了变化,因此您确实需要显卡的确切型号,并且您需要查找数据表以确定它是否受支持。有时类似模型的数据表会有所帮助,但您需要进行试验。
例如看看英特尔G35数据表(已经很古老了),您将在第 2.7 节中看到两个“显示管道”,但在寄存器中传统的双扫描CR09
。
如果你想用 VGA 恢复旧硬件,如果你可以为该卡提供合适的 X 版本和合适的驱动程序,那么它很可能开箱即用(但即使是 VESA 驱动程序也可以,不确定是否可以)不过,会进行两次扫描)。
添加具有双扫描的ModeLine
过孔xrandr
基本上只是在模型行数据结构中设置一个标志。驱动程序需要解释此标志,并使用它正确设置寄存器,而这(如上面的数据表所示)在很大程度上取决于硬件。