专利名称:用于存储和取回图像数据的技术的制作方法
技术领域:
本文公开的主题总体上涉及用于存储和取回图像数据的技术。
背景技术:
在诸如计算机游戏、计算机动画和医学成像之类的领域中对于图形处理的需求是 显然的。图形流水线负责渲染图形。已知了多种图形流水线配置。例如,在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)(例如,片段或像素着色器)。Microsoft DirectX 10引入 了几何着色器和几何流输出级。在D. Blythe的“The Direct3D lOSystem”,Microsoft Corporation (2006)中提供了 Direct3D 10系统的概述。DirectX是涉及输入设备、音频和 视频/图形的一组应用程序接口(API)。
在附图中示例性而非限制性地示出了本发明的多个实施例,附图中相似的参考标 号指代相似的单元。图1以方框图形式描绘了根据实施例的图形处理流水线的实例。图2描绘了根据多个实施例的像素覆盖遮罩(pixel coverage mask)的常规像素 着色器处理以及图块(tile)中的像素覆盖遮罩的处理的实例。图3描绘了在由单个核心处理图块时的核心利用情况以及在将单个图块的处理 分配给多个核心之前及之后的核心利用情况的实例。图4描绘了图元和像素覆盖遮罩的定制光栅化处理的实例。图5描绘了根据实施例的以缓存模式存储图元和像素覆盖遮罩的方式的流程图。图6描绘了根据实施例的以缓存模式取回图元和像素覆盖遮罩的方式的流程图。
具体实施例方式本说明书通篇中对“一个实施例”或“实施例”的提及意思是结合该实施例说明的 具体特征、结构或特性包括在本发明的至少一个实施例中。因此,本说明书通篇中多个位置 出现的短语“在一个实施例中”或“实施例,,并不一定全都指代相同的实施例。而且,所述 的具体特征、结构或特性可以被合并在一个或多个实施例中。各个实施例提供了一种用以在图形流水线中的光栅化级期间或光栅化级之后存 储图元属性和像素覆盖信息的方式。修剪后(post-Clip)流输出级使用存储器中的缓存器 的多个部分来存储图元及与图元相关的像素覆盖遮罩。被称为图块的屏幕的子区域是屏幕 空间中像素数据的空间相干的集合。按照每图块来排序图元并将其修剪至图块边界,可选地采用像素覆盖遮罩来进行这些操作。像素覆盖遮罩确定了像素与图元的关系。例如,像 素覆盖遮罩可以标识像素是在图元中、图元外还是在图元的边缘上。可以以多种方式读出 并处理所存储的图元和像素覆盖信息。例如,可以并行地或顺序地读出与同一图块相关的 像素覆盖遮罩,并且可以将与同一图块相关的多个像素覆盖遮罩一起进行处理。可以对与 同一图块相关联的像素覆盖遮罩执行像素处理,以使得处理后的数据在可能的情况下可以 重复用于像素覆盖遮罩。DirectX 10规定了在几何着色器中产生修剪后的三角形数据。DirectXlO仅揭示 了在像素着色器中的标量模式的被覆盖的像素覆盖遮罩。相对照地,各个实施例借助于单 指令多数据(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设置在光栅化 级Iio之后及像素着色级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。例如,在应用要产生定 制的像素覆盖遮罩的情况下,可以不执行在存储器中分配图块缓存器以存储与图块相关的 像素覆盖遮罩的操作。在应用要产生定制的像素覆盖遮罩的情况下,应用可以分配缓存器 以存储该定制的像素覆盖遮罩。例如,图块可以是4X4像素区域。例如,在以下的伪代码 中,指令SetFrontEndSOTargets分配这些缓存器。块504包括发出调用以将图元属性从光栅化器存储至图元缓存器中,并将与图 元相关的像素覆盖遮罩从光栅化器存储至图块缓存器中。在应用要产生定制的像素覆盖遮 罩的情况下,可以不执行发出调用以将与图元相关的像素覆盖遮罩从光栅化器存储至图块 缓存器中的操作。块506包括禁止将像素覆盖遮罩和图元属性存储至所分配的缓存器中。例如在 以下的伪代码中,指令FrontEndSOSetTargets禁止在所分配的缓存器中进行存储。在应用 要产生定制的像素覆盖遮罩的情况下,可以不执行禁止将像素覆盖遮罩存储至所分配的缓 存器中的操作。图6描绘了根据实施例的过程600的流程图,其示出了用以访问图元属性和像素 覆盖遮罩的方式。过程600可以由主机侧的应用执行。块602包括确定图元属性缓存器 和图块缓存器的特性。例如,块602可以包括取回与每个缓存器相关的溢出标志,并确定 存储在图块缓存器中的图块数量。在以下的伪代码中,指令Query_GetData取回溢出标志。块604包括确定是否发生图块缓存器和图元缓存器的溢出。例如,块604可以 包括基于溢出标志来确定这些缓存器的溢出。如果检测到溢出,则该过程可以退出。在 多个实施例中,该过程可以请求图块缓存器和图元缓存器的额外的存储器,以使得这些缓存器的溢出不会发生。所述额外的存储器可以大于为溢出的缓存器所分配的存储空 间。例如,额外的存储空间可以允许存储比在图块缓存器中所存储的图块更多的图块, 以及存储比在图元缓存器中所存储的图元更多的图元。例如,在以下的伪代码中,指令 SetFrontEndSOTargets分配缓存器的大小。因此,在指令SetFrontEndSOTargets的下一次 执行中,可以改变缓存器的大小。块606包括请求对存储了图元属性及相关像素覆盖遮罩的缓存器或缓存器的多 个部分进行存储器锁定。存储器锁定可以包括拒绝其他过程重写感兴趣的缓存器中的数 据。在以下的伪代码中,指令ViewLock导致锁定图块缓存器的一部分。块608包括取回所存储的图元属性及相关像素覆盖遮罩。可以释放所取回的图 元数据以便以任何方式进行处理。例如,参考图4所述的过程可以处理所述图元和像素数 据。块610包括释放缓存器的被锁定部分的存储器锁定。在以下的伪代码中,指令 ViewUnlock释放缓存器的被锁定部分,以使得缓存器可以由其他过程读取或写入。以下提供关于存储图元和像素(图5)及访问所存储的图元和像素(图6)的方式 的伪代码。/////////////////////////////////////////////////////1.初始化H这些资源是流的句柄,正如普通Omatic资源一样OMATIC_RESOURCE_HEADER mTriangleStream ;OMATIC_RESOURCE_HEADER mQQuadStream ;//Mode#l-静态模式,从用户侧分配缓存器,当存储器满时停止填充0M_U32x dataSize =...void*data = ArchAlignedMalloc(dataSize,CACHE_LINE_SIZE);0MATIC_F0RMAT format = OMATICFMT_STATIC_STREAMDATA ;0M_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管理增长的缓存器0MATIC_F0RMAT format = OMATICFMT_DYNAMIC_STREAMDATA ;Omatic_ResourceInitBuffer(mpDev, &mTriangIeStrearn, NULL,0,0, format, flags);Omatic_ResourceInitBuffer (mpDev, &mQQuadStream, NULL,0,0, format, flags);/////////////////////////////////////////////////////2.渲染时间H实现前端流输出(静态或动态)
Omatic_SetFrontEndSOTargets (mpDeν, &mTriangleStream, &mQQuadStream);Omatic_Draw(...);Omatic_Draw(...);//DisableOmatic_FrontEndSOSetTargets (mpDev,0,0) ;// 可选的//////////////////////////////////////x3.输出流的读回 Omatic_ViewsSubresourcesEnsureRenderingFinished(mpRenderTarget- > pFullView);OMATIC_QUERY_S0_STATISTICS stats ;Omatic_Query_GetData(&stats) ;//我们需要在渲染时间的开始/结束查询吗? assert ( ! stats. Overflow);Omatic_ViewLock(mTriangleStream. pFullView,0,0); Omatic_ViewLock(mQQuadStream. pFullView,0,0);{ const 0MAHA_STREAM0UT_TRIANGLE*triangleData =(const 0MAHA_STREAM0UT_TRIANGLE*)mTriangleStream. pData ;const 0MAHA_STREAM0UT_QQUAD*quadData =(const 0MAHA_STREAM0UT_QQUAD*)mQQuadStream. pData ; const 0MAHA_STREAM0UT_QQUAD*qq = quadData ; for(0M_U64 i = 0 ;i < stats.QQuadCount ;++i){ 0MAHA_STREAM0UT_TRIANGLE*curTriangle = triangleData[qq- >TIndex] dprintf (" QQ ;T#% d, % d% d M ; % x\n" , qq- > TIndex, qq- > X,
qq- > Y, qq- > Mask);++qq ;}}0matic_ViewUnlock(mQQuadStream. pFullView,0); 0matic_ViewUnlock(mTriangleStream. pFullView,0);/////////////////////////////////////////////////// //功能签名////////////////////////////////////////////////////氺\简要设定前端(修剪后)流输出指针。暗示无需后端处理。氺*设定指针为空,以便开启正常渲染。 氺*\参数PDev是这个调用影响的0MATIC_DEVICE。
参数pTriangleSOTarget是用以接收经修剪的(屏幕空间)三角形的流输出缓 存器资源
0104]*\参数pQQuadSOTarget是用以接收正方形流的流输出缓存器资源
0105]*/
0106]void Omatic_SetFrontEndSOTargets(OMATIC_DEVICE*pDev,
0107]0MATIC_RES0URCE_ HEADER^pTriangleSOTarget,
0108]0MATIC_RES0URCE_ HEADER^pQQuadSOTarget
0109]//void^pfOverfIowFunction
0110]);
0111]//流数据格式
0112]typedef struct_0MAHA_STREAM0UT_SCREEN_VERTEX
0113]{
0114]OM FIX8 XX ; // 有符号 24. 8
0115]OM FIX8 YY; //有符号24. 8
0116] OM_F32 ZZ;
0117]0M_FIX8 YY 0M_F32 ZZ }0MAHA_STREAM0UT_SCREEN_VERTEX ;
0118]typedef struct_0MAHA_STREAM0UT_INTERP0LANT
0119]{
0120]0M_F32AA
0121] 0M_F32BB
0122]0M_F32CC
0123]}0MAHA_STREAM0UT_INTERP0LANT ;
0124]typedef struct_0MAHA_STREAM0UT_TRIANGLE
0125]{
0126]0MAHA_STREAM0UT_SCREEN_VERTEX V[3];
0127]0MAHA_STREAM0UT_INTERP0LANT Z ;
0128]}0MAHA_STREAM0UT_TRIANGLE ;
0129]typedef struct_0MAHA_STREAM0UT_QQUAD
0130]{
0131]0M_U32x TIndex ;
0132]0M_U16 Mask ;
0133]0M_U8 X ;
0134] 0M_U8 Y ;
0135]}0MAHA_STREAM0UT_QQUAD ;
0136]本发明的实施例可以实现为以下任何一个或其组合使用主板互连的一个或多个 微芯片或集成电路、硬连线逻辑、由存储器设备存储并由微处理器执行的软件、固件、专用 集成电路(ASIC)和/或现场可编程门阵列(FPGA)。示例性地,术语“逻辑”可以包括软件或硬件和/或软件和硬件的组合。可以在多种硬件架构中实现本文所述的图形和/或视频处理技术。例如,图形和/ 或视频功能可以集成在芯片组中。或者,可以使用分立的图形和/或视频处理器。作为再 另一个实施例,可以由包括多核处理器在内的通用处理器来实现图形和/或视频功能。在 另一个实施例中,可以在消费电子设备中实现这些功能,例如,便携式移动计算机或具有用 以显示由图形流水线处理的图像或视频的显示设备的移动电话。例如,可以作为可包括一个或多个机器可读介质的计算机程序产品来提供本发明 的实施例,所述机器可读介质包括存储于其上的机器可执行指令,所述机器可执行指令在 由诸如计算机、计算机网络或其他电子设备之类的一个或多个机器执行时,可以使得所述 一个或多个机器执行根据本发明的实施例的操作。机器可读介质可以包括但不限于软盘、 光盘、CD-ROM(压缩光盘只读存储器)和磁光盘、R0M(只读存储器)、RAM(随机存取存储 器)、EPROM(可擦可编程只读存储器)、EEPROM(电可擦可编程只读存储器)、磁卡或光卡、 闪存或适合于存储机器可执行指令的其他类型的介质/机器可读介质。附图和前述说明给出了本发明的实例。尽管被描绘为多个不同的功能项,但本领 域技术人员会意识到,这些单元中的一个或多个也可以组合为单个功能单元。或者,特定单 元可以分裂为多个功能单元。来自一个实施例的单元可以添加到另一个实施例中。例如,可 以改变本文所述的过程的顺序,而不局限于本文所述的方式。此外,任何流程图中的操作都 不必以所示的顺序来实现;也并非必然要执行全部的操作。此外,不依赖于其他操作的那些 操作可以与所述其他操作并行地执行。然而,本发明的范围决不局限于这些具体实例。许多 变更,不论是否在说明书中明确给出,都是可能的,诸如结构、尺寸和材料的使用中的差别。 本发明的范围至少与所附权利要求书所给出的一致。
权利要求
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所述的系统,进一步包括用以执行以下至少一个的逻辑基于所选择的图元属性来产生像素覆盖遮罩,其中,所选择的图元属性包括顶点位置 和深度;及分配像素覆盖遮罩,以便由多个核心并行地处理。
全文摘要
本申请提供了用于存储和取回图像数据的技术。在图形流水线中,在光栅化级期间或结束时,修剪后输出级存储图元,并且像素存储在存储器的一部分中。在光栅化级期间或结束时图元和像素的可用性允许实现处理图元和像素的各种方式。
文档编号G06T1/60GK101996391SQ20101025817
公开日2011年3月30日 申请日期2010年8月18日 优先权日2009年8月21日
发明者D·布考特, N·加洛坡冯伯里斯, W·A·胡克斯 申请人:英特尔公司