纹理采样的制作方法

文档序号:6605531阅读:161来源:国知局
专利名称:纹理采样的制作方法
纹理采样
背景技术
纹理一般指包括重复图案的图像,该重复图案可以用于包装(wrap)图形图案。可 以使用基于Nyquist准则的纹理采样技术来对纹理数据进行采样。纹理采样技术正变得越 来越复杂并且使用越来越广泛。纹理采样技术可以包括点采样、双线性过滤、三线性过滤、 各向异性过滤(anisotropicfiltering)、抗锯齿(anti-aliasing)和其它类似的技术。纹 理采样正越来越多地被例如顶点着色器、几何着色器和像素着色器所使用。此外,这种纹理采样技术的复杂性和使用不断的增加,同时用于执行纹理采样的 硬件的复杂性也日益增加。存在至少一些应用程序,它们可能需要使用可以不需要或不用 直接访问硬件设备的纹理采样技术。此外,现有的硬件设备可能不完全支持复杂的纹理采 样操作,或者现有的硬件设备可能不能有效地执行复杂的纹理采样操作。


在附图中,通过示例而非通过限制的方式来说明本文描述的发明。为了说明的简 单和清楚,附图中说明的部件并不必然按照比例绘出。例如,为了清楚起见,可以相对于其 它部件而放大一些部件的尺寸。此外,在适当的情况下,在各个附图中重复使用附图标记以 指示对应的或类似的部件。图1说明了根据一个实施例的、使用纹理采样器的图形处理技术,所述纹理采样 器是使用着色语言(shader language)实现的。图2说明了根据一个实施例的、使用纹理采样器的图形处理技术的三维管线级, 其中所述纹理采样器是使用着色语言实现的。图3是说明了根据一个实施例的、使用着色语言实现的纹理采样器的流程图。图4说明了根据一个实施例的、描述了使用着色语言的纹理采样过程的流程图。图5说明了根据一个实施例的、在其中可以实现使用着色语言的纹理采样的计算 机系统500。
具体实施例方式以下说明描述了使用纹理采样器来执行纹理采样的技术,所述纹理采样器是用着 色语言来实现的。在以下说明中,阐述了许多具体的细节,例如逻辑实现、资源划分、或共 享、或复制实现、系统部件的类型和相互关系、以及逻辑划分或集成选择,以便于更为透彻 的理解本发明。但是,本领域的技术人员将意识到,可以在没有这些具体细节的情况下实现 本发明。在其它实例中,没有详细地示出控制结构、门级电路和全部软件指令序列,以便不 模糊本发明。本领域的技术人员根据所包括的说明,将能够在无需过多的实验的情况下实 现适当的功能。说明书中提及的“一个实施例”、“一实施例”、“一示例性实施例”指示了所描述的 实施例可以包括特定特征、结构或特性,但每个实施例可以不必包括特定特征、结构或特 性。此外,这种短语并非必然是指同一实施例。此外,当结合一实施例描述特定特征、结构或特性时,应当认为,不管是否明确地描述,本领域技术人员能够懂得结合其它实施例来改 变这种特征、结构或特性。可以用硬件、固件、软件和它们的任意组合来实现本发明的实施例。本发明的实 施例还可以实现为在机器可读介质上存储的指令,其可以由一个或多个处理器来读取并执 行。机器可读存储介质可以包括用于存储或发送机器(例如,计算设备)可读形式的信息 的任意装置。例如,机器可读存储介质可以包括只读存储器(ROM);随机存取存储器(RAM);磁 盘存储介质;光存储介质;闪存设备;电子、光学形式的信号。此外,在本文中,可以将固件、 软件、例程和指令描述为执行某些动作。但是,应当理解,这种说明仅是为了方便,并且事实 上,这些动作是由执行固件、软件、例程和指令的计算设备、处理器、控制器和其它设备产生 的。在图1中说明了在多个着色器和纹理采样器之间共享的多对多关系的实施例。在 一个实施例中,关系图可以包括“M”个着色器110-A到110-M,并且“K”个纹理采样器120-A 到120-K可以以各种采样器状态(例如,“ρ”采样器状态)支持各种采样操作(例如,“N” 采样操作)。在一个实施例中,可以用一采样器状态来配置纹理采样器120,并且纹理采样 器120可以接收将被基于该采样器状态而执行的采样操作。在一个实施例中,着色器1IO-A 可以从纹理采样器120-A到120-K获得纹理采样。在其它实施例中,着色器110-A可以从例 如纹理采样器120-B、120-D、120-G和120-J获得纹理采样。在一个实施例中,着色器110-A 到110-M可以代表例如顶点、几何图形、外壳、域、像素或计算着色器。在一个实施例中,着 色器110-A可以包括可用于采样的多个采样状态(SS),并且着色器110-A例如可以使用特 定采样器状态来执行多个采样操作。在一个实施例中,采样器状态可以具有用于采样操作 的单独的逻辑。在编译时间,可以将采样器状态添加到采样器状态(SS)中,以得到针对特 定采样器状态和采样操作的最优的代码。在一个实施例中,纹理采样器120-A到120-K可 以代表纹理采样器操作,其可以实现支持采样操作和采样器状态的纹理采样器的子集。在一个实施例中,每个着色器110可以获得由一个或多个纹理采样器120生成的 纹理采样。在一个实施例中,可以使用着色语言(例如,汇编语言、Cg、GLSL、HLSL和其它 着色语言)离线地实现纹理采样器120-A到120-K。在一个实施例中,可以在创建着色器 110期间、或者在创建正交采样器状态对象期间、或者根据需要在创建阶段之后的一个时间 点处,编译纹理采样器120。在一个实施例中,当着色器110需要纹理采样时,采样器二进制 代码(SS-BIN)可以被创建并且可以由着色器110使用。在一个实施例中,着色器110和纹理采样器120可以被用在例如3D图形可 编程管线中。在一个实施例中,3D图形可编程管线可以包括Direct3D10(D3D10)、 Direct3Dll(D3Dll),或者其它这种可从Microsoft 公司获得的DirectX应用程序接口 (API)的管线级,或可从硅图公司获得的跨平台API的OpenGL管线级。但是,也可以在其它 环境中由任何着色器来使用纹理采样器120。在图2中说明了三维(3D)图形可编程管线的实施例,其可以使用利用高级着色语 言而实现的纹理着色器。在一个实施例中,3D图形可编程管线200可以包括多个级,例如 输入数据处理块210、多个着色器(例如顶点着色器220、外壳着色器230、域着色器250、几 何着色器260、像素着色器270)、曲面细分单元235、光栅化块265、搅拌器(blender) 275、纹理采样器280-A到280-K,以及存储器290。在一个实施例中,可编程管线级例如可以为实时应用(例如,游戏)生成图形。在 一个实施例中,管线级200可以表示可从Microsoft 公司获得的DirectX应用程序接口 (API)的 D3D11 版本。在一个实施例中,输入数据处理块210可以使用分别存储在存储器290的缓冲区 290-A和290-B中的索引数据和顶点数据来生成数据单元。在一个实施例中,顶点数据可以 表示三角形的顶点、点、线和其它类似数据。在一个实施例中,输入数据处理块210可以向 顶点着色器220提供数据单元。在一个实施例中,在向顶点着色器220和几何着色器260 提供几何数据之前,输入数据处理块210可以使用缓冲区290-A和290-B中存储的顶点和 索引数据来合成几何数据。在一个实施例中,顶点着色器220可以使用由纹理采样器280-A到280-K生成的 纹理采样来处理从输入处理块210接收的顶点。在一个实施例中,顶点着色器220可以使 用由任意一个或一些或所有的纹理采样器280-A到280-K生成的纹理采样。在一个实施例 中,顶点着色器220可以生成单个输出顶点,其可以在接收到单个输入顶点之后使用纹理 采样来进行处理。在一个实施例中,顶点着色器220可以执行变换以便为输入顶点提供特 殊效果,例如光照和贴皮(skinning)。在一个实施例中,顶点着色器220可以执行数学运算 以改变输入顶点的颜色、纹理或位置。在一个实施例中,可以使用着色语言来实现顶点着色 器220,所述着色语言例如是汇编语言、用于图形的C(Cg)语言、OpenGL着色语言(GLSL)、 或高级着色语言(HLSL)、或任何其它的着色语言。在一个实施例中,外壳着色器230可以接收面片(patch)控制点并且可以为固定 功能曲面细分单元235准备面片控制点。在一个实施例中,外壳着色器230可以从纹理采 样器280-A到280-K中一个或多个接收纹理采样。在一个实施例中,外壳着色器230可以 从纹理采样器280-A到280-B接收纹理采样。在一个实施例中,可以使用着色语言来实现 外壳着色器230。在一个实施例中,曲面细分单元235可以基于来自外壳着色器230的控 制输入来细分(sub-divide)面片,并且可以将曲面细分的结果传递到域着色器250。在一 个实施例中,域着色器250可以操纵生成的顶点以使顶点符合一形状,或者使用来自曲面 细分单元235的输入和来自纹理采样器280-A到280-K中的一个或多个的纹理采样来执行 位移贴图(displacement mapping) 0在一个实施例中,域着色器250可以使用由纹理采样 器280-B提供的纹理采样。在一个实施例中,域着色器250可以向几何着色器260或光栅 化块265提供结果。在一个实施例中,可以使用高级着色语言来实现域着色器250。在一个实施例中,响应于从顶点着色器220或域着色器250接收到整个图元 (primitive)并且接收到由纹理采样器280-A到280-K中的一个或多个生成的纹理采样,几 何着色器260可以生成着色的图元。在一个实施例中,几何着色器260可以接收由纹理采 样器280-A到280-K生成的纹理采样。在一个实施例中,整个图元可以包括多个顶点。在 一个实施例中,响应于接收到多个顶点和纹理采样作为输入,几何着色器260可以创建零 个或多个着色的图元。在一个实施例中,多个顶点可以包括三角形的三个顶点、或线段的两个顶点、或点 的单个顶点以及邻接信息作为输入,并且可以生成零个或多个着色的顶点作为输出。在一 个实施例中,几何着色器260可以执行操作,例如点带生成、几何曲面细分和阴影体挤出(shadow volume extrusion),以生成着色的图元。在一个实施例中,几何着色器260可以编 译一个或多个纹理采样器280,然后调用纹理采样器280-A到280-K以从例如缓冲区290-D 中存储的纹理数据值得到纹理采样。在一个实施例中,可以使用汇编语言、Cg语言、HLSL语 言和GLSL语言来对几何着色器260进行编程。在一个实施例中,光栅化块265可以从顶点着色器220和几何着色器260接收顶 点(矢量图形信息),并且生成光栅化图像,其可以包括在显示设备上可以显示的像素和 点。在一个实施例中,光栅化块265可以执行例如变换、剪取(clipping)、扫描转换、剔除 (culling)、纹理过滤这样的光栅化技术和其它技术。在一个实施例中,光栅化块265可以 向像素着色器270提供像素以便处理光栅化图像。在一个实施例中,像素着色器270可以对光栅图像执行丰富的着色技术,以生成 逐个像素输出。在一个实施例中,像素着色器270可以执行诸如逐个像素照亮以及相关效 果这样的技术,以提供锐利的和更逼真的图像,所述相关效果例如凸凹贴图、色彩调和、阴 影、镜面高光(specular highlights)和半透明。在一个实施例中,可以使用汇编语言、Cg 语言、HLSL语言和GLSL语言或其它类似的语言来对像素着色器270进行编程。在一个实 施例中,像素着色器270可以在生成着色效果之前,从光栅化块265接收像素数据并且从一 个或多个纹理采样器280-A到280-K接收纹理采样。在一个实施例中,像素着色器270可 以从纹理采样器280-B和280-K接收纹理采样。在一个实施例中,像素着色器270也可以 直接从缓冲区290-F接收纹理数据值。在一个实施例中,可以将像素着色器270的输出提 供给搅拌器275以供进一步处理。在一个实施例中,纹理采样器280-A到280-K可以采样纹理缓冲区290_C、290_D 和290-F和其它缓冲区中存储的纹理数据值。在一个实施例中,可以使用用于实现着色器 220、230、250、260和270的着色语言来实现纹理采样器280-A到280-K。这种方法可以允 许复杂的纹理采样功能被实现为一段软件代码,其可以与采样器状态相匹配。在一个实施 例中,可以使用Cg语言、或GLSL语言或HLSL语言来实现纹理采样器280-A到280-K。在一 个实施例中,可以在离线阶段期间使用高级着色语言来实现纹理采样器280-A到280-K。在 一个实施例中,可以在准备阶段期间使用着色器编译器来编译纹理采样器280-A到280-K, 以生成使用着色语言实现的采样器的二进制代码。在一个实施例中,当着色器220到270 被调用时,可以由着色器220、230、250、260和270来调用一个或多个纹理采样器二进制文 件。在一个实施例中,可以在创建着色器220、230、250、260和270期间、在创建正交采样器 状态对象期间、或根据需要在创建阶段之后的稍后的时间点,对纹理采样器280-A到280-K 中的一个或多个进行编译。在一个实施例中,纹理采样器280-A到280-K可以执行例如以下操作解析细节的 层次(LOD)、确定采样、解析纹理元素(texel)地址、提取采样和拼接采样。在一个实施例 中,可以使用着色语言来实现纹理采样器280-A到280-K的操作。在一个实施例中,解析细 节的层次可以确定mipmap,其识别将从中选择采样的区域。在一个实施例中,解析纹理元素 地址可以确定将从中提取采样的位置。在一个实施例中,纹理采样器280-A到280-K可以 支持例如点采样、双线性采样、三线性采样和各向异性过滤这样的采样技术。在一个实施例 中,与使用基于普通软件的纹理采样技术而实现的纹理采样器相比,使用着色语言实现以 匹配着色器220到270的采样器状态的纹理采样器280-A到280-K可以提高纹理采样的运
8算的速度。在一个实施例中,纹理采样器280-A到280-K可以用于将纹理采样提供给顶点着 色器220、外壳着色器230、域着色器、几何着色器260和像素着色器270。在一个实施例中, 可以在创建顶点着色器220期间或在创建采样器状态对象期间,编译使用着色语言实现的 纹理采样器280-A到280-K。在一个实施例中,当调用顶点着色器220时,可以由顶点着色 器220调用纹理采样器280-A、280-B和280-K。在一个实施例中,当调用外壳着色器230 时,可以由外壳着色器230来调用纹理采样器280-A和280-B。在一个实施例中,当调用域 着色器250时,可以由域着色器250来调用纹理采样器280-B。在一个实施例中,当调用几 何着色器260时,可以由几何着色器260来调用纹理采样器280-B和280-K,并且当调用像 素着色器270时,可以由像素着色器270来调用纹理采样器280-B和280-K。这种方法可以允许将复杂的纹理采样功能实现为一段软件代码,其可以与着色器 220、230、250、270的采样器状态相匹配,或者可以与正交采样器状态相匹配。在一个实施例 中,与使用基于普通软件的纹理采样技术而实现的纹理采样器相比,使用着色语言实现以 匹配着色器220、230、250、260和/或270的采样器状态的纹理采样器280可以将运算的速 度提高N倍。在一个实施例中,与基于普通软件的纹理采样技术相比,使用着色语言实现的 纹理采样器280可以将性能提高N = KX,其中,基于普通软件的纹理采样的性能是X,K是 正整数值。在图3中对描述了使用高级着色语言而实现的纹理采样器280的流程图300进行 了说明。在框310,可以使用着色语言来生成纹理采样器280-A到280-K。在一个实施例中, 可以使用例如汇编、Cg、HLSL或GLSL这样的着色语言来开发纹理采样器280-A到280-K。 在一个实施例中,例如当开发驱动器模块时,可以离线地生成纹理采样器280-A到280-K。在框320,可以在采样器状态对象创建时,编译用于生成纹理采样器280-A到 280-K的着色器采样器。在其它实施例中,可以根据需要来创建着色器采样器。在一个实施 例中,例如如果对于绘制命令需要采样操作,那么可以根据需要创建特定的采样操作。在框330,可以使用高级着色器编译器将纹理采样器280-A到280-K编译为目标 机器代码。在一个实施例中,可以使用目标机器编译器将纹理采样器280-A到280-K编译 为目标机器代码。在一个实施例中,可以使用高级顶点着色器编译器将纹理采样器280-A、 280-B和280-K编译为目标机器代码。类似地,可以使用着色器230到270的高级着色器编 译器将纹理着色器280-A到280-K中的一个或多个编译为目标机器代码。在框340,可以调用着色器220到270。在一个实施例中,可以调用例如顶点着色 器220、外壳着色器230、域着色器250、几何着色器260和像素着色器270这样的着色器。在框360,可以由着色器来调用一个或多个纹理采样器280-A到280-K。在一个实 施例中,响应于从顶点着色器220进行的调用,纹理采样器280-A、280-B和280-K可以执行 采样操作并且可以生成纹理采样。在一个实施例中,外壳着色器230可以调用纹理采样器 280-A和280-B,域着色器250可以调用纹理采样器280-B,几何着色器260可以调用纹理采 样器280-A和280-K,并且像素着色器270可以调用纹理采样器280-B和280-K。在框380,纹理采样器280-A到280-K可以使用存储器190内的纹理缓冲区中存储 的纹理数据来生成纹理采样。在一个实施例中,纹理采样器280-A可以执行采样操作,以使 用例如在一个或多个纹理缓冲区290-C到290-F中存储的纹理数据来生成纹理采样。在一个实施例中,纹理采样器280-B可以执行采样操作以使用在纹理缓冲区290-D中存储的纹 理数据来生成纹理采样,并且可以将纹理采样提供给像素着色器270。在框390,可以由着色器220到270使用由纹理采样器280-A到280-K生成的纹理 采样,以在图形元素上创建着色效果。在一个实施例中,顶点着色器220可以接收单个顶点 值并且在顶点上创建着色效果。在一个实施例中,几何着色器260可以接收整个图元,并且 可以在整个图元上创建阴影效果。在一个实施例中,像素着色器270可以在像素或点(或 光栅图像)上生成阴影效果。在图4中对描述了生成并且使用纹理采样器的流程图400的实施例进行说明,所 述纹理采样器是使用高级着色语言实现的。在一个实施例中,流程图400描述了三个阶 段——阶段401、阶段411和阶段481。在一个实施例中,阶段401可以表示离线阶段,阶段 411可以表示准备阶段,并且阶段481可以表示渲染阶段。在一个实施例中,阶段401可以包括纹理采样器生成块410。在一个实施例中,纹 理采样器生成块410可以指例如纹理采样器280-A到280-K这样的纹理采样器的生成,纹 理采样器可以离线地生成并且可以使用例如Cg、HLSL或GLSL这样的高级着色语言生成,如 在框310中所描述的。在一个实施例中,阶段411可以包括采样器状态块415、创建采样器块420、着色器 编译器块445、编译采样器块450和采样器着色器二进制代码(SS-BIN)块470。在一个实施 例中,采样器状态块415可以表示输入数据值。在一个实施例中,块415的输入数据值可以 确定由块410的纹理采样执行的采样操作。块420描述了创建纹理采样器块,其响应于从 块410接收到纹理采样器代码和从块415接收到输入数据值,创建纹理采样器,例如280-A 到 280-K。块445描述了着色器编译器块,其可以获取在抽象层次的纹理采样器的着色语 言,并且将纹理采样器代码编译为另一抽象层次。在一个实施例中,着色器编译器块445可 以从创建纹理采样器块420获取纹理采样器代码,并且可以引起纹理采样器代码的编译, 如在编译采样器着色器块450中所描述的。在一个实施例中,在块420,可以使用高级着色语言来创建纹理采样器代码,并且 编译采样器着色器块450可以编译纹理采样器代码并且生成中间代码,例如汇编语言代 码。在一个实施例中,编译采样器着色器块450还可以包括机器专用着色器编译器,例如图 形着色器编译器或中央处理单元(CPU)着色器编译器,其可以将汇编语言的中间代码编译 为机器专用代码。在一个实施例中,图形处理单元或中央处理单元可以支持机器专用代码 的执行。块470描述了采样器着色器二进制代码块(SS-BIN),其可以通过由块450执行的 编译而被创建。在一个实施例中,可以在渲染阶段由着色器来使用采样器着色器二进制代 码(SS-BIN)。在一个实施例中,阶段481可以表示渲染阶段,在该阶段,在着色器向图形元素提 供着色效果之后,在显示设备上渲染图形元素,例如顶点或整个图元。在一个实施例中,阶 段481可以包括着色器调用块485、执行着色器块490和调用SS-BIN块495。在一个实施 例中,着色器调用块485可以调用着色器,例如顶点着色器220、外壳着色器230、域着色器 250、几何着色器260和像素着色器270,如在框340中所描述的。
10
在一个实施例中,执行着色器块490可以使得着色器220到270的二进制代码被 执行。在一个实施例中,图形处理单元可以支持着色器220到270的二进制代码的执行。在 一个实施例中,调用SS-BIN块495可以调用一个或多个纹理采样器280-A到280-K的二进 制文件。在一个实施例中,如果块490可以执行顶点着色器220,那么块495可以调用纹理 采样器280-A、280-B和280-K的SS-BIN。在一个实施例中,如果块490可以执行外壳着色 器230,那么块495可以调用纹理采样器280-A和280-B的SS-BIN。在一个实施例中,如果 块490可以执行域着色器250,那么块495可以调用纹理采样器280-B的SS-BIN。在一个 实施例中,如果块490可以执行几何着色器260,那么块495可以调用纹理采样器280-A和 280-K的SS-BIN。在一个实施例中,如果块490执行像素着色器150,那么块495可以调用 纹理采样器280-B和280-K的SS-BIN。在一个实施例中,纹理采样器280-A到280-K响应于从着色器220到270接收到 调用,可以执行对纹理数据的纹理采样操作,并且可以生成纹理采样。在一个实施例中,纹 理采样可以被着色器用于在图形元素上创建阴影效果。参照图5,计算机系统500可以包括通用处理器502和图形处理器单元(GPU) 505, 通用处理器502包括单指令多数据(SIMD)处理器。在一个实施例中,处理器502除了执行 各种其它任务之外还可以执行增强操作,或者可以在机器可读存储介质525中存储指令的 序列以提供增强操作。但是,指令的序列还可以被存储在存储器520中或存储在任何其它 合适的存储介质中。在一个实施例中,可以由处理器502或GPU 505来支持图形应用程序 接口 GPI 510。虽然在图5中描述了独立的图形处理器单元GPU 505,但是在一些实施例中,作为 另一个示例,处理器502可以用于执行增强操作。操作计算机系统500的处理器502可以 是耦合到逻辑530的一个或多个处理器核心。逻辑530可以耦合到一个或多个I/O设备 560,其可以提供计算机系统500的接口。在一个实施例中,逻辑530例如可以是芯片组逻 辑。逻辑530耦合到存储器520,其可以是任何类型的存储设备,包括光存储、磁存储或半导 体存储。图形处理器单元505通过帧缓冲器耦合到显示器540。在一个实施例中,可以在处理器502内提供图形应用程序接口(GPI)510。但是, 在其它实施例中,可以在GPU 505内提供(由虚线示出)图形应用程序接口(GPI)510。在 一个实施例中,GPI 510可以支持3D管线并且可以使用高级着色语言来实现纹理采样器。 在一个实施例中,GPI 510可以离线地并且使用高级着色语言来实现纹理采样器280-A到 280-K,并且可以基于目标机器来编译如此实现的纹理采样器280-A到280-K。在一个实施 例中,可以由一个或多个着色器220到270来调用纹理采样器280-A到280-K,以得到纹理 采样。在一个实施例中,着色器220到270可以使用由纹理采样器280-A到280-K生成的 纹理采样,以在图形元素上创建阴影效果。可以用各种硬件架构来实现本文描述的图形处理技术。例如,可以在芯片组内集 成图形功能。或者,可以使用独立的图形处理器。作为另一个实施例,可以由通用处理器 (包括多核处理器)来实现图形功能,或将图形功能实现为在机器可读介质中存储的一组 软件指令。
权利要求
一种用于执行纹理采样的方法,包括使用着色语言来实现纹理采样器,通过基于提供给所述纹理采样器的输入值将所述纹理采样器编译为目标机器,从而生成纹理采样器二进制代码,当调用多个着色器中的第一着色器时,至少从所述第一着色器调用所述纹理采样器二进制代码,以及当由所述第一着色器和第二着色器调用所述纹理采样器时,使用由所述纹理采样器生成的第一组采样在图形元素上生成着色效果,其中,所述图形元素包括线和三角形的顶点。
2.根据权利要求1所述的方法,还包括当调用所述多个着色器中的第二着色器时,至少从所述第二着色器调用所述纹理采样 器二进制代码,以及当由所述第二着色器调用所述纹理采样器时,使用由所述纹理采样器生成的第二组采 样在图形元素上生成着色效果。
3.根据权利要求1所述的方法,其中,在准备阶段之前的离线阶段中,执行使用着色语 言来实现所述纹理采样器。
4.根据权利要求3所述的方法,还包括在准备阶段,基于离线实现的纹理采样器代码 和采样器状态输入值来创建所述纹理采样器,其中,所述采样器状态输入值确定由所述纹 理采样器执行的采样操作。
5.根据权利要求4所述的方法,其中,将所述纹理采样器编译为目标机器包括使用着色器编译器,从用所述着色语言实现的所述纹理采样器生成中间语言代码,以及使用机器专用着色器编译器,从所述中间语言生成机器级代码。
6.根据权利要求5所述的方法,其中,所述着色语言是高级语言并且所述中间语言是 汇编级语言。
7.根据权利要求7所述的方法,还包括当在渲染阶段执行所述第一着色器时,从所述 第一着色器调用所述纹理采样器二进制代码。
8.根据权利要求1所述的方法,还包括当在渲染阶段执行所述第二着色器时,从所述 第二着色器调用所述纹理采样器二进制代码。
9.根据权利要求1所述的方法,还包括将第一纹理采样器关联到第一着色器和所述 第二着色器,其中,所述第一纹理采样器用于为所述第一着色器和所述第二着色器生成采 样。
10.一种机器可读存储介质,其包括多条指令,响应于执行所述指令,导致处理器使用着色语言来实现纹理采样器,通过基于采样器状态和采样器操作将所述纹理采样器编译为目标机器,从而生成纹理 采样器二进制代码,当调用第一着色器时,从所述第一着色器调用所述纹理采样器二进制代码,以及当由所述第一着色器调用所述纹理采样器时,使用由所述纹理采样器生成的第一组采 样在图形元素上生成着色效果,其中,所述图形元素包括线和三角形的顶点。
11.根据权利要求10所述的机器可读存储介质,还包括当调用第二着色器时,从所述第二着色器调用所述纹理采样器二进制代码,以及 当由所述第二着色器调用所述纹理采样器时,使用由所述纹理采样器生成的第二组采 样在图形元素上生成着色效果。
12.根据权利要求11所述的机器可读存储介质,其中,在准备阶段之前的离线阶段中, 执行使用着色语言来实现所述纹理采样器。
13.根据权利要求12所述的机器可读存储介质,还包括在准备阶段,基于离线实现的 纹理采样器代码和采样器状态输入值来创建所述纹理采样器,其中,所述采样器状态输入 值确定由所述纹理采样器执行的采样操作。
14.根据权利要求13所述的机器可读存储介质,其中,将所述纹理采样器编译为目标 机器包括使用着色器编译器,从用所述着色语言实现的所述纹理采样器生成中间语言代码,以及使用机器专用着色器编译器,从所述中间语言生成机器级代码。
15.根据权利要求14所述的机器可读存储介质,其中,所述着色语言是高级语言并且 所述中间语言是汇编级语言。
16.根据权利要求10所述的机器可读存储介质,还包括当在渲染阶段执行所述第一 着色器时,从所述第一着色器调用所述纹理采样器二进制代码。
17.根据权利要求10所述的机器可读存储介质,还包括当在渲染阶段执行所述第二 着色器时,从所述第二着色器调用所述纹理采样器二进制代码。
18.根据权利要求10所述的机器可读存储介质,还包括将第一纹理采样器和第二纹 理采样器关联到第一着色器,并且将第二纹理采样器和第三纹理采样器关联到所述第二着 色器。
19.一种系统,包括处理器,其中,所述处理器用于支持多个图形应用以及一个或多个图形应用可编程接Π,图形处理单元,以及存储器,其耦合到所述处理器和所述图形处理单元,其中,所述图形应用可编程接口包括使用着色语言实现的一个或多个纹理采样器, 其中,通过基于采样器状态和采样器操作将所述纹理采样器编译为目标机器,从而生 成纹理采样器二进制代码,其中,当调用第一着色器时,从所述第一着色器调用所述纹理采样器二进制代码,以及 其中,当由所述第一着色器调用所述纹理采样器时,使用由所述纹理采样器生成的第 一组采样在图形元素上生成着色效果,其中,所述图形元素包括线和三角形的顶点。
20.根据权利要求19所述的系统,其中,所述存储器包括用于存储纹理数据的一个或 多个缓冲区,其中,所述一个或多个纹理采样器从所述一个或多个缓冲区获取数据值,并且 生成纹理采样。
21.根据权利要求19所述的系统,其中,在准备阶段之前的离线阶段中,执行使用着色 语言来实现所述纹理采样器。
22.根据权利要求21所述的系统,其中,在准备阶段,基于离线实现的纹理采样器代码和采样器状态输入值来创建所述纹理采样器,其中,所述采样器状态输入值确定由所述纹 理采样器执行的采样操作。
23.根据权利要求22所述的系统,其中,将所述纹理采样器编译为目标机器包括使用着色器编译器,从用所述着色语言实现的所述纹理采样器生成中间语言代码,以及使用机器专用着色器编译器,从所述中间语言生成机器级代码,其中,所述着色语言是高级语言并且所述中间语言是汇编级语言。
24.根据权利要求18所述的系统,还包括当在渲染阶段中执行所述第一着色器时,从所述第一着色器调用所述纹理采样器二进 制代码,以及当在渲染阶段中执行所述第二着色器时,从所述第二着色器调用所述纹理采样器二进 制代码。
25.根据权利要求19所述的系统,还包括将第一纹理采样器和第二纹理采样器关联到所述第一着色器,以及将所述第一纹理采样器和第三纹理采样器关联到所述第二着色器,其中,所述第一纹 理采样器用于为所述第一着色器和所述第二着色器生成采样,其中,所述第二纹理采样器 用于为所述第一着色器生成采样,并且所述第三纹理采样器用于为所述第二着色器生成采 样。
26.根据权利要求19所述的系统,其中,所述图形处理单元用于支持所述图形应用可 编程接口,其中,所述图形应用可编程接口包括图形可编程管线,其中,所述图形可编程管线还包 括多个着色器和使用着色语言实现的一个或多个纹理采样器,其中,通过基于提供给所述一个或多个纹理采样器的输入值将所述一个或多个纹理采 样器编译为目标机器,从而生成所述一个或多个纹理采样器的纹理采样器二进制代码,其中,当调用多个着色器中的至少一个时,从所述多个着色器中的所述至少一个调用 所述纹理采样器二进制代码,以及其中,当由所述多个着色器中的所述至少一个调用所述一个或多个纹理采样器时,所 述一个或多个纹理采样器生成纹理采样,其中,所述多个纹理采样器中的所述至少一个使 用所述纹理采样以在图形元素上生成着色效果,其中,所述图形元素包括线和三角形的顶 点以及点。全文摘要
使用着色语言来实现纹理采样器。着色器编译器用于基于提供给纹理采样器的采样器状态、采样器操作以及其它静态要素输入值将纹理采样器编译为目标机器。当调用着色器时,诸如顶点着色器、几何着色器、像素着色器、外壳着色器、域着色器和计算着色器这样的着色器可以调用一个或多个纹理采样器。作为一段软件代码的一个或多个纹理采样器可以根据纹理数据生成纹理采样,并且将这种纹理采样提供给着色器。着色器使用纹理采样在图形元素上生成着色效果。然后,将图形元素连同着色效果渲染在显示设备上。
文档编号G06T1/00GK101937556SQ20101022086
公开日2011年1月5日 申请日期2010年6月29日 优先权日2009年6月29日
发明者P·罗森菲尔德, U·萨雷 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1