一种不可见像素的剔除方法、装置及存储介质与流程

文档序号:28866478发布日期:2022-02-12 09:29阅读:114来源:国知局
一种不可见像素的剔除方法、装置及存储介质与流程

1.本发明实施例涉及图像处理技术领域,尤其涉及一种不可见像素的剔除方法、装置及存储介质。


背景技术:

2.一般来说,gpu是用于处理并显示计算机化的图形的专用图形再现装置。以高度并行的结构来建构gpu,所述结构针对一系列复杂算法提供比典型通用中央处理单元(cpu)更有效的处理。举例来说,所述复杂算法可对应于二维(2d)或三维(3d)计算机化的图形的表示。
3.但是在gpu针对图形进行再现的过程中,特别是在受到电力和系统带宽限制的条件下,通常会采用基于瓦片渲染(tbr,tile based rendering)方案。具体来说,每个渲染核(shader core)一次负责渲染一个瓦片 tile,每个 tile记录覆盖其自身的所有图元,这些图元组成的列表为图元列表。渲染核中的光栅化模块遍历图元列表,逐个对图元进行光栅化操作,然后将光栅化产生的片段(fragment)再交给片元着色器模块进行片元着色。
4.然而,上述光栅化产生的片段中存在最终不会显示(也就是不可见)的片段,而片元着色是很费时间和功耗的,也就是说,对上述最终不会显示的片段进行片元着色会浪费时间和功耗,如果能够将最终不会显示的片段在进行着色前就剔除,便可以提升gpu的渲染效率,同时减小功耗。


技术实现要素:

5.有鉴于此,本发明实施例期望提供了一种不可见像素的剔除方法、装置以及计算机存储介质;能够得到好的像素剔除效果并提高像素剔除的效率。
6.本发明实施例的技术方案是这样实现的:第一方面,本发明实施例提供了一种不可见像素的剔除装置,包括:至少一个渲染核以及至少一个光栅化模块;所述至少一个光栅化模块中的每一个光栅化模块,经配置为针对覆盖于当前待处理瓦片的所有图元中的每一个图元分别进行并行光栅化处理,获得每一个图元对应的片段;所述至少一个渲染核中的每一个渲染核,经配置为将所述所有图元的片段按照设定的坐标顺序输出需执行片段着色处理的片段,并在输出过程中基于片段的坐标值以及深度值从所述需执行片段着色处理的片段中剔除被遮挡片段。
7.第二方面,本发明实施例提供了一种不可见像素的剔除方法,包括:针对覆盖于当前待处理瓦片的所有图元中的每一个图元分别进行并行光栅化处理,获得每一个图元对应的片段;将所述所有图元的片段按照设定的坐标顺序输出需执行片段着色处理的片段,并在输出过程中基于片段的坐标值以及深度值从所述需执行片段着色处理的片段中剔除被
遮挡片段。
8.第三方面,本发明实施例提供了一种图形处理器gpu,包括:第一方面所述的不可见像素的剔除装置。
9.第四方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质存储有不可见像素的剔除的程序,所述不可见像素的剔除的程序被至少一个处理器执行时实现上述第二方面所述不可见像素的剔除方法的步骤。
10.本发明实施例提供了一种不可见像素的剔除方法、装置以及计算机存储介质,可以将对tile的图元列表的串行光栅化处理变为并行光栅化处理,同时,将光栅化模块的fifo队列中保存的片段的位置值由纵向比较变为横向比较,然后再对所述tile对应的所有图元的片段进行剔除处理,从而将片段比较的时机提前了,比较的次数变少了,并且每个片段都会被比较不会存在遗漏的情况,因此,对像素剔除效果更好并且效率更高。
附图说明
11.图1为能够实现本发明实施例技术方案的计算装置组成框图;图2为能够实现本发明实施例技术方案的gpu组成框图;图3为基于图2所示结构所形成的图形渲染管线示意图;图4为本发明实施例提供的一种示例性的任务调度示意图;图5为本发明实施例提供的另一种示例性的任务调度示意图;图6为本发明实施例提供的一种光栅化模块扫描图元的示例性的示意图;图7为本发明实施例提供的再一种示例性的任务调度示意图;图8为本发明实施例提供的一种不可见像素的剔除方法示意图。
具体实施方式
12.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地参见图1,其示出了能够实现本发明实施例技术方案的计算装置100,该计算装置100可以包含但不限于以下各项:无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(pda)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器等。在图1的实例中,计算装置100可以包括中央处理单元(cpu)102 和经由存储器桥105的互连路径进行通信的系统存储器104。存储器桥105 可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(hyper transport)链路)连接到i/o(输入/输出)桥107。i/o 桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标、轨迹球、能够作为组成部分并入显示设备110的触摸屏或其他类型的输入装置)接收用户输入并且经由通信路径106和存储器桥105将所述输入转发到cpu102。图形处理器(gpu)112经由总线或其他通信路径113(例如pci express、加速图形端口或超传输链路)耦合到存储器桥105;在一个实施例中,gpu112可以是将像素传递到显示设备110(例如传统的基于crt或lcd 的监视器)的图形子系统。系统盘114 也连接到i/o 桥107。开关116 提供i/o 桥107 与诸如网络适配器118 以及各种外插卡120 和121 的其他组件之间的连接。其他组件(未明确示出),包括usb 或其他端口连接、cd 驱动器、dvd 驱动器、胶片录制设备及类似组件,也可以
连接到i/o 桥107。使图1 中各种组件互连的通信路径可以使用任何适合的协议实现,诸如pci(外围组件互连)、pci-express、agp(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且不同设备间的连接可使用本领域已知的不同协议。
13.在一个实施例中,gpu112 包含经优化用于图形和视频处理的电路,包括例如视频输出电路。在另一个实施例中,gpu112 包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构。在又一个实施例中,可以将gpu112 与一个或多个其他系统元件集成起来,诸如存储器桥105、cpu102 以及i/o 桥107,以形成片上系统(soc)。
14.应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数量和布置、cpu102 的数量以及gpu112 的数量,可根据需要修改。例如,在一些实施例中,系统存储器104 直接连接到cpu102 而不是通过桥,并且其他设备经由存储器桥105 和cpu102 与系统存储器104 通信。在其他替代性拓扑中,gpu112 连接到i/o 桥107 或直接连接到cpu102,而不是连接到存储器桥105。而在其他实施例中,i/o 桥107 和存储器桥105 可能被集成到单个芯片上。大量实施例可以包括两个或两个以上的cpu102 以及两个或两个以上的gpu112。本文所示的特定组件是可选的;例如,任意数量的外插卡或外围设备都可能得到支持。在一些实施例中,开关116被去掉,网络适配器118 和外插卡120、121 直接连接到i/o 桥107。
15.基于图1所示的计算装置100,图2示出了可实现本发明实施例一个或多个技术方案的一种gpu112示意框图,在本发明实施例中,图形存储器204可为gpu112的一部分。因此,gpu112可在不使用总线的情况下从图形存储器204读取数据且将数据写入到图形存储器204。换句话说,gpu112可使用本地存储装置而不是芯片外存储器在本地处理数据。此类图形存储器204可被称作芯片上存储器。这允许gpu112通过消除gpu112经由总线读取和写入数据的需要来以更高效的方式操作,其中经由总线操作可经历繁重的总线业务。然而,在一些情况下,gpu112可不包含单独的存储器,而是经由总线利用系统存储器10。图形存储器204可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、快闪存储器、磁性数据媒体或光学存储媒体。
16.基于此,gpu112可以经配置以执行与下述相关的各种操作:经由存储器桥105和通信路径113从cpu102 和/ 或系统存储器104 所提供的图形数据生成像素数据,与本地图形存储器204(例如常用帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110 等等。
17.在操作中,cpu102 是计算装置100 的主处理器,控制和协调其他系统组件的操作。具体地,cpu102 发出控制gpu112的操作的命令。在一些实施例中,cpu102 为gpu112写入命令流到数据结构中(在图1或图2中未明确示出),所述数据结构可位于系统存储器104、图形存储器204、或cpu102 和gpu112都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以启动对数据结构中的命令流的处理。gpu112从一个或多个入栈缓冲区读取命令流,然后相对于cpu102 的操作异步地执行命令。可以为每个入栈缓冲区指定执行优先权以控制对不同入栈缓冲区的调度。
18.具体如图2中所述,gpu112包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到cpu102)的通信路径113与计算装置100的其余部分通信的i/o(输入/输
出)单元205。gpu112到计算装置100的其余部分的连接也可以变化。在一些实施例中,gpu112可作为外插卡来实现,所述外插卡可被插入到计算机系统100 的扩展槽中。在其他实施例中,gpu112可以和诸如存储器桥105 或i/o 桥107 的总线桥一起集成在单个芯片上。而在其他实施例中,gpu112的一些或所有元件可和cpu102一起集成在单个芯片上。
19.在一个实施例中,通信路径113可以是pci-express 链路,如本领域所知的,在pci-express 链路中专用通道被分配到gpu112。i/o 单元205 生成用于在通信路径113 上传输的数据包(或其他信号),并且还从通信路径113 接收所有传入的数据包(或其他信号),将传入的数据包引导到gpu112的适当组件。例如,可将与处理任务有关的命令引导到调度器207,而可将与存储器操作有关的命令(例如,对图形存储器204的读取或写入)引导到图形存储器204。
20.在gpu112中,可以包括多个渲染核,构成渲染核阵列230。进一步的,如图2所示,渲染核阵列230中可以包括c 个通用的渲染核208,其中c》1;以及d个固定功能渲染核209。可以理解地,图2中的括号内的数字表示通用渲染核208或固定功能渲染核209的标号。基于阵列230中的通用渲染核208,gpu112能够并发执行大量的程序任务或计算任务。举例来说,每个通用的渲染核均可被编程以能够执行与种类繁多的程序相关的处理任务,包括但不限于,线性与非线性数据变换,视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图形渲染操作(例如,曲面细分着色器、顶点着色器、几何着色器、和/或片元着色器程序)等等。
21.而固定功能渲染核209,其可包含经硬连线以执行某些功能的硬件。尽管固定功能硬件可经由例如一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些实例中,固定功能渲染核209可包含例如执行图元装配的处理单元、执行裁剪和划分操作的处理单元、执行光栅化操作的处理单元和执行片段操作的处理单元。对于执行图元装配的处理单元来说,其能够将通过顶点着色器单元已完成着色的顶点按照原始连接关系还原出图形的网格结构,即图元,从而供后续片元着色器单元进行处理;所述裁剪和划分操作则包括对装配完成的图元进行裁剪剔除后,按照tile的大小进行划分;所述光栅化操作包括转换图元并将片段输出至片元着色器;而片段操作则包括例如深度值测试、剪刀测试、α掺合等,经过上述操作所输出的像素数据可以作为图形数据通过显示设备110进行显示。
22.综合上述渲染核阵列230中的通用渲染核208以及固定功能渲染核209,能够实现一个完整的图形渲染管线的逻辑模型。
23.此外,渲染核阵列230可以从调度器207接收将要执行的处理任务。调度器207可独立地调度所述任务由gpu112的资源(比如渲染核阵列230中的一或多个通用渲染核208,固定功能渲染核209)执行。在一个实例中,调度器207可以是硬件处理器。在图2中所示出的实例中,调度器207可包含于gpu112中。在其它实例中,调度器207还可以是与cpu102和gpu112分离的单元。调度器207还可被配置成接收命令和/或操作的流的任何处理器。
24.调度器207可处理一或多个命令流,其包含调度操作,所述调度操作包含于由gpu112执行的一或多个命令流中。具体地说,调度器207可处理一或多个命令流,且调度所述一或多个命令流中的操作,以由渲染核阵列230执行。在操作中,cpu102藉由图1中系统存储器104所包括的gpu驱动程序103可向调度器207发送包括待由gpu112执行的一系列操作
的命令流。调度器207可通过i/o单元205接收包括命令流的操作流且可基于命令流中的操作次序依序地处理命令流的操作,且可调度命令流中的操作可以由渲染核阵列230中的一或多个渲染核执行。
25.并且,tile缓存232是与gpu112一起位于芯片上的少量的极高带宽存储器。然而,tile缓存232的大小太小而无法保持整个图形数据,因此渲染核阵列230必须执行多个渲染回合以再现整个图形数据。举例来说,渲染核阵列230可针对一帧图像的每一tile执行一个渲染回合。具体来说,tile缓存232可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(ram)、静态ram(sram)、动态ram(dram)等。在一些实例中,tile缓存232可为芯片上缓冲器。芯片上缓冲器可指代形成于、定位于和/或安置于与上面形成、定位和/或安置gpu112的微芯片、集成电路和/或裸片相同的微芯片、集成电路和/或裸片上的缓冲器。此外,当tile缓存232实施在与gpu112相同的芯片上时,gpu112未必需要经由通信路径113存取tile缓存232,而是可经由在与gpu112相同的芯片上实施的内部通信接口(例如,总线)存取tile缓存232。因为此接口在芯片上,所以其可能够以比通信路径113高的带宽操作。由此可知,尽管tile缓存232的存储容量有限且增加了硬件上的开销,只能用来缓存一个或几个小矩形的数据,但是避免了反复访问显存的开销,减少了带宽,节省了功耗。
26.基于上述图1及图2的描述,图3示出了以图2所示的gpu112的结构所形成的图形渲染管线80的示例,需要说明的是,图形渲染管线80的核心部分是利用渲染核阵列230中所包括的通用渲染核208以及固定功能渲染核209通过级联形成的逻辑结构,此外,对于gpu112中所包括的调度器207、图形存储器204、tile缓存232以及i/o单元205,均为实现该图形渲染管线80这一逻辑结构功能的外围电路或装置,相应来说,图形渲染管线80通常包含可编程级模块(如图3中圆角框示意)和固定功能级模块(如图3中方框示意),举例来说,可编程级模块的功能可由渲染核阵列230中所包括的通用渲染核208来执行,固定功能级模块的功能可由渲染核阵列230中所包括的固定功能渲染核209实现。如图3所示,图形渲染管线80所包括的各级依次为:顶点抓取模块82,在图3的实例中展示为固定功能级且通常负责将图形数据(三角形、线和点)供应到图形渲染管线80。举例来说,顶点抓取模块82可收集高阶表面、图元等的顶点数据,且将顶点数据和属性输出到顶点着色器模块84。
27.顶点着色器模块84,在图3中展示为可编程级,且负责处理所接收顶点数据和属性,并通过每次针对每个顶点实施一组操作来处理顶点数据。
28.图元装配模块86,在图3中展示为固定功能级,负责收集顶点着色器模块84输出的顶点并将所述顶点组成几何图元。例如,图元装配模块86可以配置为将每三个连续的顶点组成为几何图元(即三角形)。在一些实施例中,特定的顶点可以被重复用于连续的几何图元(例如,三角形带中的两个连续的三角形可以共享两个顶点)。
29.裁剪和划分模块88,在图3中展示为固定功能级,负责对装配完成的图元进行裁剪剔除后,按照tile的大小进行划分;光栅化模块90通常为负责准备片元着色器模块92的图元的固定功能级。举例来说,光栅化模块90可产生若干片段以供片元着色器模块92进行阴影处理。
30.片元着色器模块92,在图3中展示为可编程级从光栅化模块90接收片段且产生例如颜色等每像素数据。片元着色器模块92还可执行例如纹理混合和照明模型计算等每像素
处理。
31.输出合并器模块94,在图3中展示为固定功能级,通常负责对像素数据实施多种操作,例如实施透明测试(alpha test)、模板测试(stencil test)、以及将像素数据与对应于与该像素相关的其他片段的其他像素数据混合。当输出合并器模块94已经完成处理像素数据(即输出数据)时,可以将处理完成的像素数据写入到渲染目标,以产生最终结果。
32.对于常规的tbr方案来说,通常会将屏幕区域分成多个等大的tile,对于一帧图像来说,在图元装配阶段结束后,gpu112根据图元的大小计算出屏幕中哪些tile被该图元覆盖,并为每个tile建立一个图元列表,一旦该tile被图元覆盖,则tile的图元列表中就更新相应的图元信息,直到收集完所有的图元为止。在收集完毕后续的光栅化等阶段,gpu112会遍历每一块tile的图元列表(例如,一个tile可能会被多个图元所覆盖),每渲染完一个图元列表里的图元,tile的数据被写入片上缓存。直到列表里所有的图元处理结束后,该tile的最终数据才被写入显存中。
33.基于上述描述可知,每个渲染核是以tile为单位进行处理的,也就是说,每个渲染核中的光栅化模块将遍历调度器所分配的tile的图元列表,逐个对其中的每个图元进行光栅化操作,然后再将光栅化所产生的片段(fragment)交给片元着色器模块进行后续处理。
34.举例来说,如图4所示,设定渲染场景覆盖了4个tile,分别标记为tile-0、tile-1、tile-2和tile-3;图元一共为8个,分别标记为图元0、图元1、图元2、
……
、图元7;每个tile对应的图元列表为:tile-0覆盖了图元0和图元1;tile-1覆盖了图元1、图元2;tile-2覆盖了图元1、图元2、图元3;tile-3覆盖了图元2、图元3、图元4、图元5、图元6、图元7;继续设定渲染核的数目为4个,分别标记为渲染核0、渲染核1、渲染核2、渲染核3。调度器为渲染核0分配了tile-0,其图元列表中包括图元0和图元1,调度器为渲染核1分配了tile-1,其图元列表中包括图元1和图元2,渲染器0和渲染器1中的光栅化模块分别对图元0、图元1以及图元1、图元2进行光栅化处理后,将所生成的对应图元的片段交由各自的片元着色器模块进行后续处理。
35.然而,片元着色的过程将耗费较多的时间和功耗,如果能够将最终不会显示的片段(也就是不可见的像素)提前剔除后再交由片元着色器模块进行后续处理,便可以提升渲染效率、减小功耗。
36.提前去除将最终不会显示的片段的常规方法为:首先,遍历当前tile的图元列表,将当前图元的片段放入与之对应的fifo(first in first out,先进先出)队列中,通常,所述fifo队列中保存的图元的片段可以包括该片段在所述fifo队列中的坐标值以及深度值。如果新进入fifo队列的片段和当前fifo队列中的片段存在相同的坐标值,即存在重合的像素,则将深度值大的片段从相应的fifo队列中剔除,因为深度值大(也可以理解为距离眼睛远的)的片段将被深度值小(也可以理解为距离眼睛近的)的片段遮蔽,最终将不会被显示。
37.需要说明的是,fifo队列是一种先进先出的数据缓存器,其本质上还是ram,它主要的功能为:对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;数据集中起来进行进栈和存储,可避免频繁的总线操作。fifo队列与普通存储器的区别为:没有外部读写地址线,使用简单,但是只能顺序写入数据,顺序的读出数据。
38.基于fifo队列的上述特点,上述常规方法存在如下弊端:由于当前图元的片段对应的fifo队列的大小是有限的,且遮挡只发生在不同图元之间,所以遮挡片段的剔除效果
不好。例如:fifo队列大小为20,即可以存储20个片段。当前tile的第一个图元覆盖了32个片段,那么,前12个片段没有机会做检测就被挤出fifo队列,且该图元中有机会被检测的片段,越晚放进fifo队列的片段,被检测的机会就会越多,反之,被检测的机会就会越少。可见,上述常规方法中,图元中的不同的片段被检测的概率存在较大的差异,这种差异将导致采用上述常规方法的效果较差。
39.基于此,本发明实施例的技术方案期望能够提供一种不可见像素的剔除技术,该技术可以通过将多个光栅化模块从渲染核中独立出来,形成一个光栅化阵列,然后,将对光栅化模块的调度由基于tile 的调度变为基于图元的调度,从而将基于tile的图元列表由串行光栅化变为并行光栅化,并且,将对片段的比较由纵向比较变为横向比较,使得片段比较的时机提前且片段比较的次数也变少了,并且每个片段都有被检测的机会,从而像素剔除效果更好、渲染的效率更高。
40.本技术实施例提供了一种不可见像素的剔除装置,在一些示例中,所述装置包括:至少一个渲染核以及至少一个光栅化模块;所述至少一个光栅化模块中的每一个光栅化模块,经配置为针对覆盖于当前待处理瓦片的所有图元中的每一个图元分别进行并行光栅化处理,获得每一个图元对应的片段;所述至少一个渲染核中的每一个渲染核,经配置为将所述所有图元的片段按照设定的坐标顺序输出需执行片段着色处理的片段,并在输出过程中基于片段的坐标值以及深度值从所述需执行片段着色处理的片段中剔除被遮挡片段。
41.对于上述示例,具体来说,如图5所示,首先,需要将多个光栅化模块从渲染核中独立出来,形成一个光栅化阵列。也可以理解为,所述至少一个渲染核以及至少一个光栅化模块之间是相互独立的,光栅化模块的数量和渲染核的数量可以是相同的,也可以是不同的,本技术实施例对此不做限定。
42.其次,调度器对光栅化模块的调度应为基于图元的调度,从而对于同一个tile的多个图元可以同时分别进行光栅化处理,也就是并行光栅化处理。举例来说,假设当前待处理的tile为tile-0,调度器将tile-0的图元0调度给空闲的光栅化模块0,将tile-0的图元1调度给空闲的光栅化模块1,相应的,光栅化模块0和光栅化模块1分别对图元0和图元1进行光栅化处理后将生成的不同图元的片段保存在相应的fifo队列中。示例性的,所述片段可以包括:该片段在fifo队列中的坐标值以及深度值。举例来说,光栅化模块0将图元0光栅化处理后生成的片段保存在fifo队列0中,光栅化模块1将图元1光栅化处理后生成的片段保存在fifo队列1中。
43.需要注意的是,每个光栅化模块与fifo队列存在对应关系,也就是说,可以通过确定的光栅化模块找到与之对应的fifo队列。该fifo队列可以是光栅化模块中的存储空间,也可以是其他存储空间,本技术实施例对此不做限定。
44.然后,调度器基于tile对渲染核进行调度,也就是说,调度器将当前待处理瓦片的所有图元中的每一个图元分配给同一个空闲的渲染核。举例来说,如图5所示,假设当前待处理瓦片为tile-0,调度器将tile-0对应的图元列表中的所有图元的片段分配给空闲的渲染核0,从而渲染核0可以分别从光栅化模块0的fifo队列0以及光栅化模块1的fifo队列1中获取相应图元的片段。
45.最后,渲染核0将tile-0的图元0和图元1的片段按照设定的坐标顺序输出需执行片段着色处理的片段,并在输出过程中基于所述图元0和图元1的片段的坐标值以及深度值从所述需执行片段着色处理的片段中剔除被遮挡片段。
46.在一些示例中,所述至少一个渲染核中的每一个渲染核还经配置为将所述所有图元对应的fifo队列中的首个片段进行比较,输出坐标值最小的片段为所述需执行片段着色处理的片段,并剔除坐标值相同且深度值较大的片段;将完成输出和/或剔除片段的fifo队列中的第二个片段更新为相应fifo队列的首个片段;基于更新后的fifo队列,将所有图元对应的fifo队列中的首个片段进行比较,输出坐标值最小的片段为所述需执行片段着色处理的片段,并剔除坐标值相同且深度值较大的片段,直至所有fifo队列中的片段为空。
47.需要说明的是,如图6所示,通常,光栅化模块是采用逐行的方式对图元进行扫描,也就是按照从上到下,从左到右的顺序对图元进行扫描。举例来说,光栅化模块会先保存坐标值中x坐标最小的片段,对于x坐标相同的片段,光栅化模块会按照y坐标从小到大的顺序保存片段。也就是说,光栅化模块总是先保存x坐标小的片段,对于x坐标相等的片段,光栅化模块会按照y坐标从小到大的顺序保存所述片段。
48.基于上述说明,对于本示例,如图7所示,假设当前调度器为tile-2的图元列表中的3个图元(即图元1、图元2、图元3)分别分配了光栅化模块0至2进行光栅化处理,并且,调度器为tile-2分配了空闲状态的渲染核2剔除tile-2的图元列表中的所有图元的片段中需执行片段着色处理的片段中被遮挡片段。
49.具体来说,在渲染核2尚未对各fifo队列中的片段进行剔除处理之前,tile-2对应的各光栅化模块的fifo队列中保存的片段如表1所示:表1对于本示例,具体处理方式的详细描述如下:渲染核2基于表1进行第一次比较,渲染核2从每个fifo队列中获取并比较首个片段的坐标值,由于fifo队列0的首个片段的x坐标为0,是三个fifo队列中坐标值最小的,因此,渲染核2向片元着色器模块输出表1的fifo队列0中个首个片段,将完成输出片段后的fifo队列0中的第二个片段更新为相应fifo队列0的首个片段,处理后的各fifo队列中保存的片段如表2所示。
50.表2
后面四次比较与上述第一次比较的处理方式相同,此处不再赘述,处理后的各fifo队列中保存的片段如表3所示。
51.表3接着,渲染核2基于表3进行下一次比较。由于fifo队列0和fifo队列1中首个片段的坐标值的x坐标和y坐标均相同,渲染核2继续比较fifo队列0和fifo队列1中首个片段的深度值,剔除其中深度值较大的片段(队列1中首个片段),向片元着色器模块输出坐标值较小的片段(队列0中首个片段),将完成输出片段的fifo队列0中的第二个片段以及完成剔除片段的fifo队列1中的第二个片段更新为相应fifo队列0的首个片段,处理后的各fifo队列中保存的片段如表4所示。
52.表4接下来渲染核2基于表4进行接下来的两次比较。同理可知,渲染核2的向片元着色器模块输出表4中fifo队列0的前两个片段,将完成输出片段的fifo队列0中的第三个片段更新为相应fifo队列0的首个片段,处理后的各fifo队列中保存的片段如表5所示。
53.表5接着,渲染核2基于表5进行下一次比较,由于每个fifo队列中首个片段的x坐标值均相同,渲染核2继续比较其y坐标值,其中fifo队列1的y坐标最小,渲染核2向片元着色器模块输出表5中fifo队列1中的首个片段,并将完成输出片段的fifo队列1中的第二个片段更新为相应fifo队列1的首个片段,处理后的各fifo队列中保存的片段如表6所示。
54.表6接着,渲染核2基于表6进行下一次比较,由于fifo队列0至fifo队列2中首个的片段的x坐标和y坐标均相等,因此,渲染核2继续比较三者的深度值,由于fifo队列0中的首个片段的深度值最小,渲染核2向片元着色器模块输出表6中fifo队列0中的首个片段,剔除深度值较大的fifo队列1和fifo队列2中的首个片段,此时, fifo队列0中的片段为空(渲染核2将fifo队列0中图元0的所有片段均输出完毕),渲染核2停止对fifo队列0的处理,并将完成剔除片段的fifo队列1和fifo队列2中的第二个片段更新为相应fifo队列的首个片段,处理后的各fifo队列中保存的片段如表7所示。
55.表7接下来,渲染核2继续处理fifo队列1中图元1的片段和fifo队列2中图元2的片段,具体处理方式同上,此处不再赘述。
56.综上所述,由于光栅化模块对图元的扫描总是从左到右,从上到下进行的,所以每个fifo队列中的首个片段的坐标值总是这个图元的所有片段的坐标值中最小的,因此,渲
染核每次只需要比较每个fifo队列的首个片段的坐标值即可,从而可以减少渲染核的比较次数。
57.在一些示例中,所述装置还可以包括调度器,所述调度器经配置为按照设定的访问顺序依次访问所述当前待执行光栅化的瓦片对应的图元列表,遍历当前待处理瓦片的图元列表中的所有图元,将每个被遍历到的图元对应轮询地分配至当前空闲的光栅化模块以执行光栅化处理。
58.在一些可能的实现方式中,调度器可以按照tile的标号顺序依次访问待处理的tile,比如按照tile-0、tile-1、tile-2以及tile-3的顺序访问各tile所对应的图元列表。
59.在另一些可能的实现方式中,调度器还可以按照待处理的tile的重要程度依次访问待处理的tile;对于重要程度而言,可以认为图元列表越大的tile相应的重要性程度越高,于是可以将tile对应的图元列表大小作为关于重要程度的一个优选衡量指标;或者,可以认为越接近屏幕中心的tile相应的重要性程度越高,于是可以优选将tile中心与屏幕中心的距离值作为关于重要程度的另一个优选衡量指标;当然,也可以按照具体应用环境的需求设定多种关于重要程度的衡量指标,本发明实施例不做赘述。为了能够简要的阐述技术方案,本发明实施例仅以tile的标号顺序作为访问顺序进行示例性说明。举例来说,如图5所示,当tile-0的图元列表访问完毕之后,调度器将接着访问tile-1的图元列表,并遍历tile-1的图元列表中的所有图元(即图元1、图元2),此时,调度器可以将tile-1图元列表中的图元1分配至空闲状态的光栅化模块2,将tile-1图元列表中的图元2分配至空闲状态的光栅化模块3,将tile-1分配至空闲状态的渲染核1。
60.在一些示例中,所述装置还可以包括调度器,所述调度器经配置为将所述当前待处理瓦片对应的图元列表中的所有图元对应的片段分配至当前空闲的同一渲染核以实现从所述需执行片段着色处理的片段中剔除被遮挡片段。
61.对于本示例,具体来说,如图7所示,若当前待处理瓦片为tile-2,调度器为tile-2对应的图元列表中的所有图元(图元1、图元2、图元3)的片段分配至同一个空闲的渲染核2以实现从所述需执行片段着色处理的片段中剔除被遮挡片段。作为示例而非限定,若tile-2对应的图元列表中的图元1首先完成光栅化处理,则调度器可以为图元1对应的片段分配当前空闲的渲染核2,并为后续完成光栅化处理的图元2、图元3的片段同样分配渲染核2,以实现从tile-2的所有图元对应的所述需执行片段着色处理的片段中剔除被遮挡片段。
62.基于前述技术方案相同的发明构思,参见图8,其示出了本发明实施例提供的一种不可见像素的剔除方法,该方法可以应用于前述图2或图3所示的gpu 112中,所述方法可以包括:s801:针对覆盖于当前待处理瓦片的所有图元中的每一个图元分别进行并行光栅化处理,获得每一个图元对应的片段。
63.s802:将所述所有图元的片段按照设定的坐标顺序输出需执行片段着色处理的片段,并在输出过程中基于片段的坐标值以及深度值从所述需执行片段着色处理的片段中剔除被遮挡片段。
64.在一些示例中,所述将所述所有图元的片段按照设定的坐标顺序输出需执行片段着色处理的片段,并在输出过程中基于片段的坐标值以及深度值从所述需执行片段着色处理的片段中剔除被遮挡片段,包括:
将所述所有图元对应的fifo队列中的首个片段进行比较,输出坐标值最小的片段为所述需执行片段着色处理的片段,并剔除坐标值相同且深度值较大的片段;将完成输出和/或剔除片段的fifo队列中的第二个片段更新为相应fifo队列的首个片段;基于更新后的fifo队列,将所有图元对应的fifo队列中的首个片段进行比较,输出坐标值最小的片段为所述需执行片段着色处理的片段,并剔除坐标值相同且深度值较大的片段,直至所有fifo队列中的片段为空。
65.在一些示例中,所述方法还包括:调度器按照设定的访问顺序依次访问所述当前待执行光栅化的瓦片对应的图元列表,遍历当前待处理瓦片的图元列表中的所有图元,将每个被遍历到的图元对应轮询地分配至当前空闲的光栅化模块以执行光栅化处理。
66.在一些示例中,所述方法还包括:调度器将所述当前待处理瓦片对应的图元列表中的所有图元对应的片段分配至当前空闲的同一渲染核以实现从所述需执行片段着色处理的片段中剔除被遮挡片段。
67.可见,采用本技术实施例所述的方法,将对tile的图元列表的串行光栅化处理变为并行光栅化处理,同时,将光栅化模块的fifo队列中保存的片段的位置值由纵向比较变为横向比较,然后再对所述tile的图元进行剔除处理,从而片段比较的时机提前了,比较的次数变少了,并且每个片段都会被比较不会存在遗漏的情况,因此本技术实施例所述的方法对像素剔除效果更好并且效率更高。
68.在上述一或多个实例或示例中,所描述的功能可实施于,所描述功能可实施于硬件、软件、固件或其任何组合中。如果实施于软件中,那么可将功能作为一或多个指令或代码存储在计算机可读媒体上或经由计算机可读媒体传输。计算机可读媒体可包含计算机数据存储媒体或通信媒体,通信媒体包含促进将计算机程序从一处传递到另一处的任何媒体。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。举例来说且非限制,此类计算机可读媒体可包括u盘、移动硬盘、ram、rom、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,或可用于运载或存储呈指令或数据结构的形式的所要程序代码且可由计算机存取的任何其它媒体。并且,任何连接被恰当地称作计算机可读媒体。举例来说,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(dsl)或例如红外线、无线电和微波等无线技术从网站、服务器或其它远程源传输软件,那么同轴电缆、光纤电缆、双绞线、dsl或例如红外线、无线电和微波等无线技术包含于媒体的定义中。如本文中所使用,磁盘和光盘包含压缩光盘(cd)、激光光盘、光学光盘、数字多功能光盘(dvd)、软性磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。
69.代码可由一或多个处理器执行,所述一或多个处理器例如是一或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其它等效的可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。因此,如本文中所使用的术语“处理器”和“处理单元”可指前述结构或适于实施本文中所描述的技术的任何其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可在经配置用于编码和解码的
专用硬件和/或软件模块内提供,或者并入在组合式编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。
70.本发明实施例的技术可实施于各种各样的装置或设备中,所述装置或设备包含无线手持机、集成电路(ic)或一组ic(即,芯片组)。本发明中描述各种组件、模块或单元是为了强调经配置以执行所公开的技术的装置的功能方面,但未必需要由不同硬件单元实现。实际上,如上文所描述,各种单元可结合合适的软件和/或固件组合在编码解码器硬件单元中,或者通过互操作硬件单元的集合来提供,所述硬件单元包含如上文所描述的一或多个处理器。
71.已描述了本发明的各种方面。这些和其它实施例在所附权利要求书的范围内。需要说明的是:本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
72.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1