来自片段着色程序的采样掩膜的控制的制作方法

文档序号:9565218阅读:324来源:国知局
来自片段着色程序的采样掩膜的控制的制作方法
【专利说明】来自片段着色程序的采样掩膜的控制 要求优先权
[0001] 本申请要求于2014年7月29日提交的申请号为:62/030,497(代理人案号: NVIDP1073+)、名称为"片段着色程序的采样掩膜的控制"的美国临时申请的权益,其全部内 容以引用的方式并入本申请。
技术领域
[0002] 本发明涉及图形处理,并且更具体地涉及图元光栅化期间所生成的采样掩膜的控 制。
【背景技术】
[0003] 许多应用,例如游戏软件和办公效率软件,配置为生成图形显示在计算机系统上。 图形可以包括二维图形或三维图形。图形可以由通常的中央处理器(CPU)执行的软件生 成。或者,图形可以由专用的协同处理单元,例如图形处理单元(GPU),执行的硬件生成,或 者由CPU和/或GPU执行的软件和硬件的组合生成。为了使这样的应用的编程更加简单, 创造出了特殊图形应用编程接口(APIs),例如DirectX和OpenGL等,在生成图形的功能和 用于实现这种功能的硬件间创造一个抽象概念。
[0004] API可以指定抽象图形渲染管线,其限定图形渲染过程的不同步骤。例如,由 OpenGL API指定的图形管线可以包括顶点着色阶段、几何着色阶段、光栅化阶段和片段着 色阶段。图形着色管线接收应用指定的图形图元并且通过图形处理管线的每个阶段处理那 些图元,以产生像素数据显示在显示设备上。光栅化阶段描述了将图元,例如一个三角形, 转化成适于片段着色阶段进行操作的多个片段的操作。换句话说,由多个顶点限定的图元 与由特定屏幕空间限定的像素(或像素的子采样)交叉并且与图元相关联的属性值被跨图 元针对每个像素(或像素的子采样)进行插值。
[0005] 当实现抗混叠技术时,也可以在光栅化阶段生成表明了哪个像素的子采样被图元 覆盖的覆盖信息。典型地,这个覆盖信息被指定为掩膜(mask)。掩膜可以对应于图元的特 定片段并且掩膜内的每个元素可以对应于像素的特定子采样。例如,如果特定像素包括16 个子采样,则掩膜可以包括16个比特,其表明了该像素中的每个子采样是否被图元覆盖。 某些算法希望改变与给定的片段相关联的覆盖信息。然而,通常的硬件并不被配置为任意 更新在光栅化阶段期间生成的覆盖信息。因此,需要处理这些问题和/或其他现有技术中 的问题。

【发明内容】

[0006] 本发明公开了控制来自片段着色的采样掩膜的方法、系统和计算机程序产品。此 方法包括对至少部分被图元覆盖的每个像素生成片段,以及对与所述图元相对应的每个片 段确定覆盖信息的步骤。然后,对每个片段,所述方法包括以下步骤:由片段着色器生成采 样掩膜,用所述采样掩膜替换所述片段的所述覆盖信息,并且基于所述采样掩膜将所述片 段着色器生成的结果写入存储器。此方法由并行处理单元实现,其配置为实现至少部分实 现图形处理管线。
【附图说明】
[0007] 图1示出了根据一个实施例的、用于控制来自片段着色程序的掩膜采样的方法的 流程图。
[0008] 图2示出了根据一个实施例的并行处理单元。
[0009] 图3A示出了根据一个实施例的、图2中的并行处理单元的通用处理集群。
[0010] 图3B示出了根据一个实施例的、图2中的并行处理单元的分区单元。
[0011] 图4示出了根据一个实施例的图3A中的流式多处理器。
[0012] 图5示出了根据一个实施例的包括图2中并行处理单元的片上系统。
[0013] 图6是根据一个实施例由图2中并行处理单元实现的图形处理管线的示意图。
[0014] 图7A示出了根据一个实施例的图元。
[0015] 图7B示出了根据一个实施例的用于片段的覆盖信息。
[0016] 图8示出了根据一个实施例的渲染图元的操作。
[0017] 图9示出了一个示范性系统,在其中前述不同的实施例的不同结构和/或功能可 以实现。
【具体实施方式】
[0018] -个常用的图形API是MicrosoftK DirectX,包括用于渲染三维图形的Direct3D API和用于渲染二维图形的Direct2D API。在Direct3D API中,可以创造一个渲染目标, 存储用于计算机生成图形的显示的颜色数据。D3D中的渲染目标涉及一个缓冲区(即,存储 器中分配的一部分),场景的图像数据存于其中。多采样抗锯齿(MSAA)可以用存储了每像 素多个颜色采样的渲染目标来实现。然后将像素的多个颜色采样混合在一起来产生像素的 最终像素颜色。然而,MSAA的分辨率(即,每像素的采样数目)受到图形硬件可用的存储 器尺寸的限制。
[0019] Micr〇S〇fi_〃_ Direct3D的版本11. 1 (以后称为D3D11)包括一个叫做目标独立光 栅化(TIR)的新功能。D3D11TIR使得在渲染期间利用多个光栅采样而仅在渲染目标内存储 单一颜色采样。像素着色器可以配置为处理与多个光栅采样关联的覆盖信息,以生成单一 颜色采样值存储于渲染目标内。D3D11TIR使得利用Direct2D的矢量图形绘制利用GPU加 速进行处理,而不是整个都在CPU上进行渲染。然而,D3D1ITIR的一个缺点是当MSAA和非 多采样颜色缓冲器一起利用时,必须禁用深度和模板(stencil)测试。
[0020] 像素着色器接收光栅化期间产生的图元的覆盖信息的同时,像素着色器仅配置为 处理覆盖信息以产生单一颜色值用于向渲染目标输出。单一颜色值可以至少部分基于覆盖 信息内的设置比特的数目。像素着色器接收覆盖信息作为输入的同时,光栅化期间产生的 覆盖信息不被修改,而是覆盖信息仅用于调节像素着色器输出并储存在渲染目标中的单一 采样的颜色值。
[0021] 另一个常用的图形APl是OpenGL16,其包括渲染三维和二维图形的功能。 OpenGL_R也通过在光栅化图元期间生成覆盖信息来实现MSAA。覆盖信息提供给片段着 色器。在中片段着色器可以向gl_SampleMask输出阵列写入值,使得片段着色 器能够修改光栅化时生成的覆盖信息。就像OpenGL?说明中所描述,针对片段的覆盖将 变成覆盖信息和写入gl_SampleMask的值的逻辑"与"。将glSampleMask的比特设置为 〇,将使得相应的采样被认为为了 MSAA的目的未被覆盖。然而,将gl_SampleMask的比特设 置为1,将不会使得未被原始图元覆盖的采样被认为为了 MSAA目的而被覆盖。因此,虽然由 OpenGL'限定的gl_SampleMask输出阵列中写入的值可以用于修改覆盖掩膜,但不能用 于改写光栅化时生成的覆盖信息。
[0022] D3D11和OpenGL广gl_SampleMask输出阵列赋予的功能都不能使片段着色器完 成对光栅化期间生成的像素的多个采样的覆盖信息进行改写的控制。片段着色器丝毫不能 改变特定采样被标示为已覆盖而不是未覆盖。因此,要求这种功能的某些算法使用传统的 图形加速硬件不能实现。
[0023] 图1示出了用于控制来自片段着色器程序的采样掩膜的方法100的流程图。步骤 110中,在图形处理管线的光栅化阶段期间为每个像素生成片段,所述每个像素至少部分由 图元覆盖。光栅化阶段涉及将限定为矢量形式(即通过多个顶点)的图形图元转化成光栅 形式(即多个像素或片段)的操作。光栅化阶段为由图元覆盖的每个像素生成一个片段。
[0024] 例如GPU的处理器可以实现图形处理管线的至少一部分。在一个实施例中,图形 处理管线的光栅化阶段由固定功能硬件单元实现,该固定功能硬件单元配置为接收图元并 且输出一个或多个片段用于由图形处理管线的一个或多个附加阶段处理。在另一个实施例 中,图形处理管线的光栅化阶段由一个GPU中的可编程的流式多处理器实现。
[0025] 图元可以限定为顶点的合集,其中每个顶点包括三维空间坐标和一个或多个顶点 属性,例如,颜色、一个或多个纹理坐标、法向矢量等。图形处理管线的光栅化阶段可以接收 限定了来自图形处理管线的之前阶段的图元的数据,在GPU上实现或由CPU执行的软件实 现。片段可以包括一个或多个内插属性以及与特定像素关联的多个采样有关的覆盖信息。 限定了图元和片段的数据可以被存储在数据结构中。
[0026] 步骤120中,对应于图元的每个片段的覆盖信息在图形处理管线的光栅化阶段期 间确定。覆盖信息可以是掩膜,所述掩膜表明了与像素关联的每个采样位置是否被图元覆 盖。当射线从穿过采样位置的摄影位置穿过由图元边缘限定的封闭表面时,采样位置确定 被覆盖。换句话说,当位于观测平面的采样位置位于观测平面上的图元的投影版本之内时, 采样位置确定被覆盖。
[0027] 在一个实施例中,固定功能硬件单元可以包括多个逻辑单元,每个逻辑单元配置 为计算在关于像素位置的二维坐标内的采样位置。然后每个逻辑单元可以比较采样位置坐 标和图元的投影顶点,以确定采样位置是否被覆盖或未被覆盖。每个采样的覆盖信息可以 收集到掩膜中。
[0028] 步骤130中,对于每个与图元对应的片段,在图形处理管线的片段着色阶段期间 由片段着色器生成采样掩膜。采样掩膜可以对应于与像素相关联的采样位置的数目。例如, 如果覆盖信息包括与16个采样位置相对应的16比特掩膜,则采样掩膜可以包括采样掩膜 中的每个比特与像素的不同采样位置相对应的16比特掩膜。
[0029] 在一个实施例中,片段着色阶段由GPU中的可编程的流式多处理器实现。流式多 处理器可以配置为执行片段着色器(即配置为处理片段的程序)。可以对每个在图形处理 管线的光栅化阶段期间生成的片段执行片段着色程序的不同实例(即片段着色线程)。
[0030] 片段着色器可以包括由GPU执行的指令,使得生成采样掩膜并存储在GPU的存储 器中(例如,记录器、DRAM等)。不同的算法会指示如何生成采样掩膜。例如,如果一个算 法要求使用保守的光栅化,那么如果在图形处理管线的光栅化阶段确定有任何与片段相关 联的采样位置被覆盖,可以设置采样掩膜的所有比特。在另一个例子中,在一个关于路径 渲染相关联的算法中,与特定采样位置关联的覆盖信息可以复制到采样掩膜的附加采样位 置。在一个实施例中,采样掩膜的值至少部分由图形处理管线的光栅化阶段期间生成的覆 盖信息确定。在另一个实施例中,采样掩膜的值的确定完全独立于覆盖信息。例如,采样掩 膜可以代表多采样颜色缓冲的任意位置,其中,片段着色器的输出应该被写入。
[0031] 步骤140中,对于每个与图元相对应的片段,在图形处理管线的光栅化阶段期间 生成的片段的覆盖信息由采样掩膜取代。在一个实施例中,覆盖信息可以由采样掩膜改写。 在另一个实施例中,覆盖信息可以被修改,以表明片段被完全覆盖(即覆盖信息的所有比 特都被设置为1),并
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1