CN107492065A - 用于经改进图形流水线中的镶嵌的系统和方法 - Google Patents
用于经改进图形流水线中的镶嵌的系统和方法 Download PDFInfo
- Publication number
- CN107492065A CN107492065A CN201710425314.XA CN201710425314A CN107492065A CN 107492065 A CN107492065 A CN 107492065A CN 201710425314 A CN201710425314 A CN 201710425314A CN 107492065 A CN107492065 A CN 107492065A
- Authority
- CN
- China
- Prior art keywords
- paster
- information
- tessellator
- factor
- embedded factor
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- 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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
提供了用于经改进图形流水线中的镶嵌的系统和方法。提供了改进的镶嵌图形流水线,其免除了使用前期顶点着色器和外壳着色器,并且允许更高的效率和灵活性。实施方案提供了开始于镶嵌器的图形流水线,镶嵌器可以任何方式获得镶嵌因子,诸如从存储器读取开发者提供的因子或者利用计算内核来计算因子。在一些实施方案中,单个顶点着色器可跟在镶嵌器后面,并执行流水线的所有必需的顶点着色。此外,在一些实施方案中,使用计算内核来生成镶嵌因子。计算内核提供了灵活性来允许对于一些图形部分采用而对于其他图形部分不采用。此外,流线型流水线有利于高效地使用缩放来为相同图形部分在不同相机距离或数学模型的不同期望复制水平处确定镶嵌因子。
Description
技术领域
本文所公开的主题涉及图形处理领域,并且非限制地涉及与图形流水线中的镶嵌有关的系统和方法。
背景技术
图形处理单元(GPU)对于处理数据并行图形任务来说已经变得重要。开发者现在认识到非图形数据并行任务也可由GPU处理,从而利用其大规模并行能力。供应商和标准化组织已经创建了使图形数据并行任务更易于编程的应用编程接口(API)。还存在更靠近硬件并且一般通过应用高层级API的输出而被采用的低层级API(或库/框架等)。换句话讲,高层级API一般只是准备供低层级API消耗的输出。
GPU常常使用被称为着色器程序或着色器的程序。着色器的一个常见示例是在像素(或计算等同物)上操作的程序。除了着色器之外,GPU还可执行一般称为内核的程序。与着色器类似,内核通常是在并行执行中使用的程序,但内核与着色器的区别在于内核用于计算功能而并非只是用于着色。
内核或着色器可作为镶嵌过程的一部分而在图形流水线中使用。在图形中,镶嵌是指用于渲染的图形区部(例如,“贴片”)的子划分。如果区部被更多地子划分,则所渲染的图形将更精细并且显示更多细节。参见图4a,示出了贴片(或接合贴片的集合)402,其代表被提交用于在图形系统中渲染的图形的一部分。通常,贴片由可对以数学方式或以其它方式更准确地描述的图形建模的一个或多个多边形构成。通过背景,贴片的形状常常可以控制点401来描述或改变。随着控制点移动,贴片改变形状或形态。显然,图4a的贴片(或接合贴片的组)402由12个控制点401限定。根据开发者偏好和硬件限制,贴片可以简单也可以复杂,并且常常表示图形的四边形或三角形部分,如图4b、4c和4d的另选示例中所示。
参见图4e,示出了通常与Direct3D 11(即DirectX 11(在下文中称为DX11)的一部分)相关联的图形流水线(或其一部分)。图4e示出了具有镶嵌部分411,412和413以及周围部分410,414,415和416的流水线。对流水线的表述方式在熟练技术人员之间可能是不同的。因此,这个例示以及本公开中其类型的其他例示仅仅旨在用于说明概念,而并非旨在作为严格限制教导内容或示例的声明(除非有特别指定)。更特定地,所示的周围部分是顶点着色器410、几何着色器414、光栅器415和片段着色器416。图4e所示的镶嵌部分是“外壳”着色器411、镶嵌器412(其通常不能进行编程)、以及域着色器413。
顶点着色器
顶点着色器410是一种常见类型的3D着色器,其操作于单个顶点上,这意味着其取单个顶点作为输入并生成单个顶点作为输出。更通常地,顶点着色器的目的是将虚拟空间(例如模型)中的3D点转换成将出现在屏幕上的2D点(并且可能还有深度值)。顶点着色器在本领域中是已知的,并且通常允许对图形方面诸如位置、移动、光照和颜色的控制。顶点着色器不生成新的顶点。
外壳着色器
外壳着色器411是可编程着色器,其通常用于指示应该在贴片中在哪里进行多少镶嵌。开发者或系统使用镶嵌因子来指示被处理贴片所期望的镶嵌水平以及贴片中或多或少应该是镶嵌的区域。可使用任意数量的镶嵌因子,并且很多在本领域中是已知的。下文中在实施方案具体实施的示例中提供一些示例性镶嵌因子。外壳着色器接收贴片(例如贴片控制点)作为输入并生成贴片(例如贴片控制点)作为输出。外壳着色器可将限定低阶表面的输入控制点转换成描述贴片的输出控制点。在一些示例中,外壳着色器将基函数从基网格转换成表面贴片。外壳着色器还可执行计算并提供数据(例如贴片常数数据)用于后续部分或流水线(例如镶嵌器和域着色器)。在一些示例中,外壳着色器接收表示贴片的一组顶点或控制点(例如1到32个控制点),并输出用户定义数量(例如在1和32之间)的表示输出贴片的控制点。例如,如果在输出贴片中有更多控制点,则在贴片上将使用更多镶嵌。
镶嵌器
镶嵌器412是流水线的固定功能部分,其生成与贴片相关联的表面上的采样图案并生成连接这些样本的基元(三角形、线或点)。镶嵌器412的目的是将域诸如线、三角形或四边形分成更小项以反映更多细节(例如小三角形)。确切地说,镶嵌器412不对来自外壳着色器411的输出贴片进行转换。相反,镶嵌器412使用镶嵌因子来形成归一化(例如零到一)坐标系中的平铺标准域(例如多边形)。例如,四边形域(例如图4a和图4b)可被镶嵌到单位正方形,并且三角形域(例如图4c和图4d)可被镶嵌到单位三角形。镶嵌器部分412利用从外壳着色器部分411传入的镶嵌因子(其指定对域进行多么精细的镶嵌)和分割类型(其指定用于划分贴片的算法)对于每个贴片操作一次。镶嵌器部分412增量地将贴片上的归一化顶点位置(例如以质心坐标)输出给域着色器级。因此,镶嵌器412的输出不反映例如输入贴片的表面轮廓或颜色。相反,最终将被施加于输入贴片的是镶嵌标准。
域着色器
域着色器413是可编程着色器级,其将来自镶嵌器412和外壳着色器411二者的输出部分用作为其输入。因此,域着色器412能够访问表示图形外观的低阶贴片(外壳着色器411的输出)、贴片数据(外壳着色器的输出)、以及关于该低阶贴片应该如何被镶嵌的信息(镶嵌器412的输出)。具有这些输入,域着色器可生成镶嵌级所生成的贴片上每个表面样本的顶点数据作为输出,其中输出顶点数据接近地表示底层图形的外观(例如,数据可包括位置、纹理坐标、属性等)。可为镶嵌器412生成的每个顶点调用域着色器413,并且域着色器413可生成用于经镶嵌基元(例如三角形)的最终顶点数据。例如,域着色器可通过采样用于位移贴图的纹理来修改顶点位置,以为所渲染的几何结构添加附加细节。
几何着色器
几何着色器414是3D着色器,其可基于对流水线的输入基元生成新的图形基元。几何着色器可例如在点子图形生成、几何镶嵌、和阴影体挤出中使用。
光栅器
光栅器部分415用于将矢量图形(例如数学描述的图形)转换成片段的目的,片段常常被实施为像素。因此,光栅器415通常接受顶点数据并输出像素信息。
片段着色器
片段着色器416对片段着色,例如在像素在帧缓冲器中使用以及最终用于在显示设备(在图4e中未示出)上显示之前对每个像素添加颜色和其他可视属性。
发明内容
本公开的多个实施方案涉及与图形处理单元(GPU)一起使用软件,用于生成受益于镶嵌的图形。一些实施方案采用图形流水线来生成一个或多个图形帧,图形流水线包括镶嵌器、域着色器、光栅器部分和片段着色器。其他实施方案可采用另选图形流水线,也用于生成一个或多个图形帧,另选流水线包括镶嵌器、后镶嵌顶点功能、光栅器和片段功能。此外,上述流水线的一些实施方案前面有计算内核或贴片内核,如本文所述。
根据DX11的镶嵌采用至少六或七级流水线。本公开的实施方案通过去除并非始终必需但不管是否必需都消耗资源的前期流水线级诸如顶点着色器或外壳着色器而提供简化的更灵活的镶嵌流水线。在本公开的一些实施方案中,提出了不采用顶点着色器和外壳着色器的图形流水线。相反,顶点着色器和外壳着色器的功能可通过预供应或以其他方式供应的贴片、贴片数据和镶嵌因子而被免除。特别地,贴片、贴片数据和镶嵌因子可由开发者供应并存储在存储器中以供在运行时检索。此外,可使用计算内核来生成或检索不能直接从存储器检索的必要信息的任何部分。
在本公开的一些实施方案中,可采用缩放技术来推导新的镶嵌因子,而没有那些因子的传统计算。特别地,镶嵌因子可根据对象图形与相机的距离来进行缩放:相机越近,镶嵌越高,反之亦然。
附图说明
图1示出了可例如被用作最终用户机器或开发者机器的一种代表性计算机节点。
图2示出了与本文公开的各种实施方案相关联的一种示例性网络环境。
图3示出了一种示例性软件层和架构示意图。
图4a至图4d示出了示例性贴片。
图4e示出了与DX11相关联的过程。
图5示出了第二示例性系统和过程架构。
图6a、图6b、和图7示出了与本公开的实施方案相关的过程。
图8和图9示出了归一化参数空间中的示例性贴片坐标。
具体实施方式
本公开涉及用于改进图形开发系统和图形系统的操作的系统、方法和计算机可读介质。还涉及用于图形开发系统的设计和/或操作以及最终用户设备上相关图形的渲染的多种架构。一般来讲,本公开的多个实施方案设想了由本文中的教导和建议所实施的图形流水线中对镶嵌的使用。
在以下描述中,为了解释的目的,阐述了很多具体细节以便提供对所公开构思的彻底理解。作为该描述的一部分,本公开的附图中的一些附图以框图形式表示结构和设备,以避免模糊所公开构思的新颖方面。为了清晰起见,可能未对实际具体实施的所有特征进行描述。此外,本公开中所使用的语言主要是为了可读性和指导性目的而选择的,并且可能并未被选择为突出本发明的主题,从而可能必需凭借权利要求来确定此类发明主题。在本公开中提到“一个实施方案”或“实施方案”意指结合该实施方案所述的特定特征、结构或特性被包括在所公开主题的至少一个实施方案中,并且多次提到“一个实施方案”或“实施方案”不应被理解为必然地全部涉及相同的实施方案。此外,在本公开中使用字词“或”是旨在用于指示可选的另选形式(如在和/或中那样)而并非指示排他性的另选形式(如在或但非二者中那样),除非明确指出排他性。此外,对字词“包括”及其各种形式的使用是旨在例示所包括的项,而并非旨在表明所包括的项是仅有的被包括事物。
应当理解,在任何实际具体实施的开发中(如在任何软件和/或硬件开发项目中那样),必须要作出许多决策以实现开发者的特定目标(如,符合与系统和商务相关的约束条件),并且这些目标在不同具体实施之间可能是不同的。还应当理解,此类开发努力可能是复杂且耗时的,但是尽管如此,对于受益于本公开的在设计和实施用户接口和响应系统和/或手势识别处理系统中的普通技术人员而言会是一项常规任务。
示例性硬件和软件
本文所述的实施方案可在所有类型的设备中以及相对于所有类型的设备有所涉及和使用,所述设备包括单处理器和多处理器计算系统和包含单处理和多处理计算系统的直立式设备(例如相机、游戏系统、电器等)。本文中的讨论是参考可作为软件开发系统或最终用户系统进行讨论的一种常见计算配置来进行的。这种常见计算配置可具有包括一个或多个微处理器(每一个都具有一个或多个处理核心)的CPU资源和包括一个或多个GPU(每一个都具有一个或多个处理核心)的图形资源。在多个实施方案中,一个或多个CPU和一个或多个GPU一起工作来在显示器上呈现图形内容,显示器可以与包括处理资源和图形资源的计算设备是一体的,也可以与包括处理资源和图形资源的计算设备不是一体的。如下文所述,在多个实施方案中,计算设备可采用新颖的过程和硬件布置来通过提供改进的镶嵌来改善图形效率或性能。
本论述仅用于关于样本实施方案的举例说明,并非意图要将所公开主题的应用限制到所公开的硬件。具有其他(现在或未来)已知或常见硬件配置的其他系统也完全被设想和预期。在考虑上述声明的情况下,以下讨论一种典型的硬件和软件操作环境。硬件配置可例如存在于服务器计算机系统、工作站计算机系统、膝上型计算机系统、平板计算机系统、台式计算机系统、游戏平台(不管是否是便携式的)、电视机、娱乐系统、智能电话、电话、或任何其他计算设备(不管是移动式的还是固定式的)中。
参见图1,所公开实施方案可由代表性计算机系统100来执行。例如,代表性计算机系统可充当软件开发平台或最终用户设备。系统100可在任何类型的设备中实施,诸如通用计算机系统、电视机、机顶盒、媒体播放器、多媒体娱乐系统、图像处理工作站、手持式设备、或可与本文所述显示器或展示设备耦接或者可包含本文所述显示器或展示设备的任何设备。计算机系统100可包括一个或多个处理器105、存储器110(110A和110B)、一个或多个存储设备115、以及可包括一个或多个GPU的图形硬件120。计算机系统100还可具有设备传感器125,设备传感器可包括以下中的一者或多者:深度传感器(诸如深度相机)、一个或多个3D深度传感器、成像设备(诸如固定和/或支持视频的图像捕捉单元)、RGB传感器、接近传感器、环境光传感器、加速度计、陀螺仪、任何类型的静止或视频相机、LIDAR设备、SONAR设备、麦克风、CCD(或其他图像传感器)、红外传感器、温度计等。这些以及其他传感器可与一个或多个GPU、数字信号处理器(DSP)或常规微处理器结合与适当的编程一起工作,从而传感器输出可被正确地解释和/或组合并解释。
返回图1,系统100还可包括通信接口130、用户接口适配器135、和显示器适配器140,所有这些可经由系统总线或背板145耦接。存储器110可包括处理器105或图形硬件120使用的一个或多个不同类型的介质(例如固态、DRAM、光学、磁等)。例如,存储器110可包括存储器高速缓存、只读存储器(ROM),和/或随机存取存储器(RAM)。存储装置115可包括一个或多个非暂态存储介质,包括例如磁盘(固定盘、软盘和可移除盘)和磁带、光学介质(诸如CD-ROM和数字视频光盘(DVD))、以及半导体存储器设备(诸如电可编程只读存储器(EPROM)和电可擦除可编程只读存储器(EEPROM))。存储器110和存储装置115可用于保持媒体(例如音频、图像、和视频文件)、偏好信息、设备配置文件信息、被组织成一个或多个模块且以任何期望的计算机编程语言编写的计算机程序指令、和任何其他合适的数据。在下文的一些实施方案中,存储器110或存储装置115可用于存储图形信息诸如着色器(程序类型)、内核(程序类型)顶点信息、镶嵌因子、控制点、控制点数据以及本文所述各个图形流水线部分的其他数据输入和输出。
当被处理器105和/或图形硬件120执行时,计算机程序代码(例如着色器或内核)可实施本文所述方法或过程中的一者或多者。通信接口130可包括基于半导体的电路,并且可被用于将计算机系统100连接到一个或多个网络。示例性网络包括但不限于:本地网络诸如USB网络;商业局域网;以及广域网诸如互联网,并且可使用任何合适的技术(例如有线或无线)。可实施的通信技术包括基于蜂窝的通信(例如LTE、CDMA、GSM、HSDPA等)或其他通信(以太网、WiFi、USB、等)。用户接口适配器135可用于连接键盘150、麦克风155、指针设备160、扬声器165、和其他用户接口设备诸如触摸板和/或触摸屏(未示出)。显示器适配器140可用于连接一个或多个显示单元170。
处理器105可执行实施或控制由系统100所执行的多种功能的操作(例如评估、转换、和图形程序编译)所必要的指令。处理器105可例如驱动显示器170并可从用户接口适配器135或系统所实施的任何其他用户接口接收用户输入。用户接口135例如可呈现多种形式诸如按钮、小键盘、拨号盘、点击轮、键盘、显示屏和/或触摸屏。处理器105可以是任何类型的计算设备,诸如单独或与一个或多个GPU结合工作的一个或多个微处理器、DSP、片上系统设备诸如在一些移动设备中找到的那些。处理器105可包括一个或多个专用GPU或图形子系统,其接受程序指令以生成或改变显示信息诸如数学模型或像素。此外,处理器105可基于精简指令集计算机(RISC)或复杂指令集计算机(CISC)架构或任何其他合适的架构,并且可包括一个或多个处理核心。图形硬件120可以是用于处理图形和/或辅助处理器605执行计算任务的专用计算硬件。在一些实施方案中,图形硬件120可包括CPU集成的图形和/或一个或多个可编程GPU,其可按串行或并行协作来操作。图形硬件诸如GPU可采用集成存储器诸如SRM、外部存储器诸如存储器110(专用的或共享的)、或以上二者的组合。
来自传感器125的输出可至少部分地由处理器105和/或图形硬件120、和/或结合在系统100内或没有系统100的专用图像处理单元来处理。如此捕捉的信息可被存储在存储器110和/或存储装置115和/或在所附接的网络上能访问的任何存储装置中。存储器110可包括由处理器105、图形硬件120和传感器125用以执行设备功能的一个或多个不同类型的介质。存储装置115可存储数据诸如媒体(例如音频、图像和视频文件);媒体的元数据;计算机程序指令;和其他软件;包括数据库应用(例如数据库存储头像相框)、偏好信息、设备配置文件信息和任何其他合适的数据。存储器110和存储装置115可用于保持经编译形式的或者以任何期望的计算机编程语言编写的被组织成一个或多个模块的计算机程序指令或代码。当例如由处理器105或系统中的一个或多个GPU执行时,此类计算机程序代码可实施本文所述动作或功能中的一者或多者(例如,编译着色器代码、生成可执行代码、执行可执行代码、执行着色器、执行内核、或执行镶嵌器软件模块)。
除了前述之外,在一些实施方案中,图形硬件120还可包括硬件镶嵌器,用于执行下文所述的镶嵌器功能。
图2示出了示例性网络架构200,在该网络架构内可实施所公开的技术并且所公开的硬件可位于该网络架构内。这个示例性网络200可包括多个网络205(即205A、205B和205C),其中每一个可采用任何形式,包括但不限于局域网(LAN)或广域网(WAN),诸如互联网。另外,网络250可使用任何期望的技术(有线、无线或其组合)和协议(例如传输控制协议TCP)。能够操作服务器应用诸如数据库并且还能够通过网络205进行通信的数据服务器计算机210(即210A和210B)耦接到网络205。使用服务器计算机的一个实施方案可涉及一个或多个中央系统的操作以处理图形信息并将经处理的信息发布到网络上的节点。例如,预编译或预计算的着色器、内核、镶嵌数据(诸如因子)、控制点和任何离线生成的信息可通过网络作为应用程序或其他程序的一部分或根据应用程序或其他程序的请求而被下载到设备。
可采用任何智能电话、游戏系统、平板计算机系统、台式计算机系统、机顶盒、娱乐设备/系统、电视机、电话、通信设备或智能机器(包括嵌入式系统)的形式的客户端计算机215(即215A、215B和215C)也可耦接到网络205和/或数据服务器计算机210。在一些实施方案中,网络架构210还可包括网络打印机诸如打印机220和可用于存储多媒体项目或本文提及的其他数据的存储系统诸如225。为了便于不同网络设备(例如数据服务器210、最终用户计算机215、网络打印机220和存储系统225)之间的通信,至少一个网关或路由器230可任选地耦接在它们之间。此外,为了便于此类通信,利用网络的每个设备可包括网络适配器电路和相关软件。例如,如果期望以太网网络用于通信,则每个参与设备必须具有以太网适配器或支持以太网的嵌入式IC。另外,所述设备可带有用于其可能参与的任何网络(包括但不限于PAN、LAN、WAN、和蜂窝网络)的网络适配器。
如上所述,本文公开的发明的实施方案包括软件。就此,提供常见计算软件架构的描述,如图3中的层图中所表述。与硬件示例类似,这里讨论的软件架构并不旨在以任何方式是排他性的,相反是例示性的。这对于层类型图尤其如此,软件开发者往往会以略微不同的方式对层类型图进行表述。在这种情况下,描述开始于层从对硬件进行例示的基底硬件层395开始,硬件可包括CPU和GPU或其他处理和/或计算机硬件。在硬件层上方是O/S内核层390,其将一个示例示为O/S内核345,O/S内核是可执行存储器管理、设备管理和系统调用(常常是硬件驱动器的权限)的内核软件。在本公开的一些实施方案中,顶点着色器和外壳着色器可被实施为内核中的驱动器着色器。这是因为,如下所述,本公开的多个实施方案可实施在DX11系统或硬件中并且顶点着色器和外壳着色器对于新颖实施方案中的多个并非是必需的。图3的层图中采用的标记一般性地旨在说明层中所示的软件元素使用来自下面的层的资源并为上面的层提供服务。然而在实践中,特定软件元素的所有部件可能并不完全按该方式作用。
返回图3,层385是由O/S服务350举例说明的O/S服务。O/S服务可提供受保护环境中的核心O/S功能。此外,层385中所示的O/S服务可包括用于OpenGL 351、Metal 352、软件光线跟踪器353和纯软件光栅器354的框架。这些具体示例都与图形和/或图形库有关,并且被选择以用于说明与图形处理有关的本文多个实施方案的话题。这些具体示例还表示可在框架的较低等级中操作的图形框架/库,从而开发者可使用着色和图形基元和/或获得对图形硬件的相当紧密耦接的控制。此外,图3中指定的具体示例还可将其工作产物传递给更低层中的硬件或硬件驱动器。
再次参见图3,OpenGL 351表示熟知的用于图形渲染(包括2D和3D图形)的库和应用编程接口的示例。Metal 352还表示所发布的图形库和框架,但其是比OpenGL 351低的层级,从而支持组织、处理和提交图形和计算命令以及管理那些命令的相关联数据和资源的细粒度低层级控制。Metal还提供通过单个API对计算内核和着色器的控制,这是如在图形流水线可包括计算内核和着色器二者的下文一些实施方案中所示利用的能力。
软件光线跟踪器353是用于基于跟踪图像平面中穿过像素的光路径的过程来生成图像信息的软件。纯软件光栅器354一般是指用于在没有专门的图形硬件(例如只利用CPU)的情况下生成图形信息诸如像素的软件。在O/S服务层385内示出的这些库或框架仅仅是示例性的,并且旨在用于展示层的一般层级以及其在样本布置(例如内核操作通常在下面,并且高层级应用服务360通常在上面)中如何与其它软件有关。此外,可能有用的是要注意,Metal 352表示本领域开发人员已知的Apple Inc.的所发布框架/库。此外,OpenGL 351可表示Apple Inc.当前或以前发布的软件版本中存在的框架/库。
在O/S服务层385上方有应用服务层380,其包括Sprite Kit361、Scene Kit362、核心动画363和核心图形364。O/S服务层表示通常被应用程序直接访问的高层级框架。在本公开的一些实施方案中,O/S服务层包括图形有关的框架,其是高层级,因为其对下面的图形库(诸如参考层385讨论的那些)是不可知的。在此类实施方案中,这些高层级图形框架意在以用户/开发者更加友好的方式为开发者提供对图形功能性的访问并允许开发者免除与着色和图形基元的工作。以举例的方式,Sprite Kit 361是Apple Inc.提供的图形渲染和动画基础结构。Sprite Kit 361可用于对纹理图像或“子图形”动画化。Scene Kit 362是来自Apple Inc.的3D渲染框架,其支持在比具有类似能力的框架诸如OpenGL高的层级导入、操纵和渲染3D资产。核心动画363是Apple Inc.提供的图形渲染和动画基础结构。核心动画363可用于对视图以及应用的其它视觉元素动画化。核心图形364是来自Apple Inc.的二维绘图引擎。核心图形365提供用于应用的2D渲染。
在应用服务层380上方有应用层375,其可包括任何类型的应用程序。以举例的方式,图3示出了3个特定应用:照片应用371(照片管理、编辑和共享程序)、财务程序372(财务管理程序)、和电影应用373(电影制作和共享程序)。应用层375还示出了两个通用应用370和374,其表示存在任何其它应用可与本文所公开的本发明实施方案交互或可作为本文所公开的本发明实施方案的一部分。例如,游戏应用、通信应用、生产力应用、和实用工具应用在现代计算中都是常见的。一般来讲,本发明的实施方案采用生成可显示/可查看内容的应用和/或与其交互。对于本公开的多个实施方案,用于创建内核或着色器源代码的文本编辑器和软件开发环境通常在应用层中操作,但也可具有更低层级部件。编译器和可执行代码生成器也可在应用层中操作,但在一些实施方案中可作为对应用的服务来操作并且因此仅位于更低层级中或者除了存在于应用层之外还位于更低层级中。最后,对于本公开的一些实施方案,本文所讨论的图形流水线的具体实施可主要存在于层385中或者跨在层380、385和390中两者或三者之间。如下所述,本公开的一些实施方案设想流水线部分以硬件实施。例如,一些实施方案使用完全或部分以硬件实施的镶嵌器。因此,在这些实施方案中,图形流水线将延伸到硬件层(例如395)中作为对390、385或380表示的三个软件层中一者或多者的补充。
在评估O/S服务层385和应用服务层380中,可能有用的是认识到不同框架具有较高或较低层级应用程序接口,即使框架被表示在图3示意图的相同层中也是如此。图3的例示用于提供一般性指导以及提出后面可能要讨论的示例性框架。此外,本发明的一些实施方案可表明层380中的框架利用层385中表示的库或者层385中的软件与内核345中的驱动器或其它软件协作。因此,图3提供用于这些示例的知识强化。重要地,图3并非意图限制可以任何特定方式或在任何特定实施方案中使用的框架或库的类型。
DirectX 11–DX11镶嵌
参见图5,示出了与存储器资源并置的DX11流水线,以允许更深入地理解根据本公开的一种操作。具体地,示出了图形存储器501,其可以是系统中图形处理硬件能访问的任何存储器。在一些实施方案中,所述存储器将是附接到GPU或其它处理设备的RAM(例如SRAM或DRAM)。所述存储器可专用于图形操作,专用于GPU(或其它设备)或在设备之间共享(例如在GPU和CPU之间共享的存储器)。对于关于存储器的进一步说明,参见与图1相关的论述。
再次参见图5,还示出了GPU/设备存储装置509,其表示更紧密地可供处理设备使用的存储器或存储装置。因此,GPU/设备存储装置509可表示GPU的内部存储器或非常紧密耦接的存储器诸如高速缓存或SRAM(例如能通过与普通计算DRAM存取相比高速的链路或其它接口访问)。处理部分502至507旨在表示在图4e中涉及的相同或类似的软件/结构。因此,关于顶点着色器502、外壳着色器503、镶嵌器504、域着色器505、光栅器506、和片段着色器507的介绍性信息可在上文找到。
再次参见图5,顶点着色器从图形存储器501检索图形信息,诸如与贴片有关的信息、或关于模型中3D点的信息。顶点着色器转换贴片的控制点,其然后由外壳着色器503处理。外壳着色器503生成关于贴片经转换版本的数据以及所期望的镶嵌水平(例如镶嵌因子)。该数据被存储在GPU/设备存储装置509中,然后其一部分被镶嵌器504检索。如上所述,镶嵌器504使用镶嵌因子和分割(类型)信息生成归一化坐标系中的平铺标准域。域着色器505然后从GPU/设备存储装置509读取外壳着色器503和镶嵌器504二者生成的某些信息(如上所述)。此外,如图5所示,域着色器505还可从图形存储器501读取信息。例如,域着色器501可从纹理或缓冲器进行读取以用于任何目的,包括为了利用控制点数据和归一化坐标的组合来计算位移(或位置偏移)。域着色器505生成经镶嵌基元(例如三角形)的最终顶点数据,该数据在被传递给一个或多个片段着色器507用于按像素操作之前被单元506光栅化。
镶嵌的流水线实施方案
参见图6a,示出了与存储器并置的流水线,其中布置根据本公开的多个实施方案。计算内核601被图示为具有与图形存储器501的双向连通性。在一些实施方案中,计算内核601可用于读取输入贴片或描述图形的其它信息,并:(i)作为输出而生成按贴片的数据诸如镶嵌因子(例如内侧和边缘贴片镶嵌因子)以及任何用户指定的按贴片的数据;和(ii)在一些实施方案中,生成或修改贴片控制点数据(例如输出贴片,诸如控制点和相关信息)。如图6a所示,来自计算内核601的输出诸如按贴片的数据和控制点信息可被写到图形存储器608以供进一步在流水线中使用。在多个实施方案中,计算内核601是开发者能访问的程序,因此其使用和功能在应用(或其它软件)开发者的控制之内。因此,计算内核601根据开发者设置的条件可以被采用也可以不被采用。例如,计算内核601可为一些帧或贴片计算镶嵌因子,而对于其它帧或贴片不计算镶嵌因子。此外,用于确定是否为帧或贴片计算镶嵌因子的条件可由开发者程序化地设置,并且由系统在CPU中或在计算内核601中(或以其它方式在GPU中)进行确定。由于计算内核(单独地或与另一处理资源一起)可完全有条件地执行操作,所以图形流水线变得非常灵活。例如,随着相机接近可见图形中的项,计算内核601可用于通过只是缩放相同项的先前镶嵌因子来提高镶嵌。这种类型的技术比为相同项重新计算新镶嵌因子高效得多并且计算开销小得多。在一些实施方案中,该方法可通过为一个或多个贴片或帧提供镶嵌因子并且还提供与相对于提供了镶嵌因子的贴片或帧的多个相机位置(例如距离)相关联的缩放系数来实现。
在没有计算内核601的实施方案或流水线实例中,一个或多个着色器或计算内核可用于生成贴片数据或镶嵌因子。在其它实施方案中,贴片数据或镶嵌因子可离线生成并且简单地从存储器读取,从而(至少部分地)不需要使用计算内核601。例如,可为所有贴片或帧提供镶嵌因子,并且可简单地从存储器608访问镶嵌因子。另选地,镶嵌因子可以用于一个或多个贴片或帧,并且附加地,还可提供与相对于那些贴片或帧的多个相机位置(例如距离)相关联的缩放系数。一些实施方案简单地使用CPU或计算内核来通过利用所提供的因子及适当的缩放系数来确定每个帧的镶嵌因子。重要的是,对缩放系数这个术语的使用并非旨在将使用限制到简单数学。不同实施方案可将缩放系数实现成简单乘子或复杂函数。例如,缩放系数可以是整数、数学函数,或者甚至可以是包括函数和条件二者的程序序列,从而缩放效应可依赖于多种因素,包括系统事件(例如应用状态、或者屏幕或图形设置)。
再次参见图6a,镶嵌器604可从图形存储器608读取镶嵌因子或贴片因子以及任何其他所需信息(例如分割类型),并生成和输出标准域以传递给域着色器605。域着色器可使用标准域及可从图形存储器608读取的关于原始图形贴片的其他信息(例如控制点和相关数据)。值得注意的是,根据下面的多个本发明实施方案,从存储器608检索的顶点信息可以是如开发者或计算内核601所供应的那样。换句话讲,域着色器605可使用顶点信息,诸如还未以其他方式被另一顶点着色器在线处理过的控制点。
域着色器605生成可被光栅器606转换成片段或像素的顶点信息。值得注意的是,在一些实施方案中,域着色器605是流水线中或者流水线的镶嵌部分中的唯一顶点着色器,这与DX11流水线相比是显著的效率。在光栅化之后,片段着色器可对片段或像素涂色或以其他方式着色,并将结果存回到图形存储器608中。在一些实施方案中,在着色之后,片段或像素被存储在缓冲器诸如帧缓冲器中,并且片段或像素可被组织成帧以用于在目标显示设备620上显示。
图6a所示的箭头旨在说明其中某些着色器紧密相连从而信息可在它们之间直接传递的实施方案。例如,图6a示出了镶嵌器604将输出数据传递给域着色器605,域着色器将输出数据传递给光栅器部分606,光栅器部分又将输出数据传递给片段着色器607。本文的实施方案还设想了,信息也可通过图形存储器608来共享,这在不同情况下可能更高效也可能更低效。此外,本文的论述讨论了贴片或帧的处理,当在现实中时,信息可在区段之间更增量地传递(例如一次一个顶点或基元)。
参考图6b,示出了与图6a类似的示意图,但计算内核601被移除。图6b例示了以下构思:本公开的一些实施方案将流水线设想为包括镶嵌器604、域着色器605、光栅器606和片段着色器607,而不使用或需要计算内核601。这个例示反映了图6b所示的流水线对贴片信息和镶嵌因子的来源是不可知的。如上所述,这些输入项可来自任何来源,包括其他GPU操作(例如着色器或内核)、网络源、或来自离线生成。
参考图7,示出了镶嵌过程的一个另选例示,用于帮助说明本公开的几个实施方案。关于图7的构思以及本说明书的许多其余部分可以基于Apple的Metal框架范式中具体实施的示例。在高层级,图7示出了图形流水线715与贴片内核701和缓冲存储器部件702,703和710协同操作。为了进行示意性的说明,缓冲存储器部件702,703和710根据所存储的数据被分开图示。然而,本公开的各种实施方案设想了使用计算机系统的主存储器(例如在图形和其他系统之间共享的DRAM或其他存储器类型)、图形存储器(例如专用于或被保留用于图形存储的DRAM或其他存储器)、或图形处理资源可用的更高速存储器(例如GPU中的或紧密耦接到GPU的SRAM、或寄存器)中的单个缓冲器。在至少一个实施方案中,缓冲器702,703和710是指可供图形处理使用并且专用于或被保留用于图形处理或与其它计算机系统存储器使用方诸如CPU共享的存储器资源中的空间。
如图7所指出,贴片内核701可生成镶嵌因子或贴片数据以供在流水线715中使用。在这方面,贴片内核701执行与DX11具体实施的顶点着色器和外壳着色器类似的计算。然而,与DX11具体实施不同,本公开的多个实施方案不要求贴片内核701必须为每个图形帧执行。如上所述,开发者可选择现在或未来已知的任何系统或机制来获取或生成贴片镶嵌因子或贴片数据。例如,其它处理资源可被采用(例如CPU、GPU着色器或专用硬件),或者获取或生成可被离线执行,其中因子和贴片数据简单地存储在本地存储器中或在网络上(例如实时地)获取。此外,如上文针对计算内核601所述,贴片内核701的使用和操作二者可以任意数量的因素为条件。此外,如上所述,可采用缩放技术来减少必须为其计算镶嵌因子的实例的数量。
再次参见图7,在一些实施方案中,贴片内核701可以是计算内核,其:(i)计算按贴片的数据诸如内侧和边缘贴片镶嵌因子和任何用户指定的按贴片的数据;和/或(ii)任选地生成或修改贴片控制点数据。贴片内核701可从可访问的存储器获得其输入(例如如上文针对计算内核601所述)。此外,贴片内核701输出还可被存储在图形处理资源可用的存储器中。例如如图7所示,贴片内核701将贴片镶嵌因子存储在缓冲器710中,将按贴片的数据存储在缓冲器703中,并将贴片控制点数据存储在缓冲器702中。在至少一个实施方案中,贴片内核701可将其输出存储在图形流水线715的一些或全部元素可用的存储器资源中。此外,由于不要求贴片内核701对于每个图形帧都运行,所以图7的一些实施方案设想了在过程中根据需要间歇性地或周期性地使用贴片内核701。例如,当镶嵌因子或其它贴片数据可从存储器或者在网络上(例如从离线获取或生成)获得时,对于图形帧可以不需要贴片内核701。此外,如果镶嵌对于特定帧或贴片不是必需的,则也可以不需要贴片内核701。其它实施方案设想了移除贴片内核701,其中已知镶嵌因子或其它贴片数据能另选地从存储器、网络或另一处理资源诸如CPU确定。
再次参见图7,在一些实施方案中,镶嵌器704是图形流水线715中的初始级。在一些实施方案中,镶嵌器704可实施上文(例如针对DX11或图6a和图6b)讨论的任何镶嵌器的结构和功能性。在至少一个实施方案中,镶嵌器704是DX11图形镶嵌流水线中实施的流水线的固定功能(例如不能编程的)镶嵌级。使用DX11实施方案就允许用户在被设计用于DX11的硬件和系统上实现所公开主题的实施方案。例如在一个实施方案中,通过采用DX11顶点和外壳着色器作为驱动器生成的通过着色器,发明构思的具体实施可被施加在DX11硬件上。例如,DX11顶点着色器可任选地读取贴片控制点数据(利用例如PTVS VertexDescriptor(顶点描述符))并将其传递给外壳着色器(虽然这可能是依赖于硬件的)。Dx11顶点着色器也可什么都不做,并取属性的动作留给PTVS。在一些实施方案中,DX11外壳着色器读取镶嵌因子,并任选地将读数传递下去并将镶嵌因子传递下去。此外,外壳着色器可将贴片数据传递下去。在一个或多个实施方案中,DX11域着色器未被改变,但与DX11具体实施不同,因为输入数据中的至少一些是以不同方式获取的。例如,贴片控制点和贴片数据从顶点/外壳着色器馈入或者直接从PTVS中的存储器读取。
在一些实施方案中,镶嵌器704取以下中的一者或多者作为输入:(i)要处理的贴片的数量;(ii)对于要处理的每个贴片,贴片类型(例如四边形或三角形),或者如果所有贴片都是相同类型的,则只是贴片类型;(iii)每个贴片的所选输出基元类型(例如三角型),或者如果所选输出基元类型相同,则所有贴片的所选输出基元类型;(iv)为要镶嵌的每个贴片存储按贴片的镶嵌因子的缓冲器(例如地址或指针),或者如果因子对于所有贴片是相同的,则是单个缓冲器;和(v)输出基元取向(例如如果输出基元是三角形)。如上所述,镶嵌器704可生成标准域作为输出,其在一些实施方案中结合到后镶嵌顶点功能705作为输入。
再次参见图7,在一些实施方案中,后镶嵌顶点功能705可从镶嵌器704接收输出,并为镶嵌级生成的每个表面样本计算顶点数据。特别地,镶嵌器的标准域输出提供样本以供被后镶嵌顶点功能705结合关于被处理贴片的其他数据用来生成考虑图形外观和所选镶嵌二者的顶点数据以用于在图形系统中再现。在多个实施方案中,这与上文所述的域着色器605的活动类似。在一些实施方案中,所述样本可由被处理贴片上的归一化贴片坐标来表示。在至少一个实施方案中,对后镶嵌顶点功能705的输入包括以下中的一者或多者:(i)贴片内核701输出中的一些或全部,例如可直接从缓冲器703读取的按贴片的数据、以及可直接从缓冲器702读取的贴片控制点数据;和(ii)镶嵌器704的输出(例如贴片上的归一化顶点位置)。
在一个或多个实施方案中,后镶嵌顶点功能705生成经镶嵌三角形的最终顶点数据。例如,为了为所渲染的几何结构添加细节(诸如位移贴图值),后镶嵌顶点功能可对纹理进行采样以将顶点位置修改位移值。在一些实施方案中,后镶嵌顶点功能705充当流水线中或流水线的镶嵌部分中最后的或仅有的顶点着色器。在后镶嵌顶点功能705处理之后,后处理过的顶点表示要在帧中或图形的其他可见实施方案中实现的图形的外观(例如在711处或之后生成,后着色并最终发送给显示设备720用于显示)。
再次参见图7,在后镶嵌顶点功能705已执行而生成最终顶点数据之后,经镶嵌的基元在光栅器706处被光栅化。如上所述,光栅化(例如706)将数学图形表示转换成片段或像素用于显示。片段或像素然后可通过片段功能707所表示的一个或多个着色过程来改变。经着色的像素或片段可被其他着色器进一步修改或者被发送给图形缓冲器诸如帧缓冲器,在那里其被组织成帧以用于在显示设备上显示。
镶嵌基元生成
如上所述,在一个或多个实施方案中,镶嵌器704消耗输入贴片信息并生成新的一组例如三角形,其反映期望的镶嵌程度。在一些实施方案中,这些三角形通过根据下文所述的按贴片的镶嵌因子对贴片(四边形或三角形)进行子划分而生成。这个子划分可按依赖于具体实施的方式来执行。例如,对于三角形贴片,镶嵌器704可将三角形基元子划分成更小的三角形;而对于四边形贴片,基元生成器可将三角形基元子划分成更小的三角形。在至少一个实施方案中,镶嵌器704生成的每个顶点可表述在归一化参数空间中的质心坐标和相关联(u,v,w)或(u,v)坐标中,其中参数值在范围[0,1]中。
四边形贴片
在本公开的一些经编程实施方案中,按贴片的镶嵌因子可例如作为结构体被声明。参考图8,示出了表示四边形类型贴片的镶嵌因子的归一化空间中的四边形坐标。对于四边形,一个或多个实施方案将位置表述成(u,v)坐标,其指示顶点相对于经子划分的矩形的相对水平和竖直位置。(u,v,w)值可各自在0.0到1.0的范围内,并且可由镶嵌器(例如704)以定点运算利用16位分数来生成,其然后在作为输入被传递给后镶嵌顶点着色器(例如704)之前可被转换成单精度浮点值。
参考图8,提供以下例示性指令和API作为可在一个或多个程序化实施方案中采用的样本:
struct MTLQuadTessellationFactors{
half edgeTessellationFactor[4];
half insideTessellationFactor[2];
};
关于图8,内侧镶嵌因子(例如内侧1和内侧0)在insideTessellationFactor(内侧镶嵌因子)的xy分量中。关于edgeTessellationFactor(边缘镶嵌因子):索引0中的值提供贴片的u==0边缘的镶嵌因子;索引1中的值提供贴片的v==0边缘的镶嵌因子;索引2中的值提供贴片的u==1边缘的镶嵌因子;并且索引3中的值提供贴片的v==1边缘的镶嵌因子。边缘的排序可以是顺时针的,从贴片左侧的u==0边缘开始,结束于贴片顶部的v==1。
三角形贴片
如上所述,在本公开的一些编程实施方案中,按贴片的镶嵌因子可例如作为结构体被声明。参考图9,示出了表示三角形类型贴片的镶嵌因子的归一化空间中的三角形坐标。对于三角形,一个或多个实施方案将顶点位置表述成质心坐标(u,v,w),其中u+v+w=1。这样,顶点的位置上三角形的三个顶点的相对影响被指示。
参考图9,提供以下样本指令和API作为可在一个或多个程序化实施方案中采用的样本:
struct MTLTriangleTessellationFactors{
half edgeTessellationFactor[3];
half insideTessellationFactor;
};
关于edgeTessellationFactor(边缘镶嵌因子):索引0中的值提供贴片的u==0边缘的镶嵌因子;索引1中的值提供贴片的v==0边缘的镶嵌因子;并且索引2中的值提供贴片的w==0边缘的镶嵌因子。
丢弃贴片
本公开的一些实施方案设想了丢弃某些贴片。例如参考图8和图9,如果任何相关边缘镶嵌因子小于等于零(例如对应于浮点NaN值),则贴片可被丢弃。在一个实施方案中,镶嵌器(例如704)进行确定或丢弃贴片。在某些实施方案中,当贴片被丢弃时:不为该贴片生成新的基元;后镶嵌顶点功能不为该贴片运行;并且不为该贴片生成可见输出。需注意,负的内侧镶嵌因子可被箝位,从而在一些实施方案中其不导致贴片被丢弃。此外,在选择程序化实施方案中,负的内侧镶嵌因子被箝位的方式依赖于tessellationPartitionMode(镶嵌分割模式)。
在一个程序化实施方案中,如果镶嵌因子缩放被使能(例如MTLRenderPipelineDescriptor中的tessellationFactorScaleEnabled),则镶嵌器(例如704)首先将贴片的相关边缘和内侧镶嵌因子乘以指定的缩放系数。在一个实施方案中,对于四边形贴片,所有四个边缘镶嵌因子是相关的。在另一实施方案中,对于三角形贴片,只有前三个边缘镶嵌因子是相关的。
在现有系统上的具体实施
本文所述实施方案中的一者或多者可被认为是当前公知的图形开发环境和框架的修改型式。例如,本公开的多个实施方案可涉及Apple Metal编程环境和操作。此外,本公开的多个实施方案尤其旨在用于在适于DX11的硬件和系统上的具体实施。以下对实施方案的进一步描述以及具体实施细节常常通过详述具体实施示例和代码示例旨在说明构思。不意图限制到所示的细节。示例说明了关于具体实施诸如API的构思,并且还说明以上讨论的构思。
API
如上所述,本公开设想了使用程序接口供开发者操纵对本文所教导和提出的镶嵌流水线实施方案的使用。例如,镶嵌属性可由开发者利用应用接口来操控。在与Apple的Metal编程范式相关联的一些实施方案中,所述接口可与MTLRenderPipelineDescriptor相关联。API可被提供给开发者用于指示或控制以下中的一者或多者:
(i)镶嵌器(例如704)在对贴片进行镶嵌时使用的最大镶嵌因子(例如最大64并且默认为16);
(ii)指示镶嵌因子是否被缩放,其中在一些实施方案中,在镶嵌因子被箝位之前,缩放系数被应用并且贴片被挑拣。
(iii)指定用于从镶嵌因子缓冲器确定贴片的镶嵌因子的阶跃函数;
(iv)指定镶嵌器输出的三角形的绕序;
(v)指定镶嵌器用来推导用于对相应边缘进行子划分的区段的数量和间距的分割模式;
(vi)指定贴片类型或关于贴片的任何其他信息,诸如按贴片的数据和控制点;
(vii)指定对于镶嵌任何贴片或任何特定贴片所期望的任何镶嵌因子;
(viii)指定镶嵌相关功能;
(ix)指定后镶嵌顶点功能输入;
(x)指定与镶嵌流水线过程相关的变量;
(xi)查询结果、或者结果或部分结果的位置;
(xii)对镶嵌流水线的操作进行测试查询;以及
(xiii)提供用于片段着色后镶嵌操作的输入。
特定API具体实施示例
在与Apple的Metal编程范式相关联的一些实施方案中,特定具体实施示例可以如下:
后镶嵌顶点功能可被指定为MTLRenderPipelineDescriptor中的vertexFunction。
用于镶嵌的MTLRenderPipelineDescriptor属性
将以下新属性添加到MTLRenderPipelineDescriptor。然而应当指出,在一些示例中,如果顶点功能不是后镶嵌顶点功能,则所有以下镶嵌属性被忽略。
NSUInteger maxTessellationFactor指定镶嵌器在对一个或多个贴片进行镶嵌时使用的最大镶嵌因子。
最大镶嵌因子是64。默认值是16。
如果tessellationPartitionMode是MTLTessellationPartitionModePow2,则最大镶嵌因子必须是2的幂。
如果tessellationPartitionMode是MTLTessellationPartitionModeFractionalOdd或MTLTessellationPartitionModeFractionalEven,则最大镶嵌因子必须是偶数。
BOOL tessellationFactorScaleEnabled指示镶嵌因子是否被缩放。如果缩放被使能,则在执行贴片挑拣校验且贴片未被挑拣之后并且在镶嵌因子被箝位到maxTessellationFactor之前,缩放系数被应用于镶嵌因子。默认为否。
MTLTessellationFactorFormat tessellationFactorFormat描述在镶嵌因子缓冲器中指定的镶嵌因子的格式。
tessellationFactorFormat必须是以下值之一:
tessellationControlPointIndexType描述drawIndexedPatches API中controlPointIndexBuffer指定的控制点索引的尺寸。
tessellationControlPointIndexType必须是以下值之一:
对于drawIndexedPatches API,tessellationControlPointIndexType必须要么是tessellationControlPointIndexTypeUInt16,要么是tessellationControlPointIndexTypeUInt32。对于drawPatches API,tessellationControlPointIndexType必须是tessellationControlPointIndexTypeNone。
MTLTessellationFactorStepFunction tessellationFactorStepFunction指定用于从镶嵌因子缓冲器确定贴片的镶嵌因子的阶跃函数。默认值是MTLTessellationFactorStepFunctionConstant。
MTLWinding tessellationOutputWindingOrder指定镶嵌器输出的三角形的绕序。默认值是MTLWindingClockwise。
MTLTessellationPartitionMode tessellationPartitionMode指定镶嵌器用来推导用于对相应边缘进行子划分的区段的数量和间距的分割模式。tessellationPartitionMode是以下值之一:
默认值是MTLTessellationPartitionModePow2。(在以下描述中,max是MTLRenderPipelineDescriptor中指定的maxTessellationFactor。)
下面描述所支持的镶嵌分割模式的镶嵌因子范围:
MTLTessellationPartitionModePow2,范围=[1,max];
MTLTessellationPartitionModeInteger,范围=[1,max-1];并且
MTLTessellationPartitionModeFractionalEven,范围=[2,max].
如果tessellationPartitionMode是MTLTessellationPartitionModePow2,则浮点镶嵌等级首先被箝位到范围[1,max]。结果被舍入到最接近的整数m,其中m是2的幂,并且相应边缘被分成(u,v)空间中等长的m个区段。
如果tessellationPartitionMode是MTLTessellationPartitionModeInteger,则浮点镶嵌等级首先被箝位到范围[1,max]。结果被舍入到最接近的整数n,并且相应边缘被分成(u,v)空间中等长的n个区段。
如果tessellationPartitionMode是MTLTessellationPartitionModeFractionalEven,则镶嵌等级首先被箝位到范围[2,max],并然后舍入到最接近的偶整数n。如果tessellationPartitionMode是MTLTessellationPartitionModeFractionalOdd,则镶嵌等级被箝位到范围[1,max-1],并然后舍入到最接近的奇整数n。如果n为1,则边缘不被子划分。否则,相应边缘被分为等长的n-2个区段、以及通常比其他区段短的等长的另外两个区段。这另外两个区段的长度相对于其他区段单调地减小值n-f,其中f是被箝位浮点镶嵌等级。如果n-f为零,则这另外的区段具有与其他区段相等的长度。随着n-f接近2.0,所述另外的区段的相对长度接近零。这另外两个区段应当对称地放置在被子划分边缘的相对两侧。这两个区段的相对位置未限定,但必须对于具有相同值f的任何一对经子划分的边缘是相同的。
指定镶嵌因子
以下MTLRenderCommandEncoder API指定按贴片的镶嵌因子:
-(void)setTessellationFactorBuffer:(id<MTLBuffer>_Nullable)buffer
offset:(NSUInteger)offset
instanceStride:(NSUInteger)instanceStride
以下MTLRenderCommandEncoder API指定按贴片的镶嵌缩放系数:
-(void)setTessellationFactorScale:(float)scale
对于指定镶嵌因子,在一些实施方案中,offset(偏移)必须在4的倍数个字节中,并且缩放可在乘以镶嵌因子之前被转换成半精度浮点值。在多个实施方案中,缩放必须是正的合规的半精度浮点值,即既不<=0、不是非合规的,不是无穷的,也不是NaN。
在多个实施方案中,对于四边形贴片,镶嵌因子跨度为12字节,并且对于三角形贴片,镶嵌因子跨度为8字节。
MTLTessellationFactorStepFunction
MTLTessellationFactorStepFunction定义为:
如果阶跃函数为MTLTessellationFactorStepFunctionPerInstance和MTLTessellationFactorStepFunctionPerPatchAndPerInstance,则instanceStride必须为>0的值。否则,instanceStride必须为0。
如果stepFunction为MTLTessellationFactorStepFunctionConstant,则对于所有实例,drawPatches中所有贴片的镶嵌因子在镶嵌因子缓冲器中位于位置offset处。
如果stepFunction为MTLTessellationFactorStepFunctionPerPatch,则对于所有实例,drawPatches中贴片的镶嵌因子在镶嵌因子缓冲器中位于位置offset+(drawPatchIndex*镶嵌因子跨度)处。
如果stepFunction为MTLTessellationFactorStepFunctionPerInstance,则对于给定实例ID,drawPatches中所有贴片的镶嵌因子在镶嵌因子缓冲器中位于位置offset+(实例ID*instanceStride)处。
如果stepFunction为MTLTessellationFactorStepFunctionPerPatchAndPerInstance,则对于给定实例ID,drawPatches中贴片的镶嵌因子在镶嵌因子缓冲器中位于位置offset+(drawPatchIndex*镶嵌因子跨度+实例ID*instanceStride)处。(patchCount是对drawPatches的直接或间接变元。
指定贴片控制点和按贴片的数据
后镶嵌顶点功能可通过以下中任一者来读取贴片控制点和任何用户按贴片的数据:索引到作为变元利用贴片ID被传递给后镶嵌顶点功能的一个或多个缓冲器中;或者访问以[[stage_in]]限定符声明的作为变元直接传入到后镶嵌顶点功能的值。
当以[[stage_in]]限定符声明的作为变元直接传入时,贴片控制点数据和按贴片的数据被声明为用户限定的结构体中的元素。贴片控制点数据必须被声明为patch_control_point<T>模板化类型,其中T是用户定义的描述贴片控制点数据的结构体。该结构体中声明的所有其他元素描述按贴片的数据。利用[[stage_in]]限定符传递贴片数据就允许开发者将贴片数据的实际存储格式与后镶嵌顶点功能中声明的类型去耦合(类似于支持对规则顶点功能的按顶点数据输入)。
以[[stage_in]]限定符声明的对后镶嵌顶点功能的所有按贴片的输入必须利用[[attribute(index)]]指定属性位置。索引值是标识正被分配的贴片输入数据位置的无符号整数值。MTLVertexDescriptor对象用于配置存储在存储器中的贴片数据如何映射到着色器中声明的贴片数据。
在一些示例中,以下新的枚举被添加到MTLVertexStepFunction:
MTLVertexStepFunctionPerPatch
MTLVertexStepFunctionPerPatchControlPoint
如果阶跃函数是MTLVertexStepFunctionPerPatch,则着色器基于贴片的贴片索引取数据。
如果阶跃函数是MTLVertexStepFunctionPerPatchControlPoint,则着色器基于与贴片相关联的控制点索引取数据。
贴片控制点数据布局在MTLVertexDescriptor中以MTLVertexStepFunctionPerPatchControlPoint阶跃函数来描述。按贴片的数据布局在MTLVertexDescriptor中以MTLVertexStepFunctionPerPatch阶跃函数来描述。
MTLVertexStepFunctionConstant和MTLVertexStepFunctionPerInstance阶跃函数也可用于描述按贴片的或控制点数据。然而,MTLVertexStepFunctionPerVertex阶跃函数不能用于描述贴片控制点和按贴片的数据。
指定按线程的计算内核数据
应用开发者通常使用类似MTLVertexDescriptor结构来描述对DirectX/OpenGL顶点着色器的输入。MTLStageInputOutputDescriptor被引入MTLFeatureSet_OSX_GPUFamily1_v2中用于使能利用与MTLVertexDescriptor类似的描述符来在运行时为计算内核指定按线程的数据(诸如控制点或按贴片的数据)的实际格式。虽然旨在支持镶嵌因子的计算内核生成,但用于提供[[stage_in]]数据(即按线程的数据)的这个通用API方法可用于多个使用情形。API改变是:
(A)MTLStageInputOutputDescriptor被添加,其类似于MTLVertexDescriptor但具有以下不同:
-格式枚举名使用MTLAttributeFormat1而非MTLVertexFormat的前缀,因为这涉及内核数据,其并不必然是顶点。
-阶跃函数枚举是:
MTLStepFunctionConstant
值,直接用于取数据。
MTLStepFunctionThreadPositionInGridX
使用栅格中线程位置的x坐标作为取[[stage_in]]数据的索引或作为到[[stage_in]]索引缓冲器中的索引,其然后用于取数据。对于镶嵌计算内核,该阶跃函数可用于标识给定贴片中的控制点。
MTLStepFunctionThreadPositionInGridY
使用栅格中线程位置的y坐标作为取[[stage_in]]数据的索引或作为到[[stage_in]]索引缓冲器中的索引,其然后用于取数据。对于镶嵌计算内核,该阶跃函数可用作实例ID。在一些实施方案中,阶跃函数可被扩展以支持MTLStepFunctionGeneric。如果这个枚举被设定,则专门的MTLFunction描述阶跃函数。
-索引缓冲器类型,其是以下值之一:
MTLIndexTypeUInt16=0,
MTLIndexTypeUInt32=1。
索引缓冲器提供在读取计算内核中的[[stage_in]]数据时的间接等级。对于使用MTLStepFunctionThreadPositionInGridX或MTLStepFunctionThreadPositionInGridY的阶跃函数的元素,这个间接等级可用于读取控制点索引,控制点索引然后用于读取计算内核中被声明为[[stage_in]]的按线程的控制点数据。
(B)必须为每个维度指定偏移和实际最大尺寸。偏移用于计算用于读取[[stage_in]]数据的最终索引。需要每个维度的实际最大尺寸,因为(由线程组的数量和线程组尺寸指定的)被启动线程的总数可以比进行执行的实际尺寸更大。以下API调用用于指定计算编码器中的偏移和尺寸(类似于MTLRegion)。
setStageInGridOrigin:(MTLOrigin)origin
size:(MTLSize)size
为了确定用于为栅格中的给定线程取[[stage_in]]数据的索引,origin(原点)指定的值被加到栅格值或来自索引缓冲器的值(由栅格中的线程位置索引)中的线程位置。对于涉及每个维度的最大尺寸(由size(尺寸)给出)外的位置的线程,为[[stage_in]]数据返回的值是未限定的。
栅格原点和尺寸也可被声称为Metal着色语言中利用如下的属性限定符的对内核的变元:对于属性限定符[[grid_origin]],对应数据类型是ushort、ushort2、ushort3、uint、uint2或uint3;并且对于属性限定符[[grid_size]],对应数据类型是ushort、ushort2、ushort3、uint、uint2或uint3。在一些实施方案中,如果内核以[[stage_in]]限定符声称变元,则内核变元只能以这些属性来声明。
(C)指向MTLStageInputOutputDescriptor的指针现在是MTLComputePipelineDescriptor中的属性。
绘图镶嵌基元
为了渲染经镶嵌贴片的多个实例,可以贴片数据调用MTLRenderCommandEncoder中的以下drawPatches或drawIndexedPatches绘图调用。drawIndexedPatches调用(下面的第三和第四调用)支持使用索引的缓冲器来间接地标引贴片的控制点索引。如果顶点功能是后镶嵌顶点功能,则可以只调用来自MTLRenderCommandEncoder的drawPatches或drawIndexedPatches API来渲染基元。调用drawPrimitives或drawIndexedPrimitivesAPI导致验证层报告错误。如果顶点功能不是后镶嵌顶点功能,则调用来自MTLRenderCommandEncoder的drawPatches或drawIndexedPatches API导致验证层报告错误。
在一些实施方案中,可以没有对drawPatches或drawIndexedPatchesAPI中基元重新开始的支持。
-(void)drawPatches:(NSUInteger)numberOfPatchControlPoints
patchStart:(NSUInteger)patchStart
patchCount:(NSUInteger)patchCount
patchIndexBuffer:(id<MTLBuffer>_Nullable)patchIndexBuffer
patchIndexBufferOffset:(NSUInteger)patchIndexBufferOffset
instanceCount:(NSUInteger)instanceCount
baseInstance:(NSUInteger)baseInstance
-(void)drawPatches:(NSUInteger)numberOfPatchControlPoints
patchIndexBuffer:(id<MTLBuffer>_Nullable)patchIndexBuffer
patchIndexBufferOffset:(NSUInteger)patchIndexBufferOffset
indirectBuffer:(id<MTLBuffer>_Nonnull)indirectBuffer
indirectBufferOffset:(NSUInteger)indirectBufferOffset
-(void)drawIndexedPatches:(NSUInteger)numberOfPatchControlPoints
patchStart:(NSUInteger)patchStart
patchCount:(NSUInteger)patchCount
patchIndexBuffer:(id<MTLBuffer>_Nullable)patchIndexBuffer
patchIndexBufferOffset:(NSUInteger)patchIndexBufferOffset
controlPointIndexBuffer:
(id<MTLBuffer>_Nonnull)controlPointIndexBuffer
controlPointIndexBufferOffset:
(NSUInteger)controlPointIndexBufferOffset
instanceCount:(NSUInteger)instanceCount
baseInstance:(NSUInteger)baseInstance
-(void)drawIndexedPatches:(NSUInteger)numberOfPatchControlPoints
patchIndexBuffer:(id<MTLBuffer>_Nullable)patchIndexBuffer
patchIndexBufferOffset:(NSUInteger)patchIndexBufferOffset
controlPointIndexBuffer:
(id<MTLBuffer>_Nonnull)controlPointIndexBuffer
controlPointIndexBufferOffset:
(NSUInteger)controlPointIndexBufferOffset
indirectBuffer:(id<MTLBuffer>_Nonnull)indirectBuffer
indirectBufferOffset:(NSUInteger)indirectBufferOffset
对于所有绘图贴片API调用,按贴片的数据和贴片控制点阵列被组织用于在连续阵列元素中渲染,从baseInstance开始。被渲染贴片实例的数量由instanceCount指定。numberOfPatchControlPoints是指贴片中控制点的数量,其必须是0和32之间的值(包括端值在内)。patchStart和patchCount变元分别是指绘图调用的每个实例中的贴片起始索引和贴片数量。
上面列出的第二绘图贴片调用和第四绘图贴片调用支持使用MTLBuffer(indirectBuffer),其间接地指定在定义如下的MTLDrawPatchIndirectArguments结构的相应字段中的绘图调用参数:
为了渲染贴片数据,drawPatches API取按贴片的数据和控制点数据。对于一个或多个缓冲器中一个或多个网格的所有贴片,贴片数据通常一起存储。内核然后运行以生成依赖于视图的镶嵌因子。在生成镶嵌因子时,只希望为不被丢弃的贴片生成因子,这意味着要被镶嵌和渲染的贴片的贴片ID可能不连续。
[patchStart,patchStart+patchCount-1]范围中的缓冲器索引(drawPatchIndex)用于标引数据。在用于取贴片控制点和按贴片的数据的贴片索引不连续的情况下,drawPatchIndex可标引patchIndexBuffer。patchIndexBuffer的每个元素包含32位的patchIndex值,其标引控制点和按贴片的数据。从patchIndexBuffer取的patchIndex在以下位置:(drawPatchIndex*4)+patchIndexBufferOffset。
贴片的控制点索引计算如下:
[patchIndex*numberOfPatchControlPoints,
((patchIndex+1)*numberOfPatchControlPoints)–1]
patchIndexBuffer还使得用于读取按贴片的和贴片控制点数据的patchIndex能够与用于读取贴片镶嵌因子的索引不同。对于固定功能镶嵌器,drawPatchIndex直接被用作为索引来取贴片镶嵌因子。
如果patchIndexBuffer为空,则drawPatchIndex和patchIndex为相同值。
如果控制点跨贴片共享或者贴片控制点数据不连续,则使用drawIndexedPatchesAPI。patchIndex标引指定的controlPointIndexBuffer,其包含贴片的控制点索引。(tessellationControlPointIndexType描述controlPointIndexBuffer中控制点索引的尺寸,并且必须要么是tessellationControlPointIndexTypeUInt16要么是tessellationControlPointIndexTypeUInt32。)controlPointIndexBuffer中第一控制点索引的实际位置被计算为:
controlPointIndexBufferOffset+
(patchIndex*numberOfPatchControlPoints
*controlPointIndexType==UInt16?2:4)
多个(numberOfPatchControlPoints)控制点索引必须连续地存储在controlPointIndexBuffer中,开始于第一控制点索引的位置。
用于将DX11样式镶嵌着色器移植到Apple Metal的具体实施示例
在DX11中,为贴片的每个控制点执行HLSL顶点着色器。HLSL外壳着色器由两个功能指定:一个功能为贴片的每个控制点执行,而另一个功能按贴片执行。顶点着色器的输出被输入到构成外壳着色器的这两个功能。以下是非常简单的HLSL顶点和外壳着色器示例,其在后面被翻译成Metal着色语言。
struct VertexIn
struct VertexOut
VertexOut VS(VertexIn vin)
struct HullOut
struct PatchTess
上述HLSL顶点和外壳着色器可被翻译成Metal功能,并且可创建调用这些Metal功能的计算内核,其执行这些着色器功能作为单个内核。在计算内核中按线程调用所翻译的顶点和控制点外壳功能,之后是线程组屏障,并然后按贴片的外壳功能被线程组中的线程子组执行。能够在内核中直接调用经翻译的顶点和外壳功能就使开发者非常容易将其顶点和外壳着色器从DirectX或OpenGL移植到Metal。HLSL顶点和外壳着色器可被翻译成以下Metal功能:
struct VertexIn
struct VertexOut
struct HullOut
struct PatchTess
调用这些顶点和外壳功能的计算内核可以是:
在PatchKernel中,MTLStageInputOutputDescriptor对象可用于描述用于输入VertexIn结构体的[[stage_in]]数据:
MTLStageInputOutputDescriptor*dataDesc=[[MTLStageInputOutputDescriptor alloc]init];
dataDesc.attributes[0].format=MTLDataFormatFloat3;
dataDesc.attributes[0].bufferIndex=0;
dataDesc.attributes[0].offset=0;
dataDesc.attributes[1].format=MTLDataFormatFloat3;
dataDesc.attributes[1].bufferIndex=0;
dataDesc.attributes[1].offset=3*sizeof(float);//12字节
dataDesc.attributes[2].format=MTLDataFormatFloat3;
dataDesc.attributes[2].bufferIndex=0;
dataDesc.attributes[2].offset=6*sizeof(float);//24字节
dataDesc.attributes[3].format=MTLDataFormatFloat2;
dataDesc.attributes[3].bufferIndex=0;
dataDesc.attributes[3].offset=9*sizeof(float);//36字节
dataDesc.layouts[0].stride=11*sizeof(float);//44字节
dataDesc.layouts[0].stepFunction=
MTLStepFunctionThreadPositionInGridX;
dataDesc.indexType=MTLIndexTypeUint16;
应当理解,以上描述旨在是示例性的而非限制性的。已呈现材料以使得本领域的任何技术人员能够作出和使用受权利要求保护的发明,并在特定实施方案的上下文中提供该材料,其变化对于本领域的技术人员而言将是显而易见的(例如,可彼此结合使用所公开的实施方案中的多个实施方案)。此外应当理解,本文所标识的操作中的一些操作可以不同的顺序来执行。因此应当参考所附权利要求以及赋予此类权利要求的等同形式的完整范围来确定本发明的范围。在所附权利要求中,术语“包括(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的通俗的英语等同形式。
Claims (20)
1.一种主机设备上的方法,包括:
接收关于第一贴片的信息;
基于关于所述第一贴片的所述信息的至少第一部分在第一GPU上执行第一计算内核以生成与所述第一贴片相关联的第一镶嵌因子;
将第一镶嵌因子存储在第一存储器中;
将所述第一镶嵌因子从所述第一存储器读取到镶嵌器中;
由所述镶嵌器并且基于所述第一镶嵌因子生成第一标准域;
基于所述第一标准域以及关于所述第一贴片的所述信息的至少第二部分执行顶点着色器以生成第一顶点信息;
基于第一顶点信息生成第一可显示内容并将第一可显示内容存储在缓冲器中;
接收关于与所述第一贴片不同的第二贴片的信息,关于所述第二贴片的所述信息包括与所述第二贴片相关联的第二镶嵌因子,其中所述第二镶嵌因子不依赖于主机设备上计算内核的执行;
利用所述镶嵌器基于所述第二镶嵌因子生成第二标准域;
基于所述第二标准域以及关于所述第二贴片的所述信息的至少一部分执行所述顶点着色器以生成第二顶点信息;
基于第二顶点信息生成第二可显示内容并将所述第二可显示内容存储在所述缓冲器中;以及
将所述第二可显示内容和所述第一可显示内容发送给显示设备以用于显示。
2.根据权利要求1所述的方法,其中关于第一贴片的所述信息是控制点信息。
3.根据权利要求1所述的方法,其中关于所述第一贴片的所述信息的所述第一部分和关于所述第一贴片的所述信息的所述第二部分包括至少一些相同信息。
4.根据权利要求1所述的方法,其中关于第一贴片的所述信息由所述第一计算内核从所述第一存储器接收。
5.根据权利要求1所述的方法,其中所述第二镶嵌因子由所述镶嵌器直接从所述第一存储器接收。
6.根据权利要求5所述的方法,其中所述镶嵌器包括专用硬件。
7.根据权利要求1所述的方法,其中所述第一可显示内容和所述第二可显示内容是同一帧的部分。
8.一种系统,包括存储器、显示设备和一个或多个可编程控制设备,所述一个或多个可编程控制设备能够操作以与所述存储器和显示设备交互并执行包括如下的操作:
接收关于第一贴片的信息;
基于关于所述第一贴片的所述信息的至少第一部分在第一GPU上执行第一计算内核以生成与所述第一贴片相关联的第一镶嵌因子;
将第一镶嵌因子存储在第一存储器中;
将所述第一镶嵌因子从所述第一存储器读取到镶嵌器中;
由所述镶嵌器并且基于所述第一镶嵌因子生成第一标准域;
基于所述第一标准域以及关于所述第一贴片的所述信息的至少第二部分执行顶点着色器以生成第一顶点信息;
基于第一顶点信息生成第一可显示内容并将第一可显示内容存储在缓冲器中;
接收关于与所述第一贴片不同的第二贴片的信息,关于所述第二贴片的所述信息包括与所述第二贴片相关联的第二镶嵌因子,其中所述第二镶嵌因子不依赖于主机设备上计算内核的执行;
利用所述镶嵌器基于所述第二镶嵌因子生成第二标准域;
基于所述第二标准域以及关于所述第二贴片的所述信息的至少一部分执行所述顶点着色器以生成第二顶点信息;
基于第二顶点信息生成第二可显示内容并将所述第二可显示内容存储在所述缓冲器中;以及
将所述第二可显示内容和所述第一可显示内容发送给显示设备以用于显示。
9.根据权利要求8所述的系统,其中关于第一贴片的所述信息是控制点信息。
10.根据权利要求8所述的系统,其中关于所述第一贴片的所述信息的所述第一部分和关于所述第一贴片的所述信息的所述第二部分包括至少一些相同信息。
11.根据权利要求8所述的系统,其中关于第一贴片的所述信息由所述第一计算内核从所述第一存储器接收。
12.根据权利要求8所述的系统,其中所述第二镶嵌因子由所述镶嵌器直接从所述第一存储器接收。
13.根据权利要求8所述的系统,其中所述镶嵌器包括专用硬件。
14.根据权利要求8所述的系统,其中所述第一可显示内容和所述第二可显示内容是同一帧的部分。
15.一种非暂态程序存储设备,所述非暂态程序存储设备能够由处理器读取并且包括存储在其上的指令,以使得一个或多个处理器:
接收关于第一贴片的信息;
基于关于所述第一贴片的所述信息的至少第一部分在第一GPU上执行第一计算内核以生成与所述第一贴片相关联的第一镶嵌因子;
将第一镶嵌因子存储在第一存储器中;
将所述第一镶嵌因子从所述第一存储器读取到镶嵌器中;
由所述镶嵌器基于所述第一镶嵌因子生成第一标准域;
基于所述第一标准域以及关于所述第一贴片的所述信息的至少第二部分执行顶点着色器以生成第一顶点信息;
基于第一顶点信息生成第一可显示内容并将第一可显示内容存储在缓冲器中;
接收关于与所述第一贴片不同的第二贴片的信息,关于所述第二贴片的所述信息包括与所述第二贴片相关联的第二镶嵌因子,其中所述第二镶嵌因子不依赖于所述主机设备上计算内核的执行;
使所述镶嵌器基于所述第二镶嵌因子生成第二标准域;
基于所述第二标准域以及关于所述第二贴片的所述信息的至少一部分使所述顶点着色器生成第二顶点信息;
基于第二顶点信息生成第二可显示内容并将第二可显示内容存储在所述缓冲器中;以及
将第二可显示内容和第一可显示内容发送给显示设备以用于显示。
16.根据权利要求15所述的非暂态程序存储设备,其中关于第一贴片的所述信息是控制点信息。
17.根据权利要求15所述的非暂态程序存储设备,其中关于所述第一贴片的所述信息的所述第一部分和关于所述第一贴片的所述信息的所述第二部分包括至少一些相同信息。
18.根据权利要求15所述的非暂态程序存储设备,其中所述一个或多个处理器是一个或多个GPU、或者一个或多个GPU与一个或多个CPU的组合。
19.根据权利要求15所述的非暂态程序存储设备,其中所述镶嵌器包括专用硬件。
20.根据权利要求15所述的非暂态程序存储设备,其中所述第一可显示内容和所述第二可显示内容是同一帧的部分。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662349023P | 2016-06-12 | 2016-06-12 | |
US62/349,023 | 2016-06-12 | ||
US15/275,275 US20170358132A1 (en) | 2016-06-12 | 2016-09-23 | System And Method For Tessellation In An Improved Graphics Pipeline |
US15/275,275 | 2016-09-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107492065A true CN107492065A (zh) | 2017-12-19 |
CN107492065B CN107492065B (zh) | 2021-02-02 |
Family
ID=58779011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710425314.XA Active CN107492065B (zh) | 2016-06-12 | 2017-06-08 | 用于经改进图形流水线中的镶嵌的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20170358132A1 (zh) |
EP (1) | EP3255612B1 (zh) |
CN (1) | CN107492065B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110782506A (zh) * | 2019-11-21 | 2020-02-11 | 大连理工大学 | 一种利用红外相机和深度相机融合构建栅格地图的方法 |
CN114090101A (zh) * | 2020-08-05 | 2022-02-25 | 宝能汽车集团有限公司 | 开机动画的处理方法、装置、车辆、设备和存储介质 |
TWI765574B (zh) * | 2020-02-13 | 2022-05-21 | 聯發科技股份有限公司 | 圖形系統和相應地圖形處理方法 |
US11915349B1 (en) * | 2021-03-18 | 2024-02-27 | Apple Inc. | Extrusion technique for curve rendering |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101771242B1 (ko) * | 2014-08-29 | 2017-08-24 | 서강대학교산학협력단 | 스마트 기기를 이용한 초음파 신호의 고속 병렬 처리 방법 |
KR102433101B1 (ko) * | 2017-11-06 | 2022-08-18 | 에스케이하이닉스 주식회사 | 반도체 장치 및 이를 포함하는 반도체 시스템 |
CN115379185B (zh) * | 2018-08-09 | 2024-04-02 | 辉达公司 | 使用可变速率着色的运动自适应渲染 |
US11010862B1 (en) * | 2019-11-14 | 2021-05-18 | Advanced Micro Devices, Inc. | Reduced bandwidth tessellation factors |
US11037358B1 (en) * | 2020-01-03 | 2021-06-15 | Qualcomm Incorporated | Methods and apparatus for reducing memory bandwidth in multi-pass tessellation |
US11625848B2 (en) * | 2020-01-30 | 2023-04-11 | Unity Technologies Sf | Apparatus for multi-angle screen coverage analysis |
US11055896B1 (en) | 2020-02-25 | 2021-07-06 | Parallels International Gmbh | Hardware-assisted emulation of graphics pipeline |
US11908079B2 (en) * | 2022-04-08 | 2024-02-20 | Qualcomm Incorporated | Variable rate tessellation |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1957377A (zh) * | 2004-05-24 | 2007-05-02 | 皇家飞利浦电子股份有限公司 | 基于贴片的图形渲染 |
CN101714247A (zh) * | 2008-09-29 | 2010-05-26 | 辉达公司 | 单通道镶嵌 |
CN103761770A (zh) * | 2009-04-29 | 2014-04-30 | 英特尔公司 | 图像形成技术 |
CN104282035A (zh) * | 2013-07-09 | 2015-01-14 | 三星电子株式会社 | 用于对每点指派镶嵌因子的镶嵌方法和执行该方法的设备 |
CN104541305A (zh) * | 2012-08-09 | 2015-04-22 | 高通股份有限公司 | Gpu加速的路径再现 |
US20150145863A1 (en) * | 2012-01-10 | 2015-05-28 | Thomson Licensing | Method for rendering an image synthesis and corresponding device |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7006088B1 (en) * | 2001-01-30 | 2006-02-28 | California Institute Of Technology | Hybrid meshes |
US20030117398A1 (en) * | 2001-12-21 | 2003-06-26 | Hubrecht Alain Yves Nestor | Systems and methods for rendering frames of complex virtual environments |
US20060132488A1 (en) * | 2004-12-17 | 2006-06-22 | Electronics And Telecommunications Research Institute | Apparatus and method for representing multi-level LOD three-dimensional image |
US8286196B2 (en) * | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US20100091018A1 (en) * | 2008-07-11 | 2010-04-15 | Advanced Micro Devices, Inc. | Rendering Detailed Animated Three Dimensional Characters with Coarse Mesh Instancing and Determining Tesselation Levels for Varying Character Crowd Density |
US8281169B2 (en) * | 2008-08-27 | 2012-10-02 | Wireless Silicon Group, Inc. | Method and system for power management for a handheld mobile electronic device executing-in-place an application kernel from execute-in-place non-volatile memory (XIP NVM) |
US10013731B2 (en) * | 2011-06-30 | 2018-07-03 | Intel Corporation | Maximizing parallel processing in graphics processors |
US8707314B2 (en) * | 2011-12-16 | 2014-04-22 | Advanced Micro Devices, Inc. | Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations |
KR20160030426A (ko) * | 2014-09-10 | 2016-03-18 | 삼성전자주식회사 | 서브디바이더를 포함하는 그래픽스 프로세싱 유닛과 이를 포함하는 장치 |
US10134171B2 (en) * | 2014-09-29 | 2018-11-20 | Arm Limited | Graphics processing systems |
KR102313020B1 (ko) * | 2014-11-27 | 2021-10-15 | 삼성전자주식회사 | 그래픽스 프로세싱 유닛과 이를 포함하는 장치 |
GB2533444B (en) * | 2015-06-05 | 2017-08-16 | Imagination Tech Ltd | Tessellation method |
-
2016
- 2016-09-23 US US15/275,275 patent/US20170358132A1/en not_active Abandoned
-
2017
- 2017-05-29 EP EP17173225.8A patent/EP3255612B1/en active Active
- 2017-06-08 CN CN201710425314.XA patent/CN107492065B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1957377A (zh) * | 2004-05-24 | 2007-05-02 | 皇家飞利浦电子股份有限公司 | 基于贴片的图形渲染 |
CN101714247A (zh) * | 2008-09-29 | 2010-05-26 | 辉达公司 | 单通道镶嵌 |
CN103761770A (zh) * | 2009-04-29 | 2014-04-30 | 英特尔公司 | 图像形成技术 |
US20150145863A1 (en) * | 2012-01-10 | 2015-05-28 | Thomson Licensing | Method for rendering an image synthesis and corresponding device |
CN104541305A (zh) * | 2012-08-09 | 2015-04-22 | 高通股份有限公司 | Gpu加速的路径再现 |
CN104282035A (zh) * | 2013-07-09 | 2015-01-14 | 三星电子株式会社 | 用于对每点指派镶嵌因子的镶嵌方法和执行该方法的设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110782506A (zh) * | 2019-11-21 | 2020-02-11 | 大连理工大学 | 一种利用红外相机和深度相机融合构建栅格地图的方法 |
TWI765574B (zh) * | 2020-02-13 | 2022-05-21 | 聯發科技股份有限公司 | 圖形系統和相應地圖形處理方法 |
CN114090101A (zh) * | 2020-08-05 | 2022-02-25 | 宝能汽车集团有限公司 | 开机动画的处理方法、装置、车辆、设备和存储介质 |
US11915349B1 (en) * | 2021-03-18 | 2024-02-27 | Apple Inc. | Extrusion technique for curve rendering |
Also Published As
Publication number | Publication date |
---|---|
CN107492065B (zh) | 2021-02-02 |
EP3255612A1 (en) | 2017-12-13 |
EP3255612B1 (en) | 2020-12-09 |
US20170358132A1 (en) | 2017-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107492065A (zh) | 用于经改进图形流水线中的镶嵌的系统和方法 | |
US7659901B2 (en) | Application program interface for programmable graphics pipeline | |
CN110023962B (zh) | 人类体验到机器人和其他自主机器的高效传递 | |
EP1594091B1 (en) | System and method for providing an enhanced graphics pipeline | |
US20190147296A1 (en) | Creating an image utilizing a map representing different classes of pixels | |
US7671862B1 (en) | Systems and methods for providing an enhanced graphics pipeline | |
CN110176054A (zh) | 用于训练神经网络模型的合成图像的生成 | |
CN108694080A (zh) | 高效线程组调度 | |
CN113892116A (zh) | 用于噪声图像超分辨的自适应深度学习模型 | |
CN108804205A (zh) | 原子操作的智能线程分派和向量化 | |
CN110458905A (zh) | 用于层级自适应曲面细分的设备和方法 | |
CN109478310A (zh) | 在计算环境中使用纹素着色器的多分辨率延迟着色 | |
CN107251098A (zh) | 使用动态三维形状促进真实对象的真三维虚拟表示 | |
CN107743636A (zh) | 用于高效实时渲染预先不知道的图形的图形引擎和环境 | |
CN109564695A (zh) | 用于高效3d图形流水线的装置和方法 | |
CN109564700A (zh) | 用于取决于纹理的丢弃操作的分级式Z剔除(HiZ)优化 | |
KR20090024178A (ko) | 자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법 | |
CN110956687A (zh) | 用于光线追踪重度实例化场景的跨实例从前到后遍历的装置和方法 | |
CN109643395B (zh) | 自适应窗口机制 | |
US20190362461A1 (en) | Multi-object, three-dimensional modeling and model selection | |
CN108986013B (zh) | 用于在图形处理器上执行任务的方法和程序存储设备 | |
CN110326021A (zh) | 用于图形处理器上的加速计算的执行单元共享混合技术 | |
US20220012536A1 (en) | Creating an image utilizing a map representing different classes of pixels | |
CN109690630A (zh) | 组合的世界空间流水线着色器级 | |
CN108475441A (zh) | 光线追踪期间的详细级别选择 |
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 |