[go: up one dir, main page]

CN107392836A - 使用图形处理管线实现的立体多投影 - Google Patents

使用图形处理管线实现的立体多投影 Download PDF

Info

Publication number
CN107392836A
CN107392836A CN201710275015.2A CN201710275015A CN107392836A CN 107392836 A CN107392836 A CN 107392836A CN 201710275015 A CN201710275015 A CN 201710275015A CN 107392836 A CN107392836 A CN 107392836A
Authority
CN
China
Prior art keywords
data
view
graphics processing
views
processing pipeline
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710275015.2A
Other languages
English (en)
Other versions
CN107392836B (zh
Inventor
济亚德·赛米·哈库拉
埃里克·B·卢姆
H·P·莫尔顿
埃米特·M·克里加里夫
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 CN107392836A publication Critical patent/CN107392836A/zh
Application granted granted Critical
Publication of CN107392836B publication Critical patent/CN107392836B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • H04N13/10Processing, recording or transmission of stereoscopic or multi-view image signals
    • H04N13/106Processing image signals
    • H04N13/111Transformation of image signals corresponding to virtual viewpoints, e.g. spatial image interpolation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • H04N13/20Image signal generators
    • H04N13/275Image signal generators from 3D object models, e.g. computer-generated stereoscopic image signals

Landscapes

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

Abstract

公开了一种用于生成多视图图像数据的方法、计算机可读介质和系统。所述方法包括处理模型的图元数据以生成经处理的图元数据的步骤,所述经处理的图元数据包括用于图元数据中的每个顶点的多个位置矢量,与每个顶点相关联的位置矢量的数目等于被生成的至少两个视图中视图的数目。所述方法进一步包括将所述经处理的图元数据存储于缓冲区中。最后,用于至少两个视图中的每个视图的所述经处理的图元数据可以从所述缓冲区中读取,并将其发送至光栅管线以生成对应于特定视图的图像数据。

Description

使用图形处理管线实现的立体多投影
技术领域
本发明涉及图形处理,并且更具体地涉及生成用于多视图应用程序的图像数据。
背景技术
虚拟现实(VR)应用程序正变得更加主流,正在通过类似Oculus VR手机的设备从专用的硬件体系架构移至传统的台式机。VR手机利用投射到用户不同眼睛的不同视图来创造立体感效果。像传统的计算机应用程序一样,用于在这些设备上显示的图像数据可以通过各种应用程序实时生成。这些应用程序可以利用图形处理单元(GPU)或其他专用的图形硬件以处理更加复杂的几何学,以便创造更加真实感的图像。
GPU可以实现至少部分的图形处理管线以有效地处理三维图形数据,以生成要在显示设备上显示的像素数据。传统上,图元数据(即用于被渲染的模型的数据)被输入到图形处理管线的顶部。图元数据通过若干级数的图形处理管线被继续处理,其最终将图元数据转换为定义来自特定虚拟相机位置的模型的特定图像的像素数据。由于如VR手机所显示的那些的立体图像要求从两个不同相机位置生成的两个不同的视图,所以图形处理管线必须生成两个不同的图像。传统上,从不同的虚拟相机位置生成两个视图会要求应用程序每次为每个视图将用于模型的图元数据输入到图形处理管线中两次。然而,将图元数据输入到图形处理管线中两次需要大概两倍的时间处理数据和生成两个视图。以这种方式生成多视图图像数据是效率低下的,因为很多阶段的图形处理管线可能执行两次同样的运算。因此,存在解决这些问题和/或其他关于现有技术的问题的需要。
发明内容
公开了用于生成多视图图像数据的方法、计算机可读介质以及系统。该方法包括处理模型的图元数据以生成经处理的图元数据的步骤,该经处理的图元数据包括用于图元数据中的每个顶点的多个位置矢量,与每个顶点相关联的位置矢量的数目等于所生成的至少两个视图中视图的数目。所述方法进一步包括将经处理的图元数据存储于缓冲区中。最后,经处理的图元数据可以针对至少两个视图中的每个视图从缓冲区中被读取,并被发送到光栅管线以生成与特定的视图对应的图像数据。
附图说明
图1A例示了根据一个实施例的用于生成多投影立体图像数据的方法的流程图;
图1B例示了根据一个实施例的用于生成用于选定的视图的图像数据的方法的流程图;
图2例示了根据一个实施例的并行处理单元(PPU);
图3A例示了根据一个实施例的、图2的PPU的通用处理集群;
图3B例示了根据一个实施例的、图2的PPU的分区单元;
图4例示了根据一个实施例的、图3A的流多处理器;
图5例示了根据一个实施例的、包括图2的PPU的片上系统;
图6是根据一个实施例的、由图2的PPU实现的图形处理管线的概念图;
图7是根据另一个实施例的、由图2的PPU实现的图形处理管线的概念图;
图8是根据一个实施例的、改进的图形处理管线的概念图;
图9是根据一个实施例的、用于将顶点数据存储于缓冲区中的数据结构的概念图;
图10例示了根据一个实施例的、视图到渲染目标的映射;以及
图11例示了示例性的系统,其中可以实现各种在先实施例的各种体系架构和/或功能。
具体实施方式
图1A例示了根据一个实施例的用于生成多投影立体图像数据的方法100的流程图。将被领会到的是,方法100在处理器所执行的软件的范围内描述;然而,在一些实施例中,方法100可以用硬件或硬件和软件的一些组合来实现。方法100开始于步骤102,在此处图形处理管线被配置为根据至少两个视图渲染用于模型的图元数据。每个视图可以与一个或更多视口相关联。每个视图可以与用于渲染图元数据所定义的模型的不同的虚拟相机位置相对应。图元数据可以包括用于几何图元(例如线、三角形、四边形、三角扇形、三角形带、补片(patch)等)的若干数据结构。每个几何图元可以包括若干顶点,每个顶点与多个顶点属性相关联。在一个实施例中,图形处理管线被配置为渲染两个视图的图元数据,每个视图与六个视口相关联,每个视口与立方体贴图的面相对应。
在步骤104,图形处理管线接收用于模型的图元数据。在一个实施例中,主处理器所执行的应用程序利用由用于并行处理单元的设备驱动所实现的API。设备驱动翻译API呼叫以生成被发送到并行处理单元的数据流。数据流可以包括用于配置并行处理单元的各种硬件单元以实现图形处理管线的各个部分以及要由图形处理管线处理的图元数据的命令。
在步骤106,图形处理管线处理图元数据。针对图元数据的每个顶点生成至少两个位置矢量,所述至少两个位置矢量中的每个位置矢量对应于至少两个视图中特定视图。通过以图形处理管线所实现的顶点着色、细分曲面着色以及几何着色阶段的任意组合的任意阶段,可以处理图元数据以及生成多个位置矢量。
在一个实施例中,几何着色阶段由执行几何着色程序(即配置为由并行处理单元的可编程单元执行的程序)的流多处理器实现,所述几何着色程序包括生成用于每个顶点的至少两个视图中的每个视图的位置矢量的指令。例如,几何着色程序可以生成包括用于至少两个视图中的每个视图的顶点的x-坐标、y-坐标、z-坐标和w-坐标的位置矢量(例如<x,y,z,w>)。可以基于由应用程序所定义的不同的虚拟相机位置生成不同的位置矢量。在立体观测系统中,不同的虚拟相机位置通常被配置为近似地匹配观看者眼睛的位置之间的距离,所述观看者眼睛的位置由水平对称于观测者头部的中心垂直面所代替。
在另一个实施例中,细分曲面可以由外壳着色阶段、细分曲面阶段以及域着色阶段实施。在这种实施例中,域着色阶段由执行域着色程序的流多处理器实现,所述域着色程序包括针对对应于至少两个视图中的每个视图的每个顶点生成多个位置矢量的指令。在另一个实施例中,顶点着色阶段由执行顶点着色程序的流多处理器实现,所述顶点着色程序包括针对对应于至少两个视图中的每个视图的每个顶点生成多个位置矢量的指令。
在步骤108中,经处理的图元数据被存储于存储器中的缓冲区中。经处理的图元数据可以包括用于每个顶点的数据结构,其包括对应于至少两个视图中的每个视图的多个位置矢量。图形处理管线的视口缩放、剔除和裁剪(SCC)阶段可以配置为使用视口SCC阶段的数据输出功能存储经处理的图元数据于缓冲区中,这样几何的图元数据可以多次被发送到光栅管线(即包括光栅化和像素或片段着色的图形处理管线的阶段),每次发送用于每个视图的图形图元到光栅管线。
在步骤110,至少两个视图的特定视图被选择。在一个实施例中,立体观测图像数据被生成,意味着存在两个视图。在这种实施例中,视口SCC阶段可以选择第一视图或第二视图以生成用于左眼图像的图像数据或用于右眼图像的图像数据。在步骤112,利用光栅管线生成用于所选择视图的图像数据。对应于所选择视图的图元数据可以由图形处理管线的视口SCC阶段从缓冲区中被读取并被发送到光栅管线以生成图像数据。光栅管线可以包括配置为将经处理的图元数据转换为2D图像数据的图形处理管线的若干阶段。包括于光栅管线中的所述阶段可以包括光栅化阶段、片段着色阶段和光栅操作阶段。步骤110和112可以针对至少两个视图中的每个视图进行重复。
图1B例示了根据一个实施例的、用于生成所选视图的图像数据的方法120的流程图。方法100的步骤110和112可以由图形处理管线的视口SCC阶段管理,并至少部分由光栅管线的各个阶段实现。步骤112可以由图1B的方法120中例示的分立的步骤来实现。
在步骤122,图元数据基于所选择的视图从缓冲区中被读取。在一个实施例中,视口SCC阶段从缓冲区中读取图元数据,选择用于对应于所选择的视图的顶点的位置矢量。换句话说,即便存储于缓冲区中的图元数据包括用于图元的每个顶点的多个位置矢量,视口SCC阶段将读取图元数据,犹如图元数据只包括用于图元的每个顶点的一个位置矢量,对应于所选择的视图而读取的位置矢量被处理。不同的位置矢量可以作为顶点的顶点属性,连同其他依赖于视图的(view-dependent)和独立于视图的(view-independent)属性一起,被存储于数据结构中。当从缓冲区中读取用于特定视图的图元数据时,所述图元数据将包括所有独立于视图的属性以及对应于该特定视图的依赖于视图的属性,并且忽略所有对应于其他视图的依赖于视图的属性。
在步骤124,图元数据被发送到光栅管线以生成对应于所选择视图的图像数据。在一个实施例中,视口SCC阶段发送图元数据到图形处理管线的光栅化阶段,其为光栅管线的第一阶段。在步骤126,图元数据被处理以生成用于每个图元的片段(fragment)。图形处理管线的光栅化阶段可以将图元数据转换为多个片段,其被发送至图形处理管线的片段着色阶段。在步骤128,片段被处理以生成用于所选择视图的图像数据。光栅管线的片段着色阶段和/或光栅操作阶段可以生成用于对应于所选择视图的图像数据的最终像素值。在步骤130,用于所选择视图的图像数据被存储于渲染目标中。所述渲染目标可以是存储器中分配的帧缓冲区(即图像数据的2D数组)。在一个实施例中,每个视图与特定的渲染目标相关联,其中多个渲染目标对应于多个视图。在另一个实施例中,用于两个或更多个视图的图像数据以并行(side-by-side)配置被存储于单一渲染目标中,其中单一渲染目标对应于多个视图。
将被理解的是,上述的图形处理管线每次通过管线的第一部分处理用于至少两个视图的全部视图的图元数据,并且接着每次通过管线的第二部分处理用于至少两个视图的每个视图的图元数据,以生成用于至少两个视图的每个视图的图像数据。该配置使能应用程序简单地配置图像处理管线,以使用简单的配置命令生成多投影视图,例如立体观测图像,并且接着仅一次发送用于所有视图的图元数据到图形处理管线。此外,由于独立于视图的处理只在图形处理管线的第一部分实施了一次,上述技术比简单地多次馈送图元数据到图形处理管线的顶部以生成用于不同视图的图像数据更有效率。
还将理解的是,在一些实施例中,来自不同视图的任务将交错(interleave)。换句话说,图形处理管线将不严格地序列化来自每个视图的任务,在开始渲染其他视图之前完全渲染特定视图。例如,在实现拼贴(tiling)的系统中,用于特定瓦片(tile)的图像数据将在其他瓦片被处理(渲染用于多个视图中的每一个的新瓦片的图像数据)之前针对多个视图中的每一个被渲染。
现在将详细阐述关于各种可选架构和特征的多个示例性信息,根据用户的需求,可以使用它们或不使用它们来实现上述框架。应该强烈注意的是,下述的信息是为了说明性的目的而阐述的,并且不应该解释为以任何方式进行限制。任何下述特征都可以可选地与或不与其他所述特征以外的特征合并。
并行处理架构
图2例示了根据一个实施例的并行处理单元(PPU)200。在一个实施例中,PPU 200是实现于一个或更多集成电路设备上的多线程处理器。PPU200是设计为并行处理大量线程的延迟隐藏架构。线程(即执行的线程)是配置为由PPU 200执行的指令集的实例。在一个实施例中,PPU 200是配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于显示在例如液晶显示器(LCD)设备的显示设备上的二维(2D)图像数据的图形处理单元(GPU)。在其他实施例中,PPU 200可以用于实施通用计算。虽然本文中为了说明性目的而提供了一个示例性的并行处理器,但应该强烈注意的是,该处理器只为了说明性目的而阐述,以及为了同样的说明性目的,任何处理器都可以被用于补充和/或替代。
如图2所示,PPU 200包括输入/输出(I/O)单元205、主机接口单元210、前端单元215、调度单元220、工作分配单元225、集线器230、交叉开关(Xbar)270、一个或更多通用处理集群(GPC)250、以及一个或更多分区(partition)单元280。PPU 200可以经由系统总线202连接至主机处理器或其他外围设备。PPU 200还可以连接至包含若干存储设备204的本地存储器。在一个实施例中,本地存储器可包括若干动态随机存取存储器(DRAM)设备。
I/O单元205配置为经由系统总线202从主机处理器(未示出)发送和接收通信(即命令、数据等)。I/O单元205可以经由系统总线202直接与主机处理器通信,或通过一个或更多中间设备(例如内存桥)与主机处理器通信。在一个实施例中,I/O单元205实现外围部件互连快速(PCIe)接口,用于经由PCIe总线进行通信。在可选的实施例中,I/O单元205可以实现其他类型的众所周知的接口,用于与外部设备通信。
I/O单元205耦连至解码经由系统总线202接收的数据包的主机接口单元210。在一个实施例中,所述数据包代表配置为使得PPU 200实施各种操作的命令。根据指令可能指定的,主机接口单元210发送经解码的命令到PPU 200的各个其他单元。例如,一些命令可以被发送至前端单元215。其他命令可以被发送至集线器230或PPU 200的其他单元,例如一个或更多复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,主机接口单元210配置为路由PPU 200的各个逻辑单元之中和之间的通信。
在一个实施例中,主机处理器执行的程序编码缓冲区中的命令流,其提供工作量至PPU 200用于处理。工作量可以包含若干指令和将由那些指令处理的数据。缓冲区是存储器中主机处理器和PPU 200两者都可访问(即读/写)的区域。例如,主机接口单元210可以配置为访问系统存储器中的缓冲区,所述存储器中的缓冲区经由I/O单元205在系统总线202上发送的存储器请求连接至系统总线202。在一个实施例中,主机处理器将命令流写入到缓冲区,并接着发送指向命令流起点的指针到PPU 200。主机接口单元210将指向一个或更多命令流的指针提供给前端单元215。前端单元215管理一个或更多命令流,从命令流中读取命令并将命令转发至PPU 200的各个单元。
前端单元215耦连至调度单元220,其配置多个GPC 250以处理由一个或更多命令流定义的任务。调度单元220配置为追踪与调度单元220所管理的各个任务相关的状态信息。所述状态可以指示任务被分配给哪个GPC 250,该任务活动(active)或不活动(inactive),与该任务关联的优先等级等等。调度单元220管理一个或更多GPC 250上多个任务的执行。
调度单元220耦连至配置为派遣任务以在GPC 250上执行的工作分配单元225。工作分配单元225可以追踪从调度单元220接收的已调度的若干任务。在一个实施例中,工作分配单元225管理用于每个GPS 250的挂起(pending)任务池和活动任务池。挂起任务池可以包含含有被分配为要由特定GPC 250处理的任务的若干槽(例如32个槽)。活动任务池可以包含用于正在被GPC 250主动处理的任务的若干槽(例如4个槽)。当GPC 250结束任务的执行时,该任务被驱逐出GPC 250的活动任务池并且来自挂起任务池的其他任务中的一个被选择并被调度以在GPC 250上执行。如果活动任务已在GPC 250上被闲置,例如当等待数据相关性被解决时,则该活动任务可以从GPC 250中被驱逐并返回到挂起任务池,而挂起任务池中的另一任务被选择并被调度以在GPC 250上执行。
工作分配单元225经由XBar 270与一个或更多GPC 250通信。XBar270是耦连PPU200的多个单元至PPU 200的其他单元的互联网络。例如,XBar 270可以配置为耦连工作分配单元225至特定的GPC 250。尽管没有明确示出,但PPU 200的一个或更多其他单元耦连至主机单元210。其他单元也可以经由集线器230耦连至XBar 270。
任务由调度单元220管理,并由工作分配单元225派遣至GPC 250。GPC 250配置为处理任务并生成结果。结果可以被GPC 250中的其他任务使用(consume),经由Xbar 270路由至不同的GPC 250,或存储在存储器204中。结果可以经由分区单元280被写入存储器204,所述分区单元280实现存储器接口以用于读和写数据至/从存储器204。在一个实施例中,PPU200包括分区单元的数目U,其等于耦连至PPU 200的单独的和不同的存储器设备204的数目。分区单元280将在下文结合图3B更详细地描述。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动内核,其使能一个或更多应用程序在主机处理器上执行,以调度操作用于在PPU 200上执行。应用程序可以生成指令(即API呼叫),其使得驱动内核生成一个或更多任务,用于被PPU 200执行。驱动内核输出任务到一个或更多正被PPU 200处理的流。每个任务可以包含一个或更多相关线程组,在此处称为束(warp)。线程块可以指包括要实施任务的指令的多个线程组。在同一个线程组中的线程可以通过共享的存储器交换数据。在一个实施例中,线程组包含32个相关的线程。
图3A例示了根据一个实施例的图2的PPU 200的GPC 250。如图3A所示,每个GPC250包括用于处理任务的若干硬件单元。在一个实施例中,每个GPC 250包括管线管理器310、预光栅操作单元(PROP)315、光栅引擎325、工作分配交叉开关(WDX)380、存储器管理单元(MMU)390、以及一个或更多纹理处理集群(TPC)320。将被理解的是,图3A的GPC 250可以包括代替或附加于图3A所示的单元的其他硬件单元。
在一个实施例中,GPC 250的操作由管线管理器310所控制。管线管理器310管理一个或更多TPC 320的配置,用于处理分配给GPC 250的任务。在一个实施例中,管线管理器310可以配置一个或更多TPC 320中的至少一个,以实现至少部分的图形渲染管线。例如,TPC 320可以配置为在可编程流多处理器(SM)340上执行顶点着色程序。管线管理器310还可以配置为路由从工作分配单元225接收的数据包至GPC 250中适当的逻辑单元。例如,一些数据包可以被路由至PROP 315中的固定功能硬件单元和/或光栅引擎325,而其他的数据包可以被路由至TPC 320,用于被图元引擎335或SM 340处理。
PROP单元315配置为路由光栅引擎325和TPC 320生成的数据至分区单元280中的光栅操作(ROP)单元,下文更详细地描述。PROP单元315还可以配置为为颜色混合实施最优化、组织像素数据、实施地址转换等等。
光栅引擎325包括配置为实施各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎325包括建立(setup)引擎、粗光栅引擎、剔除引擎、裁剪引擎、细光栅引擎以及瓦片合并引擎。建立引擎接收转换的顶点并生成与顶点所定义的几何图元相关联的平面方程。平面方程被发送至粗光栅引擎以生成用于图元的覆盖信息(例如,用于瓦片的x、y覆盖掩码)。粗光栅引擎的输出可以发送至剔除引擎,在此处未能通过z测试的与图元相关联的片段被剔除,并被发送至裁剪引擎,在此处位于视锥体外的片段被裁剪。那些在裁剪和剔除中存留下来的片段可以被传递到细光栅引擎,以基于建立引擎所生成的平面方程生成像素片段的属性。光栅引擎325的输出包含将被例如,在TPC 320中实现的片段着色程序处理的片段。
GPC 250中包含的每个TPC 320包括M-管线控制器(MPC)330、图元引擎335、一个或更多SM 340以及一个或更多纹理单元345。MPC 330控制TPC 320的操作,路由从管线管理器310接收的数据包到TPC 320中的适当的单元。例如,与顶点关联的数据包可以被路由至图元引擎335,其被配置为从存储器204获取与顶点关联的顶点属性。与此相反,与着色程序关联的数据包可以被发送至SM 340。
在一个实施例中,纹理单元345被配置为从存储器204加载纹理贴图(例如纹理像素的2D数组)并采样纹理贴图以产生经采样的纹理值,用于在由SM 340所执行的着色程序中使用。纹理单元345实现纹理操作,例如使用锥形纹理(mip-map)的过滤操作(即改变细节等级的纹理贴图)。纹理单元345也用作SM 340到MMU 390的加载/存储路径。在一个实施例中,每个TPC 320包括两个(2)纹理单元345。
SM 340包含可编程的流处理器,其配置为处理由若干线程所代表的的任务。每个SM 340是多线程的并且配置为同时执行来自特定的线程组的多个线程(例如,32个线程)。在一个实施例中,SM 340实现SIMD(单指令、多数据)架构,其中,线程组(即warp)中的每个线程被配置为基于相同的指令集处理不同的数据集。线程组中所有的线程执行相同的指令。在另一个实施例中,SM 340实现SIMT(单指令、多线程)架构,其中,线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但其中线程组中的各个线程在执行期间被允许不同(diverge)。换句话说,当用于线程组的指令被派遣用于执行时,线程组中的一些线程可以是活动的,从而执行指令,而线程组中的其他线程可以是不活动的,从而实施空操作(NOP)而不执行指令。SM 340将在下文结合图4更详细地描述。
MMU 390提供GPC 250和分区单元280之间的接口。MMU 390可以提供虚拟地址到物理地址的翻译、存储器保护、以及存储器请求的仲裁。在一个实施例中,MMU 390提供一个或更多转译后备缓冲区(TLB),用于改善存储器204中虚拟地址到物理地址的翻译。
图3B例示了根据一个实施例的图2的PPU 200的分区单元280。如图3B所示,分区单元280包括光栅操作(ROP)单元350、二级(L2)高速缓存360、存储器接口370以及L2交叉开关(XBar)365。存储器接口370耦连至存储器204。存储器接口370可实现16、32、64、128位数据总线等,用于高速数据传送。在一个实施例中,PPU 200包含U个存储器接口370,每个分区单元280一个存储器接口370,其中每个分区单元280连接至相应的存储器设备204。例如,PPU200可以连接至多达U个存储器设备204,例如图形双倍数据速率、版本5、同步动态随机存取存储器(GDDR 5SDRAM)。在一个实施例中,存储器接口370实现DRAM接口,并且U等于8。
在一个实施例中,PPU 200实现多级存储器层级。存储器204位于耦连至PPU 200的SDRAM中的芯片外。来自存储器204的数据可以被获取并存储于L2高速缓存360中,其位于芯片上,并在各个GPC 250之间共享。如所示,每个分区单元280包括关联于相应的存储器设备204的L2高速缓存360的一部分。然后较低等级的高速缓存可以用GPC 250中的各个单元实现。例如,每个SM 340可以实现一级(L1)高速缓存。L1高速缓存是专用存储器,其专用于特定的SM 340。来自L2高速缓存360的数据被获取并存储于每个L1高速缓存中,用于在SM 340的功能单元中处理。L2高速缓存360耦连至存储器接口370和XBar 270。
ROP单元350包括ROP管理器355、色彩ROP(CROP)单元352和Z ROP(ZROP)单元354。CROP单元352实施关于像素色彩的光栅操作,例如色彩压缩、像素混合等等。ZROP单元354连同光栅引擎325实现深度测试。ZROP单元354接收与来自光栅引擎325的剔除引擎的像素片段相关联的样本位置的深度。ZROP单元354测试与片段相关联的样本位置相对深度缓冲区中相应深度的深度。如果该片段通过了样本位置的深度测试,则ZROP单元354更新深度缓冲区,并将深度测试的结果发送到光栅引擎325。ROP管理器355控制ROP单元350的操作。将被领会的是,分区单元280的数目可以与GPC 250的数目不同,并且,因此每个ROP单元350可以耦连至每个GPC 250。因此,ROP管理器355追踪从不同的GPC 250接收的数据包,并确定由ROP单元350生成的结果被路由至哪个GPC 250。CROP单元352和ZROP单元354经由L2XBar365耦连至L2高速缓存。
图4例示了根据一个实施例的图3A的流多处理器340。如图4所示,SM 340包括指令高速缓存405、一个或更多调度单元410、寄存器文件420、一个或更多处理核450、一个或更多专用功能单元(SFU)452、一个或更多加载/存储单元(LSU)454、互联网络480、共享存储器470和L1高速缓存490。
如上所述,工作分配单元225派遣任务用于在PPU 200的GPC 250上执行。任务被分配给GPC 250中特定的TPC 320,并且,如果该任务关联于着色程序,则该任务可以被分配给SM 340。调度单元410从工作分配单元225接收任务,并管理被分配给SM 340的一个或更多线程组(即warp)的指令调度。调度单元410调度并行线程组中的线程用于执行,此处每个组被称为warp。在一个实施例中,每个warp包括32个线程。调度单元410可以管理多个不同的warp,调度warp用于执行,并且接着在每个时钟周期期间将指令从多个不同的warp派遣到各个功能单元(即核心350、SFU 352以及LSU 354)。
在一个实施例中,每个调度单元410包括一个或更多指令派遣单元415。每个派遣单元415配置为发送指令到一个或更多的功能单元。在图4所示的实施例中,调度单元410包括两个派遣单元415,其使能来自同一warp的两个不同的指令在每个时钟周期期间被派遣。在替代的实施例中,每个调度单元410可以包括单个派遣单元415或附加的派遣单元415。
每个SM 340包括为SM 340的功能单元提供寄存器集的寄存器文件420。在一个实施例中,寄存器文件420在每个功能单元之间被划分,从而使每个功能单元被分派了寄存器文件420的专用部分。在另一个实施例中,寄存器文件420在由SM 340所执行的不同warp之间被划分。寄存器文件420为连接至功能单元的数据路径的操作数(operand)提供临时存储。
每个SM 340包含L个处理核450。在一个实施例中,SM 340包括大量的(例如128个,等等)不同的处理核450。每个核450可以包括全管线、单精度的处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。核450还可包括双精度处理单元,其包括浮点运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。每个SM340还包含实施专用功能(例如,属性计算(attribute evaluation)、反平方根等等)的M个SFU 452,以及在共享存储器470或L1高速缓存490和寄存器文件420之间实现加载和存储操作的N个LSU 454。在一个实施例中,SM 340包括128个核450、32个SFU 452和32个LSU 454。
每个SM 340包括连接每个功能单元至寄存器文件420和连接LSU 454至寄存器文件420的互联网络480、共享存储器470和L1高速缓存490。在一个实施例中,互联网络480是可以配置为连接任意功能单元至寄存器文件420中的任意寄存器、以及连接LSU 454至寄存器文件和共享存储器470与L1高速缓存490中的存储器位置的交叉开关。
共享存储器470是片上存储器的阵列,其允许SM 340和图元引擎335之间或SM 340中的线程之间的数据存储和通信。在一个实施例中,共享存储器470包含64KB的存储能力。L1高速缓存490在从SM 340到分区单元280的路径中。L1高速缓存490可以用于高速缓存读和写。在一个实施例中,L1高速缓存490包含24KB的存储能力。
上述的PPU 200可以配置为实施远快于传统CPU的高并行计算。并行计算具有图形处理、数据压缩、生物学统计(biometrics)、流处理算法等方面的优势。
当被配置用于通用并行计算时,可以使用更简单的计算。在这个模型中,如图2所示,固定功能图形处理单元被忽略,创造更简单的编程模型。在这种配置中,工作分配单元225直接分派和分配线程块到TPC 320。块中的线程执行同一程序,在计算中使用唯一的线程ID来确保每个线程生成唯一的结果,使用SM 340来执行程序并实施计算,共享存储器470在线程之间通信,以及LSU 454通过分区L1高速缓存490和分区单元280来读和写全局存储器。
当被配置用于通用并行计算时,SM 340还可以写入调度单元220可以使用的命令,以在TPC 320上启动(launch)新工作。
在一个实施例中,PPU 200包含图形处理单元(GPU)。PPU 200被配置为接收指定着色程序用于处理图形数据的命令。图形数据可以被定义为图元集,例如点、线、三角形、四边形、三角形带等等。通常,图元包括指定用于图元的若干顶点(例如在模型空间坐标系中)以及关于图元的每个顶点的属性的数据。PPU 200可以配置为处理图形图元以生成帧缓冲区(即用于显示器的每个像素的像素数据)。
应用程序将用于场景的模型数据(即顶点和属性的集合)写入到例如系统存储器或存储器204的存储器中。模型数据定义可能在显示器上可见的每个目标。应用程序接着对驱动内核进行API呼叫,其请求模型数据被渲染和显示。驱动内核读取模型数据并将命令写入一个或更多流以实施操作来处理模型数据。所述命令可以引用不同的着色程序以在PPU200的SM340上实现,包括顶点着色程序、外壳着色程序、域着色程序、几何着色程序以及像素着色程序中的一个或更多。例如,一个或更多的SM可以配置为执行顶点着色程序,其处理由模型数据所定义的多个顶点。在一个实施例中,不同的SM 340可以配置为同时执行不同的着色程序。例如,SM 340的第一子集可以配置为执行顶点着色程序,而SM 340的第二子集可以配置为执行像素着色程序。SM 340的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存360和/或存储器204。在经处理的顶点数据被光栅化(即从三维数据转化为屏幕空间中的二维数据)以产生片段数据以后,SM 340的第二子集执行像素着色程序以产生经处理的片段数据,其接着与其他经处理的片段数据混合并被写入存储器204中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,处理来自管线样式的相同场景的不同数据,直到用于该场景的全部模型数据都已被渲染到帧缓冲区。接着,帧缓冲区的内容被发送至显示器控制器,用于在显示器设备上显示。
PPU 200可以被包括于桌上型计算机、膝上型计算机、平板电脑、智能电话(例如无线手持设备)、个人数字助理(PDA)、数码相机、手持电子设备等中。在一个实施例中,PPU200被具体化在单个半导体衬底上。在另一个实施例中,PPU 200连同一个或更多其他的逻辑单元,例如精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等等被包括于片上系统(SoC)中。
在一个实施例中,PPU 200可以被包括于图形卡上,所述图形卡包括一个或更多存储器设备204,例如GDDR5SDRAM。图形卡可以配置为与桌上型计算机的主板上的PCIe槽接口,其包括例如北桥芯片和南桥芯片。在另一个实施例中,PPU 200可以是包括在主板的芯片集(即北桥)中的集成图形处理单元(iGPU)。
图5例示了根据一个实施例的、包括图2的PPU 200的片上系统(SoC)500。如图5所示,SoC 500包括CPU 550和PPU 200,如上所述。SoC 500还可包括系统总线202,以使能SoC500的各个部件之间的通信。CPU 550和PPU 200所生成的存储器请求可以通过由SoC 500的多个部件所共享的系统MMU 590被路由。SoC 500还可以包括耦连至一个或更多存储器设备204的存储器接口595。存储器接口595可以实现例如DRAM接口。
尽管没有明确示出,SoC 500可以包括除图5所示部件以外的其他部件。例如,SoC500可包括多个PPU 200(例如,四个PPU 200)、视频编码器/解码器、以及无线宽带收发器以及其他部件。在一个实施例中,可以包括存储器204为堆叠封装(PoP)配置的SoC 500。
图6是根据一个实施例的、图2的PPU 200所实现的图形处理管线600的概念图。图形处理管线600是为了从3D几何数据生成2D计算机生成的图像所实现的处理步骤的抽象流程图。众所周知的是,,管线架构可以通过将操作分离成多个阶段而更有效地实施长延迟操作,其中每个阶段的输出耦连至下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段发送到下一个阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可以代表由 API定义的图形处理管线。作为一个选项,图形处理管线600可以在以前的附图和/或任何后面的附图的功能和架构的上下文中实现。
如图6所示,图形处理管线600包含包括若干阶段的管线架构。所述阶段包括而不限于:数据装配阶段640、顶点着色阶段620、图元装配阶段630、几何着色阶段640,视口缩放、剔除和裁剪(VSCC)阶段650,光栅化阶段660、片段着色阶段670、以及光栅操作阶段680。在一个实施例中,输入数据601包含命令,其配置处理单元以实现图形处理管线600的阶段以及配置几何图元(例如点、线、三角形、四边形、三角形带或扇形等)以被所述阶段处理。输出数据602可以包含像素数据(即颜色数据),其被复制到帧缓冲区或存储器中其他类型的表面数据结构中。
数据装配阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据装配阶段610收集顶点数据于临时存储或队列中,例如通过从包括指向存储器中缓冲区的指针的主机处理器接收命令并从该缓冲区中读取顶点数据。顶点数据接着被发送至顶点着色阶段620用于处理。
顶点着色阶段620通过每次针对每个顶点实施一组操作(即顶点着色程序或程序)来处理顶点数据。顶点可以是,例如,被指定为关联于一个或更多顶点属性(例如颜色、纹理坐标、曲面法线等)的4-坐标矢量(即<x,y,z,w>)。顶点着色阶段620可以操作各个顶点属性,例如位置、颜色、纹理坐标等等。换句话说,顶点着色阶段620对顶点坐标或关联于顶点的其他顶点属性实施操作。该操作一般包括照明操作(即修改顶点的颜色属性)和转换操作(即修改顶点的坐标空间)。例如,可以使用对象坐标空间的坐标指定顶点,其通过用矩阵乘坐标来转换,将坐标从对象坐标空间转化为世界空间或标准化设备坐标(NCD)空间。顶点着色阶段620生成经转换的顶点数据,其被发送至图元装配阶段630。
图元装配阶段630收集顶点着色阶段620输出的顶点并将所述顶点组成几何图元,以由几何着色阶段640处理。例如,图元装配阶段630可以配置为将每三个连续的顶点组成为几何图元(即三角形),以发送到几何着色阶段640。在一些实施例中,特定的顶点可以被重复用于连续的几何图元(例如,三角形带中的两个连续的三角形可以共享两个顶点)。图元装配阶段630发送几何图元(即相关顶点的集合)到几何着色阶段640。
几何着色阶段640通过对几何图元实施一组操作(即几何着色程序或程序)来处理几何图元。细分曲面操作可以由每个几何图元生成一个或更多几何图元。换句话说,几何着色阶段640可以将每个几何图元再分为更细网眼的两个或多个几何图元,用于被剩余的图形处理管线600处理。几何着色阶段640发送几何图元到视口SCC阶段650。
在一个实施例中,图形处理管线600可以操作于流多处理器和顶点着色阶段620、图元装配阶段630、几何着色阶段640、片段着色阶段670、和/或与其相关的硬件/软件中,可以继续实施处理操作。一旦相继的处理操作完成,在一个实施例中,视口SCC阶段650可以利用数据。在一个实施例中,由图形处理管线600中的一个或更多阶段处理的图元数据可以被写入到高速缓存中(例如L1高速缓存、顶点高速缓存等)。在这种情况下,在一个实施例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段650和光栅化阶段660被实现为固定功能电路。
视口SCC阶段650实施几何图元的视口缩放、剔除和裁剪。被渲染的每个表面关联于抽象的相机位置。相机位置代表正在观看场景的观察者的位置,并定义包围场景的对象的视锥体(viewing frustum)。视锥体可以包括视平面、后平面、以及四个裁剪平面。任何完全位于视锥体外部的几何图元都可以被剔除(即丢弃),因为几何图元将不会有助于最终渲染的场景。任何部分位于视锥体内部和部分位于视锥体外部的几何图元都可以被裁剪(即被转换为被包围在视锥体内的新的几何图元)。进一步地,可以基于视锥体的深度缩放每个几何图元。所有可能可见的几何图元接着被发送至光栅化阶段660。
光栅化阶段660将3D几何图元转换为2D片段(例如,能够用于显示,等等)。光栅化阶段660可以配置为利用几何图元的顶点来建立一组平面方程,各种属性可以从其中插入。光栅化阶段660还可以计算多个像素的覆盖掩码,所述覆盖掩码指示用于像素的一个或更多样本位置是否拦截(intercept)几何图元。在一个实施例中,还可以实施z测试来确定几何图元是否被其他已经被光栅化的几何图元阻隔(occlude)。光栅化阶段660生成片段数据(即与用于每个被覆盖的像素的特定样本位置相关联的插值顶点属性),其被发送至片段着色阶段670。
片段着色阶段670通过对每个片段实施一组操作(即片段着色程序或程序)来处理片段数据。片段着色阶段670可以生成用于片段的像素数据(即色彩值),例如通过为片段实施照明操作或使用插值纹理坐标采样纹理贴图。片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
光栅操作阶段680可以对像素数据实施多种操作,例如实施透明测试(alphatest)、模板测试(stencil test)、以及将像素数据与对应于与该像素相关的其他片段的其他像素数据混合。当光栅操作阶段680已经完成处理像素数据(即输出数据602)时,像素数据可以被写入到渲染目标,例如帧缓冲区、色彩缓冲区等等。
将被领会到的是,除其以外或替代上述的一个或更多阶段,图形处理管线600可以包括一个或更多额外的阶段。抽象的图形处理管线的各种实现可以实现不同阶段。而且,在一些实施例中,图形处理管线可以排除上述一个或更多的阶段(例如几何着色阶段640)。其他类型的图形处理管线也被预期在本公开范围之内。此外,图形处理管线600的任何阶段可以由图形处理器中的一个或更多专用硬件单元(例如,PPU 200)来实现。图形处理管线600的其他阶段可以由可编程的硬件单元(例如,PPU 200的SM340)来实现。
图形处理管线600可以经由主机处理器(例如,CPU 550)执行的应用程序来实现。在一个实施例中,设备驱动器可以实现定义不同功能的应用程序编程接口(API),其能够被应用程序使用以生成用于显示的图形数据。设备驱动器是包括多个控制PPU 200的操作的指令的软件程序。API为程序员提供抽象化,其使程序员利用专用图形硬件,例如PPU 200,来生成图形数据,而不要求程序员利用用于PPU 200的专用指令集。应用程序可以包括API呼叫,其被路由至用于PPU 200的设备驱动器。设备驱动器翻译API呼叫并实施各种操作以响应所述API呼叫。在某些情况下,设备驱动器可以通过在CPU 550上执行指令来实施操作。在其他情况下,设备驱动器可以至少部分通过利用CPU 550和PPU 200之间的输入/输出接口在PPU 200上启动操作来实施操作。在一个实施例中,设备驱动器配置为利用PPU 200的硬件实现图形处理管线600。
在PPU 200中可以执行各种程序以实现图形处理管线600的各个阶段。例如,设备驱动器可以在PPU 200上启动内核以在一个SM 340(或多个SM 340)上实施顶点着色阶段620。设备驱动器(或PPU 200所执行的最初的内核)也可以在PPU 200上启动其他的内核来实施图形处理管线600的其他阶段,例如几何着色阶段640和片段着色阶段670。此外,图形处理管线600的一些阶段可以在固定单元硬件上实现,例如,在PPU 200中实现的光栅化或数据装配程序。将被理解的是,来自一个内核的结果在被SM340上的随后的内核处理之前,可以被一个或更多介入固定功能硬件处理。
图7是根据另一个实施例的、图2的PPU 200所实现的图形处理管线700的概念图。图形处理管线700是被实现为由3D几何数据生成2D计算机生成的图像的处理步骤的抽象流程图。如图7所示,图形处理管线700包含管线架构,其包括若干阶段,其中的许多阶段类似于图6的图形管线600。将被领会的是,图形处理管线700包括图元装配阶段630和几何着色阶段640之间的外壳着色阶段710、细分曲面阶段720、以及域着色阶段730。在图形管线600中,图元的细分曲面可已经被实施于几何着色阶段640中。通过增加用于外壳着色、细分曲面和域着色的单独阶段,细分曲面可以被更有效地实施。
外壳着色阶段710从图元装配阶段630接收图元并执行外壳着色。外壳着色是一种程序,其采用图元面片(a patch of primitives)作为输入,并产生图元面片作为输出,以及产生细分曲面阶段720和/或域着色阶段730所利用的面片常数(patch constant)。面片可以包括图元装配阶段630输出的一个或更多低分辨率图元。在一个实施例中,面片包含具有三个顶点的单个三角形图元。
图形处理管线的细分曲面阶段720从外壳着色阶段710接收面片并细分每个面片。细分曲面阶段720可以由硬件单元来实现,其生成具有大量控制点的新的面片。例如,细分曲面阶段720将接收具有三个顶点的面片,并使用例如重心坐标将由该面片所定义的三角形的每个边分解为若干片段。细分曲面阶段720是固定功能单元,尽管图元的每个边分解的数目可以是可配置的。例如,外壳着色阶段710可以输出细分曲面因数到细分曲面阶段720,其确定在图元的每个边上应该做出多少个分解。细分曲面阶段720可以输出图元到域着色阶段730。
在另一个实施例中,细分曲面阶段720可以由执行细分曲面着色的可编程单元来实现。细分曲面着色是采用面片作为输入并生成具有更多顶点的新的面片作为输出的程序。细分曲面着色近似于上述的固定功能硬件,除了细分曲面着色使能细分曲面的可编程控制。例如,细分曲面着色可以基于某种算法计算图元的每个边的分解的数目。例如,分解的数目可以由图元的尺寸来确定,或基于估算出的图元在屏幕空间中所要覆盖的像素的数目来计算。
在另一个实施例中,细分曲面阶段720可以由硬件单元和可编程单元两者实现,由硬件单元实施第一遍的粗糙的细分曲面,以及可编程单元在硬件单元输出的面片上实施有条件的、精细的细分曲面。因此,当原始的粗糙的细分曲面未产生足够细的网格时,可以实施精细的细分曲面。
域着色阶段730从细分曲面阶段720接收面片并执行域着色。域着色是一种程序,其经曲面细分的图元作为输入,并在经曲面细分的图元的每个顶点上操作。域着色阶段730所操作的面片可以被指定在重心坐标中,并且域着色可以使用关联于相关面片的常数以便将重心坐标转换为用于特定视图的实际坐标(即<x,y,z,w>)。输出顶点可以包括用于两个或多个视图的每个视图的位置矢量。
几何着色阶段640类似于图6的几何着色阶段640。尽管图6的几何着色阶段640实施细分曲面以及几何着色中包括的任意其他处理,但图7的几何着色阶段640将不实施细分曲面,并且将只实施额外的几何着色操作,因为细分曲面已被外壳着色阶段710、细分曲面阶段720以及域着色阶段730实施。将被领会到的是,图形处理管线700的其他阶段按照上述图6的图形处理管线600操作。图形处理管线700只是使能细分曲面的更多控制。在一些实施例中,几何着色阶段640可以完全被省略,因为外壳着色阶段710、细分曲面阶段720以及域着色阶段740实施细分曲面,并且不需要进一步的几何着色操作。
图8是根据另一个实施例的、改进的图形处理管线800的概念图。如图所示,图形处理管线800包括VTG管线810、视口SCC阶段650、以及光栅管线820。VTG管线810包括图形处理管线600或700的与顶点着色、细分曲面和几何着色相关联的阶段。例如,VTG管线810可以包括图形处理管线600的数据装配阶段610、顶点着色阶段620、图元装配阶段630以及几何着色阶段640。可选地,VTG管线810可以包括图形处理管线700的数据装配阶段610、顶点着色阶段620、图元装配阶段630、外壳着色阶段710、细分曲面阶段720、域着色阶段730、和/或几何着色阶段640。当然,VTG管线810可以省略上文列出的阶段中的一个或更多或包括此处未列出的其他阶段。
图形处理管线800接收输入数据601用于处理。输入数据601包括图形图元。图形图元被VTG管线810处理。例如,图形图元可以由顶点着色程序处理,并由外壳着色程序和域着色程序细分曲面。VTG管线810的最后阶段可以配置为生成与两个或多个视图的每个视图相对应的用于每个顶点的多个位置矢量。
例如,在具有两个视图的立体观测图像处理系统中,VTG管线810输出的顶点可以包括两个位置矢量:指定用于左眼视图的该顶点的第一位置(例如<x0,y0,z0,w0>)的第一位置矢量,以及指定用于右眼视图的该顶点的第二位置(例如<x1,y1,z1,w1>)的第二位置矢量。用于每个视图的不同位置矢量可以被指定为用于该顶点的依赖于视图的属性。在一个实施例中,位置矢量的每个成分可以被存储为单独的属性。例如,位置矢量的x-坐标可以被存储为第一属性,位置矢量的y坐标可以被存储为第二属性,等等。在该实施例中,可以通过指定依赖于视图的坐标属性与独立于视图的坐标属性的结合来在顶点的数据结构中编码不同的位置矢量。例如,两个不同的x-坐标可以被指定用于两个不同的视图(即依赖于视图的坐标属性),而单一的y坐标、z坐标和w坐标可以被两个不同视图的位置矢量共享(即独立于视图的坐标属性)。因此,五个属性可以编码两个4-坐标位置矢量,而非指定八个属性(或两个4-坐标矢量属性)。
视口SCC阶段650可以实现使能顶点数据流到例如存储器204的存储器中的缓冲区830的数据输出功能。缓冲区830可以持有用于多个图元的顶点数据。缓冲区830被填充,并且接着缓冲区830被一次或更多次读出以经由光栅管线820在缓冲区830中渲染图元。
光栅管线820包括图形处理管线600或700的关联于将3D图元转换为2D像素数据的阶段。例如,光栅管线820可以包括图形处理管线600或700的光栅化阶段660、碎片着色阶段670、以及光栅操作阶段680。视口SCC阶段650配置为从缓冲区830中读取顶点数据并将顶点数据发送至光栅管线820,以便生成用于两个或多个视图的特定视图的像素数据。
例如,在具有两个视图(即左眼视图和右眼视图)的立体观测系统中,视口SCC阶段650可以配置光栅管线820以生成用于第一渲染目标的图像数据。第一渲染目标可以是为了存储用于左眼视图的图像数据而生成的帧缓冲区(即用于存储像素值的2D数组的存储器)。所述图像数据可以由用于显示设备的每个像素的像素值(例如RGB、RGBA、CMYK、YUV等)组成。一旦光栅管线820被配置,视口SCC阶段650可以从缓冲区830中读取用于左眼视图的顶点数据并将该顶点数据发送至光栅管线820用于处理,以便生成存储于第一渲染目标中的图像数据。接着视口SCC阶段650可以配置光栅管线820以生成用于第二渲染目标的图像数据。第二渲染目标可以是为了存储用于右眼视图的图像数据而生成的帧缓冲区。一旦光栅管线820被配置,视口SCC阶段650可以从缓冲区830中读取用于右眼视图的顶点数据并将该顶点数据发送至光栅管线820用于处理,以便生成存储于第二渲染目标中的图像数据。
将被领会的是,缓冲区830的尺寸将被限制。换句话说,在一个实施例中,缓冲区830对于保存所生成的用于全部的被渲染模型的顶点数据来说太小了。而且,在读入顶点数据用于渲染之前,将用于全部模型的顶点数据缓冲出到存储器中是无效率的。因此,缓冲区830的尺寸可以调节为在任何一个时间只保存一部分被渲染的顶点数据。多个缓冲区830可以被使用,使得视口SCC阶段650可以将从VTG管线810接收的图元流出到一个缓冲区830中,而视口SCC阶段650从另一个缓冲区830读入图元数据以发送到光栅管线820。
在一个实施例中,缓冲区830的尺寸可以调节为保存用于单一图元的顶点数据。例如,缓冲区830的尺寸可以调节为保存用于三角形图元的三个顶点的顶点数据。由视口SCC阶段650从VTG管线810接收的每个图元存储在不同的缓冲区830中,并且接着每个图元被光栅管线820渲染对应于视图数目的数次。在另一个实施例中,缓冲区830的尺寸可以调节为保存用于多个图元的顶点数据。例如,缓冲区830可以能够存储用于数十个或数百个图元的顶点数据。因此,很多图元可以在该图元被光栅管线820渲染之前被存储在缓冲区中。在另一个实施例中,缓冲区830的尺寸动态地由驱动器分配,并且视口SCC阶段650配置为存储顶点数据于缓冲区830中,直到该缓冲区已满。一旦缓冲区已满,接着视口SCC阶段650可以读入顶点数据以被发送到光栅管线820用于渲染。
图9是根据一个实施例的、用于将顶点数据存储于缓冲区830中的数据结构的概念图。顶点数据包括顶点属性集。该属性可包括位置、颜色、法向量、纹理坐标或甚至自定义属性。每个属性可以包含一个和四个成分之间的矢量。每个成分可以是,例如,32位的浮点值、32位的整数、64位的浮点值等等。顶点数据存储于缓冲区830中,并且包括用于所有被渲染的视图的属性。在一个实施例中,可以为每个顶点指定多达32类、128位的顶点属性矢量。
如图9所示,用于存储顶点数据的数据结构可以包括若干字段(field)。每个字段可以包括独立于视图的(共同)属性或依赖于视图的属性。每个独立于视图的属性对所有视图都可用(enable)。与此相反,依赖于视图的属性只对一个视图可用。如图9所示,属性0和7对所有视图是共用的,属性1-3只对视图0可用,并且属性4-6只对视图1可用。视口SCC阶段650配置为在数据输出操作期间将所有属性写入到缓冲区830。将被领会的是,用于每个视图的位置矢量可以被指定在对该特定视图可用的依赖于视图的属性中。例如,用于视图0的位置矢量可以被存储在属性索引3中,并且用于视图1的位置矢量可以被存储在属性索引6中。当视口SCC阶段650从缓冲区830中读取用于特定视图的顶点数据时,视口SCC阶段650只读取对该特定视图可用的属性。例如,当视口SCC阶段650读取用于视图0的顶点数据时,视口SCC阶段650可以读取属性0-3和7。与此相反,当视口SCC阶段650读取用于视图1的顶点数据时,视口SCC阶段650可以读取属性0和4-7。
每个属性关联于输入映射(IMAP),其定义矢量的哪个成分将由片段着色阶段670利用。编译器生成用于单一视图的IMAP数据。如所示,IMAP数据是包括用于每个属性索引的四位的位映射,其表明相应属性矢量的哪个成分由图形处理管线的片段着色阶段670利用。在一个实施例中,用于第一视图(例如视图0)的IMAP数据由编译器生成,并且VTG管线810的最后阶段生成用于两个或多个视图的每个额外视图的相应IMAP。例如,域着色阶段730可以配置为由从编译器接收的IMAP 0数据生成IMAP 1数据。
将被理解的是,依赖于视图的属性必须循序地针对两个或多个视图的每个视图指定。这要求使能视口SCC阶段650从缓冲区830读取用于每个视图的属性,并将所有属性保持在同一顺序。例如,用于视图0的属性1、2和3分别对应于用于视图1的属性4、5和6。换句话说,属性1和4定义用于不同视图的同一属性的不同值,属性2和5定义用于不同视图的同一属性的不同值,以及属性3和6定义用于不同视图的同一属性的不同值。当属性被从缓冲区830中读取时,第一属性将是属性0,第二属性将是属性1或4(取决于视图),第三属性将是属性2或5,以及第四属性将是属性3或6,以及第五属性将是属性7。因此,无论哪个视图被渲染,属性的顺序总是相同的。这使得片段着色阶段670能够相同地处理从光栅化阶段660接收的用于所有视图的顶点数据。
图10例示了根据一个实施例的、视图到渲染目标的映射。图形处理管线可以使能在生成图像数据时指定不同的渲染目标(例如帧缓冲区)。渲染目标是被分配以存储图像数据的2D数组的存储器。每个渲染目标可以对应于根据从根据特定的视口定向的特定视点渲染的模型的图像。在一个实施例中,可以指定多达4096个不同的渲染目标。
在一个实施例中,图形处理管线可以配置为从特定视点(即视图)生成模型环境的立方体贴图。立方体贴图本质上是环绕视点的立方体形状的六个图像,并且代表具有六个不同的视锥体方向的与特定视点相关联的模型的经渲染图像。对应于立方体的一个面的立方体贴图的每个部分可以被映射到不同的视口。每个视口的属性可以被存储在PPU 200的特殊寄存器中,并被视口SCC阶段650访问。视口数组掩码指定启用(enable)哪个视口。视口属性可以定义视口SCC阶段650中用于剔除和裁剪图元的视锥体的尺寸和方向。用于每个视图的视点(即相机位置)可以不同,以便改变虚拟相机位置的定位。例如,用于第一视图的视点可以水平偏移于第二视图的视点。从这些偏移视点渲染图像可以使能图像在立体观测显示器上显示,如此观测者可以感知经渲染对象的深度。
当渲染立体观测视图的立方体贴图时,图形处理管线可以配置为渲染两个视图中的每一个的六个不同的图像。图形处理管线的输出存储在用于每个视图/视口组合的不同的渲染目标中。在一个实施例中,视口SCC阶段650配置为重播缓冲区830中的用于两个视图中的每一个的每个活动视口的顶点数据。换句话说,视口SCC阶段650可以配置为运行过两个循环,每个经由视口数组掩码启用的视口运行一次的内循环,和每个被启用的视图运行一次的外循环。在内循环的每个迭代中,视口SCC阶段650从寄存器读取用于活动视口的视口数据,并从缓冲区830中读取用于活动视图的顶点数据。由视口SCC阶段650可以对顶点数据实施各种操作(例如裁剪和剔除图元),并且接着顶点数据被发送至光栅管线820用于渲染到相应的渲染目标。在每个外循环的迭代期间,视口SCC阶段650将视图索引改变到下一个视图,并且为每个被启用的视口重新进行内循环。
如图10所示,每个视图/视口组合可以与存储于存储器的特定的渲染目标关联。第一视图(即视图0)可以与对应于若干被启用视口的若干不同的渲染目标相关联。类似地,第二视图(即视图1)也可以与对应于若干被启用视口的若干不同的渲染目标相关联。在这种情况下,当渲染用于每个视图的立方体贴图时,渲染目标0-5对应于用于第一视图的立方体贴图的不同部分,并且渲染目标6-11对应于用于第二视图的立方体贴图的不同部分。
在一个实施例中,PPU 200可以包括硬件单元,其基于与特定视图相关联的视图索引偏移渲染目标数组索引值(index value)。驱动器可以实现API,其使能程序员设置指示配置用于每个视图的渲染目标数组切片(slices)数目的常数。硬件单元可以利用此常数,以及与当前视图相对应的视图索引,以便计算由着色程序指定的渲染目标数组索引值的偏移。例如,硬件单元可以计算该功能:
RT_array_index=RT_array_index+(constant*view_index)(等式1)以立方体贴图为例,所述常数可以被设置为6,如此,当与用于视图0的相应渲染目标数组索引值相比时,渲染目标数组索引值在视图1的渲染期间增加了6。视口SCC阶段650可以至少部分使用这一硬件单元来实现,以由计算出的偏移来调整在渲染期间使用的渲染目标数组索引。在一个实施例中,所述硬件单元是光栅引擎325。
在另一个实施例中,图形处理管线可以配置为生成并行(side-by-side)图像。例如,左眼视图和右眼视图可以被渲染到同一渲染目标。一种用于生成并行图像的技术是使用两个不同视口渲染模型的两个视图,每个视图使用一个视口。每个视图可以关联于不同的视口数组掩码,其指定为该特定视图启用的视口。第一视图可以关联于第一视口,并且第二视图可以关联于偏离于第一视口的第二视口。换句话说,第二视口的配置与第一视口类似,除了第二视口与第一视口偏离图像的宽度,如此,存储到单一渲染目标的图像数据是并行存储的。
将被理解的是,PPU 200可以包括一个或更多硬件单元,其支持每个视图的视口数组掩码。换句话说,硬件单元可以利用多个寄存器来存储对应于多个视图的不同的视口数组掩码。接着,在用于渲染每个视图的操作过程中,可以使用当前视图的视图索引从不同的寄存器中选择特定的视口数组掩码。因此,可以为多个视图的每个不同视图启用一组不同的视口。驱动器可以生成用于每个视图的不同的视口数组掩码,并将该视口数组掩码存储在PPU 200的寄存器中。在一个实施例中,可以至少部分使用此硬件单元来实现视口SCC阶段650,以自动选择特定视口来基于用于该视图的视图索引对每个视图进行渲染。
此外,视口SCC阶段650可以配置为为每个视图/视口组合重演(replay)缓冲区。因此,在立方体贴图和两个视图的情况下,缓冲区830可以被读取十二次,以在十二个渲染目标中渲染十二个不同的图像。将被理解的是,重演缓冲区830十二次以及使用光栅管线820渲染十二个不同的图像比通过整个图形处理管线处理全部模型十二次更有效率,因为模型数据仅由VTG管线810处理一次。
进一步地,并行的优点可以被利用,如此多光栅管线820可以被并行操作以同时生成用于不同视口的图像数据,以便减少顶点数据必须从缓冲区读入的次数。例如,多个TPC320可以配置为实现光栅管线820,以渲染用于每个视图的六个启用的视口的每一个的图像数据。因为属性数据对于特定视图是相同的,从存储器读取到共享高速缓存(例如L2高速缓存360)的数据可以被基于不同视口生成不同图像数据的不同光栅管线820的每一个快速访问。并行架构可以防止VTG管线810需要停止(stall),因为所有可用于流出新顶点数据的缓冲区830都正被利用。
如此处所使用的,图形处理管线的不同阶段可以在PPU 200的架构中实现。图形处理管线的一些阶段可以在配置为执行程序的指令的可编程单元上实现。例如,顶点着色阶段620、外壳着色阶段710、域着色阶段730、几何着色阶段640、以及片段着色阶段670可以由配置为执行不同着色程序的指令的SM 340实现。SM 340可以使用并行处理不同数据的多个线程执行着色程序。图形处理管线的其他阶段可以在某种程度上可配置的固定功能硬件单元上实现。例如,视口SCC阶段650和光栅化阶段可以由光栅引擎325实现。
图11例示了示例性的系统1100,其中可以实现各种前述实施例的各种架构和/或功能。如图所示,系统1100被提供了包括至少一个中央处理器1101,其连接至通信总线1102。可以使用任何适当的协议实现通信总线1102,例如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输、或任何其他总线或点对点通信协议。系统1100还包括主存储器1104。控制逻辑(软件)和数据存储在主存储器1104中,其可以采用随机存取存储器(RAM)的形式。
系统1100还包括输入设备1112、图形处理器1106、以及显示器1108,即传统CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等等。可以从输入设备1112接收用户输入,例如键盘、鼠标、触摸板、麦克风等等。在一个实施例中,图形处理器1106可以包括多个着色模块、光栅化模块等等。每个前述模块可以甚至位于单一的半导体平台上,以形成图形处理单元(GPU)。
在本说明书中,单一的半导体平台可以指代单独的基于单一半导体的集成电路或芯片。应该注意的是,术语单一半导体平台也可以指代具有增强连通性的多芯片模块,其仿真片上操作,并在利用传统中央处理单元(CPU)和总线实现上做出实质性的改进。当然,根据用户的期望,各个模块还可以分别或以半导体平台的各种组合设置。
系统1100还可以包括二级存储1110。二级存储1110包括,例如,硬盘驱动和/或可移除存储驱动,代表软盘驱动、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、录音设备、通用串行总线(USB)闪存。可移除存储驱动以众所周知的方式从可移除存储单元读取和/或写入到可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器1104和/或二级存储1110中。这样的计算机程序在执行时,使能系统1100实施各种功能。存储器1104、存储1110、和/或任何其他存储都是计算机可读介质的可能例子。
在一个实施例中,各种前述附图的架构和/或功能可以在至少部分具有中央处理器1101和图形处理器1106、芯片集(一组设计为作为用于实施相关功能的单元而工作和出售的集成电路等)和/或任何其他关于此的集成电路的能力的中央处理器1101、图形处理器1106、集成电路(未示出)的上下文中实现。
此外,各种前述附图的架构和/或功能可以在通用计算机系统、电路板系统、专门用于娱乐目的的游戏控制台系统、专用系统、和/或任何其他所需的系统的上下文中实现。例如,系统1100可以采取台式电脑、笔记本电脑、服务器、工作站、游戏机、嵌入式系统和/或任何其他类型的逻辑的形式。另外,系统1100可以采取其他多种设备的形式,包括而不限于个人数字助理(PDA)设备、移动电话设备、电视机等等。
进一步,尽管未示出,但系统1100可以耦连至网络(例如电信网络、局域网(LAN)、无线网络、广域网(WAN)例如互联网、点对点网络、有线电视网络等)用于通信的目的。
尽管上文已经描述了各种实施例,但应该理解的是,它们只是以示例的方式提出,而非限制。因此,优选实施例的宽度和范围不应被任何上述示例性实施例限制,而应只根据所附的权利要求及其等同物定义。

Claims (20)

1.一种方法,包括:
配置图形处理管线,以根据至少两个视图渲染用于模型的图元数据;
在所述图形处理管线的第一部分处接收用于所述模型的所述图元数据;
在所述图形处理管线的所述第一部分内处理所述图元数据,以生成经处理的图元数据,其中所述经处理的图元数据包括用于至少一个图元的顶点数据,并且其中每个图元包含多个顶点,所述多个顶点中的每个顶点包含包括至少两个顶点属性的数据结构,所述至少两个顶点属性包括对应于所述至少两个视图中的若干视图的若干位置矢量;
将所述经处理的图元数据存储在存储器的缓冲区中;以及
针对所述至少两个视图中的每个视图:
选择所述至少两个视图中的特定视图,
基于所述选择的视图,从所述缓冲区读取所述经处理的图元数据,以及
在所述图形处理管线的第二部分内生成用于所述选择的视图的图像数据。
2.根据权利要求1所述的方法,其中所述图形处理管线的所述第一部分包括几何着色阶段,并且其中所述几何着色阶段通过配置并行处理单元的流多处理器,以经由一个或更多线程执行几何着色来实现,所述一个或更多线程配置为生成用于每个顶点的所述若干位置矢量。
3.根据权利要求1所述的方法,其中所述图形处理管线的所述第一部分包括域着色阶段,并且其中所述域着色阶段通过配置并行处理单元的流多处理器,以经由一个或更多线程执行域着色来实现,所述一个或更多线程配置为生成用于每个顶点的所述若干位置矢量。
4.根据权利要求1所述的方法,其中所述图形处理管线的所述第一部分包括顶点着色阶段,并且其中所述顶点着色阶段通过配置并行处理单元的流多处理器,以经由一个或更多线程执行顶点着色来实现,所述一个或更多线程配置为生成每个顶点的所述若干位置矢量。
5.根据权利要求1所述的方法,其中所述图形处理管线的所述第二部分包括光栅化阶段、片段着色阶段以及光栅操作阶段中的至少一个。
6.根据权利要求1所述的方法,其中所述图形处理管线包括配置为将所述经处理的图元数据存储在所述缓冲区中以及基于所述选择的视图从所述缓冲区读取所述经处理的图元数据的视口缩放、裁剪和剔除(SCC)阶段。
7.根据权利要求1所述的方法,其中并行处理单元包括光栅引擎,其配置为将所述经处理的图元数据存储在所述缓冲区,从所述缓冲区读取所述经处理的图元数据多次,所述多次对应于所述至少两个视图中的视图的数目,以及将所述经处理的图元数据发送至所述图形处理管线的所述第二部分,以渲染所述经处理的图元数据,并生成用于所述至少两个视图中的每个视图的图像数据。
8.根据权利要求7所述的方法,其中针对每个视图启用六个视口,并且其中所述六个视口配置为生成对应于每个视图的所述模型的立方体贴图。
9.根据权利要求7所述的方法,其中所述光栅引擎配置为选择不同的渲染目标用于存储对应于所述至少两个视图中的每个特定视图的图像数据,所述选择通过基于用于所述特定视图的视图索引乘以常数来计算用于渲染目标数组索引的偏移来进行。
10.根据权利要求1所述的方法,其中所述图形处理管线配置为渲染用于两个视图的图元数据,以生成立体观测图像数据。
11.根据权利要求10所述的方法,其中用于所述立体观测图像数据的第一视图的图像数据存储在渲染目标的第一部分中,以及用于所述立体观测图像数据的第二视图的图像数据存储在所述渲染目标的第二部分中,其中根据指定第一视口被启用的第一视口数组掩码渲染用于所述第一视图的所述图像数据,并且根据指定第二视口被启用的第二视口数组掩码渲染用于所述第二视图的所述图像数据。
12.根据权利要求1所述的方法,其中在所述图形处理管线的所述第二部分内生成用于所述选择的视图的图像数据包括生成对应于由视口数组掩码指定的每个被启用的视口的图像数据,所述至少两个视图的每个视图对应于不同的视口数组掩码。
13.根据权利要求1所述的方法,其中在所述至少两个属性内编码所述位置矢量为依赖于视图的坐标属性和独立于视图的坐标属性的组合。
14.根据权利要求1所述的方法,其中用于每个顶点的所述数据结构包括若干属性,并且其中用于特定顶点的每个属性被指定为依赖于视图的属性或独立于视图的属性。
15.一种存储指令的非暂存性、计算机可读存储介质,所述指令在被处理器执行时,使得所述处理器实施步骤,包括:
配置图形处理管线,以根据至少两个视图渲染用于模型的图元数据;
在所述图形处理管线的第一部分处接收用于所述模型的所述图元数据;
在所述图形处理管线的所述第一部分内处理所述图元数据以生成经处理的图元数据,其中所述经处理的图元数据包括用于至少一个图元的顶点数据,并且其中每个图元包含多个顶点,所述多个顶点中的每个顶点包含包括至少两个顶点属性的数据结构,所述至少两个顶点属性包括对应于所述至少两个视图中的若干视图的若干位置矢量;
将所述经处理的图元数据存储在存储器的缓冲区中;以及
针对所述至少两个视图中的每个视图:
选择所述至少两个视图中的特定视图,
基于所述选择的视图,从所述缓冲区读取所述经处理的图元数据,以及
在所述图形处理管线的第二部分内生成用于所述选择的视图的图像数据。
16.一种系统,包括:
配置为实现图形处理管线的一个或更多阶段的并行处理单元,所述并行处理单元配置为:
根据至少两个视图渲染用于模型的图元数据;
在所述图形处理管线的第一部分处接收用于所述模型的所述图元数据;
在所述图形处理管线的所述第一部分内处理所述图元数据以生成经处理的图元数据,其中所述经处理的图元数据包括用于至少一个图元的顶点数据,并且其中每个图元包含多个顶点,所述多个顶点中的每个顶点包含包括至少两个顶点属性的数据结构,所述至少两个顶点属性包括对应于所述至少两个视图中的若干视图的若干位置矢量;
将所述经处理的图元数据存储在存储器的缓冲区中;以及
针对所述至少两个视图中的每个视图:
选择所述至少两个视图中的特定视图,
基于所述选择的视图,从所述缓冲区读取所述经处理的图元数据,以及
在所述图形处理管线的第二部分内生成用于所述选择的视图的图像数据。
17.根据权利要求16所述的系统,其中所述图形处理管线的所述第一部分包括顶点着色阶段、域着色阶段以及几何着色阶段中的至少一个;其中所述图形处理管线的所述第二部分包括光栅化阶段、片段着色阶段以及光栅操作阶段中的至少一个;并且其中所述图形处理管线进一步包括所述图形处理管线的所述第一部分和所述图形处理管线的所述第二部分之间的视口缩放、剔除和裁剪(SCC)阶段。
18.根据权利要求16所述的系统,其中所述并行处理单元包括光栅引擎,其配置为将所述经处理的图元数据存储在所述缓冲区中,从所述缓冲区读取所述经处理的图元数据多次,所述多次对应于所述至少两个视图中的视图的数目,以及将所述经处理的图元数据发送至所述图形处理管线的所述第二部分,以渲染所述经处理的图元数据,并生成用于所述至少两个视图中的每个视图的图像数据。
19.根据权利要求18所述的系统,其中针对每个视图启用六个视口,并且其中所述六个视口配置为生成对应于每个视图的所述模型的立方体贴图。
20.根据权利要求16所述的系统,其中所述图形处理管线配置为渲染用于两个视图的图元数据,以生成立体观测图像数据。
CN201710275015.2A 2016-05-05 2017-04-25 使用图形处理管线实现的立体多投影 Active CN107392836B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/147,868 US10068366B2 (en) 2016-05-05 2016-05-05 Stereo multi-projection implemented using a graphics processing pipeline
US15/147,868 2016-05-05

Publications (2)

Publication Number Publication Date
CN107392836A true CN107392836A (zh) 2017-11-24
CN107392836B CN107392836B (zh) 2021-08-06

Family

ID=60119579

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710275015.2A Active CN107392836B (zh) 2016-05-05 2017-04-25 使用图形处理管线实现的立体多投影

Country Status (3)

Country Link
US (1) US10068366B2 (zh)
CN (1) CN107392836B (zh)
DE (1) DE102017109472A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111754383A (zh) * 2020-05-13 2020-10-09 中国科学院信息工程研究所 一种GPU上的基于warp重用与着色分区的强连通图检测方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10497150B2 (en) * 2017-01-11 2019-12-03 Arm Limited Graphics processing fragment shading by plural processing passes
US11232532B2 (en) 2018-05-30 2022-01-25 Sony Interactive Entertainment LLC Multi-server cloud virtual reality (VR) streaming
US10740957B1 (en) * 2018-06-14 2020-08-11 Kilburn Live, Llc Dynamic split screen
US10573060B1 (en) * 2018-06-14 2020-02-25 Kilburn Live, Llc Controller binding in virtual domes
US10628990B2 (en) * 2018-08-29 2020-04-21 Intel Corporation Real-time system and method for rendering stereoscopic panoramic images
US12182011B2 (en) * 2023-01-31 2024-12-31 Arm Limited Parallel program control system and method
CN117237182B (zh) * 2023-11-16 2024-02-13 武汉凌久微电子有限公司 一种基于批量片段处理的rop单元组处理方法

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080049040A1 (en) * 2006-08-22 2008-02-28 Microsoft Corporation Viewing multi-dimensional data in two dimensions
US8004515B1 (en) * 2005-03-15 2011-08-23 Nvidia Corporation Stereoscopic vertex shader override
CN102651142A (zh) * 2012-04-16 2012-08-29 深圳超多维光电子有限公司 图像渲染方法和装置
US20120229460A1 (en) * 2011-03-12 2012-09-13 Sensio Technologies Inc. Method and System for Optimizing Resource Usage in a Graphics Pipeline
CN103026388A (zh) * 2011-04-28 2013-04-03 松下电器产业株式会社 图像生成装置
US20130093767A1 (en) * 2009-06-26 2013-04-18 Lawrence A. Booth, Jr. Optimized Stereoscopic Visualization
CN103677828A (zh) * 2013-12-10 2014-03-26 华为技术有限公司 一种图层绘制方法、绘图引擎及终端设备
CN103700060A (zh) * 2013-12-26 2014-04-02 北京大学 一种海量任意形状多边形的快速可视化方法
US20140267266A1 (en) * 2013-03-14 2014-09-18 Nvidia Corporation Generating anti-aliased voxel data
EP2854401A1 (en) * 2013-09-26 2015-04-01 Intel Corporation Stereoscopic rendering using vertix shader instancing
US20150341616A1 (en) * 2014-05-22 2015-11-26 Disney Enterprises, Inc. Parallax based monoscopic rendering
CN105321143A (zh) * 2014-07-29 2016-02-10 辉达公司 来自片段着色程序的采样掩膜的控制

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10210655B2 (en) * 2015-09-25 2019-02-19 Intel Corporation Position only shader context submission through a render command streamer

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8004515B1 (en) * 2005-03-15 2011-08-23 Nvidia Corporation Stereoscopic vertex shader override
US20080049040A1 (en) * 2006-08-22 2008-02-28 Microsoft Corporation Viewing multi-dimensional data in two dimensions
US20130093767A1 (en) * 2009-06-26 2013-04-18 Lawrence A. Booth, Jr. Optimized Stereoscopic Visualization
US20120229460A1 (en) * 2011-03-12 2012-09-13 Sensio Technologies Inc. Method and System for Optimizing Resource Usage in a Graphics Pipeline
CN103026388A (zh) * 2011-04-28 2013-04-03 松下电器产业株式会社 图像生成装置
CN102651142A (zh) * 2012-04-16 2012-08-29 深圳超多维光电子有限公司 图像渲染方法和装置
US20140267266A1 (en) * 2013-03-14 2014-09-18 Nvidia Corporation Generating anti-aliased voxel data
EP2854401A1 (en) * 2013-09-26 2015-04-01 Intel Corporation Stereoscopic rendering using vertix shader instancing
CN103677828A (zh) * 2013-12-10 2014-03-26 华为技术有限公司 一种图层绘制方法、绘图引擎及终端设备
CN103700060A (zh) * 2013-12-26 2014-04-02 北京大学 一种海量任意形状多边形的快速可视化方法
US20150341616A1 (en) * 2014-05-22 2015-11-26 Disney Enterprises, Inc. Parallax based monoscopic rendering
CN105321143A (zh) * 2014-07-29 2016-02-10 辉达公司 来自片段着色程序的采样掩膜的控制

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
HONG-CHANG SHIN 等: "Fast view synthesis using GPU for 3D display", 《IEEE TRANSACTIONS ON CONSUMER ELECTRONICS》 *
吴思: "基于FPGA的三维图形几何管线的算法及其实现技术研究", 《万方数据库》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111754383A (zh) * 2020-05-13 2020-10-09 中国科学院信息工程研究所 一种GPU上的基于warp重用与着色分区的强连通图检测方法
CN111754383B (zh) * 2020-05-13 2023-03-10 中国科学院信息工程研究所 一种GPU上的基于warp重用与着色分区的强连通图检测方法

Also Published As

Publication number Publication date
DE102017109472A1 (de) 2017-11-09
CN107392836B (zh) 2021-08-06
US10068366B2 (en) 2018-09-04
US20170323469A1 (en) 2017-11-09

Similar Documents

Publication Publication Date Title
US10229529B2 (en) System, method and computer program product for implementing anti-aliasing operations using a programmable sample pattern table
US9978171B2 (en) Control of a sample mask from a fragment shader program
US10417817B2 (en) Supersampling for spatially distributed and disjoined large-scale data
US9547931B2 (en) System, method, and computer program product for pre-filtered anti-aliasing with deferred shading
US9569559B2 (en) Beam tracing
US10242485B2 (en) Beam tracing
US9483270B2 (en) Distributed tiled caching
US10032243B2 (en) Distributed tiled caching
CN107392836B (zh) 使用图形处理管线实现的立体多投影
US10055883B2 (en) Frustum tests for sub-pixel shadows
US9245363B2 (en) System, method, and computer program product implementing an algorithm for performing thin voxelization of a three-dimensional model
US10460504B2 (en) Performing a texture level-of-detail approximation
US9269179B2 (en) System, method, and computer program product for generating primitive specific attributes
US9659399B2 (en) System, method, and computer program product for passing attribute structures between shader stages in a graphics pipeline
US20140125669A1 (en) Setting downstream render state in an upstream shader
CN110675480A (zh) 用于获取纹理操作的采样位置的方法和装置
US10600232B2 (en) Creating a ray differential by accessing a G-buffer
US20150179142A1 (en) System, method, and computer program product for reduced-rate calculation of low-frequency pixel shader intermediate values
US9721381B2 (en) System, method, and computer program product for discarding pixel samples
US10417813B2 (en) System and method for generating temporally stable hashed values
CN113393564B (zh) 利用全局照明数据结构的基于水塘的时空重要性重采样
CN110807827A (zh) 系统生成稳定的重心坐标和直接平面方程访问
CN113450445A (zh) 临时密实渲染的自适应像素采样顺序
US9305388B2 (en) Bit-count texture format
US20150084952A1 (en) System, method, and computer program product for rendering a screen-aligned rectangle primitive

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TG01 Patent term adjustment
TG01 Patent term adjustment