图形处理器流水线中的高速缓存和压缩互操作性的制作方法

文档序号:17439754发布日期:2019-04-17 04:36阅读:163来源:国知局
图形处理器流水线中的高速缓存和压缩互操作性的制作方法
实施例总体上涉及用于执行图形处理操作的逻辑。更具体地,实施例涉及用于图形处理器的高速缓存和压缩逻辑。
背景技术
:在图形处理单元(gpu)中,在能量和等待时间方面,通过存储器总线的交易可能花费的比计算要多若干个数量级。因此,图形处理架构包括在执行附加计算以减少通过存储器总线传递的数据量之间的诸多折衷,这是通常在图形处理单元(gpu)中找到的缓冲器压缩算法背后的动机。压缩算法可以用于在通过总线传输之前压缩数据,并且还可以用于对将被存储在一个或多个高速缓存存储器内的数据进行压缩。虽然执行压缩算法可能需要附加的逻辑或附加的计算周期,但是由于传输数据所需的存储器总线带宽减少以及高速缓存存储器的存储效率提高,可能导致功耗和等待时间的减少。因此,即使在过程中执行了附加的逻辑操作,在gpu流水线内实施压缩也可以降低功率并提高性能。附图说明通过阅读以下说明书和所附权利要求书,并且通过参考以下附图,实施例的各种优点对于本领域技术人员将变得显而易见,在附图中:图1是具有处理器的计算机系统的实施例的框图,所述处理器具有一个或多个处理器核以及图形处理器;图2是处理器的一个实施例的框图,所述处理器具有一个或多个处理器核、集成存储器控制器、以及集成图形处理器;图3是图形处理器的一个实施例的框图,所述图形处理器可以是分立的图形处理单元、或者可以是集成有多个处理核的图形处理器;图4是用于图形处理器的图形处理引擎的实施例的框图;图5是图形处理器的另一实施例的框图;图6是包括处理元件阵列的线程执行逻辑的框图;图7展示了根据实施例的图形处理器执行单元指令格式;图8是图形处理器的另一实施例的框图,所述图形处理器包括图形流水线、媒体流水线、显示引擎、线程执行逻辑、以及渲染输出流水线;图9a是框图,展示了根据实施例的图形处理器命令格式;图9b是框图,展示了根据实施例的图形处理器命令序列;图10展示了根据实施例的数据处理系统的示例性图形软件架构;图11是框图,展示了根据实施例的可以用于制造用于执行操作的集成电路的ip核开发系统;图12是框图,展示了根据实施例的可以使用一个或多个ip核来制造的示例性芯片上系统集成电路;图13是框图,展示了芯片上系统集成电路的示例性图形处理器;图14是框图,展示了芯片上系统集成电路的附加示例性图形处理器;图15是根据实施例的图形处理器的框图;图16是根据实施例的图形处理系统的框图;图17a至图17b展示了用于只读表面数据的无损压缩的示例性逻辑;图18a至图18b展示了组合无损压缩与有损压缩的一个示例;图19是根据实施例的使用有保证比率的压缩的高速缓存占用量减少的框图;图20是其中启用了上下文敏感高速缓存替换的示例性高速缓存层级结构的框图;图21是根据实施例的上下文敏感高速缓存替换逻辑的流程图;图22是根据实施例的用于高效δ编码的硬件乘法器单元的框图;并且图23是根据实施例的图形系统的框图。具体实施方式本文所描述了若干实施例,这些实施例提供了增强的数据高速缓存结合自适应且动态的压缩,以在从gpu进行输入和输出期间提高存储效率并减少数据传输带宽。本文所描述的技术可以减少访问芯片外存储器的需要,从而引起性能改善并且gpu操作功率降低。出于解释的目的,阐述了许多具体的细节以便提供对以下所述的各实施例的透彻理解。然而,对于本领域技术人员而言,可以在不具有这些具体细节中的一些细节的情况下实践本实施例将是明显的。在其他情况下,以框图的形式示出公知的结构和设备以避免模糊基本原理并提供对实施例的更透彻的理解。尽管以下实施例中的一些引用图形处理器来描述,但是本文所描述的技术和教导可适用于各种类型的电路或半导体设备,包括通用处理设备或图形处理设备。本文对“一个实施例(oneembodiment)”或“实施例(anembodiment)”的引用指示结合所述实施例或与所述实施例相关联地描述的具体特征、结构或特性可以被包括在这类实施例中的至少一个实施例中。然而,说明书中各种地方出现的短语“在一个实施例中(inoneembodiment)”不一定全都指代相同的实施例。在以下说明书和权利要求书中,可以使用术语“耦合”和“连接”及其衍生词。应当理解,这些术语并不意为彼此的同义词。“耦合”用于指示彼此协作或相互作用的彼此之间可能或可能不直接物理或电接触的两个或更多个元件。“连接”用于指示彼此耦合的两个或更多个元件之间的通信的建立。在接下来的说明中,图1至图14提供了对结合各个实施例或与其相关的示例性数据处理系统和图形处理器逻辑的概述。图15至图23提供了各个实施例的具体细节。以下实施例的一些方面是参照图形处理器进行描述的,而其他方面是关于如中央处理单元(cpu)等通用处理器进行描述的。类似的技术和教导可以应用于其他类型的电路或半导体器件,包括但不限于集成众核处理器、gpu集群、或现场可编程门阵列(fpga)的一个或多个实例。一般而言,这些教导适用于对图像(例如,样本、像素)、顶点数据、或几何数据进行操控或处理的任何处理器或机器。系统概述图1是根据实施例的处理系统100的框图。在各实施例中,系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单处理器台式系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,系统100是被并入用于在移动设备、手持式设备或嵌入式设备内使用的芯片上系统(soc)集成电路内的处理平台。系统100的实施例可以包括基于服务器的游戏平台、游戏控制台,或被并入基于服务器的游戏平台、游戏控制台内,该游戏控制台包括游戏与媒体控制台、移动游戏控制台、手持式游戏控制台、或在线游戏控制台。在一些实施例中,系统100是移动电话、智能电话、平板计算设备或移动互联网设备。数据处理系统100还可以包括可穿戴设备、与可穿戴设备耦合、或者集成在可穿戴设备中,该可穿戴设备诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备、或虚拟现实设备。在一些实施例中,数据处理系统100是电视或机顶盒设备,该电视或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。在一些实施例中,一个或多个处理器102各自包括用于处理指令的一个或多个处理器核107,这些指令在被执行时执行系统和用户软件的操作。在一些实施例中,一个或多个处理器核107中的每个处理器核被配置成用于处理特定的指令集109。在一些实施例中,指令集109可促进复杂指令集计算(cisc)、精简指令集计算(risc)、或经由超长指令字(vliw)的计算。多个处理器核107可各自处理不同的指令集109,该指令集109可包括用于促进对其他指令集进行仿真的指令。处理器核107还可包括其他处理设备,诸如,数字信号处理器(dsp)。在一些实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多个层级的内部高速缓存。在一些实施例中,在处理器102的各部件之间共享高速缓存存储器。在一些实施例中,处理器102还使用外部高速缓存(例如,第3级(l3)高速缓存或末级高速缓存(llc))(未示出),可使用已知的高速缓存一致性技术在处理器核107之间共享外部高速缓存。另外,寄存器堆106被包括在处理器102中,该处理器102可包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器、以及指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可特定于处理器102的设计。在一些实施例中,处理器102耦合至处理器总线110,以在处理器102与系统100中的其他部件之间传输诸如地址、数据、或控制信号之类的通信信号。在一个实施例中,系统100使用示例性“中枢”系统架构,该示例性“中枢”系统架构包括存储器控制器中枢116和输入输出(i/o)控制器中枢130。存储器控制器中枢116促进存储器设备与系统100的其他部件之间的通信,而i/o控制器中枢(ich)130提供经由本地i/o总线至i/o设备的连接。在一个实施例中,存储器控制器中枢116的逻辑被集成在处理器内。存储器设备120可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备、相变存储器设备、或具有合适的性能以充当进程存储器的某种其他存储器设备。在一个实施例中,存储器设备120可以作为系统100的系统存储器来进行操作,以存储数据122和指令121,以供在一个或多个处理器102执行应用或进程时使用。存储器控制器中枢116还与任选的外部图形处理器112耦合,该任选的外部图形处理器112可与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。在一些实施例中,ich130启用外围设备以经由高速i/o总线连接到存储器设备120和处理器102。i/o外围设备包括但不限于音频控制器146、固件接口128、无线收发机126(例如,wi-fi、蓝牙)、数据存储设备124(例如,硬盘驱动器、闪存等)以及用于将传统(legacy)(例如,个人系统2(ps/2))设备耦合至系统的传统i/o控制器。一个或多个通用串行总线(usb)控制器142连接输入设备,这些输入设备诸如键盘和鼠标144的组合。网络控制器134还可耦合至ich130。在一些实施例中,高性能网络控制器(未示出)耦合至处理器总线110。将会领会,所示的系统100是示例性的而非限制性的,因为也可使用以不同方式配置的其他类型的数据处理系统。例如,i/o控制器中枢130可被集成在一个或多个处理器102内,或者存储器控制器中枢116和i/o控制器中枢130可被集成到诸如外部图形处理器112之类的分立的外部图形处理器中。图2是处理器200的实施例的框图,该处理器200具有一个或多个处理器核202a-202n、集成存储器控制器214、以及集成图形处理器208。图2的具有与本文中任何其他附图的元件相同的附图标记(或名称)的那些元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。处理器200可包括附加核,这些附加核多达且包括由虚线框表示的附加核202n。处理器核202a-202n中的每一个都包括一个或多个内部高速缓存单元204a-204n。在一些实施例中,每个处理器核还可访问一个或多个共享高速缓存单元206。内部高速缓存单元204a-204n和共享高速缓存单元206表示处理器200内的高速缓存存储器层级结构。高速缓存存储器层级结构可包括每个处理器核内的至少一个层级的指令和数据高速缓存、以及一个或多个层级的共享中级高速缓存,诸如,第2级(l2)、第3级(l3)、第4级(l4)、或其他层级的高速缓存,其中,在外部存储器之前的最高层级的高速缓存被分类为llc。在一些实施例中,高速缓存一致性逻辑维持各高速缓存单元206与204a-204n之间的一致性。在一些实施例中,处理器200还可包括一组一个或多个总线控制器单元216和系统代理核210。一个或多个总线控制器单元216管理一组外围总线,诸如,一个或多个外围部件互连总线(例如,pci、pci快速)。系统代理核210提供对各处理器部件的管理功能。在一些实施例中,系统代理核210包括一个或多个集成存储器控制器214,以管理对各外部存储器设备(未示出)的访问。在一些实施例中,处理器核202a-202n中的一个或多个包括对同步多线程的支持。在此类实施例中,系统代理核210包括用于在多线程处理期间对核202a-202n进行协调和操作的部件。系统代理核210可附加地包括功率控制单元(pcu),该功率控制单元包括用于调节处理器核202a-202n以及图形处理器208的功率状态的逻辑和部件。在一些实施例中,处理器200附加地包括用于执行图形处理操作的图形处理器208。在一些实施例中,图形处理器208与共享高速缓存单元的集合206以及系统代理核210耦合,该系统代理核210包括一个或多个集成存储器控制器214。在一些实施例中,显示控制器211与图形处理器208耦合,以将图形处理器输出驱动到一个或多个耦合的显示器。在一些实施例中,显示控制器211可以是经由至少一个互连与图形处理器耦合的分开的模块,或者可被集成在图形处理器208或系统代理核210内。在一些实施例中,基于环的互连单元212用于耦合处理器200的内部部件。然而,可使用替代的互连单元,诸如,点对点互连、切换式互连、或其他技术,包括本领域公知的技术。在一些实施例中,图形处理器208经由i/o链路213与环形互连212耦合。示例性i/o链路213表示各种各样的i/o互连中的至少一者,包括促进各处理器部件与高性能嵌入式存储器模块218(诸如,edram模块)之间的通信的封装上i/o互连。在一些实施例中,处理器核202-202n中的每个处理器核以及图形处理器208将嵌入式存储器模块218用作共享末级高速缓存。在一些实施例中,处理器核202a-202n是执行同一指令集架构的同构核。在另一实施例中,处理器核202a-202n就指令集架构(isa)而言是异构的,其中,处理器核202a-n中的一者或多者执行第一指令集,而其他核中的至少一者执行第一指令集的子集或不同的指令集。在一个实施例中,处理器核202a-202n就微架构而言是同质的,其中,具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。另外,处理器200可被实现在一个或多个芯片上或者被实现为除其他部件之外还具有所图示的部件的soc集成电路。图3是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元、或者可以是与多个处理核集成的图形处理器。在一些实施例中,图形处理器经由至图形处理器上的寄存器的存储器映射的i/o接口并且利用被置入处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存、和/或到系统存储器的接口。在一些实施例中,图形处理器300还包括用于将显示输出数据驱动到显示设备320的显示控制器302。显示控制器302包括用于显示器的一个或多个重叠平面以及视频或用户接口元件的多个层的组合的硬件。在一些实施例中,图形处理器300包括视频编解码器引擎306,以将媒体编码、解码或转码为一种或多种媒体编码格式,从一种或多种媒体编码格式编码、解码或转码媒体,或在一种或多种媒体编码格式之间进行对媒体进行编码、解码或转码,这些媒体编码格式包括但不限于:运动图像专家组(mpeg)格式(诸如,mpeg-2)、高级视频译码(avc)格式(诸如,h.264/mpeg-4avc)、以及电影&电视工程师协会(smpte)421m/vc-1、和联合图像专家组(jpeg)格式(诸如,jpeg、以及运动jpeg(mjpeg)格式)。在一些实施例中,图形处理器300包括用于执行包括例如位边界块传递的二维(2d)光栅化器操作的块图像传递(blit)引擎304。然而,在一个实施例中,使用图形处理引擎(gpe)310的一个或多个部件执行2d图形操作。在一些实施例中,图形处理引擎310是用于执行图形操作的计算引擎,这些图形操作包括三维(3d)图形操作和媒体操作。在一些实施例中,gpe310包括用于执行3d操作的3d流水线312,3d操作诸如,使用作用于3d图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3d流水线312包括可编程的固定功能元件,这些可编程的固定功能元件执行元件内的各种任务和/或将执行线程生成(spawn)至3d/媒体子系统315。虽然3d流水线312可以用于执行媒体操作,但是gpe310的实施例还包括专门用于执行诸如视频后处理和图像增强之类的媒体操作的媒体流水线316。在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元以便代替、或代表视频编解码器引擎306来执行一种或多种专业的媒体操作,诸如,视频解码加速、视频解交织、以及视频编码加速。在一些实施例中,媒体流水线316附加地包括用于生成供在3d/媒体子系统315上执行的线程的线程生成单元。所生成的线程对3d/媒体子系统315中所包括的一个或多个图形执行单元执行对媒体操作的计算。在一些实施例中,3d/媒体子系统315包括用于执行由3d流水线312和媒体流水线316生成的线程的逻辑。在一个实施例中,流水线向3d/媒体子系统315发送线程执行请求,该3d/媒体子系统包括用于仲裁并将各请求分派到可用的线程执行资源的线程分派逻辑。执行资源包括用于处理3d和媒体线程的图形执行单元阵列。在一些实施例中,3d/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括用于在线程之间共享数据并用于存储输出数据的共享存储器,包括寄存器和可寻址存储器。3d/媒体处理图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,gpe410是图3中所示出的gpe310的一个版本。图4的具有与本文中任何其他附图的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。在一些实施例中,gpe410与命令流转化器(commandstreamer)403耦合,该命令流转化器403将命令流提供至gpe3d和媒体流水线412、416。在一些实施例中,命令流转化器403耦合至存储器,该存储器可以是系统存储器、或者内部高速缓存存储器和共享高速缓存存储器中的一者或多者。在一些实施例中,命令流转化器403从存储器接收命令,并且将这些命令发送至3d流水线412和/或媒体流水线416。这些命令是从环形缓冲器中取出的指示,该环形缓冲器存储用于3d和媒体流水线412、416的命令。在一个实施例中,环形缓冲器可以附加地包括存储多批多个命令的批命令缓冲器。3d和媒体流水线412、416通过以下方式来处理命令:经由相应流水线内的逻辑来执行操作;或将一个或多个执行线程分派给执行单元阵列414。在一些实施例中,执行单元阵列414是可缩放的,以使得该阵列包括基于gpe410的目标功率和性能水平的可变数量的执行单元。在一些实施例中,采样引擎430与存储器(例如,高速缓存存储器或系统存储器)以及执行单元阵列414耦合。在一些实施例中,采样引擎430提供用于执行单元阵列414的存储器访问机制,该存储器访问机制允许执行阵列414从存储器读取图形和媒体数据。在一些实施例中,采样引擎430包括用于为媒体执行专业图像采样操作的逻辑。在一些实施例中,采样引擎430中的专业媒体采样逻辑包括去噪/解交织模块432、运动估计模块434以及图像缩放和过滤模块436。在一些实施例中,去噪/解交织模块432包括用于对经解码的视频数据执行去噪或解交织算法中的一者或多者的逻辑。解交织逻辑将经交织的视频内容的交替场(alternatingfield)组合为单个视频帧。去噪逻辑降低或移除来自视频和图像数据的数据噪声。在一些实施例中,去噪逻辑和解交织逻辑是运动自适应的,并且基于在视频数据中检测到的运动量来使用空间或时域过滤。在一些实施例中,去噪/解交织模块432包括专用运动检测逻辑(例如,在运动估计引擎434内)。在一些实施例中,运动估计引擎434通过对视频数据执行视频加速功能(诸如,运动向量估计和预测)来提供对视频操作的硬件加速。运动估计引擎确定描述图像数据在连续的视频帧之间的变换的运动向量。在一些实施例中,图形处理器媒体编解码器(codec)使用视频运动估计引擎434以在宏块层级上对视频执行操作,在宏块层级上对视频的操作否则对于利用通用处理器来执行可能是过于计算密集的。在一些实施例中,运动估计引擎434一般可用于图形处理器部件以辅助视频解码和处理功能,该视频解码和处理功能对视频数据内的运动的方向或幅度是敏感的或自适应于视频数据内的运动的方向或幅度。在一些实施例中,图像缩放和过滤模块436执行图像处理操作以增强所生成的图像和视频的视觉质量。在一些实施例中,缩放和过滤模块436在将数据提供至执行单元阵列414之前的采样操作期间处理图像和视频数据。在一些实施例中,gpe410包括数据端口444,该数据端口444为图形子系统提供用于访问存储器的附加机制。在一些实施例中,数据端口444促进用于包括以下各项的操作的存储器访问:渲染目标写入、恒定缓冲器读取、抓取存储器空间读取/写入,以及媒体表面访问。在一些实施例中,数据端口444包括用于对存储器的访问进行高速缓存的高速缓存存储器空间。高速缓存存储器可以是单个数据高速缓存,或者可被分离成用于经由数据端口来访问存储器的多个子系统的多个高速缓存(例如,渲染缓冲器高速缓存、恒定缓冲器高速缓存等)。在一些实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由数据分配互连交换消息来与数据端口通信,该数据分配互连耦合gpe410的子系统中的每个子系统。执行单元图5是图形处理器500的另一实施例的框图。图5的具有与本文中的任何其他附图的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。在一些实施例中,图形处理器500包括环形互连502、流水线前端504、媒体引擎537和图形核580a-580n。在一些实施例中,环形互连502将图形处理器耦合至其他处理单元,其他处理单元包括其他图形处理器或者一个或多个通用处理器核。在一些实施例中,图形处理器是集成在多核处理系统内的许多处理器中的一个。在一些实施例中,图形处理器500经由环形互连502接收多批命令。传入的命令由流水线前端504中的命令流转化器503解释。在一些实施例中,图形处理器500包括用于经由(多个)图形核580a-580n来执行3d几何处理和媒体处理的可缩放执行逻辑。对于3d几何处理命令,命令流转化器503将命令供应至几何流水线536。对于至少一些媒体处理命令,命令流转化器503将命令供应至视频前端534,该视频前端534与媒体引擎537耦合。在一些实施例中,媒体引擎537包括用于视频和图像后处理的视频质量引擎(vqe)530以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(mfx)533引擎。在一些实施例中,几何流水线536和媒体引擎537各自生成用于由至少一个图形核580a提供的线程执行资源的执行线程。在一些实施例中,图形处理器500包括可缩放线程执行资源,这些可缩放线程执行资源以模块化核580a-580n(有时称为核片(coreslice))为特征,这些模块化核各自具有多个子核550a-550n、560a-560n(有时称为核子片(coresub-slice))。在一些实施例中,图形处理器500可具有任何数量的图形核580a至580n。在一些实施例中,图形处理器500包括图形核580a,该图形核580a至少具有第一子核550a和第二核子核560a。在其他实施例中,图形处理器是具有单个子核(例如,550a)的低功率处理器。在一些实施例中,图形处理器500包括多个图形核580a-580n,每一个图形核都包括第一子核550a-550n的集合以及第二子核560a-560n的集合。第一子核550a-550n的集合中的每个子核至少包括执行单元552a-552n和媒体/纹理采样器554a-554n的第一集合。第二子核560a-560n的集合中的每一个子核至少包括执行单元562a-562n和采样器564a-564n的第二集合。在一些实施例中,每个子核550a-550n、560a-560n共享共享资源570a-570n的集合。在一些实施例中,共享资源包括共享高速缓存存储器和像素操作逻辑。其他共享资源也可被包括在图形处理器的各实施例中。图6示出线程执行逻辑600,该线程执行逻辑600包括在gpe的一些实施例中采用的处理元件的阵列。图6的具有与本文中任何其他附图的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。在一些实施例中,线程执行逻辑600包括像素着色器602、线程分派器604、指令高速缓存606、包括多个执行单元608a-608n的可缩放执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一个实施例中,所包括的部件经由互连结构被互连,该互连结构链接至这些部件中的每个部件。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608a-608n中的一者或多者而至存储器(诸如,系统存储器或高速缓存存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,608a)是能够为每个线程并行地执行多个同时线程并且处理多个数据元素的单独的向量处理器。在一些实施例中,执行单元阵列608a-608n包括任何数量的单独的执行单元。在一些实施例中,执行单元阵列608a-608n主要用于执行“着色器”程序。在一些实施例中,阵列608a-608n中的执行单元执行包括对许多标准3d图形着色器指令的原生支持的指令集,从而使得以最小的转换执行来自图形库(例如,direct3d和opengl)的着色器程序。这些执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算和媒体着色器)。执行单元阵列608a-608n中的每个执行单元对数据元素阵列进行操作。数据元素的数量是“执行大小”、或指令的通道数量。执行通道是执行数据元素访问、掩码、和指令内的流控制的逻辑单元。通道的数量可与针对特定的图形处理器的物理算术逻辑单元(alu)或浮点单元(fpu)的数量无关。在一些实施例中,执行单元608a-608n支持整数和浮点数据类型。执行单元指令集包括单指令多数据(simd)或单指令多线程(simt)指令。各种数据元素可作为紧缩数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对256位宽的向量进行操作时,该256位的向量被存储在寄存器中,并且执行单元作为四个单独的64位紧缩数据元素(四字(qw)大小的数据元素)、八个单独的32位紧缩数据元素(双字(dw)大小的数据元素)、十六个单独的16位紧缩数据元素(字(w)大小的数据元素)、或三十二个单独的8位数据元素(字节(b)大小的数据元素)对向量进行操作。然而,不同的向量宽度和寄存器大小是可能的。一个或多个内部指令高速缓存(例如,606)被包括在线程执行逻辑600中,以对用于执行单元的线程指令进行高速缓存。在一些实施例中,一个或多个数据高速缓存(例如,612)被包括,以对在线程执行期间的线程数据进行高速缓存。在一些实施例中,采样器610被包括,从而为3d操作提供纹理采样并且为媒体操作提供媒体采样。在一些实施例中,采样器610包括专业的纹理或媒体采样功能,以在向执行单元提供所采样的数据之前在采样过程中处理纹理或媒体数据。在执行期间,图形和媒体流水线经由线程生成和分派逻辑向线程执行逻辑600发送线程发起请求。在一些实施例中,线程执行逻辑600包括本地线程分派器604,该本地线程分派器604仲裁来自图形和媒体流水线的线程发起请求,并且在一个或多个执行单元608a-608n上实例化所请求的线程。例如,几何流水线(例如,图5的536)将顶点处理、曲面细分(tessellation)或几何处理线程分派给线程执行逻辑600(图6)。在一些实施例中,线程分派器604还可以处理来自执行着色器程序的运行时线程生成请求。一旦一组几何对象已经被处理并被光栅化成像素数据,像素着色器602就被调用,以进一步计算输出信息并且使得结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板印刷(stencil)缓冲器等)。在一些实施例中,像素着色器602计算各顶点属性的值,各顶点属性的这些值将跨光栅化的对象被内插。在一些实施例中,像素着色器602随后执行应用编程接口(api)供应的像素着色器程序。为了执行像素着色器程序,像素着色器602经由线程分派器604将线程分派至执行单元(例如,608a)。在一些实施例中,像素着色器602使用采样器610中的纹理采样逻辑来访问存储器中所存储的纹理图中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何片段的像素颜色数据,或丢弃一个或多个像素而不进行进一步处理。在一些实施例中,数据端口614提供存储器访问机制,以供线程执行逻辑600将经处理的数据输出至存储器以便在图形处理器输出流水线上进行处理。在一些实施例中,数据端口614包括或耦合至一个或多个高速缓存存储器(例如,数据高速缓存612),从而对用于经由数据端口进行的存储器访问的数据进行高速缓存。图7是图示出根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有以多种格式的指令的指令集。实线框图示出一般被包括在执行单元指令中的组成部分,而虚线包括任选的或仅被包括在指令子集中的组成部分。在一些实施例中,所描述和图示的指令格式700是宏指令,因为它们是供应至执行单元的指令,这与从一旦指令被处理就进行的指令解码产生的微操作相对照。在一些实施例中,图形处理器执行单元原生地支持采用128位指令格式710的指令。64位紧凑指令格式730可用于基于所选择的指令、多个指令选项和操作数数量的一些指令。原生的128位指令格式710提供对所有指令选项的访问,而一些选项和操作在64位指令格式730中受限。64位指令格式730中可用的原生指令根据实施例而不同。在一些实施例中,使用索引字段713中的一组索引值将指令部分地压缩。执行单元硬件基于索引值来引用一组压缩表,并使用压缩表输出来重构采用128位指令格式710的原生指令。针对每种格式,指令操作码712限定执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行地执行每条指令。例如,响应于添加指令,执行单元跨标识纹理元素或图片元素的每个颜色通道执行同步添加操作。默认地,执行单元跨操作数的所有数据通道执行每条指令。在一些实施例中,指令控制字段714实现对某些执行选项的控制,这些执行选项诸如通道选择(例如,断言)以及数据通道排序(例如,混合)。针对128位指令710,执行大小字段716限制了将并行地执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于64位紧凑指令格式730。一些执行单元指令具有多达三个操作数,包括两个源操作数src0720、src1722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中这些目的地中的一个是隐式的。数据操纵指令可以具有第三源操作数(例如,src2724),其中,指令操作码712确定源操作数的数量。指令的最后的源操作数可以是利用该指令传递的立即数(例如,硬编码的)值。在一些实施例中,128位指令格式710包括访问/地址模式信息726,该访问/地址模式信息726指定例如是使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,由指令710中的位直接提供一个或多个操作数的寄存器地址。在一些实施例中,128位指令格式710包括访问/地址模式字段726,该访问/地址模式字段726指定针对指令的地址模式和/或访问模式。在一个实施例中,访问模式用于限定针对指令的数据访问对齐。一些实施例支持包括16字节对齐访问模式和1字节对齐访问模式的访问模式,其中,访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式时,指令710可将字节对齐的寻址用于源操作数和目的地操作数,并且当处于第二模式时,指令710可将16字节对齐的寻址用于所有的源操作数和目的地操作数。在一个实施例中,访问/地址模式字段726的地址模式部分确定指令要使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令710中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作数的寄存器地址。在一些实施例中,基于操作码712的位字段对指令进行分组从而简化操作码解码740。针对8位的操作码,位4、5、和6允许执行单元确定操作码的类型。所示出的确切的操作码分组仅为示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(msb),其中移动(mov)指令采用0000xxxxb的形式,并且逻辑指令采用0001xxxxb的形式。流控制指令组744(例如,调用(call)、跳转(jmp))包括采用0010xxxxb形式(例如,0x20)的指令。混杂指令组746包括指令的混合,包括采用0011xxxxb形式(例如,0x30)的同步指令(例如,等待(wait)、发送(send))。并行数学指令组748包括采用0100xxxxb形式(例如,0x40)的按分量的算术指令(例如,加(add)、乘(mul))。并行数学组748跨数据通道并行地执行算术运算。向量数学组750包括采用0101xxxxb形式(例如,0x50)的算术指令(例如,dp4)。向量数学组对向量操作数执行算术运算,诸如,点积计算。图形流水线图8是图形处理器800的另一实施例的框图。图8的具有与本文中任何其他附图中的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。在一些实施例中,图形处理器800包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器通过至一个或多个控制寄存器(未示出)的寄存器写入或者经由通过环形互连802发布至图形处理器800的命令而受控。在一些实施例中,环形互连802将图形处理器800耦合至其他处理部件,其他处理部件诸如其他图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解译,该命令流转化器803将指令供应至图形流水线820或媒体流水线830的单独部件。在一些实施例中,命令流转化器803引导顶点获取器805的操作,该顶点获取器805从存储器读取顶点数据并执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831向执行单元852a、852b分派执行线程来执行顶点处理指令。在一些实施例中,执行单元852a、852b是具有用于执行图形和媒体操作的指令集的向量处理器阵列。在一些实施例中,执行单元852a、852b具有专用于每个阵列或在多个阵列之间被共享的附加的l1高速缓存851。高速缓存可以被配置为数据高速缓存、指令高速缓存、或被分区以不同分区中包含数据和指令的单个高速缓存。在一些实施例中,图形流水线820包括用于执行3d对象的硬件加速的曲面细分的曲面细分部件。在一些实施例中,可编程的外壳着色器811配置曲面细分操作。可编程域着色器817提供对曲面细分输出的后端评估。曲面细分器813在外壳着色器811的指示下进行操作,并且包含专用逻辑,该专用逻辑用于基于作为输入被提供至图形流水线820的粗糙的几何模型来生成详细的几何对象的集合。在一些实施例中,如果未使用曲面细分,则可以绕过曲面细分部件811、813、817。在一些实施例中,完整的几何对象可以由几何着色器819经由被分派至所述执行单元852a、852b的一个或多个线程来处理、或者可以直接行进至剪辑器829。在一些实施例中,几何着色器对整个几何对象进行操作,而不是如在图形流水线的先前级中那样对顶点或顶点补片(patch))进行操作。如果禁用曲面细分,则几何着色器819从顶点着色器807接收输入。在一些实施例中,几何着色器819是可由几何着色器程序编程的,以便在曲面细分单元被禁用时执行几何曲面细分。在光栅化之前,剪辑器829处理顶点数据。剪辑器829可以是固定功能剪辑器或者具有剪辑和几何着色器功能的可编程剪辑器。在一些实施例中,渲染输出流水线870中的光栅化器和深度测试部件873分派像素着色器,以将几何对象转换为它们的每像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中,应用可绕过光栅化器873,并且经由流出单元823访问未光栅化的顶点数据。图形处理器800具有允许数据和消息在处理器的主要部件之间传递的互连总线、互连结构或某个其他互连机制。在一些实施例中,执行单元852a、852b和(多个)相关联的高速缓存851、纹理和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856进行互连,以执行存储器访问并且与处理器的渲染输出流水线部件进行通信。在一些实施例中,采样器854、高速缓存851、858以及执行单元852a、852b各自都具有单独的存储器访问路径。在一些实施例中,渲染输出流水线870包含深度测试部件和光栅化器873,该光栅化器和深度测试部件873将基于顶点的对象转换为相关联的基于像素的表示。在一些实施例中,渲染输出流水线870包括用于执行固定功能三角形和线光栅化的窗口器/掩蔽器单元。相关联的渲染高速缓存878和深度高速缓存879在一些实施例中也是可用的。像素操作部件877对数据执行基于像素的操作,然而在一些实例中,与2d操作(例如,利用混合的位块图像传递)相关联的像素操作由2d引擎841执行,或者在显示时间由显示控制器843使用重叠显示平面来代替。在一些实施例中,共享l3高速缓存875可用于所有的图形部件,从而允许在无需使用主系统存储器的情况下共享数据。在一些实施例中,图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834从命令流转化器803接收流水线命令。在一些实施例中,媒体流水线830包括单独的命令流转化器。在一些实施例中,视频前端834在将命令发送至媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎837包括用于生成线程以用于经由线程分派器831分派至线程执行逻辑850的线程生成功能。在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800外部,并且经由环形互连802、或某个其他互连总线或结构与图形处理器耦合。在一些实施例中,显示引擎840包括2d引擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于3d流水线而操作的专用逻辑。在一些实施例中,显示控制器843与显示设备(未示出)耦合,该显示设备可以是系统集成的显示设备(如在膝上型计算机中)、或者经由显示设备连接器附接的外部显示设备。在一些实施例中,图形流水线820和媒体流水线830可被配置成用于基于多个图形和媒体编程接口执行操作,并且并非专用于任何一种应用编程接口(api)。在一些实施例中,图形处理器的驱动器软件将专用于特定图形或媒体库的api调用转换为可由图形处理器处理的命令。在一些实施例中,为来自khronosgroup的开放图形库(opengl)、开放计算语言(opencl),来自微软公司的direct3d库提供支持,或者可向opengl和d3d两者提供支持。还可为开源计算机视觉库(opencv)提供支持。如果可做出从未来api的流水线到图形处理器的流水线的映射,则具有兼容的3d流水线的未来api也将受到支持。图形流水线编程图9a是图示出根据一些实施例的图形处理器命令格式900的框图。图9b是图示出根据实施例的图形处理器命令序列910的框图。图9a中的实线框图示出一般被包括在图形命令中的组成成分,而虚线包括任选的或者仅被包括在图形命令的子集中的组成部分。图9a的示例性图形处理器命令格式900包括用于标识命令的目标客户端902、命令操作代码(操作码)904、以及用于命令的有关数据906的数据字段。一些命令中还包括子操作码905和命令大小908。在一些实施例中,客户端902指定处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段,以调整对命令的进一步处理,并将命令数据路由至合适的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2d单元、3d单元、和媒体单元。每个客户端单元具有对命令进行处理的相应的处理流水线。一旦命令被客户端单元接收到,客户端单元就读取操作码904以及子操作码905(如果存在),从而确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。针对一些命令,期望显式的命令大小908来指定命令的大小。在一些实施例中,命令解析器基于命令操作码自动地确定命令中的至少一些命令的大小。在一些实施例中,经由双字的倍数使命令对齐。图9b中的流程图示出了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的命令序列的版本来启动、执行并终止图形操作集合。仅出于示例性目的示出并描述了样本命令序列,因为实施例并不限于这些特定命令,也不限于此命令序列。而且,所述命令可以作为批量命令以命令序列被发布,以使得图形处理器将以至少部分同时的方式处理命令序列。在一些实施例中,图形处理器命令序列910可开始于:流水线转储清除命令912,以使得任一活跃的图形流水线完成该流水线的当前未决的命令。在一些实施例中,3d流水线922和媒体流水线924不同时进行操作。执行流水线转储清除,以使得活跃的图形流水线完成任何未决的命令。响应于流水线转储清除,用于图形处理器的命令解析器将暂停命令处理,直到活跃的绘图引擎完成未决的操作并且相关的读高速缓存被无效。任选地,渲染高速缓存中被标记为‘脏’的任何数据可以被转储清除到存储器。在一些实施例中,流水线转储清除命令912可以用于流水线同步或者用在将图形处理器置于低功率状态之前。在一些实施例中,当命令序列需要图形处理器在流水线之间显式地切换时,使用流水线选择命令913。在一些实施例中,除非上下文是发布用于这两条流水线的命令,否则在发布流水线命令之前,在执行上下文中仅需要一次流水线选择命令913。在一些实施例中,在经由流水线选择命令913的流水线切换之前正好需要流水线转储清除命令912。在一些实施例中,流水线控制命令914配置用于操作的图形流水线,并且用于对3d流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914配置用于活跃流水线的流水线状态。在一个实施例中,流水线控制命令914用于流水线同步,并且用于在处理批量命令之前清除来自活跃的流水线内的一个或多个高速缓存存储器的数据。在一些实施例中,用于返回缓冲器状态916的命令用于配置返回缓冲器的集合以供相应的流水线写入数据。一些流水线操作需要分配、选择、或配置一个或多个返回缓冲器,在处理期间,所述操作将中间数据写入到该一个或多个返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器以存储输出数据并且执行跨线程通信。在一些实施例中,配置返回缓冲器状态916包括选择用于流水线操作集合的返回缓冲器的大小和数量。命令序列中的剩余命令基于用于操作的活跃的流水线而不同。基于流水线判定920,命令序列被定制用于以3d流水线状态930开始的3d流水线922、或者开始于媒体流水线状态940的媒体流水线924。用于3d流水线状态930的命令包括用于顶点缓冲器状态、顶点元素状态、常量颜色状态、深度缓冲器状态、以及有待在处理3d图元命令之前配置的其他状态变量的3d状态设置命令。这些命令的值至少部分地基于使用中的特定3dapi来确定。在一些实施例中,如果将不使用某些流水线元件,则3d流水线状态930命令还能够选择性地禁用或绕过这些特定的流水线元件。在一些实施例中,3d图元932命令用于提交待由3d流水线处理的3d图元。经由3d图元932命令传递给图形处理器的命令和相关联参数将被转发到图形流水线中的顶点获取功能。顶点获取功能使用3d图元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。在一些实施例中,3d图元932命令用于经由顶点着色器对3d图元执行顶点操作。为了处理顶点着色器,3d流水线922将着色器执行线程分派至图形处理器执行单元。在一些实施例中,经由执行934命令或事件来触发3d流水线922。在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由命令序列中的‘前进’(‘go’)或‘踢除’(‘kick’)命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行,以对通过图形流水线的命令序列进行转储清除。3d流水线将针对3d图元来执行几何处理。一旦完成操作,则对所得到的几何对象进行光栅化,并且像素引擎对所得到的像素进行着色。对于那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。在一些实施例中,当执行媒体操作时,图形处理器命令序列910跟随媒体流水线924路径。一般地,针对媒体流水线924进行编程的具体用途和方式取决于待执行的媒体或计算操作。在媒体解码期间,特定的媒体解码操作可被卸载到媒体流水线。在一些实施例中,还可绕过媒体流水线,并且可使用由一个或多个通用处理核提供的资源来整体地或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(gpgpu)操作的元件,其中,图形处理器用于使用计算着色器程序来执行simd向量运算,该计算着色器程序与渲染图形图元不是显式地相关的。在一些实施例中,以与3d流水线922相似的方式对媒体流水线924进行配置。将用于配置媒体流水线状态940的一组命令分派或放置到命令队列中,在媒体对象命令942之前。在一些实施例中,用于媒体流水线状态的命令940包括用于配置媒体流水线元件的数据,这些媒体流水线元件将用于处理媒体对象。这包括用于在媒体流水线内配置视频解码和视频编码逻辑的数据,诸如,编码或解码格式。在一些实施例中,用于媒体流水线状态的命令940还支持将一个或多个指针用于包含批量的状态设置的“间接”状态元件。在一些实施例中,媒体对象命令942将指针供应至媒体对象以用于由媒体流水线进行处理。媒体对象包括存储器缓冲器,该存储器缓冲器包含待处理的视频数据。在一些实施例中,在发布媒体对象命令942之前,所有的媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942被排队,则经由执行944命令或等效的执行事件(例如,寄存器写入)来触发媒体流水线924。随后可通过由3d流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式来配置和执行gpgpu操作。图形软件架构图10图示出根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3d图形应用1010、操作系统1020、以及至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032以及一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。在一些实施例中,3d图形应用1010包含一个或多个着色器程序,该一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如,高级着色器语言(hlsl)或opengl着色器语言(glsl)。应用还包括可执行指令1014,该可执行指令1014采用适合用于由(多个)通用处理器核1034执行的机器语言。应用还包括由顶点数据限定的图形对象1016。在一些实施例中,操作系统1020是来自微软公司的操作系统、专用类unix操作系统、或使用linux内核的变体的开源类unix操作系统。操作系统1020可以支持图形api1022,诸如,direct3dapi或openglapi。当direct3dapi正在使用时,操作系统1020使用前端着色器编译器1024以将采用hlsl的任何着色器指令1012编译成较低级的着色器语言。编译可以是即时(jit)编译,或者应用可以执行着色器预编译。在一些实施例中,在对3d图形应用1010进行编译期间,将高级着色器编译成低级着色器。在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027,该后端着色器编译器1027用于将着色器指令1012转换为硬件专用的表示。当openglapi正在使用时,将采用glsl高级语言的着色器指令1012传递至用户模式图形驱动器1026以用于编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032进行通信以分派命令和指令。ip核实现至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性代码实现,该机器可读介质表示和/或限定集成电路(诸如,处理器)内的逻辑。例如,机器可读介质可包括表示处理器内的各个逻辑的指令。当由机器读取时,指令可使机器制造用于执行本文中所描述的技术的逻辑。此类表示(称为“ip核”)是集成电路的逻辑的可重复使用单元,这些可重复使用单元可以作为对集成电路的结构进行描述的硬件模型而被存储在有形的机器可读介质上。可将该硬件模型供应给各消费者或制造设施,这些消费者或制造设施将该硬件模型加载在制造集成电路的制造机器上。可制造集成电路,以使得电路执行与本文中所描述的实施例中的任一实施例相关联地描述的操作。图11是图示出根据实施例的可以用于制造集成电路以执行操作的ip核开发系统1100的框图。ip核开发系统1100可用于生成可以并入到更大的设计中或用于构建整个集成电路(例如,soc集成电路)的模块化、可重复使用的设计。设计设施1130可以采用高级编程语言(例如,c/c++)来生成对ip核设计的软件仿真1110。软件仿真1110可以用于使用仿真模型1112来设计、测试并验证ip核的行为。仿真模型1112可以包括功能、行为和/或时序仿真。然后可从仿真模型1112创建或合成寄存器传输级(rtl)设计1115。rtl设计1115是对硬件寄存器之间的数字信号的流动进行建模的集成电路(包括使用建模的数字信号执行的相关联的逻辑)的行为的抽象。除了rtl设计1115之外,还可以创建、设计或合成处于逻辑级或晶体管级的较低层级的设计。由此,初始设计和仿真的具体细节可有所不同。可由设计设施将rtl设计1115或等效方案进一步合成为硬件模型1120,该硬件模型1120可采用硬件描述语言(hdl)或物理设计数据的某种其他表示。可以进一步仿真或测试hdl以验证ip核设计。可使用非易失性存储器1140(例如,硬盘、闪存、或任何非易失性存储介质)来存储ip核设计以用于递送至第3方制造设施1165。替代地,可以通过有线连接1150或无线连接1160来传输(例如,经由互联网)ip核设计。制造设施1165随后可制造至少部分地基于ip核设计的集成电路。所制造的集成电路可以被配置成用于执行根据本文中所描述的至少一个实施例的操作。示例性芯片上系统集成电路图12-图14图示出根据本文中所描述的各实施例的可使用一个或多个ip核来制造的示例性集成电路和相关联的图形处理器。除了所图示的之外,还可包括其他逻辑和电路,包括附加的图形处理器/核、外围接口控制器或通用处理器核。图12是图示出根据实施例的可使用一个或多个ip核来制造的示例性芯片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,cpu)、至少一个图形处理器1210,并且可附加地包括图像处理器1215和/或视频处理器1220,其中的任一项都可以是来自相同的或多个不同的设计设施的模块化ip核。集成电路1200包括外围或总线逻辑,该外围或总线逻辑包括usb控制器1225、uart控制器1230、spi/sdio控制器1235和i2s/i2c控制器1240。另外,集成电路可以包括显示设备1245,该显示设备1245耦合至高清晰度多媒体接口(hdmi)控制器1250和移动产业处理器接口(mipi)显示接口1255中的一个或多个。可由闪存子系统1260(包括闪存和闪存控制器)来提供存储。可经由存储器控制器1265来提供存储器接口以访问sdram或sram存储器设备。另外,一些集成电路附加地包括嵌入式安全引擎1270。图13是图示出根据实施例的可使用一个或多个ip核来制造的芯片上系统集成电路的示例性图形处理器1310的框图。图形处理器1310可以是图12的图形处理器1210的变体。图形处理器1310包括顶点处理器1305以及一个或多个片段处理器1315a1315n(例如,1315a、1315b、1315c、1315d至1315n-1和1315n)。图形处理器1310可以经由分开的逻辑执行不同的着色器程序,以使得顶点处理器1305被优化成执行用于顶点着色器程序的操作,而一个或多个片段处理器1315a-1315n执行用于片段或像素着色器程序的片段(例如,像素)着色操作。顶点处理器1305执行3d图形流水线的顶点处理级,并生成图元和顶点数据。(多个)片段处理器1315a-1315n使用由顶点处理器1305生成的图元和顶点数据来产生显示在显示设备上的帧缓冲器。在一个实施例中,(多个)片段处理器1315a-1315n被优化成执行如提供用于openglapi中的片段着色器程序,片段处理器1315a-1315n可用于执行与如提供用于direct3dapi中的像素着色器程序类似的操作。图形处理器1310附加地包括一个或多个存储器管理单元(mmu)1320a-1320b、(多个)高速缓存1325a-1325b和(多个)电路互连1330a-1330b。一个或多个mmu1320a-1320b提供用于图形处理器1310的虚拟到物理地址映射,包括用于顶点处理器1305和/或(多个)片段处理器1315a-1315n的虚拟到物理地址映射,除了存储在一个或多个高速缓存1325a-1325b中的顶点或图像/纹理数据之外,顶点处理器1305和/或(多个)片段处理器1315a-1315n还可引用存储在存储器中的顶点或图像/纹理数据。在一个实施例中,一个或多个mmu1320a-1320b可与系统内的其他mmu同步,以使得每个处理器1205-1220可以参与共享或统一虚拟存储器系统,其他mmu包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220相关联的一个或多个mmu。根据实施例,一个或多个电路互连1330a-1330b使得图形处理器1310能够经由soc的内部总线或经由直接连接与soc内的其他ip核接口连接。图14是图示出根据实施例的可使用一个或多个ip核来制造的芯片上系统集成电路的附加示例性图形处理器1410的框图。图形处理器1410可以是图12的图形处理器1210的变体。图形处理器1410包括图13的集成电路1300的一个或多个mmu1320a-1320b、(多个)高速缓存1325a-1325b和(多个)电路互连1330a-1330b。图形处理器1410包括一个或多个着色器核1415a-1415n(例如,1415a、1415b、1415c、1415d、1415e、1415f至1415n-1和1415n),该一个或多个着色器核1415a-1415n提供统一着色器核架构,在该统一着色器核架构中,单个核或单类型的核可以执行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核的确切数量在各实施例和各实现方式之间可以有所不同。另外,图形处理器1410包括核间任务管理器1405,该核间任务管理器1405充当线程分派器以将执行线程分派给一个或多个着色器核1415a-1415n。图形处理器1410还包括分块单元(tilingunit),该分块单元1418用于加速用于基于图块的渲染的分块操作,在用于基于图块的渲染的分块操作中,对场景的渲染操作被细分在图像空间中。基于块的渲染可用于利用场景内的局部空间一致性,或优化内部高速缓存的使用。图形处理器内的数据压缩通常利用图形处理器(例如,gpu)来根据三维(3d)模型生成二维图像,特别是在使用复杂3d模型的情况下。由于在gpu附近放置足够快的存储器(例如,高速缓存和本地图形存储器)的费用以及与从系统存储器中访问数据相关联的带宽减少,在渲染图像时,存储器传输带宽和存储占用量通常是高度有价值的资源。可以采用压缩(有损和无损两者)来实现减小传输带宽并提高针对存储在高速缓存存储器或管芯上存储器、封装体上存储器、板上存储器或以其他方式“靠近”gpu的等其他存储器中的数据在访问等待时间和/或带宽方面的存储效率。有损压缩与无损压缩之间的折衷表示压缩数据的存储效率与输出质量之间的折衷。这包括压缩图像的相对图像质量(例如,误差)或其他压缩数据的相关联计算精度损失。在一些情况下,一定程度的数据损失被认为是可接受的。例如,在许多gpu中实施有损纹理压缩算法以便利用纹理图来提高存储和传输效率,因为一定程度的混合或滤波对于纹理处理而言是常见的。在其他情况下,高度优选无损压缩,诸如在帧缓冲器压缩的情况下。通常避免有损帧缓冲器压缩,因为在多次使用有损压缩过程中可能发生可能的误差复合,除非可以对累积误差施加某个上限。在其他情况下,特别是对于要由gpu消耗的数据,若要执行任何数据压缩,压缩必须是无损的。例如,顶点缓冲器数据或深度缓冲器数据的有损压缩可能在渲染输出中引入显著的误差。本文所描述了若干实施例,这些实施例提供了增强的数据高速缓存结合自适应且动态的压缩,以在从gpu进行输入和输出期间提高存储效率并减少数据传输带宽。本文所描述的技术可以减少访问芯片外存储器的需要,从而引起性能改善并且gpu操作功率降低。图15是根据实施例的图形处理器1500的框图。图形处理器1500包括压缩/解压缩逻辑1528,根据各个实施例,所述压缩/解压缩逻辑可以沿着图形处理器渲染流水线在各点处对各种类型和格式的gpu数据进行压缩或解压缩。图形处理器1500表示一个图形处理器核。在各个实施例中,gpu可以包括单个核或多个图形核。图形处理器1500包括可以被配置成执行各种图形处理操作的一个或多个图形处理器子核1510a至1510b。虽然展示了两个子核1510a至1510b,但是实施例不限于此,因为图形处理器可以包括单个子核或者三个或更多个子核。每个图形处理器子核1510a至1510b包括诸如图5中的图形处理子核550a和/或子核560a等图形处理逻辑。图形子核1510a至1510b共享一组共享资源1520,其包括例如在图5的共享资源570a中找到的组件。图形核另外包括三级(l3)高速缓存1530,其可以共享资源1520内的高速缓存与最后一级高速缓存或系统存储器之间的存储器事务。l3高速缓存1530经由存储器总线1529与共享资源1520连接。在一个实施例中,共享资源1520包括光栅化器1521、采样器1522、高速缓存控制器1523、渲染高速缓存1524、牺牲高速缓存1526以及压缩/解压缩逻辑1528。光栅化器1521包括开窗器/掩蔽器单元,其在一个实施例中执行固定功能三角形和线光栅化,并且是如图8中的光栅化器和深度测试组件873的变体。光栅化器1521通过遍历(traversing)或走过(walking)图元并针对作为要渲染的几何图元的一部分的每个像素生成像素数据来对表示要渲染的几何对象的数据进行分析。图形处理器1500还可以包括更高级和/或可配置的光栅化器,或者可以另外包括用于加速光线追踪或混合光栅化的光线追踪加速逻辑。在一个实施例中,光栅化器1521是基于图块的光栅化器,其中像素是在图像空间像素网格的粒度上被渲染的。可以对存储在图块高速缓存中的数据执行基于图块的光栅化,以减少芯片外存储器访问的数量。采样器1522提供用于3d操作的纹理采样以及用于媒体操作的媒体采样。在一个实施例中,所述采样器是如图6中的采样器610的变体。采样器1522可以访问存储在渲染高速缓存1524中的渲染目标数据,例如,当使用动态渲染的纹理时,或者当图形处理器另外具有从渲染目标处采样数据的操作需要时。渲染高速缓存1524存储渲染目标数据,所述渲染目标数据要经由显示引擎显示的、或者要用于渲染后续图像以供显示。由图形子核1510a至1510b生成的数据可以被写入渲染高速缓存1524,其中,这样的数据可以被诸如显示引擎或采样器1522等其他图形处理器组件容易地访问。渲染高速缓存内的存储器被分成多个高速缓存行。虽然高速缓存行的大小可以在实施例中变化,但是一个实施例提供128字节的高速缓存行。在一个实施例中,渲染高速缓存1524可以被配置为多样本渲染高速缓存,并且可以每像素存储多个颜色数据样本。在一个实施例中,渲染高速缓存1524由高速缓存控制器1523来控制。高速缓存控制器1523管理针对要存储在渲染高速缓存1524和/或牺牲高速缓存1526中的数据的高速缓存行分配,并维持渲染高速缓存1524的高速缓存行的状态信息。图形处理器核内的组件可以查询高速缓存控制器1523以判定特定像素或像素组的数据是否存储在渲染高速缓存1524和/或牺牲高速缓存1526中,并确定哪些高速缓存行存储这些数据。在一个实施例中,高速缓存控制器1523还涉及维持渲染高速缓存1524与图形处理器中的其他高速缓存之间的高速缓存一致性。在一个实施例中,牺牲高速缓存1526耦合至渲染高速缓存1524以存储从渲染高速缓存中驱逐的回写数据。牺牲高速缓存1526可以相对于渲染高速缓存1524来调整大小。在一个实施例中,渲染高速缓存1524和牺牲高速缓存1526中的每一个是全关联的(例如,m路集合关联)。在一个实施例中,牺牲高速缓存1526可以是集合关联高速缓存。当数据被从渲染高速缓存1524中驱逐以便支持新存储的数据时,代替被写入例如l3高速缓存1530,所述数据被至少临时地存储在牺牲高速缓存1526中。如果渲染高速缓存1524随后需要所述被驱逐的数据,则可以从牺牲高速缓存1526中检索所述数据,而不是从否则将写入所述被驱逐数据的存储器层级结构的更高级别中检索。压缩数据的压缩边界可以被配置成使得在转换存储器层级结构中的特定边界之前对数据进行压缩或解压缩。例如,数据可以以压缩格式存储在渲染高速缓存1524中,或者可以在被写入渲染高速缓存1524之前被解压缩。在一个实施例中,从渲染高速缓存和/或牺牲高速缓存中驱逐的数据,可以由压缩/解压缩逻辑1528执行压缩操作以在经由存储器总线1529将所述被驱逐的数据写入l3缓存1530和/或系统存储器之前对数据进行压缩。基于将消耗来自给定存储器单元的数据的图形处理器组件是否支持读取采用压缩格式的数据,可以判定是以压缩格式还是未压缩格式将数据存储在存储器中的给定位置处。在一个实施例中,使用基于图块的压缩,其中n×m图块的像素数据是以压缩状态存储在高速缓存中或存储器中的像素。可以使用各种图块大小,包括但不限于8×4像素图块或4×4像素图块。伴随的压缩数据是压缩元数据,其维持给定高速缓存行或图块的压缩状态。压缩元数据可以每图块、高速缓存行、高速缓存块等包括一个或多个位,用于指示诸如压缩或未压缩等状态,或用于指示正在使用中的特定压缩形式。在许多无损压缩实施方式中,如果输入数据无法在无数据损失的情况下被压缩到期望的压缩比,则可以以未压缩状态来输出或存储所述数据。只读表面数据的无损压缩许多压缩技术被应用于由gpu生成的数据,诸如颜色数据、深度(例如,z)数据、或经由gpu写入或以其他方式输出的其他缓冲器,例如,如关于图15所描述的。除了gpu生成的数据之外,gpu在渲染操作期间会消耗某些静态数据。此静态数据从gpu角度来看是只读数据,并且包括但不限于静态纹理缓冲器、顶点缓冲器、常数缓冲器、统一缓冲器或gpu的其他静态或常数输入缓冲器。静态只读数据也可以是由gpu内的计算着色器或其他通用并行计算逻辑所使用的常数数据。如果可以在无数据损失的情况下对此类数据进行压缩,则包含所述数据的存储器表面可以被压缩一次并用于多个帧或多个着色器实例中。元数据可以与压缩数据相关联,以指示所述数据的压缩状态(例如,压缩或未压缩)。当静态(例如,只读)资源绑定到gpu流水线时,相应的元数据也被绑定。在一个实施例中,经由无绑定资源方案来执行这种元数据绑定。在一个实施例中,可以经由传统资源绑定来绑定所述元数据。对数据的压缩和解压缩可以在运行中且实时地执行,从而减少加载和存储静态或只读数据流所需的存储器带宽。在一个实施例中,只读表面数据的无损压缩可以被配置成使得:对于任何只读表面,颜色编解码器用于执行无损压缩。所述表面随后被视为无损压缩表面。当着色器内核正在访问只读数据时,将经由颜色数据高速缓存(例如,渲染高速缓存)使用与所述高速缓存相关联的无损解压缩逻辑、或经由可以插入在架构中的适当地方的另一解压缩逻辑来访问所述数据。图16是根据实施例的图形处理系统1600的框图。所述图形处理系统可以是使用诸如图15中的图形处理器1500等图形处理逻辑来实施的。如所展示的,图形处理系统1600包括图形流水线1620,所述图形流水线包括顶点处理器1621、像素处理器1622、高速缓存控制器1623和高速缓存1624。在一个实施例中,高速缓存1624是渲染目标高速缓存,其包括解压缩1626逻辑和压缩1628逻辑或与之相关联。图形流水线1620可以耦合到附加存储器1610,所述附加存储器可以包括更高级别的高速缓存存储器、本地存储器、系统存储器或其中可以存储供图形处理器使用的表面的其他存储器。响应于将只读数据对象1602(r/o数据对象)与图形流水线1620相关联的请求,图形处理器可以将只读数据对象1602创建或复制到存储器1610。在一个实施例中,只读数据对象1602的数据通过高速缓存1624被传递(1603)到存储器1610。在一个实施例中,只读数据对象1602的数据被写入高速缓存1624,并且当被写入(1607)存储器1610时可以由压缩1628逻辑进行处理。在一个实施例中,在将只读数据对象的数据写入(1607)存储器1610之前,在写入高速缓存1624之前或期间,由压缩1628逻辑对所述数据进行处理。压缩1628逻辑可以尝试经由诸如δ颜色压缩算法或适用于压缩颜色数据的另一种无损压缩算法等无损颜色压缩算法来对只读数据对象1602的数据进行无损压缩。如果无损压缩成功,则可以将可能压缩的只读数据对象和元数据1612块存储在存储器1610中。只读数据对象和元数据1612块的元数据指示与只读数据对象1602相关联的数据的压缩状态。如果压缩1628逻辑能够在无数据损失的情况下对只读数据对象1602的数据图块进行压缩,则只读数据对象的图块及其在存储器中的元数据1612存储压缩数据以及指示所述数据的压缩状态一个或多个元数据标记或位。如果压缩1628逻辑无法无损地对只读数据对象1602的图块进行压缩,则所述图块的未压缩数据被存储在只读数据对象和元数据1612中,并且可以设置一个或多个元数据标记或位以表明所述数据未被压缩。因此,整个只读对象将具有一些经过压缩的数据图块以及一些未经过压缩的数据图块,并且在随后访问此只读对象时,所有访问都将通过只读对象的这个此压缩和未压缩版本。存储在只读数据对象1602中的数据不必是通常存储在高速缓存1624中的数据类型。例如,如果高速缓存1624是渲染高速缓存,则顶点数据通常将不会存储在高速缓存1624中。然而,高速缓存1624的一部分可以被配置成在写入存储器1610期间启用对非颜色缓冲器数据的流式压缩。另外,在一些实施方式中,如果诸如从先前场景剩余的颜色缓冲器数据(例如,帧缓冲器数据或渲染目标数据)等存储在高速缓存1624中的数据将与当前帧不相关、并且整个高速缓存1624可以用于对来自只读数据对象1602的数据进行压缩,则可以对此数据进行转储清除和丢弃。取决于要压缩的数据类型,一旦压缩操作完成,然后就可以经由高速缓存控制器1623自动对来自只读数据对象1602的数据进行丢弃或无效化。尽管只读数据对象和元数据1612被展示为单个块,但是实施例不限于此。在一个实施例中,维持单独的压缩控制表面,其跟踪存储器1610中的各种数据块的压缩状态元数据。压缩控制表面可以是存储在可由图形流水线1620访问的任何存储器位置中的存储器块。压缩控制表面可以存储多个存储器块的元数据(指示每个块是被压缩还是未压缩)、以及可能对于管理此数据而言相关的任何其他信息。在一个实施例中,高速缓存控制器1623可以访问压缩控制表面以判定在驱逐与存储器块相关联的高速缓存数据之前是否应该压缩与此存储器块相关联的高速缓存数据。图形处理器的其他部分可以在访问存储在存储器1610中的各数据组块之前访问压缩控制表面。在一个实施例中,压缩控制表面存储与示例性压缩元数据1630中所展示的数据类似的数据,但是压缩元数据1630也可以与只读数据对象和元数据1612一起存储或与之相关联地存储。压缩元数据1630包括但不限于地址、状态和编解码器信息。地址1631a,其可以与已知粒度或预定粒度(例如,页等)的压缩存储器块相关联,使得可以针对多个数据块维持压缩信息。例如,针对地址1631a的压缩控制可以与地址1631b分开维持。可以针对地址维持状态和编解码器信息,并且对这些字段的精确使用可以在各实施例中变化。在一个实施例中,针对地址1631a的状态1632a可以指示地址1631a处的数据是被压缩还是未压缩,并且编解码器1633a可以指示已经用于所述数据的压缩类型,诸如例如,无损颜色压缩。可替代地,状态字段可以用于存储其他信息,并且编解码器字段可以指示数据是被压缩还是未压缩、以及所使用的压缩类型。例如并且在一个实施例中,地址1631b可以跟踪存储在存储器中的数据块,并且状态1632可以存储诸如一致性数据(例如,高速缓存一致性等)等状态,而编解码器1633b存储关于地址1631b处的数据是被压缩还是未压缩、以及已使用的压缩类型或程度的指示。不考虑与只读对象和元数据1612结合存储或以其他方式存储的各种类型和形式的压缩元数据1630,可以对其进行访问以确定图形流水线1620如何访问只读数据。在一个实施例中,当经由与高速缓存1624相关联的解压缩1626逻辑来读取(1607)可能压缩的数据读取时,可以由高速缓存1624的解压缩1626逻辑自动执行此确定。经由顶点处理器1621或像素处理器1622,图形流水线1620可以经由高速缓存1624来访问(1609)与只读数据对象相关联的数据,所述高速缓存基于所述数据的压缩状态可以对所述数据所述数据进行解压缩、或使未压缩数据通过。图17a至图17b展示了用于只读表面数据的无损压缩的示例性逻辑。所展示的逻辑可以在一个或多个3dapi的控制下由图16的图形流水线1620的组件执行。如图17a所示,被配置成压缩只读数据(诸如但不限于静态纹理、顶点缓冲器、常数缓冲器或其他静态输入缓冲器)的逻辑1700可以接收输入,所述输入如在1702处所示那样使逻辑1700将缓冲器配置成由诸如图16的图形流水线1620、图8的图形流水线820或媒体流水线830等图形或媒体流水线、或者诸如图9b的3d流水线922或媒体流水线924等任何其他图形流水线进行只读访问。所述输入可以响应于api命令,诸如但不限于命令将静态纹理绑定到图形上下文。在使缓冲器可由图形处理器访问的过程中(例如,通过将数据复制或映射到gpu存储器),逻辑1700可以将缓冲器数据提供给与图形流水线高速缓存相关联的无损渲染目标压缩逻辑,如1704处所示。然后,逻辑1700可以尝试针对来自缓冲器的数据单元执行无损压缩,如1706处所示。在一个实施例中,数据单元可以被定义为颜色压缩逻辑在执行压缩操作之后立即对其进行操作的数据图块或另一数据单元。因此,数据图块是可能可压缩的n×m数据单元,其方式与在颜色数据压缩的上下文中n×m像素图块是可能可压缩的数据单元相同。如果可以对数据单元进行无损压缩(例如,在1707处实现的无损压缩),则逻辑1700可以存储压缩的数据单元并设置一个或多个元数据标记以表明所述数据单元被压缩,如1708处所示。如果不可以对数据单元进行无损压缩,则逻辑1700可以存储未压缩的数据单元并设置一个或多个元数据标记以表明所述数据单元未压缩,如1710处所示。在以压缩或未压缩格式存储数据单元之后,逻辑1700在1711处执行缓冲器结束判定。如果附加的可能可压缩的数据单元在缓冲器中可用,则逻辑1700可以在1712处选择下一个单元。如果已经存储了缓冲器中的最后一个数据单元,则逻辑1700可以在1713处选择下一个缓冲器(如果有的话)或者结束此逻辑操作阶段。图17b展示了逻辑1710,其用于访问可以以压缩格式存储的只读数据。如1712处所示,当流水线操作开始时,逻辑1700可以在1714处向无损颜色解压缩逻辑提供缓冲器数据。如1716处所示,无损颜色解压缩逻辑可以读取缓冲器数据单元的元数据,所述元数据可以是存储在压缩控制表面中的元数据、与所述缓冲器数据单元一起存储的元数据、或指示每个数据图块的压缩状态的单独位图或数据结构、或其中存储缓冲器数据所采用的其他数据单元。逻辑1710可以在1717处判定缓冲器数据单元是否为压缩缓冲器。如果缓冲器数据单元被压缩,则逻辑1710可以在读取期间对所述缓冲器数据单元进行解压缩,如1718处所示。如果缓冲器数据单元未压缩,则逻辑1710可以绕过针对所述缓冲器数据的解压缩,如1720处所示。然后,逻辑1710可以将未压缩(例如,经解压缩的或不可压缩的)缓冲器数据流送到图形流水线,如1722处所示,同时,连续的缓冲器数据单元被处理。在一个实施例中,图形流水线可以包括附加缓冲器或高速缓存存储器,以存储来自解压缩逻辑的只读数据流。组合有损压缩与无损压缩图形处理器通常采用对诸如但不限于动态纹理或深度缓冲器(例如,z缓冲器)等渲染目标数据的无损压缩,这由于连续消耗压缩数据而降低了写入和读取带宽要求。在一个实施例中,用于在维持图像质量的同时减小带宽的无损压缩技术当对场景的包括较少细节的区域进行渲染时可以与有损压缩相组合。例如,可以使用有损压缩算法来对渲染目标的将在景深视图中看起来模糊的部分、将经受运动模糊的对象、或在中央凹化渲染下的外围视图进行压缩,以节省附加的存储器系统带宽而不会产生感知到的图像质量损失。在一个实施例中,可以逐图块地执行不同形式的有损或无损压缩,使得第一图块可以包括经无损压缩的数据,而第二图块可以包括经由有损压缩算法来压缩的数据。在使用有损压缩算法的情况下,可以应用各种技术来对图块的累积误差强制施加上限,使得当有损压缩就位可用时可以维持图块的数据质量。对于每个图块,可以应用级联的高质量到低质量压缩技术来平衡所得压缩数据的图像或数据质量与空间效率。在一个实施例中,可以基于与图块、块或其他限定的像素组相关联的误差阈值来平滑地降低图像质量。可以部分地经由可指定目标图像质量或最小图像质量的由api定义的策略或简档来确定目标压缩排序。可以定义以下压缩策略:其中,压缩逻辑可以尝试实现与所述策略相关联的压缩比目标。基于所述策略,如果图块无法被无损地压缩到目标压缩比,则将尝试以所述目标压缩比进行有损压缩。如果在不超过限定误差容限的情况下无法执行有损压缩,则可以在回退到以较低压缩比目标进行有损压缩之前针对无损压缩尝试所述较低压缩比目标。在一个实施例中,带宽节省简档可以如下表1所示地前进通过各压缩目标。表1:无损压缩到有损压缩层级结构等级压缩比有损/无损14:1无损24:1高质量有损32:1无损42:1有损51:1无损带宽节省压缩简档可以应用于图块、块或像素分组,并且可以基于所要压缩数据的可压缩性来尝试从最高可能带宽节省到较低水平带宽节省的进展。如表1所示,可以通过4:1的无损压缩、接着是4:1的高质量有损压缩来实现最高带宽节省。在高质量有损压缩的情况下,可以应用图像质量的下界来限制可以针对图块可累积的压缩误差量。可以利用2:1的无损压缩以及2:1的有损压缩来实现较低的带宽节省,而1:1的无损(例如,未压缩)格式可以用于无法被无损压缩的数据或者无法容忍与有损压缩相关联的数据损失的数据。在一个实施例中,策略或简档还可以改变层级结构排序以优选无损压缩而非有损压缩。可以定义‘优选-无损’简档,其中的优选层级结构如下表2所示。表2:优选无损压缩层级结构基于应用于图块或像素块的简档或策略,可以应用不同形式的压缩。在一个实施例中,可以针对给定的图块或像素块并且基于像素数据的可压缩性来尝试采用不同压缩比的多种压缩形式(例如,有损或无损)。例如,可以使用有损压缩来压缩已经被定义为具有较低质量要求的图块、块或其他像素分组,同时可以使用无损压缩来压缩具有较高质量要求的图块、块或其他像素分组。然后,压缩逻辑可以尝试基于数据的可压缩性来实现压缩目标。例如,如果像素图块具有无法以例如4:1的压缩比来无损压缩的颜色数据,则可以尝试2:1的压缩比。如果给定的颜色数据块无法被无损压缩或者可以配置成仅使用无损压缩,则所述逻辑可以被配置成回退到有损压缩。在一个实施例中,为每个图块存储压缩元数据,所述元数据指示结果压缩类型(例如,有损或无损)以及相应的压缩比。然后,压缩元数据可以用于对图块的解压缩和解码。虽然为了示例性目的使用了特定压缩比(例如,4:1、2:1、1:1),但是所展示的特定压缩比是一个实施例的示例而不限制所有实施例,因为可以使用更高的压缩比。图18a至图18b展示了组合无损压缩与有损压缩的一个示例。图18a示出了可以在中央凹化渲染的情况下使用的压缩图1800。在一种实施方式中,当针对头戴式显示器渲染数据时,可以使用中央凹化渲染。眼睛跟踪逻辑可以用于确定用户的眼睛位置,并且基于被渲染用于显示的场景是否将被用户的中央凹视觉或外围视觉感知,可以在所述场景的不同部分以不同的质量来渲染所述场景。在眼睛跟踪逻辑并未就位可用于头戴式显示器的情况下,还可以基于由于由头戴式显示器中所使用的镜头引起的失真而可能出现的不同程度的径向差或色差来应用这些技术。在一个实施例中,压缩图1800是针对场景而定义的指示要应用于每个图块或图块分组的压缩简档的位图或另一数据结构。基于所定义的压缩简档,颜色压缩逻辑可以尝试使颜色缓冲器压缩期间的带宽节省最大化,或者使图像质量最大化同时在不损失图像质量的情况下节省尽可能多的带宽。例如,可以仅利用无损压缩来压缩场景的视图的焦点处或附近的图块(例如,图块1802、图块1804)以保持图像质量。如果无法实现第一无损压缩比(例如,4:1),则尝试更低的无损压缩比(2:1)。如果无法对数据执行无损压缩,则将未压缩地存储所述数据。对于更远离焦点的图块(例如,图块1806),无损压缩可以是优选的,但是有损压缩仍然可以用来保持带宽。对于视图外围附近的图块(例如,图块1808、图块1810),可以使用带宽保持简档,其尝试支持更高的压缩比,甚至以图像质量的一定损失为代价。中央凹化渲染仅仅被描述为可以组合有损压缩技术与无损压缩技术以用于场景内数据的一个示例。可以在图形流水线中颜色数据和/或渲染目标压缩被执行的任何点处应用这样的技术。当使用颜色压缩逻辑来压缩诸如静态纹理、顶点缓冲器、常数缓冲器或gpu的任何其他静态输入缓冲器等只读输入数据时,也可以将这些技术应用于图形流水线,如以上关于图16和图17a至17b所描述的。图18b是根据实施例的组合有损压缩与无损压缩的一般情况的流程图。如1822处所示,压缩逻辑1820可以读取指示渲染目标的每图块压缩简档的压缩图。然后,压缩逻辑1820可以基于与渲染目标内的每个图块相关联的压缩简档来压缩所述图块。压缩简档可以确定为尝试压缩图块的颜色数据以最大化压缩比而应用于图块的一系列压缩算法,或者判定是否应该压缩图块以最大化图像质量。例如,即使实现了较低的压缩比,可以应用优选使用无损压缩算法来防止任何图像质量损失的‘优选无损’简档。可以应用其他简档,这些简档将应用有损压缩算法以牺牲一定图像质量为代价来实现更高的压缩比,但是在一个实施例中,可以应用高质量、误差受限的有损压缩算法以在尝试更激进的压缩技术或更低的压缩比目标之前最小化图像质量的损失。例如,如1824处所示,压缩逻辑1820可以确定第一像素图块的压缩简档。压缩简档可以指示随着压缩比变化保持图像质量,诸如‘优选无损’简档。与使用有损压缩尝试更高压缩比相比,如果更高压缩比的无损压缩失败,则‘优选无损’简档可以尝试更低压缩比的无损压缩。在1825处,压缩逻辑可以判定例如‘优选无损’简档是否就位可用于第一像素图块。如果这样的适当简档未就位可用,例如,如果第一图块具有就位可用的‘保持带宽’简档,则压缩逻辑1820可以在1826处向第一图块应用第一压缩简档。第一压缩简档被配置成按照与上面表1一致的顺序优先考虑压缩比,例如通过以下方式:如果数据无法经由更高压缩比的无损算法进行压缩,则应用更高压缩比的有损算法。然后,压缩逻辑1820可以在1830处以与第一压缩简档一致的压缩格式来存储第一图块。如果压缩逻辑1820在1825处确定诸如‘优选无损’简档等压缩简档就位可用,则压缩逻辑可以在1828处向第一图块应用第二压缩简档。第二压缩简档被配置成按照与上面表2一致的顺序优先考虑图像质量,例如通过以下方式:如果数据无法经由更高压缩比的无损算法进行压缩,则应用更低压缩比的无损算法。然后,压缩逻辑1820可以在1832处以与第二压缩简档一致的压缩格式来存储第一图块。以与对应压缩简档一致的压缩格式来存储第一图块可以包括以与所述简档一致的结果压缩比来存储所述第一图块,例如更高压缩比的有损格式或更低压缩比的无损格式。另外,可以更新每个图块的压缩元数据以跟踪每个图块的结果压缩比和格式。基于数据的可压缩性,向不同的数据应用不同的压缩简档可能会导致所得数据以类似的格式被压缩。例如并且在一个实施例中,每个简档可以指示压缩逻辑1820针对以较高压缩比的无损压缩进行压缩来评估给定图块。如果图块可以高压缩比下来无损压缩,则所得数据将以高压缩比被无损压缩。如果图块无法以高压缩比来无损压缩,则可以使用回退压缩来压缩所述图块,所述后退压缩在第一简档的情况下是较高压缩比的有损压缩,或者在第二简档的情况下是较低压缩比的无损压缩。如果无法执行回退压缩,例如,由于超过高质量有损压缩的误差限值或者使用较低压缩比无损算法的数据不可压缩性,取决于与图块相关联的简档,可以应用与以上表1和表2一致的附加回退压缩技术。使用这些技术,可以对渲染目标逐图块地执行有损压缩和无损压缩,以便基于每个图块的图像质量要求来自适应地保持图像质量或带宽。使用有保证比率的压缩来减少高速缓存占用量在一些实施例中,本文所描述的压缩技术可以应用于高速缓存管理策略,以便经由有保证比率的压缩来实施高速缓存占用量减少。用于cpu和gpu的计算机系统中的高速缓存层级结构对于维持高性能、以及在某些情况下降低与各种芯片外存储器相关联的功耗是必要的。通常,较大容量的高速缓存会为处理器带来更高的性能能力。然而,本文所描述的实施例利用有保证比率的压缩技术来提高高速缓存效率而不会增加高速缓存的物理存储器容量。这些技术可以应用于本文所描述的任何高速缓存存储器,包括但不限于:渲染目标高速缓存;深度缓冲器高速缓存;采样器高速缓存;gpul2、l3或l4高速缓存;或者被配置成存储gpu数据的任何其他高速缓存存储器,包括与cpu共享的高速缓存。在一个实施例中,api可以提供命令以将某些表面标记为始终使用固定比率压缩来压缩。可以将固定比率压缩执行到特定的目标压缩比,诸如但不限于2:1的压缩比。在2:1的压缩比下,可以将两倍的数据量存储在高速缓存存储器中,并且为压缩存储器启用更少的转换后备缓冲器(tlb)转换。可以使用无损压缩与有损压缩的组合来实现目标压缩比,诸如无损δ压缩和/或有损固定比率压缩。在有损压缩的情况下,可以使用有损固定比率压缩算法,在所述算法中,跨颜色数据的每个颜色通道使用自适应量子化来压缩颜色数据。例如,可以使用红绿蓝α(rgba)颜色值来表示颜色数据,其中四个子值与这四个颜色通道(r、g、b和a)中的每一个相对应。还可以使用诸如例如伪亮度/强度橙色度绿色度α(ycocga)颜色空间等替代颜色空间表示来表示颜色数据,使得颜色值具有与这四个颜色通道y、co、cg和a相对应的子值。可以为颜色子值确定边界框,使得边界框包括所述一个或多个颜色通道的一个或多个边界范围。边界框可以包括任何数量的边界范围,诸如,例如,每个颜色通道一个边界范围。在一些示例中,每个边界范围可以与从颜色通道的最小子值到颜色通道的最大子值的值范围相对应。在一些示例中,可以量子化边界范围以生成多组可用值。例如,取决于边界范围的大小(例如,“宽度”),可以确定在范围内的一定数量的可用值。在一些示例中,可用值的数量可以是2的倍数,使得可以对可用值进行编码。例如,如果边界范围仅具有一个值,则不需要进行量子化。在其他示例中,取决于如本文中进一步讨论的带宽约束,可以使得2、4、8、16或32个或者类似数量的可用值可用。在一些示例中,使用量子化,边界范围可以是可完全描述的。例如,如果范围包括八个值,则八个可用值可以完全描述边界范围。然而,通常,可用值的数量将小于边界范围的宽度,并且对颜色子值的后续编码可以是有损编码,使得损失宽度数据的一定精度。在一些示例中,宽度可以设置于边界范围的实际宽度。在一些示例中,可用值的数量可以不大于诸如32等限制。在一些示例中,经量子化的边界范围的可用值可以与索引值相关联。在一些示例中,可能需要k位索引值与用2k个索引值来量子化的经量子化边界范围相关联。例如,8个索引值可以用3位索引值来编码,16个索引值可以用4位索引值来编码,等等。在一些示例中,可以通过将颜色子值与同最接近实际颜色子值的可用值相对应的索引值进行关联来对颜色子值进行编码。可以对颜色通道中的一些或全部执行这种编码,以生成对子值进行编码的经编码索引值。在一些示例中,包括经编码索引值的图形数据以及与边界框相关联的数据(例如,用于描述边界框的(多个)边界范围的数据)可以存储在存储器中。在一个实施例中,可以在不同颜色空间之间映射颜色数据,以增强数据的可压缩性。在一个实施例中,可以对表面进行标记,使得所标记的表面始终以目标压缩比采用压缩形式来存储。由于所标记的表面始终以压缩形式来存储,因此这些表面占用较少量的高速缓存。此外,由于表面具有固定压缩比,因此可以执行高速缓存优化以存储压缩数据。图19是根据实施例的使用有保证比率的压缩的高速缓存占用量减少的框图。示出了第一高速缓存存储器1900,其中四个颜色数据块(块0、块7、块3和块2)存储在第一组四个高速缓存行1901中。每个块可以表示像素数据块,诸如n×m像素数据图块。当像素数据块在未压缩的情况下被存储时,每个块可以占用整个高速缓存行。还示出了第二高速缓存存储器1910,其中存储在第一高速缓存1900中的这四个像素数据块被压缩到固定的2:1压缩比并被存储在第二组四个高速缓存行1911中。虽然压缩块在传输期间消耗较少量的总线带宽并且具有较小的存储器占用量,但是一定量的高速缓存存储器(例如,在固定的2:1压缩比下为50%)未被使用。在以压缩格式将颜色数据存储在高速缓存和/或存储器中的现有实施方式中,压缩数据与未压缩数据的组合可以存储在高速缓存中,或者压缩数据可以以可变压缩比来存储。然而,在使用有保证比率的压缩的实施例中,提前了解压缩比使得能够进行如第三高速缓存存储器1920中所展示的高速缓存优化。第三高速缓存存储器1920包括针对有保证比率的压缩的高速缓存行优化。针对2:1的压缩比对第三高速缓存存储器1920进行了优化,但是可以使用其他压缩比。在一个实施例中,固定比率无损压缩(例如具有固定的2:1压缩比)可以用于给定的图块或表面。必要时,可以通过使用自适应量子化有损压缩算法来压缩渲染目标和其他颜色缓冲器,而不会显著损失视觉质量。无论使用有损压缩还是无损压缩,第三高速缓存存储器1920的高速缓存行1921的存储效率都可以与由有保证比率的压缩所使用的压缩比直接相关地增大。例如,利用固定的2:1压缩比,高速缓存控制逻辑可以根据所述固定压缩比来对高速缓存行进行划分,并在每个高速缓存行中存储与渲染目标相关联的多个相邻存储器块。在每高速缓存行存储多个相邻的虚拟寻址存储器块的一个实施例中,可以实现tlb转换数量的减少。如第三高速缓存1920中所展示的,可以采用每高速缓存行(块n,块n+1)配置来存储数据块。在块n具有第一虚拟存储器地址并且覆盖第一虚拟存储器地址范围的这种配置中,块n+1可以与下一个邻接虚拟存储器地址和虚拟存储器地址范围相关联。在这种配置中,可以针对块n和块n+1执行单次tlb查找。在一个实施例中,第三高速缓存1920可以被配置成使得高速缓存行在偶数数据块上开始,使得块n是偶数块并且块n+1是奇数块,这可以简化第三高速缓存存储器1920的硬件实施方式。当存储在第三高速缓存1920中的数据被驱逐到不支持有保证比率的压缩的图形存储器或系统存储器或高速缓存时,存储器块可以在驱逐之后立即被解压缩。在一个实施例中,可以执行单次高速缓存行读取以收集所述高速缓存行内的所述多个数据块,并且可以在将所述多个数据块写入更高级别的高速缓存或存储器之前对其进行解压缩。上下文敏感高速缓存替换在一些实施例中,为图形处理器高速缓存存储器启用上下文敏感高速缓存替换策略可以对允许高速缓存存储器性能的附加改善,特别是在使用数据压缩的情况下。在常规的高速缓存存储器中,高速缓存替换策略可以基于最近最少使用(lru)、最近最少寻址/访问(lra)、伪lru(例如,树-plru、位-plru)、或者本领域已知的其他高速缓存替换策略或算法的一种或多种变体。例如,最近最少寻址策略可以基于与存储在高速缓存行中的数据相关联的存储器访问来使高速缓存行老化。最近最少访问策略或最近最少使用策略可以基于对数据的访问(例如,读取、写入等)的次数和/或频率来使高速缓存行数据老化。伪lru算法可以是基于树的plru算法或一位plru算法之一。虽然应用于不同高速缓存存储器的精确替换策略可以变化,但是在常规高速缓存存储器中,统一地应用相同的替换策略而不考虑所存储的数据。在一些实施例中,可以启用上下文敏感高速缓存替换,使得精确的高速缓存替换策略可以基于高速缓存的类型和/或所分配高速缓存行的类型而变化。例如,可以基于高速缓存特性(诸如高速缓存是否支持字节经掩蔽写入)并且基于与高速缓存行相关联的分配类型(例如,读/写、只读、只写等)来为不同的高速缓存存储器启用不同的高速缓存替换策略。在一个实施例中,可以实施以下上下文敏感高速缓存替换策略:其中,除了使用最近最少寻址高速缓存替换策略或最近最少使用高速缓存替换策略之外,高速缓存替换策略被配置成支持驱逐包含更大量脏像素块的高速缓存行。驱逐具有更大量脏像素块的高速缓存行可以减少与部分高速缓存行驱逐相关联的开销。当将像素块从包括字节掩码的高速缓存驱逐到由高速缓存控制器或存储器控制器控制的、不包括字节掩码的高速缓存或存储器时,部分高速缓存行驱逐可能会引入合并开销。字节掩码启用对存储器的经掩蔽写入,其中仅写入由字节掩码点亮(例如,选择)的位,而不写入未点亮的位。在不在整个存储器层级结构中携带字节掩码的存储器架构中,部分高速缓存行驱逐可能需要读取存储在存储器层级结构的较高级别中的部分被驱逐数据、合并所读取数据与被驱逐数据、并且回写所合并数据。此外,当数据以压缩格式存储在高速缓存中时,部分高速缓存行驱逐可以使所述数据在被合并之前被解压缩,然后在被合并之后可能被重新压缩,从而向部分高速缓存行驱逐引入了附加开销。在一个实施例中,对于只写(wo)高速缓存行分配,添加每像素块的脏位,每个高速缓存行具有多个像素块。像素块可以是任何像素分组,包括像素图块,诸如屏幕空间流水线的n×m像素图块。对于wo高速缓存行分配,高速缓存行替换策略被配置成避免回写部分填充的行,这涉及将高速缓存行写出到存储器而不启用高速缓存行的所有字节。当优选最高数量的脏块时,被驱逐的高速缓存行将被完全点亮(例如,所有字节都被启用)的可能性更高。在一个实施例中,代替每像素块的脏位,维持高速缓存行内的一定脏块计数。然后,驱逐策略可以选择最旧和/或最近最少使用、访问或寻址的一组高速缓存行,然后驱逐所述组中具有最大数量的脏像素块的高速缓存行。在一个实施例中,wo高速缓存行分配与读/写(wr)高速缓存行分配的不同之处在于wr分配的字节掩码确保全部都被点亮。因此,如果修改了wr高速缓存行,则所有块都被标记为脏,并且整个高速缓存行将被驱逐。图20是其中启用了上下文敏感高速缓存替换的示例性高速缓存层级结构2000的框图。在一个实施例中,第一高速缓存存储器2010包括多个高速缓存行2001,其中每个高速缓存行存储多个像素块(例如,块2008(块0)、块2018(块1))。写掩码可以用于每个块,其中掩码2006与块2008相关联,并且掩码2016与块2018相关联。多个高速缓存行2001中的每一个可以包括最近最少寻址(lra)元数据(例如,用于块2008的lra2002、用于块2018的lra2012)以及用于每个存储块的脏位(例如,用于块2008的脏位2004、用于块2018的脏位2014)。来自第一高速缓存存储器2010的驱逐可以存储在第二高速缓存存储器2020中,所述第二高速缓存存储器缺少与每个块相关联的写掩码。第二高速缓存存储器2020包括多个高速缓存行2021,所述多个高速缓存行可以包含第一高速缓存存储器2010中的数据的超集,所述超集包括块2008(作为块2028)和块2018(作为块2038)。在一个实施例中,字节掩码使得能够为了只写分配而跟踪对像素块中的特定位的特定写入。在一种使用情况中,字节掩码使得图形处理器的不同计算单元(例如,执行单元、流式多处理器等)能够写入到缓冲器中的相邻字节。由于不同的写掩码,数据的在不同l1高速缓存中的不同实例可能具有不同的点亮位。在从l1高速缓存中进行驱逐之后,如果更高级别的高速缓存不包括字节掩码,则可以立即合并不同的数据。然而,由于可能与这种合并操作相关联的开销,上下文敏感高速缓存替换算法可以优选地驱逐具有最脏像素块的最近最少寻址的高速缓存行。此外,如果高速缓存数据是以压缩格式存储的,则高速缓存行合并可能需要对数据进行解压缩和重新压缩。在一个实施例中,通过基于分配类型(例如,只写、读/写、只读)和/或与分配相关联的缓冲器类型(例如,颜色缓冲、深度缓冲等)选择不同的高速缓存替换算法,来为第二高速缓存存储器配置上下文敏感高速缓存替换。例如,包括第二高速缓存存储器2020的块2028和块2038的高速缓存行可以被分配读/写,并且最近最少使用(lru)算法可以用于管理高速缓存行替换。因此,针对块2028存储lru2022元数据,并且针对块2038存储lru2032元数据。可替代地,包含块2029(块n)和块2039(块n+1)的高速缓存行可以被分配为只写,并使用不同的高速缓存替换算法,诸如伪lru(plru)算法。在这种情况下,可以针对块2029存储plru2023元数据,并且可以针对块2039存储plru2033元数据。图21是根据实施例的上下文敏感高速缓存替换逻辑2100的流程图。上下文敏感高速缓存替换逻辑2100可以与高速缓存控制器(诸如图15的高速缓存控制器1523)一起驻留。上下文敏感高速缓存替换逻辑2100可以用于管理在向不维持字节掩码的高速缓存进行驱逐时针对维持字节掩码的高速缓存的高速缓存替换。在一个实施例中,上下文敏感高速缓存替换逻辑2100被配置成执行操作,包括在gpu高速缓存中分配高速缓存行,如2102处所示。在框2103处,上下文敏感高速缓存替换逻辑2100可以判定高速缓存行分配是否为只写高速缓存行。对于只写高速缓存行,基于与写入相关联的字节掩码,针对为每个高速缓存行存储的多个像素块逐图块地维持脏位,使得当写入像素块内的像素数据时,上下文敏感高速缓存替换逻辑2100可以为每个修改的块标记脏位,如2104处所示。对于非只写的高速缓存行,诸如读/写高速缓存行,写掩码中的所有位都默认地被点亮。在一个实施例中,对于读/写高速缓存行,如果高速缓存行中的任何像素块被写入高速缓存行,则上下文敏感高速缓存替换逻辑2100可以将高速缓存行中的所有像素块标记为脏,如2105处所示。当需要替换高速缓存行时,上下文敏感高速缓存替换逻辑2100可以基于主要驱逐策略来确定要驱逐的一组可能牺牲者,如2106处所示。主要驱逐策略可以是最近最少访问、最近最少寻址、最近最少使用、伪最近最少使用、或任何其他高速缓存替换算法或策略中的任何一个。从所述一组可能牺牲者中,上下文敏感高速缓存替换逻辑2100可以驱逐具有最大数量脏块的可能牺牲者,如2108处所示。上下文敏感高速缓存替换逻辑2100是一个实施例的示例,并且实施例可以在对高速缓存替换策略所做的修改以及进行此确定所依据的特性方面上不同。例如,在不维护写掩码的高速缓存存储器中,用于某个高速缓存行的特定高速缓存替换策略可以基于高速缓存行的分配类型或对数据进行高速缓存所针对的底层缓冲器类型(例如,颜色、深度、模板等)而不同。高效δ编码在本文所描述的实施例中,在一些情况下,使用无损颜色压缩逻辑来减少对颜色数据的传输带宽要求。还可以利用这种逻辑来压缩只读数据以便输入到图形流水线中。为了使颜色缓冲器压缩有用,压缩算法应该能够成功地将像素图块的颜色数据压缩到某个阈值压缩比。例如,对于2:1的目标压缩比,使用未压缩形式的1024位的图块将被减少到要实现的目标压缩比的512位。可以压缩到目标压缩比的图块越多,在存储器总线上用于传输数据而消耗的带宽就越少。如本文所描述的,多个不同的阈值和目标压缩比可就位可用于给定的颜色缓冲器压缩系统(例如,从2048位压缩到512位的倍数:1536位、或1024位、或512位)。典型的颜色缓冲器压缩算法可以找到图块中的最小颜色分量,然后使用尽可能少的位来对相对于每个通道的最小颜色分量的残差进行编码。这些方案有时被称为偏移压缩方法。偏移压缩方法可以用于图形api(例如,opengl、directx等)要求任何颜色缓冲器压缩都被无损地执行的场景中。然而,如果图块包含两个或更多个不同的颜色组,诸如一组浅蓝色和另一组浅黄色,则偏移压缩方法并不高效。为了改善现有的无损颜色压缩方法,本文所描述的实施例提供了无损颜色压缩逻辑,在其中图块的颜色被划分成不同的组,使得每组内的颜色变化降低。然后,可以高效地对所划分的这些组进行编码。对于每个颜色组,针对在rgb颜色空间内定义的边界框来标识最小颜色。使用颜色数据在颜色空间内定义边界框;在很大程度上,可以使用屏幕空间坐标来定义屏幕空间边界框。然后可以从组中的所有颜色中减去边界框内的最小颜色,以计算每个颜色通道的残差分量。然后,找到了每个通道的残差的最大颜色分量lr、lg、lb。每个通道的“宽度”被标记为wr、wg、wb,其中,wr=lr+1;wg=lg+1;并且wb=lb+1。虽然以下说明是关于三通道rgb颜色空间方面来描述的,但是本文所描述的技术可以推广到任何颜色空间中的任何数量的颜色通道,诸如四通道rgba。在本领域已知的压缩算法中,通常使用整数数量个位来存储每颜色通道的残差值。例如,对于红色通道r,确定最小k,使得wr<=2k。然后,可以利用k个位来对r的每个残差进行编码。然而,在某些情况下,这种技术可能会变得非常浪费。例如,如果最大残差是32,则需要六个位来对残差值进行编码,因为五个位允许最大值25-1=31。相反,可以使用更高效的编码技术,在其中颜色数据被变换成单个整数代价。对于已经如上文所述那样减去了最小颜色的给定颜色残差值r、g、b,r是零与wr-1之间的数字,g是零与wg-1之间的数字,并且b是零与wb-1之间的数字。在本示例中,编码可以被变换成单个整数代价t,如下:[式1]t=r+g*wr+b*wr*wg所得数字t最多在0与(wr*wg*wb-1)之间。因此,找到了最小数字k,使得(wr*wg*wb-1)<2k,并且每个t利用k位来编码。此编码可以引起节省用于每组编码值的位数。此外,此概念可以扩展到四个值(例如,rgba)或任何数量的值。另外,其对于对图块的四个红色值进行编码反而可能更高效。可以如下面的式2所指示地那样来执行对编码值的解码。[式2]b=t/(wr*wg)g=(t-b*wr*wg)/wr=(t%(wr*wg))/wrr=(t-b*wr*wg)%wr=(t%(wr*wg))%wr本文所描述的实施例通过进一步减少存储编码颜色值所需的位数来改善上文所述的δ编码技术。具体实施上文所述的技术需要对颜色通道宽度的大小进行存储。通道宽度可以是从0到2m-1之间的任何数字,其中,m是用于未压缩颜色的总位数。m的最常见值是8、16和32。为了在硬件中实施所述压缩技术,将需要硬件逻辑利用从2到2m的任何数字来执行乘法运算和除法运算。然而,逻辑的复杂性可以降低,因为并不需要2到2m之间的所有值。例如,对4个值进行编码所导致的位节省如下表3所示。表3-经由单个整数δ编码而节省的位表3的值如下。对四个值进行编码,其中,[x最大]表明x是最大残差(l),并且[x+1基数]表明x+1是进行编码时所使用的宽度。“紧凑位数:y”指示用于存储使用式1所编码的紧凑单个整数δ的位数。“稀疏位数:z”指示在不使用式1的情况下颜色数据的δ编码表示将消耗的位数。差(diff)值指示通过使用由式1表示的编码所实现的位节省。例如,“差:3”表明当对与四个通道像素颜色数据的四通道颜色值相关联的四个值进行编码时节省了3个位。如果为每个像素节省三个位,则使用8×4像素的常见图块大小导致每个图块节省96位。然而,应当注意,并非所有可能的通道宽度值都是必要的。重要的数字是与一组相同“差”数字中的最后一个数字相关联的那些数字。例如,以“[25最大]”开始的行的差值为一,而以“[26最大]”开始的行的差值为零。由于差位的变化仅发生在某些数字(例如表3的粗体数字),因此只需要将这些数字用作基数。因此,在一个实施例中,不使用从2到2m的所有数字作为基数,而是仅使用这些数字的子集。具体地,假设m=8,这组基数被从2到28(例如,2到256)减少到下面的一组基值:[m=8的紧凑基数]{2,3,4,5,6,8,9,11,13,16,19,22,26,32,38,45,53,64,76,90,107,128,152,181,215,256}以多种方式来利用这组紧凑的基值。首先,对数据进行编码需要将基数的大小存储为权重wx(例如,wr,wg,wb),如以上式2所示。对于m=8,紧凑基数包括26个不同的值。并非每通道m个位,而是可以通过将这26个不同的值存储在被索引的表中来使用五个位存储这些值,从而每个通道节省三个位。对四通道rgba颜色数据进行编码可以引起每个图块节省12位。其次,由于将不需要解码逻辑乘以和除以在2与2m之间的所有数,因此可以简化乘法和除法逻辑。例如,对于m=8,紧凑基数中的这组数字可以如下表4中所示那样被分解。表4-紧凑基数分解如表4中所指示的,紧凑基数的每个值可以被表示为乘以二的乘法(例如,左移)与加法的序列。因此,可以明显简化用于实施这种编码的硬件乘法器。例如,可以使用以下运算将值x乘以基值76:x*76=x*(2*2*2*2*2*2+2*2*2+2*2)=sl(x,6)+sl(x,3)+sl(x,2),这由三个左移以及两个加法运算组成。对于m=8的一组紧凑基值,最复杂的乘法运算是值215。可以使用以下运算来执行乘以215的乘法:x*215=x*(2*2*2*2*2*2*2+2*2*2*2*2*2+2*2*2*2+2*2+2+1)=sl(x,7)+sl(x,6)+sl(x,4)+sl(x,2)+sl(x,1)+x。因此,对于m=8,用于颜色δ压缩硬件的明显简化的乘法器逻辑可以代替能够乘以在2与2m之间的任何数字的通用乘法器逻辑。图22是根据实施例的用于高效δ编码的硬件乘法器单元2200的框图。在一个实施例中,硬件乘法器单元2200包括输入端2201和计算控制位逻辑2202,所述输入端用于接收乘数值,所述计算控制位逻辑用于计算一组控制位以用于对用来执行乘法的移位逻辑进行配置。移位逻辑可以被配置成基于选择一个或多个可能移位之一来对输入值进行左移。所展示的硬件乘法器单元2200包括[sl7,8]单元2204、[sl6]单元2205、[sl4,5]单元2208、[sl3,4]单元2210、[sl1,2]单元2212以及[sl0]单元2214。移位逻辑经由多个加法器2216耦合。每个移位单元预配置有可以经由控制位来选择的一个或两个移位值。在一个实施例中,控制位0b01(例如,一)将输入移位第一预配置值,而控制位0b10(例如,二)将输入移位第二预配置值。控制位0b00(例如,零)使移位单元输出零值。例如,输入到[sl7,8]单元2204的控制位值一使得所述输入向左移位7,而输入到[sl7,8]单元2204的控制位值二使得所述输入向左移位8。控制位值零使得输出零值。因此,为了执行乘以值215的乘法,计算控制位逻辑2202将输出控制位以将输入移位7、6、4、2、1、0。为了乘以76,计算控制位逻辑将:输出0b00到[sl7,8]单元2204(其输出零);输出0b01到[sl6]单元2206,其向左移位6;输出0b00到[sl4,5]单元2208,其输出零;输出0b01到[sl3,4]单元2210,其向左移位三;输出0b10到[sl1,2]单元2212,其向左移位二;并且输出0b00到[sl0]单元2214,其输出零。针对每个输入值所输出的特定控制位可以存储在硬件查找表中。图23是根据实施例的包括图形处理器2304的计算设备2300的框图。计算设备2300可以是诸如图1中的数据处理系统100的计算设备。计算设备2300还可以是诸如机顶盒(例如,基于互联网的有线电视机顶盒等)、基于全球定位系统(gps)的设备等通信设备,或者被包括在所述通信设备内。计算设备2300还可以是诸如蜂窝电话、智能电话、个人数字助理(pda)、平板计算机、膝上型计算机、电子阅读器、智能电视、电视平台、可穿戴设备(例如,眼镜、手表、手环、智能卡、珠宝、衣物等)、媒体播放器等移动计算设备,或者被包括在所述移动计算设备内。例如,在一个实施例中,计算设备2300包括移动计算设备,所述移动计算设备采用将计算设备2300的各种硬件组件和/或软件组件集成在单个芯片上的集成电路(“ic”),诸如芯片上系统(“soc”或“soc”)。计算设备2300包括图形处理器2304。图形处理器2304表示本文所描述的任何图形处理器。图形处理器包括一个或多个图形引擎、图形处理器核、以及如本文所描述的其他图形执行资源。这种图形执行资源可以呈现为各种形式,包括但不限于执行单元、着色器引擎、片段处理器、顶点处理器、流式多处理器、图形处理器集群、或适合于处理图形资源和图像资源的任何计算资源集合。在一个实施例中,图形处理器2304包括高速缓存2314,所述高速缓存可以是单个高速缓存或被分成多个高速缓存存储器片段,包括但不限于任何数量的l1、l2、l3或l4高速缓存、渲染高速缓存、深度高速缓存、采样器高速缓存和/或着色器单元高速缓存。在一个实施例中,图形处理器2304包括编解码器单元2324、高速缓存控制器2334、着色器单元2344以及光栅化器单元2354。编解码器单元2324可以实施如本文所述的多种形式的压缩逻辑和解压缩逻辑,包括以确保压缩比和/或可变压缩比执行有损压缩和无损压缩。在一个实施例中,编解码器单元2324可以被配置成使用高效的δ编码技术以及与图22相关联的简化硬件逻辑来对经无损压缩的数据进行编码和解码。高速缓存控制器2334可以配置并控制使用本文所描述的各种高速缓存管理和替换技术,包括上下文敏感高速缓存替换以及使用有保证比率的压缩的高速缓存占用量减少。着色器单元2344可以处理并执行用于可编程图形和媒体流水线的顶点、几何图形、曲面细分、片段或像素着色器程序。光栅化器单元2354包括用于执行三角形光栅化、用于将场景从对象空间变换到屏幕空间的可配置固定功能,并且可以与着色器单元2344配合工作以使用基于着色器的光线追踪技术来执行混合光栅化。如所展示的,在一个实施例中,并且除了图形处理器2304之外,计算设备2300可以进一步包括任何数量和类型的硬件组件和/或软件组件,包括但不限于应用处理器2306、存储器2308以及输入/输出(i/o)源2310。应用处理器2306可以如参照图3所展示的那样与硬件图形流水线交互,以共享图形流水线功能。经处理的数据被存储在硬件图形流水线的缓冲器中,并且状态信息被存储在存储器2308中。所产生的数据可以传送到显示控制器,以经由诸如图3的显示设备323等显示设备来输出。所述显示设备可以属于各种类型,诸如阴极光线管(crt)、薄膜晶体管(tft)、液晶显示器(lcd)、有机发光二极管(oled)阵列等,并且可以被配置成经由图形用户界面向用户显示信息。应用处理器2306可以包括一个或多个处理器,诸如图1的(多个)处理器102,并且可以是至少部分地用于执行计算设备2300的操作系统(os)2302的中央处理单元(cpu)。os2302可以用作计算机设备2300的硬件资源和/或物理资源与一个或多个用户之间的接口。os2302可以包括用于计算设备2300中的各种硬件设备的驱动器逻辑2322。驱动器逻辑2322可以包括图形驱动器逻辑2323,诸如图10的用户模式图形驱动器1026和/或内核模式图形驱动器1029。可以设想,在一些实施例中,图形处理器2304可以作为应用处理器2306的一部分(诸如物理cpu封装体的一部分)而存在,在这种情况下,存储器2308的至少一部分可以由应用处理器2306和图形处理器2304来共享,但是存储器2308的至少一部分可以专用于图形处理器2304,或者图形处理器2304可以具有单独的存储器存储设备。存储器2308可以包括缓冲器(例如,帧缓冲器)的预分配区;然而,本领域普通技术人员应当理解,实施例不限于此,并且可以使用低级图形流水线可访问的任何存储器。存储器2308可以包括各种形式的随机存取存储器(ram)(例如,sdram、sram等),包括利用图形处理器2304来渲染桌面场景或3d图形场景的应用。诸如图1的存储器控制器中枢116等存储器控制器中枢可以访问存储器2308中的数据并且将其转发到图形处理器2304以便进行图形流水线处理。可以使存储器2308对计算设备2300内的其他组件可用。例如,在实施软件程序或应用时由一个或多个处理器(例如,应用处理器2306)对从计算设备2300的各种i/o源2310接收的任何数据(例如,输入图形数据)进行操作之前,可以将所述数据临时排队到存储器2308中。类似地,软件程序确定应通过计算系统接口之一从计算设备2300发送到外部实体或存储到内部存储元件中的数据在其被传输或存储之前经常在存储器2308中临时排队。i/o源可以包括诸如触摸屏、触摸面板、触摸板、虚拟或常规键盘、虚拟或常规鼠标、端口、连接器、网络设备等设备,并且可以经由如图1所引用的输入/输出(i/o)控制中枢(ich)130来附接。另外,i/o源2310可以包括一个或多个i/o设备,所述一个或多个i/o设备被实施为用于向和/或从计算设备2300(例如,网络适配器)传送数据;或者用于在计算设备2300(例如,硬盘驱动器)内进行大规模非易失性存储。包括字母数字及其他键的用户输入设备可以用于将信息和命令选择传达至图形处理器2304。另一类型的用户输入设备是用于将方向信息和命令选择传达至gpu并控制显示设备上的光标移动的光标控件,诸如鼠标、轨迹球、触摸屏、触摸板或光标方向键。可以采用计算机设备2300的相机和麦克风阵列来观察手势、记录音频和视频并接收和发射视觉命令和音频命令。被配置为网络接口的i/o源2310可以提供对网络的访问,诸如lan、广域网(wan)、城域网(man)、个域网(pan)、蓝牙、云网络、蜂窝或移动网络(例如,第3代(3g)、第4代(4g)等)、内联网、互联网等。(多个)网络接口可以包括例如具有一个或多个天线的无线网络接口。(多个)网络接口还可以包括,例如,经由网络电缆与远程设备通信的有线网络接口,所述网络电缆可以是例如以太网电缆、同轴电缆、光缆、串行电缆或并行电缆。(多个)网络接口可以例如通过遵循ieee802.11标准来提供对lan的访问,和/或无线网络接口可以例如通过遵循蓝牙标准来提供对个域网的访问。还可以支持其他无线网络接口和/或协议,包括所述标准的先前的以及后续的版本。除了或代替经由无线lan标准通信,(多个)网络接口可以使用例如以下协议来提供无线通信:时分多址(tdma)协议、全球移动通信系统(gsm)协议、码分多址(cdma)协议和/或任何其他类型的无线通信协议。应当理解,对于某些实施方式,比在上文中所描述的示例更少或更多地配备的系统可以是优选的。因此,取决于众多因素,如价格约束、性能要求、技术改进或其他情况,计算设备2300的配置可以随着实施方式而改变。示例可以包括但不限于:移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持设备、单向寻呼机、双向寻呼机、消息收发设备、计算机、个人计算机(pc)、台式计算机、膝上型计算机、笔记本计算机、手持式计算机、平板计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务器、工作站、小型计算机、大型计算机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统、基于处理器的系统、消费电子设备、可编程消费电子设备、电视、数字电视、机顶盒、无线接入点、基站、订户站、移动订户中心、无线电网络控制器、路由器、集线器、网关、桥接器、交换机、机器或上述各项的组合。实施例可以被实施为以下各项中的任何一项或其组合:使用母板互连的一个或多个微芯片或集成电路、硬连线逻辑、由存储器设备存储且由微处理器执行的软件、固件、专用集成电路(asic)和/或现场可编程门阵列(fpga)。以示例的方式,术语“逻辑”可以包括软件或硬件和/或软件和硬件的组合。实施例可以被提供为例如计算机程序产品,所述计算机程序产品可以包括其上存储有机器可执行指令的一种或多种机器可读介质,所述机器可执行指令在由一个或多个机器(比如计算机、计算机网络或其他电子设备)执行时可以导致所述一个或多个机器执行根据在本文中所描述的实施例的操作。机器可读介质可以包括但不限于:软盘、光盘、cd-rom(cd盘-只读存储器)以及磁光盘、rom、ram、eprom(可擦除可编程只读存储器)、eeprom(电可擦除可编程只读存储器)、磁卡或光卡、闪存、或者适合于存储机器可执行指令的其他类型的介质/机器可读介质。此外,实施例可以作为计算机程序产品被下载,其中,可以经由通信链路(例如,调制解调器和/或网络连接),借助于在载波或其他传播介质中具体化和/或由载波或其他传播介质调制的一个或多个数据信号来将程序从远程计算机(例如,服务器)转移至请求计算机(例如,客户机)。以下条款和/或示例涉及其特定实施例或示例。可以在一个或多个实施例中的任何地方使用示例中的细节。可以以各种方式将不同的实施例或示例的各种特征与所包括的一些特征以及被排除的其他特征组合以适应各种不同的应用。示例可以包括主题,如,方法;用于进行方法的动作的装置;包括指令的至少一种机器可读介质,所述指令当由机器进行时使机器执行所述方法的动作;或根据本文中所述的实施例和示例的装置或系统。各组件可以是用于执行所描述的操作或功能的装置。本文所描述了若干实施例,这些实施例提供了增强的数据高速缓存结合自适应且动态的压缩,以在从gpu进行输入和输出期间提高存储效率并减少数据传输带宽。本文所描述的技术可以减少访问芯片外存储器的需要,从而引起性能改善并且gpu操作功率降低。一个实施例提供了一种图形处理装置,包括:着色器引擎;一个或多个高速缓存存储器;高速缓存控制逻辑,用于控制所述一个或多个高速缓存存储器中的至少一个;以及编解码器单元,与所述一个或多个高速缓存存储器耦合,所述编解码器单元可配置为在向或从所述一个或多个高速缓存存储器存储或驱逐只读表面数据之后立即执行对所述只读表面数据的无损压缩。一个实施例提供了一种方法,所述方法包括:将缓冲器配置用于由图形流水线进行只读访问;向与所述图形流水线的高速缓存存储器相关联的无损颜色压缩逻辑提供缓冲器数据;尝试针对来自所述缓冲器的第一数据单元进行无损压缩;响应于对所述数据单元进行无损压缩而以压缩格式来存储所述第一数据单元;以及标记与所述第一数据单元相关联的元数据以指示所述第一数据单元的压缩状态。一个实施例提供了一种数据处理系统,包括:着色器引擎;显示设备,用于显示经由所述着色器引擎生成的输出;一个或多个高速缓存存储器;高速缓存控制逻辑,用于控制所述一个或多个高速缓存存储器中的至少一个;以及编解码器单元,与所述一个或多个高速缓存存储器耦合,所述编解码器单元可配置为在向或从所述一个或多个高速缓存存储器存储或驱逐只读表面数据之后立即执行对所述只读表面数据的无损压缩。一个实施例提供了一种图形处理装置,包括:着色器引擎,用于生成渲染目标数据;以及编解码器单元,与所述着色器引擎耦合,所述编解码器单元用于对由所述着色器引擎生成的渲染目标数据进行压缩,所述渲染目标数据是使用有损或无损压缩基于与所述渲染目标数据相关联的简档来压缩的。一个实施例提供了一种图形处理装置,包括:着色器引擎,用于生成渲染目标数据;一个或多个高速缓存存储器,用于存储所述渲染目标数据;编解码器单元,与所述一个或多个高速缓存存储器耦合,所述编解码器单元用于对所述渲染目标数据应用有保证比率的压缩以便减少与所述渲染目标数据相关联的高速缓存占用量;以及高速缓存控制逻辑,用于控制所述一个或多个高速缓存存储器中的至少一个,所述高速缓存控制逻辑用于利用所述有保证比率的压缩来根据所述有保证比率的压缩的所述压缩比提高所述高速缓存的存储效率。一个实施例提供了一种图形处理装置,包括:第一高速缓存存储器,用于存储图形流水线数据,所述第一高速缓存存储器具有用于向第一高速缓存存储器进行的经掩蔽写入的字节掩码以及用于高速缓存行内每个像素数据块的脏位,每个高速缓存行包括用于存储多个像素块的存储器;第二高速缓存存储器,所述第二高速缓存用于基于所述字节掩码来合并来自所述第一高速缓存的部分驱逐;高速缓存控制器,用于至少管理所述第一高速缓存存储器,所述高速缓存控制器用于基于主要高速缓存替换策略来确定可能驱逐的一组高速缓存行,并驱逐具有最大数量脏块的所述高速缓存行。一个实施例提供了一种图形处理装置,包括:一个或多个高速缓存存储器、以及耦合到所述一个或多个高速缓存存储器的编解码器单元。所述编解码器单元可以被配置成在向或从所述一个或多个高速缓存存储器存储或驱逐渲染目标数据之后立即无损地压缩所述渲染目标数据。为了无损地压缩所述渲染目标数据,所述编解码器单元用于:针对所述渲染目标内的像素图块,确定每个颜色通道的最小值、每个颜色通道的一组残差值、以及每个颜色通道的宽度,并且经由一组紧凑基值来对每个颜色通道的宽度进行编码,所述一组紧凑基值包括少于宽度的所有可能值。本领域技术人员将从以上描述中领会到,实施例的宽泛技术可以以各种形式实施。因此,虽然已经结合其特定示例描述了这些实施例,但是实施例的实际范围不应由此受限,因为其他的修改在本领域技术人员学习了附图、说明书和所附权利要求之后就将变得显而易见。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1