CN102077251B - 着色器接口 - Google Patents

着色器接口 Download PDF

Info

Publication number
CN102077251B
CN102077251B CN 200980124880 CN200980124880A CN102077251B CN 102077251 B CN102077251 B CN 102077251B CN 200980124880 CN200980124880 CN 200980124880 CN 200980124880 A CN200980124880 A CN 200980124880A CN 102077251 B CN102077251 B CN 102077251B
Authority
CN
Grant status
Grant
Patent type
Prior art keywords
shader
interfaces
shader interfaces
Prior art date
Application number
CN 200980124880
Other languages
English (en)
Other versions
CN102077251A (zh )
Inventor
M·V·奥内珀
C·佩普尔
A·L·布利斯
J·L·拉普
M·M·莱西
Original Assignee
微软公司
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
Grant date

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; 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; CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Abstract

本文描述了处理器对用于着色器的存储器寄存器的分配。对于每一着色器,寄存器基于着色器的复杂度水平来分配。较简单的着色器实例限于较小数量的存储器寄存器。较复杂的着色器实例被分配较多的寄存器。为此,开发员的高级着色(HLSL)语言包括稍后可由复杂或简单版本的着色器替换的着色器的模板类。HLSL被转换成可用于光栅化计算设备上的像素的字节代码。

Description

着色器接口

[0001] 背景

[0002] 如今的图形处理单元(GPU)主存要在计算机屏幕上生成高质量图形所需的所有计算,从而让计算机设备的中央处理单元(CPU)可用于其他任务。具体地,GPU通过处理多个被称为“着色器”的程序来在计算机屏幕上再现图形。简言之,着色器是执行用于再现二维(2D)或三维(3D)图形的操作的专用计算机程序。在现代GPU中,真实的场景是通过用由着色器控制的各种虚拟材料再现几何形状来生成。这些材料在着色器程序代码中表示,着色器程序代码处理各种输入(包括纹理地图、光位置和其他数据)来生成视觉结果。通过使用着色器,开发员可通过结合不同的顶点着色、图元着色和像素着色来实质上控制任何图形或图形效果。

[0003] 当前用于实时地再现复杂的3D图形场景的方法包括结合自定义逻辑单元支持并行体系结构的处理器通过将开销分布在多个并行单元上来隐藏等待时间。在提供了对如点、线段、或三角形等线性图元集合的高级3D描述时,围绕将该集合转换或光栅化为投影的像素表示的图元光栅化流水线来设计所使用的流水线。在现有3D硬件技术中,被称为“着色器”的小程序用于定义再现算法的某些阶段的操作,如变换图元的顶点或计算屏幕上单个像素的颜色。着色器定义要在大型并行执行批中执行的、常常跨在图形处理单元(GPU)上的许多专用处理器分布的少量工作。

[0004] 着色器的创建通过被设计成可以硬件体系结构可用为目标的高度专用编程语言来完成,并且等效编译器可处理代码并将其简化为硬件和相关联的设备驱动程序可使用的指令。开发员使用这种技术以便将再现流水线定制为仅是特定应用程序所需的行为。例如,如果开发员正在创建执行对非常复杂的主题的非照片般逼真的3D再现的应用程序时,开发员可将着色器优化成非常简单以便最大化场景的复杂度。相反,如果开发员希望将非常高保真度的材料属性和光照应用于较不复杂的场景,则开发员可创建高度定制化的着色器来创建可能非常复杂的非常真实的效果。此外,着色器被编译成设备驱动程序映射其以供硬件运行的抽象二进制形式。

[0005] 为了说明这点,考虑其中人物暴露于多个光源的游戏场景。光源中的一个可以是简单地来自夜晚的月亮的环境光。另一个光源可以是从沿着街道的灯柱延伸的。有了来自月亮的第一光源,可将着色器编写成控制从月亮发射的光。在这种情况下,光是恒定的且只需要由简单的程序来表示以将光分散到整个场景中。然而,灯柱可能较复杂。有了灯柱,光可被配置成仅在特定方向上发光;然而,来自灯柱的光可能无法绕过转角。因此,被编写成控制来自灯柱的光的着色器可能需要比被编写成控制来自月亮的光的着色器更复杂的计算。在任一场景中,GPU必须根据来自每一着色器的底层计算来光栅化像素。

[0006] GPU的常见体系结构通过使系统上的资源变得灵活来提供场景复杂度和着色器复杂度之间的折衷。为了执行,着色器通常需要处理单元、着色器实例的数据、全局资源(例如,纹理图像)、用于执行计算的中间寄存器库和一组输出寄存器。对于简单着色器一一意味着着色器需要相对较少的寄存器来计算,可同时运行多得多的着色器,从而导致底层应用程序或游戏得到较高的帧速率,因为可以并行地完成更多的工作。对于较复杂的着色器一意味着着色器需要较多寄存器来计算,可并行地执行较复杂的着色器的较少实例,因为正在使用较多的寄存器。换言之,对寄存器的分配对可并行地处理的着色器的数量具有直接决定权。因为再现图形所需的时间取决于着色器的并行处理,所以尽可能多地处理着色器是有益的,且因此对寄存器的分配对于性能而言是关键的。

[0007] 概述

[0008] 提供本概述是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识所要求保护的主题的关键特征或本质特征,也不旨在用于帮助确定所要求保护的主题的范围。

[0009] 本发明的一个方面允许单个着色器具有改变其中的复杂度的替换路径。在这一方面,按照允许高效的寄存器分配的方式提供了对通过着色器的特定路径的选择。存储器寄存器基于着色器路径或实例的复杂度水平来分配。在一个实施例中,着色器实例是着色器开发员所开发的着色器程序或其部分。较简单的着色器路径或实例可限于较少数量的存储器寄存器。较复杂的着色器路径或实例可被分配较多的寄存器。本发明的另一方面涉及被配置成按此方式分配存储器寄存器的GPU。

[0010] 若干附图的简述

[0011] 下面参考附图详细描述本发明,附图中:

[0012]图1是供在实现本发明的一实施例时使用的示例性操作环境的框图;

[0013] 图2是示出根据本发明的一实施例的对计算设备的存储器寄存器的分配的示图;以及

[0014] 图3是根据本发明的一实施例的用于基于着色器复杂度来分配寄存器的流程图。

[0015] 详细描述

[0016] 用具体细节呈现此处所描述的主题以满足法定要求。然而,此处的描述并非旨在限制本专利的范围。相反,可以设想,所要求保护的主题还可结合其它当前或未来技术按照其它方式来具体化,以包括不同的步骤或类似于本文中所描述的步骤的步骤组合。此外,尽管术语“框”可在此处用于指示所采用的方法的不同元素,但该术语不应被解释为暗示此处公开的各个步骤之中或之间的任何特定顺序。

[0017] 此外,在本说明书全文中使用各种技术术语。这些术语的定义可以在H.Newton编写的Newton' s Telecom Dictionary (《牛顿电信词典》)(2005年第21版)中找到。这些定义旨在提供对本发明中所公开的的想法的更清楚的理解但不旨在限制本发明的范围。这些定义和术语应该在允许任何在上述参考文献中所提供的词的含义的意义上宽泛地和不受限制地解释。

[0018] 本发明可一般地被描述为用于提供动态代码联接来基于着色器的复杂度水平最优地分配用于着色器的寄存器的一种或多种系统、方法和计算机存储介质。在一个实施例中,开发员可创建其自己的着色器类并且基于复杂度将寄存器分配给每一着色器。较简单的着色器被分配较少的寄存器,而复杂的着色器被分配附加的寄存器。

[0019] 如本领域技术人员可以理解的,本发明的各实施例可尤其被具体化为:在一种或多种有形计算机可读介质上体现的方法、系统或计算机程序产品。因此,这些实施例可采用硬件实施例、软件实施例或者组合软件和硬件的实施例的形式。

[0020] 动态代码绑定提供了用于从函数的消费者中抽象函数的实现的一种机制,这种机制通过提供函数调用和实现之间的间接水平来提供。通常,这种间接通过首先查看虚拟函数表来找到要执行的函数的位置来执行。在执行应用程序时,用函数实现的位置来填充先前为空的表(“链接”的实际动作),由此允许应用程序实际按需执行函数。在一个实施例中,提供了减少专用着色器的排列的数量同时仍然提供跨抽象边界的全局优化的子集动态联接。

[0021] 作为向每一抽象函数提供单个编译的实现的替代,实施例按照这样的方式来生成编译的代码:即编译对着色器的特定实例的每一次使用,就像是代码中内联的一样,并随后将其存储在按函数类型和调用位置排列的表中。理解以下是重要的:此处描述的各实施例与常规联接的不同之处在于:在运行时不使用调用约定。相反,每一次应该调用函数时,发出函数的版本来匹配调用点的寄存器状态和其他状态。因为为着色器代码中调用函数的每一位置发出函数的新版本,所以在内联时使用的所有优化都适用,除了该函数代码必须在功能上与主着色器代码保持分开之外。因为此处描述的各实施例与“真实”联接有所区别,所以此处描述的各实施例所生成的代码量可能相当大。在多个调用点之间不发生代码共享。如果代码大于代码高速缓存,则不隐藏源自高速缓存未命中的等待时间的惩罚。

[0022] 此处描述的某些实施例使用可选内联。可选内联允许系统生成不仅接近于最优指令使用而且为给定任务的每一调用使用最少所需寄存器的着色器实例。在该实施例中,特定着色器调用所需的寄存器的总数可由设备驱动程序快速地计算并相应地进行分配。这阻止了非常复杂的计算影响寄存器使用,除非计算实际上正在执行。

[0023] 为了维护优化,各实施例被配置成每调用点发出每个所用方法的不同版本,如同该方法是内联的一样以允许跨方法调用边界的优化。这具有空间的折衷,并且不像标准联接只为每一方法创建一个编译的版本,此处描述的各实施例创建许多版本,潜在可能导致较大的二进制文件。

[0024] 此处描述的各实施例一般参考Windows®操作系统(OS)的各个版本中包括的Direct3D API。各实施例不限于Direct3D API。本领域技术人员将理解,不同OS中的各种API提供与此处描述的调用和例程类似的功能。然而,为了清楚起见,此处参考Direct3D。

[0025] 在继续下一步之前,应该定义若干关键定义。虽然以下定义应该帮助读者理解此处描述的各实施例,但这些定义仅仅出于解释目的而提供。

[0026] “图元”是用于描述形状的基本单元。在计算机图形中,三角形通常被认为是基本图元,因为所有可能的2D和3D形状都可由三角形组成。如本领域技术人员将理解的,在再现图形时可替换地将其他形状用作图元。

[0027] “着色器”是执行再现计算的某一方面的小型专用计算机程序。着色器负责在典型再现流水线中的多个主要方面。这些方面特别地包括,顶点着色、图元(或几何)着色和像素着色。本领域技术人员将理解,顶点着色指的是确定图元的顶点的位置和定向——例如,将2D中的三角形的顶点放置在何处,从而使得该三角形表现为3D。图元着色描述用于单个图元的表面操作。而像素着色基于所再现的图元来着色每一像素,以便将图元绘制到屏幕。

[0028] 可以开发或编程着色器来处理实质上游戏体验的任何方面。例如,可以编写着色器来基于人物的颜色、时间、光照或其他相关变量来控制人物的皮肤的光反射。如先前所描述的,某些着色器相对简单;而其他的可能需要较复杂的计算。在某些实施例中,简单着色器可能需要与复杂着色器相比更少的存储器寄存器来处理。[0029] “光栅化器”是获取由诸如线、点和三角形等高阶图元组成的图像并将图像转换成光栅图像(即,像素)以供在视频显示器上输出的组件。光栅图像是带有颜色的图元的位图表示。在一个实施例中,光栅化器是被配置成根据着色器所产生的图元来对像素着色的由GPU执行的软件。

[0030] Direct3D是Windows®中提供的用于再现2D和3D场景的应用程序编程接口(API)。Direct 3D包括带有可编程阶段的图元光栅化器,其允许开发员在Windows®平台内将定制的程序加载到GPU上以便进行再现。当前正在使用多个版本的Direct3D,并因此应该为本领域技术人员所理解。

[0031] 高级着色语言(HLSL)是出于开发着色器目的而设计的编程语言(例如,C、C++、C#、Java等)的变体。具体地,开发员用HLSL对着色器进行编程。在操作上,HLSL被编译成与图形应用程序联用的中间语言(IL)。

[0032] IL是着色器阶段应该执行的操作的低级的基于指令的二进制表示。其用作编译器和图形硬件的本机指令集的中间优化步骤。因此,IL将由开发员通过使用HLSL指定的指令转换成图形硬件(即GPU)为了再现图形所需的字节代码。

[0033] 即时(JIT)指的是对着色器IL执行的用于将着色器转换成图形硬件的本机指令集的快速处理编译。JIT简单地指代在编程和处理中动作何时发生的时间点。本领域技术人员将理解,JIT编译如何在诸如Python和C#等其他编程语言中工作。

[0034] 在一个实施例中,本发明采用包括其上包含计算机可使用指令的一个或多个计算机可读介质的计算机程序产品的形式。计算机可读介质包括易失性和非易失性介质以及可移动和不可移动介质。作为示例而非限制,计算机可读介质包括计算机存储介质。计算机存储介质,即机器可读介质,包括以用于存储信息的任何方法或技术来实现的介质。

[0035] 存储的信息的示例包括计算机可使用指令、数据结构、程序模块以及其它数据表示。计算机存储介质示例包括,但不限于,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、独立于不同的存储介质或者与之相结合来使用的闪存,这些不同的存储介质诸如例如,紧致盘只读存储器(CD-ROM)、数字多功能盘(DVD)、全息介质或其他光盘存储、磁带盒、磁带、磁盘存储以及其他磁存储设备。这些存储器组件可瞬时、临时或永久地存储数据。

[0036] 在简要描述了此处描述的各实施例的概览后,以下描述一示例性计算设备。最初具体参考图1,示出了用于实现本发明的示例性操作环境,并将其笼统指定为计算设备100。计算设备100只是合适的计算环境的一个示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应该将计算设备100解释为对所示出的任一组件或其组合有任何依赖性或要求。在一个实施例中,计算设备100是常规计算机(例如,个人计算机或膝上型计算机)。

[0037] 本发明的一个实施例可以在计算机代码或机器可使用指令的一般上下文中描述,计算机代码或机器可使用指令包括诸如程序模块等由计算机或其他机器执行的计算机可执行指令。一般而言,包括例程、程序、对象、组件、数据结构等的程序模块指的是执行特定任务或实现特定抽象数据类型的代码。此处所描述的各实施例可以在各种系统配置中实施,这些系统配置包括手持式设备、消费电子产品、通用计算机、更专用计算设备等。此处所描述的各实施例还能在其中任务由通过通信网络链接的远程处理设备完成的分布式计算环境中实现。

[0038] 继续参考图1,计算设备100包括直接地或间接地耦合以下设备的总线110:存储器112、一个或多个处理器114、一个或多个呈现组件116、输入/输出端口 118、输入/输出组件120、以及说明性电源122。总线110可以是一条或多条总线(诸如地址总线、数据总线、或其组合)。尽管为了清楚起见用线条示出了图1的各框,但是在现实中,各组件的划界并不是那样清楚,并且按比喻的说法,更精确而言这些线条将是灰色的和模糊的。例如,可以将诸如显示设备等的呈现组件认为是I/O组件。而且,处理器具有存储器。本领域的技术人员可以理解,这是本领域的特性,并且如上所述,图1的图示只是例示可结合本发明的一个或多个实施例来使用的示例性计算设备。在诸如“工作站”、“服务器”、“膝上型计算机”、“手持式设备”等等之类的类别之间不进行区别,因为所有这些都在图1的范围内并都被称作“计算设备”。

[0039] 计算设备100通常包括各种计算机可读介质。作为示例而非局限,计算机可读介质可包括RAM、R0M、EEPR0M、闪存或其他存储器技术、CDR0M、DVD或其他光学或全息介质、磁带盒、磁带、磁盘存储或其他磁存储设备、或可被配置成存储与此处所描述的各实施例相关的数据和/或执行的类似的有形介质。

[0040] 存储器112包括易失性和/或非易失性存储器形式的计算机存储介质。存储器可以是可移动的、不可移动的、或其组合。示例性硬件设备包括固态存储器、硬盘驱动器、高速缓存、光盘驱动器等。计算设备100包括从诸如存储器112或I/O组件120之类的各种实体读取数据的一个或多个处理器。呈现组件116向用户或其他设备呈现数据指示。示例性呈现组件包括显示设备、扬声器、打印组件、振动组件等等。

[0041] I/O端口 118允许计算设备100在逻辑上耦合至包括I/O组件120的其他设备,其中某些设备可以是内置的。说明性组件包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、打印机、无线设备等等。

[0042] 计算设备100还包括能够同时处理并行线程中的多个着色器的GPU 124。为此,GPU 124可被配备成具有各种设备驱动程序并且实际上包括多个处理器。

[0043] 图2是示出根据本发明的一实施例的对计算设备的存储器寄存器进行分配的图。如图2所示,计算设备上有多个存储器寄存器200可用。并列地呈现相同的寄存器200的块来说明如何为简单着色器实例202、204、206和208以及复杂着色器实例210和212中的任一个分配存储器。实例可包括着色器的程序表示或着色器的字节代码重现中的任一个。此外,对寄存器200的分配可由计算设备上的GPU或CPU来执行。

[0044] 简单寄存器202、204、206和208被分配到可用块214、216、218和220。复杂着色器被分配到可用块222和224。被分配到简单着色器的可用块(即,块214、216、218和220)包含比被分配到复杂着色器的可用块(即,块222和224)少的寄存器。

[0045] 在一个实施例中,通过为各场景(简单的和复杂的)指定两个分开的着色器并在需要时加载适当的场景来在代码中分配寄存器的块。为此,可以为给定着色器设置指针。

[0046] 图3是根据本发明的一实施例的用于基于着色器复杂度来分配寄存器的流程图。最初,用HLSL声明定义了可从其实例化多个着色器类的模板的接口,如302处所指示的。用于内联着色器实现的变量也在着色器程序中定义,如304处所指示的。在一个实施例中,着色器实现是例程或子例程。通过指向存储关于着色器实现的数据的表来指定实际实例,如306处所指示的。且用实际类实例(例程或子例程)来替换着色器程序中的方法调用,如308处所指示的。为了说明上述步骤,下文呈现并详细讨论了可与Direct3D集成的代码。

[0047] Direct3D包含多个分立着色器阶段,每一阶段为了再现流水线中的单独目的。这六个阶段创建了其中开发员编写代码来控制每一着色器或阶段的操作的再现流水线。为了以这些阶段为目标,开发员使用HLSL和将HLSL代码转换成经优化的着色器字节代码的相关联HLSL编译器。如上所述,字节代码是用于图形硬件中的图形设备驱动程序的经编译的HLSL代码的低级表示。

[0048] 在一个实施例中,HLSL包含允许将函数和如变量和纹理等独立资源编组成类的面向对象构造。在该范例中,可以声明定义了可从其实例化多个类的模板的接口。在用这种方式定义时,从接口继承的类定义将使用动态联接来链接的实现。为了定义着色器程序中可被插入诸实现中的一个的点,开发员创建接口变量并且可在不参考可能的类推断的情况下使用该接口的定义的方法。在一个实施例中,选择单个着色器实现并将其内置到着色器中。在替换性实施例中,HLSL代码中使用接口的特定点定义了所有实现是内联的位置,并且所有实现主体被插入到着色器中。随后,当着色器实际运行时,在编译很久之后,选择特定实现来执行。

[0049] 下列代码示出可以如何选择实际类实例并用着色器代码来替换方法调用。

[0050] I interface Light

[0051] 2 {

[0052] 3 float3 Calculate(float3Position, float3Normal);

[0053] 4 }

[0054] 5

[0055] 6 class AmbientLight: Light

[0056] 7 {

[0057] 8 float3 Calculate(float3 Position, float3 Normal)

[0058] 9 {

[0059] 10 return AmbientValue ;

[0060] 11 }

[0061] 12

[0062] 13 float3 AmbientValue ;

[0063] 14 }

[0064] 15

[0065] 16 class DirectionalLight: Light

[0066] 17 {

[0067] 18 float3 Calculate(float3 Position, float3 Normal)

[0068] 19 {

[0069] 20 float3 LightDir = normalize (Position-LightPosition);

[0070] 21 float LightContrib = saturate(dot(Normal, -LightDir));

[0071] 22 return LightCo1r^LightContrib ;

[0072] 23}[0073] 24

[0074] 25 float3 LightPosition ;

[0075] 26 float3 LightColor ;

[0076] 27 }

[0077] 28

[0078] 29 AmbientLight My Ambient ;

[0079] 30 DirectionalLight MyDirectional ;

[0080] 31

[0081] 32 float4 main(Light Mylnstance,float3 CurPos:CurPosition,

[0082] 33 float3 Normal: Normal):SV—Target

[0083] 34 {

[0084] 35 float4 Ret ;

[0085] 36 Ret.xyz = Mylnstance.Calculate (CurPos,Normal);

[0086] 37 Ret.w = 1.0 ;

[0087] 38

[0088] 39 return Ret ;

[0089] 40 }

[0090] 上述示例是用HLSL来编写的,且字节代码的实际表示是二进制形式的。上述代码的解释在以下段落中给出。

[0091] 1-4行定义被称为Light(光)的接口,其是在该示例中定义的类的父接口。在第3行中,定义了 Calculate (计算)方法的原型。Calculate必须由Light的任何子类来实现。6-14行定义AmbientLight (环境光),其是Light接口的简单实现(即,简单着色器定义)。18-23行示出带有与Light: !Calculate (光的计算)相同的签名但带有比DirectionalLight: !Calculate (方向光的计算)更复杂的代码(即,复杂着色器定义)的Calculate方法的实现。

[0092] 25-26行示出DirectionalLight(方向光)的操作所需的描绘局部类变量。29-30行示出两个变量的类实例定义=MyAmbient(我的环境)(简单着色器定义)和MyDirectional (我的方向)(复杂着色器定义)。这些变量用作至再现流水线的绑定点并标识可被选择来在以下描述的Mylnstance (我的实例)变量的位置中使用的可能的实现。

[0093] 32-40行示出程序的主着色器部分。第一个自变量是类型Light的通用接口变量。在使用Light的点处,插入特殊调用指令(在一个实施例中)。结果,所有实现主体将出现在着色器字节代码中。表随后可将调用链接到其可能执行的主体。其余的参数是标准Direct3D着色器中使用的标准再现流水线变量。

[0094] 在操作上,上述代码可用HLSL代码来编写并被发送到HLSL编译器以便转换成字节代码。进而将字节代码提供给GPU上的驱动程序以便被设置为在HLSL代码中描述的着色器阶段的程序。在Direct3D的先前版本中,此字节代码由着色器所需的输入、输出和依赖资源的低级描述以及定义着色器阶段的操作的汇编样式指令构成。就此处描述的各实施例而言,Direct3D字节代码还包括定义用于子例程的输入、输出和操作指令的子例程以及定义抽象接口方法的使用点和哪些方法定义可被内联到着色器中的不同点的表。注意到以下是重要的:以下示例是用被称为反汇编的半可读文本来编写的,并且字节代码的实际表示是二进制形式的。

[0095] 字节代码旨在表示对着色器阶段的状态和预期执行的高度优化的表达式定义。在Direct3D 10之前的各个Direct3D版本中,该字节代码匹配于可在图形硬件上执行的准确指令。因为Direct3D 10中的发散体系结构(例如,CPU上的流水线仿真),修订字节代码来改为提供中间表示——即IL。在一个实施例中,向GPU的设备驱动程序提供IL并将代码转换成在JIT进程中的合适的本机指令。在另一实施例中,以JIT操作可用优化或重新格式化的最小需求来执行的方式来设计IL。另外,可在创建着色器定义时——而非在联接发生时——对独立的类实例执行JIT操作以便确保在链接时联接可如平凡的内联般执行。上述可以在以下示例性代码中看出。应该注意,以下呈现的代码不旨在限制本发明的各实施例。也可以另选地使用其他代码。

[0096] I del func—table ftO{fbO}

[0097] 2

[0098] 3 del func—table ftl {fbl}

[0099] 4

[0100] 5 del—func—ptr fpO[I] [I] = {ftO,ftl};

[0101] 6

[0102] 7 fbO:1n: (const iv0.xyzw,

[0103] 8 const ivl.xyzw,`

[0104] 9 const iv2.xyzw),

[0105] 10 out: (oo0.xyzw)

[0106] 11 moV ooO, cb[iv0.x] [iv0.y]

[0107] 12 ret

[0108] 13

[0109] 14 fbl:1n: (const iv0.xyzw,

[0110] 15 const ivl.xyzw,

[0111] 16 const iv2.xyzw),

[0112] 17 out (oo0.xyzw)

[0113] 18 add r0.xyz, ivl.xyzx, -cb[iv0.x] [iv0.y].xyzx

[0114] 19 dp3 r0.w, r0.xyzx, r0.xyzx

[0115] 20 rsq r0.w, r0.w

[0116] 21 mu I r0.xyz, r0.xyzx, r0.wwww

[0117] 22 dp3—sat r0.x,iv2.xyzx, -r0.xyzx

[0118] 23 mu I oo0.xyz, r0.xxx, cb [iv0.x] [iv0.y+1].xyz

[0119] 24 ret

[0120] 25

[0121] 26 main:

[0122] 27 fcall fp0[0] [0],in: (cbl4[0],v0,vl),out: (oO)

[0123] 28 ret[0124] 第I行描绘了用于AmbientLight的类实例表并列出了用于特定类实例的所有函数实现。在上述代码中,只有一个函数Calculate,其在主着色器代码中被调用一次。因此,只存在一个实现fbO。也可以引用其他方法、函数、例程或对类AmbientLight中的现有方法的调用。此外,第3行示出参考先前的代码所讨论的变量DirectionalLight的类实例表。

[0125] 用于经由Mylnstance来分派的表接口在第5行上。第一个数组维度指示接口变量是否是一个数组。在此情况中,只存在一个元素,所以维度被给予值I。第二个数组维度是接口的调用点的数量。在此情况中,只有一个方法Calculate,所以维度是一。最后,括号中的列表是该接口变量可使用的类实例表的列表。因为ftO (AmbientLight)和ftl (DirectionalLight)都是从Light继承的,所以列出了两个表。

[0126] 7-12行示出为27行处的调用点优化的用于Calculate的AmbientLight的实现的IL。如果存在使用AmbientLight类的Calculate函数的附加调用点,则将存在为特定调用点优化的与这个相类似的多个块。注意,被标记为“iv”和“ον”的寄存器被用来代替标准HLSL寄存器如X、s或cb。如果多个调用点发出相同的指令集,则可以移除冗余块且各个调用点将指向单个块。这意味着调用点枚举寄存器,从而要求寄存器的替代需要作为内联进程的一部分来发生。另外,14-24行示出为27行处的调用点优化的用于Calculate的DirectionalLight 的实现的 IL。

[0127] 主着色器代码块在行26-28中呈现。在27中,Fcall指令指示数组元素并为用于变量MyMaterial (我的材料)的Calculate例程定义调用点。第一个参数指示要使用的接口表(fpO)。第一个分类索引定义方法索引。在这种情况下,只有一个方法调用点,所以索引是一。第二个分类索引定义正在执行的调用点的索引。在这种情况下,只有对Calculate方法的一个调用,所以该索引是零。“in(入)”和“out(出)”指示该调用使用的寄存器。第一个“in”参数总是指代常量存储器中存储类实例变量的位置一一在这种情况下是cbl4,元素零。

[0128] 在一个实施例中,fcall指令指的是方法将通过提供索引来调用而不是定义要调用的准确实现。在生成IL以及随后的用于程序执行的本机硬件指令时,发出代码到fcall例程并且部分地高速缓存寄存器的当前状态和其他着色器状态并围绕实现生成来还原。用于第一实现的代码通过从寄存器分配、临时寄存器等的当前状态开始来生成。一旦该生成步骤完成,状态就被还原到高速缓存的状态,且为下一可能的实现重复生成和编译。重复该循环直到所有实现都生成了代码。最后,当前状态被还原到高速缓存的状态并且将fcall的输出的影响应用于当前状态,而在fcall之后继续代码生成。所生成的所得方法是用IL来定义的并在类实例表中被引用,这些类实例表与接口定义的结构匹配并具有对所创建的每一编译的函数版本的引用。

[0129] 为了在C API中实现以上所述的,对Direct3D作出最小改动。在一个实施例中,添加用于引用着色器所提供的类实例的新的API。另外,创建另一 API来引用类实例。

[0130] 在操作上,当该着色器对象被绑定到流水线时,应用程序具有提供其希望用于着色器中的可用绑定点的特定类实例的列表的机会。为此,通过向引用类实例的API提供用于着色器的HLSL类实例的名称来获得列表对象。

[0131] 类引用API可只允许按批量机制的交互,这意味着应用程序只能改变绘制调用组之间的再现流水线的状态,而非如像素的再现之间那样更细粒度地改变。然而,某些实施例可改变图元集之间的状态,从而使得类实例只在批量图元之间是可改变的。这可以在以下代码中看出。

[0132] I pDevice- > CreatePixelShader (pShaderCode, pMyClassLibrary, &pMyPS);

[0133] 2

[0134] 3 pMyDirectionalLight = pMyClassLibrary- > GetClassInstance (;/ MyDirectional");

[0135] 4 pMyAmbientLight = pMyClassLibrary- > GetClassInstance( " MyAmbient");

[0136] 5

[0137] 6 while (true)

[0138] 7 {

[0139] 8 if (DirectionalLighting)`[0140] 9 pDevice- > PSSetShader(pMyPS, &pMyDirectionalLight,I);

[0141] 10 else

[0142] 11 pDevice- > PSSetShader (pMyPS, &pMyAmbientLight, I) ; 12

[0143] 13 RenderS cene ();

[0144] 14 }

[0145] 第I行示出例程CreatePixelShader (创建像素着色器),该例程被提供在pShaderCode (指向着色器代码的指针)中包含经编译的着色器字节代码的串參数、指向引用类实例的API的指针(pMyClassLibrary (指向我的类库的指针))、以及指向像素着色器的指针的指针(PMyPS(指向我的像素着色器的指针))。例程检查字节代码并用关于着色器中什么接口和类实例可用的信息来填充pMyClassLibrary。另外,还向GPU的设备驱动程序提供字节代码,该设备驱动器执行将代码转换成本机表示的JIT转换并内部存储所转换的代码。最后,引用返回到着色器PMyPS以供稍后API使用。

[0146] 在第3行中,指向引用类实例的API的指针(pMyDirectionalLight (指向我的方向光的指针))被设置为引用着色器中的MyDirectional类实例。在第4行中,指向引用类实例的API的指针(pMyAmbientLight (指向我的环境光的指针))被设置为引用着色器中的MyAmbient类实例。6_14行描绘了将重复地再现场景直到程序退出的循环。

[0147] 第8行示出用于基于全局输入DirectionalLighting(方向光照)来选择要使用什么调用实例的代码。基于第8行中作出的选择,用pMyPS中的着色器对象以及可应用于HLSL变量Mylnstance的两个可能的类实例中的ー个作出调用。最后的自变量指示第二个自变量中提供的数组的长度,因为在任ー个着色器中可能存在ー个以上的要解析的接ロ。最后,在第13行中示出对用于再现场景的几何的函数的调用。

[0148] 尽管用对结构特征和方法动作专用的语言描述了本主題,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。例如,除此处描述的之外的采样速率和采样周期也可以由权利要求书的范围来捕捉。

Claims (19)

1.一种用于将存储器寄存器分配到着色器实例的方法,所述方法包括: 声明用于定义着色器模板的一个或多个接口,其中着色器的一个或多个类依赖于所述一个或多个接口(302); 在着色器程序中定义用于内联实际着色器实例的变量(304 ); 用所述实际着色器实例来替换所述着色器程序中的调用(308); 将简单着色器实例和复杂着色器实例绑定到流水线,其中绑定包括将所述简单着色器实例和所述复杂着色器实例两者的每次使用存储在按函数类型和调用位置排列的表中,其中为与所述简单着色器实例或所述复杂着色器实例中的至少一个相关联的着色器代码中调用函数的每一位置发出所述函数的新版本。
2.如权利要求1所述的方法,其特征在于,还包括为所述着色器实例分配存储器。
3.如权利要求2所述的方法,其特征在于,与所述存储相关联并被分配给所述着色器实例的寄存器的数量取决于所述着色器实例的复杂度水平。
4.如权利要求1所述的方法,其特征在于,还包括: 将所述着色器实例转换成字节代码;以及 基于所述字节代码光栅化计算 设备上的像素。
5.如权利要求4所述的方法,其特征在于,所述着色器实例由高级着色语言(HLSL)编译器编译成字节代码。
6.如权利要求1所述的方 法,其特征在于,所述着色器实例用高级着色语言(HLSL)来编程。
7.如权利要求1所述的方法,其特征在于,所述着色器实例用于确定三维(3D)图形中的操作。
8.如权利要求1所述的方法,其特征在于,还包括: 提供编译的着色器字节代码; 提供指向应用程序接口的指针; 提供指向像素作色着色器的指针; 向图形处理单元(GPU)的设备驱动程序提供所述着色器字节代码;以及 返回对所述着色器实例的引用。
9.如权利要求8所述的方法,其特征在于,还包括: 引用所述着色器的一个或多个类; 将所述一个或多个类存储在存储器位置中;以及 指定指向所述存储器位置的指针。
10.如权利要求1所述的方法,其特征在于,所述流水线由图形处理单元(GPU)执行。
11.如权利要求10所述的方法,其特征在于,所述流水线同时并行地执行多个着色器实例。
12.如权利要求1所述的方法,其特征在于,替换所述着色器程序中的调用还包括: 接收所述着色器的两个或更多着色器实例中的一个;以及 用所述着色器的两个或更多着色器实例中的一个来替换所述着色器程序中的调用。
13.一种用于将存储器寄存器分配到着色器实例的系统,所述系统包括: 用于声明用于定义着色器模板的一个或多个接口的装置,其中着色器的一个或多个类依赖于所述一个或多个接口(302); 用于在着色器程序中定义用于内联实际着色器实例的变量的装置(304); 用于用所述实际着色器实例来替换所述着色器程序中的调用的装置(308);以及用于将简单着色器实例和复杂着色器实例绑定到流水线的装置,其中绑定包括将所述简单着色器实例和所述复杂着色器实例两者的每次使用存储在按函数类型和调用位置排列的表中,其中为与所述简单着色器实例或所述复杂着色器实例中的至少一个相关联的着色器代码中调用函数的每一位置发出所述函数的新版本。
14.如权利要求13所述的系统,其特征在于,还包括: 用于提供编译的着色器字节代码的装置; 用于提供指向应用程序接口的指针的装置; 用于提供指向像素着色着色器的指针的装置; 用于向图形处理单元(GPU)的设备驱动程序提供所述着色器字节代码的装置;以及 用于返回对所述着色器实例的引用的装置。
15.如权利要求13所述的系统,其特征在于,基于与所述着色器实例相关联的复杂度来确定要分配到所述着色器实例的寄存器的数量。
16.如权利要求13所述的系统,其特征在于,所述着色器实例用于确定三维(3D)图形中的操作。
17.一种由计算设备实现的用二维再现三维图形的相似度的方法,所述计算设备包括带有一个或多个存储器寄存器的存储器单元(112),所述方法包括: 图形处理单元GPU (124)基于先前定义的着色器类来分配与所述着色器相关联的所述一个或多个存储器寄存器,包括: 所述GPU声明用于定义着色器模板的一个或多个接口,其中着色器的一个或多个类依赖于所述一个或多个接口; 所述GPU在着色器程序中定义用于内联实际着色器实例的变量; 所述GPU用所述实际着色器实例来替换所述着色器程序中的调用;以及所述GPU将简单着色器实例和复杂着色器实例绑定到流水线,其中绑定包括将所述简单着色器实例和所述复杂着色器实例两者的每次使用存储在按函数类型和调用位置排列的表中,其中为与所述简单着色器实例或所述复杂着色器实例中的至少一个相关联的着色器代码中调用函数的每一位置发出所述函数的新版本。
18.如权利要求17所述的计算设备实现的方法,其特征在于,所述GPU执行用于基于所述实际着色器实例来着色像素的光栅化器。
19.如权利要求17所述的计算设备实现的方法,其特征在于,所述实际着色器实例确定一个或多个图元的位置。
CN 200980124880 2008-06-27 2009-06-26 着色器接口 CN102077251B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US12/163,734 2008-06-27
US12163734 US8581912B2 (en) 2008-06-27 2008-06-27 Dynamic subroutine linkage optimizing shader performance
PCT/US2009/048960 WO2009158679A8 (en) 2008-06-27 2009-06-26 Shader interfaces

Publications (2)

Publication Number Publication Date
CN102077251A true CN102077251A (zh) 2011-05-25
CN102077251B true CN102077251B (zh) 2014-01-08

Family

ID=41445370

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200980124880 CN102077251B (zh) 2008-06-27 2009-06-26 着色器接口

Country Status (4)

Country Link
US (3) US8581912B2 (zh)
EP (1) EP2289050A4 (zh)
CN (1) CN102077251B (zh)
WO (1) WO2009158679A8 (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8416238B2 (en) * 2009-02-18 2013-04-09 Autodesk, Inc. Modular shader architecture and method for computerized image rendering
US8379024B2 (en) * 2009-02-18 2013-02-19 Autodesk, Inc. Modular shader architecture and method for computerized image rendering
US8368694B2 (en) * 2009-06-04 2013-02-05 Autodesk, Inc Efficient rendering of multiple frame buffers with independent ray-tracing parameters
US8970588B1 (en) * 2009-07-31 2015-03-03 Pixar System and methods for implementing object oriented structures in a shading language
US9245371B2 (en) * 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
US8756590B2 (en) 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
US8677186B2 (en) 2010-12-15 2014-03-18 Microsoft Corporation Debugging in data parallel computations
US8997066B2 (en) 2010-12-27 2015-03-31 Microsoft Technology Licensing, Llc Emulating pointers
US8539458B2 (en) 2011-06-10 2013-09-17 Microsoft Corporation Transforming addressing alignment during code generation
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9495722B2 (en) * 2013-05-24 2016-11-15 Sony Interactive Entertainment Inc. Developer controlled layout
US9779535B2 (en) 2014-03-19 2017-10-03 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US9766954B2 (en) 2014-09-08 2017-09-19 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
KR20160033479A (ko) 2014-09-18 2016-03-28 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
US20160225118A1 (en) * 2015-02-02 2016-08-04 Microsoft Technology Licensing, Llc Optimizing compilation of shaders
US9881351B2 (en) 2015-06-15 2018-01-30 Microsoft Technology Licensing, Llc Remote translation, aggregation and distribution of computer program resources in graphics processing unit emulation
US9786026B2 (en) 2015-06-15 2017-10-10 Microsoft Technology Licensing, Llc Asynchronous translation of computer program resources in graphics processing unit emulation
CN105374070A (zh) * 2015-12-11 2016-03-02 中国航空工业集团公司西安航空计算技术研究所 一种3d图形处理算法建模仿真方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6654951B1 (en) 1998-12-14 2003-11-25 International Business Machines Corporation Removal of unreachable methods in object-oriented applications based on program interface analysis
US6704927B1 (en) 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838686A (en) * 1994-04-22 1998-11-17 Thomson Consumer Electronics, Inc. System for dynamically allocating a scarce resource
US6041179A (en) * 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
US7548238B2 (en) * 1997-07-02 2009-06-16 Nvidia Corporation Computer graphics shader systems and methods
US6175956B1 (en) * 1998-07-15 2001-01-16 International Business Machines Corporation Method and computer program product for implementing method calls in a computer system
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation
JP4118456B2 (ja) * 1999-06-29 2008-07-16 株式会社東芝 プログラム言語処理システム、コード最適化方法、及び機械読み出し可能な記憶媒体
US6658657B1 (en) * 2000-03-31 2003-12-02 Intel Corporation Method and apparatus for reducing the overhead of virtual method invocations
US6704297B1 (en) 2000-08-23 2004-03-09 Northrop Grumman Corporation Downlink orderwire integrator and separator for use in a satellite based communications system
US6941550B1 (en) * 2001-07-09 2005-09-06 Microsoft Corporation Interface invoke mechanism
US7564460B2 (en) 2001-07-16 2009-07-21 Microsoft Corporation Systems and methods for providing intermediate targets in a graphics system
US7103878B2 (en) * 2001-12-13 2006-09-05 Hewlett-Packard Development Company, L.P. Method and system to instrument virtual function calls
US7159212B2 (en) 2002-03-08 2007-01-02 Electronic Arts Inc. Systems and methods for implementing shader-driven compilation of rendering assets
US7015909B1 (en) 2002-03-19 2006-03-21 Aechelon Technology, Inc. Efficient use of user-defined shaders to implement graphics operations
JP3956112B2 (ja) * 2002-06-12 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Maschines Corporation コンパイラ、レジスタ割当装置、プログラム、記録媒体、コンパイル方法、及びレジスタ割当方法
US6809732B2 (en) 2002-07-18 2004-10-26 Nvidia Corporation Method and apparatus for generation of programmable shader configuration information from state-based control information and program instructions
US20040095348A1 (en) * 2002-11-19 2004-05-20 Bleiweiss Avi I. Shading language interface and method
US6839062B2 (en) * 2003-02-24 2005-01-04 Microsoft Corporation Usage semantics
US7530062B2 (en) * 2003-05-23 2009-05-05 Microsoft Corporation Optimizing compiler transforms for a high level shader language
US7523406B2 (en) * 2003-07-22 2009-04-21 Autodesk Inc. Dynamic parameter interface
US8274517B2 (en) 2003-11-14 2012-09-25 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US7463259B1 (en) * 2003-12-18 2008-12-09 Nvidia Corporation Subshader mechanism for programming language
US7218291B2 (en) * 2004-09-13 2007-05-15 Nvidia Corporation Increased scalability in the fragment shading pipeline
US20060082577A1 (en) 2004-10-20 2006-04-20 Ugs Corp. System, method, and computer program product for dynamic shader generation
US7598953B2 (en) * 2004-11-05 2009-10-06 Microsoft Corporation Interpreter for simplified programming of graphics processor units in general purpose programming languages
US7548244B2 (en) * 2005-01-12 2009-06-16 Sony Computer Entertainment Inc. Interactive debugging and monitoring of shader programs executing on a graphics processor
US7394464B2 (en) 2005-01-28 2008-07-01 Microsoft Corporation Preshaders: optimization of GPU programs
US8144149B2 (en) * 2005-10-14 2012-03-27 Via Technologies, Inc. System and method for dynamically load balancing multiple shader stages in a shared pool of processing units
US20070091088A1 (en) * 2005-10-14 2007-04-26 Via Technologies, Inc. System and method for managing the computation of graphics shading operations
US20070153015A1 (en) * 2006-01-05 2007-07-05 Smedia Technology Corporation Graphics processing unit instruction sets using a reconfigurable cache
US20070229520A1 (en) * 2006-03-31 2007-10-04 Microsoft Corporation Buffered Paint Systems
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
US8601456B2 (en) * 2006-08-04 2013-12-03 Microsoft Corporation Software transactional protection of managed pointers
US7750913B1 (en) * 2006-10-24 2010-07-06 Adobe Systems Incorporated System and method for implementing graphics processing unit shader programs using snippets
US8379032B2 (en) * 2007-09-28 2013-02-19 Qualcomm Incorporated System and method of mapping shader variables into physical registers

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6704927B1 (en) 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US6654951B1 (en) 1998-12-14 2003-11-25 International Business Machines Corporation Removal of unreachable methods in object-oriented applications based on program interface analysis

Also Published As

Publication number Publication date Type
US8581912B2 (en) 2013-11-12 grant
US20170039754A1 (en) 2017-02-09 application
US20140063029A1 (en) 2014-03-06 application
CN102077251A (zh) 2011-05-25 application
WO2009158679A2 (en) 2009-12-30 application
EP2289050A4 (en) 2012-01-11 application
EP2289050A2 (en) 2011-03-02 application
US9824484B2 (en) 2017-11-21 grant
US9390542B2 (en) 2016-07-12 grant
US20090322751A1 (en) 2009-12-31 application
WO2009158679A3 (en) 2010-05-06 application
WO2009158679A8 (en) 2010-11-18 application

Similar Documents

Publication Publication Date Title
Rost et al. OpenGL shading language
US7006101B1 (en) Graphics API with branching capabilities
Hou et al. BSGP: bulk-synchronous GPU programming
US20060225061A1 (en) Method and apparatus for register allocation in presence of hardware constraints
US7598953B2 (en) Interpreter for simplified programming of graphics processor units in general purpose programming languages
Kessenich et al. The opengl shading language
Seiler et al. Larrabee: a many-core x86 architecture for visual computing
US20080276262A1 (en) Parallel runtime execution on multiple processors
Mark et al. Cg: A system for programming graphics hardware in a C-like language
Peercy et al. Interactive multi-pass programmable shading
US20080184211A1 (en) Virtual architecture and instruction set for parallel thread computing
Woop et al. RPU: a programmable ray processing unit for realtime ray tracing
US20080276220A1 (en) Application interface on multiple processors
McCool et al. Shader algebra
US7015909B1 (en) Efficient use of user-defined shaders to implement graphics operations
Heer et al. Declarative language design for interactive visualization
US20070261038A1 (en) Code Translation and Pipeline Optimization
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
US7750913B1 (en) System and method for implementing graphics processing unit shader programs using snippets
US20070018990A1 (en) Color computation of pixels using a plurality of vertex or fragment shader programs
Sons et al. XML3D: interactive 3D graphics for the web
US7852341B1 (en) Method and system for patching instructions in a shader for a 3-D graphics pipeline
Bresson et al. OpenMusic: visual programming environment for music composition, analysis and research
Dietrich et al. The openrt application programming interface–towards a common api for interactive ray tracing
Dollner et al. A generic rendering system

Legal Events

Date Code Title Description
C06 Publication
C10 Entry into substantive examination
C14 Grant of patent or utility model
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150504

C41 Transfer of patent application or patent right or utility model