窗口空闲帧存储器压缩 【技术领域】
本发明一般地涉及图形控制器。更具体地,本发明涉及在图形控制器中对帧的压缩。
背景技术
图形控制器将图形数据和指令转换为像素,并将像素存储在图形存储器或者系统存储器中,直到到了刷新显示设备上的图形的时候,这个时候从存储器中读取出像素并发送给显示设备。当产生图形的应用是空闲的时候,正在被显示的图形从一个刷新周期到下一个之间并不改变。但是,图形控制器对每个刷新周期都继续读取存储器中的相应的像素。其结果是,由于功率消耗与存储器读取带宽成比例,无论像素是用于空闲的图像还是活动的图像,从存储器读取像素所消耗的功率值都是一样的。
【附图说明】
图1是示出结合本发明实施例的图形控制器操作地示图;
图2是示出在本发明的一个实施例中使用的数据结构的示图;
图3是示出本发明的一个实施例所使用的编码模式的示图;
图4A是创建编码表的方法的流程图;
图4B~图4C是根据本发明的一个实施例用于编码和解码空闲帧的方法的流程图;
图5A是产生对图形控制器的空闲通知的逻辑的示图;
图5B是执行图4A的方法的一个实施例的逻辑的示图;
图6是在其中可以实现本发明的嵌入式图形和存储器芯片的一个实施例的示图;
图7是在其中可以实现本发明的计算机系统的一个实施例的示图。
【具体实施方式】
在以下对本发明实施例的详细描述中,参考了附图,其中,类似的标记指示相似的元素,并且其中是通过举例说明的方式示出本发明可以在其中被实现的特定实施例。这些实施例被充分详细地描述,以使得本领域的技术人员能够实现本发明,并且应当理解,也可以使用其他实施例,并且可以作出逻辑的、机械的、电的、功能的或者其他的变化,而不脱离本发明的范围。因此,以下的详细描述不应认为是限定的含意,并且本发明的范围只由所附权利要求来确定。
参考图1描述根据本发明一个实施例的压缩和解压缩空闲帧的计算机系统显示适配器100的操作。压缩操作将结合图2和图3被进一步详细地描述。与普通的插入式显示适配器一样,显示适配器100包括诸如微处理器的图形控制器101和图形存储器103。在其他实施例中,图形控制器101可以被嵌入在容纳中央处理单元的主板中,并且系统存储器可以被用作图形存储器103。
图1中所示的实施例中,显示驱动器105通知图形控制器101显示驱动器是空闲的,即,在显示设备113上的图像没有变化。当图形控制器101收到空闲通知时,它随后从显示驱动器105接收的全部帧都是空闲帧107,直到被通知显示驱动器105不再是空闲的。通常,一些像素值将在空闲帧中占主要地位。图形控制器101确定代表总共的空闲帧的预先确定的百分比的像素值,并压缩这些值。得到的被压缩的空闲帧被存储在图形存储器103中(由箭头109示出),结果降低了图形存储器103所消耗的功率。当需要刷新显示设备113上的图像的时候,图形控制器101从图形存储器103读出被压缩的空闲帧,并将其解压缩成由显示设备113显示的完整的帧111。
在图1中所示的另一实施例中,当图形控制器101从显示驱动器105收到重载指示符(override indicator)的时候,它还可以压缩非空闲帧115。当应用程序知道在帧之间的变化很小的时候,例如,只有光标闪烁或者时钟被更新的时候,重载指示符在显示驱动器105中被设置在应用程序级别(application level)。虽然下面的图形控制器101的操作的细节是按照空闲帧而描述的,但是当已经收到重载指示符的时候,图形控制器101可以用相同的方式处理非空闲帧。
图像的颜色深度越大,表示像素颜色所需要的位就越多。这里参考“真彩色”描述本发明,其中,每个像素由三个字节定义,每个字节表示红、蓝和绿色成份中的一个的值,这些成份定义了一个像素的颜色。因此,每个像素字节可以具有0~255的值。本领域的技术人员将立刻理解对于要求更少或者更多数量的位的颜色深度的本发明应用,并且本发明并不被其按照真彩色的描述所限定。还应当理解,本发明于不依赖于显示分辨率。
图形控制器101评价两个空闲帧,以确定哪些像素字节值是在空闲帧中占主要地位的,并从得到的结果创建编码查找表,如图2所示。一旦得到显示驱动器105空闲的通知,图形控制器101初始化第一组计数器200(计数器1-1 201、1-2 203...1-N 205),其中N取决于显示适配器的当前颜色深度。每个计数器200与可能的字节值的子集相关联,其中,集合中的值通常是数字序列,虽然本发明并不如此被限定。因而,举例来说,假设值的范围是从0到255,如果N是32,则每个计数器将对八个不同的字节值计数,例如0~7、8~15等。
当从显示驱动器105收到空闲帧的时候,图形控制器101评价各像素字节,以确定其值与哪个计数器相关联,并将适当的计数器更新一次。一旦帧中所有的像素字节都已经被评价过了,则图形控制器101选择具有最高计数值,即与在帧中出现最频繁的字节值相关联的X个计数器(由箭头207示出)。
图形控制器101初始化第二组计数器210(计数器2-1 211、2-2213...2-M 215),以确定在最高的X个计数器中哪些字节值最频繁出现。每个计数器210只与一个字节值相关联。继续该示例,假设X等于4,则M等于32,即四个计数器乘以每个计数器的八个值。应当认识到,图形控制器101可以对计数器200和计数器210使用相同的结构。
一旦收到另一个空闲帧,图形控制器101评价像素字节,更新适当的计数器210,并确定最高的Z个计数器210是否满足阈值Y。如果满足,则图形控制器101对Z个字节值的每一个指定一个代码227,并在编码查找表220中创建包括代码227和相关联的字节值229的条目221、223、225(由箭头217示出)。从而,举例来说,只有当最高四个(Z)值代表了在空闲帧中出现的全部不同的值的至少75%(Y)时,图形控制器101才会压缩空闲帧。应当认识到,参数N、M、X和Z是对于显示适配器100的每个可用的颜色深度而预先确定的,而Y是全部字节值的预先确定的百分比,或者是其他对于某些字节值优势的其他度量。可以通过试验来确定参数N、M、X、Y和Z的各种值。
图形控制器101使用查找表220来压缩随后的空闲帧。在图3中所示的实施例中,假定图形存储器103的读/写块大小是128位,四种不同的压缩模式被用于压缩真彩色空闲帧。每个被压缩的像素字节用两位代码来表示。本领域的技术人员将立刻设想到使用其他的代码长度和指定代码值的各种算法的另外的实施例,并且这些另外的实施例被认为是在本发明的范围之内。
每个128位的块用两位的模式字段301、可变长度编码键303和可变长度数据字段305被编码。被压缩的和/或未被压缩的像素字节被存储在数据字段305中。编码键303中的每个位表示被存储的像素字节中的一个。0的位指示相应的像素字节是未被压缩的,1的位指示相应的像素字节是被压缩的。应当认识到,图3中所示的示例性的块编码并非用来限定本发明,本领域的技术人员将容易地设想到同样适用的并被认为是在本发明的范围之内的其他的编码方法。
各压缩模式被设计来将序列中被压缩的像素字节的不同范围进行编码。如果在15个的序列中少于4个像素字节可以被压缩,则使用模式0(00),在数据字段中的15个像素字节中没有一个被压缩,结果在块300的编码字段303中全部是零。表1指明了对于压缩模式1到3的每一个可以被存储在128位块中的被压缩和未被压缩的像素字节的各种组合(组态)。
表1 模式1(01)(数据104位;最大字 节22) 模式2(10)(数据96位;最大字节 30) 模式3(11)(数据99位;最大字节 38) 压缩 未压缩 压缩 未压缩 压缩 未压缩 4 12 13~16 8 25~28 4 5~8 11 17~20 7 29~32 3 9~12 10 21~24 6 33~36 2
应当认识到,对于一些组合,因为在数据字段中将存储比编码位更少的像素字节,所以在编码字段303中并非所有的编码位将被使用。因为模式字段301指示了数据字段305的长度,所以在解压缩过程中,即使一些编码位还没有被处理,图形控制器101也将识别出已经从数据字段305解析了全部的像素字节。类似地,对于一些组合,数据字段305的至少1到7个位可以不被使用,并且相应的编码位设置为零,但是图形控制器101将识别出未被使用的字节不代表未被压缩的像素字节,所述未被压缩的像素字节要求8个位。
接着,参考图4A~图4C中的流程图,描述用于由图形控制器执行上面所描述的本发明实施例的操作的具体方法,其中,可执行指令分别由框401至431、框441至471和框481至499来表示。参考流程图描述这些方法使得本领域的技术人员能够开发这样的指令,以在诸如图形控制器101的被适当配置的处理器中执行这些方法。可执行指令可以用计算机程序语言编写,或者可以嵌入在固件逻辑中。另外,在本领域中将可执行指令说成进行一个动作或者引起一个结果是普遍的。这样的表述仅仅是对叙述指令被处理器的执行使得处理进行一个动作或者产生一个结果的简略说法。
首先参考图4A,描述了要被图形控制器执行的动作,其执行创建编码查找表220的两阶段(pass)建立方法400。当图形控制器从显示驱动器收到空闲或者重载通知的时候,调用建立方法400。建立方法400初始化像素值计数器(框401),并等待接收第一空闲帧(框403)。对于该空闲帧中的每个像素字节,方法400通过确定(框407)和递增(框409)适当的阶段一计数器来进行阶段一。一旦该空闲帧中的全部像素字节都已经在阶段一中被评价了,则建立方法400选择最高的X个阶段一计数器(框413),并初始化阶段二计数器(框415)。当方法400接收到另一个空闲帧(框417)的时候,该方法通过确定与各像素字节相关联的,如果有的话,是哪个计数器(框421),并且如果该字节值要被计数的话,则递增适当的阶段二计数器(框423),从而进行阶段二。
一旦第二空闲帧在阶段二中已经被评价过了,则建立方法400确定最高的Z个阶段二计数器(框427),并确定最高的Z个像素值的百分比是否大于阈值Y(框429)。如果是的话,则在框431创建查找表。否则,空闲帧将不被压缩。
图4B示出使用由方法400所创建的查找表以在输入的空闲帧被存储在图形存储器中之前对它们进行压缩的压缩方法440。在框441,帧中的每个像素字节被检查,以确定其值是否出现在查找表中(框443)。如果是的话,表中的相应的代码被存储在被编码的块的数据字段中(框445),相应的编码位被设置为1(框447),并且压缩计数器被递增(框449)。如果像素字节将不被压缩,则字节值被存储在数据字段中(框451),相应的编码位如果还不是零的话则被设置为零(框453,用虚线表示),并且未压缩计数器被递增(框455)。
在框457,压缩方法440确定当前未被压缩的和被压缩的像素字节组合是否与模式组态相匹配。如果是的话,则块的模式字段、编码字段和数据字段被完成(框459),并且所得到的被编码的块被写入存储器中(框461)。如果还有另外的像素要被评价(框463),则压缩方法440返回框441。当空闲帧中全部的像素都已经被存储在图形存储器中,则压缩方法440终止。
假设在框457,当前的组合与模式组态不匹配,则压缩方法440确定是否还有另外的像素要被评价(框465)。如果没有,则被编码的块将被存储为未被压缩的模式0,因而数据字段中的全部存在的代码都被它们的值取代,以解压缩像素字节(框467),模式字段和编码字段被设置成零(框469),并且所得到的被编码的块被写入存储器(框471)。
图4C示出对应于图4B的压缩方法480的解压缩方法480。当图形控制器收到刷新显示器屏幕的命令时,它从存储器将空闲屏幕读出为一组被编码的块(框481)。检查被编码的块的模式字段,以确定块的压缩模式。如果模式是0(框483),则被编码的块的数据字段中的像素字节是未被压缩的并在框485处被输出。如果模式不是0,则方法480基于模式确定编码键的长度(框489),并开始由框491到499所表示的解码块处理。读出编码键中的每个位以确定相应的像素字节是否是被压缩的(框493)。如果是的话,则从数据字段读出两位的代码,并且查找表中相应的值被存储在缓冲器中(框495)。否则,直接从数据字段读出值,并存储在缓冲器中(框497)。当已经从数据字段解析出全部数据的时候,在框485,缓冲器被输出。如果对于帧的全部的被编码的块都已经被处理了(框487),则解压缩方法480终止。
图5A和图5B是执行本发明的操作的逻辑的示例。如果若干系统部件中的至少一个是空闲的,则图5A中所示的逻辑实施例产生对图形控制器102的空闲通知515。逻辑500接收命令流(CS)空闲信号501、存储器接口(MI)空闲信号503、像素流水线(Pix)空闲信号505和文本流水线(Tex)507。通过从相应的掩码509输出一个1,在产生空闲通知515中,逻辑500可以选择仅使用空闲信号中的一个子集。掩码509的输出和被反相的空闲信号被输入到一组与非门511。从全部NAND门511的输出被输入到与门513。当空闲通知515是零的时候,图形控制器101得知至少一个所选的系统部件是空闲的,并继续进行上面所描述的空闲帧压缩。
在一个实施例中,使用在图5B中所示的逻辑确定要被压缩的字节值。输入的帧中的每个像素521被分离成其RGB字节523,并且每个字节的值被输入到一组N个比较器527,其中,所述字节的值被与一组字节值范围525相比较,以确定一组N个累加器529中的哪一个与它的值相关联。来自累加器529的计数被送给统计寄存器531。一旦当前帧中所有的像素字节都已经被累加器529计数了,则统计寄存器531确定最高的X个累加器529,并使对于最高的X个累加器的标识符被保持在X个比较器529中。如果当前帧是第一个空闲帧,则与最高的X个累加器相关联的字节值被用作对于第二个空闲帧的范围525。如果当前帧是第二个空闲帧,则在比较器529中所保持的标识符对应最高的X个字节值,这些值随后被存储在一组X个寄存器535中,并输出537以建立编码查找表。
下面对图6和图7的描述是用来提供计算机硬件配置的概述,在其中可以实现本发明的实施例,但是它并非是用来限定适用的环境。
图6示出嵌入式图形和存储器芯片601,包括图形控制器603和存储器接口605。芯片601通过系统总线609耦合到处理器607。存储器接口605耦合到系统存储器611以对图形控制器603和处理器607两者提供存储器访问。图形芯片601结合了本发明的空闲帧压缩,以在系统存储器中压缩和存储空闲帧,并读取和解压缩这些空闲帧用于在显示设备613上的显示。
图7示出传统计算机系统的一个示例,包括处理器701和通过系统总线723耦合到处理器705的存储器709。存储器709可以是动态随机存取存储器(DRAM),还可以包括静态RAM(SRAM)。桥725将系统总线723耦合到输入/输出(I/O)总线707,其进一步将结合了本发明的非嵌入式显示控制器711、非易失性存储装置715和I/O控制器717耦合到处理单元705。调制解调器或者其他网络接口703也可以被耦合到I/O总线707,以将计算机系统701连接到网络721。显示控制器711以传统的方式控制在显示设备713上的显示,该显示设备713可以是阴极射线管(CRT)或者液晶显示器。输入/输出设备719可以包括键盘、磁盘驱动器、打印机、扫描仪和其他的输入和输出设备,包括鼠标或者其他的点选设备。显示控制器711和I/O控制器717可以用传统的公知的技术实现。输入/输出设备719还可以包括诸如数码照相机的数字图像输入设备,其被耦合到I/O控制器717以便允许来自数字图像输入设备的图像被输入到计算机系统701中。非易失性存储装置715经常是磁硬盘、光盘或者对于大量数据的其他形式的存储器。在执行计算机系统701中的软件的过程中,这些数据中的某些经常是通过直接存储器访问处理而被写入存储器709。
本领域的技术人员将立刻认识到,术语“计算机可读介质”包括可被处理器705访问的任何类型的存储设备,并且还包括含有数据信号的载波。
应当认识到,计算机系统701是具有不同体系结构的许多可能的计算机系统中的一个示例。除了图形控制器,用于本发明的典型的计算机系统通常将至少包括处理器、存储器以及将存储器与处理器相耦合的总线。
在图形控制器中对空闲帧的压缩已经被描述了。虽然这里已经示出和描述了特定的实施例,但是本领域的一般技术人员应当认识到,适合用于获得相同目的的任何安排可以取代所示的特定的实施例。本申请意于覆盖本发明的任何适用或者变化方案。