CN107077758A - 零覆盖光栅化剔除 - Google Patents
零覆盖光栅化剔除 Download PDFInfo
- Publication number
- CN107077758A CN107077758A CN201580058459.XA CN201580058459A CN107077758A CN 107077758 A CN107077758 A CN 107077758A CN 201580058459 A CN201580058459 A CN 201580058459A CN 107077758 A CN107077758 A CN 107077758A
- Authority
- CN
- China
- Prior art keywords
- passage
- summit
- pel
- line
- sample
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
根据一些实施例,零覆盖测试可以判定诸如三角形之类的图元是否依赖于样本行或样本列或样本线之间的通道。如果是,则可在零覆盖剔除测试中剔除所述图元。
Description
背景技术
本公开涉及图形处理。
在图形处理单元中,具有负责寻找哪些样本正在被渲染的图元(primitive)内部的光栅化单元或光栅化器。被渲染的图元通常是三角形。
在对三角形进行光栅化之前,通常具有设置和剪裁测试,设置和剪裁测试判定三角形是否在视锥体的外部。如果是,则可剔除那些三角形,从而节省处理周期。然后,仅未被剔除的三角形到达实际的光栅化器。
一个剔除测试(被称为覆盖测试)判定在给定光栅化器中的当前活跃样本图案的情况下三角形是否完全覆盖任何样本。如果否,则可剔除那个三角形。简单的示例是具有两个顶点的三角形,其中两个顶点具有相同的位置,因为该三角形具有零面积。另一示例是正好落入样本之间的三角形。
针对每个被覆盖像素内的每个样本,光栅化器通过评估样本是否在图元内部来执行覆盖测试。针对三角形,这通过评估样本到三角形的三条边的有符号距离来完成。
附图说明
参照以下附图对一些实施例进行描述:
图1是通道的第一实施例的描绘;
图2是通道的第二实施例的描绘;
图3是通道的第三实施例的描绘;
图4是通道的第四实施例的描绘;
图5是通道的一个实施例的流程图;
图6是一个实施例的示意性描绘;
图7是根据一个实施例的数据处理系统的框图;
图8是根据一个实施例的在图7中所示的处理器的框图;
图9是根据一个实施例的图7的图形处理器的框图;
图10是根据一个实施例的图形处理引擎的框图;
图11是根据另一个实施例的图形处理器的框图;
图12展示了一个实施例的线程执行逻辑;
图13是根据一个实施例的图形处理器执行单元指令格式的框图;
图14是图形处理器的另一个实施例的框图;
图15A是根据一个实施例的图形处理器命令格式的框图;
图15B是根据一个实施例的图形处理器命令序列的框图;以及
图16是一个实施例的图形软件架构。
具体实施方式
根据一些实施例,零覆盖测试可以判定诸如三角形之类的图元是否驻留在样本行或样本列或样本线之间的通道中。如果是,则可在零覆盖剔除测试中剔除图元。
如在此使用的,“通道”是在至少四个像素和样本之间延伸的并且基本上没有任何样本的多个平行区域之一。通过确定三角形基本上落入通道内,可以在进行内部测验之前在覆盖测试中剔除三角形。如在此使用的,“基本上”意指位于通道内的图元的面积大于通道外部的面积。
在三角形设置或剪裁单元中,可以实现零覆盖剔除测试。给定采用三角形形式的图元的三个顶点的投影位置,可对实际上未覆盖任何样本的三角形子集进行标识。
存在不同类型的通道。一种类型的通道是大部分为水平或竖直样本之间的通道。这种类型的通道涉及位于两个相邻像素行或列之间的基本上水平或竖直取向上的三角形,如图1和图2中所示。第二种类型的通道与水平或竖直像素行或列成45°,如图3所示。在一个测试中,可以剔除图3中示出的基本上在45°度通道中的三角形。第三种测试针对成非竖直、非水平或非45°角的其他类型的通道,如图4所示。
在此描述的技术可与其他零覆盖测试结合使用或者附加于其他零覆盖测试来使用。重点是,可剔除的零覆盖三角形越多,图形处理操作就越高效。
第一种覆盖测试可以针对基本上是竖直或水平的像素通道,其中,两个顶点位于相同的竖直或水平通道中并且第三个顶点位于相邻的水平通道中。三角形(具有顶点1、2和3)的最左边两个顶点位于通道内部并且最右边的顶点(顶点3)位于图1中的相邻竖直通道中。可计算图1中从顶点3开始(三角形内部)的任意线段L1(诸如三角形的边)与通道边界的相交。沿着包括样本1和2的样本线或者通道边界来标识交点P1,其中,线段上的交点与边界相交。对比三角形,对交点P1之下的样本1以及交点P1之上的样本2进行内部测试。然后,如果两个样本均在三角形的外部(如在图1中描绘的示例中的情况),则可以剔除三角形。
作为优化,如果第三顶点(即,图1中到右边的顶点)在Y方向上位于其他两个顶点之间,则水平线L1可以用于寻找如图1中所示的相交。可以从第三顶点的Y坐标容易地计算之上及之下的样本。
图2示出了更困难的情况,其中,上述优化是不可适用的。此处,线段L2现在是从顶点3到三角形(包括顶点1、2和3)的对边上的三角形内部的点的任意线。作为优化,可选择使用边A或者边B,而非挑选另一条任意线。由于边已经被计算为三角形设置的一部分,因此这在一些情况下可以更便宜。
如果一个顶点在特定像素通道的内部并且其他顶点分别位于到当前像素通道的左侧和右侧的通道中,则可在这种情况下使用延伸。针对最左和最右的顶点,可以使用涉及到三角形的对边上的点的任意线的与以上相同的测试。相同的测试可易于应用于水平通道,其中,最左和最右被变化为上部和下部。
下一种情况针对在如图3中示出的基本上适合样本之间的45°取向的通道内的三角形。顶点可变换为如下的旋转的坐标系:
x’=x-y,y’=x+y。
然后,可以针对经变换的顶点来计算轴线对准的边界框,并且可以使用标准的水平和竖直剔除测试。类似地,还可以应用以上来自第一种情况的测试。
第二种情况可被一般化为处理除0度、45度和90度之外的角度。图4示出了具有不同取向的两对通道。成对的通道彼此垂直。类似于第二种情况,可以创建如下变换:
其中,M为2×2矩阵。然后,可以在由(x’,y’)给定的空间中在经变换的坐标系上使用标准剔除测试。显著的差异为,使通道更薄以便补偿如何将样本放置在此坐标空间中,如图4所示。
参考图5,序列40可以在软件、固件和/或硬件中实现。在软件和固件实施例中,可以由存储在一个或多个非瞬态计算机可读介质(诸如磁性、光学、或半导体存储设备)中的计算机可执行指令来实现。
在一个实施例中,序列40可以通过确定图元的顶点的投影位置来开始,如框42中所指示的。然后,可以在框44中标识任何可应用的且有用的通道。这些通道可以是水平的、竖直的、对角的、或以其他角度取向。
然后,在菱形46处,判定顶点是否基本上在通道内并且小的覆盖测试集合是否失败。如果是,则可以剔除三角形,如在框48中所指示的。
图6是示出了与应用程序接口(API)和编程模型相匹配的基线架构的简化视图。通常,3D场景作为三角表面的集合开始,其中,三角形的顶点限定对象的形状。顶点的这些输入列表被馈送至顶点拾取(VF)单元12,顶点拾取单元进而从存储器14拾取与顶点相关联的属性。在顶点着色器(VS)单元16中,使用可编程着色器对所拾取的顶点属性进行变换。可将这些可编程着色器看作是子例程,子例程可以将顶点映射至屏幕上并且通过对其属性执行数学运算来为3D环境中的对象添加特殊效果。这些着色器被分派到线程处理器——被称为执行单元(EU)——其中,顶点的属性(例如位置、色彩、纹理坐标等)被变换并且计算的值被存储在本地存储器中以供后续的流水线级参考。
VS单元的输出进入之后的流水线级,这些流水线级是外壳着色器17、镶嵌18、域着色器19以及几何着色器20(如果可应用),或被发送至图元组件单元22,在图元组装单元22中创建三角形。在创建三角形之后,来到剪裁级24,其中,在视口椎体(viewport frustum)外部的三角形(如在视口椎体丢弃23中所确定的)被丢弃。另一方面,在视口椎体的平面内的三角形被接受并发送至后续的流水线级。而且,剪裁级还可以剪裁与视锥体的平面相交的三角形。在一个实施例中,剪裁阶段24内的单元50可以实现图5的序列40。
又再次由简单剔除级26来检查在视口椎体丢弃23中存活的三角形,以便确认该三角形是否将是最终图像的一部分并且扔掉使这些测试失败的对象。例如,在此级中丢弃后向、退化的、零面积等的三角形。针对一些应用,通过视口椎体或者简单剔除级丢弃超过约80%的三角形。最后,通过的三角形被发送至设置单元28和光栅化单元30。在其他实施例中,设置级28内的单元50可以实现图5的序列40。
基线架构的第二部分是像素管,像素管包含光栅化30、深度32、着色和纹理33以及色彩聚类34。像素管从光栅化单元30开始,光栅化单元确定位于由几何管发送的三角形的内部或者边上的所有像素的位置。进一步地,其将三角形划分为被发送至深度(Z)管32用于深度测试的对称像素块。因为3D场景中的多个对象可映射至相同的位置,因此深度管判定嵌入在块中的像素是否与观察者最近或者由属于不同对象的先前观察的像素所隐藏。对通过深度测试的像素进行着色(着色和纹理33),以用于确定其色彩以及与其相关的其他属性。最后,像素的计算值被发送至色彩管34,色彩管可以可选地将计算值与先前已知的状态进行混合或者对其进行发送以便更新帧缓冲器。
图7是根据实施例的数据处理系统100的框图。数据处理系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单个处理器台式系统、多处理器工作站系统、或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,数据处理系统100是用于移动设备、手持式设备、或嵌入式设备的片上系统(SOC)集成电路。
数据处理系统100的实施例可包括或并入基于服务器的游戏平台、游戏控制台,包括游戏与媒体控制台、移动游戏控制台、手持式游戏控制台、或在线游戏控制台。在一个实施例中,数据处理系统100是移动电话、智能电话、平板计算设备或移动互联网设备。数据处理系统100还可包括可穿戴设备(诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备、或虚拟现实设备)、与可穿戴设备耦合、或者集成在可穿戴设备中。在一个实施例中,数据处理系统100是电视机或机顶盒设备,电视机或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。
一个或多个处理器102各自包括用于处理指令的一个或多个处理器核107,指令当被执行时执行系统和用户软件的操作。在一个实施例中,一个或多个处理器核107中的每个处理器核被配置成用于处理特定的指令集109。指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)、或经由超长指令字(VLIW)进行的计算。多个处理器核107可以各自处理不同的指令集109,指令集可以包括用于促进对其他指令集进行仿真的指令。处理器核107还可以包括其他处理设备,诸如数字信号处理器(DSP)。
在一个实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在一个实施例中,在处理器102的各个组件之中共享高速缓存存储器。在一个实施例中,处理器102还使用外部高速缓存(例如,3级(L3)高速缓存或末级高速缓存(LLC))(未示出),可以使用已知的高速缓存一致性技术在处理器核107之中共享外部高速缓存。寄存器组106附加地包括在处理器102中,处理器可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器以及指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以专用于处理器102的设计。
处理器102耦合至处理器总线110,处理器总线用于在处理器102与系统100中的其他组件之间传输数据信号。系统100使用示例性‘中枢’系统架构,包括存储器控制器中枢116和输入输出(I/O)控制器中枢130。存储器控制器中枢116促进存储器设备与系统100的其他组件之间的通信,而I/O控制器中枢(ICH)130经由本地I/O总线向I/O设备提供连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备、或者具有合适性能用作处理存储器的某个其他存储器设备。存储器120可以存储数据122和指令121,以供处理器102执行进程时使用。存储器控制器中枢116还与可选的外部图形处理器112耦合,外部图形处理器可以在处理器102中与一个或多个图形处理器108进行通信,以执行图形和媒体操作。
ICH 130使得外围组件经由高速I/O总线连接至存储器120和处理器102。I/O外围组件包括音频控制器146、固件接口128、无线收发器126(例如,Wi-Fi、蓝牙)、数据存储设备124(例如,硬盘驱动器、闪存等)、以及用于将传统(例如,个人系统2(PS/2))设备耦合至系统的传统I/O控制器。一个或多个通用串行总线(USB)控制器142连接输入设备,诸如键盘和鼠标144组合。网络控制器134还可以耦合至ICH 130。在一个实施例中,高性能网络控制器(未示出)耦合至处理器总线110。
图8是处理器200的实施例的框图,处理器具有一个或多个处理器核202A-N、集成存储器控制器214、以及集成图形处理器208。处理器200可包括多达且包括由虚线框表示的附加核202N的附加核。核202A-N中的每个核包括一个或多个内部高速缓存单元204A-N。在一个实施例中,每个核还可访问一个或多个共享高速缓存单元206。
内部高速缓存单元204A-N和共享高速缓存单元206表示处理器200内的高速缓存存储器层级。高速缓存存储器层级可以包括在每个核内的至少一级指令和数据高速缓存,以及一级或多级共享中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)、或其他级的高速缓存,其中,在外部存储器之前的最高级的高速缓存被分类为末级高速缓存(LLC)。在一个实施例中,高速缓存一致性逻辑维持各高速缓存单元206和204A-N之间的一致性。
处理器200还可以包括一个或多个总线控制器单元216的集合以及系统代理210。一个或多个总线控制器单元管理外围总线集合,诸如一个或多个外围组件互连总线(例如,PCI总线、PCI快速总线)。系统代理210为各处理器组件提供管理功能。在一个实施例中,系统代理210包括一个或多个集成存储器控制器214以便管理对各外部存储器设备(未示出)的访问。
在一个实施例中,核202A-N中的一个或多个核包括对同步多线程的支持。在这种实施例中,系统代理210包括用于在多线程处理过程中协调并操作核202A-N的组件。系统代理210可以附加地包括功率控制单元(PCU),功率控制单元包括用于调节核202A-N的功率状态的逻辑和组件以及图形处理器208。
处理器200附加地包括用于执行图形处理操作的图形处理器208。在一个实施例中,图形处理器208与共享高速缓存单元206的集合以及系统代理单元210耦合,系统代理单元包括一个或多个集成存储器控制器214。在一个实施例中,显示控制器211与图形处理器208耦合以便将图形处理器输出驱动到一个或多个耦合的显示器。显示控制器211可以是经由至少一个互连与图形处理器耦合的单独模块,或者可以集成在图形处理器208或系统代理210内。
在一个实施例中,基于环形的互连单元212用于耦合处理器200的内部组件,然而,可以使用可替代的互连单元,诸如点对点互连、开关互连、或其他技术(包括本领域众所周知的技术)。在一个实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多个各种I/O互连中的至少一个I/O互连,包括封装体I/O互连,封装体I/O互连促进各处理器组件与高性能嵌入式存储器模块218(诸如eDRAM模块)之间的通信。在一个实施例中,核202-N中的每个核以及图形处理器208将嵌入式存储器模块218用作共享末级高速缓存。
在一个实施例中,核202A-N是执行相同指令集架构的均质核。在另一个实施例中,核202A-N就指令集架构(ISA)而言是同质的,其中,核202A-N中的一个或多个核执行第一指令集,而其他核中的至少一个核执行第一指令集的子集或不同的指令集。
处理器200可以是使用多种处理技术(例如,互补型金属氧化物半导体(CMOS)、双极结型/互补型金属氧化物半导体(BiCMOS)、或N型金属氧化物半导体逻辑(NMOS))中的任何处理技术的一个或多个衬底的一部分或者实现在该一个或多个衬底上。另外,处理器200可以实现在一个或多个芯片上或者被实现为具有所展示的组件以及附加的其他组件的片上系统(SOC)集成电路。
图9是图形处理器300的一个实施例的框图,图形处理器可以是分立图形处理单元、或者可以是与多个处理核集成的图形处理器。在一个实施例中,经由到图形处理器上的寄存器的存储器映射I/O接口并且经由被放置在处理器中的命令和图形处理器进行通信。图形处理器300包括存储器接口314以便访问存储器。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存、和/或到系统存储器的接口。
图形处理器300还包括显示控制器302以便将显示输出数据驱动到显示设备320。显示控制器302包括用于显示器的一个或多个重叠平面的硬件以及多层视频或用户接口元件的合成。在一个实施例中,图形处理器300包括用于编码、解码、或者向、从或在一个或多个媒体编码格式之间进行媒体代码转换的视频编解码器引擎306,包括但不限于:运动图形专家组(MPEG)(诸如MPEG-2)、高级视频编码(AVC)格式(诸如H.264/MPEG-4AVC)、以及电影&电视工程师协会(SMPTE)421MA/C-1、和联合图像专家组(JPEG)格式(诸如JPEG、以及运动JPEG(MJPEG)格式)。
在一个实施例中,图形处理器300包括块图像转移(BLIT)引擎304以便执行二维(2D)光栅化器操作,包括例如,位边界块转移。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。图形处理引擎310是用于执行图形操作的计算引擎,图形操作包括三维(3D)图形操作和媒体操作。
GPE 310包括用于执行3D操作的3D流水线312,诸如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程且固定功能元件,可编程且固定功能元件在到3D/媒体子系统315的元件和/或生成的执行线程内执行各种任务。虽然3D流水线312可用于执行媒体操作,但是GPE 310的实施例还包括媒体流水线316,媒体流水线具体地用于执行媒体操作,诸如视频后处理和图像增强。
在一个实施例中,媒体流水线316包括固定功能或可编程逻辑单元以便代替、或代表视频编解码器引擎306来执行一个或多个具体的媒体操作,诸如视频解码加速、视频去隔行、以及视频编码加速。在一个实施例中,媒体流水线316另外包括线程生成单元以便生成用于在3D/媒体子系统315上执行的线程。生成的线程在包括在3D/媒体子系统中的一个或多个图形执行单元上执行对媒体操作的计算。
3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316生成的线程的逻辑。在一个实施例中,流水线向3D/媒体子系统315发送线程执行请求,3D/媒体子系统包括用于仲裁并分派各请求到可用的线程执行资源的线程分派逻辑。执行资源包括图形执行单元阵列以便处理3D流水线和媒体线程。在一个实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一个实施例中,子系统还包括共享存储器(包括寄存器和可寻址存储器)以便在线程之间共享数据并且存储输出数据。
图10是用于图形处理器的图形处理引擎410的实施例的框图。在一个实施例中,图形处理引擎(GPE)410是图5中示出的GPE 310的版本。GPE 410包括3D流水线412和媒体流水线416,其中每个流水线可以与图5的3D流水线312和媒体流水线316的实现方式不同或者类似。
在一个实施例中,GPE 410与命令流送器(streamer)403耦合,命令流送器向GPE3D流水线412和媒体流水线416提供命令流。命令流送器403耦合至存储器,存储器可以是系统存储器、或者内部高速缓存存储器和共享高速缓存存储器中的一个或多个高速缓存存储器。命令流送器403从存储器接收命令并且将命令发送至3D流水线412和/或媒体流水线416。3D流水线和媒体流水线通过经由各自流水线内的逻辑执行操作或者通过将一个或多个执行线程分派至执行单元阵列414来处理命令。在一个实施例中,执行单元阵列414是可扩展的,从而使得阵列包括基于GPE 410的目标功率和性能水平的可变数量的执行单元。
采样引擎430与存储器(例如,高速缓存存储器或系统存储器)和执行单元阵列414耦合。在一个实施例中,采样引擎430为可扩展执行单元阵列414提供存储器访问机制,存储器访问机制允许执行阵列414从存储器读取图形和媒体数据。在一个实施例中,采样引擎430包括用于执行针对媒体的专门图像采样操作的逻辑。
采样引擎430中的专门的媒体采样逻辑包括去噪/去隔行模块432、运动估计模块434、以及图像缩放和滤波模块436。去噪/去隔行模块432包括用于对经解码的视频数据执行去噪或去隔行算法中的一项或多项的逻辑。去隔行逻辑将隔行的视频内容的交替字段组合为单个视频帧。去噪逻辑从视频和图像数据减少或去除数据噪音。在一个实施例中,去噪和去隔行逻辑是运动自适应的并且使用基于在视频数据中检测的运动量的空间或时间滤波。在一个实施例中,去噪/去隔行模块432包括专门的运动检测逻辑(例如,在运动估计引擎434内)。
运动估计引擎434通过对视频数据执行视频加速功能(诸如运动向量估计和预测)为视频操作提供硬件加速。运动估计引擎确定运动向量,运动向量描述了连续视频帧之间的图像数据的变换。在一个实施例中,图形处理器媒体编解码器使用视频运动估计引擎434来在宏块级对视频执行操作,这对于其使用通用处理器来执行而言,原本可能是计算密集型的。在一个实施例中,运动估计引擎434通常可用于图形处理器组件以便辅助视频解码和处理功能,视频解码和处理功能对于视频数据内的运动的方向或幅度是敏感或自适应的。
图像缩放和滤波模块436执行图像处理操作以便增强生成的图像和视频的视觉质量。在一个实施例中,图像缩放和滤波模块436在向执行单元阵列414提供数据之前在采样操作过程中处理图像和视频数据。
在一个实施例中,图形处理引擎410包括数据端口444,数据端口为图形子系统提供用于访问存储器的附加机制。数据端口444针对操作促进存储器访问,操作包括渲染目标写入、恒定缓冲器读取、暂时存储器空间读取/写入、以及媒体表面访问。在一个实施例中,数据端口444包括用于高速缓存对存储器的访问的高速缓存存储器空间。高速缓存存储器可以是单个数据高速缓存或者被分为用于多个子系统的多个高速缓存,多个高速缓存经由数据端口访问存储器(例如,渲染缓冲器高速缓存、恒定缓冲器高速缓存等)。在一个实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由数据分配互连来交换消息而与数据端口进行通信,数据分配互连耦合图形处理引擎410的子系统中的每个子系统。
图11是图形处理器的另一个实施例的框图。在一个实施例中,图形处理器包括环形互连502、流水线前端504、媒体引擎537、以及图形核580A-N。环形互连502将图形处理器耦合至其他处理单元,包括其他图形处理器或一个或者多个通用处理器核。在一个实施例中,图形处理器是集成在多核处理系统内的多个处理器之一。
图形处理器经由环形互连502接收多批命令。传入命令由流水线前端504中的命令流送器503来解译。图形处理器包括用于经由(多个)图形核580A-N来执行3D几何处理和媒体处理的可扩展执行逻辑。针对3D几何处理命令,命令流送器503将命令供应至几何流水线536。针对至少一些媒体处理命令,命令流送器503将命令供应至视频前端534,视频前端与媒体引擎537耦合。媒体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(MFX)引擎533。几何流水线536和媒体引擎537各自生成执行线程,执行线程用于由至少一个图形核580A提供的线程执行资源。
图形处理器包括可扩展线程执行资源表征模块核580A-N(有时被称为核分片),各个可扩展线程执行资源表征模块核具有多个子核550A-N、560A-N(有时被称为核子分片)。图形处理器可具有任何数量的图形核580A到580N。在一个实施例中,图形处理器包括图形核580A,图形核具有至少第一子核550A以及第二核子核560A。在另一实施例中,图形处理器是具有单子核(例如,550A)的低功率处理器。在一个实施例中,图形处理器包括多图形核580A-N,每个图形核包括第一子核550A-N的集合以及第二子核560A-N的集合。第一子核550A-N的集合中的每个子核至少包括执行单元552A-N以及媒体/纹理采样器554A-N的第一集合。第二子核560A-N的集合中的每个子核至少包括执行单元562A-N以及采样器564A-N的第二集合。在一个实施例中,每个子核550A-N、560A-N共享共享资源570A-N的集合。在一个实施例中,共享资源包括共享高速缓存存储器和像素操作逻辑。其他共享资源还可以包括在图形处理器的各实施例中。
图12展示了线程执行逻辑600,线程执行逻辑包括在图形处理引擎的一个实施例中采用的处理元件阵列。在一个实施例中,线程执行逻辑600包括像素着色器602、线程分派器604、指令高速缓存606、可扩展执行单元阵列(包括多个执行单元608A-N)、采样器610、数据高速缓存612、以及数据端口614。在一个实施例中,包括的组件经由互连结构而互连,互连结构链接至组件中的每个组件。线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610、以及执行单元阵列608A-N中的一项或多项与存储器(诸如系统存储器或高速缓存存储器)的一个或多个连接。在一个实施例中,每个执行单元(例如,608A)是单独的向量处理器,向量处理器能够执行多个同步线程并且针对每个线程并行地处理多个数据元素。执行单元阵列608A-N包括任何数量的单独执行单元。
在一个实施例中,执行单元阵列608A-N主要用于执行“着色器”程序。在一个实施例中,阵列608A-N中的执行单元执行包括本地支持许多标准3D图形着色器指令的指令集,从而使得利用最小转换来执行来自图形库(例如,Direct 3D和OpenGL)的着色器程序。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、碎片着色器)以及通用处理(例如,计算和媒体着色器)。
执行单元阵列608A-N中的每个执行单元在数据元素阵列上进行操作。数据元素的数量是“执行大小”、或针对指令的通道数量。执行通道是执行数据元素访问、掩蔽、以及指令内的流控制的逻辑单元。通道的数量可以与针对特定图形处理器的物理ALU或FPU的数量无关。执行单元608A-N支持整数和浮点数据类型。
执行单元指令集包括单指令多数据(SIMD)指令。各数据元素可作为打包数据类型被存储在寄存器中,并且执行单元将基于元素的数据大小来处理各元素。例如,当在256位宽的向量上进行操作时,256位的向量存储在寄存器中,并且执行单元作为四个单独64位打包数据元素(四倍字长(QW)大小的数据元素)、八个单独32位打包数据元素(双倍字长(DW)大小的数据元素)、十六个单独16位打包数据元素(字长(W)大小的数据元素)、或三十二个单独8位数据元素(字节(B)大小的数据元素)在向量上进行操作。然而,不同的向量宽度和寄存器大小是可能的。
一个或多个内部指令高速缓存(例如,606)包括在线程执行逻辑600中以便高速缓存执行单元的线程指令。在一个实施例中,一个或多个数据高速缓存(例如,612)被包括用于高速缓存在线程执行期间的线程数据。采样器610被包括用于为3D操作提供纹理采样并且为媒体操作提供媒体采样。在一个实施例中,采样器610包括专门的纹理或媒体采样功能以便在向执行单元提供采样数据之前在采样处理过程中处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程生成和分派逻辑向线程执行逻辑600发送线程发起请求。线程执行逻辑600包括本地线程分派器604,本地线程分派器对来自图形和媒体流水线的线程发起请求进行仲裁并且在一个或多个执行单元608A-N上实例化请求的线程。例如,几何流水线(例如,图6的536)将顶点处理、镶嵌或几何处理线程分派至线程执行逻辑600。线程分派器604还可处理来自执行着色器程序的运行时间线程生成请求。
一旦一组几何对象已经被处理并且被光栅化为像素数据,则像素着色器602被调用以便进一步计算输出信息并且使得结果被写入到输出表面(例如,色彩缓冲器、深度缓冲器、模板缓冲器等)。在一个实施例中,像素着色器602计算各顶点属性的值,各顶点属性跨光栅化对象被内插。像素着色器602然后执行API供应的像素着色器程序。为了执行像素着色器程序,像素着色器602经由线程分派器604将线程分派至执行单元(例如,608A)。像素着色器602使用采样器610中的纹理采样逻辑来访问存储在存储器中的纹理图中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何碎片的像素色彩数据、或者丢弃来自进一步处理的一个或多个像素。
在一个实施例中,数据端口614针对线程执行逻辑600提供存储器访问机制,以将经处理的数据输出至存储器以用于在图形处理器输出流水线上进行处理。在一个实施例中,数据端口614包括或耦合至一个或多个高速缓存存储器(例如,数据高速缓存612),一个或多个高速缓存存储器用于经由数据端口高速缓存用于存储器访问的数据。
图13是根据实施例的框图,展示了图形处理器执行单元的指令格式。在一个实施例中,图形处理器执行单元支持具有采用多种格式的指令的指令集。实线框展示了通常包括在执行单元指令中的组件,而虚线包括是可选的或者仅包括在指令子集中的组件。如所展示,所描述的指令格式是宏指令,因为它们是供应至执行单元的指令,这与从指令解码产生的微操作相反(一旦指令被处理)。
在一个实施例中,图形处理器执行单元本地地支持采用128位格式710的指令。64位压缩的指令格式730可用于基于所选择的指令、指令选项、以及操作数量的一些指令。本地128位格式710提供对所有指令选项的访问,而一些选项和操作限制在64位格式730中。在64位格式730中可用的本地指令随实施例而改变。在一个实施例中,使用索引字段713中的索引值的集合来部分地压缩指令。执行单元硬件基于索引值来参考压缩表的集合并且使用压缩表输出来重构采用128位格式710的本地指令。
针对每个格式,指令操作码712限定了执行单元要执行的操作。执行单元跨每个操作数的多个数据元素来并行地执行每个指令。例如,响应于添加指令,执行单元跨每个色彩通道执行同步添加操作,色彩通道表示纹理元素或图片元素。默认地,执行单元跨操作数的所有数据通道执行每个指令。指令控制字段712使能控制某些执行选项,诸如通道选择(例如,预测)以及数据通道排序(例如,重排)。针对128位指令710,执行大小字段716限制了将被并行执行的数据通道的数量。执行大小字段716不可用于64位紧凑指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数(src0 720、src1722)以及一个目标操作数718。在一个实施例中,执行单元支持双目标指令,其中,隐含了目标之一。数据操纵指令可具有第三源操作数(例如,SRC2724),其中,指令操作码JJ12确定源操作数的数量。指令的最后的源操作数可以是利用指令传递的即时(例如,硬编码)值。
在一个实施例中,指令基于操作码位字段被分组在一起以便简化操作码解码740。针对8位操作码,位4、5和6允许执行单元确定操作码类型。示出的精确操作码分组是示例性的。在一个实施例中,移动和逻辑操作码分组742包括数据移动和逻辑指令(例如,mov、cmp)。移动和逻辑分组742共享第五最高有效位(MSB),其中,移动指令采用0000xxxxb的形式(例如,0x0x)并且逻辑指令采用0001xxxxb的形式(例如,0x01)。流控制指令分组744(例如,call、jmp)包括采用0010xxxxb形式的指令(例如,0x20)。混杂指令分组746包括指令的混合,包括采用0011xxxxb形式(例如,0x30)的同步指令(例如,wait、send)。并行数学指令分组748包括采用0100xxxxb形式(例如,0x40)的组件式的算术指令(例如,add、mul)。并行数学分组748跨数据通道并行地执行算术运算。向量数学分组750包括采用0101xxxxb形式(例如,0x50)的算术指令(例如,dp4)。向量数学分组对向量操作数执行算术运算,诸如点积运算。
图14是图形处理器的另一个实施例的框图,图形处理器包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线870。在一个实施例中,图形处理器是多核处理系统内的图形处理器,多核处理系统包括一个或多个通用处理核。图形处理器受到至一个或多个控制寄存器(未示出)的寄存器写入的控制或者经由环形互连802经由下发至图形处理器的命令被控制。环形互连802将图形处理器耦合至其他处理组件,诸如其他图形处理器或通用处理器。来自环形互连的命令通过命令流送器803被解译,命令流送器将指令供应至图形流水线820或媒体流水线830的单独组件。
命令流送器803引导顶点拾取器805组件的操作,顶点拾取器组件从存储器读取顶点数据并且执行由命令流送器803提供的顶点处理命令。顶点拾取器805向顶点着色器807提供顶点数据,顶点着色器对每个顶点执行坐标空间变换和照明操作。顶点拾取器805和顶点着色器807通过经由线程分派器831将执行线程分派至执行单元852A、852B来执行顶点处理指令。
在一个实施例中,执行单元852A、852B是向量处理器阵列,向量处理器阵列具有用于执行图形和媒体操作的指令集。执行单元852A、852B具有附接的L1高速缓存851,L1高速缓存对每个阵列是特定的或者在阵列之间被共享。高速缓存可被配置为数据高速缓存、指令高速缓存、或单个高速缓存,单个高速缓存被分区为包含不同分区中的数据和指令。
在一个实施例中,图形流水线820包括用于执行3D对象的硬件加速镶嵌的镶嵌组件。可编程外壳着色器811配置镶嵌操作。可编程域着色器817提供对镶嵌输出的后端估计。镶嵌器813在外壳着色器811的方向上进行操作并且包含专用逻辑,专用逻辑用于基于粗糙几何模型来生成详细的几何对象集合,粗糙几何模型作为输入被提供至图形流水线820。如果未使用镶嵌,则镶嵌组件811、813、817可以被旁路掉。
完整的几何对象可由几何着色器819经由被分派至执行单元852A、852B的一个或多个线程被处理、或者可以直接行进至剪裁器829。几何着色器在整个几何对象(而非顶点或者如图形流水线的先前级中的顶点分片)上进行操作。如果禁用镶嵌,则几何着色器819从顶点着色器807接收输入。几何着色器819可由几何着色器程序编程以便在镶嵌单元被禁用时执行几何镶嵌。
在光栅化之前,顶点数据由剪裁器829来处理,剪裁器是固定功能剪裁器或者是具有剪裁和几何着色器功能的可编程剪裁器。在一个实施例中,渲染输出流水线870中的光栅化器873分派像素着色器以便将几何对象转换成其每像素表示。在一个实施例中,像素着色器逻辑包括在线程执行逻辑850中。
图形引擎具有互连总线、互连结构、或某个其他的互连机制,互连机制允许数据和消息在图形引擎的主要组件之中传递。在一个实施例中,执行单元852A、852B和(多个)相关联的高速缓存851、纹理和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856进行互连,以便执行存储器访问并且与图形引擎的渲染输出流水线组件进行通信。在一个实施例中,采样器854、高速缓存851、858以及执行单元852A、852B各自具有单独的存储器访问路径。
在一个实施例中,渲染输出流水线870包含光栅化器和深度测试组件873,光栅化器和深度测试组件将基于顶点的对象转换为其相关联的基于像素的表示。在一个实施例中,光栅化器逻辑包括用于执行固定功能三角形和线光栅化的窗口器/掩蔽器单元。相关联的渲染和深度缓冲器高速缓存878、879在一个实施例中也是可用的。像素操作组件877对数据执行基于像素的操作,尽管在一些实例中,与2D操作(例如,利用混合的位块图像转移)相关联的像素操作由2D引擎841来执行、或者在显示时间由显示控制器843使用重叠显示平面来代替。在一个实施例中,共享的L3高速缓存875可用于所有的图形组件,从而允许在在无需使用主系统存储器的情况下共享数据。
图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一个实施例中,视频前端834从命令流送器803接收流水线命令。然而,在一个实施例中,媒体流水线830包括单独的命令流送器。视频前端834在将命令发送至媒体引擎837之前处理媒体命令。在一个实施例中,媒体引擎包括用于生成线程以用于经由线程分派器831分派至线程执行逻辑850的线程生成功能。
在一个实施例中,图形引擎包括显示引擎840。在一个实施例中,显示引擎840在图形处理器的外部并且经由环形互连802、或某个其他互连总线或结构与图形处理器耦合。显示引擎840包括2D引擎841和显示控制器843。显示引擎840包含能够独立于3D流水线而进行操作的专用逻辑。显示控制器843与显示设备(未示出)耦合,显示设备可以是系统集成显示设备(如在膝上型计算机中)、或者(经由显示设备连接器附接的)外部显示设备。
图形流水线820和媒体流水线830可配置成用于基于多个图形和媒体编程接口来执行操作并且不是专用于任何一种应用编程接口(API)。在一个实施例中,图形处理器的驱动器软件将专用于特定图形或媒体库的API调度转换成可由图形处理器处理的命令。在各实施例中,为由科纳斯(Khronos)集团所支持的开放图形库(OpenGL)和开放计算语言(OpenCL)、来自微软公司的Direct3D库、或者在一个实施例中的OpenGL和D3D两者提供支持。还可以为开源计算机视觉库(OpenCV)提供支持。如果可进行从未来API的流水线到图形处理器的流水线的映射,则具有兼容3D流水线的未来API也将受到支持。
图15A是根据实施例的展示了图形处理器命令格式的框图,并且图15B是根据实施例的展示了图形处理器命令序列的框图。图15A中的实线框展示了通常包括在图形命令中的组件,而虚线包括是可选的或者仅包括在图形命令的子集中的组件。图15A的示例性图形处理器命令格式900包括用于标识命令的目标客户端902的数据字段、命令操作码(opcode)904、以及用于命令的相关数据906。子操作码905和命令大小908也包括在一些命令中。
客户端902规定了处理命令数据的图形设备的客户端单元。在一个实施例中,图形处理器命令解析器检查每个命令的客户端字段以便调整命令的进一步处理并且将命令数据路由至适当的客户端单元。在一个实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元、以及媒体单元。每个客户端单元具有处理命令的相应处理流水线。一旦命令由客户端单元接收,则客户端单元读取操作码904和子操作码905(如果存在的话)以便确定待执行的操作。客户端单元使用命令的数据906字段中的信息来执行命令。针对一些命令,明确的命令大小908被期望限定命令的大小。在一个实施例中,命令解析器基于命令操作码自动确定命令中的至少一些命令的大小。在一个实施例中,命令经由双倍字长的倍数被对齐。
图15B中流程图示出了样本命令序列910。在一个实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的命令序列的版本来设置、执行并终止图形操作集合。出于示例性目的示出和描述了样本命令序列,然而,实施例不限于这些命令或者此命令序列。而且,命令可以作为一批命令以命令序列被下发,从而使得图形处理器将以至少部分同时的方式处理命令序列。
样本命令序列910可以以流水线转储清除(Flush)命令912开始以便使得任一活跃图形流水线完成针对流水线的当前未决命令。在一个实施例中,3D流水线922和媒体流水线924不同时进行操作。流水线转储清除被执行以使得活跃图形流水线完成任何未决命令。响应于流水线转储清除,用于图形处理器的命令解析器将停止命令处理直到活跃绘画引擎完成未决操作并且使得相关的读高速缓存失效。可选地,渲染高速缓存中被标记为‘脏’的任何数据可转储清除到存储器中。流水线转储清除命令912可以用于流水线同步或者用在将图形处理器置于低功率状态之前。
当命令序列需要图形处理器在流水线之间明确切换时,使用流水线选择命令913。在下发流水线命令之前在执行环境内仅需要一次流水线选择命令913,除非环境要下发针对两条流水线的命令。在一个实施例中,在经由流水线选择命令913的流水线切换之前正好需要流水线转储清除命令912。
流水线控制命令914配置用于操作的图形流水线并且用于对3D流水线922和媒体流水线924进行编程。流水线控制命令914配置活跃流水线的流水线状态。在一个实施例中,流水线控制命令914用于流水线同步并且用于在处理一批命令之前清除来自活跃流水线内的一个或多个高速缓存存储器中的数据。
返回缓冲器状态命令916用于配置返回缓冲器的集合以供相应的流水线写入数据。一些流水线操作需要分配、选择、或配置一个或多个返回缓冲器,在处理过程中操作将中间数据写入一个或多个返回缓冲器中。图形处理器还使用一个或多个返回缓冲器以便存储输出数据并且执行跨线程通信。返回缓冲器状态916包括选择返回缓冲器的大小和数量以用于流水线操作集合。
命令序列中的剩余命令基于用于操作的活跃流水线而不同。基于流水线判定920,命令序列被定制成用于以3D流水线状态930开始的3D流水线922、或者在媒体流水线状态940处开始的媒体流水线924。
针对3D流水线状态930的命令包括针对顶点缓冲器状态、顶点元素状态、恒定色彩状态、深度缓冲器状态、以及在处理3D图元命令之前待配置的其他状态变量的3D状态设置命令。至少部分地基于使用中的特定3D API来确定这些命令的值。3D流水线状态930命令还能够选择性地禁用或旁路掉特定流水线元件(如果将不使用那些元件的话)。
3D图元932命令用于提交待由3D流水线处理的3D图元。经由3D图元932命令被传递至图形处理器的命令和相关联的参数被转发至图形流水线中的顶点拾取函数中。顶点拾取函数使用3D图元932命令数据来生成顶点数据结构。顶点数据结构存储在一个或多个返回缓冲器中。3D图元932命令用于经由顶点着色器对3D图元执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程分派至图形处理器执行单元。
3D流水线922经由执行934命令或事件被触发。在一个实施例中,寄存器写入触发命令执行。在一个实施例中,经由命令序列中的‘go’或‘kick’命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行以便通过图形流水线对齐命令序列。3D流水线将针对3D图元来执行几何处理。一旦完成操作,则对所产生的几何对象进行光栅化并且像素引擎对所产生的像素进行着色。针对那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。
当执行媒体操作时,样本命令序列910跟随在媒体流水线924路径之后。通常,针对媒体流水线924进行编程的具体用途和方式取决于待执行的媒体或计算操作。在媒体解码过程中,具体的媒体解码操作可以卸载至媒体流水线。媒体流水线还可以被旁路掉,并且可以使用由一个或多个通用处理核提供的资源来整体地或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中,图形处理器用于使用计算着色器程序来执行SIMD向量运算,计算着色器程序与渲染图形图元不是明确相关的。
以与3D流水线922相似的方式对媒体流水线924进行配置。媒体流水线状态命令940的集合在媒体对象命令942之前被分派或放置于命令队列中。媒体流水线状态命令940包括用于配置媒体流水线元件的数据,媒体流水线元件将用于处理媒体对象。这包括用于在媒体流水线内配置视频解码和视频编码逻辑的数据,诸如编码或解码格式。媒体流水线状态命令940还支持将一个或多个指针用于包含一批状态设置的“间接”状态元件。
媒体对象命令942将指针供应至媒体对象以用于由媒体流水线进行处理。媒体对象包括存储器缓冲器,存储器缓冲器包含待处理的视频数据。在一个实施例中,在下发媒体对象命令942之前,所有的媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942进入排队,则经由执行934命令或等效的执行事件(例如,寄存器写入)来触发媒体流水线924。然后可以通过由3D流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一个实施例中,以与媒体操作相似的方式来配置和执行GPGPU操作。
图16展示了根据实施例的数据处理系统的示例性图形软件架构。软件架构包括3D图形应用1010、操作系统1020、以及至少一个处理器1030。处理器1030包括图形处理器1032以及一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。
在一个实施例中,3D图形应用1010包含一个或多个着色器程序,一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。应用还包括可执行指令1014,可执行指令采用适合用于由通用处理器核1034执行的机器语言。应用还包括由顶点数据限定的图形对象1016。
操作系统1020可以是来自微软公司的操作系统、专用UNIX式操作系统、或使用Linux内核的变体的开源UNIX式操作系统。当在使用Direct 3DAPI时,操作系统1020使用前端着色器编译器1024以便将采用HLSL的任何着色器指令1012编译成低级着色器语言。编译可以是即时编译,或者应用可执行共享预编译。在一个实施例中,在对3D图形应用1010进行编译的过程中,高级着色器被编译成低级着色器。
用户模式图形驱动器1026可以包含用于将着色器指令1012变换成硬件专用的表示的后端着色器编译器1027。当在使用OpenGL API时,将采用GLSL高级语言的着色器指令1012传递至用户模式图形驱动器1026以用于编译。用户模式图形驱动器使用操作系统内核模式函数1028来与内核模式图形驱动器1029进行通信。内核模式图形驱动器1029与图形处理器1032进行通信以便分派命令和指令。
在此所描述的各操作或功能程度上,它们可以被描述或定义为硬件电路、软件代码、指令、配置和/或数据。内容可以在硬件逻辑中被具体化、或者具体化为直接可执行软件(“对象”或“可执行”形式)、源代码、被设计成用于在图形引擎上执行的高级着色器代码、或者针对具体处理器或图形核的指令集中的低级组件语言代码。本文中所描述的实施例的软件内容可以经由一种其上存储有内容的制品或经由一种操作通信接口经由通信接口发送数据的方法被提供。
下面的条款和/或示例涉及另外的实施例:
一个示例实施例可以是一种方法,所述方法包括:判定图元是否位于多个样本之间的通道中,如果是,则剔除所述图元。所述方法还可以包括:其中,所述通道沿样本行或样本列。所述方法还可以包括:其中,所述通道沿对角线。所述方法还可以包括判定:一个顶点是否在通道内部,并且其他顶点中的一个是否在所述通道内在所述通道的第一侧上,并且所述剩余的顶点是否在所述通道的第二侧上,并且在这种情况下。所述方法还可以包括判定,所述判定包括:标识样本线;标识所述图元内部的与所述线垂直并且使通道外部的所述图元的顶点与线相交的线段;标识所述线段与那条线相交的点;标识连续样本是否在所述图元的外部,并且如果是,则剔除所述三角形。所述方法还可以包括:其中,所述线段是通过所述顶点到所述图元内部任何点的任意线。所述方法还可以包括:将顶点变换至经旋转的坐标系;针对所述经变换的顶点计算轴线对准的边界框;以及然后执行剔除测试。所述方法还可以包括:其中,判定包括:判定图元是否完全位于多个样本之间的通道中,不覆盖所述通道的任一边界/边缘上的样本。
另一示例实施例可以是一种或多种非瞬态计算机可读介质,存储有指令,所述指令被执行以执行包括以下各项的序列:判定图元是否基本上位于多个样本之间的通道中,如果是,则剔除所述图元。所述介质可以包括:其中,所述通道沿样本行或样本列。所述介质可以包括:其中,所述通道沿对角线。所述介质可以包括所述序列,所述序列包括判定:一个顶点是否在通道内部,并且其他顶点中的一个是否在所述通道内在所述通道的第一侧上,并且所述剩余的顶点是否在所述通道的第二侧上,并且在这种情况下。所述介质可以包括:其中,判定包括:标识样本线;标识所述图元内部的与所述线垂直并且使通道外部的所述图元的顶点与线相交的线段;标识所述线段与那条线相交的点;标识连续样本是否在所述图元的外部,并且如果是,则剔除所述三角形。所述介质可以包括:其中,所述线段是通过所述顶点到所述图元内部任何点的任意线。所述介质可以包括所述序列,所述序列包括:将顶点变换至经旋转的坐标系;针对所述经变换的顶点计算轴线对准的边界框;以及然后执行剔除测试。所述介质可以包括:其中,判定包括:判定图元是否完全位于多个样本之间的通道中,不覆盖所述通道的任一边界/边缘上的样本。
在另一示例实施例中可以是一种装置,所述装置包括:处理器,所述处理器用于判定图元是否基本上位于多个样本之间的通道中,如果是,则剔除所述图元;以及存储设备,所述存储设备耦合至所述处理器。所述装置可以包括:其中,所述通道沿样本行或样本列。所述装置可以包括:其中,所述通道沿对角线。所述装置可以包括所述处理器,所述处理器用于判定:一个顶点是否在通道内部,并且其他顶点中的一个是否在所述通道内在所述通道的第一侧上,并且所述剩余的顶点是否在所述通道的第二侧上,并且在这种情况下。所述装置可以包括所述处理器,所述处理器用于:标识样本线;标识所述图元内部的与所述线垂直并且使通道外部的所述图元的顶点与线相交的线段;标识所述线段与那条线相交的点;标识连续样本是否在所述图元的外部,并且如果是,则剔除所述三角形。所述装置可以包括:其中,所述线段是通过所述顶点到所述图元内部任何点的任意线。所述装置可以包括所述处理器,所述处理器用于:将顶点变换至经旋转的坐标系;针对所述经变换的顶点计算轴线对准的边界框;以及然后执行剔除测试。所述装置可以包括所述处理器,所述处理器用于:判定图元是否完全位于多个样本之间的通道中,不覆盖所述通道的任一边界/边缘上的样本。
在此描述的图形处理技术可以用各种硬件架构来实现。例如,图形功能可以被集成到芯片组内。可替代地,可以使用分立图形处理器。作为又另一个实施例,图形功能可以由通用处理器(包括多核处理器)来实现。
本说明书中通篇提到“一个实施例”或“实施例”表示结合所述实施例所述的具体特征、结构或特性包含在本公开所包含的至少一个实现中。因此,短语“一个实施例”或“在一实施例中”的出现不一定都表示同一个实施例。此外,除了所示的特定实施例以外,可以以其他适当的形式来实现所述特定特征、结构或特性,并且所有这样的形式都可以涵盖在本申请的权利要求内。
尽管有限数量的实施例已经被描述,但是本领域技术人员将理解大量的其修改和变型。旨在使得所附权利要求书覆盖落入本公开的真正精神和范围的所有此类修改和变体。
Claims (24)
1.一种方法,包括:
判定图元是否位于多个样本之间的通道中;以及
如果是,则剔除所述图元。
2.如权利要求1所述的方法,其中,所述通道沿样本行或样本列。
3.如权利要求1所述的方法,其中,所述通道沿对角线。
4.如权利要求1所述的方法,包括判定:一个顶点是否在通道内部,并且其他顶点中的一个是否在所述通道内在所述通道的第一侧上,并且剩余的顶点是否在所述通道的第二侧上,并且在这种情况下。
5.如权利要求4所述的方法,其中,判定包括:标识样本线;标识所述图元内部的与所述线垂直并且使通道外部的所述图元的顶点与线相交的线段;标识所述线段与那条线相交的点;标识连续样本是否在所述图元的外部,并且如果是,则剔除所述三角形。
6.如权利要求5所述的方法,其中,所述线段是通过所述顶点到所述图元内部任何点的任意线。
7.如权利要求1所述的方法,包括:将顶点变换至经旋转的坐标系;针对所述经变换的顶点计算轴线对准的边界框;以及然后执行剔除测试。
8.如权利要求1所述的方法,其中,判定包括:判定图元是否完全位于多个样本之间的通道中,不覆盖所述通道的任一边界/边缘上的样本。
9.一种或多种非瞬态计算机可读介质,存储有指令,所述指令被执行以执行包括以下各项的序列:
判定图元是否基本上位于多个样本之间的通道中;以及
如果是,则剔除所述图元。
10.如权利要求9所述的介质,其中,所述通道沿样本行或样本列。
11.如权利要求9所述的介质,其中,所述通道沿对角线。
12.如权利要求9所述的介质,所述序列包括判定:一个顶点是否在通道内部,并且其他顶点中的一个是否在所述通道内在所述通道的第一侧上,并且剩余的顶点是否在所述通道的第二侧上,并且在这种情况下。
13.如权利要求12所述的介质,其中,判定包括:标识样本线;标识所述图元内部的与所述线垂直并且使通道外部的所述图元的顶点与线相交的线段;标识所述线段与那条线相交的点;标识连续样本是否在所述图元的外部,并且如果是,则剔除所述三角形。
14.如权利要求13所述的介质,其中,所述线段是通过所述顶点到所述图元内部任何点的任意线。
15.如权利要求9所述的介质,所述序列包括:将顶点变换至经旋转的坐标系;针对所述经变换的顶点计算轴线对准的边界框;以及然后执行剔除测试。
16.如权利要求9所述的介质,其中,判定包括:判定图元是否完全位于多个样本之间的通道中,不覆盖所述通道的任一边界/边缘上的样本。
17.一种装置,包括:
处理器,所述处理器用于判定图元是否基本上位于多个样本之间的通道中,并且如果是,则剔除所述图元;以及
存储设备,所述存储设备耦合至所述处理器。
18.如权利要求17所述的装置,其中,所述通道沿样本行或样本列。
19.如权利要求17所述的装置,其中,所述通道沿对角线。
20.如权利要求17所述的装置,所述处理器用于判定:一个顶点是否在通道内部,并且其他顶点中的一个是否在所述通道内在所述通道的第一侧上,并且剩余的顶点是否在所述通道的第二侧上,并且在这种情况下。
21.如权利要求20所述的装置,所述处理器用于:标识样本线;标识所述图元内部的与所述线垂直并且使通道外部的所述图元的顶点与线相交的线段;标识所述线段与那条线相交的点;标识连续样本是否在所述图元的外部,并且如果是,则剔除所述三角形。
22.如权利要求21所述的装置,其中,所述线段是通过所述顶点到所述图元内部任何点的任意线。
23.如权利要求17所述的装置,所述处理器用于:将顶点变换至经旋转的坐标系;针对所述经变换的顶点计算轴线对准的边界框;以及然后执行剔除测试。
24.如权利要求17所述的装置,所述处理器用于:判定图元是否完全位于多个样本之间的通道中,不覆盖所述通道的任一边界/边缘上的样本。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/534,374 | 2014-11-06 | ||
US14/534,374 US10217272B2 (en) | 2014-11-06 | 2014-11-06 | Zero-coverage rasterization culling |
PCT/US2015/054340 WO2016073125A1 (en) | 2014-11-06 | 2015-10-07 | Zero-coverage rasterization culling |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107077758A true CN107077758A (zh) | 2017-08-18 |
CN107077758B CN107077758B (zh) | 2021-08-24 |
Family
ID=55909602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580058459.XA Active CN107077758B (zh) | 2014-11-06 | 2015-10-07 | 零覆盖光栅化剔除 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10217272B2 (zh) |
EP (1) | EP3216009A4 (zh) |
CN (1) | CN107077758B (zh) |
WO (1) | WO2016073125A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9633458B2 (en) * | 2012-01-23 | 2017-04-25 | Nvidia Corporation | Method and system for reducing a polygon bounding box |
US20170330371A1 (en) * | 2014-12-23 | 2017-11-16 | Intel Corporation | Facilitating culling of composite objects in graphics processing units when such objects produce no visible change in graphics images |
US9959665B2 (en) * | 2015-07-21 | 2018-05-01 | Qualcomm Incorporated | Zero pixel culling for graphics processing |
US10460513B2 (en) * | 2016-09-22 | 2019-10-29 | Advanced Micro Devices, Inc. | Combined world-space pipeline shader stages |
GB2591803B (en) * | 2020-02-07 | 2022-02-23 | Imagination Tech Ltd | Graphics processing method and system for rendering items of geometry based on their size |
GB2591802B (en) | 2020-02-07 | 2022-03-23 | Imagination Tech Ltd | Graphics processing method and system for rendering items of geometry based on their size |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2020311A1 (en) * | 1989-08-01 | 1991-02-02 | William H. Paxton | Method for editing character bitmaps at small sizes |
EP0466330A2 (en) * | 1990-07-13 | 1992-01-15 | Adobe Systems Inc. | Method for editing character bit maps at small sizes using connected runs |
JPH06309425A (ja) * | 1990-10-12 | 1994-11-04 | Internatl Business Mach Corp <Ibm> | グラフィックディスプレイ装置及び方法 |
US20040246251A1 (en) * | 2003-03-27 | 2004-12-09 | Simon Fenney | Tiling system for 3D rendered graphics |
US7292239B1 (en) * | 2004-08-06 | 2007-11-06 | Nvidia Corporation | Cull before attribute read |
US7307628B1 (en) * | 2004-08-06 | 2007-12-11 | Nvidia Corporation | Diamond culling of small primitives |
US7400325B1 (en) * | 2004-08-06 | 2008-07-15 | Nvidia Corporation | Culling before setup in viewport and culling unit |
EP1950706A2 (en) * | 2007-01-24 | 2008-07-30 | Vivante Corporation | Method for distributed clipping outside of view volume |
US7468726B1 (en) * | 2005-12-01 | 2008-12-23 | Nvidia Corporation | Culling in a vertex processing unit |
CN101661741A (zh) * | 2008-08-29 | 2010-03-03 | 富士通株式会社 | 图形光栅扫描中的三角形遍历方法和装置 |
US20100097377A1 (en) * | 2008-10-20 | 2010-04-22 | Jon Hasselgren | Graphics Processing Using Culling on Groups of Vertices |
US8537168B1 (en) * | 2006-11-02 | 2013-09-17 | Nvidia Corporation | Method and system for deferred coverage mask generation in a raster stage |
CN103608850A (zh) * | 2011-06-23 | 2014-02-26 | 英特尔公司 | 带选择性剔除的随机光栅化 |
CN103999443A (zh) * | 2011-12-07 | 2014-08-20 | 英特尔公司 | 基于线性化5d边缘方程的样本剔除 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9009127D0 (en) * | 1990-04-24 | 1990-06-20 | Rediffusion Simulation Ltd | Image generator |
US6995769B2 (en) * | 2002-03-21 | 2006-02-07 | Hewlett-Packard Development Company, L.P. | Systems and methods for compressing rasterization setup data within a sort middle graphics architecture |
US20070171219A1 (en) * | 2006-01-20 | 2007-07-26 | Smedia Technology Corporation | System and method of early rejection after transformation in a GPU |
US8212840B2 (en) * | 2006-10-23 | 2012-07-03 | Qualcomm Incorporated | 3-D clipping in a graphics processing unit |
GB201104066D0 (en) * | 2011-03-09 | 2011-04-20 | Imagination Tech Ltd | Compression of a tessellated primitive index list in a tile rendering system |
-
2014
- 2014-11-06 US US14/534,374 patent/US10217272B2/en active Active
-
2015
- 2015-10-07 CN CN201580058459.XA patent/CN107077758B/zh active Active
- 2015-10-07 WO PCT/US2015/054340 patent/WO2016073125A1/en active Application Filing
- 2015-10-07 EP EP15857600.9A patent/EP3216009A4/en not_active Withdrawn
-
2018
- 2018-12-27 US US16/233,449 patent/US10776994B2/en active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2020311A1 (en) * | 1989-08-01 | 1991-02-02 | William H. Paxton | Method for editing character bitmaps at small sizes |
EP0466330A2 (en) * | 1990-07-13 | 1992-01-15 | Adobe Systems Inc. | Method for editing character bit maps at small sizes using connected runs |
JPH06309425A (ja) * | 1990-10-12 | 1994-11-04 | Internatl Business Mach Corp <Ibm> | グラフィックディスプレイ装置及び方法 |
US20040246251A1 (en) * | 2003-03-27 | 2004-12-09 | Simon Fenney | Tiling system for 3D rendered graphics |
US7400325B1 (en) * | 2004-08-06 | 2008-07-15 | Nvidia Corporation | Culling before setup in viewport and culling unit |
US7307628B1 (en) * | 2004-08-06 | 2007-12-11 | Nvidia Corporation | Diamond culling of small primitives |
US7292239B1 (en) * | 2004-08-06 | 2007-11-06 | Nvidia Corporation | Cull before attribute read |
US7468726B1 (en) * | 2005-12-01 | 2008-12-23 | Nvidia Corporation | Culling in a vertex processing unit |
US8537168B1 (en) * | 2006-11-02 | 2013-09-17 | Nvidia Corporation | Method and system for deferred coverage mask generation in a raster stage |
EP1950706A2 (en) * | 2007-01-24 | 2008-07-30 | Vivante Corporation | Method for distributed clipping outside of view volume |
CN101661741A (zh) * | 2008-08-29 | 2010-03-03 | 富士通株式会社 | 图形光栅扫描中的三角形遍历方法和装置 |
US20100097377A1 (en) * | 2008-10-20 | 2010-04-22 | Jon Hasselgren | Graphics Processing Using Culling on Groups of Vertices |
CN103608850A (zh) * | 2011-06-23 | 2014-02-26 | 英特尔公司 | 带选择性剔除的随机光栅化 |
CN103999443A (zh) * | 2011-12-07 | 2014-08-20 | 英特尔公司 | 基于线性化5d边缘方程的样本剔除 |
Also Published As
Publication number | Publication date |
---|---|
CN107077758B (zh) | 2021-08-24 |
US20160133045A1 (en) | 2016-05-12 |
WO2016073125A1 (en) | 2016-05-12 |
US10217272B2 (en) | 2019-02-26 |
US10776994B2 (en) | 2020-09-15 |
EP3216009A4 (en) | 2018-06-06 |
EP3216009A1 (en) | 2017-09-13 |
US20190130634A1 (en) | 2019-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10497173B2 (en) | Apparatus and method for hierarchical adaptive tessellation | |
CN109564695A (zh) | 用于高效3d图形流水线的装置和方法 | |
US10354434B1 (en) | Level of detail selection during ray tracing | |
US10043303B2 (en) | Methods and apparatus for more efficient ray tracing of instanced geometry | |
US10580189B2 (en) | Apparatus and method for optimized ray tracing | |
CN106575449A (zh) | 仅位置着色管线 | |
CN109564700A (zh) | 用于取决于纹理的丢弃操作的分级式Z剔除(HiZ)优化 | |
US20170178398A1 (en) | Method and apparatus for extracting and using path shading coherence in a ray tracing architecture | |
CN109643464A (zh) | 用于高效深度预过程的方法和装置 | |
CN108369733A (zh) | 使用三角形的属性的加权平均来合并粗像素着色的片段 | |
CN107077758A (zh) | 零覆盖光栅化剔除 | |
CN107077833B (zh) | 用于最后排序架构的高效的帧到帧相干性利用的装置和方法 | |
CN107408210A (zh) | 基于边缘的覆盖掩码压缩 | |
CN109643461A (zh) | 用于在光线追踪架构内对多个连续光线-表面相交点进行正确排序和枚举的方法和设备 | |
US10909753B2 (en) | Method and apparatus for sampling pattern generation for a ray tracing architecture | |
CN107004293A (zh) | 仅位置流水线中的宽松拣分 | |
CN106575440A (zh) | 恒定缓冲器大小多采样抗混叠深度压缩 | |
CN107004294A (zh) | 用于高吞吐量栅格器的方法和装置 | |
WO2017112146A1 (en) | Apparatus and method for triangle-pair merging | |
CN109564697A (zh) | 经分层Z剔除(HiZ)优化的阴影映射 | |
CN107251097A (zh) | 高效细分高速缓存 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |