CN103886538A - 用于存储共享顶点的技术 - Google Patents

用于存储共享顶点的技术 Download PDF

Info

Publication number
CN103886538A
CN103886538A CN201310714810.9A CN201310714810A CN103886538A CN 103886538 A CN103886538 A CN 103886538A CN 201310714810 A CN201310714810 A CN 201310714810A CN 103886538 A CN103886538 A CN 103886538A
Authority
CN
China
Prior art keywords
vertex
index
unit
buffer
local
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
Application number
CN201310714810.9A
Other languages
English (en)
Inventor
杰尔姆·F·小杜鲁克
济亚德·S·哈库拉
亨利·帕尔德·莫尔顿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN103886538A publication Critical patent/CN103886538A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/001Arbitration of resources in a display system, e.g. control of access to frame buffer by video controller and/or main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Image Generation (AREA)

Abstract

公开了用于存储共享顶点的技术。图形处理单元包括其每个配置为彼此并行处理图形基元的几何处理单元集。给定几何处理单元生成一个或多个图形基元或者几何对象,并且对相关联的顶点数据进行本地缓冲。几何处理单元还对针对那些顶点的不同索引集进行缓冲,其中每个这样的集代表不同图形基元或者几何对象。几何处理单元随后可以彼此并行地流出所缓冲的顶点和索引到全局缓冲区。流输出同步单元采用顶点可以写入其中的全局顶点缓冲区中的不同基地址来协调由每个几何处理单元提供的顶点和索引并行流。流输出同步单元还提供索引可以写入其中的全局索引缓冲区中的不同基地址给每个几何处理单元。

Description

用于存储共享顶点的技术
技术领域
本发明总体涉及处理图形数据,并且更具体地涉及用于存储共享顶点的技术。
背景技术
常规的图形处理单元(GPU)通常实现包括一系列图形处理段的图形处理管线。在图形处理管线的每个段,GPU可以实施一个或多个不同的面向图形的处理操作。例如,在一个段GPU可以汇编代表图形场景的基元集,并且在后续段GPU可以对与基元集相关联的顶点实施着色操作。最后,GPU可以将那些顶点光栅化为代表图形场景的像素。
诸如以上示例中所描述的、实施常规图形处理管线的GPU,通常包括几何着色单元,其配置为对顶点和基于几何(geometry-based)的信息实施着色操作,并且随后输出一个或多个图形基元或者一个或多个相对更复杂的几何对象到后续单元用于光栅化。对于每个所生成的图形基元或者几何对象,几何着色单元输出和与该图形基元或者几何对象相关联的每个顶点相对应的顶点数据。例如,当处理三角形时,几何着色单元将输出用于该三角形的三个点的每一个的顶点数据。用于给定顶点的顶点数据可以描述场景中顶点的位置、与顶点相关联的覆盖数据或者除此之外的与顶点相关联的属性集。当生成图形基元或者几何对象时,几何着色单元通常将所生成的图形基元或者组成所生成的几何对象的全部或一部分的每个图形基元,存储为与该基元相关联的顶点集和与该集中的每个顶点相对应的顶点数据。
另外,在一些情况中,几何着色单元可能生成几何对象,其包括共享顶点的互连的图形基元的集合。几何对象可以是例如扇形、条带形或网状类型的几何对象。例如,给定图形场景可以包括在扇形、条带形或网状中互连的数个个体图形基元,以创建具有任意形状的表面外观。表面中的每个图形基元可以通过在两个图形基元之间共享的一个或多个顶点连接到邻近的图形基元。在其他情况中,可以由几何着色单元生成共享一个或多个公共顶点的诸如三角形或者条带形的多个几何对象。
在这些不同情况中,几何着色单元通常存储与在图形基元或者几何对象之间共享的每个顶点相关联的顶点数据的冗余复制(copy)。然而,因为典型的图形场景可能包括数百万个共享顶点,所以这样的方法是有问题的。结果是,常规几何着色单元可能存储数百万个冗余数据的复制。处理这样的冗余数据无效地消耗GPU资源并且可能降低渲染图形场景的速度。
因此,本领域所需要的是,用于处理图形场景中的图形基元或者几何对象之间所共享的顶点的改善的技术。
发明内容
本发明的一个实施例阐述了用于缓冲与几何对象相关联的数据的计算机实现的方法。方法包括,接收第一几何对象;生成与第一几何对象相关联的第一顶点集;以及将第一索引集存储在本地索引缓冲区中的第一条目中,其中第一索引集中的每个索引引用(reference)第一顶点集中的不同顶点,以及其中第一条目对应于与第一顶点集相关联的图形基元或者几何对象。
所公开的方法的一个优点在于,由于顶点数据被索引,因此顶点数据的冗余复制不被存储在不同几何着色单元的本地的顶点缓冲区或者全局顶点缓冲区中,从而节约处理单元的资源并且提高整体处理效率。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3是根据本发明的一个实施例的、图2的通用处理集群内的流多处理器的一部分的框图;
图4是根据本发明一个实施例的、图2的一个或多个并行处理单元可以配置以实现的图形处理管线的示意图;
图5是根据本发明一个实施例的、几何处理单元的集合的示意图;
图6是根据本发明一个实施例的、用于将顶点数据和索引数据存储在多个本地缓冲区中的方法步骤的流程图;
图7是根据本发明一个实施例的、用于将顶点和索引流出(streaming)到多个全局缓冲区的方法步骤的流程图;
图8是根据本发明一个实施例的、用于填充多个全局缓冲区的方法步骤的流程图;
图9是根据本发明一个实施例的、示出配置为本地缓冲索引和顶点的示例性几何处理单元的示意图;
图10是根据本发明一个实施例的、示出配置为存储索引和顶点的示例性全局缓冲区的示意图。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105。在一个实施例中,并行处理子系统112是将像素传递到显示设备110的图形子系统,显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二级管显示器等。系统盘114也连接到I/O桥107并可以配置为存储内容、应用程序和数据,由CPU102和并行处理子系统112使用。系统盘114提供用于应用程序和数据的非易失性存储,并且可以包括固定的或者可移动的硬盘驱动器、闪存设备和CD-ROM(光盘只读存储器)、DVD-ROM(数字通用光盘-ROM)、蓝光光盘、HD-DVD(高清DVD)或者其他磁的、光的或固态存储设备。
交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102以及两个或更多个并行处理子系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU202可以是同样的或不同的,并且每个PPU202可具有一个或多个专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
图3是根据本发明的一个实施例的、图2的GPC208内的流多处理器(SM)310的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
经由将处理任务分布到一个或多个流多处理器(SMs)310的管线管理器(未示出)来有利地控制GPC208的操作,其中每个SM310配置为处理一个或多个线程组。每个SM310包括指令L1高速缓存370,其配置为经由GPC208内的L1.5高速缓存(未示出)接收指令和常数。线程束调度器和指令单元312从指令L1高速缓存370接收指令和常数,并且根据指令和常数来控制本来寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。如本领域已知的,SM功能单元可以是管线化的,允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在包括M个流多处理器310的GPC208中,在任何给定时间在GPC208中可以执行多达G*M个线程组的系统。
此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。
如果TMD322是网格TMD322,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致L1高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。
共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在L1高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
每个SM310中的L1高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在L1高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和L1高速缓存320。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1-3所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
图形管线架构
图4为根据本发明一个实施例的,由图2中一个或多个PPU202经配置以实现的图形处理管线400的示意图。例如,一个SPM310可被配置为执行一个或多个顶点处理单元415、几何(geometry)处理单元425以及片段处理单元460的功能。数据汇编器410、基元汇编器420、光栅器455以及光栅操作单元465的功能也可以由GPC208和相应的分区单元215中的其他处理引擎执行。可替代地,可采用用于一个或多个功能的专用处理单元来实现图形处理管线400。
数据汇编器410处理单元针对高序位的表面、基元等采集顶点数据,并输出包括顶点属性的顶点数据到顶点处理单元415。顶点处理单元415是被配置为执行顶点着色器程序的可编程执行单元,根据顶点着色器程序的指定,光照(lighting)和转换顶点数据。例如,顶点处理单元415可被编程为将顶点数据从基于对象的坐标表示(对象空间)转换到可选地基于诸如世界空间或标准化设备坐标(NDC)空间的坐标系统。顶点处理单元415可读取由数据汇编器410存储在L1高速缓存320、并行处理存储器204、系统存储器104中的数据,用于处理顶点数据。
基元汇编器420从顶点处理单元415接收顶点属性,按需读取存储的顶点属性,并且构建用于通过几何处理单元425处理的图形基元。图形基元包括三角形、线段、点等。几何处理单元425是被配置为执行几何着色器程序的可编程执行单元,根据所述几何着色器程序的指定,转换从基元汇编器420接收的图形基元。例如,几何处理单元425可经编程以细分图形基元为一个或多个新的图形基元,并计算被用于光栅化所述新的图形基元的参数,例如平面方程系数。几何处理单元425还可以编程为,基于从基元汇编器420所接收的图形基元来生成附加的图形基元或者包括一个或多个图形基元的几何对象。
在一些实施例中,几何处理单元425也可增加或删除几何流中的元素。几何处理单元425输出指定新的图形基元的参数和顶点到视窗(viewport)缩放、剔除(cull)及裁剪(clip)单元450。几何处理单元425可读取存储在并行处理存储器204或系统存储器104中的数据,用于处理几何数据。视窗缩放、剔除及裁剪单元450执行裁剪、剔除以及视窗缩放,并输出处理后的图形基元到光栅器455。
光栅器455扫描转换新的图形基元,并输出片段和覆盖数据到片段处理单元460。此外,光栅器455可被配置为执行z剔除和其他基于z的优化。
片段处理单元460是被配置为执行片段着色器程序的可编程执行单元,根据片段着色器程序的指定,转换从光栅器455接收的片段。例如,片段处理单元460可经编程以执行诸如透视校正、纹理映射、着色、混合等操作,以产生输出到光栅操作单元465的着色片段。片段处理单元460可读取存储在并行处理存储器204或系统存储器104中的数据,用于处理片段数据。可以根据编程的采样率,来按像素、采样或其他粒度来对片段进行着色。
光栅操作单元465是执行诸如模板(stencil)、z测试、混合等光栅操作的处理单元,并输出像素数据作为处理后的图形数据,用于存储在图形存储器中。处理后的图形数据可存储在例如并行处理存储器204和/或系统存储器104的图形存储器中,用于在显示设备110上显示或用于由CPU102或并行处理子系统112进一步处理。在本发明的一些实施例中,光栅操作单元465被配置为压缩被写入存储器中的z数据或色彩数据,以及解压缩从存储器中读出的z数据或色彩数据。
处理在图形基元之间共享的顶点
图5是根据本发明一个实施例的、示出包括几何处理单元550-0至550-N的子系统500的示意图。如图所示,几何处理单元550-0至550-N中的每一个均耦连到流输出同步(SSYNC)单元514、全局索引缓冲区516和全局顶点缓冲区518。每个几何处理单元550包括几何着色单元504、包括本地索引缓冲区508和本地顶点缓冲区510的缓冲区506、以及流输出单元512。
如图所示,几何着色单元504-0包括几何着色单元504-0、包括本地索引缓冲区508-0和本地顶点缓冲区510-0的缓冲区506-0,以及流输出单元512-0。类似几何着色单元504-1包括几何着色单元504-1、包括本地索引缓冲区508-1和本地顶点缓冲区510-1的缓冲区506-1,以及流输出单元512-1,并且几何着色单元504-N包括几何着色单元504-N、包括本地索引缓冲区508-N和本地顶点缓冲区510-0的缓冲区506-N,以及流输出单元512-N。在以下描述中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的带有连字符的参考数字来表示。
几何处理单元550配置为处理图形基元或者几何对象502并且生成一个或多个图形基元或者包括一个或多个图形基元的图形对象。图形处理单元550进一步配置为随后分别流出与所生成的图形基元或者几何对象相关联的顶点数据和索引信息到全局顶点缓冲区518和全局索引缓冲区516。SSYNC单元514配置为跨不同几何处理单元550协调该数据的流出。
几何处理单元550可以由图3所示的SM310来实现并且可以表示图4所示的图形处理管线400中的处理段。在一个实施例中,几何处理单元550和图4所示的几何处理单元425类似。几何处理单元550中的几何着色单元504配置为,从诸如图4所示的基元汇编器420的上游处理单元接收图形基元或者几何对象502。图形基元可以代表例如三角形、长方形、线段、点或者其他类型的图形基元。几何对象可以代表更高级别的图形构建,其可以包括单个图形基元或者可以分解成图形基元的集合,其中该集合可以代表条带形、扇形或网状类型的几何对象。在各种实施例中,图形基元或者几何对象502可以代表图形场景的一部分或者可以对应于与几何处理单元550相关联的显示屏幕的特定区域。
当几何处理单元550接收图形基元或者几何对象502时,几何着色单元504配置为对与该图形基元或者几何对象502相关联的顶点和其他信息实施一个或多个几何着色操作。与给定图形基元或者几何对象502相关联的顶点和其他信息可以代表例如三角形或者其他多边形的角。那些顶点和其他信息还可以包括与图形基元或者几何对象502相关联的顶点属性以及其他类型的顶点数据。几何着色单元504配置为,将与由几何着色单元504所生成的一个或多个图形基元或者一个或多个几何对象相关联的顶点数据存储在本地顶点缓冲区510中。
在几何着色单元504生成共享给定顶点的不同图形基元或者几何对象的情况中,诸如当细分几何对象520为更小的图形基元时,几何着色单元504配置为,仅将共享的顶点和相关联的顶点数据在本地顶点缓冲区510中缓冲一次。用这种方法,几何着色单元504有利地避免对顶点和相关联的顶点数据的冗余复制进行缓冲。例如,几何着色单元504可以接收单个图形基元502并且随后基于图形基元502生成彼此共享顶点的图形基元的集合。所生成的图形基元的集合可能是“条带形”、“扇形”或者“网状”构建。在这样的情况中,几何着色单元504仅将每个唯一的顶点在本地顶点缓冲区510中存储一次。
几何着色单元504还配置为,通过生成本地顶点缓冲区510的索引集来维护用于图形基元502的连通性信息,索引集引用与几何着色单元504所生成的图形基元或者图形对象相关联的顶点。在一个实施例中,几何着色单元504可以确定给定顶点已经驻留在本地顶点缓冲区510中,并且随后可以生成包括引用给定顶点的索引的索引集,即不在本地顶点缓冲区510中重新存储该顶点。几何着色单元504配置为将用于每个所生成的图形基元或者几何对象的索引集存储在本地索引缓冲区508中的条目中。通常,本地索引缓冲区508中的条目中的每个索引可以与存储在本地顶点缓冲区510中的不同的顶点相对应,并且存储在本地索引缓冲区508中的条目中的索引集,可以与特定图形基元、特定几何对象或者代表图形场景中的对象的任何顶点集合相对应。例如,几何着色单元504还可以存储代表更高级别的几何对象的索引集,更高级别的几何对象诸如可以分解为包括条带形、扇形和网状类型对象的多个互相的图形基元的“大的”多边形。
本地索引缓冲区508中的索引集可以直接引用本地顶点缓冲区510中的不同的顶点,即通过指定本地缓冲区510中的不同(various)地址。可替代地,索引集还可以通过指定本地顶点缓冲区510中的本地偏移或者本地顶点缓冲区510中的本地索引来引用不同的顶点。
在不同时间,耦连到缓冲区506的流输出单元512可以分别流出存储在本地顶点缓冲区510中的顶点和存储在本地索引缓冲区508中的索引到全局顶点缓冲区518和全局索引缓冲区516。然而在这之前,流输出单元512配置为首先确定存储在本地顶点缓冲区510中的顶点的数目以及存储在本地索引缓冲区508中的索引的数目。流输出单元512随后将这些数目通信到SSYNC单元514。
SSYNC单元514用全局顶点缓冲区518中的基地址和全局索引缓冲区516中的基地址来响应流输出单元512。全局顶点缓冲区518中的基地址代表,处流输出单元512可以在其中安全地写入由流输出单元512通信到SSYNC单元514的数目的顶点的该缓冲区中的位置。类似,全局索引缓冲区516中的基地址代表,处流输出单元512可以在其中安全地写入由流输出单元512通信到SSYNC单元514的数目的索引的该缓冲区中的位置。
SSYNC单元514配置为使用以下更详细地描述的技术来生成这些基地址。一旦收到全局顶点缓冲区中的基地址,流输出单元512随后就可以复制本地顶点缓冲区510中的顶点到开始于基地址处的全局顶点缓冲区518。另外,一旦接收到全局索引缓冲区中的基地址,流输出单元512随后就可以复制本地索引缓冲区508中的索引到开始于基地址处的全局索引缓冲区516。
当从本地索引缓冲区508复制索引到全局索引缓冲区516时,流输出单元512配置为更新那些索引,以反映所引用的全局顶点缓冲区518中的顶点的新的位置。在一个实施例中,流输出单元512通过等于全局顶点缓冲区518中的基地址的值来增量每个索引。
采用以上方法,几何处理单元550-0至550-N的每一个配置为彼此并行处理图形基元或者几何对象,并且随后将该处理的结果以及相关联的索引在本地缓冲区中进行缓冲。经本地缓冲的顶点和索引数据随后可以流出到全局缓冲区。
如上提到的,SSYNC单元514配置为,在不同的几何处理单元550之间对将顶点和索引分别流出到全局顶点缓冲区518和全局索引缓冲区516进行协调。实践中,SSYNC单元514配置为根据顺序来服务于流输出单元512-0到512-N的每一个。这样,SSYNC根据该顺序通信全局顶点缓冲区518中的基地址和全局索引缓冲区516中的基地址到每个流输出单元512-0至512-N。在一个实施例中,该顺序(sequence)是应用程序编程接口(API)次序(order)。在另一个实施例中,顺序由在几何处理单元550上执行的软件应用程序来定义,并且软件应用程序的程序员确定顺序。
SSYNC单元514配置为,当顺序服务于那些流输出单元512时,提供全局索引缓冲区516中的不同的基地址和本地索引缓冲区518中的不同的基地址给每个流输出单元512。因此,每个不同的流输出单元512能够分别写顶点和索引到全局顶点缓冲区518和全局索引缓冲区516的不同部分。在一个实施例中,每个流输出单元512能够与写顶点和索引到全局顶点缓冲区518和全局索引缓冲区516另一些流输出单元512彼此并行地分别写顶点和索引到全局顶点缓冲区518和全局索引缓冲区516。
SSYNC单元514基于由序列中的之前的流输出单元512写到全局顶点缓冲区518的顶点的数目,来确定用于序列中的给定流输出单元512的全局顶点缓冲区518中的基地址。更具体的,SSYNC单元514维护全局顶点缓冲区518中的“当前”基地址,其指示顶点可以安全写入其中的全局顶点缓冲区518中的位置。一旦接收到指示将由特定流输出单元512写入全局顶点缓冲区518的顶点的数目的数据,SSYNC单元514便传送全局顶点缓冲区518中的“当前”基地址到该流输出单元512,以在写入顶点时使用。SSYNC单元514随后基于顶点的该数目以及基于那些顶点的大小来更新全局顶点缓冲区518中的“当前”基地址。之后,经更新的全局顶点缓冲区518中的基地址代表流输出单元512的按顺序的后续流输出单元512可以在其中安全写入顶点数据的该缓冲区中的位置。
SSYNC单元514还基于由按顺序的之前的流输出单元512写入全局索引缓冲区516的索引的数目,来确定用于按顺序的给定流输出单元512的全局索引缓冲区516中的基地址。更具体的,SSYNC单元514维护全局索引缓冲区516中的“当前”基地址,其指示索引可以安全写入其中的全局索引缓冲区516中的位置。一旦接收到将由特定流输出单元512写入全局索引缓冲区516的索引的数目的数据,SSYNC单元514传送全局索引缓冲区516中的“当前”基地址到流输出单元512,以在写入索引时使用。SSYNC单元514随后基于索引的数目以及基于那些索引的大小来更新全局索引缓冲区516中的“当前”基地址。之后,经更新的全局索引缓冲区516中的基地址代表流输出单元512的按顺序的后续流输出单元512可以在其中安全写入索引数据的缓冲区中的位置。
通过实行上述方法,SSYNC单元514配置为维护可以提供给给定流输出单元512的全局顶点缓冲区518中的“当前”基地址和全局索引缓冲区516中的“当前”基地址。SSYNC单元514还配置为随后更新那些“当前”基地址,以适应尝试将顶点和索引流出到全局顶点缓冲区518和全局索引缓冲区516的后续的流输出单元512。
以下结合参考不同的流程图的图6-8更详细地描述用于实现本文所述功能性的各自方法。本文所述的功能性下面还结合图9-10通过示例的方式来描述。
图6是根据本发明一个实施例的、用于分别将顶点数据和索引数据存储在本地顶点缓冲区510和本地索引缓冲区508中的方法步骤的流程图。虽然结合图1-3的系统描述方法步骤,本领域普通技术人员可以理解配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
如图所示,方法600开始于步骤620,其中几何处理单元550接收图形基元或者几何对象502。在步骤604,几何处理单元550中的几何着色单元504对图形基元或者几何对象502实施一个或多个几何着色操作。这样,几何着色单元504可以编程为,基于所接收的图形基元或者几何对象502,来生成附加的图形基元或者包括一个或多个图形基元的一个或多个几何对象。在一个实施例中,例如几何处理单元550可以接收几何对象,并且随后通过将几何对象细分为彼此共享一个或多个顶点的互连的图形基元的集合来生成多个图形基元。
在步骤606,几何着色单元504将与几何着色单元504所生成的图形基元或者几何对象相关联的顶点存储在本地顶点缓冲区510中。在特定的所生成的图形基元或者几何对象与已经存储在本地顶点缓冲区510中的顶点相关联的情况中(例如,顶点由另一个所生成的图形基元或者几何对象共享),几何着色单元504可以针对该顶点跳过步骤606。采用该方法,几何着色单元504有利地避免了对所生成的顶点和其相关联的顶点数据的冗余复制进行缓冲。
在步骤608,几何着色单元504将引用本地顶点缓冲区510中的顶点的索引存储在本地索引缓冲区508中。本地索引缓冲区508中的索引可以直接引用本地顶点缓冲区510中的不同顶点,即通过指定本地顶点缓冲区510中的不同地址。可替代地,索引还可以通过指定本地顶点缓冲区510中的本地偏移或者本地顶点缓冲区510中的本地索引来引用不同顶点。通常,在步骤608存储在本地索引缓冲区508中的索引代表与在步骤604所生成的图形基元或者几何对象相对应的顶点。随后方法600结束。
通过实现上述方法,与所生成的基元或者几何对象相关联的由几何处理单元550所生成的顶点,可以本地缓冲并且本地索引,从而阻止顶点和相关联的顶点数据的多个复制被冗余存储的情况。此外,当系统包括多个几何处理单元500时,那些几何处理单元550的每一个可以与其他几何处理单元500并行地生成图形基元或者几何对象并且随后在本地对与那些图形基元或者几何对象相关联的顶点和索引进行缓冲。本领域技术人员将理解,方法600还可以应用于处理几何对象或者包括顶点的集合的任何其他的更高级别的图形构建。例如方法600可以应用于为多边形存储顶点和相关联的索引,其中该多边形可以分解为共享一个或多个顶点的互连的图形基元的集合。
每个几何处理单元550还配置为与SSYNC单元514通信,以协调将顶点和索引分别流出到全局顶点缓冲区518和全局索引缓冲区516,如下面结合图7更详细的描述。
图7是根据本发明一个实施例的,用于将顶点和索引流出到多个全局缓冲区的方法步骤的流程图。虽然结合图1-3的系统描述方法步骤,本领域普通技术人员可以理解配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
如图所示,方法700开始于步骤700,其中几何处理单元550中的流输出单元512确定本地顶点缓冲区510中的顶点的数目和本地索引缓冲区508中的索引的数目。本地顶点缓冲区510和本地索引缓冲区508中的顶点和索引可以分别引入到通过结合图6所述的方法600实现的那些缓冲区。
在步骤704,流输出单元将本地顶点缓冲区510中的顶点的数目和本地索引缓冲区508中的索引的数目通信到SSYNC单元514。在步骤706,流输出单元512从SSYNC单元514接收全局顶点缓冲区518中的基地址和全局索引缓冲区516中的基地址。全局顶点缓冲区518中的基地址代表,处流输出单元512可以在其中安全地写入由流输出单元512通信到SSYNC单元514的数目的顶点的缓冲区中的位置。类似,全局索引缓冲区516中的基地址代表,处流输出单元512可以在其中安全地写入由流输出单元512通信到SSYNC单元514的数目的索引的该缓冲区中的位置。SSYNC单元514配置为通过实现以上结合图5所述的以及以下结合图8所述的技术来生成这些基地址
在步骤708,流输出单元512从本地顶点缓冲区510流出顶点到全局顶点缓冲区518,其开始于由SSYNC单元514所提供的全局顶点缓冲区518中的基地址处。在步骤712,流输出单元512从本地索引缓冲区508流出索引到全局索引缓冲区516,其开始于由SSYNC单元514所提供的全局索引缓冲区516中的基地址处。这样,流输出单元512配置为更新那些索引以反映所引用的顶点在全局顶点缓冲区518中的新位置。在一个实施例中,在步骤706,流输出单元512通过与由SSYNC单元514所提供的全局顶点缓冲区518中的基地址相等的值来增量每个索引。随后方法结束。
通过实现上述方法,几何处理单元550-0至550-N中的每一个配置为分别流出经本地缓冲的顶点和索引到全局顶点缓冲区518和全局索引缓冲区516。此外,每个这样的几何处理单元550可以与其他处理单元550彼此并行地分别流出顶点和索引到全局顶点缓冲区518和全局索引缓冲区516。结合图8描述可以由SSYNC单元514实现来提供那些缓冲区中的基地址给几何处理单元550的技术。
图8是根据本发明一个实施例的、用于填充多个全局缓冲区的方法步骤的流程图。虽然结合图1-3的系统描述方法步骤,本领域普通技术人员可以理解配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
如图所示,方法800开始于步骤802,其中SSYNC单元514从几何处理单元550中的流输出单元512接收数据,其指定存储在本地顶点缓冲区510中的顶点的数目和存储在本地索引缓冲区508中的索引的数目。在步骤804,SSYNC单元514传送全局顶点缓冲区518中的当前基地址和全局索引缓冲区516中的当前基地址到流输出单元514。全局顶点缓冲区518中的基地址代表,流输出单元512可以在其中安全地写入由流输出单元512通信到SSYNC单元514的顶点数目的该缓冲区中的位置。类似,全局索引缓冲区516中的基地址代表,流输出单元512可以在其中安全地写入由流输出单元512通信到SSYNC单元514的索引数目的该缓冲区中的位置。
在步骤806,SSYNC单元514基于由流输出单元514指定的顶点数目来更新全局顶点缓冲区518中的当前基地址。SSYNC单元514还可以基于那些顶点的大小来更新全局顶点缓冲区518中的当前基地址。在步骤808,SSYNC单元514基于由流输出单元514指定的索引数目来更新全局索引缓冲区516中的当前基地址。SSYNC单元514还可以基于那些索引的大小来更新全局索引缓冲区516中的当前基地址。随后方法结束。
通过实现上述方法,SSYNC单元514能够维护全局顶点缓冲区518和全局索引缓冲区516中的基地址,其代表数据可以安全写入的那些缓冲区中的地址。当继续服务于处理单元550时,SSYNC单元514因此能够提供那些缓冲区中的不同基地址给按顺序的每个几何处理单元550。
结合图9-10通过示例的方式示出以上结合图5-8所述的各种技术。
图9是根据本发明一个实施例的、示出配置为存储索引和顶点的示例性几何处理单元550-0和550-1的示意图。如图所示,几何处理单元550-0包括几何着色单元504-0、本地索引缓冲区508-0和本地顶点缓冲区510-0。类似,几何处理单元502-1包括几何着色单元504-1、本地索引缓冲区508-1和本地顶点缓冲区510-1。几何处理单元550-0和550-1也在图5中示出,虽然在该示例中为了清晰,那些几何处理单元550的某些元件已被省略。
几何处理单元550配置为接收与图形基元或者几何对象502相关联的顶点数据和相关几何信息。几何着色单元504-0随后生成代表三角形条带的几何对象502-0,其中顶点A、B、C、D和E是与那些三角形相关联的顶点。几何着色单元504-0进一步配置为将那些顶点和相关联的顶点数据存储在本地顶点缓冲区510-0中。由于与几何对象502-0相关联的不同三角形共享顶点,因此那些共享的顶点可以仅有一次被包括在本地顶点缓冲区510-0中。如图所示,几何着色单元504-0还配置为将引用那些顶点的索引存储在本地索引缓冲区508-0中。在给定顶点已经驻留在本地顶点缓冲区510-0的情况中,几何着色单元504-0可以将该顶点的索引引入到本地索引缓冲区508-0中,而不重新存储该顶点在本地顶点缓冲区510-0中,从而避免了顶点数据的冗余复制。在本文所述的示例性情景中,几何着色单元504-0基于顺时针或者逆时针旋转方向从几何对象502-0生成三角形。本领域技术人员可以理解,几何着色单元504-0可以使用任何特定旋转方向或者旋转方向的组合来生成三角形和/或其他图形基元。
此外,几何着色单元504-0还可以引入代表不包括在几何对象502-0中的三角形的索引集(例如与索引0、2和3相对应的三角形ACD)。在一个实施例中,几何着色单元?04-0配置为,通过细分复杂的几何对象502为那些不同三角形来生成由顶点A、B、C、D和E形成的不同三角形。在另一个实施例中,几何着色单元504-0可以配置为,通过重复(replicate)简单几何对象502诸如单个三角形来生成由顶点A、B、C、D和E形成的不同三角形。几何着色单元504-0还可以将把几何对象502-0作为整体代表的索引存储在本地索引缓冲区508-0中,即代表所有顶点A、B、C、D和E的索引。
与几何处理单元550-0类似,几何处理单元550-1配置为接收与图形基元或者几何对象502相关联的顶点数据和相关几何信息。几何着色单元504-1随后生成代表三角形条带的几何对象502-1,其中顶点J、K、L、M、N和O是与那些三角形相关联的顶点。几何着色单元504-0进一步配置为将那些顶点和相关联的顶点数据存储在本地顶点缓冲区510-1中。由于与几何对象502-1相关联的不同三角形共享顶点,因此那些共享的顶点可以仅有一次被包括在本地顶点缓冲区510-1中。如图所示,几何着色单元504-1还配置为,将引用那些顶点的索引存储在本地索引缓冲区508-1中。在给定顶点已经驻留在本地顶点缓冲区510-1的情况中,几何着色单元504-1可以将该顶点的索引引入到本地索引缓冲区508-1中,而不重新存储该顶点在本地顶点缓冲区510-1中,从而避免了顶点数据的冗余复制。在本文所述的示例性情景中,几何着色单元504-1基于顺时针或者逆时针旋转方向从几何对象502-1生成三角形。本领域技术人员可以理解,几何着色单元504-1可以使用任何特定旋转方向或者旋转方向的组合来生成三角形和/或其他图形基元。
在一个实施例中,几何着色单元504-1配置为,通过细分复杂的几何对象502为那些不同三角形来生成由顶点J、K、L、M、N和O形成的不同三角形。在另一个实施例中,几何着色单元504-1可以配置为,通过重复简单几何对象502诸如单个三角形,来生成由顶点J、K、L、M、N和O形成的不同三角形。几何着色单元504-1还可以将把几何对象502-1作为整体代表的索引存储在本地索引缓冲区508-1中,即代表所有顶点J、K、L、M、N和O的索引。
流输出单元512-0和512-1(如图5所示)随后可以基于由SSYNC单元514提供的基地址,来分别将存储在各自本地顶点缓冲区510和本地索引缓冲区508中的顶点和索引流出到全局顶点缓冲区518和全局索引缓冲区516。示例性全局顶点缓冲区518和示例性全局索引缓冲区516在图10中示出。
图10是根据本发明一个实施例的、示出配置为分别存储顶点和索引的示例性全局顶点缓冲区518和全局索引缓冲区516的示意图。
如图所示,全局顶点缓冲区518包括与图9所示的图形基元502-0和502-1相关联的每一个不同顶点。具体的,全局顶点缓冲区518包括与图形基元502-0相对应的顶点A、B、C、D和E,以及与图形基元502-1相对应的顶点J、K、L、M、N和O。几何处理单元550-0配置为基于从SSYNC单元514接收的基地址,将顶点A-E写入全局索引缓冲区518。类似,全局处理单元550-1配置为基于从SSYNC单元514接收的不同基地址,将顶点J-O写入全局索引缓冲区518。又如图所示,全局索引缓冲区516包括存储在全局顶点缓冲区518中的顶点的索引。几何处理单元550-0和550-1配置为,基于分别存储在本地索引缓冲区508-0和508-1中的索引和基于从SSYNC单元514所接收的基地址,将这些索引写入全局索引缓冲区516。
在该示例中,SSYNC单元514顺序服务于几何处理单元550-0和550-1,从几何处理单元550-0开始。SSYNC单元514从几何处理单元550-0接收数据,其指示将写入全局顶点缓冲区518中的顶点A-E的数目(在该示例中,该数目是5)。SSYNC单元514用全局顶点缓冲区518中的当前基地址来响应几何处理单元550-0。最初,SSYNC单元514维护为“0”的全局顶点缓冲区518中的初始基地址。SSYNC单元514随后基于几何处理单元550-0将写入全局顶点缓冲区518的顶点的数目来更新当前基地址,以反映附加的顶点和相关联的数据可以安全写入其中的全局顶点缓冲区518中的新的基地址(在该示例中,为“5”的基地址)。
在从几何处理单元550-0接收到指示顶点A-E的数目的数据之后,SSYNC单元514随后可以从几何处理单元550-0接收指示将写入全局索引缓冲区516的不同索引集的数目的附加的数据(在该示例中,该数目是4)。另外,每个索引集可以对应于图形基元502-2中的不同三角形。SSYNC单元514用全局索引缓冲区516中的基地址来响应几何处理单元550-0。最初,SSYNC单元514维护为“0”的全局索引缓冲区516中的初始基地址。SSYNC单元514随后基于几何处理单元550-0将写入全局索引缓冲区516的索引的数目来更新当前基地址,以反映附加的索引可以安全写入其中的全局索引缓冲区516中的新的基地址(在该示例中,为“4”的基地址)。
之后,SSYNC单元514可以服务于几何处理单元550-1。SSYNC单元514从几何处理单元550-1接收数据,其指示将写入全局顶点缓冲区518中的顶点J-O的数目(在该示例中,该数目是6)。SSYNC单元514用为“6”的全局顶点缓冲区518中的当前基地址来响应几何处理单元550-1。SSYNC单元514随后基于几何处理单元550-1将写入全局顶点缓冲区518的顶点的数目来更新当前基地址,以反映顶点和相关联的数据可以安全写入其中的全局顶点缓冲区518中的新的基地址(在该示例中,为“11”的基地址)。
在从几何处理单元550-1接收到指示顶点J-O的数目的数据之后,SSYNC单元514随后可以从几何处理单元550-1接收指示将写入全局索引缓冲区516的不同索引集的数目的附加的数据(在该示例中,该数目是4)。另外,每个索引集可以对应于图形基元502-1中的不同三角形。SSYNC单元514用为“4”的全局索引缓冲区516中的当前基地址来响应几何处理单元550-1。SSYNC单元514随后基于几何处理单元550-1将写入全局索引缓冲区516的索引的数目来更新当前基地址,以反映附加的索引可以安全写入其中的全局索引缓冲区516中的新的基地址(在该示例中,为“8”的基地址)。
当几何处理单元550-0或者550-1根据上述技术写入索引到全局索引缓冲区516时,那些几何处理单元550的每一个配置为基于从SSYNC单元所接收的全局顶点缓冲区518中的基地址来更新索引。因此,几何处理单元550-0可以将每个索引增量“0”,即当SSYNC单元514服务于几何处理单元550-0时所提供的全局顶点缓冲区518中的基地址。类似,几何处理单元550-1可以将每个索引增量“5”,即当SSYNC单元514服务于几何处理单元550-1时所提供的全局顶点缓冲区518中的基地址。采用该方法,每个几何处理单元550更新流出到全局索引缓冲区516的索引,以反映存储在全局顶点缓冲区518中的正确顶点。
本领域技术人员可以理解,结合图9和10所述的示例仅是本发明的功能性可以在其中实现的一个可能的情况,本发明还可以在各种其他情况中实现。
总而言之,图形处理单元包括几何处理单元集,其每个配置为彼此并行处理图形基元或者几何对象。给定几何处理单元生成一个或多个图形基元或者一个或多个几何对象,并且本地缓冲与图形基元或者几何对象相关的顶点数据。几何处理单元还对那些顶点的不同索引集进行缓冲,其中每一个这样的集代表不同图形基元或者几何对象。几何处理单元可以随后将经缓冲的顶点和索引流出到全局缓冲区。流输出同步单元通过提供顶点可以写入其中的全局顶点缓冲区中的不同基地址给每个几何处理单元,来跨不同几何处理单元协调顶点和索引的流出。流输出单元还提供可以在其中写入索引的全局索引缓冲区中的不同基地址给每个几何处理单元。
有利地,采用所公开的方法,由于可以本地索引顶点数据,因此几何处理单元不存储顶点数据的冗余复制,从而节约了GPU资源。此外,每个这样的几何处理单元,可以在的全局顶点缓冲区中本地存储所生成的顶点数据,其还被索引。跨所有几何处理单元合理化用于全局索引缓冲区的索引,使得可以针对整个系统优化顶点缓冲区的大小。因为索引全局顶点缓冲区被索引,所以缓冲区可以实质上小于常规非索引全局顶点缓冲区。因此,相对于现有技术架构,采用较小的全局顶点缓冲区,将顶点缓冲区反馈回几何处理单元的图形处理管线上游的段成为更有效率的执行,从而提高整个系统的处理效率。
本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的光盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
因此,本发明的实施例的范围在随后的权利要求中阐述。

Claims (10)

1.一种用于缓冲与图形基元或者几何对象相关联的数据的计算机实现方法,所述方法包括:
接收第一几何对象或者图形基元;
基于所述第一几何对象或者图形基元生成第一顶点集;以及
将第一索引集存储在本地索引缓冲区中的第一条目内,其中所述第一索引集中的每个索引引用所述第一顶点集中的不同顶点,以及其中所述第一条目对应于与所述第一顶点集相关联的图形基元或者几何对象。
2.一种图形子系统,包括:
几何处理单元,配置为:
接收第一几何对象或者图形基元;
基于所述第一几何对象或者图形基元生成第一顶点集;以及
将第一索引集存储在本地索引缓冲区中的第一条目内,其中所述第一索引集中的每个索引引用所述第一顶点集中的不同顶点,以及其中所述第一条目对应于与所述第一顶点集相关联的图形基元或者几何对象。
3.根据权利要求2所述的图形子系统,其中所述几何处理单元进一步配置为,将所述第一顶点集存储在本地顶点缓冲区中,其中所述第一索引集中的每个索引引用与所述第一顶点集中的不同顶点相关联的所述本地顶点缓冲区中的位置。
4.根据权利要求3所述的图形子系统,其中所述几何处理单元进一步配置为:
基于所述第一几何对象或者图形基元生成第一图形基元集,其中所述第一图形基元集中的每个图形基元包括所述第一顶点集中的至少一个顶点;
为所述第一图形基元集中的每个图形基元生成不同的索引集;
将每个索引集存储在所述本地索引缓冲区中的不同条目内;以及
将所述第一顶点集中的每个顶点的一个实例存储在所述本地顶点缓冲区中。
5.根据权利要求3所述的图形子系统,其中所述几何处理单元进一步配置为:
接收第二几何对象或者图形基元;
基于所述第二几何对象或者图形基元生成第二顶点集;
确定所述第二顶点集中的顶点也包括在所述第一顶点集中;
将第二索引集存储在所述本地索引缓冲区中的第二条目中,其中所述第二索引集包括引用也包括在所述第一顶点集中的、所述第二顶点集中的所述顶点的索引,并且其中所述第二条目对应于与所述第二顶点集相关联的图形基元或者几何对象;以及
将不包括在所述第一顶点集中的、所述第二顶点集中的每个顶点的一个实例存储在本地顶点缓冲区中。
6.根据权利要求3所述的图形子系统,其中所述图形处理单元进一步配置为:
确定存储在所述本地顶点缓冲区中的顶点的数目;
将所述存储在所述本地顶点缓冲区中的顶点的数目传送到流同步单元;
从所述流同步单元接收与全局顶点缓冲区相关联的基地址;以及
根据所述全局顶点缓冲区中的所述基地址将存储在所述本地顶点缓冲区中的所述顶点写入所述全局顶点缓冲区。
7.根据权利要求6所述的图形子系统,所述几何处理单元进一步配置为:
确定存储在所述本地索引缓冲区中的索引的数目;
将所述存储在所述本地索引缓冲区中的索引的数目传送到所述流同步单元;
从所述流同步单元接收与全局索引缓冲区相关联的基地址;
根据所述全局顶点缓冲区中的所述基地址,更新存储在所述本地索引缓冲区中的所述索引,来生成所述全局顶点缓冲区的全局索引;以及
基于所述全局索引缓冲区中的基地址将所述全局顶点的所述全局索引写入所述全局索引缓冲区中。
8.根据权利要求6所述的图形子系统,其中所述几何处理单元配置为,通过更新存储在所述本地索引缓冲区中的所述索引来生成所述全局顶点缓冲区的全局索引,包括以所述全局顶点缓冲区中的基地址作为增量增大存储在所述本地索引缓冲区中的每个索引。
9.根据权利要求2所述的图形子系统,其中所述第一索引集中的每个索引包括,与存储在所述本地顶点缓冲区中不同顶点相对应的、与所述本地顶点缓冲区相关联的地址、偏移或者本地索引。
10.一种配置为缓冲与几何对象相关联的数据的计算设备,包括:
处理单元,配置为:
接收第一几何对象或者图形基元,
基于所述第一几何对象或者图形基元生成第一顶点集,以及
将第一索引集存储在本地索引缓冲区中的第一条目内,其中所述第一索引集中的每个索引引用所述第一顶点集中的不同顶点,以及其中所述第一条目对应于与所述第一顶点集相关联的图形基元或者几何对象。
CN201310714810.9A 2012-12-20 2013-12-20 用于存储共享顶点的技术 Pending CN103886538A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/723,078 2012-12-20
US13/723,078 US9418616B2 (en) 2012-12-20 2012-12-20 Technique for storing shared vertices

Publications (1)

Publication Number Publication Date
CN103886538A true CN103886538A (zh) 2014-06-25

Family

ID=50878791

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310714810.9A Pending CN103886538A (zh) 2012-12-20 2013-12-20 用于存储共享顶点的技术

Country Status (4)

Country Link
US (1) US9418616B2 (zh)
CN (1) CN103886538A (zh)
DE (1) DE102013018136A1 (zh)
TW (1) TW201443826A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109979000A (zh) * 2017-12-14 2019-07-05 想象技术有限公司 多视图图元块
CN110784773A (zh) * 2019-11-26 2020-02-11 北京奇艺世纪科技有限公司 弹幕生成方法、装置、电子设备及存储介质

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9779528B2 (en) 2014-09-12 2017-10-03 Microsoft Technology Licensing, Llc Text realization
CN104200053B (zh) * 2014-09-22 2017-09-15 克拉玛依红有软件有限责任公司 实现三维模型索引缓冲共享、体系创建的方法和系统
US10460418B2 (en) * 2017-02-10 2019-10-29 Microsoft Technology Licensing, Llc Buffer index format and compression
US10417787B2 (en) * 2017-02-15 2019-09-17 Microsoft Technology Licensing, Llc Index buffer block compression
US10733690B2 (en) * 2018-05-17 2020-08-04 Intel Corporation GPU mixed primitive topology type processing
US10974153B2 (en) * 2019-01-17 2021-04-13 Disney Enterprises, Inc. Streamable compressed geometry for live broadcast
US11455153B2 (en) * 2019-03-18 2022-09-27 Advanced Micro Devices, Inc. Dynamic instances semantics
US20220051476A1 (en) * 2020-08-17 2022-02-17 Intel Corporation Apparatus and method for improving graphics processing performance

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040022299A1 (en) * 1998-12-15 2004-02-05 Anglin Richard L. Chirp waveform decoding system
US20090027407A1 (en) * 2007-07-24 2009-01-29 Bourd Alexei V Data access tool for programmable graphics hardware
US20100118039A1 (en) * 2008-11-07 2010-05-13 Google Inc. Command buffers for web-based graphics rendering
US20110109638A1 (en) * 2009-10-05 2011-05-12 Duluk Jr Jerome F Restart index that sets a topology

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001095257A1 (en) 2000-06-08 2001-12-13 Imagination Technologies Limited Tiling and compression for rendering 3d images
GB2416100B (en) * 2002-03-26 2006-04-12 Imagination Tech Ltd 3D computer graphics rendering system
CA2506419C (en) 2002-11-15 2014-01-21 Sunfish Studio, Inc. Visible surface determination system & methodology in computer graphics using interval analysis
US7978205B1 (en) * 2004-05-03 2011-07-12 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7209139B1 (en) * 2005-01-07 2007-04-24 Electronic Arts Efficient rendering of similar objects in a three-dimensional graphics engine
US7659899B2 (en) 2005-08-08 2010-02-09 Via Technologies, Inc. System and method to manage data processing stages of a logical graphics pipeline
US7545381B2 (en) 2005-11-10 2009-06-09 Via Technologies, Inc. Interruptible GPU and method for context saving and restoring
US9529632B2 (en) 2009-09-03 2016-12-27 Advanced Micro Devices, Inc. Interlocked increment memory allocation and access
US9922442B2 (en) * 2012-07-18 2018-03-20 Arm Limited Graphics processing unit and method for performing tessellation operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040022299A1 (en) * 1998-12-15 2004-02-05 Anglin Richard L. Chirp waveform decoding system
US20090027407A1 (en) * 2007-07-24 2009-01-29 Bourd Alexei V Data access tool for programmable graphics hardware
US20100118039A1 (en) * 2008-11-07 2010-05-13 Google Inc. Command buffers for web-based graphics rendering
US20110109638A1 (en) * 2009-10-05 2011-05-12 Duluk Jr Jerome F Restart index that sets a topology

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109979000A (zh) * 2017-12-14 2019-07-05 想象技术有限公司 多视图图元块
CN110784773A (zh) * 2019-11-26 2020-02-11 北京奇艺世纪科技有限公司 弹幕生成方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
DE102013018136A1 (de) 2014-06-26
TW201443826A (zh) 2014-11-16
US20140176589A1 (en) 2014-06-26
US9418616B2 (en) 2016-08-16

Similar Documents

Publication Publication Date Title
CN103886547A (zh) 用于存储共享顶点的技术
CN103886538A (zh) 用于存储共享顶点的技术
US9947084B2 (en) Multiresolution consistent rasterization
US9495781B2 (en) Early sample evaluation during coarse rasterization
CN103793876A (zh) 分布式拼接式进行高速缓存
CN109978751A (zh) 多gpu帧渲染
CN103885893A (zh) 用于访问内容寻址存储器的技术
CN103810743A (zh) 在上游着色器中设置下游渲染状态
CN103729167A (zh) 用于改进多线程处理单元中的性能的技术
CN104050033A (zh) 用于有索引的屏障的硬件调度的系统和方法
CN104050706A (zh) 用于低功率图形渲染的像素着色器旁路
CN104050705A (zh) 处置光栅操作中的post-z覆盖数据
CN103886634A (zh) 利用每像素着色器线程的高效超级采样
CN103885752A (zh) 多线程处理单元中可编程的混合
CN103885902A (zh) 用于经由纹理硬件实施存储器访问操作的技术
JP2010086528A (ja) 単一パステセレーション
US11663767B2 (en) Power efficient attribute handling for tessellation and geometry shaders
CN103871019A (zh) 优化三角形拓扑用于路径渲染
US20200043228A1 (en) System-generated stable barycentric coordinates and direct plane equation access
CN103870309A (zh) 用于集群多级寄存器堆的寄存器分配
CN103885903A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN110675480A (zh) 用于获取纹理操作的采样位置的方法和装置
US11941743B2 (en) Generation of sample points in rendering applications using elementary interval stratification
US8558833B1 (en) System and method for symmetric parameterization of independently tessellated patches
CN112749120A (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
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20140625