CN101996391A - 用于存储和取回图像数据的技术 - Google Patents
用于存储和取回图像数据的技术 Download PDFInfo
- Publication number
- CN101996391A CN101996391A CN2010102581720A CN201010258172A CN101996391A CN 101996391 A CN101996391 A CN 101996391A CN 2010102581720 A CN2010102581720 A CN 2010102581720A CN 201010258172 A CN201010258172 A CN 201010258172A CN 101996391 A CN101996391 A CN 101996391A
- Authority
- CN
- China
- Prior art keywords
- pixel
- shade
- primitive attribute
- pel
- attribute
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/52—Parallel processing
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
本申请提供了用于存储和取回图像数据的技术。在图形流水线中,在光栅化级期间或结束时,修剪后输出级存储图元,并且像素存储在存储器的一部分中。在光栅化级期间或结束时图元和像素的可用性允许实现处理图元和像素的各种方式。
Description
技术领域
本文公开的主题总体上涉及用于存储和取回图像数据的技术。
背景技术
在诸如计算机游戏、计算机动画和医学成像之类的领域中对于图形处理的需求是显然的。图形流水线负责渲染图形。已知了多种图形流水线配置。例如,在Segal,M.和Akeley,K.的“The OpenGL Graphics System:ASpecification(Version 2.0)”(2004)和The Microsoft DirectX 9 Programmable Graphics Pipe-line,Microsoft Press(2003)中说明了流行的渲染流水线架构。当代的流水线具有三个可编程级,一个用于处理顶点数据(例如,顶点着色器),第二个用于处理几何图元(例如,几何着色器),第三个用于处理像素片段(fragment)(例如,片段或像素着色器)。MicrosoftDirectX 10引入了几何着色器和几何流输出级。在D.Blythe的“The Direct3D 10System”,Microsoft Corporation(2006)中提供了Direct3D 10系统的概述。DirectX是涉及输入设备、音频和视频/图形的一组应用程序接口(API)。
附图说明
在附图中示例性而非限制性地示出了本发明的多个实施例,附图中相似的参考标号指代相似的单元。
图1以方框图形式描绘了根据实施例的图形处理流水线的实例。
图2描绘了根据多个实施例的像素覆盖遮罩(pixel coverage mask)的常规像素着色器处理以及图块(tile)中的像素覆盖遮罩的处理的实例。
图3描绘了在由单个核心处理图块时的核心利用情况以及在将单个图块的处理分配给多个核心之前及之后的核心利用情况的实例。
图4描绘了图元和像素覆盖遮罩的定制光栅化处理的实例。
图5描绘了根据实施例的以缓存模式存储图元和像素覆盖遮罩的方式的流程图。
图6描绘了根据实施例的以缓存模式取回图元和像素覆盖遮罩的方式的流程图。
具体实施方式
本说明书通篇中对“一个实施例”或“实施例”的提及意思是结合该实施例说明的具体特征、结构或特性包括在本发明的至少一个实施例中。因此,本说明书通篇中多个位置出现的短语“在一个实施例中”或“实施例”并不一定全都指代相同的实施例。而且,所述的具体特征、结构或特性可以被合并在一个或多个实施例中。
各个实施例提供了一种用以在图形流水线中的光栅化级期间或光栅化级之后存储图元属性和像素覆盖信息的方式。修剪后(post-clip)流输出级使用存储器中的缓存器的多个部分来存储图元及与图元相关的像素覆盖遮罩。被称为图块的屏幕的子区域是屏幕空间中像素数据的空间相干的集合。按照每图块来排序图元并将其修剪至图块边界,可选地采用像素覆盖遮罩来进行这些操作。像素覆盖遮罩确定了像素与图元的关系。例如,像素覆盖遮罩可以标识像素是在图元中、图元外还是在图元的边缘上。可以以多种方式读出并处理所存储的图元和像素覆盖信息。例如,可以并行地或顺序地读出与同一图块相关的像素覆盖遮罩,并且可以将与同一图块相关的多个像素覆盖遮罩一起进行处理。可以对与同一图块相关联的像素覆盖遮罩执行像素处理,以使得处理后的数据在可能的情况下可以重复用于像素覆盖遮罩。
DirectX 10规定了在几何着色器中产生修剪后的三角形数据。DirectX10仅揭示了在像素着色器中的标量模式的被覆盖的像素覆盖遮罩。相对照地,各个实施例借助于单指令多数据(SIMD)向量化编码或者通过在多个核心或线程上并行地运行任务,使得对于并行地处理整个图块而言有多个每图元像素覆盖遮罩可用。
图1以方框图形式描绘了根据实施例的图形处理流水线100的实例。在各个实施例中,流水线100是可编程的,至少是基于微软的DirectX 10或OpenGL 2.1而可编程的。在各个实施例中,可以使用一个或多个应用程序接(API)配置全部级。绘制图元(例如,三角形、矩形、正方形、直线、点或具有至少一个顶点的形状)在这个流水线的顶端流入,并被变换和光栅化为屏幕空间像素,以便在计算机屏幕上绘制。
输入汇集器(assembler)级102用于从多达8个顶点缓存器输入流收集顶点数据。可以对其它数量的顶点缓存器输入流进行收集。在多个实施例中,输入汇集器级102还可以支持称为“实例化(instancing)”的处理,其中,输入汇集器级102仅用一个绘图调用对对象进行几次复制。
顶点着色器(VS)级104用于将顶点从对象空间变换到修剪空间。VS级104用于读取单个顶点,并产生单个变换后的顶点作为输出。
几何着色器级106用于取回单个图元的顶点,并产生0个或多个图元的顶点。几何着色器级106用于输出图元和直线作为顶点的已连接带。在一些情况下,几何着色器级106用于在称为数据放大的处理中,从来自顶点着色器级的每个顶点发出多达1024个顶点。此外,在一些情况下,几何着色器级106用于从顶点着色器级104取得一组顶点,并对其进行组合以发出较少的顶点。
流输出级108用于将来自几何着色器级106的几何数据直接传递到存储器150中的帧缓存器的一部分中。在数据从流输出级108移动到帧缓存器后,数据能够返回到流水线中的任何点来进行额外的处理。例如,流输出级108可以以顺序的方式将由几何着色器级106输出的顶点信息的子集复制到存储器150中的输出缓存器。
光栅化级110用于执行诸如修剪、剔除(culling)、片段产生、裁剪(scissoring)、角度划分(perspective dividing)、视区变换(viewport transformation)、图元设置和深度偏移之类的操作。另外,光栅化级110可以执行以下的任意一个或全部:将屏幕空间图元与图块(例如,屏幕的子区域)相关联以便进行并行化处理;将图元修剪至图块的范围(或者在单个图块情况下的整个屏幕视区);产生像素覆盖遮罩,其是由每个图块中的图元所接触的像素的列表;和/或为每个被接触像素产生表面和材料属性的内插值。
光栅化级110用于提供至少一个输出流。输出流包括两个子流:一个子流用于图元,一个子流用于像素覆盖遮罩。可以以不同速率输出子流。可以针对每个光栅化的图块(一旦其变为可用)独立地使用流数据。这在多线程环境中是有利的,多线程环境中,将工作分配给不同的线程并且对其进行并行处理,同时在图形流水线中仍然正在产生其它图块的流数据。
相关于像素的流水线排序处理,在流水线中将修剪后流输出级112设置在光栅化级110之后及像素着色级114之前。修剪后流输出级112用于将图元流存储至图元存储器区152的一部分中,并将像素覆盖遮罩存储至图块存储器区154的一部分中。在一些情况下,由光栅化级110产生的像素覆盖遮罩不存储在存储器区154中。在此情况下,不分配存储器区154。
在多个实施例中,图元流包括经修剪的屏幕空间图元,并且是按照绘制顺序的,但不必按照每图块进行编组。图元流包括图元的屏幕空间顶点位置以及用于定制内插的每顶点深度信息。基于对于存储器占用区域、特征和性能的应用需求,图元的其它每顶点属性包括:纹理坐标、颜色、存在时间、发光度(radiance)、辐照度(irradiance)和深度及可被包含在流中的那些属性。
在多个实施例中,像素覆盖流参考图元,并且按照每修剪后图元而被编组。像素覆盖遮罩定义了哪些屏幕像素被相应的图元所接触。在一些实施例中,不存储这个像素覆盖遮罩流。作为替代,由定制的应用侧的覆盖遮罩产生代码来产生像素覆盖遮罩。产生像素覆盖遮罩的应用知道图元的顶点位置,并基于顶点位置来判断像素是否与图元相关联。这个应用可以在存储器150中分配缓存器,以将像素覆盖遮罩存储至存储器中所分配的区域中。
在多个实施例中,修剪后流输出级112用于以流模式或以缓存模式将图元数据及可任选的像素覆盖数据存储至大小可变的存储器缓存器中,并且其具有链接列表式的表示,该表示使得能够按照图元和像素覆盖流的绘制顺序进行顺序地使用。如果产生了像素覆盖遮罩,则覆盖流数据结构包含指向图元流中其相关图元的数据结构的指针。
在流模式中,由应用在每图块回调函数(per-tile call-back function)中处理图元数据。在流模式中,仅有该流的若干部分(例如,为一个图块的大小)可立即用于该应用。在流模式中,可以在处理之后重写图元和像素覆盖数据。在应用完成了对该流的该图块大小的部分的处理之后,则该流的该部分可被重写。这个模式使用了较少的存储器,使得在多线程环境中只要数据准备好就能够处理数据,但不能实现图块间的工作共享。
在缓存模式中,将用于整个屏幕的数据存储在缓存器中,并在产生了整个流(例如,全部图块或特定数量或区域的图块)之后可由应用对其进行访问。因此,在缓存模式中,将一个帧的全部图块的像素覆盖遮罩存储在图块存储器区154中。图块存储器区154由修剪后输出级112填充,并且如果已存储了一帧的全部图块的像素覆盖遮罩或者已填满了图块存储器区154,则一帧的图块的像素覆盖遮罩就可用于处理。一个或多个应用随后可以立即处理全部数据。
在流模式和缓存模式两者中,将数据以流形式输出至在图形流水线上管理的存储器资源,并且数据不是直接可编程的且应用不可直接访问数据。可以在应用侧在每图块回调函数中处理数据。可以在不干扰应用侧的情况下在后续的渲染回次(pass)中将数据以流形式传送回流水线,或者将该数据复制到分级资源,从而使其可由应用异步地读取。图形流水线不需要以任何方式对数据流的产生进行调度,因为图形流水线知道被管理的流存储器资源的依存性。如果在后续的渲染回次中使用流输出数据,或者如果在应用处理完该数据之后可将该数据丢弃,则会发生存储器资源的依存性。在缓存模式中,应用可以通过请求在资源上锁定或者通过异步复制来访问数据。
像素着色器级114用于读取每个单一像素片段的属性,并产生具有颜色值和深度值的输出片段。
输出合并器级116用于对来自像素着色器级114的片段执行模板和深度测试。在一些情况下,输出合并器级116用于执行渲染目标混合。
存储器150可以被实现为以下任何一种或其组合:易失性存储器设备,例如但不限于随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态RAM(SRAM),或者任何其他类型的基于半导体的存储器或磁存储器。
图2描绘了根据多个实施例的对像素的常规像素着色器处理以及图块中像素的处理的实例。对于在已知的图形流水线中的常规像素着色器处理,可以将来自图元的像素分布在多个像素着色器上进行处理。然而,在多个实施例中,与同一图块相关的像素可用于进行处理。对与同一图块相关的像素的处理可以提供优于常规像素着色器的像素处理的一些优点,但这些优点不是任何实施例的必需特征。首先,可以针对图块中的全部像素预先计算并重复使用对于单个图元而言是共用的许多计算。这种计算的实例是用于三角形内测试(inside-triangle test)和早出策略(early-out strategy)的内插度量。其次,按每图元的处理提供了传送相邻像素数据的灵活性,并从而在应用侧实现了诸如光晕(bloom)和景深之类的屏幕空间效果。
在已知图形流水线中,图块处理局限于几何或像素着色器中的单个核心。然而,多个实施例允许使用多个核心来并行地处理图块的图元和像素。在多个实施例中,在光栅化后图元和像素的可用性允许对图元进行图块化处理,例如,对图像子区域的处理。另外,在光栅化后图元和像素的可用性允许用以在应用侧将工作并行化并重新分配的能力。例如,多个核心可以并行处理图元和像素。结果,在光栅化后图元和像素的可用性与常规图形流水线相比实现了相当大的性能提高。
对于很多趋于在屏幕空间中具有空间一致性的图形处理技术,按图块顺序的访问方式实现了相当大的性能优势。这种排序实现了图形高速缓存的最佳使用,并避免了高速缓存误取数据的性能损失。
图3描绘了在单核心处理图块时的核心利用情况以及在将单个图块的处理分配到多个核心之后的核心利用情况的实例。该曲线图表示随时间的向量利用情况。曲线图302显示了每个图块的工作局限于单个核心。一些核心迅速进入空闲状态,而其他核心仍处理工作量大的图块。曲线图304显示了在多个核心之间重新分配那些图块的工作,以实现好得多的随时间的核心利用情况。
在多个实施例中,光栅化后图元和像素的可用性使得能够进行对图元和像素覆盖遮罩的定制处理。在每次要对屏幕的一部分进行渲染时,可以调用回调例程。示例性的回调例程是图块渲染操作。在流模式中,可以通过在实现图元和像素的定制光栅化处理的回调例程中增加代码来增加新的图形特征和效果。
图4描绘了图元和像素的定制光栅化处理的实例。例如,定制的光栅化处理可以包括不规则的光栅化。不规则的光栅化包括在渲染图像时利用非2D网格数据结构的光栅化。例如,对于不规则的光栅化和加阴影应用,应用可以实现定制内插技术,这是由于按照每屏幕顶点来提供图元专用的表面和材料属性,并且由于图元顶点值是可用的。定制内插可以包括:基于图元顶点值,来确定在偏心像素位置处的表面属性值。此图元顶点数据在常规像素着色器中是不可用的,因为仅为常规像素着色器提供了在像素中心处的内插值。由使用流输出的应用进行该定制内插,并且因此那些结果可以由该应用而不是由图形流水线使用。
作为第二个实例,应用可以选择放弃光栅化器中的规则的覆盖遮罩计算,而改为计算定制的覆盖遮罩。覆盖遮罩是用于定义哪些像素被图元接触的遮罩。例如,设计者可以确定将何种规则用于确定像素是否接触图元。例如,如果像素仅仅接触图元但不在图元内部,则定制的覆盖遮罩可以允许图元接触该像素。应用可以使用那些定制的覆盖遮罩。
在Gregory S.Johnson、William R.Mark和Christopher A.Burns的“The Irregular Z-Buffer and its Application to Shadow Mapping”(奥斯丁的得克萨斯大学计算机科学系的技术报告TR-04-09)中说明了不规则的Z缓存。在该文献的图3中,黄色圆点表示像素内的位置,在这些位置处计算诸如颜色和深度之类的图元属性。这个计算称为“内插”。参考该文献的图3,在传统图形流水线中,在像素中心处计算深度。相对照地,对于不规则的Z缓存,在任意位置处确定深度(也称为“Z”)。在多个实施例中,对图元和像素覆盖遮罩的存储允许应用在任意位置处进行内插,此举用于不规则的Z缓存的实现中。
图5描绘了根据实施例的过程500的流程图,其示出了用以以缓存模式存储图元和像素的方式。图5的过程可以由处理器执行的应用来执行。块502包括:在存储器中分配图块缓存器以存储与图块相关的像素覆盖遮罩,并且在存储器中分配图元缓存器以存储图元。在应用要产生定制的像素覆盖遮罩的情况下不必执行块502。例如,在应用要产生定制的像素覆盖遮罩的情况下,可以不执行在存储器中分配图块缓存器以存储与图块相关的像素覆盖遮罩的操作。在应用要产生定制的像素覆盖遮罩的情况下,应用可以分配缓存器以存储该定制的像素覆盖遮罩。例如,图块可以是4×4像素区域。例如,在以下的伪代码中,指令SetFrontEndSOTargets分配这些缓存器。
块504包括:发出调用以将图元属性从光栅化器存储至图元缓存器中,并将与图元相关的像素覆盖遮罩从光栅化器存储至图块缓存器中。在应用要产生定制的像素覆盖遮罩的情况下,可以不执行发出调用以将与图元相关的像素覆盖遮罩从光栅化器存储至图块缓存器中的操作。
块506包括:禁止将像素覆盖遮罩和图元属性存储至所分配的缓存器中。例如在以下的伪代码中,指令FrontEndSOSetTargets禁止在所分配的缓存器中进行存储。在应用要产生定制的像素覆盖遮罩的情况下,可以不执行禁止将像素覆盖遮罩存储至所分配的缓存器中的操作。
图6描绘了根据实施例的过程600的流程图,其示出了用以访问图元属性和像素覆盖遮罩的方式。过程600可以由主机侧的应用执行。块602包括:确定图元属性缓存器和图块缓存器的特性。例如,块602可以包括:取回与每个缓存器相关的溢出标志,并确定存储在图块缓存器中的图块数量。在以下的伪代码中,指令Query_GetData取回溢出标志。
块604包括:确定是否发生图块缓存器和图元缓存器的溢出。例如,块604可以包括:基于溢出标志来确定这些缓存器的溢出。如果检测到溢出,则该过程可以退出。在多个实施例中,该过程可以请求图块缓存器和图元缓存器的额外的存储器,以使得这些缓存器的溢出不会发生。所述额外的存储器可以大于为溢出的缓存器所分配的存储空间。例如,额外的存储空间可以允许存储比在图块缓存器中所存储的图块更多的图块,以及存储比在图元缓存器中所存储的图元更多的图元。例如,在以下的伪代码中,指令SetFrontEndSOTargets分配缓存器的大小。因此,在指令SetFrontEndSOTargets的下一次执行中,可以改变缓存器的大小。
块606包括:请求对存储了图元属性及相关像素覆盖遮罩的缓存器或缓存器的多个部分进行存储器锁定。存储器锁定可以包括拒绝其他过程重写感兴趣的缓存器中的数据。在以下的伪代码中,指令ViewLock导致锁定图块缓存器的一部分。
块608包括:取回所存储的图元属性及相关像素覆盖遮罩。可以释放所取回的图元数据以便以任何方式进行处理。例如,参考图4所述的过程可以处理所述图元和像素数据。
块610包括:释放缓存器的被锁定部分的存储器锁定。在以下的伪代码中,指令ViewUnlock释放缓存器的被锁定部分,以使得缓存器可以由其他过程读取或写入。
以下提供关于存储图元和像素(图5)及访问所存储的图元和像素(图6)的方式的伪代码。
///////////////////////////////////////////////////
//1.初始化
//这些资源是流的句柄,正如普通Omatic资源一样
OMATIC_RESOURCE_HEADER mTriangleStream;
OMATIC_RESOURCE_HEADER mQQuadStream;
//Mode#1-静态模式,从用户侧分配缓存器,当存储器满时停止填充
OM_U32x dataSize=...
void*data=ArchAlignedMalloc(dataSize,CACHE_LINE_SIZE);
OMATIC_FORMAT format=OMATICFMT_STATIC_STREAMDATA;
OM_U32 flags=OMATIC_BIND_STREAM_OUTPUT|OMATIC_BIND_CPU_READ;
Omatic_ResourceInitBuffer(mpDev,&mTriangleStream,data,pitch,dataSize,format,flags);
Omatic_ResourceInitBuffer(mpDev,&mQQuadStream,data+offset,pitch,dataSize,format,
flags);
//Mode#2-动态模式,使得Omaha管理增长的缓存器
OMATIC_FORMAT format=OMATICFMT_DYNAMIC_STREAMDATA;
Omatic_ResourceInitBuffer(mpDev,&mTriangleStream,NULL,0,0,format,flags);
Omatic_ResourceInitBuffer(mpDev,&mQQuadStream,NULL,0,0,format,flags);
///////////////////////////////////////////////////
//2.渲染时间
//实现前端流输出(静态或动态)
Omatic_SetFrontEndSOTargets(mpDev,&mTriangleStream,&mQQuadStream);
Omatic_Draw(...);
Omatic_Draw(...);
//Disable
Omatic_FrontEndSOSetTargets(mpDev,0,0);//可选的
///////////////////////////////////////////////////
//3.输出流的读回
Omatic_ViewsSubresourcesEnsureRenderingFinished(mpRenderTarget->pFullView);
OMATIC_QUERY_SO_STATISTICS stats;
Omatic_Query_GetData(&stats);//我们需要在渲染时间的开始/结束查询吗?
assert(!stats.Overflow);
Omatic_ViewLock(mTriangleStream.pFullView,0,0);
Omatic_ViewLock(mQQuadStream.pFullView,0,0);
{
const OMAHA_STREAMOUT_TRIANGLE*triangleData=
(const OMAHA_STREAMOUT_TRIANGLE*)mTriangleStream.pData;
const OMAHA_STREAMOUT_QQUAD*quadData=
(const OMAHA_STREAMOUT_QQUAD*)mQQuadStream.pData;
const OMAHA_STREAMOUT_QQUAD*qq=quadData;
for(OM_U64 i=0;i<stats.QQuadCount;++i)
{
OMAHA_STREAMOUT_TRIANGLE*curTriangle=triangleData[qq->TIndex];
dprintf(″QQ;T#%d,%d%d M;%x\n″,qq->TIndex,qq->X,qq->Y,qq->Mask);
++qq;
}
}
Omatic_ViewUnlock(mQQuadStream.pFullView,0);
Omatic_ViewUnlock(mTriangleStream.pFullView,0);
///////////////////////////////////////////////////
//功能签名
///////////////////////////////////////////////////
/**\简要设定前端(修剪后)流输出指针。暗示无需后端处理。
*
*设定指针为空,以便开启正常渲染。
*
*\参数pDev是这个调用影响的::OMATIC_DEVICE。
*\参数pTriangleSOTarget是用以接收经修剪的(屏幕空间)三角形的流输出缓存器资源
*\参数pQQuadSOTarget是用以接收正方形流的流输出缓存器资源
*/
void Omatic_SetFrontEndSOTargets(OMATIC_DEVICE*pDev,
OMATIC_RESOURCE_HEADER*pTriangleSOTarget,
OMATIC_RESOURCE_HEADER*pQQuadSOTarget
//void*pfOverflowFunction
);
//流数据格式
typedef struct_OMAHA_STREAMOUT_SCREEN_VERTEX
{
OM_FIX8 XX; //有符号24.8
OM_FIX8 YY; //有符号24.8
OM_F32 ZZ;
}OMAHA_STREAMOUT_SCREEN_VERTEX;
typedef struct_OMAHA_STREAMOUT_INTERPOLANT
{
OM_F32 AA;
OM_F32 BB;
OM_F32 CC;
}OMAHA_STREAMOUT_INTERPOLANT;
typedef struct_OMAHA_STREAMOUT_TRIANGLE
{
OMAHA_STREAMOUT_SCREEN_VERTEX V[3];
OMAHA_STREAMOUT_INTERPOLANT Z;
}OMAHA_STREAMOUT_TRIANGLE;
typedef struct_OMAHA_STREAMOUT_QQUAD
{
OM_U32x TIndex;
OM_U16 Mask;
OM_U8 X;
OM_U8 Y;
}OMAHA_STREAMOUT_QQUAD;
本发明的实施例可以实现为以下任何一个或其组合:使用主板互连的一个或多个微芯片或集成电路、硬连线逻辑、由存储器设备存储并由微处理器执行的软件、固件、专用集成电路(ASIC)和/或现场可编程门阵列(FPGA)。示例性地,术语“逻辑”可以包括软件或硬件和/或软件和硬件的组合。
可以在多种硬件架构中实现本文所述的图形和/或视频处理技术。例如,图形和/或视频功能可以集成在芯片组中。或者,可以使用分立的图形和/或视频处理器。作为再另一个实施例,可以由包括多核处理器在内的通用处理器来实现图形和/或视频功能。在另一个实施例中,可以在消费电子设备中实现这些功能,例如,便携式移动计算机或具有用以显示由图形流水线处理的图像或视频的显示设备的移动电话。
例如,可以作为可包括一个或多个机器可读介质的计算机程序产品来提供本发明的实施例,所述机器可读介质包括存储于其上的机器可执行指令,所述机器可执行指令在由诸如计算机、计算机网络或其他电子设备之类的一个或多个机器执行时,可以使得所述一个或多个机器执行根据本发明的实施例的操作。机器可读介质可以包括但不限于:软盘、光盘、CD-ROM(压缩光盘只读存储器)和磁光盘、ROM(只读存储器)、RAM(随机存取存储器)、EPROM(可擦可编程只读存储器)、EEPROM(电可擦可编程只读存储器)、磁卡或光卡、闪存或适合于存储机器可执行指令的其他类型的介质/机器可读介质。
附图和前述说明给出了本发明的实例。尽管被描绘为多个不同的功能项,但本领域技术人员会意识到,这些单元中的一个或多个也可以组合为单个功能单元。或者,特定单元可以分裂为多个功能单元。来自一个实施例的单元可以添加到另一个实施例中。例如,可以改变本文所述的过程的顺序,而不局限于本文所述的方式。此外,任何流程图中的操作都不必以所示的顺序来实现;也并非必然要执行全部的操作。此外,不依赖于其他操作的那些操作可以与所述其他操作并行地执行。然而,本发明的范围决不局限于这些具体实例。许多变更,不论是否在说明书中明确给出,都是可能的,诸如结构、尺寸和材料的使用中的差别。本发明的范围至少与所附权利要求书所给出的一致。
Claims (25)
1.一种计算机实现的方法,包括:
在存储器中分配第一缓存器的一部分,以存储图元属性;
请求将所述图元属性从光栅化器存储至所述第一缓存器的一部分中;及
允许由独立于图形流水线的应用访问所述图元属性。
2.如权利要求1所述的方法,其中,所述图元属性包括屏幕空间顶点位置和每顶点深度信息。
3.如权利要求2所述的方法,其中,所述图元属性进一步包括经修剪的图块边界的确定。
4.如权利要求1所述的方法,其中,所述图元属性包括从以下至少一个选择的每顶点特性:
纹理坐标、颜色、存在时间、发光度和辐照度。
5.如权利要求1所述的方法,其中,所述图元属性包括绘制顺序。
6.如权利要求1所述的方法,进一步包括:
请求从所述光栅化器接收与所述图元属性相关的像素覆盖遮罩;
在存储器中分配第二缓存器的一部分,以存储与所述图元属性相关的像素覆盖遮罩;及
请求将像素覆盖遮罩存储至所述第二缓存器的所述部分中。
7.如权利要求6所述的方法,其中,所述存储的像素覆盖遮罩中的至少一个像素覆盖遮罩确定至少一个像素与图元的关系。
8.如权利要求1所述的方法,进一步包括:
允许访问图元属性;及
允许应用基于选择的图元属性来产生像素覆盖遮罩,其中,所述选择的图元属性包括顶点位置和深度。
9.如权利要求8所述的方法,其中,所述像素覆盖遮罩确定像素是在图元内、图元外,还是在图元的边缘上。
10.如权利要求1所述的方法,进一步包括:
允许访问像素覆盖遮罩的图块,以便由多个核心并行地处理。
11.如权利要求1所述的方法,进一步包括:
允许应用至少部分地基于从颜色、深度和坐标中选择的图元顶点属性,在像素的中心的外部的位置处内插该像素的颜色和深度。
12.一种装置,包括:
存储器;
图形流水线,其至少包括光栅化器和修剪后流输出级;及
处理器执行的应用,用以:
在所述存储器中分配第一缓存器的一部分,以存储来自所述光栅化器的图元属性;
请求所述修剪后流输出级将所述图元属性存储至所述第一缓存器的一部分中,及
允许由第二处理器执行的应用访问所述图元属性。
13.如权利要求12所述的装置,其中,所述图元属性包括屏幕空间顶点位置和每顶点深度信息。
14.如权利要求13所述的装置,其中,所述图元属性确定至图块边界的修剪。
15.如权利要求12所述的装置,其中,所述图元属性包括从以下至少一个选择的每顶点属性:
纹理坐标、颜色、存在时间、发光度和辐照度。
16.如权利要求12所述的装置,其中,所述第二应用用以:
请求从所述光栅化器接收与所述图元属性相关的像素覆盖遮罩;
在存储器中分配第二缓存器的一部分,以存储与所述图元属性相关的像素覆盖遮罩;及
请求将像素覆盖遮罩存储至所述第二缓存器的所述部分中。
17.如权利要求16所述的装置,其中,所述像素覆盖遮罩确定至少一个像素与图元的关系。
18.如权利要求12所述的装置,其中,所述第二应用用以:
基于选择的图元属性来产生像素覆盖遮罩,其中,选择的图元属性包括顶点位置和深度。
19.如权利要求18所述的装置,其中,所述像素覆盖遮罩确定像素是在图元内、图元外,还是在图元的边缘上。
20.如权利要求12所述的装置,其中,所述第二应用用以:
分配像素覆盖遮罩,以便由多个核心并行地处理。
21.如权利要求12所述的装置,其中,所述第二应用用以:
至少部分地基于从颜色、深度和坐标中选择的图元属性,在像素的中心的外部的位置处内插该像素的颜色和深度。
22.一种系统,包括:
显示器;及
计算机系统,包括:
图形流水线,其能够处理图像或视频以便由所述显示器渲染,其中,所述图形流水线至少包括光栅化器和修剪后流输出级;及
用于以下的逻辑:
在存储器中分配第一缓存器的一部分,以存储来自所述光栅化器的图元属性;
请求所述修剪后流输出级将所述图元属性存储至所述第一缓存器中的一部分中。
23.如权利要求22所述的系统,其中,所述图元属性包括屏幕空间顶点位置和每顶点深度信息。
24.如权利要求22所述的系统,其中,所述存储的图元属性包括从以下至少一个选择的每顶点属性:
纹理坐标、颜色、存在时间、发光度和辐照度。
25.如权利要求22所述的系统,进一步包括用以执行以下至少一个的逻辑:
基于所选择的图元属性来产生像素覆盖遮罩,其中,所选择的图元属性包括顶点位置和深度;及
分配像素覆盖遮罩,以便由多个核心并行地处理。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/583,554 US20110043518A1 (en) | 2009-08-21 | 2009-08-21 | Techniques to store and retrieve image data |
US12/583,554 | 2009-08-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101996391A true CN101996391A (zh) | 2011-03-30 |
CN101996391B CN101996391B (zh) | 2014-04-16 |
Family
ID=42799294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010258172.0A Expired - Fee Related CN101996391B (zh) | 2009-08-21 | 2010-08-18 | 用于存储和取回图像数据的技术 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20110043518A1 (zh) |
JP (1) | JP4981162B2 (zh) |
CN (1) | CN101996391B (zh) |
DE (1) | DE102010033318A1 (zh) |
GB (1) | GB2472897B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736947A (zh) * | 2011-05-06 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种图形渲染中光栅化阶段的多线程实现方法 |
CN103793893A (zh) * | 2012-10-26 | 2014-05-14 | 辉达公司 | 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序 |
CN105118089A (zh) * | 2015-08-19 | 2015-12-02 | 上海兆芯集成电路有限公司 | 三维图形管道中的可程序化像素设定方法及使用其的装置 |
WO2021087826A1 (en) * | 2019-11-06 | 2021-05-14 | Qualcomm Incorporated | Methods and apparatus to improve image data transfer efficiency for portable devices |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8515052B2 (en) | 2007-12-17 | 2013-08-20 | Wai Wu | Parallel signal processing system and method |
US9105842B2 (en) * | 2010-06-30 | 2015-08-11 | International Business Machines Corporation | Method for manufacturing a carbon-based memory element and memory element |
US8339409B2 (en) * | 2011-02-16 | 2012-12-25 | Arm Limited | Tile-based graphics system and method of operation of such a system |
US9442780B2 (en) | 2011-07-19 | 2016-09-13 | Qualcomm Incorporated | Synchronization of shader operation |
US9691117B2 (en) | 2011-11-30 | 2017-06-27 | Intel Corporation | External validation of graphics pipelines |
US9430807B2 (en) * | 2012-02-27 | 2016-08-30 | Qualcomm Incorporated | Execution model for heterogeneous computing |
JP5910310B2 (ja) * | 2012-05-22 | 2016-04-27 | 富士通株式会社 | 描画処理装置及び描画処理方法 |
CN102799431B (zh) * | 2012-07-02 | 2015-06-10 | 上海算芯微电子有限公司 | 图元预处理和处理方法、图形处理方法及其处理器、装置 |
KR102089471B1 (ko) * | 2012-11-30 | 2020-03-17 | 삼성전자주식회사 | 타일 기반 렌더링 방법 및 장치 |
CN105574806B (zh) * | 2015-12-10 | 2019-03-15 | 上海兆芯集成电路有限公司 | 影像处理方法及其装置 |
US20170236318A1 (en) * | 2016-02-15 | 2017-08-17 | Microsoft Technology Licensing, Llc | Animated Digital Ink |
CN106355634A (zh) * | 2016-08-30 | 2017-01-25 | 北京像素软件科技股份有限公司 | 模拟太阳的方法及装置 |
US10460513B2 (en) * | 2016-09-22 | 2019-10-29 | Advanced Micro Devices, Inc. | Combined world-space pipeline shader stages |
US10685473B2 (en) * | 2017-05-31 | 2020-06-16 | Vmware, Inc. | Emulation of geometry shaders and stream output using compute shaders |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001075804A1 (en) * | 2000-03-31 | 2001-10-11 | Intel Corporation | Tiled graphics architecture |
US20050219253A1 (en) * | 2004-03-31 | 2005-10-06 | Piazza Thomas A | Render-cache controller for multithreading, multi-core graphics processor |
CN1702692A (zh) * | 2004-05-03 | 2005-11-30 | 微软公司 | 提供增强的图形流水线的系统和方法 |
US7268785B1 (en) * | 2002-12-19 | 2007-09-11 | Nvidia Corporation | System and method for interfacing graphics program modules |
US20080074430A1 (en) * | 2006-09-27 | 2008-03-27 | Guofang Jiao | Graphics processing unit with unified vertex cache and shader register file |
US20080122866A1 (en) * | 2006-09-26 | 2008-05-29 | Dorbie Angus M | Graphics system employing shape buffer |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5515481A (en) * | 1992-07-08 | 1996-05-07 | Canon Kabushiki Kaisha | Method and apparatus for printing according to a graphic language |
EP0610606A1 (en) * | 1993-02-11 | 1994-08-17 | Agfa-Gevaert N.V. | Method of displaying part of a radiographic image |
DE19543079A1 (de) * | 1995-11-18 | 1997-05-22 | Philips Patentverwaltung | Verfahren zum Bestimmen der räumlichen und/oder spektralen Verteilung der Kernmagnetisierung |
SE510310C2 (sv) * | 1996-07-19 | 1999-05-10 | Ericsson Telefon Ab L M | Förfarande jämte anordning för rörelse-esimering och segmentering |
US6057847A (en) * | 1996-12-20 | 2000-05-02 | Jenkins; Barry | System and method of image generation and encoding using primitive reprojection |
US6088044A (en) * | 1998-05-29 | 2000-07-11 | International Business Machines Corporation | Method for parallelizing software graphics geometry pipeline rendering |
AU5688199A (en) * | 1998-08-20 | 2000-03-14 | Raycer, Inc. | System, apparatus and method for spatially sorting image data in a three-dimensional graphics pipeline |
JP2000338959A (ja) * | 1999-05-31 | 2000-12-08 | Toshiba Corp | 画像処理装置 |
US6919904B1 (en) * | 2000-12-07 | 2005-07-19 | Nvidia Corporation | Overbright evaluator system and method |
GB2416100B (en) * | 2002-03-26 | 2006-04-12 | Imagination Tech Ltd | 3D computer graphics rendering system |
US6891543B2 (en) * | 2002-05-08 | 2005-05-10 | Intel Corporation | Method and system for optimally sharing memory between a host processor and graphics processor |
US7570267B2 (en) * | 2004-05-03 | 2009-08-04 | Microsoft Corporation | Systems and methods for providing an enhanced graphics pipeline |
WO2006028093A1 (ja) * | 2004-09-06 | 2006-03-16 | Matsushita Electric Industrial Co., Ltd. | 画像生成装置および画像生成方法 |
US7692660B2 (en) * | 2006-06-28 | 2010-04-06 | Microsoft Corporation | Guided performance optimization for graphics pipeline state management |
US8009172B2 (en) * | 2006-08-03 | 2011-08-30 | Qualcomm Incorporated | Graphics processing unit with shared arithmetic logic unit |
US7952588B2 (en) * | 2006-08-03 | 2011-05-31 | Qualcomm Incorporated | Graphics processing unit with extended vertex cache |
US7852350B2 (en) * | 2007-07-26 | 2010-12-14 | Stmicroelectronics S.R.L. | Graphic antialiasing method and graphic system employing the method |
US8384728B2 (en) * | 2007-09-14 | 2013-02-26 | Qualcomm Incorporated | Supplemental cache in a graphics processing unit, and apparatus and method thereof |
US8200917B2 (en) * | 2007-09-26 | 2012-06-12 | Qualcomm Incorporated | Multi-media processor cache with cache line locking and unlocking |
US8922565B2 (en) * | 2007-11-30 | 2014-12-30 | Qualcomm Incorporated | System and method for using a secondary processor in a graphics system |
US8769207B2 (en) * | 2008-01-16 | 2014-07-01 | Via Technologies, Inc. | Caching method and apparatus for a vertex shader and geometry shader |
US8284197B2 (en) * | 2008-07-11 | 2012-10-09 | Advanced Micro Devices, Inc. | Method and apparatus for rendering instance geometry |
-
2009
- 2009-08-21 US US12/583,554 patent/US20110043518A1/en not_active Abandoned
-
2010
- 2010-07-29 GB GB1012749.6A patent/GB2472897B/en not_active Expired - Fee Related
- 2010-08-04 DE DE102010033318A patent/DE102010033318A1/de not_active Ceased
- 2010-08-18 JP JP2010182881A patent/JP4981162B2/ja not_active Expired - Fee Related
- 2010-08-18 CN CN201010258172.0A patent/CN101996391B/zh not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001075804A1 (en) * | 2000-03-31 | 2001-10-11 | Intel Corporation | Tiled graphics architecture |
CN1430769A (zh) * | 2000-03-31 | 2003-07-16 | 英特尔公司 | 拼块式图形结构 |
US7268785B1 (en) * | 2002-12-19 | 2007-09-11 | Nvidia Corporation | System and method for interfacing graphics program modules |
US20050219253A1 (en) * | 2004-03-31 | 2005-10-06 | Piazza Thomas A | Render-cache controller for multithreading, multi-core graphics processor |
CN1702692A (zh) * | 2004-05-03 | 2005-11-30 | 微软公司 | 提供增强的图形流水线的系统和方法 |
US20080122866A1 (en) * | 2006-09-26 | 2008-05-29 | Dorbie Angus M | Graphics system employing shape buffer |
US20080074430A1 (en) * | 2006-09-27 | 2008-03-27 | Guofang Jiao | Graphics processing unit with unified vertex cache and shader register file |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736947A (zh) * | 2011-05-06 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种图形渲染中光栅化阶段的多线程实现方法 |
CN103793893A (zh) * | 2012-10-26 | 2014-05-14 | 辉达公司 | 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序 |
CN103793893B (zh) * | 2012-10-26 | 2017-03-01 | 辉达公司 | 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序 |
CN105118089A (zh) * | 2015-08-19 | 2015-12-02 | 上海兆芯集成电路有限公司 | 三维图形管道中的可程序化像素设定方法及使用其的装置 |
CN105118089B (zh) * | 2015-08-19 | 2018-03-20 | 上海兆芯集成电路有限公司 | 三维图形管道中的可程序化像素设定方法及使用其的装置 |
WO2021087826A1 (en) * | 2019-11-06 | 2021-05-14 | Qualcomm Incorporated | Methods and apparatus to improve image data transfer efficiency for portable devices |
Also Published As
Publication number | Publication date |
---|---|
JP4981162B2 (ja) | 2012-07-18 |
GB2472897A (en) | 2011-02-23 |
US20110043518A1 (en) | 2011-02-24 |
GB201012749D0 (en) | 2010-09-15 |
CN101996391B (zh) | 2014-04-16 |
GB2472897B (en) | 2012-10-03 |
JP2011044143A (ja) | 2011-03-03 |
DE102010033318A1 (de) | 2011-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101996391B (zh) | 用于存储和取回图像数据的技术 | |
US9406100B2 (en) | Image processing techniques for tile-based rasterization | |
US7928990B2 (en) | Graphics processing unit with unified vertex cache and shader register file | |
EP2047431B1 (en) | Graphics processing unit with extended vertex cache | |
US7463261B1 (en) | Three-dimensional image compositing on a GPU utilizing multiple transformations | |
US7538779B2 (en) | Method of rendering pixel images from abstract datasets | |
US8773448B2 (en) | List texture | |
US10140750B2 (en) | Method, display adapter and computer program product for improved graphics performance by using a replaceable culling program | |
CN105122310B (zh) | 用于基于瓦片的渲染的帧内时戳 | |
CN105321143A (zh) | 来自片段着色程序的采样掩膜的控制 | |
CN109196549A (zh) | 动态低分辨率z测试大小 | |
CN101533522B (zh) | 用于处理计算机图形的方法和设备 | |
WO2005101322A1 (en) | Scalable shader architecture | |
CN101604454A (zh) | 图形处理系统 | |
CN103871019B (zh) | 用于处理路径图像以促进光栅化的方法和设备 | |
CN105144244B (zh) | 用于基于瓦片的渲染器的查询处理的方法、设备和计算机可读存储媒体 | |
CN106530379B (zh) | 用于执行路径描边的方法和设备 | |
CN108027955A (zh) | 经带宽压缩的图形数据的存储技术 | |
US11715253B2 (en) | Pixelation optimized delta color compression | |
KR20060107834A (ko) | 3차원 그래픽 서브시스템들에서의 텍스쳐 맵 데이터의프로그램 가능 필터링을 위한 방법 및 메카니즘 | |
CN110192225B (zh) | 无序像素着色器导出 | |
US20140267426A1 (en) | System, method, and computer program product for automatically extending a lasso region in two-dimensional image editors | |
JP2023525725A (ja) | データ圧縮の方法及び装置 | |
CN104599304A (zh) | 图像处理技术 | |
WO2023004620A1 (zh) | 一种数据读取装置及相关方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140416 Termination date: 20180818 |
|
CF01 | Termination of patent right due to non-payment of annual fee |