|
发表于 2003-6-3 15:03:42
|
显示全部楼层
.
翻译完毕.
由于涉及专业技术术语,相信有不少错误.恳请批评指正.
仅供参考,如有疑问以英文版本为准.
__________________________________________________________________________
(应用-l)附录 L: 设计显示模式
__________________________________________________________________________
NVIDIA 的linux驱动程序集支持所有标准的VGA和VESA模式, 和绝大多数的自定义模式;所有的硬件都支持逐行扫描模式, 包括隔行扫描模式:
GeForce 256, GeForce DDR, Quadro, GeForce2 GTS/GeForce2 Pro, GeForce2 Ti,
GeForce2 Ultra, Quadro2 Pro, and all TNT products.
通常,对显示模式的限制很大程度上取决于你的显示设备 (监视器/液晶屏/电视) ,而不是NVIDIA显卡或NIVIDA的linux驱动程序集。
如果要为 X 设置一种或多种标准显示模式, 你可以简单地在 XF86Config 文件的Display subsection中添加一行"Modes"(细节请看XF86Config(4/5)手册页).
例如:
Modes "1600 x1200" "1024 x768" "640 x480"
如果你希望用自定义显示模式,做xvidtune(1)实验, 或想学更多东西,下列各项将是你最关心的内容.请注意: 这既不是对XFree86自定义模式行的解释也不是其艺术指南.详细情况见XFree86 Video Timings HOWTO(在www.linuxdoc.org上可以找到).
DEPTH(色深), BITS PER PIXEL(每像素使用的位数bpp), 和 PITCH(点距)
设计显示模式不是一个直观的东西(不是东西),而采用bpp来衡量最大分辨率;因此,需要界定术语 "depth" 和 "bpp". depth是指每一 像素存储多少位数据.支援的depth是 8, 15, 16,和 24.然而,多数视频硬件储存 像素数据的大小为 8,16,或32; 这是指每一 像素分配的内存(显存)总数. 当你指定depth后, X 则采用每 像素位数 (bpp)的大小来储存数据. 下列是depth和 bpp对照表:
- depth bpp
- ===== =====
- 8 8
- 15 16
- 16 16
- 24 32
复制代码
最后, "pitch" 是指在线性帧缓冲中,两个相邻像素的数据之间有多少字节.
你可以把它相象为水平分辨率 乘以 每像素的字节数(bpp 除以 8). 事实上, pitch值可能比实际值大,因为通常要求视频硬件的pitch值是某个数值的倍数.
最大的分辨率
NVIDIA 的Linux驱动程序集和 基于NVIDIA GPU(图形处理器)的视频卡支持高达
2048 x 1536的分辨率,然而,你的系统能支持的最大分辨率还受限于显存大小(细节见实用公式)和显示器(监视器/液晶屏/电视)能够支持的最大分辨率. 并请注意,使用视频层叠不限制最大分辨率或刷新率,设计的显示模式所使用的显存带宽会影响层叠质量.
USERFUL FORMULAS(实用公式)
最大分辨率是显存总数和选用的bpp这两个家伙的函数:
HR * VR * (bpp/8) = 使用的显存
换句话说,使用的显存数量相等水平分辨率(HR) 乘以 垂直分辨率(VR) 再乘以 每像素字节数(bbp 除以 8). 从技术上讲,使用的显存实际上是pitch乘以垂直分辨率,而pitch可能比(HR * (bpp/8)) 略大些以便于符合pitch是某个数值的倍数的硬件要求.
这只是帧缓冲使用的内存;显存同时被其他程序使用,如OpenGL或pixmap缓存.
另外一个重要关系是分辨率,PCLK(像素时钟(aka 点的时钟(频率))) 和垂直刷新率(RR):
RR= PCLK/( HFL * VFL)
换句话说, 刷新率(RR)等于像素时钟pixel clock(PCLK)除以总像素: 水平帧长度(HFL) 乘以 垂直帧长度(VFL) ( 注:这些是帧长度, 而不只是视频分辨率). 如
XFree86 Video Timings HOWTO描述的, 上述公式可以写成下列形式:
PCLK = RR * HFL * VFL
给出一个最大的PCLK像素时钟(频率), 你可以随意调整 RR , HFL 和 VFL, 只要三个数的乘积不变.当你用提示记录方式运行X时, PCLK被记录在log文件中:
'startx -- -logverbose 5'.XFree86.0.log 应该包含一些类似下面的行:
(--) NVIDIA(0): Display Device 0: maximum pixel clock at 8 bpp: 350 MHz
(--) NVIDIA(0): Display Device 0: maximum pixel clock at 16 bpp: 350 MHz
(--) NVIDIA(0): Display Device 0: maximum pixel clock at 32 bpp: 300 MHz
这些行显示了不同大小bbp所对应的最大PCLK。
模式是如何验证的
在 X 服务器的 PreInit 阶段, NVIDIA X 驱动程序通过下列操作来验证请求的所有显示模式:
o 通过(1)用户在XF86Config中设置的 HorizSync(水平同步) 和 VertRefresh(垂直刷新) 和(2)从监视器EDID(扩展显示识别数据)获得的数值范围,得到(1)和(2)的交集;
可以通过使用 "IgnoreEDID" 选项来禁止, 这样的话 X 驱动将会盲目地接受 用户设置的HorizSync 和 VertRefresh 范围.
o 调用 xf86ValidateModes() helper函数, 找到用户在XF86Config文件中设置的显示模式,砍掉其中无效的模式:
无效的水平同步频率 或 垂直刷新率,比显卡最大PCLK高的PCLK, 或大于虚拟屏幕尺. 使用很多其他的(限制)规范;见
xc/programs/ Xserv/hw/xfree86/common/xf86Mode.c:xf86ValidateModes.()
o 接着检查所有从 xf86ValidateModes() 返回的模式, 确定他们的分辨率不会大于监视器EDID显示的最大的模式(可以通过使用 "IgnoreEDID" 选项来禁止).如果接电视的话,则检查每种模式,以确定有一种分辨率能够被电视编码器支持(通常编码器只有支持 800 x 600 和 640 x480).
o 接着检查所有剩下的模式,以确定符合下面ADDITIONAL MODE CONSTRAINTS中描述的规范.
当每个模式被规划的时候, 要做最后二个步骤,捕捉被 XF86VidModeExtension 提出的可能无效的模式(例如 xvidtune(1)). 对于 TwinView,要求的显示设备模式都要做上述验证.
ADDITIONAL MODE CONSTRAINTS(附加的模式规范)
下面是必须匹配的模式参数的附加规范列表.
o 水平分辨率 (HR) 必须是 4 倍数,并且小于等于 2048.
o 水平消隐宽度 (水平帧最大长度和水平同步结束 减 最小水平分辨率和水平同步开始 (max(HFL,HSE) - min(HR,HSS)) 必须是 4 的倍数,并且小于等于 1024.
o 水平同步开始 (HSS) 必须是 4 的倍数并且小于等于 4088.
o 水平同步宽度 (水平同步结束 减 水平同步开始( HSE - HSS)) 必须是 4 的倍数, 并且小于等于 256.
o 水平帧长度 (HFL) 必须是 4 的倍数,并且小于等于 4128, 而且大于等于 40.
o 垂直分辨率 (VR) 必须小于等于 2048.
o 垂直消隐宽度 (最大垂直帧长度和垂直同步结束 减 最小垂直分辨率和垂直同步开始 (max(VFL,VSE) - min(VR,VSS))必须小于等于 128.
o 垂直同步开始 (VSS) 必须小于等于 2047.
o 垂直同步宽度 ( 垂直同步结束 减 垂直同步开始 (VSE - VSS)) 必须小于等于16.
o 垂直帧长度 (VFL) 必须小于等于 2049, 而且大于等于 2.
这里是一个使用上面缩写的模式行范例:
# Custom Mode line for the SGI 1600SW Flatpanel
# name PCLK HR HSS HSE HFL VR VSS VSE VFL
Modeline "sgi1600x1024" 106.9 1600 1632 1656 1672 1024 1027 1030 1067
请参考:
一个遵循 GTF 标准的 XFree86 modeline 产生器, 已被寄到 XFree86 Xpert 邮寄名单:
http:// www.xfree86.org/pipermail/xp...ber/012070. html
更多的 modeline 产生器, 在 freshmeat.net 上搜索 "modeline" .
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|