一种分辨率自适应缩放显示方法及显卡驱动模块转让专利

申请号 : CN202210924187.9

文献号 : CN114995944B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈世欢王炜

申请人 : 武汉凌久微电子有限公司

摘要 :

本发明适用于显卡驱动领域,提供一种分辨率自适应缩放显示方法及显卡驱动模块,首先解析EDID,如果没有EDID则使用默认VESA时序输出;如果系统BIOS使用EDID相符合的分辨率,则使用该分辨率和对应的时序进行显示,否则选择显示器最大分辨率作为目标分辨率,然后通过计算缩放参数,通过缩放操作进行缩放显示。本发明可以自动匹配系统BIOS和显示器的分辨率,通过解析显示器EDID设置分辨率和输出时序,自适应能力强;缩放采用居中对齐局部缩放的线性缩放方法,缩短了运算时间,提高显示速度;即便是在没有EDID时又可以按照VESA标准分辨率和时序输出,成功实现在各家系统BIOS和显示器复杂组合之下的显示功能。

权利要求 :

1.一种分辨率自适应缩放显示方法,其特征在于,所述方法包括下述步骤:步骤S1、读取显示器的EDID,如果没有有效的EDID则使用默认VESA时序输出,否则解析EDID,获取显示器支持的所有分辨率和时序,并传递给系统BIOS;

步骤S2、若系统BIOS使用与接收到分辨率相符合的分辨率,则使用该分辨率和对应的时序进行显示器输出显示;

步骤S3、若系统BIOS使用与接收到分辨率不相符合的分辨率,则选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率;

步骤S4、计算缩放参数,使用预设的缩放方式将源数据存储空间的数据缩放到目标数据存储空间,并将目标数据空间更新的数据写入到显存相应位置进行显示;

步骤S3中所述选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率,具体过程如下:S31、根据系统BIOS使用的分辨率作为自适应缩放的源分辨率;

S32、根据显卡和显示器都支持的最大分辨率和对应的时序作为自适应缩放的目标分辨率;

S33、根据源分辨率和目标分辨率计算缩放参数;

所述步骤S4具体过程如下:

S41、建立源数据存储空间和目标数据存储空间,其中所述源数据存储空间用于记录系统BIOS的显示数据,所述目标数据存储空间用于记录缩放后的显示数据;

S42、根据系统BIOS的显示需求获取源数据存储空间指定更新范围的起始地址及大小,确定源数据缩放范围;

S43、根据计算得到的缩放参数,对应转换成目标数据存储空间需要更新的起始地址及大小,确定目标数据更新范围;

S44、根据系统BIOS当前的显示模式,确定源数据存储空间中源数据缩放范围对应的数据;

S45、将源数据缩放范围内的数据,使用居中对齐局部缩放的线性缩放方式,更新至目标数据存储空间的目标数据更新范围;

S46、将目标数据更新范围的数据写入到显存相应位置进行显示;

步骤S45中,将目标数据更新范围的起始地址缩小一个缩放单位,大小扩大两个缩放单位后再进行更新。

2.一种显卡驱动模块,其特征在于,所述显卡驱动模块包括:数据获取单元,用于读取显示器的EDID,如果没有有效的EDID则使用默认VESA时序输出,否则解析EDID,获取显示器支持的所有分辨率和时序,并传递给系统BIOS;

输出显示单元,用于当系统BIOS使用与接收到分辨率相符合的分辨率时,使用该分辨率和对应的时序进行显示器输出显示;

目标选择单元,用于当系统BIOS使用与接收到分辨率不相符合的分辨率时,选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率;

缩放显示单元,用于计算缩放参数,使用预设的缩放方式将源数据存储空间的数据缩放到目标数据存储空间,并将目标数据空间更新的数据写入到显存相应位置进行显示;

所述目标选择单元具体包括:

源分辨率设置模块,用于根据系统BIOS使用的分辨率作为自适应缩放的源分辨率;

目标分辨率设置模块,用于根据显卡和显示器都支持的最大分辨率和对应的时序作为自适应缩放的目标分辨率;

缩放参数计算模块,用于根据源分辨率和目标分辨率计算缩放参数;

所述缩放显示单元具体包括:

存储空间建立模块,用于建立源数据存储空间和目标数据存储空间,其中所述源数据存储空间用于记录系统BIOS的显示数据,所述目标数据存储空间用于记录缩放后的显示数据;

缩放范围确定模块,用于根据系统BIOS的显示需求获取源数据存储空间指定更新范围的起始地址及大小,确定源数据缩放范围;

更新范围确定模块,用于根据计算得到的缩放参数,对应转换成目标数据存储空间需要更新的起始地址及大小,确定目标数据更新范围;

源数据确定模块,用于根据系统BIOS当前的显示模式,确定源数据存储空间中源数据缩放范围对应的数据;

目标数据缩放模块,用于将源数据缩放范围内的数据,使用居中对齐局部缩放的线性缩放方式,更新至目标数据存储空间的目标数据更新范围;

数据显示模块,用于将目标数据更新范围的数据写入到显存相应位置进行显示;

其中目标数据缩放模块中,将目标数据更新范围的起始地址缩小一个缩放单位,大小扩大两个缩放单位后进行更新。

说明书 :

一种分辨率自适应缩放显示方法及显卡驱动模块

技术领域

[0001] 本发明属于显卡驱动技术领域,尤其涉及一种分辨率自适应缩放显示方法及显卡驱动模块。

背景技术

[0002] 随着GPU(graphics processing unit,图形处理器缩写)的迅猛发展,GPU在各个环境下的驱动开发显得尤为重要。在BIOS(Basic Input Output System,基本输出输入系统)阶段,显示数据首先由系统BIOS通过调用显卡驱动接口传递到显卡,其次通过显卡渲染后传送到显示器,最后显示器通过自身策略处理后显示到屏幕上。显卡驱动位于显示数据流的中间,需要协调系统BIOS与显示器的显示设置,包含显示分辨率和时序。
[0003] 最基本的方式是系统BIOS厂商和显卡厂商共同研究显示器的使用手册将系统BIOS和显卡驱动都设置为显示器所支持的最佳分辨率,并根据显示器使用手册最佳分辨率的时序描述设置显卡的相应的控制寄存器使得显卡输出接口按照对应时序输出到显示器。这种方式需要系统BIOS方和显卡驱动方都要研究显示器使用手册,且每个固件包都为定制,不能用于其它分辨率或时序的显示器。
[0004] 还有一种方法是显卡驱动读取显示器的EDID(Extended  display identification data,扩展显示器识别数据),从EDID里解析出显示器支持的所有显示分辨率和时序,将分辨率传递给系统BIOS,系统BIOS在收到的分辨率中选择最佳分辨率,显卡驱动按照EDID所描述的时序配置相应输出控制寄存器,使得输出到显示器的时序符合EDID描述。这种方法具有一定的自适应能力,但是对于系统BIOS不支持显示器EDID里面的分辨率的时候还是不能正常显示。

发明内容

[0005] 鉴于上述问题,本发明的目的在于提供一种分辨率自适应缩放显示方法及显卡驱动模块,旨在解决现有各种系统BIOS和显示器之间无法自适应统一的技术问题。
[0006] 本发明采用如下技术方案:
[0007] 一方面,所述分辨率自适应缩放显示方法包括下述步骤:
[0008] 步骤S1、读取显示器的EDID,如果没有有效的EDID则使用默认VESA时序输出,否则解析EDID,获取显示器支持的所有分辨率和时序,并传递给系统BIOS;
[0009] 步骤S2、若系统BIOS使用与接收到分辨率相符合的分辨率,则使用该分辨率和对应的时序进行显示器输出显示;
[0010] 步骤S3、若系统BIOS使用与接收到分辨率不相符合的分辨率,则选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率;
[0011] 步骤S4、计算缩放参数,使用预设的缩放方式将源数据存储空间的数据缩放到目标数据存储空间,并将目标数据空间更新的数据写入到显存相应位置进行显示。
[0012] 进一步的,步骤S3中所述选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率,具体过程如下:
[0013] S31、根据系统BIOS使用的分辨率作为自适应缩放的源分辨率;
[0014] S32、根据显卡和显示器都支持的最大分辨率和对应的时序作为自适应缩放的目标分辨率;
[0015] S33、根据源分辨率和目标分辨率计算缩放参数。
[0016] 进一步的,所述步骤S4具体过程如下:
[0017] S41、建立源数据存储空间和目标数据存储空间,其中所述源数据存储空间用于记录系统BIOS的显示数据,所述目标数据存储空间用于记录缩放后的显示数据;
[0018] S42、根据系统BIOS的显示需求获取源数据存储空间指定更新范围的起始地址及大小,确定源数据缩放范围;
[0019] S43、根据计算得到的缩放参数,对应转换成目标数据存储空间需要更新的起始地址及大小,确定目标数据更新范围;
[0020] S44、根据系统BIOS当前的显示模式,确定源数据存储空间中源数据缩放范围对应的数据;
[0021] S45、将源数据缩放范围内的数据,使用居中对齐局部缩放的线性缩放方式,更新至目标数据存储空间的目标数据更新范围;
[0022] S46、将目标数据更新范围的数据写入到显存相应位置进行显示。
[0023] 进一步的,步骤S45中,将目标数据更新范围的起始地址缩小一个缩放单位,大小扩大两个缩放单位后再进行更新。
[0024] 另一方面,所述显卡驱动模块包括:
[0025] 数据获取单元,用于读取显示器的EDID,如果没有有效的EDID则使用默认VESA时序输出,否则解析EDID,获取显示器支持的所有分辨率和时序,并传递给系统BIOS;
[0026] 输出显示单元,用于当系统BIOS使用与接收到分辨率相符合的分辨率时,使用该分辨率和对应的时序进行显示器输出显示;
[0027] 目标选择单元,用于当系统BIOS使用与接收到分辨率不相符合的分辨率时,选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率;
[0028] 缩放显示单元,用于计算缩放参数,使用预设的缩放方式将源数据存储空间的数据缩放到目标数据存储空间,并将目标数据空间更新的数据写入到显存相应位置进行显示。
[0029] 进一步的,所述目标选择单元具体包括:
[0030] 源分辨率设置模块,用于根据系统BIOS使用的分辨率作为自适应缩放的源分辨率;
[0031] 目标分辨率设置模块,用于根据显卡和显示器都支持的最大分辨率和对应的时序作为自适应缩放的目标分辨率;
[0032] 缩放参数计算模块,用于根据源分辨率和目标分辨率计算缩放参数。
[0033] 进一步的,所述缩放显示单元具体包括:
[0034] 存储空间建立模块,用于建立源数据存储空间和目标数据存储空间,其中所述源数据存储空间用于记录系统BIOS的显示数据,所述目标数据存储空间用于记录缩放后的显示数据;
[0035] 缩放范围确定模块,用于根据系统BIOS的显示需求获取源数据存储空间指定更新范围的起始地址及大小,确定源数据缩放范围;
[0036] 更新范围确定模块,用于根据计算得到的缩放参数,对应转换成目标数据存储空间需要更新的起始地址及大小,确定目标数据更新范围;
[0037] 源数据确定模块,用于根据系统BIOS当前的显示模式,确定源数据存储空间中源数据缩放范围对应的数据;
[0038] 目标数据缩放模块,用于将源数据缩放范围内的数据,使用居中对齐局部缩放的线性缩放方式,更新至目标数据存储空间的目标数据更新范围;
[0039] 数据显示模块,用于将目标数据更新范围的数据写入到显存相应位置进行显示。
[0040] 进一步的,目标数据缩放模块中,将目标数据更新范围的起始地址缩小一个缩放单位,大小扩大两个缩放单位后再进行更新。
[0041] 本发明的有益效果是:本发明技术方案可以自动匹配系统BIOS和显示器的分辨率,通过解析显示器EDID设置分辨率和输出时序,自适应能力强;且缩放采用居中对齐局部缩放的线性缩放方法,缩短了运算时间,提高显示速度;即便是在没有EDID时又可以按照VESA标准分辨率和时序输出,成功实现在各家系统BIOS和显示器复杂组合之下的显示功能。

附图说明

[0042] 图1是本发明第一实施例提供的分辨率自适应缩放显示方法的流程图;
[0043] 图2是本发明第二实施例提供的显卡驱动模块的结构方框图。

具体实施方式

[0044] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0045] 为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
[0046] 实施例一:
[0047] 图1示出了本发明实施例提供的分辨率自适应缩放显示方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。
[0048] 如图1所示,本实施例提供的分辨率自适应缩放显示方法包括下述步骤:
[0049] 步骤S1、读取显示器的EDID,如果没有有效的EDID则使用默认VESA时序输出,否则解析EDID,获取显示器支持的所有分辨率和时序,并传递给系统BIOS。
[0050] 在UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)定义中,通过系统BIOS与显卡驱动之间接口模块,主板上的系统BIOS可调用显卡驱动。系统BIOS可以是各类BIOS供应商在UEFI下的BIOS固件;所述显卡驱动为国产GPU显示驱动,所述显示器为市面上的大部分显示器。
[0051] VESA(Video Electronics Standards Association,视频电子标准协会)标准规定了电脑制式的各种分辨率和刷新频率的显示监视器定时标准。
[0052] 在UEFI下,在接收到系统BIOS的显示需求后,显示需求包含显示模式、需要更新的数据、分辨率等,系统BIOS通过调用显卡驱动以读取当前显示器的EDID,如果无法读取到有效的EDID,则只能通过默认预置的VESA标准分辨率和时序进行输出。如果成功读取到显示器有效的EDID,则解析EDID,将显示器支持的所有分辨率和时序传递给系统BIOS。
[0053] 步骤S2、若系统BIOS使用与接收到分辨率相符合的分辨率,则使用该分辨率和对应的时序进行显示器输出显示。
[0054] 如果系统BIOS显示需求中的分辨率,在接收到的分辨率中有相符合的分辨率,则直接使用该符合的分辨率和对应时序进行输出显示。
[0055] 步骤S3、若系统BIOS使用与接收到分辨率不相符合的分辨率,则选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率。
[0056] 如果系统BIOS显示需求中的分辨率在接收到的分辨率中没有相符合的分辨率,则需要按照解析EDID得到的分辨率和时序进行缩放显示。为了增强显示效果,可以选择显卡和显示器都支持的最大分辨率作为目标分辨率进行缩放处理。
[0057] 具体过程如下:
[0058] S31、根据系统BIOS使用的分辨率作为自适应缩放的源分辨率;
[0059] S32、根据显卡和显示器都支持的最大分辨率和对应的时序作为自适应缩放的目标分辨率;
[0060] S33、根据源分辨率和目标分辨率计算缩放参数。
[0061] 源分辨率为系统BIOS所要使用的分辨率,目标分辨率为显卡和显示器都支持的最大分辨率,目标分辨率一般选择显示器最佳分辨率,显示效果好,然后计算缩放参数以实现从源分辨率缩放至目标分辨率。缩放参数包含了横向缩放比例和纵向缩放比例。比如将600X480的分辨率缩放到1920X1080,那么缩放参数就是(3.200,2.250)。
[0062] 步骤S4、计算缩放参数,使用预设的缩放方式将源数据存储空间的数据缩放到目标数据存储空间,并将目标数据空间更新的数据写入到显存相应位置进行显示。
[0063] 本步骤按照设定的缩放方式将源数据存储空间数据缩放到目标数据存储空间,最后进行更新显示。具体过程如下:
[0064] S41、建立源数据存储空间和目标数据存储空间,其中所述源数据存储空间用于记录系统BIOS的显示数据,所述目标数据存储空间用于记录缩放后的显示数据;
[0065] S42、根据系统BIOS的显示需求获取源数据存储空间指定更新范围的起始地址及大小,确定源数据缩放范围;
[0066] S43、根据计算得到的缩放参数,对应转换成目标数据存储空间需要更新的起始地址及大小,确定目标数据更新范围;
[0067] S44、根据系统BIOS当前的显示模式,确定源数据存储空间中源数据缩放范围对应的数据;
[0068] S45、将源数据缩放范围内的数据,使用居中对齐局部缩放的线性缩放方式,更新至目标数据存储空间的目标数据更新范围;
[0069] S46、将目标数据更新范围的数据写入到显存相应位置进行显示。
[0070] 前面已有说明,系统BIOS的显示需求包含显示模式、需要更新的数据、分辨率等。系统BIOS的显示数据存储在源数据存储空间中,当前系统BIOS需要更新的数据在源数据存储空间中有指定的更新范围,包括起始地址和大小,因此通过起始地址和大小即可确定源数据缩放范围。而根据前述得到的缩放参数,即可转换成在目标数据存储空间中对应的目标缩放的起始地址和大小,得到目标数据更新范围。最后根据显示模式要求,按照设定的缩放方式将源数据缩放范围中数据缩放更新至目标数据更新范围。
[0071] 作为一种优先实施方式,上述步骤S45中,为了进一步防止出现遗漏或是锯齿,还可以进一步将目标数据更新范围的起始地址缩小一个缩放单位,大小扩大两个缩放单位后再写入到显存相应位置。
[0072] 源数据更新空间数据到目标数据存储空间转换的具体步骤如下:
[0073] 1.转换的起始地址,包括横向目标地址和纵向目标地址,其中横向目标地址=⌊(横向源地址–1)*横向缩放参数⌋,纵向目标地址=⌊(纵向源地址–1)*纵向缩放参数⌋;这里横向源地址和纵向源地址是待更新数据在源数据存储空间中的起始地址;
[0074] 2.转换的数据大小范围,包括横向范围和纵向范围,其中横向范围=⌈(横向源范围+2)*横向缩放参数⌉,纵向范围=⌈(纵向源范围+2)*纵向缩放参数⌉;这里横向源范围和纵向源范围是待更新数据在源数据存储空间中的大小范围。
[0075] 这里⌊ ⌋符号表示向下取整 ,⌈ ⌉符号表示向上取整。
[0076] 本步骤源数据按分块缩放显示,确定每块的起始地址和大小,然后根据缩放参数计算目标的起始地址和大小。以600X480的分辨率缩放到1920X1080为例,那么缩放参数就是(3.200,2.250),如果更新区域的起始坐标是(300,240),更新范围是(100,10),则对应更新的目标区域就是(956,537)为起始的(327,27)大小的区域。
[0077] 本发明采用的居中对齐局部缩放的线性缩放方式,该缩放方式是以中心点对齐的双线性内插方法,缩放速度快,图像显示无齿轮和竖线,显示效果好。
[0078] UEFI有四种显示模式,如像素填充、提取屏幕、屏幕到屏幕、缓冲区到屏幕。这四种显示模式有相应的数据显示内容和要求,如像素填充是将像素信息先填充到源数据存储空间。按照当前显示模式,系统BIOS相应要更新显示的数据存入目标数据存储空间相应位置,以供后续缩放处理。
[0079] 将目标数据更新范围的数据写入到显存相应位置,设置输出时序,最后在显示器上显示。
[0080] 本发明实施例公开了一种基于UEFI接口的分辨率自适应缩放方法,用于提升显卡在多家系统BIOS和多家显示器的复杂组合条件下的显示成功率。本实施例所使用的缩放方法建立了两个数据空间(源数据存储空间和目标数据存储空间),源数据存储空间用于存放系统BIOS想要显示的数据;目标数据存储空间用于存放缩放后的显示数据。本发明实施例所使用的缩放方法是原图像和目标图像中心点对齐,局部拉升的线性缩放方法,该方法既能解决系统BIOS与显示器不匹配导致的不能显示问题又能避免一般缩放方法延迟大、图像局部更新拼接不全的问题。
[0081] 实施例二:
[0082] 图2示出了本发明实施例提供的显卡驱动模块的结构,为了便于说明仅示出了与本发明实施例相关的部分。
[0083] 如图2所示,本实施例提供的显卡驱动模块包括:
[0084] 数据获取单元1,用于读取显示器的EDID,如果没有有效的EDID则使用默认VESA时序输出,否则解析EDID,获取显示器支持的所有分辨率和时序,并传递给系统BIOS;
[0085] 输出显示单元2,用于当系统BIOS使用与接收到分辨率相符合的分辨率时,使用该分辨率和对应的时序进行显示器输出显示;
[0086] 目标选择单元3,用于当系统BIOS使用与接收到分辨率不相符合的分辨率时,选择显卡和显示器都支持的最大分辨率以及对应的时序作为缩放的目标分辨率;
[0087] 缩放显示单元4,用于计算缩放参数,使用预设的缩放方式将源数据存储空间的数据缩放到目标数据存储空间,并将目标数据空间更新的数据写入到显存相应位置进行显示。
[0088] 本实施例提供的显卡驱动模块对应实现了实施例一中的步骤S1‑S4,具体的,首先通过数据获取单元读取和解析显示器的EDID,如果没有EDID则使用默认VESA时序输出,如果有EDID,则获取显示器支持的所有分辨率和时序;然后如果系统BIOS使用与显卡驱动接收到分辨率相符合的分辨率,则输出显示单元直接使用该分辨率和对应的时序进行显示器输出显示;如果不相符合,则目标选择单元确定显卡和显示器都支持的最大分辨率作为目标分辨率。最后缩放显示单元系统BIOS使用的源分辨率和所述目标分辨率计算缩放参数,并按照预设缩放方式进行数据缩放处理,最后进行显示。
[0089] 其中,所述目标选择单元具体包括:
[0090] 源分辨率设置模块,用于根据系统BIOS使用的分辨率作为自适应缩放的源分辨率;
[0091] 目标分辨率设置模块,用于根据显卡和显示器都支持的最大分辨率和对应的时序作为自适应缩放的目标分辨率;
[0092] 缩放参数计算模块,用于根据源分辨率和目标分辨率计算缩放参数。
[0093] 其中,所述缩放显示单元具体包括:
[0094] 存储空间建立模块,用于建立源数据存储空间和目标数据存储空间,其中所述源数据存储空间用于记录系统BIOS的显示数据,所述目标数据存储空间用于记录缩放后的显示数据;
[0095] 缩放范围确定模块,用于根据系统BIOS的显示需求获取源数据存储空间指定更新范围的起始地址及大小,确定源数据缩放范围;
[0096] 更新范围确定模块,用于根据计算得到的缩放参数,对应转换成目标数据存储空间需要更新的起始地址及大小,确定目标数据更新范围;
[0097] 源数据确定模块,用于根据系统BIOS当前的显示模式,确定源数据存储空间中源数据缩放范围对应的数据;
[0098] 目标数据缩放模块,用于将源数据缩放范围内的数据,使用居中对齐局部缩放的线性缩放方式,更新至目标数据存储空间的目标数据更新范围;
[0099] 数据显示模块,用于将目标数据更新范围的数据写入到显存相应位置进行显示。
[0100] 本发明实施例公开了一种显卡驱动模块,用于提升显卡在多家系统BIOS和多家显示器的复杂组合条件下的显示成功率,通过自适应缩放方法消除了系统BIOS对显示器分辨率的依赖,系统BIOS可以使用显卡支持的任何分辨率,显卡驱动负责将显示数据原样或缩放后输出到显示器;显卡驱动首先解析的显示器EDID获取最佳分辨率和时序信息,若没有读取到EDID就使用预置的VESA标准分辨率和时序进行输出,若有EDID就按照通过解析EDID获得的分辨率和时序进行缩放显示。
[0101] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。