在处理器中减小纹理延迟的方法及装置制造方法

文档序号:6544645阅读:268来源:国知局
在处理器中减小纹理延迟的方法及装置制造方法
【专利摘要】本发明涉及一种在处理器中减小纹理延迟的方法,包括如下步骤:缓存像素数据,得到像素块;以所述像素块为单位,对所述缓存的像素数据进行像素渲染;发出纹理请求,以所述像素块为单位将其送入纹理单元进行处理;像素渲染线程进入休眠状态,让出渲染流水线;纹理单元对送入的像素块进行处理,完成后返回数据;唤醒休眠的像素渲染线程,在空闲的渲染流水线上继续运行。本发明还涉及一种实现上述方法的装置。实施本发明的在处理器中减小纹理延迟的方法及装置,具有以下有益效果:系统开销较少,其纹理延迟较小。
【专利说明】在处理器中减小纹理延迟的方法及装置【技术领域】
[0001]本发明涉及处理器,更具体地说,涉及一种在处理器中减小纹理延迟的方法及装置。
【背景技术】
[0002]通常,在图形处理器中,对图像数据进行处理时都会涉及到对图像的像素进行渲染处理。一般来讲,像素的渲染处理是在对图像数据进行光栅化处理之后进行的,在对像素进行渲染时,由软件构成的像素渲染线程和由硬件构成的渲染流水线相互配合,实现对像素的渲染。在这个过程中,可能需要对被渲染的像素进行纹理处理。这样就需要发出纹理请求,并将数据传输到纹理单元进行处理。纹理单元是一个专门用于对数据进行纹理处理的硬件装置。在现有技术中,上述渲染和纹理处理时都是以一个像素为目标进行的。这在现有的图形处理器中并没有太大的问题。因为图形处理器的结构本身就是为了实现这样的目的而设计的。其具有较多的渲染流水线,执行较为简单、重复的工作。同时,现有的图形处理器实现一个线程的开销也较小。此外,现有图形处理器拥有更多的渲染线程,每条渲染流水线对应多个渲染线程。这样,在传统的图像处理器(GPU)中,只要渲染线程和渲染流水线的数量足够多,特别是渲染线程和渲染流水线的数量比例足够大,就能通过多个渲染线程共用一个渲染流水线的方式,使得某一渲染线程在等待纹理数据时,其它渲染线程能够利用这条空闲的渲染流水线,使得渲染流水线能够充分利用起来,从而有效地消隐纹理延迟。但是,对于渲染流水线的数量不多的处理器(可能是GPU或CPU)或融合处理器(UPU,一种具有多个硬件内核、不区分传统的CPU和GPU线程的处理器)而言,当其执行图形处理线程时,现有的在图形处理器中的方法就不是很好,这是由于其结构中只有较少的渲染流水线和较少的渲染线程,渲染线程和渲染流水线的数量比例不大,使得其执行纹理处理时的纹理延迟不能被完全消隐。在图像处理器的渲染线程对纹理单元发送纹理请求是无序的,若纹理单元也无序地处理纹理请求,则有可能造成纹理缓存数据频繁地切换,增加了不必要的缓存缺失,降低了纹理缓存的命中率,使得纹理延迟变大。为此,在现有的图像处理器中,为了减少不必要的缓存数据切换,提高命中率,减小纹理延时,纹理单元通常会根据纹理坐标对纹理请求进行排序,对纹理坐标进行排序通常要较复杂的逻辑,花费较多的硬件资源。

【发明内容】

[0003]本发明要解决的技术问题在于,针对现有技术的上述系统开销较大、纹理延迟较大的缺陷,提供一种系统开销较小、纹理延迟较小的在处理器中减小纹理延迟的方法及装
置。
[0004]本发明解决其技术问题所采用的技术方案是:构造一种在处理器中减小纹理延迟的方法,包括如下步骤:
A)在像素数据被进行图元光栅化处理且输出后,按照设定的顺序对其进行缓存;在缓存时,将多个像素一起存放,得到像素块; B)以所述像素块为单位,对所述缓存的像素数据进行像素渲染;
C)像素渲染时,如果像素渲染线程发出纹理请求,则以所述像素块为单位将其送入纹理单元进行处理;同时,像素渲染线程进入休眠状态,让出渲染流水线;
D)纹理单元对送入的像素块进行处理,完成后返回数据;
E)唤醒休眠的像素渲染线程,在空闲的渲染流水线上继续运行。
更进一步地,对所述像素数据的光栅化处理按照其图元的先后顺序依次进行,所述缓存按照输出的被光栅化处理数据的先后依次进行;一个图元的像素数据缓存为一个像素块;所述像素块内的像素则按照其在图元中的空间位置排序依次缓存。
[0005]更进一步地,一个所述像素块的像素数据都来自于同一个图元,像素块之间具有先后顺序;每个所述像素块都设置有一个用于其先后顺序的序号;所述像素块内的像素在所述缓存中存放地址的大小与该像素在图元中的空间位置排序相对应。
[0006]更进一步地,所述步骤C)中,所述渲染线程取得一个像素块中所有像素的坐标并将其在一个纹理请求中同时发送到所述纹理单元。
[0007]更进一步地,步骤D)中纹理处理单元按照输入像素块的序号或输入顺序依次对像素块进行纹理处理;所述步骤D)还进一步包括:
Dl)所述纹理单元依次选取像素块内的像素,读取所选中像素的坐标进行纹理处理,所述像素块中像素的个数在渲染线程向纹理单元发起纹理请求时指定;
D2)所述纹理处理单元处理像素时,如果该像素的纹理坐标在纹理处理单元的缓存中命中,则该像素的纹理数据从纹理缓存中读出,立即输出到渲染线程所指定的存储位置,所述的存储位置在渲染线程向纹理单元发起纹理请求时指定;如果该像素的纹理坐标在纹理处理单元的缓存中不命中,则该像素的纹理请求会进入一个队列等待;
D3)所述纹理单元从外部存储器装载纹理数据到纹理缓存中,并把纹理数据输出到渲染线程所指定的存储位置;
D4)判断是否遍历一个像素块中所有像素,如是,执行下一步骤;否则,返回步骤Dl)并处理所述像素块中的下一个像素;
D5)当一个所述像素块内的所有像素都处理完毕,所有像素的纹理数据都输出到渲染线程所指定的位置时,所述纹理处理单元向线程控制器发出唤醒所述像素渲染线程的控制信号。
[0008]更进一步地,所述步骤B)中,一次将所述缓存中的一个像素块分配到所述像素渲染线程进行渲染;在缓存中所有像素块均完成像素渲染前阶段的处理后,执行步骤C)。
[0009]本发明还涉及一种实现上述方法的装置,包括:
缓存单元:用于在像素数据被进行图元光栅化处理且输出后,按照设定的顺序对其进行缓存;在缓存时,将多个像素一起存放,得到像素块;
渲染单元:用于以所述像素块为单位,对所述缓存的像素数据进行像素渲染;
纹理请求单元:用于在像素渲染时,如果像素渲染线程发出纹理请求,则以所述像素块为单位将其送入纹理单元进行处理;同时,像素渲染线程进入休眠状态,让出渲染流水线;纹理处理单元:用于在纹理单元对送入的像素块进行处理,完成后返回数据;
唤醒单元:用于唤醒休眠的像素渲染线程,在空闲的渲染流水线上继续运行。
[0010]更进一步地,对所述像素数据的光栅化处理按照其图元的先后顺序依次进行,所述缓存按照输出的被光栅化处理数据的先后依次进行;一个图元的像素数据缓存为一个像素块;所述像素块内的像素则按照其在图元中的空间位置排序依次缓存。
[0011]更进一步地,所述纹理处理单元中进一步包括:
像素选择模块:用于依次选取像素块内的像素,读取所选中像素的坐标进行纹理处理,所述像素块中像素的个数在渲染线程向纹理单元发起纹理请求时指定;
纹理坐标查找模块:用于在所述纹理处理单元处理像素时,如果该像素的纹理坐标在纹理处理单元的缓存中命中,则该像素的纹理数据从纹理缓存中读出,立即输出到渲染线程所指定的存储位置,所述的存储位置在渲染线程向纹理单元发起纹理请求时指定;如果该像素的纹理坐标在纹理处理单元的缓存中不命中,则该像素的纹理请求会进入一个队列等待;
纹理数据装载模块:用于从外部存储器装载纹理数据到纹理缓存中,并把纹理数据输出到渲染线程所指定的存储位置;
像素判断模块:用于判断是否遍历一个像素块中所有像素,如是,调用输出模块;否贝U,返回所述像素选择模块并处理所述像素块中的下一个像素;
输出模块:用于向渲染线程所指定的位置输出纹理数据;同时根据像素判断模块所发送的像素块已完成的信号,以及等待队列中是否有所述像素块的像素在等待,判断是否像素块所有像素的纹理数据都已输出,如是,向线程控制器发出唤醒所述像素渲染线程的控制信号。
[0012]更进一步地,所述渲染单元一次将所述缓存中的一个像素块分配到所述像素渲染线程进行渲染;在缓存中所有像素块均完成像素渲染前阶段的处理后,调用所述纹理处理单元。
[0013]实施本发明的在处理器中减小纹理延迟的方法及装置,具有以下有益效果:由于在现有的处理器中,其渲染及纹理处理是针对单个像素进行的,其产生的渲染线程众多,带来较大的系统开销;同时,由于融合处理器并不能像传统的图形处理器一样具有众多的渲染流水线和渲染线程,渲染线程和渲染流水线的数量比例不够大,使得在像素渲染时产生的纹理延迟较大。而在本发明中采取将像素数据缓存并形成像素块的方法,同时在渲染和进行纹理处理时也是以像素块为单位进行的,这使得其产生的渲染线程较少,也就是系统开销较少,同时,降低渲染线程和渲染流水线的比例,即降低了对渲染流水线数量的要求,使得其纹理延迟较小。同时,像素是按一定的顺序组织成像素块的,纹理单元可以很容易地利用这个顺序对纹理请求进行排序,以提高纹理缓存命中率,减小纹理延迟。
【专利附图】

【附图说明】
[0014]图1是本发明在处理器中减小纹理延迟的方法及装置实施例中其方法的流程图; 图2是所述实施例中装置的结构示意图。
【具体实施方式】
[0015]下面将结合附图对本发明实施例作进一步说明。
[0016]如图1所示,在本发明在处理器中减小纹理延迟的方法及装置实施例中,该方法包括如下步骤: 步骤Sll缓存光栅化处理输出的数据,得到像素块:在本步骤中,图形的像素数据正在由光栅化单元对图元光栅化产生,将要被进行像素渲染及其后续步骤的处理,例如光栅操作等。在进行像素渲染时,可能需要对这些像素数据进行纹理处理。在本实施例中,由于现有技术中使用的方法存在需要数量较多的渲染流水线和渲染线程,及较高的渲染线程和渲染流水线的数量比例,从而导致其芯片面积较大的缺陷;而在融合处理器中,不可能提供这样的芯片面积用于渲染,也就是不可能存在如此多的渲染流水线和渲染线程,特别是不可能存在很高的渲染线程和渲染流水线的数量比例,从而导致其处理像素渲染时出现较大的纹理延迟的情况。为此,在本步骤中,采用在光栅化单元和渲染流水线之间设置缓存,并在数据缓冲时将这些由当单个像素构成的数据以一定的顺序按照数据块的方式存储,即将设定个数的像素存储在一起,作为一个像素块,在后面的渲染、纹理处理时,针对这些像素块产生软件线程,并占用流水线使得这些产生的软件线程运行。在本实施例中,有别与传统的像素渲染的是,其以上述形成的像素块为单元,渲染线程一次对一个像素块中的全部像素进行像素渲染。在本实施例中,上述像素块中包括的最多的像素个数可以是事先设定的,设定后处理器就一直按照这个设定的数值构建像素块,例如,8个、16个、32个或64个;此外,在本实施例中,也不是任何像素组合在一起就得到像素块的,在本实施例中,一个像素块中的像素是具有某种共性的,例如,一个像素块中的像素来自同一图元且是其空间位置相邻的像素,又如,像素及像素块之间是有先后顺序的,在后续步骤光栅操作处理中,必须按这个顺序进行,后续步骤可以丢弃某个像素,但不能把前后两个像素倒换。其具体的选择方法是:像素块是指在屏幕上坐标相邻的一块像素,如4行4列的一块,当设定块大小后屏幕就被划分为众多的小块;图元光栅化按图元的顺序进行,一个图元内的像素也具有一定的顺序,如按屏幕坐标从上到下,从左到右等等;把图元光栅化产生的坐标在预设的一个屏幕区域块大小内的像素缓存在一起,形成一个像素块;为每个像素块产生一个序号用于标明其顺序,像素块内像素间的顺序由其存放位置所决定;光栅化是按照图元顺序进行的,因此像素的缓存也是缓存完了一个图元的所有像素再缓存下一个图元的像素,不同图元的像素不能缓存在同一像素块中。
[0017]步骤S12以像素块为单位生成渲染线程,进行渲染:在本步骤中,以上述得到的一个像素块为单元,生成渲染线程,对该像素块中的像素进行渲染。在本实施例中,渲染线程的生成,以及其与渲染流水线之间的配合(例如,等待空闲的渲染流水线)等等与现有技术中并没有太大的区别,其主要的区别在于,该线程不是基于一个像素而产生的,相反,该像素是基于一个上述数据块而产生的,其处理的也不是一个像素数据,其处理的是多个(即设定数量个)像素数据。为了实现处理多个像素的目的,像素渲染程序必须作出相应调整。在现有技术中,像素渲染程序都是针对于单个像素的,如得到一个像素的坐标,发送这个像素的纹理请求,等待纹理数据返回后继续渲染这个像素,这个像素渲染完毕后再获取下一个像素进行渲染。而在本实施例中,像素渲染程序可以以纹理请求为界分成多个阶段(例如,以纹理请求为分界点将其划分为前阶段和后阶段),渲染线程对像素块内的每一个像素执行完一个阶段的程序,再为像素块的所有像素一起发送一次纹理请求,待像素块所有像素的纹理数据返回时继续执行下一个阶段的程序。当然,也有可能在渲染线程中存在多次渲染线程的需求,若渲染程序中每个像素有多个纹理请求则反复上述步骤,直至完成所有像素渲染过程。[0018]步骤S13有纹理处理时,以像素块为单位发送到纹理单元;休眠渲染线程:在本步骤中,由于并不是每个渲染线程都会进行纹理处理的,因此,当上述渲染线程对上述数据块中的像素进行渲染时,需要判断是否需要进行像素的纹理处理,如果需要,则像素渲染线程发出纹理请求,以所述像素块为单位将其送入纹理单元进行处理;同时,像素渲染线程进入休眠状态,让出渲染流水线。如果不需要做纹理处理,则直接进行像素渲染,并在完成后输出经过渲染的数据进行下一步的处理。值得一提的是,在本步骤中,如果进行纹理处理,也是将像素块整体传输到纹理单元进行处理的。正如现有技术中一样,像素的纹理处理首先涉及其纹理坐标,像素的纹理坐标可以由图元顶点纹理数据计算产生,由图元光栅化单元或像素渲染线程做这个计算,并无限制;像素的纹理坐标也可以由像素渲染程序计算产生。当本步骤中有纹理处理时,渲染器(即渲染线程和渲染流水线的组合)将该像素块中的所有像素的纹理请求命令数据包计算好,所述纹理请求命令数据包包括像素纹理坐标、多层次细节、纹理通道、像素块序号、像素个数、返回纹理数据的存放地址等,由于像素块内的像素都来自同一个图元,因此像素块内的像素拥有一些共同的数据,如多层次细节、纹理通道,这些共同的数据在命令数据包中只需记录一遍,由块内所有数据共用,像素纹理坐标在所述命令数据包内的存放顺序是顺序在前的像素的纹理坐标存放在前面。然后所述渲染器将包含所有像素的纹理请求的所述纹理请求命令数据包一次发给纹理单元。当上述渲染线程进入休眠时,其占用的流水线被释放,处于空闲状态。这样,线程控制器就能够对其进行调度,用于其他软件线程的运行。
[0019]步骤S14对像素块进行纹理处理:在本实施例中,纹理单元能够根据像素块的序号对像素块进行排序,并按顺序处理;处理时,纹理单元解析纹理请求命令数据包,得到每个像素的纹理坐标及其它数据,判断该纹理坐标是否在纹理缓存中命中,若命中则把纹理数据输出到渲染程序所指定的位置,否则等待纹理缓存从外部存储器装载数据;纹理缓存根据像素块的序号,再次对缓存缺失的像素排序,按顺序从外部存储器装载纹理数据;等待纹理数据从外部存储器装载回来后,把等待的像素的纹理数据输出到渲染线程所指定的位置。在本步骤中,纹理单元的结构与现有技术的不同之处在于:对命令数据包进行解析,通过S13和S14的命令数据打包-解析的操作,减少像素渲染线程和纹理单元之间的数据传输;纹理单元在选择像素块进行处理及纹理缓存处理缓存缺失的像素时,均可根据像素块的序号对像素块或像素进行排序,现有技术虽然也可能对纹理请求进行排序,但是根据纹理坐标进行排序,实现起来复杂,本步骤利用像素块序号进行排序简单易行,系统资源消耗较小。在本步骤中,除上述与现有技术不同之处外,纹理单元的其它部分均与现有技术相同,像素从命令包解析出来后,也是逐个输入到纹理单元进行处理的;纹理单元判断像素的纹理坐标是否缓存命中,是则读取缓存输出纹理数据,否则等待纹理缓存处理缓存缺失;纹理缓存根据纹理坐标从外部存储器装载纹理数据;判断是否遍历像素块中的所有像素,是则向线程控制器发出唤醒所述像素渲染线程的控制信号;否则继续解析命令数据包处理块中的下一个像素,所述下一个像素即为按照存位置顺序,下一个位置所存放的像素;一个像素块处理完后返回本步骤开头处理下一个像素块。
[0020]步骤S15唤醒休眠的渲染线程并输出经过纹理处理的数据:在本章步骤中,由于本次纹理处理已经完成,所以,可以将处于休眠状态的该渲染线程唤醒,使其进入等待线程的队列中,一旦有空闲的流水线,则线程控制器就会将该空闲的渲染流水线分配给上述被唤醒且等待的渲染线程;当渲染线程在渲染流水线上重新运行起来后,渲染线程就可以读取纹理单元输出的纹理数据继续进行像素渲染。在本实施例中,该渲染线程的唤醒是通过纹理单元发送到线程控制器的一个控制信号而实现的。这样,该线程控制器就能够得知纹理单元已经完成处理,从而发出信号唤醒处于休眠状态的渲染线程。此外,在本实施例中,如果一个渲染线程最后完成了对一个像素块的处理而输出数据,其输出的数据将被输送到光栅操作单元去进行下一步的处理。
[0021]在现有技术中,图形处理器都用多个渲染线程共享一个渲染流水线的方法来消除纹理延迟,以2个渲染线程共享I个渲染流水线为例,当渲染线程I等待纹理数据的时候,渲染线程2可以利用渲染线程I所释放的渲染流水线,使得渲染流水线不会空闲,当渲染线程2也发起纹理请求等待纹理数据的时候,渲染线程I的纹理数据已经返回,渲染线程I就可以重新利用渲染线程2所释放的渲染流水线,因此,渲染流水线一直都不会空闲,在其看来纹理请求就好像没有延时一样。但是,如果像素渲染程序在渲染流水线上的执行时间为t,且每个像素只发起一次纹理请求,则上述2个渲染线程共享I个渲染流水线的例子只能隐藏住大小为t的纹理延时,如果纹理延迟大于t,则渲染流水线就会有空闲的时间。随着集成电路设计及制造技术的不断发展,渲染流水线的频率不断提升,而外部存储器的速度却提升得没那么快,因此,相对而言,在渲染流水线看来纹理延迟变大了。现有技术中,解决这个问题的办法是提高渲染线程和渲染流水线数量的比例,如8个渲染线程共享I个渲染流水线,则可以隐藏住大小为7t的纹理延时。而如果采用本实施例中的方法及装置,假设像素块的大小设置为8,2个渲染线程共享I个渲染流水线,在渲染的过程中,渲染线程I要连续运行8t的时间才发起下一个纹理请求,然后退出去等待,渲染线程2进入渲染流水线后也是要连续运行8t的时间才发起下一个纹理请求,因此,渲染线程I发起纹理请求到渲染线程2发起纹理请求有8t的时间,纹理单元有8t的时间来处理像素块内8个像素的纹理请求,由于像素块内的像素在空间位置上具有相邻性,因此纹理单元从外部存储器装载一个纹理数据跟装载一个相邻的像素块的纹理数据所花的时间差不了多少,因此对于纹理单元来说,在8t的时间处理8个像素比It的时间处理I个像素要富裕很多。从渲染流水线的角度看,采用本实施例中的办法及装置,不需要渲染线程和渲染流水线数量上有很大的比例,就隐藏较大的纹理延迟,当纹理延迟全部被隐藏的时候,在渲染流水线看来效果就像纹理延迟为O —样,因此本实施例中的办法及装置能够有效减小纹理延迟。
[0022]值得一提的是,在本实施例中是以融合处理器(UPU)为例说明的,但是本实施例中的方法同样适于其他的处理器。
[0023]在本实施例中,还涉及一种实现上述方法的装置。如图2所示,该装置包括缓存单元1、渲染单元2、纹理请求单元3、纹理处理单元4和唤醒单元5 ;其中,缓存单元I用于在像素数据由图元光栅化产生之后,进行像素渲染之前,对其进行缓存;在缓存时,将多个像素一起存放,得到像素块;渲染单元2用于以所述像素块为单位,对所述缓存的像素数据进行像素渲染;纹理请求单元3用于在像素渲染时,如果像素渲染线程发出纹理请求,则以所述像素块为单位将其送入纹理单元进行处理;同时,像素渲染线程进入休眠状态,让出渲染流水线;纹理处理单元4用于在纹理单元对送入的像素块进行处理,完成后返回数据;唤醒单元5用于唤醒休眠的像素渲染线程,在空闲的渲染流水线上继续运行。
[0024]在本实施例中,在缓存单元I中,由于对所述像素数据的光栅化处理按照其图元的先后顺序依次进行,因此,其缓存按照输出的被光栅化处理数据的先后依次进行;一个图元的像素数据缓存为一个像素块;而一个像素块内的像素则按照其在图元中的空间位置排序依次缓存。上述纹理请求单元3取得一个像素块中所有像素的坐标并将其在一个纹理请求中发送到所述纹理单元。而上述的一个像素块中的像素是由同一图元光栅化产生且其空间位置相邻的像素;。渲染单元2 —次将缓存中的一个像素块发送到所述像素渲染线程进行渲染。此外,在本实施例中,渲染单元2—次将所述缓存中的一个像素块分配到像素渲染线程进行渲染;在缓存中所有像素块均完成像素渲染前阶段的处理后,调用纹理处理单元3对像素进行纹理处理(如果需要纹理处理的话),之后,唤醒处于休眠状态的渲染流水线,进行像素渲染的后阶段处理。同样地,如果在像素渲染时需要多次对数据进行纹理处理的话,则上述步骤将重复进行。也就是说,当像素渲染过程以纹理请求为界分为多个阶段,所述像素渲染线程对像素块内的所有像素都执行一遍一个阶段的程序,然后向纹理处理单元发送一次纹理请求,待纹理数据返回后,所述像素渲染线程再对块内的所有像素执行下一个阶段的程序。若所执行的像素渲染程序需要对一个像素发送多个纹理请求,则按上述步骤反复执行,直至完成所有像素渲染过程。
[0025]在本实施例中,为了实现对像素的逐个处理,上述纹理处理单元4中进一步包括像素选择模块41、纹理坐标查找模块42、纹理数据装载模块43、像素判断模块44和输出模块45。其中,像素选择模块41用于依次选取像素块内的像素,读取所选中像素的坐标进行纹理处理,所述像素块中像素的个数在渲染线程向纹理单元发起纹理请求时指定;纹理坐标查找模块42用于在所述纹理处理单元处理像素时,如果该像素的纹理坐标在纹理处理单元的缓存中命中,则该像素的纹理数据从纹理缓存中读出,立即输出到渲染线程所指定的存储位置,所述的存储位置在渲染线程向纹理单元发起纹理请求时指定;如果该像素的纹理坐标在纹理处理单元的缓存中不命中,则该像素的纹理请求会进入一个队列等待;纹理数据装载模块43用于从外部存储器装载纹理数据到纹理缓存中,并把纹理数据输出到渲染线程所指定的存储位置;像素判断模块44用于判断是否遍历一个像素块中所有像素,如是,调用输出模块;否则,返回所述像素选择模块并处理所述像素块中的下一个像素;输出模块45用于向渲染线程所指定的位置输出纹理数据;同时根据像素判断模块所发送的像素块已完成的信号,以及等待队列中是否有所述像素块的像素在等待,判断是否像素块所有像素的纹理数据都已输出,如是,向线程控制器发出唤醒所述像素渲染线程的控制信号。
[0026]总之,在本实施例中,上述各单元或模块相互配合,按照像素块序号所标明的顺序,或按照先到来先处理的顺序,选择一个像素块,然后在该像素块中按像素存放位置依次选择像素进行纹理处理;并判断所选中的像素坐标是否在纹理缓存中命中,如是,调用纹理缓存,读取该像素的纹理数据并交给输出模块;否则,把该像素交给或进入等待队列;同时判断是否遍历一个像素块中所有像素,如是,发送一个像素块已完成的信号给输出模块;否贝U,返回像素选择模块并处理所述像素块中的下一个像素;纹理数据装载模块43缓存从外部存储器中装载的纹理数据;当像素判断模块发现像素坐标在纹理缓存中命中时,纹理缓存把该像素的纹理数据输出给输出模块;当等待队列中有缓存缺失的像素在等待时,纹理缓存从外部存储器中装载纹理数据,当纹理缓存装载完一个具有一定大小的数据块时,通知等待队列正在等待的像素的纹理数据已在纹理缓存;等待队列接收缓存缺失的像素;当纹理数据装载模块43通知等待队列,正在等待的像素的纹理数据已在纹理缓存中时,等待队列调用纹理缓存,读取在队列中等待的像素的纹理数据并交给输出模块;输出模块45用于向渲染线程所指定的位置输出纹理数据;同时根据像素判断模块所发送的像素块已完成的信号,以及等待队列中是否有所述像素块的像素在等待,判断是否像素块所有像素的纹理数据都已输出,如是,向线程控制器发出唤醒所述像素渲染线程的控制信号。
[0027]值得一提的是,在本实施例中,上述装置中的单元和模块并不是物理意义上的,而是实现上述方法的软件指令集合。其可能存在与不同物理实体上。
[0028]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.一种在处理器中减小纹理延迟的方法,其特征在于,包括如下步骤: A)在像素数据被进行图元光栅化处理且输出后,按照设定的顺序对其进行缓存;在缓存时,将多个像素一起存放,得到像素块; B)以所述像素块为单位,对所述缓存的像素数据进行像素渲染; C)像素渲染时,如果像素渲染线程发出纹理请求,则以所述像素块为单位将其送入纹理单元进行处理;同时,像素渲染线程进入休眠状态,让出渲染流水线; D)纹理单元对送入的像素块进行处理,完成后返回数据; E)唤醒休眠的像素渲染线程,在空闲的渲染流水线上继续运行。
2.根据权利要求1所述的在处理器中减小纹理延迟的方法,其特征在于,对所述像素数据的光栅化处理按照其图元的先后顺序依次进行,所述缓存按照输出的被光栅化处理数据的先后依次进行;一个图元的像素数据缓存为一个像素块;所述像素块内的像素则按照其在图元中的空间位置排序依次缓存。
3.根据权利要求1所述的在融合处理器中减小纹理延迟的方法,其特征在于,一个所述像素块的像素数据都来自于同一个图元,像素块之间具有先后顺序;每个所述像素块都设置有一个用于其先后顺序的序号;所述像素块内的像素在所述缓存中存放地址的大小与该像素在图元中的空间位置排序相对应。
4.根据权利要求3所述的在融合处理器中减小纹理延迟的方法,其特征在于,所述步骤C)中,所述渲染线程取得一个像素块中所有像素的坐标并将其在一个纹理请求中同时发送到所述纹理单元。
5.根据权利要求4所述的在融合处理器中减小纹理延迟的方法,其特征在于,步骤D)中纹理处理单元按照输入像素块的序号或输入顺序依次对像素块进行纹理处理;所述步骤D)还进一步包括: Dl)所述纹理单元依次选取像素块内的像素,读取所选中像素的坐标进行纹理处理,所述像素块中像素的个数在渲染线程向纹理单元发起纹理请求时指定; D2)所述纹理处理单元处理像素时,如果该像素的纹理坐标在纹理处理单元的缓存中命中,则该像素的纹理数据从纹理缓存中读出,立即输出到渲染线程所指定的存储位置,所述的存储位置在渲染线程向纹理单元发起纹理请求时指定;如果该像素的纹理坐标在纹理处理单元的缓存中不命中,则该像素的纹理请求会进入一个队列等待; D3)所述纹理单元从外部存储器装载纹理数据到纹理缓存中,并把纹理数据输出到渲染线程所指定的存储位置; D4)判断是否遍历一个像素块中所有像素,如是,执行下一步骤;否则,返回步骤Dl)并处理所述像素块中的下一个像素; D5)当一个所述像素块内的所有像素都处理完毕,所有像素的纹理数据都输出到渲染线程所指定的位置时,所述纹理处理单元向线程控制器发出唤醒所述像素渲染线程的控制信号。
6.根据权利要求5所述的在融合处理器中减小纹理延迟的方法,其特征在于,所述步骤B)中,一次将所述缓存中的一个像素块分配到所述像素渲染线程进行渲染;在缓存中所有像素块均完成像素渲染前阶段的处理后,执行步骤C)。
7.一种实现如权利要求1所述在融合处理器中减小纹理延迟方法的装置,其特征在于,包括: 缓存单元:用于在像素数据被进行图元光栅化处理且输出后,按照设定的顺序对其进行缓存;在缓存时,将多个像素一起存放,得到像素块; 渲染单元:用于以所述像素块为单位,对所述缓存的像素数据进行像素渲染; 纹理请求单元:用于在像素渲染时,如果像素渲染线程发出纹理请求,则以所述像素块为单位将其送入纹理单元进行处理;同时,像素渲染线程进入休眠状态,让出渲染流水线;纹理处理单元:用于在纹理单元对送入的像素块进行处理,完成后返回数据; 唤醒单元:用于唤醒休眠的像素渲染线程,在空闲的渲染流水线上继续运行。
8.根据权利要求8所述的装置,其特征在于,对所述像素数据的光栅化处理按照其图元的先后顺序依次进行,所述缓存按照输出的被光栅化处理数据的先后依次进行;一个图元的像素数据缓存为一个像素块;所述像素块内的像素则按照其在图元中的空间位置排序依次缓存。
9.根据权利要求8所述的装置,其特征在于,所述纹理处理单元中进一步包括: 像素选择模块:用于依次选取像素块内的像素,读取所选中像素的坐标进行纹理处理,所述像素块中像素的个数在渲染线程向纹理单元发起纹理请求时指定; 纹理坐标查找模块:用于在所述纹理处理单元处理像素时,如果该像素的纹理坐标在纹理处理单元的缓存中命中 ,则该像素的纹理数据从纹理缓存中读出,立即输出到渲染线程所指定的存储位置,所述的存储位置在渲染线程向纹理单元发起纹理请求时指定;如果该像素的纹理坐标在纹理处理单元的缓存中不命中,则该像素的纹理请求会进入一个队列等待; 纹理数据装载模块:用于从外部存储器装载纹理数据到纹理缓存中,并把纹理数据输出到渲染线程所指定的存储位置; 像素判断模块:用于判断是否遍历一个像素块中所有像素,如是,调用输出模块;否贝U,返回所述像素选择模块并处理所述像素块中的下一个像素; 输出模块:用于向渲染线程所指定的位置输出纹理数据;同时根据像素判断模块所发送的像素块已完成的信号,以及等待队列中是否有所述像素块的像素在等待,判断是否像素块所有像素的纹理数据都已输出,如是,向线程控制器发出唤醒所述像素渲染线程的控制信号。
10.根据权利要求9所述的装置,其特征在于,所述渲染单元一次将所述缓存中的一个像素块分配到所述像素渲染线程进行渲染;在缓存中所有像素块均完成像素渲染前阶段的处理后,调用所述纹理处理单元。
【文档编号】G06F9/48GK103955407SQ201410166128
【公开日】2014年7月30日 申请日期:2014年4月24日 优先权日:2014年4月24日
【发明者】丘正前, 冀谦祥, 刘鑫, 李晶晶, 钟伟, 梅思行 申请人:深圳中微电科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1