CN116894757A - 用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑 - Google Patents
用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑 Download PDFInfo
- Publication number
- CN116894757A CN116894757A CN202310330534.XA CN202310330534A CN116894757A CN 116894757 A CN116894757 A CN 116894757A CN 202310330534 A CN202310330534 A CN 202310330534A CN 116894757 A CN116894757 A CN 116894757A
- Authority
- CN
- China
- Prior art keywords
- ray
- ray data
- load
- data elements
- identified
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 153
- 238000000034 method Methods 0.000 title claims abstract description 132
- 238000003860 storage Methods 0.000 claims abstract description 274
- 230000008569 process Effects 0.000 claims abstract description 38
- 238000004519 manufacturing process Methods 0.000 claims description 45
- 230000004044 response Effects 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 14
- 238000009877 rendering Methods 0.000 description 8
- 230000006872 improvement Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 239000012634 fragment Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 235000012431 wafers Nutrition 0.000 description 1
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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本发明涉及用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑。用于图形处理单元的着色器处理单元,该着色器处理单元被配置成执行一个或多个光线跟踪着色器,该一个或多个光线跟踪着色器处理与一条或多条光线相关联的光线数据。光线的该光线数据包括多个光线数据元素。该着色器处理单元包括存储装置和加载逻辑。该加载逻辑被配置成接收光线加载指令作为光线跟踪着色器的部分,该光线加载指令包括:(i)标识多个加载组中的加载组的信息,该多个加载组中的每个加载组包括该多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待从外部单元中检索的所标识的加载组的一个或多个光线数据元素的信息。
Description
技术领域
本申请涉及用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑。
背景技术
图形处理单元(GPU)是被设计成用于加速渲染输出(例如图像)生成的硬件。当今的许多GPU通过根据一个或多个可编程着色器处理图形数据来生成渲染输出(例如图像)。在GPU支持光线跟踪的情况下,GPU可以包括一个或多个着色器处理单元,该一个或多个着色器处理单元能够执行一个或多个光线跟踪着色器以执行各种功能,诸如但不限于生成光线、确定相交以及处理相交。如本领域技术人员所已知,光线跟踪着色器对与一条或多条光线相关联的光线数据(例如原点坐标、方向坐标、相交最大/最小距离、加速结构)进行操作和/或生成该光线数据。与光线相关联的光线数据可能相当大,因此,与光线跟踪着色器当前正在处理的光线相关联的光线数据或其部分可以在需要时或者在生成时分别被动态加载到着色器处理单元中以及/或者从着色器处理单元中动态写出。能够将光线数据有效加载到着色器处理单元中以及/或者从着色器处理单元中写入光线数据可以提高着色器处理单元的性能,并且因此提高GPU的性能。
下文描述的实施方案仅借助于示例提供,并且不限制解决能够执行光线跟踪着色器的已知着色器处理单元的缺点中的任何或所有缺点的具体实现。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文中描述了用于图形处理单元的着色器处理单元,该着色器处理单元被配置成执行一个或多个光线跟踪着色器,该一个或多个光线跟踪着色器处理与一条或多条光线相关联的光线数据。光线的该光线数据包括多个光线数据元素。该着色器处理单元包括本地存储装置和加载逻辑。该加载逻辑被配置成接收光线加载指令作为光线跟踪着色器的部分,该光线加载指令包括:(i)标识多个加载组中的加载组的信息,该多个加载组中的每个加载组包括该多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待从外部单元中检索的所标识的加载组的一个或多个光线数据元素的信息。响应于接收到该光线加载指令,该加载逻辑向该外部单元发送一个或多个加载请求,该一个或多个加载请求使得该外部单元针对一条或多条光线检索所标识的加载组的所标识的光线数据元素。所接收到的光线数据元素随后被存储在该着色器处理单元的该本地存储装置中,以供该光线跟踪着色器处理。
第一方面提供了一种用于图形处理单元的着色器处理单元,该着色器处理单元被配置成执行一个或多个着色器,该一个或多个着色器包括处理与一条或多条光线相关联的光线数据的一个或多个光线跟踪着色器,光线的该光线数据包括多个光线数据元素,该着色器处理单元包括:存储装置;以及加载逻辑,其被配置成:接收光线加载指令,该光线加载指令包括(i)标识多个加载组中的加载组的信息,该多个加载组中的每个加载组包括该多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待从外部单元中检索的所标识的加载组的一个或多个光线数据元素的信息;响应于接收到该光线加载指令,向该外部单元发送一个或多个加载请求,该一个或多个加载请求使得该外部单元针对一条或多条光线检索所标识的加载组的所标识的光线数据元素;从该外部单元接收该一条或多条光线的所标识的光线数据元素;以及将所接收到的光线数据元素存储在该存储装置中,以供该一个或多个光线跟踪着色器的光线跟踪着色器处理。
标识所标识的加载组的一个或多个光线数据元素的信息可以标识所标识的加载组的各个光线数据元素。
每个加载组的一个或多个光线数据元素可以被划分成一个或多个光线数据元素集,并且标识所标识的加载组的一个或多个光线数据元素的信息可以包括标识所标识的加载组的一个或多个光线数据元素集中的一个或多个光线数据元素集的信息。
标识所标识的加载组的一个或多个光线数据元素的所述信息可以包括掩码,所述掩码包括针对所述一个或多个光线数据元素集中的每个光线数据元素集的位,当被设置为某个值时,所述位标识相关联的光线数据元素集。
当所标识的光线数据元素集中的至少一个光线数据元素集包括两个或更多个光线数据元素时,对于包括两个或更多个光线数据元素的所标识的光线数据元素集中的所述至少一个光线数据元素集中的每个光线数据元素集,标识所标识的加载组的一个或多个光线数据元素的信息还可以包括标识所述光线数据元素集的一个光线数据元素的信息。
可以在多个加载事务中从外部单元接收一条或多条光线的所标识的光线数据元素,每个加载事务可以包括多达预定最大数量的光线数据元素;加载逻辑还可以被配置成将一条或多条光线的所标识的光线数据元素划分成多个加载事务;并且从加载逻辑发送到外部单元的一个或多个加载请求可以包括针对多个加载事务中的每个加载事务的加载事务请求。
当所标识的加载组属于第一类型时,每个加载事务可以包括与所述一条或多条光线中的同一光线相关联的光线数据元素。
第一类型的每个加载组的光线数据元素可以被划分成一个或多个光线数据元素块,并且每个加载事务可以包括同一光线数据元素块中的光线数据元素。
针对加载组的每个光线数据元素块可以包括所述加载组的所述一个或多个光线数据元素集中的一个或多个光线数据元素集。
可以包括所述加载组的与掩码位的邻接块相关联的光线数据元素集。
当所标识的加载组属于所述第一类型时,每个加载事务请求可以包括标识在所述光线加载指令中标识的所述加载组的信息、标识所述加载组的块的信息、标识所述块的在所述光线加载指令中标识的所述光线数据元素的信息以及标识所述一条或多条光线中的光线的信息。
所述加载逻辑可以被配置成当所标识的加载组属于所述第一类型时,通过以下操作将所述一条或多条光线的所标识的光线数据元素划分成所述多个加载事务:对于所述一条或多条光线中的每条光线,确定每个光线数据元素块是否包括所标识的光线数据元素,以及对于包括所标识的光线数据元素的每个光线数据元素块,生成加载事务请求以针对所述光线检索所述块中的所标识的光线数据元素。
当所标识的加载组属于第二类型时,所述多个负载事务中的每个负载事务包括一条或多条光线的同一光线数据元素。
所述光线加载指令可以与被划分成一个或多个光线块的多条光线相关联,并且当所标识的加载组属于所述第二类型时,每个加载事务包括同一光线块中的一条或多条光线的所述同一光线数据元素。
所述加载逻辑可以被配置成当所标识的加载组属于所述第二类型时,通过以下操作将所述一条或多条光线的所标识的光线数据元素划分成所述多个加载事务:对于所标识的光线数据元素中的每个光线数据元素,确定哪个光线块包括活动光线,以及对于包括活动光线的每个光线块,生成加载事务请求以检索所述光线块中的所述活动光线的所述光线数据元素。
当所标识的加载组属于第二类型时,每个加载事务请求可以包括标识在光线加载指令中标识的加载组的信息,以及标识一条或多条光线的信息。
标识一条或多条光线的信息可以包括标识光线块的信息以及标识该光线块中活动的光线的信息。
光线加载指令可以与多条光线相关联,并且请求所标识的光线数据元素所针对的一条或多条光线可以是多条光线中的活动光线。
光线加载指令还可以包括标识存储装置中待存储所接收到的光线数据元素的位置的信息,并且加载逻辑可以被配置成将所接收到的光线数据元素存储在所标识的位置处。
多个加载组中的每个加载组可以与唯一标识符相关联,并且标识加载组的信息可以包括与加载组相关联的唯一标识符。
该着色器处理单元还可以包括存储逻辑,该存储逻辑被配置成:接收光线存储指令,该光线存储指令包括(i)标识多个存储组中的存储组的信息,该多个存储组中的每个存储组包括该多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待存储在外部单元中的所标识的存储组的一个或多个光线数据元素的信息;响应于接收到该光线存储指令,从该存储装置中检索一条或多条光线的所标识的光线数据元素;以及向该外部单元发送一个或多个存储请求,该一个或多个存储请求使得该外部单元存储该一条或多条光线的所标识的存储组的所标识的光线数据元素。
多个加载组中的至少一个加载组可以不同于多个存储组中的存储组中的每个存储组。
第二方面提供了一种在图形处理单元的着色器处理单元处处理光线跟踪着色器的方法,该着色器处理单元被配置成执行一个或多个着色器,该一个或多个着色器包括处理与一条或多条光线相关联的光线数据的一个或多个光线跟踪着色器,光线的该光线数据包括多个光线数据元素,该方法包括:在该着色器处理单元处接收光线加载指令,该光线加载指令包括(i)标识多个加载组中的加载组的信息,该多个加载组中的每个加载组包括该多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待从外部单元中检索的所标识的加载组的一个或多个光线数据元素的信息;响应于接收到该光线加载指令,从该着色器处理单元向该外部单元发送一个或多个加载请求,该一个或多个加载请求使得该外部单元针对一条或多条光线检索所标识的加载组的所标识的光线数据元素;在该着色器处理单元处,从该外部单元接收该一条或多条光线的所标识的光线数据元素;以及将所接收到的光线数据元素存储在该着色器处理单元的存储装置中,以供该光线跟踪着色器处理。
第三方面提供了一种着色器处理单元,其被配置成执行第二方面的方法。
第四方面提供了一种图形处理单元,其包括第一方面或第三方面的着色器处理单元。
图形处理单元还可以包括外部单元,该外部单元可以包括一个或多个本地存储单元,并且被配置成将每个加载组的光线数据元素映射到一个或多个本地存储单元中的位置。
本文中描述的着色器处理单元、加载单元、存储单元和图形处理单元可以在集成电路上的硬件中体现。可以提供一种在集成电路制造***处制造本文中描述的着色器处理单元、加载单元、存储单元和/或图形处理单元的方法。可以提供一种集成电路定义数据集,当在集成电路制造***中被处理时,该集成电路定义数据集将该***配置成制造本文中描述的着色器处理单元、加载单元、存储单元和/或图形处理单元。可提供一种非暂态计算机可读存储介质,其上存储有本文中描述的着色器处理单元、加载单元、存储单元和/或图形处理单元的计算机可读描述,当在集成电路制造***中被处理时,该计算机可读描述使得集成电路制造***制造体现着色器处理单元、加载单元、存储单元或图形处理单元的集成电路。
可以提供一种集成电路制造***,其包括:非暂态计算机可读存储介质,其上存储有本文中描述的着色器处理单元、加载单元、存储单元或图形处理单元的计算机可读描述;布局处理***,其被配置成处理计算机可读描述,以便生成体现着色器处理单元、加载单元、存储单元或图形处理单元的集成电路的电路布局描述;以及集成电路生成***,其被配置成根据电路布局描述来制造着色器处理单元、加载单元、存储单元或图形处理单元。
可以提供用于执行如本文中描述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机***处执行时,所述计算机可读指令使计算机***执行如本文所述的方法。
如对本领域技术人员显而易见的,上述特征可以适当地组合,并且可以与本文中描述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是具有多个着色器处理单元的示例图形处理单元的方块图;
图2是光线数据元素的示例加载组的示意图;
图3是光线加载指令的示例格式的示意图;
图4是处理光线加载指令的示例方法的流程图;
图5是将光线加载指令转换成多个加载事务请求的第一示例方法的流程图;
图6是加载事务请求的示例格式的示意图;
图7是将光线加载指令转换成多个加载事务的第二示例方法的流程图;
图8是光线数据元素的示例存储组的示意图;
图9是光线存储指令的示例格式的示意图;
图10是处理光线存储指令的示例方法的流程图;
图11是将光线存储指令转换成多个存储事务请求的示例方法的流程图;
图12是存储事务请求的示例格式的示意图;
图13是示例计算机***的方块图,在该计算机***中可以实现本文中描述的着色器处理单元、加载单元、存储单元和/或图形处理单元;并且
图14是用于生成集成电路的示例集成电路制造***的方块图,该集成电路体现本文中描述的着色器处理单元、加载单元、存储单元和/或图形处理单元。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文所描述的实施方案,并且对所公开的实施方案的各种修改对于本领域技术人员而言将是显而易见的。仅借助于示例来描述实施方案。
如上文所描述,当今的许多GPU通过根据一个或多个可编程着色器处理图形数据来生成渲染输出(例如图像)。如本领域技术人员所已知,着色器是由GPU运行的程序,该着色器一般但不一定用于实现渲染效果。它们被称为着色器,因为它们传统上用于控制照明和着色效果,但它们也可以用于实现其他效果。应用于图形数据的着色器取决于用于生成渲染输出的渲染技术。
用于生成渲染输出的两种示例渲染技术是光栅化和光线跟踪。在光栅化中,使用图元网格(例如三角形)构建每个对象的几何形状,并且随后对该几何形状进行着色以确定其外观。在栅格化中,几何数据可以按两个阶段进行处理——几何处理阶段和栅格化阶段。在几何处理阶段中,从应用程序接收到的几何数据(例如定义图元或面片的顶点)被变换到渲染空间(例如屏幕空间)中。在几何处理阶段中,还可以执行诸如裁剪和剔除的其他功能以移除落在视锥外部的几何形状(例如图元或面片),并且/或者可以执行照明属性处理。在光栅化阶段期间,将经过变换的图元映射到像素并且针对每个像素标识颜色。这可以包括对经过变换的几何形状数据进行光栅化(例如通过执行扫描转换)以生成图元片段。随后可以通过被称为隐藏表面移除的过程来移除隐藏的(例如由其他片段隐藏的)图元片段。随后可以将纹理化和/或着色应用于未隐藏的图元片段以确定渲染输出(图像)的像素值。
用于实现光栅化技术的着色器包括但不限于顶点着色器,其用于变换几何形状(例如图元)顶点的属性,诸如颜色、纹理、位置和方向;几何着色器,其能够动态创建新的几何形状;以及像素着色器或片段着色器,其被配置成对各个像素或片段进行操作以实现复杂的视觉效果。
与其中光线对图像的影响只能是近似的光栅化相比,光线跟踪模拟了光线在真实世界中的工作方式。具体地说,光线跟踪将光线从用户视点发送到场景中,发送到对象上,并且从那里发送到光源。当光线与对象相互作用时,取决于对象的材料特性,光线会由沿途的对象阻挡、反射或折射,从而形成阴影和反射。
用于实现光线跟踪技术的着色器可用于例如生成光线、确定相交以及处理相交。
光栅化和光线跟踪可以独立使用,也可以组合使用。
虽然一些GPU具有不同的硬件来实现或执行不同的着色器,但许多GPU实现统一的着色架构,其中GPU包括可以实现或执行由GPU支持的多个不同着色器的公共或统一的着色器硬件。例如,图1示出了包括多个可扩展处理单元(SPU)102的示例GPU 100,该多个可扩展处理单元中的每个可扩展处理单元包括多个着色器处理单元104。在图1的示例中,每个着色器处理单元被实现为统一着色集群(USC),但这仅仅是示例。每个USC 104可以执行由GPU100支持的多种不同类型的着色器任务。具体地说,每个USC 104从调度器106接收着色器任务。每个着色器任务指定待处理的数据以及待用于处理该数据的着色器(例如程序)。响应于接收到着色器任务,USC 104针对所标识的数据执行所标识的着色器。执行着色器可以包括执行形成着色器的指令集。
每个USC 104可以包括多个算术逻辑单元(ALU)108和本地存储装置(例如寄存器)110,该多个算术逻辑单元可以被配置成执行特定着色器指令,该本地存储装置用于存储待由USC 104处理的数据、由USC 104生成的数据以及/或者可以由USC 104使用的任何其他数据。USC 104通常可以同时执行多个着色器任务,并且那些着色器任务中的每个着色器任务共享本地存储装置110。如果GPU 100支持光线跟踪,则USC 104可以能够执行光线跟踪着色器。光线跟踪着色器一般在光线数据(即与光线相关联的数据)上执行以及/或者生成光线数据。然而,由于可能存在许多飞行中的光线(即正在被处理),并且每条光线可以具有与其相关联的大量数据(例如原点坐标、方向坐标、相交最小/最大距离和加速结构),因而将所有飞行中的光线的光线数据中的所有光线数据保存在本地存储装置110中可能不会在本地存储装置110中留下充足的空间来运行其他着色器任务,这可能会降低USC 104的效率。因此,光线数据中的所有光线数据可以存储在外部单元(即在USC 104外部的单元)的存储单元中,并且当USC 104需要时,其部分被加载到USC 104中,或者当由此生成时从USC 104中写出。
例如,如图1中所示出,GPU 100可以包括外部单元112(作为示例,其被实现为图1中的光线加速集群(RAC)),该外部单元包括用于存储光线数据的一个或多个存储单元114、116,并且USC 104和RAC 112可以通过允许光线数据在USC 104与RAC 112之间传送的一个或多个接口118、120进行连接。例如,可以有允许数据从RAC 112传送到USC 104的加载接口118,并且可以有允许数据从USC 104传送到RAC 112的独立存储接口120。在图1中所示出的示例中,RAC 112包括接口模块122,该接口模块可以被称为USC-RAC接口(URI)122,其被配置成(i)从USC 104接收对光线数据的请求,并且经由加载接口118将来自RAC 112存储单元114、116的请求数据提供给USC 104;以及(ii)经由存储接口120从USC 104接收请求,以将光线数据写入RAC存储单元114、116中的一者或多者,并且将所接收到的数据写入RAC 112存储单元114、116中的一者或多者。在一些情况下,RAC 112还可以包括图1中未示出的其他部件。例如,RAC 112可以包括一个或多个部件来对某些光线跟踪操作进行加速。
为了能够从RAC 112存储单元114、116中检索光线跟踪数据,每个USC 104可以包括加载逻辑124,该加载逻辑被配置成接收加载指令,该加载指令标识待加载到USC 104中的光线数据,并且向RAC 112发送读取请求以检索所标识的光线数据。为了能够将USC 104生成的光线跟踪数据存储在RAC 112存储单元114、116中,每个USC 104可以包括存储逻辑126,该存储逻辑被配置成接收标识待存储在RAC 112存储单元114、116中的光线数据的存储指令,并且向RAC 112发送写入请求以将所标识的光线数据存储在RAC 112存储单元114、116中。然而,具有图1中所示出的结构(或类似结构)的GPU(其为申请人所已知,但并不承认它们在申请人公司之外是众所周知或已知的)被配置成接收并处理加载和存储指令,这些加载和存储指令标识单个存储块(例如双字(dword),其中双字被定义为双字(doubleword),或32位)或者N个存储块的邻接块(例如四个双字)以一次被读取或写入。
在这类配置中,光线数据可以每次一个存储块地被加载到USC 104中或者从USC104中被写出,或者各个光线数据块可以经由各个指令进行加载。然而,由于光线数据的由不同光线跟踪着色器使用和/或生成的部分通常与其他光线数据一起散布在RAC 112存储单元114、116中,因而如果光线数据是在存储块基础上被请求/写入的,则这可能导致大量不想要或不必要的数据在RAC 112与USC 104之间进行传送。这引起USC 104与RAC 112之间的加载接口118和存储接口120的低效使用。此外,虽然请求/写入各个光线数据块可以仅允许所需光线数据在RAC 112与USC104之间进行传送,从而更有效地使用USC 104与RAC 112之间的加载接口118和存储接口120,但这是以USC 104必须存储、提取和执行多个指令为代价的。
因此,本文中描述了着色器处理单元(例如USC),其具有:(i)加载逻辑124,其被配置成接收并处理加载指令,该加载指令允许将光线数据从RAC 112更有效地加载到USC 104中;和/或(ii)存储逻辑126,其被配置成接收并处理存储指令,该存储指令允许将光线数据从USC 104更有效地写入RAC 112。具体地说,在本文中描述的示例中,光线数据包括多个光线数据元素,并且定义了多组光线数据元素,其中每组光线数据元素包括相关光线数据元素集。如果光线跟踪元素经常一起由光线跟踪着色器从RAC 112存储单元114、116中被检索或写入该存储单元,则该光线跟踪元素可以是“相关的”。USC 104(即加载逻辑124和/或存储逻辑126)随后被配置成(i)接收并处理加载指令,该加载指令允许使用单个指令从外部单元(例如RAC 112存储单元114、116)检索同一组中的各个光线数据元素的组合;以及/或者(ii)接收并处理存储指令,该存储指令允许使用单个指令将同一组中的光线数据有效存储在外部单元(例如RAC 112存储单元114、116)中。如下文更详细地描述,用于加载指令的光线数据元素的分组可以不同于用于存储指令的光线数据元素的分组。
由于可以分散在外部单元112的整个存储单元114、116中的相关光线数据元素(组中的那些)可以由单个加载指令来标识,因而单个加载指令可用于有效检索多个相关但分散的光线数据元素。此外,由于可以标识组中的光线数据元素的不同组合,因而不会浪费时间和资源来传送光线跟踪着色器将不会使用的光线数据元素,从而更有效地使用USC 104与RAC 112之间的加载接口118。类似地,由于可以分散在外部单元的整个存储装置中的相关光线数据元素(组中的那些)可以使用单个存储指令来标识,因而单个存储指令可用于有效存储多个相关但分散的光线数据元素。
尽管图1示出了被配置成接收并处理加载指令的加载逻辑124以及被配置成接收并处理存储指令的独立存储逻辑126,但在其他实施方案中,USC 104可以包括被配置成处理加载指令和存储指令两者的公共加载/存储逻辑。
光线加载(RLOAD)指令
在本文中描述的示例中,USC 104(例如加载逻辑124)被配置成接收并处理光线加载指令,该光线加载指令允许从外部单元(例如RAC 112)有效检索光线数据。具体地说,USC104(例如加载逻辑124)被配置成接收并处理光线加载指令,该光线加载指令包括标识多个加载组中的加载组的信息(其中每个加载组包括多个相关光线数据元素)以及标识待从外部单元(例如RAC 112)中检索的该加载组的光线数据元素的信息。每个加载组都被预定义为包括光线数据元素,该光线数据元素通常一起由光线跟踪着色器请求。这类指令允许光线跟踪着色器使用单个指令将多个光线数据元素有效加载到USC 104存储装置110中。
具体地说,如上文所描述,光线跟踪中的每条光线都与包括多个单独光线数据元素的光线数据相关联。在一些情况下,每个光线数据元素大小相同(或者具有相同的最大大小)。在本文中描述的示例中,每个光线数据元素具有双字的最大大小(例如32位)。然而,对于本领域技术人员将显而易见的是,这仅仅是示例,并且在其他示例中,光线数据元素可以具有不同的最大大小。光线数据元素的示例如表1中所示出。对于本领域技术人员显而易见的是,表1的光线数据元素仅仅是光线数据元素的示例,并且在其他示例中,可以有更少的光线数据元素、更多的光线数据元素和/或光线数据元素的不同组合。
表1
在本文中描述的示例中,定义了光线数据元素的多个加载组(其也可以被称为加载空间)。光线数据元素的每个加载组包括可以与光线相关联的光线数据元素的子集。可以定义加载组,使得每个加载组包括有可能一起由一个或多个光线跟踪着色器请求的光线数据元素。例如,执行相交查询的着色器可以仅使用几何信息(例如光线的原点和方向),因此可以定义包括表示几何信息的光线数据元素的加载组;并且用于处理光线与图元之间的交集(例如以确定颜色)的着色器可以使用额外的光线数据元素,因此可以定义包括表示几何信息的光线数据元素以及一个或多个额外的光线数据元素的不同加载组。因此,形成加载组的特定光线数据元素可以取决于光线跟踪着色器的配置。
现在参考图2,其示出了由表1的光线数据元素形成的加载组的示例集合。在此示例中,存在被标记为RID、初级、发射大小、跟踪、查询、调用和调试的七个加载组。每个加载组包括可以使用单个RLOAD指令来请求的一个或多个光线数据元素。例如,初级加载组包括PAYLOAD_0、PAYLOAD_1、PAYLOAD_2、LAUNCH_ID_X、LAUNCH_ID_Y和LAUNCH_ID_Z光线数据元素。这意味着光线跟踪着色器可以使用单个RLOAD指令来请求PAYLOAD_0、PAYLOAD_1、PAYLOAD_2、LAUNCH_ID_X、LAUNCH_ID_Y和LAUNCH_ID_Z光线数据元素的组合。类似地,调试加载组包括NCM_T、NCM_INST_IN、NCM_PRIM_IN、NCM_GEOM_IN、MISS_INDEX、SBT_OFFSET和SBT_STRIDE光线数据元素。这意味着着色器可以使用单个RLOAD指令来请求NCM_T、NCM_INST_IN、NCM_PRIM_IN、NCM_GEOM_IN、MISS_INDEX、SBT_OFFSET和SBT_STRIDE光线数据元素的组合。可以看出,光线数据元素可以形成仅一个加载组的部分,或者光线数据元素可以形成多于一个加载组的部分。例如,FLAGS光线数据元素形成跟踪加载组和查询加载组两者的部分。因此,加载组可以不包括光线数据元素的不相接子集。换句话说,加载组中的两个或更多个加载组可以包括光线数据元素的重叠子集。
现在参考图3,其示出了光线加载(RLOAD)指令300的示例格式。RLOAD指令300包括加载组标识符字段302和光线数据元素集标识符字段304。RLOAD指令300可以可选地包括一个或多个其他字段,该一个或多个其他字段中的一些字段将在下文进行讨论。
加载组标识符字段302(也可以称为SPACE字段或组字段)包括标识多个加载组中的一个加载组的信息。在一些情况下,每个加载组可以与唯一的数字标识符相关联,并且通过将SPACE字段302设置为与特定加载组相关联的唯一数字标识符而在RLOAD指令中标识特定加载组。在这些情况下,可以基于加载组的数量来选择用于SPACE字段302的位数。例如,SPACE字段302的最小位数可以是其中Y是加载组的数量。表2示出了图2中所示出的加载组的唯一标识符的示例集合。在此示例中,有七个加载组,因此SPACE字段302可以包括三个位。对该领域的技术人员将显而易见的是,这仅仅是示例。
表2
光线数据元素集标识符字段304包括用于标识所标识的加载组中待加载到USC104中的光线数据元素的信息。在一些情况下,加载组的光线数据元素可以被划分成集合,其中每个集合包括一个或多个光线数据元素,并且每个RLOAD指令只能将加载组的每个集合的一个光线数据元素加载到USC 104中。这意味着,如果加载组有十个光线数据元素集,则每个RLOAD指令只可以将该加载组的十个光线数据元素加载到USC 104中。图2示出了其中的每个加载组的光线数据元素如何被划分成集合。例如,图2的初级加载组的光线数据元素被划分成六个光线数据元素集,其中每个集合只有一个光线数据元素。具体地说,集合0包括PAYLOAD_0光线数据元素,集合1包括PAYLOAD_1光线数据元素,集合2包括PAYLOAD_2光线数据元素,集合4包括LAUNCH_ID_X光线数据元素,集合5包括LAUNCH_ID_Y光线数据元素,并且集合6包括LAUNCH_ID_Z光线数据元素。由于初级加载组具有六个光线数据元素集,因而初级加载组中多达六个光线数据元素可以使用单个RLOAD指令被加载到USC 104中。
相比之下,跟踪加载组的光线数据元素被划分成18个集合,并且除了集合7之外,集合中的所有集合仅包括单个光线数据元素。具体地说,集合7包括CM_T光线数据元素和CD_T光线数据元素两者。由于来自集合的仅一个光线数据元素可以使用单个RLOAD指令被加载到USC 104中,因而当标识跟踪加载组时,CM_T光线数据元素和CD_T光线数据元素中的仅一者可以使用单个RLOAD指令被加载到USC 104中。
在一些情况下,针对加载组的光线数据元素集可以仅包括一个光线数据元素,或者该加载组的多个互斥光线数据元素。术语“加载组的互斥光线数据元素”在本文中用于意指不会同时由与该加载组相关联的着色器(例如预期引用该加载组的着色器)请求的光线数据元素。例如,如果一个光线数据元素将在光线跟踪处理中的一个点处被使用,并且另一光线数据元素将在光线跟踪处理中的另一点处被使用,则不可以同时请求两个光线数据元素。例如,着色器可以处理候选数据或提交的数据,但不可以处理两者。因此,候选光线数据元素(CD_T)和对应提交的光线数据元素(例如CM_T)可以被视为互斥的。对于本领域技术人员将显而易见的是,这仅仅是示例,并且可能存在其他互斥光线数据元素,并且可能存在光线数据元素为何可能互斥的其他原因。在一些情况下,两个光线数据元素对于一个加载组可能是互斥的,并且相同的两个光线数据元素对于另一加载组可能不是互斥的。
在一些情况下,光线数据元素集标识符字段304可以由包括多个位的掩码来实现,并且加载组中的每个光线数据元素集与这些位中的一个位相关联。在这些情况下,光线数据元素集标识符字段304可以被称为MASK字段。在一些情况下,当相关联集合中的光线数据元素将被检索时,位可以被设置为一个值(例如‘1’),并且如果相关联集合中没有光线数据元素将被检索,则位可以被设置为不同的值(例如‘0’)。在所标识的集合包括仅一个光线数据元素的情况下,则设置MASK字段中的对应位专门标识该光线数据元素。以此方式,MASK字段允许同时请求/检索同一加载组中的各个光线数据元素的组合。
可以预定义如何将加载组的光线数据元素划分成光线数据元素集,以及哪些光线数据元素集与掩码的哪些位相关联。图2示出了集合到MASK位的示例映射。具体地说,初级加载组的集合0、1、2、4、5和6分别与掩码的位0、1、2、4、5、6相关联。因此,如果SPACE字段标识初级加载组,并且MASK字段的位0、1和2被设置,则PAYLOAD_0、PAYLOAD_1和PAYLOAD_2光线数据元素将从外部单元(例如RAC 112)中被检索,并且被加载到USC 104中。
在一些情况下,RLOAD指令300还可以包括目的地(DST)字段306,该目的地字段用于标识所标识的光线数据元素在从外部单元(例如RAC 112)中被检索时将被存储在哪些USC 104存储装置110位置(例如寄存器)。在一些情况下,DST字段306可以标识第一所标识的光线数据元素将被写入的USC 104存储装置110位置(例如寄存器),并且所标识的光线数据元素被写入以所标识的存储器位置开始的邻接存储器位置(例如寄存器)。
如上文所描述,在一些情况下,集合可以包括多于一个光线数据元素(这种集合在本文中可以被称为多光线数据元素集)。在这类情况下,设置对应掩码位并不标识待从外部单元(例如RAC 112)检索的特定光线数据元素。在这类情况下,RLOAD指令300可以包括空间控制字段308(其也可以被称为SPACE_CTRL字段),该空间控制字段包括标识多光线数据元素集的哪个光线数据元素将被检索的信息。例如,在图2中,跟踪组的集合7是包括CM_T光线数据元素和CD_T光线数据元素的多光线数据元素集。在此示例中,当SPACE字段标识跟踪加载组并且MASK字段的第七位被设置时,SPACE_CTRL字段可用于标识将检索CM_T光线数据元素还是将检索CD_T光线数据元素。例如,SPACE_CTRL字段可以包括单个位,当如所描述那样设置SPACE和MASK字段时,该单个位标识将检索CM_T光线数据元素还是CD_T光线数据元素。例如,如果将检索CM_T光线数据元素,则SPACE_CTRL字段可以被设置为‘1’,并且如果将检索CD_T光线数据元素,则该字段可以被设置为‘0’。允许多光线数据元素集增加了可以在不增加掩码位数量的情况下使用单个RLOAD指令检索的光线数据元素的组合数量。
在图2中所示出的示例加载组中,只有一个加载组(即跟踪加载组)具有多光线数据元素集,并且只有一个多光线数据元素集,然而,对于本领域技术人员将显而易见的是,这仅仅是示例,并且在其他示例中,可以有多于一个加载组具有至少一个多光线数据元素集,并且一个或多个加载组可以具有多于一个多光线数据元素集。在一些情况下,在至少一个加载组包括多于一个多光线数据元素集的情况下,SPACE_CTRL字段308可以包括多于一个位。例如,SPACE_CTRL字段308可以包括针对每个多光线数据元素集的一个位。例如,如果加载组包括包含光线数据元素0和光线数据元素1的第一集合以及包含光线数据元素2和光线数据元素3的第二集合,则SPACE_CTRL字段可以包括可用于在光线数据元素0与光线数据元素1之间进行选择的第一位,以及可用于在光线数据元素2与光线数据元素3之间进行选择的第二位。在其他情况下,在加载组包括多于一个多光线数据元素集的情况下,SPACE_CTRL字段308中的单个位可用于选择每个多光线数据元素集的一个元素。例如,如果加载组包括包含光线数据元素0和光线数据元素1的第一集合以及包含光线数据元素2和光线数据元素3的第二集合,则SPACE_CTRL字段可以包括第一位,当被设置为一个值(例如‘0’)时,该第一位选择每个多光线数据元素集中的第一光线数据元素(即光线数据元素0和2),并且当被设置为另一值(例如‘1’)时,该第一位选择每个多光线数据元素集中的第二光线数据元素(即光线数据元素1和3)。
如上文所描述,USC 104从调度器接收着色器任务。每个着色器任务指定待处理的数据以及待用于处理该数据的着色器(例如程序)。响应于接收到着色器任务,USC 104针对所标识的数据执行所标识的着色器。光线跟踪着色器任务可以与多条光线相关联,并且所标识的光线跟踪着色器可以被应用于多条光线中的一条或多条光线。因此,作为着色器任务的部分运行的RLOAD指令被称为与和着色器任务相关联的多条光线相关联,并且其中所标识的光线数据元素将从外部单元(例如RAC 112)中针对与RLOAD指令相关联的光线中的一条或多条光线进行检索。
如下文更详细地描述,对于作为着色器任务的部分执行的RLOAD指令,并非与光线跟踪着色器任务相关联的光线中的所有光线都是‘活动的’,并且优选地,仅将活动光线的光线数据加载到USC 104中,以避免加载不必要的数据。指令的‘活动’光线是该指令所应用的光线。因此,在下文描述的方法中,确定与RLOAD指令相关联的多条光线中的哪些光线对于RLOAD指令是活动的,并且仅针对活动光线检索RLOAD指令中标识的光线数据元素。然而,在其他示例中,不是确定与RLOAD指令相关联的光线中的哪些光线是活动的,而是简单地针对与RLOAD指令相关联的光线中的所有光线加载所标识的光线数据元素可能更简单。
RLOAD指令的活动光线可以在着色器任务级或指令级处被设置。具体地说,一些光线对于光线跟踪着色器任务可能是不活动的,使得这些光线对于作为该光线跟踪着色器任务的部分执行的任何RLOAD指令都将是不活动的。然而,作为同一光线跟踪着色器任务的部分执行的不同RLOAD指令可能具有不同的活动光线。例如,与光线跟踪着色器任务相关联的光线1和2对于作为光线跟踪着色器任务的部分执行的第一RLOAD指令可以是活动的,并且与光线跟踪着色器任务相关联的光线3和4对于作为光线跟踪着色器任务的部分执行的第二不同RLOAD指令可以是活动的。
现在参考图4,其示出了在USC 104处执行RLOAD指令的示例方法400。该方法开始于块402处,其中USC 104(例如加载逻辑124)接收RLOAD指令,诸如针对图2至图3所描述的情况。如上文所描述,RLOAD指令标识光线数据元素的预定义加载组(例如图2中所示出的加载组中的一个加载组)以及该加载组的将从外部单元(例如RAC 112)中被检索的特定光线数据元素。在接收到RLOAD指令之后,方法400进行到块404,其中USC 104(例如加载逻辑124)向外部单元(例如RAC 112)发送一个或多个加载请求,该一个或多个加载请求使得对于与RLOAD指令相关联的一条或多条光线中的每条光线(例如与RLOAD指令相关联的多条光线中的全部光线或子集),从外部单元的存储装置(例如RAC 112存储单元114、116)中检索所标识的加载组的所标识的光线数据元素,并且向USC 104(例如加载逻辑124)发送所标识的光线数据元素。方法400随后前进到块406和408,其中USC 104(例如加载逻辑124)通过加载接口118接收一条或多条光线中的每条光线的所标识的光线数据元素,并且将所接收到的光线数据元素存储在USC 104存储装置110中。
外部单元(例如RAC 112)与USC 104之间的负载接口118可能不足够大,以致无法在同一循环中接收所请求的光线数据元素中的所有光线数据元素。因此,USC 104可以在多个循环内接收所请求的光线数据元素。在循环中接收到的一个或多个光线数据元素集可以被称为加载事务。在一些情况下,可以在同一循环中接收的光线数据元素的数量(例如作为同一加载事务的部分)是基于加载接口118的大小和光线数据元素的大小。负载接口118的大小被定义为可以同时传输的数据量。例如,如果加载接口118是128位宽,并且每个光线数据元素是双字(即32位),则可以在同一循环中(例如在同一加载事务中)接收四个光线数据元素。
在一些情况下,USC 104可以被配置成通过将所接收到的RLOAD指令转换成多个加载事务,并且针对每个加载事务向外部单元(例如RAC 112)发送独立加载事务请求来实现图4的方法400的块404(即向外部单元发送一个或多个加载请求以检索所标识的光线数据元素)。换句话说,USC 104可以被配置成将所接收到的RLOAD指令扩展成多个加载事务。例如,如果从外部单元(例如RAC 112)向USC 104传输在RLOAD指令中标识的光线数据元素将花费四个加载事务,则USC 104(例如加载逻辑124)可以生成并向外部单元(例如RAC 112)传输四个加载事务请求。USC 104随后接收具有所标识的光线数据元素的四个加载事务。
在一些情况下,可能存在一种或多种类型的加载组,并且用于将RLOAD指令转换成多个加载事务的技术可以基于在RLOAD指令中标识的加载组的类型。例如,一种或多种类型的加载组可以包括每光线(或每实例)加载组和每光线块加载组中的一者或多者。每光线加载组的加载事务可以仅包括与同一光线相关联的光线数据元素(例如与一条光线相关联的不同光线数据元素)。相比之下,每光线块加载组的加载事务可以包括多条光线的同一光线数据元素。针对图5描述了将与每光线加载组相关的RLOAD指令转换成多个加载事务的示例方法,并且针对图7描述了将与每光线块加载组相关的RLOAD指令转换成多个加载事务的示例方法。
与具有包括一条或多条光线的同一光线数据元素的加载事务(其中例如与RLOAD指令相关联的多条光线的活动光线分散在多条光线当中)相比,使加载事务包括来自同一光线的光线数据元素可以允许通过加载接口118更有效地传送光线数据元素。例如,如下文更详细地描述,光线生成着色器任务可以与多条光线相关联(例如光线生成着色器任务可以生成多条光线),并且在生成那些光线之后,可以执行分层搜索来确定哪些光线是“命中的”以及哪些是“未命中的”。未命中着色器任务随后与多条光线相关联,但未命中着色器任务可能仅需要对多条光线中“未命中”的那些光线进行操作(对于作为未命中着色器任务的部分执行的RLOAD指令,这些光线可以被称为活动光线)。类似地,命中着色器任务与多条光线相关联,但命中着色器任务可能仅需要对多条光线中“命中”的那些光线进行操作(对于作为命中着色器任务的部分执行的RLOAD指令,这些光线可以被称为活动光线)。如果多条光线被划分成块,并且加载事务只可以包括同一块中的光线的同一光线数据元素,则如果每个光线块中只有一条光线是活动的,则每个加载事务将只包括一条光线数据元素(这不是对加载接口118的有效使用)。这意味着如果每条光线有许多光线数据元素将被加载到USC 104中,则这可能需要许多加载事务来加载所需光线数据元素中的所有光线数据元素。
然而,如果同一光线的光线数据元素可以在加载事务中被封装在一起(并且跳过非活动光线),则每个加载事务可以包括更多光线数据元素,这意味着光线数据元素可以通过更少的加载事务跨加载接口118进行传送(这是对加载接口118的更有效使用)。然而,如果在加载组中只有几个光线数据元素(例如少于每个加载事务的光线数据元素的最大数量),则此方法不是那么有效,因为加载事务永远不会满。因此,在一些情况下,每光线加载组可以是具有多于预定数量(例如1或2)的光线数据元素的那些加载组,并且每光线块加载组可以是具有预定数量或少于预定数量的光线数据元素的那些加载组。
如上文所描述,每光线加载组的每个加载事务可以仅包括与同一光线相关的光线数据元素。例如,每光线加载组的加载事务可以包括同一光线的ORIGIN_X、ORIGIN_Y和ORIGIN_Z光线数据元素。相比之下,每光线加载组的加载事务可以不包括第一光线的CM_T光线数据元素和第二光线的CM_T光线数据元素。在一些情况下,每光线加载组的光线数据元素被划分成一个或多个块,并且加载事务可以仅包括同一块中的光线数据元素。在这些情况下,当USC 104(例如加载逻辑124)接收到其中标识有每光线加载组的RLOAD指令时,USC 104(例如加载逻辑124)可以被配置成通过以下操作将所接收到的RLOAD指令转换成多个加载事务:确定所标识的加载组的哪些块包括至少一个所标识的光线数据元素,并且对于包括至少一个所标识的光线数据元素的每个块,针对该块中所标识的光线数据元素生成并传输加载事务请求(针对与RLOAD指令相关联的每个(活动)光线)。因此,在此RLOAD转换技术中,不针对所标识的加载组的空块发出加载事务请求——即,不针对不包括至少一个所标识的光线数据元素的所标识的加载组的块生成加载事务请求。然而,对于一条或多条光线中的每条光线,对于包括至少一个所标识的光线数据元素的每个块,生成加载事务请求。
例如,假设图2中所示出的除了RID加载组之外的示例加载组中的每个加载组都是每光线加载组。在图2中可以看出,这些加载组中的每个加载组的光线数据元素已被划分成块,其中块中的光线数据元素可以形成同一加载事务的部分。例如,初级加载组的光线数据元素已被划分成两个块(块0和1),发射大小加载组的光线数据元素形成一个块(块0),跟踪加载组的光线数据元素已被划分成五个块(块0、1、2、3和4),并且查询加载组的光线数据元素已被划分成三个块(块0、1和2)等。
由于可以作为单个加载事务的部分传输的光线数据元素的最大数量为M,因而块中只有M个光线数据元素可以作为单个事务的部分进行传输。因此,每个块可以包括最多M个光线数据元素集,其中每个光线数据元素集包括单个光线数据元素或互斥光线数据元素集。这意味着事务可以包括来自与块相关联的每个集合的光线数据元素。在本文中描述的示例中,M是四(即四个光线数据元素可以作为单个加载事务的部分进行传输),因此图2中所示出的块中的每个块包括最多四个光线数据元素集。例如,跟踪加载组的第一块包括四个光线数据元素集(集合0至3),其中每个集合包括单个光线数据元素——即仅包括ORIGIN_X光线数据元素的集合0、仅包括ORIGIN_Y光线数据元素的集合1、仅包括ORIGIN_Z光线数据元素的集合2,以及仅包括DIRECTION_X光线数据元素的集合3;并且跟踪加载组的第二块包括四个光线数据元素集(集合4至7),其中集合中的三个集合包括单个光线数据元素,并且第四集合包括两个互斥光线数据元素——即集合4仅包括DIRECTION_Y光线数据元素,集合5仅包括DIRECTION_Z光线数据元素,集合6仅包括TMIN光线数据元素,并且集合7包括互斥的CM_T和CD_T光线数据元素。
如上文所描述,在一些情况下,光线数据元素集标识符字段304可以被实现为包括多个位的掩码(即MASK字段),并且每个加载组的光线数据元素集与掩码的特定位相关联。在这类情况下,块中的光线数据元素可以是与邻接掩码位(例如M个掩码位)集相关联的光线数据元素集。例如,如图3中所示出,每个加载组的第一块可以包括与前四个掩码位(例如位0至3)相关联的光线数据元素集,每个加载组的第二块可以包括与接下来的四个掩码位(例如位4至7)相关联的光线数据元素集,每个加载组的第三块可以包括与接下来的四个掩码位(例如位8至11)相关联的光线数据元素集,以此类推。如下文更详细地描述,这可以允许USC 104(例如加载逻辑124)根据RLOAD指令的MASK字段位来快速且有效地确定所标识的加载组的哪些块包括已被请求/标识的至少一个光线数据元素——以及因此将针对哪些块生成加载事务请求。
如上文所描述,在一些情况下,外部单元(RAC 112)可以具有多个存储单元114、116,并且/或者存储单元114、116中的一者或多者可以细分成多个区段,并且不同的光线数据元素可以存储在不同的存储单元和/或存储单元的不同区段中。在一些情况下,针对加载组的光线数据元素集可以被布置成块,使得存储在同一存储单元114、116和/或该存储单元的同一区段中的光线数据元素处于同一块中,以使得远程单元(例如RAC 112)更有效地生成加载事务。具体地说,与包括来自不同存储单元和/或其区段的光线数据元素的加载事务相比,包括同一存储单元和/或其同一区段中的光线数据元素的加载事务更快且更容易地生成。例如,由于LAUNCH_ID_X、LAUNCH_ID_Y、LAUNCH_ID_Z光线数据元素存储在同一存储单元114、116和其同一区段中,因而这些光线数据元素被放置在初级加载组的同一块中。如图2中所示出,这可能意味着在光线数据元素集的编号中存在间隙——例如,在初级加载组中没有光线数据元素集3——然而,这可以提高远程单元(例如RAC 112)可以生成加载事务的效率和速度。
现在参考图5,其示出了示例方法500,该方法可以由USC 104(例如加载逻辑124)实现,以将标识每光线加载组的RLOAD指令转换成多个加载事务。方法500开始于块502处,其中USC 104(例如加载逻辑124)将当前光线标识符(其也可以称为实例标识符)初始化。当前光线标识符标识与RLOAD指令相关联的多条光线中的一条光线。由当前光线标识符标识的光线可以被称为当前光线。当前光线标识符可以被初始化以标识与RLOAD指令相关联的第一光线。在一些情况下,与RLOAD指令相关联的多条光线中的每条光线可以由唯一值来标识。在一些情况下,当前光线标识符可以是被初始化为预定值(例如0)的计数器。一旦当前光线标识符已被初始化,方法500便进行到块504。
在块504处,USC 104(例如加载逻辑124)确定当前光线是否是活动的。在一些情况下,USC 104可以连同RLOAD指令一起接收标识与RLOAD指令相关联的哪些光线是活动的信息。如果确定当前光线是活动的,则方法500前进到块506。然而,如果确定当前光线不是活动的,则方法500直接前进到块508。
在块506处,USC 104(例如加载逻辑124)将当前块标识符初始化以标识所标识的加载组的块(例如第一块)。由当前块标识符标识的块可以被称为当前块。在一些情况下,当前块标识符可以采取计数器的形式,并且计数器可以被初始化为预定值(例如0)。一旦当前块标识符已被初始化,方法500便进行到块510。
在块510处,USC 104(例如加载逻辑124)分析RLOAD指令以确定当前块中的至少一个光线数据元素是否已被请求/标识。在RLOAD指令包括MASK字段304并且加载组的块对应于掩码位的邻接块的情况下,USC 104(例如加载逻辑124)可以被配置成分析对应于所标识的块的掩码位,以确定这些掩码位中的任何掩码位是否被置位。在RT_USC_DATA_WIDTH是加载接口118的宽度(以位为单位),RAY_DATA_ELEMENT_WIDTH是每个光线数据元素的宽度(以位为单位),BLOCK是当前块,并且MASK是RLOAD指令的掩码字段,则与当前块相关的位可以是位((RT_USC_DATA_WIDTH/RAY_DATA_ELEMENT_WIDTH)*(BLOCK+1)-1)至(RT_USC_DATA_WIDTH/RAY_DATA_ELEMENT_WIDTH)*(BLOCK)。如果确定已请求/标识了当前块中的至少一个光线数据元素,则方法500进行到块512,其中生成加载事务请求,并且向外部单元(例如RAC112)发送该加载事务请求。然而,如果确定当前块中还没有光线数据元素被请求,则该方法进行到块514。
在块512处,USC 104(例如加载逻辑124)针对当前光线生成并向外部单元(例如RAC 112)发送针对所标识的加载组的当前块中的所请求/所标识的光线数据元素的加载事务请求。在一些情况下,加载事务请求可以包括(i)标识当前光线的信息;(ii)标识加载组的信息;(iii)标识当前块的信息;以及(iv)标识该块的所请求/所标识的光线数据元素的信息。
图6示出了当所标识的加载组是每光线加载组时加载事务请求600的示例格式。示例加载事务请求600包括:光线标识符字段602、块标识符字段604、光线数据元素集标识符字段606和加载组标识符字段608。光线标识符字段602(其也可以称为INSTANCE字段)标识与请求相关的光线,并且可以被设置为当前光线标识符的值。块标识符字段604(其也可以称为ADDR字段)标识与请求相关的(所标识的加载组的)块。块标识符字段604可以被设置为当前块标识符的值。光线数据元素集标识符字段606(当被实现为掩码时,其可以称为MASK字段)标识待从中检索光线数据元素的块中的光线数据元素集。光线数据元素集标识符字段606可以包括RLOAD MASK字段的与所标识的块相关的位(例如位((RT_USC_DATA_WIDTH/RAY_DATA_ELEMENT_WIDTH)*(BLOCK+1)-1)至(RT_USC_DATA_WIDTH/RAY_DATA_ELEMENT_WIDTH)*(BLOCK))。加载组标识符字段608(其也可以称为SPACE字段)标识加载组。加载组标识符字段608可以被配置成在RLOAD指令中包括加载组标识符信息。在RLOAD指令包括SPACE_CTRL字段的情况下,加载事务请求600还可以包括SPACE_CTRL字段610,该字段包括来自RLOAD指令的SPACE_CTRL信息。对于本领域技术人员将显而易见的是,这仅仅是示例,并且在其他示例中,加载事务请求可以采用不同的形式。
回到图5,在接收到加载事务请求时,外部单元(例如RAC 112)根据加载组、块和光线数据元素信息来确定所请求的光线数据元素在存储装置(例如RAC 112存储单元114、116)中的位置,从存储装置中检索所请求的光线数据元素,并且将所请求的光线数据元素作为加载事务的部分传输到USC 104。具体地说,外部单元(例如RAC 112)可以包括将加载组和其各个光线数据元素映射到存储位置的信息。
一旦USC 104已生成并向外部单元(例如RAC 112)发送加载事务请求,方法500便进行到块514。
在块514处,USC 104(例如加载逻辑124)确定当前块是否是最后一个块(即加载逻辑124是否已检查所有块)。在块标识符被实现为初始化为0的计数器的情况下,USC 104可以通过将块计数器与(每加载组的最大块数量-1)进行比较来确定当前块是否是最后一个块。在光线数据元素集标识符字段被实现为MASK字段的情况下,每加载组的最大块数量可以等于MASK字段中的最大位数除以每加载事务的光线数据元素的最大数量(例如RT_USC_DATA_WIDTH/RAY_DATA_ELEMENT_WIDTH)。例如,在MASK字段包括20个位并且每加载事务最多有4个光线数据元素的情况下,每加载组最多将有5个块。如果确定当前块是最后一个块,则方法500进行到块508。然而,如果确定当前块不是最后一个块,则方法500进行到块516。
在块516处,USC 104(例如加载逻辑124)对当前块标识符进行更新(例如递增)以标识另一(例如下一)块。一旦已更新当前块标识符,方法500便向回进行到块510,其中USC104(例如加载逻辑124)确定是否已请求与新的当前块相关联的光线数据元素中的任何光线数据元素。
在块508处,USC 104(例如加载逻辑124)确定当前光线是否是与RLOAD指令相关联的最后一条光线(例如是否已评估与RLOAD指令相关联的所有光线)。在当前光线标识符被实现为初始化为0的计数器的情况下,USC 104(例如加载逻辑124)可以通过将当前光线计数器与(与RLOAD指令相关联的最大光线数量-1)进行比较来确定当前光线是否是最后一条光线。在一些情况下,与RLOAD指令相关联的最大光线数量可以是128。然而,将显而易见的是,这仅仅是示例,并且在其他示例中,可以有不同数量的光线与RLOAD指令相关联。如果确定当前光线是与RLOAD指令相关联的最后一条光线,则方法500结束518。然而,如果确定当前光线不是与RLOAD指令相关联的最后一条光线,则方法500前进到块520。
在块520处,更新当前光线标识符(例如使当前光线计数器递增)以标识另一(例如下一)光线。一旦已更新当前光线标识符,方法500便向回进行到块504。
如上文所描述,每光线块加载组的每个加载事务可以仅包括多条光线的同一光线数据元素。例如,每光线块加载组的加载事务可以包括第一光线的CM_T光线数据元素和第二光线的CM_T光线数据元素。相比之下,每光线块加载组的加载事务可以不包括一条光线的ORIGIN_X、ORIGIN_Y和ORIGIN_Z光线数据元素。在一些情况下,与RLOAD指令相关联的光线可以被划分成块,并且每光线块加载组的加载事务可以仅包括与同一块中的光线相关的光线数据元素。块中的光线数量可以基于加载事务中的光线数据元素的最大数量。例如,如果加载事务可以包括多达四个光线数据元素,则与RLOAD指令相关联的光线可以被划分成四个块。在这些情况下,当USC 104(例如加载逻辑124)接收到其中标识有每光线块加载组的RLOAD指令时,USC 104(例如加载逻辑124)可以被配置成通过以下操作将所接收到的RLOAD指令转换成多个加载事务:确定哪些光线块包括至少一条活动光线,并且对于包括至少一条活动光线的每个块,针对RLOAD指令中所标识的光线数据元素生成并传输加载事务请求。可以对RLOAD指令中的每个所标识的光线数据元素重复此过程。因此,在此RLOAD转换技术中,可以不针对非活动光线块生成并传输加载事务请求——即不针对不包括任何活动光线的光线块生成加载事务。
现在参考图7,其示出了示例方法700,该方法可以由USC 104(例如加载逻辑124)实现,以将标识每光线块加载组的RLOAD指令转换成多个加载事务。在此示例中,假设每光线块加载组包括单个光线数据元素。然而,如果每光线块加载组包括多个光线数据元素,则可以针对在RLOAD指令中所标识的每个光线数据元素重复方法700。方法700开始于块702处,其中USC 104(例如加载逻辑124)将当前光线块标识符初始化。当前光线块标识符标识与RLOAD指令相关联的光线块。由当前块标识符标识的光线块在本文中可以被称为当前光线块。当前光线块标识符可以被初始化以标识与RLOAD指令相关联的第一光线块。在一些情况下,多个光线块中的每个光线块可以由唯一的值来标识。在一些情况下,当前光线块标识符可以是被初始化为预定值(例如0)的计数器。一旦当前光线块标识符已被初始化,方法700便进行到块704。
在块704处,USC 104(例如加载逻辑124)确定当前光线块是否包括至少一条活动光线。如上文所指出,与RLOAD指令一起,USC 104(例如加载逻辑124)可以接收指示哪些光线对于RLOAD指令是活动的信息。如果确定当前光线块包括至少一条活动光线,则方法700进行到块706。然而,如果确定当前光线块不包括任何活动光线,则方法700直接进行到块708。
在块706处,USC 104(例如加载逻辑124)针对当前光线块中的活动光线中的每条活动光线生成并向外部单元(例如RAC 112)发送针对特定光线数据元素(即所标识的加载组中的光线数据元素)的加载事务请求。在一些情况下,加载事务请求包括(i)标识光线块的信息;(ii)标识光线块中的活动光线的信息;以及(iii)标识加载组的信息(其中加载组仅包括一个光线数据元素,这也标识光线数据元素)。
加载事务请求可以采取图6中所示出的形式。然而,在此情况下,光线标识符字段602可用于通过例如标识块中的第一光线来标识光线块。光线标识符字段602可以被设置为当前光线块标识符*每块的光线数量。块标识符字段604可以不被使用或者可以被设置为零。光线数据元素集标识符字段606可用于标识所标识的光线块中活动的光线。在一些情况下,光线数据元素集标识符字段606可以被实现为掩码,该掩码具有针对光线块中的每条光线的位。当对应光线是活动的时,位可以被设置为一个值(例如‘1’),并且当对应光线是不活动的时,位可以被设置为不同的值(例如‘0’)。类似于每光线加载组加载事务请求,加载组标识符字段608标识在RLOAD指令中标识的加载组。加载组标识符字段608可以被配置成包括来自RLOAD指令的加载组标识符信息。在RLOAD指令包括SPACE_CTRL字段的情况下,加载事务请求还可以包括SPACE_CTRL字段610,该字段包括来自RLOAD指令的SPACE_CTRL信息。
在接收到加载事务请求时,外部单元(例如RAC 112)根据光线块、光线活动和加载组信息来确定所请求的光线数据元素在存储装置(例如RAC 112存储单元114、116)中的位置,从存储装置中检索所请求的光线数据元素,并且将所请求的光线数据元素作为加载事务的部分传输到USC 104。具体地说,外部单元(例如RAC 112)可以包括将加载组和其各个光线数据元素映射到存储位置的信息。
一旦USC 104已向外部单元(例如RAC 112)发送加载事务请求,方法700便进行到块708。
在块708处,USC 104(例如加载逻辑124)确定当前光线块是否是最后一个光线块(例如是否已评估所有光线块)。在光线块标识符被实现为初始化为0的计数器的情况下,USC 104可以通过将光线块计数器与(光线块的最大数量-1)进行比较来确定当前光线块是否是最后一个光线块。如果确定当前光线块是最后一个光线块,则方法700结束710。然而,如果确定当前光线块不是最后一个光线块,则方法700进行到块712。
在块712处,对当前光线块标识符进行更新(例如递增)以标识另一(例如下一)光线块。一旦已更新当前光线块标识符,方法700便向回进行到块704。
在一些情况下,在执行图4的方法400的块404之前(即在向外部单元(例如RAC112)发送一个或多个加载请求以检索在RLOAD指令中标识的光线数据元素之前),USC 104(例如加载逻辑124)可以被配置成对RLOAD指令执行一个或多个安全检查。例如,在向外部单元(例如RAC 112)发送加载事务请求之前,USC 104(例如加载逻辑124)可以被配置成验证已分配足够的USC 104存储装置110用于存储在RLOAD指令中标识的光线数据元素。执行此验证以确保USC 104存储装置110不会因写入所分配区之外的地址而被破坏。在一些情况下,USC 104可以被配置成接收(除了RLOAD指令以外)指示每光线/实例分配的存储量的信息,并且USC 104可以被配置成通过将每光线/实例分配的存储量110与每光线/实例请求的光线数据元素的数量进行比较来确定是否已分配足够的USC 104存储装置110。在光线数据元素集标识符字段被实现为掩码的情况下,USC 104(例如加载逻辑124)可以通过对RLOAD指令的MASK字段中指示光线数据元素已被请求的位数进行计数来确定每光线请求的光线数据元素的数量。如果每光线请求的光线数据元素的数量大于每光线分配的存储量110,则存在错误,并且可能产生异常。
光线存储(RSTORE)指令
在本文中描述的示例中,USC 104(例如存储逻辑126)被配置成接收并处理光线存储指令,该光线存储指令允许向外部单元(例如RAC 112)有效写入光线数据。具体地说,USC104(例如存储逻辑126)被配置成接收并处理光线存储指令,该光线存储指令包括标识多个存储组中的存储组的信息(其中每个存储组包括光线数据元素的子集)以及标识待向外部单元(例如RAC 112)写入的该存储组的光线数据元素的信息。这类指令允许光线跟踪着色器使用单个指令有效标识待向外部单元(例如RAC 112)写入的多个潜在分散的光线数据元素。
光线数据元素的每个存储组包括可能与光线相关联的光线数据元素的子集。可以定义存储组,使得每个存储组包括有可能由光线跟踪着色器一起生成并存储的光线数据元素。
现在参考图8,其示出了由表1的光线数据元素形成的存储组的示例集合。在此示例中,存在被标记为跟踪、查询和调用的三个存储组。每个存储组包括可以使用单个RSTORE指令存储在外部单元(例如RAC 112)中的一个或多个光线数据元素。例如,跟踪存储组包括ORIGIN_X、ORIGIN_Y、ORIGIN_Z、DIRECTION_X、DIRECTION_Y、DIRECTION_Z、ACC_STRUCT、NCM_T、TMIN、CM_T、CD_T、FLAGS、SBT_OFFSET、SBT_STRIDE、MISS_INDEX、PAYLOAD_0、PAYLOAD_1和PAYLOAD_2光线数据元素。这意味着着色器可以使用单个RSTORE指令向外部单元(例如RAC 112)写入这些光线数据元素的组合。类似地,调用存储组包括MISS_INDEX、PAYLOAD_0、PAYLOAD_1、PAYLOAD_2、ORIGIN_X、ORIGIN_Y、ORIGIN_Z、DIRECTION_X、DIRECTION_Y、DIRECTION_Z、NCM_T、CM_T、TMIN、CD_T、ACC_STRUCT、U和V光线数据元素。这意味着着色器可以使用单个RSTORE指令向外部单元(例如RAC 112)写入这些光线数据元素的组合。可以看出,光线数据元素可以形成仅一个存储组的部分,或者光线数据元素可以形成多于一个存储组的部分。例如,U光线数据元素和V光线数据元素只是调用存储组的部分,并且ORIGIN_X光线数据元素属于跟踪、查询和调用存储组。因此,多个存储组可以包括光线数据元素的重叠子集。
可以看出,在本文中示出的示例中,加载组(图2中所示出)不同于存储组(图8中所示出)。当光线跟踪着色器生成的光线数据元素不同于光线跟踪着色器消耗或处理的光线数据元素时,这可能是有益的。然而,对于本领域技术人员将显而易见的是,这仅仅是示例,并且在其他示例中,可以有用于RLOAD和RSTORE指令的光线数据元素组的单个集合。
现在参考图9,其示出了用于将光线数据元素存储在外部单元(例如RAC 112)中的光线存储(RSTORE)指令900的示例格式。RSTORE指令900包括存储组标识符字段902、长度(LENGTH)字段904和偏移(OFFSET)字段906。RSTORE指令900可以可选地包括一个或多个其他字段,该一个或多个其他字段中的一些字段在下文进行讨论。
RSTORE指令900的存储组标识符字段902(其也可以称为SPACE字段或组字段)包括标识多个预定义存储组中的一个预定义存储组的信息。在一些情况下,每个存储组可以与唯一的数字标识符相关联,并且通过将SPACE字段902设置为与特定存储组相关联的唯一数字标识符而在RSTORE指令900中标识特定存储组。在这些情况下,可以基于存储组的数量来选择用于SPACE字段902的位数。例如,SPACE字段302的最小位数可以是其中S是存储组的数量。表3示出了图8中所示出的存储组的唯一标识符的示例集合。在此示例中,有三个存储组,因此SPACE字段可以包括两个位。对该领域的技术人员将显而易见的是,这仅仅是示例。
表3
偏移字段906和长度字段904一起标识待存储在外部单元(例如RAC 112)中的所标识的存储组的光线数据元素。虽然上文针对图3描述的示例RLOAD指令的光线数据元素集标识符字段304允许标识(并且因此从外部单元中检索)所标识的加载组中的各个光线数据元素的组合,但在图9中所示出的示例RSTORE指令900中,仅可以标识存储组中的光线数据元素的邻接组。
具体地说,存储组的光线数据元素可以被划分成集合,其中每个集合包括一个或多个光线数据元素,并且对于每个RSTORE请求,集合中只有一个光线数据元素可以被写入外部单元。这意味着,如果存储组有十个光线数据元素集,则每光线存储指令只可以存储该存储组的十个光线数据元素。在一些情况下,光线数据元素集可以仅包括一个光线数据元素,或者该存储组的多个互斥光线数据元素。用于存储组的互斥光线数据元素是不会由预期使用该存储组的着色器一起写入的光线数据元素。应注意,光线数据元素对于一些存储组可以是互斥的,但对于其他存储组不是互斥的。
存储组的每个光线数据元素集随后与指示该集合在存储组中的顺序或位置的信息(例如值或偏移)相关联。随后可以通过标识第一光线数据元素集以及待写入的光线数据元素的总数来标识存储组中的光线数据元素的邻接组,该第一光线数据元素集包括待向外部单元写入的光线数据元素。在图9中所示出的示例中,偏移字段906包括标识第一光线数据元素集的位置(例如偏移)的信息,该第一光线数据元素集包括待向外部单元写入的光线数据元素,并且长度字段904包括指示待写入的光线数据元素的数量的信息。
如何将存储组的光线数据元素划分成光线数据元素集以及哪些光线数据元素集与哪些位置值或偏移值相关联可以被预定义。图8示出了其中所示出的存储组的光线数据元素向集合的示例划分以及集合与偏移值之间的映射。例如,对于调用存储组,其光线数据元素被划分成十七个光线数据元素集,这些光线数据元素集中的每个光线数据元素集包括单个光线数据元素。具体地说,第一集合包括MISS_INDEX光线数据元素,第二集合包括PAYLOAD_0光线数据元素,第三集合包括PAYLOAD_1光线数据元素,以此类推。每个集合与偏移值相关联。具体地说,第一集合(包括MISS_INDEX光线数据元素)与偏移值0相关联,第二集合(包括PAYLOAD_0光线数据元素)与偏移值1相关联,第三集合(包括PAYLOAD_1光线数据元素)与偏移值2相关联。在此示例中,为了使用单个RSTORE指令向外部单元(例如RAC 112)写入ORIGIN_X、ORIGIN_Y、ORIGIN_Z、DIRECTION_X、DIRECTION_Y和DIRECTION_Z光线数据元素,存储组标识符字段902可以被设置为标识调用存储组,偏移字段906可以被设置为包括待写入的光线数据元素的第一集合的偏移(即设置为偏移4(十进制)),并且长度字段可以被设置为6(十进制)以指示将写入6个光线数据元素。
类似地,在图8中可以看到,跟踪存储组被划分成十六个光线数据元素集。除了两个集合之外,每个集合仅包括单个光线数据元素。具体地说,一个集合包括NCM_T光线数据元素和TMIN光线数据元素两者,并且另一集合包括CM_T光线数据元素和CD_T光线数据元素两者。这意味着,可以使用标识跟踪存储组的单个RSTORE指令向外部单元写入NCM_T或TMIN光线数据元素,但并非两者。类似地,可以使用标识跟踪存储组的单个RSTORE指令向外部单元(例如RAC 112)写入CM_T或CD_T数据元素,但并非两者。类似于调用存储组,每个光线数据元素集与偏移值相关联,该偏移值指示其在存储组内的位置(position/location)。例如,第一集合(包括ORIGIN_X光线数据元素的集合)与偏移值0相关联,第二集合(包括ORIGIN_Y光线数据元素的集合)与偏移值1相关联,以此类推。在此示例中,为了使用单个RSTORE指令向外部单元(例如RAC 112)写入PAYLOAD_0、PAYLOAD_1和PAYLOAD_2光线数据元素,存储组标识符字段902可以被设置为标识跟踪存储组,偏移字段906可以被设置为包括待写入的光线数据元素的第一集合的偏移(即偏移13(十进制)),并且长度字段905可以被设置为3(十进制)以指示将写入3个光线数据元素。
在一些情况下,RSTORE指令900还可以包括源(SRC)字段908,该源字段包括标识所标识的光线数据元素在USC 104存储装置110(例如寄存器)中存储的位置的信息。在一些情况下,待写入的光线数据元素被存储在邻接存储位置(例如寄存器)中。在这类情况下,SRC字段908可以标识待向外部单元(例如RAC 112)写入的第一光线数据元素所定位的USC 104存储装置110位置(例如寄存器)。
如上文所描述,每个存储组的光线数据元素被划分成集合,并且每个集合与偏移或位置信息相关联。每个集合可以仅包括一个光线数据元素或多于一个光线数据元素。在光线数据元素集仅包括单个光线数据元素的情况下,则与其相关的偏移信息明确地标识将向外部单元写入哪个光线数据元素。然而,如果光线数据元素集包括多个光线数据元素(其被称为多光线数据元素集),则与该集合相关的偏移信息并不明确地标识待向外部单元(例如RAC 112)写入的特定光线数据元素。因此,在存在具有多光线数据元素集的至少一个存储组的情况下,RSTORE指令可以包括额外信息,该额外信息指示当该集合被标识时,该集合的哪个光线数据元素将被写入外部单元。例如,如图9中所示出,RSTORE指令900可以包括SPACE_CTRL字段910,该字段用于指示所标识的多光线数据元素集的哪个光线数据元素将被写入。
例如,在图8中所示出的示例存储组中,跟踪存储组和查询存储组都具有多光线数据元素集。具体地说,跟踪存储组包括:(i)光线数据元素集,其包括NCM_T光线数据元素和TMIN光线数据元素;以及(ii)光线数据元素集,其包括CM_T光线数据元素和CD_T光线数据元素。查询存储组具有七个多光线数据元素集。在此示例中,当(由偏移字段和长度字段)标识这些多光线数据元素集中的任何多光线数据元素集时,SPACE_CTRL字段910可以包括指示每个所标识的多光线数据元素集的哪个光线数据元素将被写入的信息。
在此示例中,SPACE_CTRL字段910的位可以取决于标识了跟踪存储组还是查询存储组而被不同地使用(并且如果标识了调用存储组,则可以不使用SPACE_CTRL字段910,因为调用存储组不具有任何多光线数据元素集(即每个集合仅包括单个光线数据元素))。例如,SPACE_CTRL字段910可以包括四个位,并且表4示出了当组标识符字段标识跟踪存储组并且多光线数据元素集中的至少一个多光线数据元素集由偏移字段906和长度字段904标识时,这些位可以如何用于标识将向外部单元写入哪些特定光线数据元素。
表4–跟踪存储组
可以看出,对于跟踪存储组,两个多光线数据元素集包括四个唯一的光线数据元素(TMIN、NCM_T、CD_T和CM_T),并且SPACE_CTRL字段910的每个位与那些光线数据元素中的一个光线数据元素相关联。具体地说,位0与TMIN光线数据元素相关联,位1与NCM_T光线数据元素相关联,位2与CD_T光线数据元素相关联,并且位3与CM_T光线数据元素相关联。当SPACE_CTRL字段910的位被设置为一个值(例如‘1’)时,对应光线数据元素将被写入外部单元,并且当该位被设置为另一值(例如‘0’)时,对应光线数据元素将不被写入外部单元。由于TMIN和NCM_T在同一集合中,因而它们不能使用同一RSTORE指令被写入外部单元(在存储组是跟踪存储组的情况下),因此只可以同时设置位0和1中的一个位。类似地,由于CD_T和CM_T在同一集合中,因而它们不能使用同一RSTORE指令被写入外部单元(在存储组是跟踪存储组的情况下),因此只可以同时设置位2和3中的一个位。
表5示出了当组标识符字段标识查询存储组并且其多光线数据元素集中的至少一个多光线数据元素集由偏移字段和长度字段标识时,SPACE_CTRL字段910的位可以如何用于标识将向外部单元写入哪些特定光线数据元素。
表5–查询存储组
如上文所描述,查询存储组包括表6中所示出的多光线数据元素集。
表6
集合 | 数据元素0 | 数据元素1 |
8 | CM_T | CD_T |
10 | CM_INST_IN | NCM_INST_IN |
11 | CM_PRIM_IN | NCM_PRIM_IN |
12 | CM_GEOM_IN | NCM_GEOM_IN |
13 | CM_INST_IN | CD_INST_IN |
14 | CM_PRIM_IN | CD_PRIM_IN |
15 | CM_GEOM_IN | CD_GEOM_IN |
已确定来自这些集合的光线数据元素的以下组合有可能被一起写入,这反映在表5中。
·NCM_INST_IN、NCM_PRIM_IN、NCM_GEOM_IN
·CM_INST_IN、CM_PRIM_IN、CM_GEOM_IN
·CD_T、CD_INST_IN、CD_PRIM_IN、CD_GEOM_IN
·CM_T、CM_INST_IN、CM_PRIM_IN、CM_GEOM_IN
因此,如上文所示出,SPACE_CTRL字段910的位可用于通过以下操作来标识多光线数据元素集的各个光线数据元素:(i)具有与特定光线数据元素相关联的用于标识该特定光线数据元素的一个位;(ii)具有与包括两个光线数据元素的特定多光线数据元素集相关联的一个位,该位用于标识该集合中的光线数据元素中的一个光线数据元素;以及(iii)具有与多个多光线数据元素集相关联的一个或多个位,该一个或多个位用于标识每个集合中的一个光线数据元素(例如每个集合的第一光线数据元素,或者每个集合的第二光线数据元素,或者集合中的光线数据元素的特定组合)。对于本领域技术人员将显而易见的是,可以使用这些技术或方法的任何组合来标识多光线数据元素集中的各个光线数据元素。对于本领域技术人员将显而易见的是,这些仅仅是如何使用SPACE_CTRL字段910的位来标识多光线数据元素集的各个光线数据元素的示例,并且SPACE_CTRL字段910的位可以以任何合适的方式来标识多光线数据元素集的光线数据元素。
在图8中所示出的示例存储组中,存在具有多光线数据元素集的两个存储组。然而,对于本领域技术人员将显而易见的是,这仅仅是示例,并且没有存储组可以具有多光线数据元素集(即每个数据元素集可以仅包括单个光线数据元素),或者一个、两个或多于两个存储组可以包括多光线数据元素集。此外,在图8中所示出的示例存储组中,一个存储组具有两个多光线数据元素集,并且另一存储组包括七个多光线数据元素集。对于本领域技术人员将显而易见的是,这仅仅是示例,并且存储组可以包括任何数量的多光线数据元素集。
如上文所描述,USC 104从调度器接收着色器任务。每个着色器任务指定待处理的数据以及待用于处理该数据的着色器(例如程序)。响应于接收到着色器任务,USC 104针对所标识的数据执行所标识的着色器。光线跟踪着色器任务可以与多条光线相关联,并且所标识的光线跟踪着色器被应用于多条光线中的一条或多条光线。因此,作为着色器任务的部分运行的RSTORE指令被称为与和着色器任务相关联的多条光线相关联,并且其中所标识的光线数据元素将针对与RSTORE指令相关联的光线中的一条或多条光线而被存储在外部单元(例如RAC 112)中。
对于作为着色器任务的部分执行的RSTORE指令,并非与光线跟踪着色器任务相关联的光线中的所有光线都是‘活动的’,并且优选地,仅将RSTORE指令的活动光线的光线数据存储在外部单元(例如RAC 112)中,以避免将不必要的数据写入外部单元。因此,在下文描述的方法中,确定与RSTORE指令相关联的多条光线中的哪些光线对于RSTORE指令是活动的,并且在RSTORE指令中标识的光线数据元素仅针对活动光线而被存储在外部单元(例如RAC 112)中。然而,在其他示例中,不是确定与RSTORE指令相关联的光线中的哪些光线是活动的,而是简单地针对与RSTORE指令相关联的光线中的所有光线存储所标识的光线数据元素可能更简单。
RSTORE指令的活动光线可以在着色器任务级或指令级处被设置。具体地说,一些光线对于光线跟踪着色器任务可能是不活动的,使得这些光线对于作为该光线跟踪着色器任务的部分执行的任何RSTORE指令都将是不活动的。然而,作为同一光线跟踪着色器任务的部分执行的不同RSTORE指令可能具有不同的活动光线。例如,只有与光线跟踪着色器任务相关联的光线1和2对于作为光线跟踪着色器任务的部分执行的第一RSTORE指令可以是活动的,并且只有与光线跟踪着色器任务相关联的光线3和4对于作为光线跟踪着色器任务的部分执行的第二不同RSTORE指令可以是活动的。
现在参考图10,其示出了在USC 104(例如存储逻辑126)处执行RSTORE指令的示例方法1000。方法1000开始于块1002处,其中USC 104(例如存储逻辑126)接收RSTORE指令,诸如针对图9所描述的情况。如上文所描述,RSTORE指令标识光线数据元素的预定义存储组(例如图8中所示出的存储组中的一个存储组)以及该存储组的将向外部单元(例如RAC112)写入的特定光线数据元素。在接收到RSTORE指令之后,方法1000进行到块1004,其中USC 104(例如存储逻辑126)从USC 104本地存储装置110中检索所标识的光线数据元素。方法1000随后进行到块1006,其中USC 104向外部单元(例如RAC 112)发送一个或多个存储请求,该一个或多个存储请求使得对于与RSTORE指令相关联的一条或多条光线中的每条光线,所标识的存储组的所标识的光线数据元素将被写入外部单元的存储装置(例如RAC 112存储单元114、116)。
外部单元(例如RAC 112)与用于将数据从USC 104发送到外部单元(例如RAC 112)的USC 104之间的存储接口120可能不足够大,以致无法在同一循环中将所标识的光线数据元素中的所有光线数据元素传输到外部单元(例如RAC 112)。因此,USC 104可以在多个循环内将所标识的光线数据元素传输到外部单元(例如RAC 112)。在循环中传输的一个或多个光线数据元素可以被称为存储事务。在一些情况下,可以在同一循环中传输的光线数据元素的数量(例如作为同一存储事务的部分)是基于存储接口120的大小和光线数据元素的大小。存储接口120的大小被定义为可以同时跨存储接口120传送的数据量。例如,如果存储接口120是128位宽,并且每个光线数据元素是双字(即32位),则可以在同一循环中(例如在同一存储事务中)传输四个光线数据元素。
在一些情况下,USC 104可以被配置成通过将RSTORE指令转换成多个存储事务,并且针对每个存储事务向外部单元(例如RAC 112)发送独立存储事务请求来实现图10的方法1000的块1006(即向外部单元发送一个或多个存储请求以使得所标识的光线数据元素被存储在外部单元中)。换句话说,USC 104可以被配置成将所接收到的RSTORE指令扩展成多个存储事务。这也可以被描述为使RSTORE指令串行化。例如,如果将使用四个存储事务来将在RSTORE指令中标识的光线数据元素从USC 104传输到外部单元(例如RAC 112),则USC 104(例如存储逻辑126)可以生成并向外部单元(例如RAC 112)传输四个存储事务请求。响应于接收到存储事务请求,外部单元(例如RAC 112)根据光线数据元素的类型将所接收到的光线数据元素存储在其存储单元114、116中的正确位置中。
在一些情况下,可能存在一种或多种类型的存储组,并且用于将RSTORE指令转换成多个事务的技术可以基于在RSTORE指令中标识的存储组的类型。例如一种或多种类型的存储组可以包括每光线(或每实例)存储组和每光线块存储组中的一者或多者。每光线存储组的事务可以仅包括与同一光线相关联的光线数据元素(例如与同一光线相关联的不同光线数据元素)。针对图11描述将与每光线存储组相关的RSTORE指令转换成多个存储事务的示例方法。每光线块存储组的事务可以仅包括多条光线的同一光线数据元素。以与如何将与每光线块加载组相关的RLOAD指令转换成多个加载事务类似的方式,与每光线块存储组相关的RSTORE指令可以被转换成多个存储事务。对于本领域技术人员将显而易见的是,这些仅仅是存储组的示例类型,并且可能存在可以以不同方式被转换成多个存储事务的其他类型的存储组。
如上文所描述,每光线存储组的每个存储事务可以仅包括与同一光线相关的光线数据元素。例如,每光线存储组的存储事务可以包括同一光线的ORIGIN_X、ORIGIN_Y和ORIGIN_Z光线数据元素。相比之下,每光线存储组的存储事务可以不包括第一光线的CM_T光线数据元素和第二不同光线的CM_T光线数据元素。在一些情况下,每光线存储组的光线数据元素被划分成一个或多个块,并且每光线存储组的存储事务可以仅包括同一块中的光线数据元素。在这些情况下,当USC 104(例如存储逻辑126)接收到其中标识有每光线存储组的RSTORE指令时,USC 104(例如存储逻辑126)可以被配置成通过以下操作将所接收到的RSTORE指令转换成多个存储事务:确定所标识的存储组的哪些块包括至少一个所标识的光线数据元素,并且对于包括至少一个所标识的光线数据元素的每个块,对于与RSTORE指令相关联的一条或多条光线中的每条光线,发出具有该块中所标识的光线数据元素的存储事务请求。因此,在此RSTORE转换技术中,不针对所标识的存储组的空块发出存储事务请求——即,不针对不包括至少一个所标识的光线数据元素的所标识的存储组的块生成存储事务。
例如,假设图8中所示出的示例存储组中的每个存储组是每光线存储组。在图8中可以看出,这些存储组中的每个存储组的光线数据元素已被划分成块,其中块中的光线数据元素可以形成同一存储事务的部分。例如,跟踪存储组的光线数据元素已被划分成四个块(块0、1、2和3),查询存储组的光线数据元素已被划分成四个块(块0、1、2和3),调用存储组的光线数据元素已被划分成五个块(块0、1、2、3和4)。
由于可以作为单个存储事务的部分传输的光线数据元素的最大数量为N,因而块中只有N个光线数据元素可以作为单个存储事务的部分进行传输。因此,每个块可以包括一个或多个光线数据元素的最多N个集合,其中如上文所描述,每个光线数据元素集包括单个光线数据元素或多个互斥光线数据元素。这意味着存储事务可以包括来自与块相关联的每个集合的光线数据元素。在本文中描述的示例中,N是四(即四个光线数据元素可以作为单个存储事务的部分进行传输),因此图8中所示出的块中的每个块包括最多四个光线数据元素集。
如上文所描述,存储组中的每个光线数据元素集可以与指示光线数据元素集在存储组中的位置的偏移(或其他类似信息)相关联。在一些情况下,如图8中所示出,块中的光线数据元素是与邻接偏移(例如N个偏移)集相关联的光线数据元素。例如,如图8中所示出,每个存储组的第一块可以包括与前四个偏移(例如偏移0至3)相关联的光线数据元素集,每个存储组的第二块可以包括与接下来的四个偏移(例如偏移4至7)相关联的光线数据元素集,以此类推。
现在参考图11,其示出了示例方法1100,该方法可以由USC 104(例如存储逻辑126)实现,以将RSTORE指令(其标识每光线存储组)转换成多个存储事务。方法1100开始于块1102处,其中USC 104(例如存储逻辑126)将当前光线标识符(其也可以称为实例标识符)初始化。当前光线标识符标识与RSTORE指令相关联的多条光线中的一条光线。由当前光线标识符标识的光线可以被称为当前光线。当前光线标识符可以被初始化以标识与RSTORE指令相关联的第一光线。在一些情况下,与RSTORE指令相关联的多条光线中的每条光线可以由唯一值来标识。在一些情况下,当前光线标识符可以是被初始化为预定值(例如0)的计数器。一旦当前光线标识符已被初始化,方法1100便进行到块1104。
在块1104处,USC 104(例如存储逻辑126)确定当前光线是否是活动的。USC 104可以被配置成连同RSTORE指令一起接收指示与RSTORE指令相关联的多条光线中的哪些光线是活动的信息。如果确定当前光线是活动的,则方法1100前进到块1106。然而,如果确定当前光线不是活动的,则方法1100直接前进到块1108。
在块1106处,USC 104(例如存储逻辑126)将当前块标识符初始化以标识所标识的存储组的块。由当前块标识符标识的块可以被称为当前块。在一些情况下,当前块标识符可以被初始化以标识所标识的存储组的第一块。在一些情况下,当前块标识符可以采取计数器的形式,并且计数器可以被初始化为预定值(例如0)。一旦当前块标识符已被初始化,方法1100便进行到块1110。
在块1110处,USC 104(例如存储逻辑126)分析RSTORE指令,以确定当前块中的至少一个光线数据元素是否将被写入外部单元(例如RAC 112)。在RSTORE指令包括如上文所描述的偏移(OFFSET)字段和长度(LENGTH)字段的情况下,包括至少一个光线数据元素的块的范围可以被确定为 至 在这类情况下,USC 104(例如存储逻辑126)可以被配置成如果当前块标识符的值落入此范围内,则确定当前块中的至少一个光线数据元素将被写入外部单元(例如RAC 112)。如果确定当前块中的至少一个光线数据元素将被写入外部单元(例如RAC 112),则方法1100进行到块1112。然而,如果确定当前块中没有光线数据元素将被存储在外部单元(例如RAC 112)中,则方法1100进行到块1114。
在块1112处,USC 104(例如存储逻辑126)生成并向外部单元(例如RAC 112)发送存储事务请求,以针对当前光线在当前块中存储所标识的光线数据元素。在一些情况下,存储事务请求包括(i)标识当前光线的信息;(ii)标识存储组的信息;(iii)标识当前块的信息;(iv)标识当前块的相关光线数据元素的信息;以及(v)所标识的光线数据元素(即待存储的数据)。
现在参考图12,其示出了存储事务请求1200的示例格式。示例存储事务请求1200包括:光线标识符字段1202、块标识符字段1204、光线数据元素集标识符字段1206、存储组标识符字段1208和多个数据字段1210、1212、1214、1216。光线标识符字段1202(其也可以称为INSTANCE字段)标识与请求相关的光线,并且可以被设置为当前光线标识符的值。块标识符字段1204(其也可以称为ADDR字段)标识与请求相关的(所标识的存储组的)块,并且可以被设置为当前块标识符的值。
光线数据元素集标识符字段1206(当被实现为掩码时,其可以称为MASK字段)标识所标识的块中的光线数据元素集,光线数据元素将从所标识的块中被存储在外部单元中。光线数据元素集标识符字段1206可以从RSTORE指令中的长度信息和偏移信息中生成。例如,如果RSTORE指令标识图8的跟踪存储组,并且偏移字段被设置为2,长度字段是6,并且当前块是块0,则已知集合2至7中的每个集合中的光线数据元素将被存储。因此,对于块0,MASK字段可以被设置为‘0011’(二进制)以指示来自块中的最后两个集合的光线数据元素将被存储。
存储组标识符字段1208(其可以称为SPACE字段)标识相关存储组,并且可以包括处于RSTORE指令中的存储组标识符信息。在RSTORE指令包括SPACE_CTRL字段的情况下,存储事务请求1200还可以包括SPACE_CTRL字段1218,该字段包括来自RSTORE指令的SPACE_CTRL信息。对于本领域技术人员将显而易见的是,这仅仅是示例,并且在其他示例中,存储交易请求可以采用不同的形式,并且/或者具有不同字段和/或额外字段。
数据字段1210、1212、1214、1216包括待存储在外部单元的存储装置(例如RAC 112存储单元114、116)中的光线数据元素。数据字段的数量等于可以作为单个存储事务请求的部分被发送的光线数据元素的数量。在此示例中,四个光线数据元素可以作为单个存储事务请求的部分被发送,因此有四个数据字段。所标识的光线数据元素被放置在对应于其在块中的位置的数据字段中。例如,如果RSTORE指令标识图8的跟踪存储组,并且偏移字段被设置为2,长度字段是6,并且当前块是块0,则已知集合2至7中的每个集合中的光线数据元素将被存储。因此,对于块0的存储事务请求,ORIGIN_Z光线数据元素被放置在第三数据字段1214中,DIRECTION_X光线数据元素被放置在第四数据字段1216中,并且第一数据字段1210和第二数据字段1212可以留空(或者可以含有任何数据,因为它们将由外部单元忽略)。
在接收到存储事务请求时,外部单元(例如RAC 112)从存储组、块和光线数据元素集标识符信息中确定哪些光线数据元素正在被接收以及这些光线数据元素将被存储在外部单元存储装置(例如RAC 112存储单元114、116)中的何处。具体地说,对于每个存储组,外部单元(例如RAC 112)可以具有该组中的每个光线数据元素与该光线数据元素在存储单元114、116中的位置之间的映射。
回到图11,一旦USC 104已向外部单元(例如RAC 112)发送存储事务请求,方法1100便进行到块1114。
在块1114处,USC 104(例如存储逻辑126)确定当前块是否是最后一个块(例如是否已评估存储组的所有可能的块)。在当前块标识符被实现为初始化为0的计数器的情况下,USC 104可以通过将块计数器与(每存储组的最大块数量-1)进行比较来确定当前块是否是最后一个块。如果确定当前块是最后一个块,则方法1100进行到块1108。然而,如果确定当前块不是最后一个块,则方法1100进行到块1116。
在块1116处,USC 104(例如存储逻辑126)更新当前块标识符(例如使当前块计数器递增)以标识另一块(例如下一块)。一旦已更新当前块标识符,方法1100便向回进行到块1110,其中USC 104(例如存储逻辑126)确定是否将存储与新的当前块相关联的光线数据元素中的任何光线数据元素。
在块1108处,USC 104(例如存储逻辑126)确定当前光线是否是与RSTORE指令相关联的最后一条光线(即是否已分析与RSTORE指令相关联的光线中的所有光线)。在当前光线标识符被实现为初始化为0的计数器的情况下,USC 104(例如存储逻辑126)可以通过将当前光线计数器与(与RSTORE指令相关联的最大光线数量-1)进行比较来确定当前光线是否是最后一条光线。在一些情况下,与RSTORE指令相关联的最大光线数量可以是128。然而,将显而易见的是,这仅仅是示例,并且在其他示例中,可以有不同数量的光线与RSTORE指令相关联。如果确定当前光线是与RSTORE指令相关联的最后一条光线,则方法1100结束1118。然而,如果确定当前光线不是与RSTORE指令相关联的最后一条光线,则方法1100前进到块1120。
在块1120处,更新当前光线标识符(例如使当前光线计数器递增)以标识另一光线(例如下一光线)。一旦已更新当前光线标识符,方法1100便向回进行到块1104。
RLOAD和RSTORE指令的使用示例
现在将描述当USC 104被用于使用针对图2和图8描述的加载和存储组来实现光线跟踪时本文中描述的RLOAD和RSTORE指令的示例使用。在一些情况下,光线跟踪可以以光线生成着色器开始。光线生成着色器可能需要光线的x和y发射ID以及x和y发射大小来生成其x、y、z原点。为了将所需数据加载到USC 104中,光线生成着色器可以包括:从初级加载组请求LAUNCH_ID_X和LAUNCH_ID_Y光线数据元素的RLOAD指令(例如按照表2,加载组标识符字段可以被设置为“001”(二进制),并且掩码字段可以被设置为“00000000000000110000”(二进制,最右边位置的最低位索引));以及从发射大小加载组请求LAUNCH_SZ_X和LAUNCH_SZ_Y光线数据元素的RLOAD指令(例如按照表2,加载组标识符字段可以被设置为“010”(二进制),并且掩码字段可以被设置为“00000000000000000111”(二进制,最右边位置的最低位索引))。光线生成着色器随后可以定义所有光线设置,并且随后将此数据存储在外部单元(例如RAC 112)中。为了将此数据存储在外部单元(例如RAC 112)中,光线生成着色器可以包括RSTORE指令,以存储跟踪存储组中除了第三有效载荷光线数据元素之外的所有光线数据元素(例如按照表3,存储组标识符可以被设置为“00”(二进制),偏移可以被设置为“0”(二进制),并且长度可以被设置为15(十进制),并且按照表4,SPACE_CTRL字段可以被设置为“1001”(二进制,最右边位置的最低位索引),以指示将存储TMIN和CM_T光线数据元素)。在执行RSTORE指令层次搜索之后,开始寻找相交的过程(其也可以称为光线遍历),并且光线生成着色器被挂起。
在分层搜索之后,可以对被视为“未命中”的光线运行未命中着色器。未命中着色器可能需要x、y发射光线数据元素以及指向每条光线的存储器层次(MH)地址的所有三个有效载荷光线数据元素。为了获得此数据,未命中着色器可以包括RLOAD指令,该指令请求初级加载组中的PAYLOAD_0、PAYLOAD_1、PAYLOAD_2、LAUNCH_ID_X和LAUNCH_ID_Y光线数据元素(例如加载组标识符字段可以被设置为“001”(二进制),并且掩码字段可以被设置为“00000000000000110111”(二进制,最右边位置的最低位索引))。未命中着色器可以从发射ID中确定像素结果,并且随后经由不同的指令将每条光线的像素结果存储在相关联的MH地址处。
除了运行未命中着色器以外,还可以对被视为“命中”的光线运行命中着色器。命中着色器可能需要指向MH地址的前两个有效载荷光线数据元素、标志光线数据元素以及u光线数据元素和v光线数据元素中的数据。为了获得此数据,命中着色器可以包括RLOAD指令,该指令从跟踪加载组请求FLAGS、U、V、PAYLOAD_0和PAYLOAD_1光线数据元素(例如加载组标识符字段可以被设置为“010”(二进制),并且掩码字段可以被设置为“00110000011100000000”(二进制,最右边位置的位索引))。随后可以使用U光线数据元素和V光线数据元素来导出像素结果,该像素结果可以经由不同的指令被存储到相关联的MH地址。
光线生成着色器随后可以恢复,其中该光线生成着色器从MH地址读取每光线结果(例如像素结果)以操纵输出纹理。
在上文描述的示例中,加载组中的各个光线数据元素可以在RLOAD指令中经由例如掩码(以及可选地SPACE_CTRL字段)来标识,并且存储组中的光线数据元素的邻接块可以在RSTORE指令中通过偏移信息与长度信息(以及可选地SPACE_CTRL字段)的组合来标识。RSTORE指令与RLOAD指令之间的此差异已产生,因为发明人已发现生成光线数据元素并且因此将光线数据元素写入外部单元(例如RAC 112)的光线跟踪着色器往往会将信息块写入存储组中,而处理光线数据元素的光线跟踪着色器往往会读取加载组的非邻接子集。因此,与掩码相反,可以通过使用偏移和长度来简化RSTORE指令。这也允许简化存储逻辑126。然而,对于本领域技术人员将显而易见的是,标识光线数据元素(例如掩码字段)的RLOAD方法可用于标识RSTORE指令中的光线数据元素,并且标识光线数据元素(例如偏移和长度信息)的RSTORE方法可用于标识RLOAD指令中的光线数据元素。
图13示出了计算机***,在该计算机***中可以实现本文中描述的着色器处理单元、加载逻辑、存储逻辑和图形处理单元。计算机***包括CPU 1302、GPU 1304(其可以被实现为本文中描述的GPU 100)、存储器1306和其他设备1314,诸如显示器1316、扬声器1318和相机1320。本文中描述的着色器处理单元104可以在GPU 1304上实现。计算机***的部件可通过通信总线1322彼此通信。
虽然图13示出了图形处理***的一种具体实现,但将理解,可以针对人工智能加速器***绘制类似的方块图——例如通过使用神经网络加速器(NNA)替换CPU 1302或GPU1304,或者通过添加NNA作为独立单元。在这类情况下,着色器处理单元104同样可以在NNA中实现。
图1的图形处理单元、着色器处理单元、加载逻辑和存储逻辑被示出为包括多个功能块。这仅仅是示意性的,并且不旨在限定这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,在本文中被描述为由单元或特定逻辑形成的中间值不需要由单元或逻辑在任何点处物理地生成,并且可以仅表示方便地描述由逻辑或单元在其输入与输出之间执行的处理的逻辑值。
本文中描述的图形处理单元、着色器处理单元、加载逻辑和存储逻辑可以在集成电路上的硬件中体现。本文中描述的图形处理单元、着色器处理单元、加载逻辑和存储逻辑可以被配置成执行本文中描述的方法中的任何方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路***)或其任何组合中实现。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件具体实现的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,当在处理器上被执行时,所述程序代码执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机***的处理器执行由所述代码指定的任务。
处理器、计算机或计算机***可以是任何种类的设备、机器或专用电路,或者它们的具有处理能力以使得其可执行指令的集合或部分。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上***、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机***可包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造***中被处理(即运行)时,该计算机可读程序代码将该***配置成制造被配置成执行本文中描述的方法中的任何方法的图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑,或者制造本文中描述的图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造***处制造如本文中描述的图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造***中被处理时,该集成电路定义数据集使得制造图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑的方法得以执行。
集成电路定义数据集可以呈计算机代码的形式,例如作为网表、用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可在计算机***处进行处理,所述计算机***被配置成用于在软件环境的上下文中产生集成电路的制造定义,所述软件环境包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机***处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便将计算机***配置成用于生成集成电路的制造定义,以执行定义集成电路以便生成该集成电路的制造定义的代码。
现在将针对图14描述在集成电路制造***处处理集成电路定义数据集以便将***配置成制造着色器处理单元或图形处理单元的示例。
图14示出了集成电路(IC)制造***1402的示例,该集成电路制造***被配置成制造如本文中的示例中的任何示例中所描述的图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑。具体地说,IC制造***1402包括布局处理***1404和集成电路生成***1406。IC制造***1402被配置成接收IC定义数据集(例如,如本文中的示例中的任何示例中所描述那样定义图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑),处理IC定义数据集,并且根据IC定义数据集来生成IC(例如其体现如本文中的示例中的任何示例中所描述的图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑)。对IC定义数据集的处理将IC制造***1402配置成制造集成电路,该集成电路体现如本文中的示例中的任何示例中所描述的图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑。
布局处理***1404配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集来确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理***1404已确定电路布局时,该布局处理***可以将电路布局定义输出到IC生成***1406。电路布局定义可以是例如电路布局描述。
如本领域中所已知,IC生成***1406根据电路布局定义来生成IC。例如,IC生成***1406可以实现用于生成IC的半导体器件制造工艺,该半导体器件制造工艺可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。可替代地,提供至IC生成***1406的电路布局定义可以是计算机可读代码的形式,IC生成***1406可以使用该代码形成用于生成IC的适当掩模。
由IC制造***1402执行的不同处理可以全部在一个位置实现,例如,由一方。可替代地,IC制造***1402可以是分布式***,使得工艺中的一些工艺可以在不同位置处执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造***处对集成电路定义数据集的处理可以将该***配置成制造图形处理单元、着色器处理单元、加载逻辑和/或存储逻辑,而无需处理IC定义数据集以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(诸如FPGA)的配置,并且对该数据集的处理可以将IC制造***配置成(例如通过将配置数据加载到FPGA)生成具有该定义配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造***中被处理时,集成电路制造定义数据集可以使得集成电路制造***生成如本文中描述的设备。例如,由集成电路制造定义数据集以上文参考图14描述的方式对集成电路制造***进行配置,可以制造出如本文所述的装置。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图14中示出的示例中,IC生成***可由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实现方式相比,在本申请中阐述的概念在装置、设备、模块和/或***中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这类设备、装置、模块和***(例如在集成电路中)期间,可在性能提高与物理具体实现之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或***的元件之间共享功能块来完成。相反,本申请中所阐述的带来设备、装置、模块和***的物理具体实现的改进(诸如硅面积减小)的概念可与性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种用于图形处理单元(100)的着色器处理单元(104),所述着色器处理单元(104)被配置成执行一个或多个着色器,所述一个或多个着色器包括处理与一条或多条光线相关联的光线数据的一个或多个光线跟踪着色器,光线的所述光线数据包括多个光线数据元素,所述着色器处理单元(104)包括:
存储装置(110);以及
加载逻辑(124),其被配置成:
接收光线加载指令(300),所述光线加载指令包括:(i)标识多个加载组中的加载组的信息(302),所述多个加载组中的每个加载组包括所述多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待从外部单元(112)中检索的所标识的加载组的一个或多个光线数据元素的信息(304,308);
响应于接收到所述光线加载指令(300),向所述外部单元(112)发送一个或多个加载请求,所述一个或多个加载请求使得所述外部单元(112)针对一条或多条光线检索所标识的加载组的所标识的光线数据元素;
从所述外部单元(112)接收所述一条或多条光线的所标识的光线数据元素;以及
将所接收到的光线数据元素存储在所述存储装置(110)中,以用于由所述一个或多个光线跟踪着色器中的光线跟踪着色器进行处理。
2.如权利要求1所述的着色器处理单元(104),其中标识所标识的加载组的一个或多个光线数据元素的所述信息(304,308)标识所标识的加载组的各个光线数据元素。
3.如权利要求1所述的着色器处理单元(104),其中每个加载组的所述一个或多个光线数据元素被划分成一个或多个光线数据元素集,并且标识所标识的加载组的一个或多个光线数据元素的所述信息(304,308)包括标识所标识的加载组的所述一个或多个光线数据元素集中的一个或多个光线数据元素集的信息(304)。
4.如权利要求3所述的着色器处理单元(104),其中标识所标识的加载组的一个或多个光线数据元素的所述信息(304,308)包括掩码(304),所述掩码包括针对所述一个或多个光线数据元素集中的每个光线数据元素集的位,当被设置为某个值时,所述位标识相关联的光线数据元素集。
5.如权利要求3所述的着色器处理单元(104),其中当所标识的光线数据元素集中的至少一个光线数据元素集包括两个或更多个光线数据元素时,对于包括两个或更多个光线数据元素的所标识的光线数据元素集中的所述至少一个光线数据元素集中的每个光线数据元素集,标识所标识的加载组的一个或多个光线数据元素的信息(304,308)还包括标识所述光线数据元素集的一个光线数据元素的信息(308)。
6.如权利要求1至5中任一项所述的着色器处理单元(104),其中:
在多个加载事务中从所述外部单元(112)接收一条或多条光线的所标识的光线数据元素,每个加载事务包括多达预定最大数量的光线数据元素;
所述加载逻辑(124)被进一步配置成将所述一条或多条光线的所标识的光线数据元素划分成所述多个加载事务;以及
从所述加载逻辑(124)发送到所述外部单元(112)的所述一个或多个加载请求包括针对所述多个加载事务中的每个加载事务的加载事务请求(600)。
7.如权利要求6所述的着色器处理单元(104),其中当所标识的加载组属于第一类型时,每个加载事务包括与所述一条或多条光线中的同一光线相关联的光线数据元素。
8.如权利要求7所述的着色器处理单元(104),其中所述第一类型的每个加载组的所述光线数据元素被划分成一个或多个光线数据元素块,并且每个加载事务包括同一光线数据元素块中的光线数据元素。
9.如权利要求8所述的着色器处理单元(104),其中:
每个加载组的所述一个或多个光线数据元素被划分成一个或多个光线数据元素集,并且标识所标识的加载组的一个或多个光线数据元素的所述信息(304,308)包括标识所标识的加载组的所述一个或多个光线数据元素集中的一个或多个光线数据元素集的信息(304);并且
针对加载组的每个光线数据元素块包括所述加载组的所述一个或多个光线数据元素集中的一个或多个光线数据元素集。
10.如权利要求9所述的着色器处理单元(104),其中:
标识所标识的加载组的一个或多个光线数据元素的所述信息(304,308)包括掩码(304),所述掩码包括针对所述一个或多个光线数据元素集中的每个光线数据元素集的位,当被设置为某个值时,所述位标识相关联的光线数据元素集;并且
针对加载组的每个光线数据元素块包括所述加载组的与掩码位的邻接块相关联的光线数据元素集。
11.如权利要求9所述的着色器处理单元(104),其中当所标识的加载组属于所述第一类型时,每个加载事务请求(600)包括标识在所述光线加载指令中标识的所述加载组的信息(608)、标识所述加载组的块的信息(604)、标识所述块的在所述光线加载指令中标识的所述光线数据元素的信息(606)以及标识所述一条或多条光线中的光线的信息(602)。
12.如权利要求7所述的着色器处理单元(104),其中所述加载逻辑(124)被配置成当所标识的加载组属于所述第一类型时,通过以下操作将所述一条或多条光线的所标识的光线数据元素划分成所述多个加载事务:对于所述一条或多条光线中的每条光线,确定每个光线数据元素块是否包括所标识的光线数据元素,以及对于包括所标识的光线数据元素的每个光线数据元素块,生成加载事务请求以针对所述光线检索所述块中的所标识的光线数据元素。
13.如权利要求7所述的着色器处理单元(104),其中当所标识的加载组属于第二类型时,所述多个负载事务中的每个负载事务包括一条或多条光线的同一光线数据元素。
14.如权利要求13所述的着色器处理单元(104),其中所述光线加载指令(300)与被划分成一个或多个光线块的多条光线相关联,并且当所标识的加载组属于所述第二类型时,每个加载事务包括同一光线块中的一条或多条光线的所述同一光线数据元素。
15.如权利要求14所述的着色器处理单元(104),其中所述加载逻辑(124)被配置成当所标识的加载组属于所述第二类型时,通过以下操作将所述一条或多条光线的所标识的光线数据元素划分成所述多个加载事务:对于所标识的光线数据元素中的每个光线数据元素,确定哪个光线块包括活动光线,以及对于包括活动光线的每个光线块,生成加载事务请求以检索所述光线块中的所述活动光线的所述光线数据元素。
16.如权利要求1至5中任一项所述的着色器处理单元(104),其中所述光线加载指令(300)与多条光线相关联,并且请求所标识的光线数据元素所针对的所述一条或多条光线是所述多条光线中的活动光线。
17.如权利要求1至5中任一项所述的着色器处理单元(104),其还包括存储逻辑(126),所述存储逻辑被配置成:
接收光线存储指令(900),所述光线存储指令包括:(i)标识多个存储组中的存储组的信息(902),所述多个存储组中的每个存储组包括所述多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待存储在所述外部单元(112)中的所标识的存储组的一个或多个光线数据元素的信息(906,904,910);
响应于接收到所述光线存储指令,从所述存储装置(110)中检索一条或多条光线的所标识的光线数据元素;以及
向所述外部单元(112)发送一个或多个存储请求,所述一个或多个存储请求使得所述外部单元(112)针对所述一条或多条光线存储所标识的存储组的所标识的光线数据元素。
18.一种处理光线跟踪着色器的方法(400),所述光线跟踪着色器在图形处理单元的着色器处理单元处处理与一条或多条光线相关联的光线数据,所述着色器处理单元被配置成执行一个或多个着色器,所述一个或多个着色器包括所述光线跟踪着色器,光线的所述光线数据包括多个光线数据元素,所述方法(400)包括:
在所述着色器处理单元处接收(402)光线加载指令,所述光线加载指令包括:(i)标识多个加载组中的加载组的信息,所述多个加载组中的每个加载组包括所述多个光线数据元素中的一个或多个光线数据元素,以及(ii)标识待从外部单元中检索的所标识的加载组的一个或多个光线数据元素的信息;
响应于接收到所述光线加载指令,从所述着色器处理单元向所述外部单元发送(404)一个或多个加载请求,所述一个或多个加载请求使得所述外部单元针对一条或多条光线检索所标识的加载组的所标识的光线数据元素;
在所述着色器处理单元处从所述外部单元接收(406)所述一条或多条光线的所标识的光线数据元素;以及
将所接收到的光线数据元素存储(408)在所述着色器处理单元的存储装置中,以供所述光线跟踪着色器处理。
19.一种图形处理单元(100),其包括如权利要求1至5中任一项所述的着色器处理单元(104)。
20.一种计算机可读存储介质,所述计算机可读存储介质中存储有集成电路定义数据集,当在集成电路制造***中被处理时,所述集成电路定义数据集将所述集成电路制造***配置成制造如权利要求1至5中任一项所述的着色器处理单元(104)。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2204680.9A GB2614098B (en) | 2022-03-31 | 2022-03-31 | Methods and hardware logic for writing ray tracing data from a shader processing unit of a graphics processing unit |
GB2204680.9 | 2022-03-31 | ||
GB2204701.3 | 2022-03-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116894757A true CN116894757A (zh) | 2023-10-17 |
Family
ID=81581387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310330534.XA Pending CN116894757A (zh) | 2022-03-31 | 2023-03-30 | 用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116894757A (zh) |
GB (1) | GB2614098B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8674987B2 (en) * | 2006-09-19 | 2014-03-18 | Caustic Graphics, Inc. | Dynamic ray population control |
US8063902B2 (en) * | 2007-10-12 | 2011-11-22 | Caustic Graphics, Inc. | Method and apparatus for increasing efficiency of transmission and/or storage of rays for parallelized ray intersection testing |
US8237711B2 (en) * | 2007-11-19 | 2012-08-07 | Caustic Graphics, Inc. | Tracing of shader-generated ray groups using coupled intersection testing |
US9058690B2 (en) * | 2012-10-05 | 2015-06-16 | Disney Enterprises, Inc. | Ray cone hierarchy renderer |
EP4276762A3 (en) * | 2016-03-14 | 2024-01-17 | Imagination Technologies Limited | Methods and graphics processing units for determining differential data for rays of a ray bundle |
US20210287423A1 (en) * | 2020-03-15 | 2021-09-16 | Intel Corporation | Apparatus and method for double-precision ray traversal in a ray tracing pipeline |
-
2022
- 2022-03-31 GB GB2204680.9A patent/GB2614098B/en active Active
-
2023
- 2023-03-30 CN CN202310330534.XA patent/CN116894757A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2614098B (en) | 2024-05-01 |
GB202204680D0 (en) | 2022-05-18 |
GB2614098A (en) | 2023-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10706608B2 (en) | Tree traversal with backtracking in constant time | |
US11341601B2 (en) | Task assembly for SIMD processing | |
US11715175B2 (en) | Hierarchical tiling in a graphics processing system using chain sorting of primitives | |
US12039643B2 (en) | Tile-based scheduling using per-tile hash values | |
CN115588068A (zh) | 带有并行光线测试的光线相交电路 | |
GB2555929A (en) | Task assembly | |
US11676323B2 (en) | Controlling rendering operations by shader buffer identification | |
US20220172422A1 (en) | Rendering Optimisation by Recompiling Shader Instructions | |
EP3975127A1 (en) | Memory allocation for recursive processing in a ray tracing system | |
US20230334750A1 (en) | Methods and hardware logic for loading ray tracing data into a shader processing unit of a graphics processing unit | |
CN116894757A (zh) | 用于将光线跟踪数据加载到图形处理单元的着色器处理单元中的方法和硬件逻辑 | |
CN116894758A (zh) | 用于从图形处理单元的着色器处理单元写入光线跟踪数据的方法和硬件逻辑 | |
CN113850896A (zh) | 用于光线跟踪***的分层加速结构 | |
US20230260194A1 (en) | Building an acceleration structure for use in ray tracing | |
CN113850895A (zh) | 用于光线跟踪***的分层加速结构 | |
CN113850897A (zh) | 用于光线跟踪***的分层加速结构 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |