CN110291562A - 缓冲器索引格式和压缩 - Google Patents

缓冲器索引格式和压缩 Download PDF

Info

Publication number
CN110291562A
CN110291562A CN201880011335.XA CN201880011335A CN110291562A CN 110291562 A CN110291562 A CN 110291562A CN 201880011335 A CN201880011335 A CN 201880011335A CN 110291562 A CN110291562 A CN 110291562A
Authority
CN
China
Prior art keywords
index
group
value
symbol
compressed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201880011335.XA
Other languages
English (en)
Other versions
CN110291562B (zh
Inventor
M·J·I·福勒
I·内弗雷弗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN110291562A publication Critical patent/CN110291562A/zh
Application granted granted Critical
Publication of CN110291562B publication Critical patent/CN110291562B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Multimedia (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Abstract

描述了灵活、动态且有效的压缩和解压缩机制。示例压缩机制包括读取多个索引组,标识多个组中的每个组中的最小索引,旋转多个组中的每个组中的索引,使得最小索引是第一值,对于剩余索引,计算相对于多个组中的每个组中的最小索引的无符号增量编码值,将多个索引组转换为多个压缩索引组,并且存储多个压缩索引组。示例解压缩机制包括读取多个压缩索引组,将第一索引标识为多个组中的每个组中的绝对值,计算多个组中的每个组的剩余索引,并且将多个压缩索引组转换为多个解压缩索引组。

Description

缓冲器索引格式和压缩
背景技术
本公开涉及计算机图形系统,并且更具体地涉及在计算机设备上绘制图形时的缓冲器格式和缓冲器压缩。
可以将2D对象或来自3D世界(真实或虚构)的对象绘制到二维(2D)显示屏幕上的计算机图形系统当前用于各种各样的应用中。例如,3D计算机图形可以用于实时交互式应用(诸如视频游戏、虚拟现实、科学研究等)以及离线应用(诸如创建高分辨率电影、图形艺术等)。通常,图形系统包括图形处理单元(GPU)。GPU可以被实现为计算机的中央处理单元(CPU)的协处理器组件,并且可以以附加卡(例如,视频卡)、协处理器的形式提供,或者被提供作为直接集成到计算机的主板或诸如游戏设备等其他设备中的功能。
通常,GPU具有“逻辑图形管线”,逻辑图形管线可以接受2D或3D场景的一些表示作为输入,并且输出限定2D图像的位图以用于显示。例如,微软公司的DIRECTX应用程序编程接口集合(包括DIRECT3D API)是一种具有图形管线模型的API的示例。图形管线通常包括用于将一组顶点、纹理、缓冲器和状态信息转换为屏幕上的图像帧的多个级。GPU或图形管线与图形存储器一起操作,图形存储器可以包括缓冲器,诸如包含用于标识顶点缓冲器中的顶点的索引的一个或多个索引缓冲器,其中索引和顶点信息用于绘制图元。因此,计算机设备操作图形管线以将关于3D对象的信息转换为可以显示的位图,并且该过程需要相当大的存储器和处理能力。
很多视频游戏选择16位索引。然而,顶点的数目可以相对较小,并且不需要很多这些位模式。此外,很多视频游戏在很大程度上依赖硬件实例来进行剔除,提高内存效率并且节省建模成本。这种趋势很可能在未来继续,更丰富的虚拟世界包含更多偶然细节和更长的绘制距离。期望使着色过程更有效,然而,存在使这种简化变得困难的很多复杂性。例如,索引缓冲器中的索引的16位索引格式使得难以在图形管线的不同级之间传递数据。
因此,需要改进索引格式。
发明内容
以下呈现一个或多个特征的简化概述以便提供对本公开的一个或多个示例实现的基本理解。该概述不是所有预期实现的广泛概述,并且既不旨在标识所有实现的关键或重要元素,也不旨在界定任何或所有实现的范围。其唯一目的是以简化的形式呈现一个或多个实现的一些概念,作为稍后呈现的更详细描述的序言。
示例实现涉及用于计算设备中的索引压缩的方法、装置和计算机可读介质。该实现包括在计算机设备中的处理单元处读取多个索引组,每个索引组对应于要绘制的对象的网格的多个图元之一的至少一部分;标识多个组中的每个组中的最小索引;旋转多个组中的每个组中的索引,使得最小索引是第一值,或者为多个组中的每个组计算多个控制位,或者为多个组中的每个组计算多个控制位;对于多个组中的每个组中的剩余索引,计算相对于多个组中的每个组中的最小索引的无符号增量编码值;将多个索引组转换为多个压缩索引组,其中多个压缩索引组中的每个包括与多个组之一的最小索引的绝对值相对应的第一值,后跟多个组之一的剩余索引的无符号增量编码值;并且存储多个压缩索引组。该实现可以可选地包括由处理单元读取所存储的第一值和每个图元的索引的附加值,由处理单元解压缩每个图元的索引以通过写入第一索引的绝对值以及写入每个无符号增量编码值和每个剩余索引的绝对值的总和来确定解压缩的索引,并且存储解压缩的索引。
此外,在附加实现中,该方法包括在计算机设备中的处理单元处读取多个压缩索引组,每个压缩索引组对应于要绘制的对象的网格的多个图元之一的至少一部分;将第一索引标识为多个组中的每个组中的绝对值;通过将绝对值和剩余索引的每个无符号增量编码值相加来计算多个组中的每个组的剩余索引;将多个压缩索引组转换为多个解压缩索引组,其中多个解压缩索引组中的每个包括与多个组之一的绝对值相对应的第一值,后跟多个组之一的剩余索引;并且存储多个解压缩索引组。附加实现可以可选地包括,其中多个索引组中的每个对应于多个图元中的多于一个,并且其中处理单元还被配置为针对多个压缩索引组中的每个计算多个控制位,其中多个控制位中的每个指示多个组之一中的最小索引的位置;将多个控制位中的每个控制位添加到多个压缩索引组中的对应压缩索引组;并且将多个控制位中的每个控制位与多个压缩索引组中的对应压缩索引组一起存储。
此外,一种示例装置可以包括用于索引压缩的计算设备,该计算设备包括处理单元,该处理单元被配置为在计算机设备中的处理单元处读取多个索引组,每个索引组对应于要绘制的对象的网格的多个图元之一的至少一部分;标识多个组中的每个组中的最小索引;旋转多个组中的每个组中的索引,使得最小索引是第一值,或者为多个组中的每个组计算多个控制位,或者为多个组中的每个组计算多个控制位;对于多个组中的每个组中的剩余索引,计算相对于多个组中的每个组中的最小索引的无符号增量编码值;将多个索引组转换为多个压缩索引组,其中多个压缩索引组中的每个包括与多个组之一的最小索引的绝对值相对应的第一值,后跟多个组之一的剩余索引的无符号增量编码值;并且存储多个压缩索引组。
与本公开的实现有关的其他优点和新颖特征将部分地在下面的描述中阐述,并且部分地对于检查了以下内容或通过其实践进行了学习的本领域技术人员将变得更加明显。
附图说明
图1是包括根据本公开配置的图形处理单元和图形管线的计算机设备的示例架构的示意性框图。
图2是图1的计算机设备的图形管线和图形存储器的示例的示意图。
图3A和3B是根据本公开的索引压缩和解压缩方法的示例流程图。
图4是可以应用本文中描述的索引格式化和压缩的示例对象的网格的示意图。
图5是应用于图4的网格的索引的索引格式化、压缩和解压缩的简单压缩示例的示意图。
图6是应用于图4的网格的索引的索引格式化、压缩和解压缩的复杂压缩示例的示意图。
图7是根据本公开的结合简单压缩方案使用的示例索引格式的表。
图8是根据本公开的结合复杂压缩方案使用的示例索引格式的表。
图9是用于本公开的一个或多个实现的示例用例的示意图。
图10是用于本公开的一个或多个实现的另一示例用例的示意图。
具体实施方式
所描述的实现提供了一种图形处理单元(GPU),GPU具有用于索引缓冲器的灵活、动态且有效的索引格式化、压缩和解压缩机制。特别地,所描述的实现允许用于在GPU处压缩和/或解压缩索引缓冲器的不同索引格式(例如,简单或复杂索引格式)。
更具体地,所描述的实现描述了一种简单压缩方案,该压缩方案包括读取图元的索引并且将图元的索引压缩为压缩索引组并且存储压缩索引组。特别地,索引的压缩包括将图元的最小索引指示为第一值,接着是图元的剩余索引的附加值,其中第一值是绝对值,并且附加值是无符号增量编码值。在一些情况下,诸如在替代的复杂压缩方案中,压缩还可以包括读取与多于一个图元相关联的索引集合,并且将控制位添加到每个索引集合以指示第一值的未压缩位置,并且存储压缩索引组中的每个索引集合的控制位。
可选地,在一些情况下,可以在GPU处解压缩压缩索引,其可以包括读取所存储的第一值和每个图元的索引的附加值,并且解压缩每个图元的索引以确定解压缩的索引。解压缩可以包括:写入第一索引的绝对值,并且写入每个无符号增量编码值与每个剩余索引的绝对值的总和,并且存储解压缩的索引。在一些其他可选情况下,诸如在替代的复杂压缩方案中,压缩索引的解压缩还可以包括读取所存储的第一值和与多于一个图元相关联的每个索引集合的附加值,并且解压缩与多于一个图元相关联的索引集合以限定解压缩的索引集合。在这种情况下的解压缩包括基于控制位在未压缩位置写入绝对值,并且按顺序写入每个无符号增量编码值和绝对值的总和,同时对于每个剩余索引,跳过绝对值的未压缩位置,并且存储解压缩的索引集合。
因此,所描述的索引缓冲器的索引格式化、压缩和解压缩机制减少了索引的数据大小,并且可以允许来自索引缓冲器的更多索引信息在给定量的带宽上或在GPU的给定时钟周期内与图形管线交换并且进行处理。
参考图1,在一个示例中,计算机设备10包括被配置为实现所描述的索引格式化、压缩和解压缩的实现的图形处理单元(GPU)12。例如,这些机制可以由GPU 12用来实现具有提高的处理效率或带宽利用率的正向绘制或几何缓冲器放置。
例如,在一个实现中,计算机设备10包括CPU 34,CPU 34可以是被专门配置或编程为根据所描述的实现来控制计算机设备10的操作的一个或多个处理器。例如,用户可以向计算机设备10提供输入以引起CPU 34执行一个或多个软件应用46。在CPU 34上执行的软件应用46可以包括例如但不限于以下中的一个或多个:操作系统、文字处理器应用、电子邮件应用、电子表格应用、媒体播放器应用、视频游戏应用程、图形用户界面应用或其他程序。另外,CPU 34可以包括可以被执行以控制GPU 12的操作的GPU驱动器48。用户可以经由一个或多个输入设备51向计算机设备10提供输入,诸如键盘、鼠标、麦克风、触摸板或通过输入/输出桥49(诸如但不限于南桥芯片组或集成电路)耦合到计算机设备10的另一输入设备。
在CPU 34上执行的软件应用46可以包括一个或多个指令,这些指令可执行以引起CPU 34发出一个或多个图形命令36以引起与图像24相关联的图形数据在显示设备40上的绘制。图像24可以包括例如一个或多个对象,并且每个对象可以包括一个或多个图元,如下面更详细地解释的。例如,在一些实现中,软件应用46将图形命令36放置在系统存储器56中的缓冲器中,并且GPU 12的命令处理器64取回它们。在一些示例中,软件指令可以符合图形应用程序编程接口(API)52,诸如但不限于DirectX和/或Direct3D API、开放图形库(OpenGL.RTM.)API、Open图形库嵌入式系统(OpenGL ES)API、X3D API、RenderMan API、WebGL API、Vulkan API、Metal API、或者任何其他公共或专有标准图形API。为了处理图形绘制指令,CPU 34可以向GPU 12发出一个或多个图形命令36(例如,通过GPU驱动器48)以引起GPU 12执行图形数据的一些或全部绘制。在一些示例中,要绘制的图形数据可以包括图形图元的列表,例如,点、线、三角形、四边形、三角形条等。
计算机设备10还可以包括与CPU 34通信的存储器桥54,存储器桥54支持进出系统存储器56和/或图形存储器58的数据的传输。例如,存储器桥54可以接收存储器读取和写入命令,并且关于系统存储器56和/或图形存储器58提供这些命令以便为计算机设备10中的组件提供存储器服务。存储器桥54经由一个或多个总线60通信地耦合到GPU 12、CPU 34、系统存储器56、图形存储器58和输入/输出桥49。例如,存储器桥54可以是北桥集成电路或芯片组。
系统存储器56可以存储可访问以由CPU 34执行的程序模块和/或指令、和/或由在CPU 34上执行的程序使用的数据。例如,系统存储器56可以存储用于启动计算机设备10的操作系统应用。此外,例如,系统存储器56可以存储由CPU 34用来在显示设备40上呈现图形用户界面(GUI)的窗口管理器应用。此外,系统存储器56可以存储用户应用46和用于由计算机设备10的其他组件使用和/或由其生成的其他信息。例如,系统存储器56可以用作GPU 12的设备存储器(尽管如图所示,GPU 12通常可以直接连接到其自己的图形存储器58,图形存储器58可以包括索引缓冲器100),并且可以存储要由GPU 12操作的数据以及由GPU 12执行的操作产生的数据。例如,系统存储器56可以存储纹理缓冲器、深度缓冲器、模板(stencil)缓冲器、顶点缓冲器、帧缓冲器等的任何组合。系统存储器56可以包括一个或多个易失性或非易失性存储器或存储设备,诸如例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁数据介质或光存储介质。
另外,计算机设备10可以包括系统盘62或者可以与系统盘62通信连接,诸如CD-ROM或其他可移动存储设备。系统盘62可以包括计算机设备10可以用来例如在从系统存储器56启动操作系统失败的情况下启动操作系统的程序和/或指令。系统盘62可以经由输入/输出桥49通信地耦合到计算机设备10的其他组件。
GPU 12可以被配置为执行图形操作以将一个或多个绘制目标44(例如,基于图形图元)绘制到显示设备40以形成图像24。例如,当在CPU 34上执行的软件应用46之一需要图形处理时,CPU 34可以将与图像24相关联的图形命令和图形数据连同图形命令36一起提供给GPU 12以便绘制到显示设备40。图形数据可以包括例如绘图命令、状态信息、图元信息(例如,顶点和索引信息)、纹理信息等。GPU 12可以包括一个或多个处理器,包括用于接收图形命令36并且通过至少一个图元处理器66启动或控制后续图形处理以用于组装图元的命令处理器64、用于处理GPU 12的索引、顶点、表面、像素和其他数据的多个图形着色器处理器68、用于生成片段或像素的纹理数据的一个或多个纹理处理器67、以及用于生成颜色数据和深度数据并且合并阴影输出的一个或多个颜色和深度处理器69。例如,图元处理器66可以实现逻辑图形管线的输入汇编器和光栅化器级,如下所述。在一些情况下,GPU 12可以构建有高度并行的结构,该结构提供比CPU 34更复杂的图形相关操作的有效处理。例如,GPU 12可以包括被配置为以并行方式对多个顶点或像素进行操作的多个处理元件。在一些情况下,与使用CPU 34将图像24直接绘制到显示设备40相比,GPU 12的高度并行性质可以允许GPU12更快地将图形图像24(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示设备40上。
在一些情况下,GPU 12可以集成到计算机设备10的主板中。在其他情况下,GPU 12可以存在于安装在计算机设备10的主板中的端口中的图形卡上,或者可以以其他方式并入被配置为与计算机设备10互操作的外围设备中。GPU 12可以包括一个或多个处理器,诸如一个或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其他等效的集成或离散逻辑电路。
在一个实现中,GPU 12可以直接耦合到图形存储器58。例如,图形存储器58可以存储索引缓冲器、顶点缓冲器、纹理缓冲器、深度缓冲器、模板缓冲器、绘制目标缓冲器、帧缓冲器、状态信息、着色器资源、常数缓冲器、粗略SRP映射(例如,粗分辨率的可视区域的2D映射,其可以用于基于映射中到变换顶点的最近点来查找SRP值)、无序访问视图资源、图形管线流输出等的任何组合。这样,GPU 12可以在不使用总线60的情况下从图形存储器58读取数据和向图形存储器58写入数据。换言之,GPU 12可以使用图形卡的本地存储而不是系统存储器56来本地处理数据。这允许GPU 12通过消除GPU 12通过总线60读取和写入数据的需要来以更有效的方式操作,总线60可能经历繁重的总线业务。然而,在一些情况下,GPU 12可以不包括单独的存储器,而是可以经由总线60利用系统存储器56。图形存储器58可以包括一个或多个易失性或非易失性存储器或存储设备,诸如例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁数据介质或光存储介质。
CPU 34和/或GPU 12可以将绘制图像数据(例如,绘制目标44)存储在图形存储器58的绘制目标缓冲器中。应当注意,绘制目标缓冲器也可以是独立存储器,或者可以在系统存储器56内分配。GPU12还可以包括解析器组件70,解析器组件70被配置为从图形存储器58的绘制目标缓冲器中检索数据并且将多重采样数据转换为每像素颜色值以发送到显示设备40以显示由绘制图像数据表示的图像24。在一些示例中,GPU 12可以包括数模转换器(DAC),DAC被配置为将从解析的绘制目标缓冲器检索的数字值转换为由显示设备40可消耗的模拟信号。在其他示例中,GPU 12可以通过数字接口将数字值传递给显示设备40,诸如高清多媒体接口(HDMI接口)或显示端口接口,以用于附加处理和转换为模拟值。这样,在一些实现中,GPU 12、图形存储器58和解析器组件70的组合可以被称为图形处理系统72。
显示设备40可以包括显示器、电视、投影设备、液晶显示器(LCD)、等离子显示面板、发光二极管(LED)阵列(诸如有机LED(OLED)显示器)、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视显示器、纳米晶体显示器或其他类型的显示单元。显示设备40可以集成在计算机设备10中。例如,显示设备40可以是移动电话的屏幕。备选地,显示设备40可以是经由有线或无线通信链路耦合到计算机设备10的独立设备。例如,显示设备40可以是经由电缆或无线链路连接到个人计算机的计算机显示器或平板显示器。
根据所描述的实现的一个示例,图形API 52和GPU驱动器48可以将GPU 12配置为执行逻辑图形管线14以执行如本文所述的索引格式化、压缩和解压缩。
参考图2,在一个示例中,GPU 12可以被配置为实现可以结合光栅化来执行索引格式化、压缩和解压缩的示例逻辑图形管线14的级。在实现中,各个级中的一个或多个可以是可编程的,例如,以利用上述新的内插SRP值。此外,在实现中,公共着色器核可以由圆角矩形块表示。这种可编程性使得图形管线14非常灵活和适应性强。现在在下面简要描述每个级的目的,并且将关于附图进一步描述附加功能。
计算着色器级79可以诸如从一个或多个索引缓冲器100和一个或多个顶点缓冲器102获取索引和顶点信息,并且执行索引信息的预处理以特别地如本文所述格式化和压缩索引。另外,在一些情况下,计算着色器级79还可以执行剔除以移除在显示图像24时未看到的几何形状。因此,计算着色器级79可以生成新的压缩索引信息以存储在一个或多个索引缓冲器100中。
输入汇编器级80向管线提供数据(三角形、线、点和索引),该数据可以从索引缓冲器100、顶点缓冲器102等获取。顶点着色器级82处理顶点,通常执行诸如变换、蒙皮和照明等操作。顶点着色器级82采用单个输入顶点并且产生单个输出顶点。凸包着色器级84、镶嵌器级86和域着色器级88包括可以被绕过的镶嵌级。镶嵌级将高阶表面转换为三角形(例如,图元)以在逻辑图形管线14内进行绘制。
几何着色器级90可选地(例如,该级可以被绕过)处理整个图元22。其输入可以是完整图元22(其为三角形的3个顶点、线的两个顶点或点的单个顶点)、四边形或矩形。此外,每个图元还可以包括任何边缘相邻图元的顶点数据。这最多可以包括三角形的附加的3个顶点或线的附加的两个顶点。几何着色器级90还支持有限的几何放大和去放大。给定输入图元22,几何着色器可以丢弃图元,或者发出一个或多个新图元。
流输出级92在其到光栅化器的路径上将图元数据从图形管线14流传输到图形存储器58。数据可以流出和/或传递到光栅化器级94。流出到图形存储器58的数据可以作为输入数据再循环回图形管线14或从CPU 34(图1)读回。
光栅化器级94修剪或剔除图元(例如,移除不在视图中的图元以免进行进一步处理),为像素着色器级96准备图元,并且确定如何调用像素着色器。另外,光栅化器级94执行精细扫描转换并且确定被片段覆盖的像素样本位置。像素着色器级96接收用于图元和/或片段的内插数据,并且生成每像素数据,诸如颜色和样本覆盖掩模。输出合并器级98将各种类型的流水线输出数据(像素着色器值、深度和模板信息和覆盖掩模)与绘制目标44(图1)和深度/模板缓冲器的内容组合以生成图形管线14的最终结果。
此外,图形管线14可以与图形存储器58一起操作以交换和存储数据。例如,图形存储器58可以包括一个或多个索引缓冲器102,索引缓冲器102包含到顶点缓冲器100中的整数偏移并且用于更有效地绘制图元22。每个索引缓冲器102包含一组连续索引;每个索引用于标识顶点缓冲器中的顶点。
此外,图形存储器58可以包括一个或多个顶点缓冲器100,每个顶点缓冲器100包含用于限定图像24(或其他图像)的几何形状的顶点数据。顶点数据包括位置坐标、颜色数据、纹理坐标数据、普通数据等。顶点缓冲器100的最简单示例是仅包含位置数据的顶点缓冲器。更常见的是,顶点缓冲器100包含完全指定3D顶点所需要的所有数据。这样的示例可以是包含每顶点位置、法线和纹理坐标的顶点缓冲器100。该数据通常被组织为每顶点元素的集合。
此外,图形存储器58可以包括允许将着色器常数、着色器数据和/或任何其他着色器资源有效地提供给图形管线14的一个或多个常数缓冲器104。此外,常数缓冲器104可以用于存储流输出级92的结果。此外,图形存储器58可以包括一个或多个纹理缓冲器或纹理数据105,诸如向对象提供纹理的外观的像素颜色的位图。
另外,图形存储器58可以包括一个或多个无序访问视图资源106(其包括缓冲器,纹理和纹理阵列——没有多重采样)。无序访问资源106允许来自多个线程的时间无序读/写访问。这表示可以通过多个线程同时读/写该资源类型,而不会通过使用某些限定的函数而生成存储器冲突。
此外,图形存储器58可以包括一个或多个绘制目标缓冲器108,绘制目标缓冲器108包含由图形管线14产生的图像24的每个像素32的绘制目标或绘图(例如,图1的绘制目标44)。
参考图3-6,参考示例网格380(图4)和示例简单格式化和压缩方案381(图5)和/或示例复杂格式化和压缩方案383(图6),解释了具有图形管线14的计算机设备10的操作的示例方法300(图3A),该图形管线14用于执行索引格式化,例如,索引缓冲器的压缩和解压缩,以及用于图形处理和绘制图像24。
具体地,参考图3A,方法300在对象的网格380的上下文中描述,诸如立方体的3D模型。GPU 12可以将立方体的网格380绘制为一系列三角形——三角形1-6(例如,T1、T2、T3、T4、T5和T6),每个三角形由3个顶点限定,其中顶点可以在三角形之间共享。例如,三角形1(T1)由顶点{0,1,2}限定,三角形2(T2)由顶点{0,2,3}限定,三角形3(T3)由顶点{3,2,4}限定,三角形4(T4)由顶点{4,2,5}限定,三角形5(T5)由顶点{5,2,1}限定,三角形6(T6)由顶点{5,1,6}限定。一个或多个索引缓冲器100(图2)包含用于在一个或多个顶点缓冲器102(图2)中标识这些顶点的索引382。换言之,顶点缓冲器存储顶点坐标,索引缓冲器存储索引或索引数组,如果存储在顶点缓冲器中的顶点按照由索引数组限定的顺序连接,则绘制图元。
在310处,方法300包括在计算机设备中的处理单元处读取多个索引组,每个索引组对应于要绘制的对象的网格的多个图元之一的至少一部分。例如,在实现中,CPU 34、GPU12、计算着色器级79和/或计算机设备的任何其他处理单元可以读取多个索引组382,例如三角形T1-T6的{0,1,2}、{0,2,3}、{3,2,4}、{4,2,5}、{5,2,1}和/或{5,1,6}。每个索引组可以对应于要绘制的对象的网格的多个图元之一的至少一部分。应当理解,尽管图元可以是线、三角形、多边形等,但是三角形用作用于描述本公开中的细节的参考。
在312处,方法300包括标识多个组中的每个组中的最小索引。例如,在实现中,CPU34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以标识每个组中的最小索引,例如{0,1,2}的索引“0”、{0,2,3}的“0”、{3、2、4}的“2”、{4、2、5}的“2”、{5,2,1}的“1”、和/或{5、1、6}的“1”。
在314处,方法300包括旋转多个组中的每个组中的索引,使得最小索引是第一值,或者为多个组中的每个组计算多个控制位,或者为多个组中的每个组计算多个控制位。例如,在一个实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元)可以旋转索引,使得第一值388是最小的并且还保留缠绕顺序,如图5所示。即,第一索引388是最小的,并且第一值388和附加值390相对于每个图元以相同的缠绕顺序(例如,方向)布置在每个压缩索引384中,例如,沿顺时针或逆时针方向。在附加示例中,在314处,方法300可以为多个组中的每个组计算控制位(例如,多个控制位),其中多个控制位中的每个控制位指示多个组之一中的最小索引的位置。当多个索引组中的每个索引组对应于多个图元中的多于一个图元时,方法300可以为多个组中的每个组计算多个控制位,如图6的392所示。例如,在另一实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元)可以计算多个控制位,例如控制位396。控制位396指示第一值388的未转换或未压缩的(例如,初始或原始)位置。换言之,控制位396指示多个组之一中的最小索引的位置,如图6所示。例如,如398处参考重新格式化的索引集合{4,4,2,5}和压缩索引集合{2,+2,+2,+3,2}所示,控制位396的值“2”指示第一值388(例如,在这种情况下为“2”)最初以2个位置远离其在集合中的当前初始位置。
在316处,方法300包括对于多个组中的每个组中的剩余索引,计算相对于多个组中的每个组中的最小索引的无符号增量编码值。例如,在实现中,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以计算无符号增量编码值(例如,与绝对值相加以获取原始值的值),无符号增量编码值可以是最小索引值与剩余索引的索引值之间的差值,例如,相对于索引组{0,1,2}的最小索引“0”(388)的“+1”和“+2”(390);相对于索引组{0,2,3}的最小索引“0”的“+2”和“+3”;相对于索引组{3,2,4}的最小索引“2”的“+2”和“+1”;相对于索引组{4,2,5}的最小索引“2”的“+3”和“+2”;相对于索引组{5,2,1}的最小索引“1”的“+4”和“+1”;和/或相对于索引组{5,1,6}的最小索引“1”的“+5”和“+4”。
在318处,方法300包括将多个索引组转换为多个压缩索引组,其中多个压缩索引组中的每个包括与多个组之一的最小索引的绝对值相对应的第一值,后跟多个组之一的剩余索引的无符号增量编码值。例如,在实现中,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以将多个索引组382转换为多个压缩索引组384。
例如,参考图5(例如,简单格式化/压缩方案的情况),每个三角形T1至T6的索引382被转换为输出压缩索引384。具体地,三角形T1的索引382(例如,索引{0,1,2})被转换和/或旋转(或重新布置)(也称为压缩,如386所示)为压缩索引384,例如{0,+1,+2},其中压缩索引384中的第一值388(其可以是绝对值)为“0”指示或表示三角形T1的最小索引,后跟为“+1”和“+2”的附加值390,这些附加值390是无符号增量编码值,例如,无符号增量(相对于最小值)。应当注意,三角形T1的索引{0、1、2}在转换/压缩之前不旋转,因为不需要它。在附加示例中,三角形T5的索引{5,2,1}被压缩为{1,+4,+1},其中第一值“1”指示三角形5的最小索引,后跟附加值“+4”和“+1”,这些附加值是剩余索引的无符号增量编码值。应当注意,三角形T5的索引{5,2,1}在增量编码之前旋转。可以以类似的方式转换/压缩(例如,旋转和/或增量编码)其他三角形(例如,三角形T2、T3、T4和T6)中的每个的索引。还应当注意,第一值388和附加值390在每个压缩索引384中相对于每个图元以相同的缠绕顺序(例如,方向)布置,例如,沿顺时针或逆时针方向。
另外,在320处,方法300可以可选地将多个控制位中的每个控制位添加到多个压缩索引组中的对应压缩索引组。例如,在实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元)可以如图6的384所示向每个索引集合(或每个索引块)添加控制位396以限定转换/压缩索引384。例如,如398处参考重新格式化索引集合{4,4,2,5}和压缩索引集合{2,+2,+2,+3,2}所示,控制位396的值“2”指示第一值388(例如,在这种情况下为2)最初以2个位置远离其在集合中的当前初始位置。这样,控制位396使得转换(或压缩)的索引384能够被转换、转换回、解转换或解压缩并且重新布置以将每个索引返回到它们在集合中的原始位置。然后,处理单元可以在方法300的322处将压缩索引384存储在索引缓冲器100中。
在322处,方法300包括存储多个压缩索引组。例如,在实现中,处理单元(例如,CPU34、计算着色器级79和/或计算机设备的任何其他处理单元)可以将压缩索引组384(例如,索引{0,+1,+2}、{0,+2,+3}、{2,+2,+1}、{2,+3,+2}、{1,+4,+1}和/或{1,+5,+4})存储在索引缓冲器100中(图2)。在附加实现中,处理单元(例如,CPU 34、计算着色器级79和/或计算机设备的任何其他处理单元)可以将压缩索引组384(例如,索引{0,+1,+2,+0,0}、{2,+1,+1,+0、0}、{2,+2,+2,+3,2}、{1,+4,+1,+4,2}和/或{1,+5,x,x,0})存储在索引缓冲器100(图2)中。
参考图3B,描述了用于解压缩索引的示例方法350。
在360处,方法350包括在计算机设备中的处理单元处读取多个压缩索引组。例如,在实现中,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以读取多个索引组384。在一个示例中,多个压缩索引组384可以包括{0,+1,+2}、{0,+2,+3}、{2,+2,+1}、{2,+3,+2}、{1,+4,+1}和/或{1,+5,+4},如图5所示。在附加示例中,多个压缩索引组384可以包括{0,+1,+2,+0,0}、{2,+1,+1,+0,0}、{2,+2,+2,+3,2}、{1,+4,+1,+4,2}和/或{1,+5,x,x,0}。
在362处,方法350包括将第一索引标识(或解释)为多个组中的每个组中的绝对值。例如,在实现中,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以将第一索引388(例如,值“0”(对于图5中的简单格式化或压缩,或者值“2”(对于图6中的复杂格式化或压缩))标识(或解释)为绝对值。
在附加实现中,在364处,方法350可以可选地包括为多个压缩索引组中的每个读取多个控制位。当多个索引组中的每个索引组对应于多个图元中的多于一个时,方法300可以为多个组中的每个组读取多个控制位。例如,在实现中,处理单元(例如,CPU 34、GPU12、计算着色器级79和/或计算机设备的任何其他处理单元)可以为多个压缩索引组中的每个读取控制位396。控制位396指示第一值388的未转换或未压缩(例如,初始或原始)位置。
在366处,方法350包括通过将绝对值和剩余索引的每个无符号增量编码值相加来计算多个组中的每个组的剩余索引。例如,在实现中,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以通过将绝对值388(例如,值“0”(对于图5中的简单格式化或压缩)或值“2”(对于图6中的复杂格式化或压缩))和剩余索引的每个无符号增量编码值390相加来计算剩余索引。也就是说,通过将绝对值388与剩余索引的每个无符号增量编码值390相加来为多个索引组中的每个计算剩余索引。例如,剩余索引390可以被计算为如图5所示的“1”和“2”或者如图6所示的1、2、0(参考图6进一步详细描述)。
在368处,方法350包括将多个压缩索引组转换为多个解压缩索引组,其中多个解压缩索引组中的每个包括与多个组之一的绝对值相对应的第一值,后跟多个组之一的剩余索引。例如,在实现中,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元可以将多个压缩索引组384转换为多个解压缩索引组394或392,其中多个解压缩索引组中的每个包括与多个组之一的绝对值相对应的第一值,后跟多个组之一的剩余索引。例如,转换可以包括将{0,+1,+2}转换为{0,1,2},如图5所示,和/或将{0,+1,+2,+0,0}转换为{0,1,2,0},如图6所示。
例如,参考图5,对于第一图元,例如,三角形T1,任何处理单元可以通过写入第一索引的绝对值“0”以及每个增量“+1”和“+2”与剩余索引的绝对值“0”的总和来转换(或解压缩)压缩索引384。即,CPU 34、GPU 12、计算着色器级79和/或任何处理单元可以解压缩压缩索引384以生成解压缩索引394。例如,处理单元解压缩T1的压缩索引384,例如{0,+1,+2},以生成T1的解压缩索引394,例如{0,1,2}。类似的过程用于解压缩其他图元的压缩索引384,例如三角形T2-T6。然而,应当注意,当三角形T4-T6的索引被解压缩时,索引被旋转396,例如,不完全与原始索引集合382中的顺序相同。但是,如果上述压缩或解压缩机制(也称为简单压缩或简单压缩方案)用于三角形图元以有效地使用增量比特,则这不会产生差别。在一个实现中,例如,CPU 34可以用于解压缩索引。当索引被离线压缩并且输入汇编器级80无法解释在GPU 12上运行的应用时,这可能是相关的。在这种情况下,标题(title)可以在使用之前解压缩索引,使用CPU 34或GPU上的着色器级,例如,计算着色器。
在附加实现中,在370处,方法350可以可选地包括基于多个控制位写入未压缩位置的第一值。例如,在实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元)可以基于控制位396写入未压缩位置的第一值388,如图6的392所示。
在372处,方法350可以包括按顺序写入剩余索引的每个无符号增量编码值和第一值的总和,同时针对每个剩余索引,跳过第一值的未压缩位置。例如,在实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元)可以按顺序写入剩余索引390的每个无符号增量编码值和第一值388的总和,如图6的392所示。
在374处,方法350包括存储多个解压缩索引组。例如,在实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备的任何其他处理单元)可以将解压缩索引组397或392存储在索引缓冲器100中(图2)。
此外,如总体上在399处所示,处理单元可以被配置为将解压缩的索引集合392解释为原始索引集合382,例如,解释为原始顺序中的三角形T1至T6的索引。上述复杂压缩方案可以与任何拓扑一起使用,因为顺序没有变化,例如,由于使用控制位396。
上面描述的压缩方案(简单和复杂)用于在读/写索引数据,在磁盘上存储索引数据,加载索引数据时压缩索引以获取更好的性能,并且也可以节省存储器(例如,使用更少存储器)。
参考图6,在可以使用复杂格式化、压缩和/或解压缩机制的另一实现中,处理单元(例如,CPU 34、GPU 12、计算着色器级79、输入汇编器级80、和/或图形管线14的任何其他级)可以读取与一个或多个图元(例如,多于一个图元;或者具有多于3个索引的一个图元,例如四边形)相关联的索引集合382(例如,块)。例如,在图4的示例网格380中,处理单元通常可以在每个读取中读取4个索引,并且将原始索引382编码(例如,重新格式化)为重新格式化的索引集合392。例如,对于图4的立方体的网格380,6个三角形T1-T6的18个索引被编码为表示重新格式化的索引集合392的4.5个块。具体地,处理单元可以将索引382(例如,{0,1,2}、{0,2,3}、{3,2,4}、{4,2,5}、{5,2,1}和{5,1,6})编码到新的重新格式化的索引集合392中,例如{0,1,2,0}、{2,3,3,2}、{4,4,2,5}、{5,2,1,5}和{1,6}。然后,CPU 34、GPU12、计算着色器级79、输入汇编器级80和/或图形管线14的任何其他级可以使用上述压缩方案来压缩和旋转(或重新布置)(如386所示)重新格式化的索引集合392。
另外,如384所示,处理单元还可以将控制位396添加到每个索引集合(或每个索引块)以限定压缩索引384。控制位396指示第一值388的未压缩(例如,初始或原始)位置。例如,如398处参考重新格式化的索引集合{4,4,2,5}和压缩索引集合{2,+2,+2,+3,2}所示,控制位396的值“2”指示第一值388(例如,在这种情况下为“2”)最初以2个位置远离其在集合中的当前初始位置。这样,控制位396使得压缩索引384能够被解压缩和重新布置以将每个索引返回到它们在集合中的原始位置。然后,处理单元可以将压缩索引384存储在索引缓冲器100中。
在解压缩期间,处理单元(例如,CPU 34、GPU 12、计算着色器级79和/或计算机设备14的任何其他处理单元)可以读取所存储的第一值388和压缩索引组384中的每个的附加值390。然后,如总体上在397处所示,处理单元(例如,CPU 34、GPU 12、计算着色器级79等)可以通过以下方式来限定重新格式化的索引集合392:基于控制位396写入集合中的未压缩位置的第一值388并且按顺序写入每个无符号增量编码附加值390和第一值380的总和,同时针对每个剩余时隙,跳过第一值388的未压缩位置。也就是说,控制位396指示写入第一值388的位置,然后解压缩(反向无符号增量压缩)并且按顺序写入每个无符号增量压缩附加值390,以跳过第一值388的重新格式化的位置。
然后,处理单元可以将解压缩的重新格式化的索引集合392存储在计算着色器79或输入汇编器80中。此外,如总体上在399处所示,处理单元可以被配置为将重新格式化的索引集合392解释为原始索引集合382,例如,解释为原始顺序中的三角形T1至T6的索引。上述复杂压缩方案可以与任何拓扑一起使用,因为顺序没有变化,例如,由于使用控制位396。
上面描述的压缩方案(简单和复杂)用于在读/写索引数据,在磁盘上存储,加载时间时压缩索引以获取更好的性能,和/或也可以节省存储器(例如,使用更少存储器)。
图7是索引格式410以及对应的绝对值420、增量430、注释440、字节450和带宽460的示例的表400。这些示例索引格式410可以与上述简单压缩方案结合使用。例如,索引格式412(例如,“12_1010”)表示32位(4字节)格式,其包括用于绝对值的12位(最多4095个绝对值)以及两个无符号增量中的每个的10位(每个无符号增量最多1024个无符号增量值)。在另一示例中,索引格式414(例如,“14_99”)表示32位格式,其包括用于绝对值的14位(最多16383个绝对值)以及用于2个无符号增量中的每个的9位(每个无符号增量最多512个无符号增量值)。在简单压缩方案中,在压缩时从每个增量值中减去值“1”,并且在解压缩时加上值“1”以获取1024或512的最大范围(而不是为1023/511的最大范围)。索引格式412和414可以被称为简单格式,和/或可以实现压缩,与最常用的16位索引格式相比,该压缩可以占据例如66%的带宽。
另外,在一个实现中,用于无符号增量值的10位提供1-1024的范围。例如,当索引{0,1,2}、{0,2,3}、{3,2,4}、{4,2,5}、{5,2,1}、{5,1,6}被压缩为{0,+1,+2}、{0,+2,+3}、{2,+2,+1}、{2,+3,+2}、{1,+4,+1}、{1,+5,+4}时,每个三角形的两个无符号增量值具有在压缩时移除并且在解压缩时添加的隐式“+1”。这可能导致存储{0,0,1}、{0,1,2}、{2,1,0}、{2,2,1}、{1,3,0}、{1,4,3}以提供更多范围(对于无符号增量值)。这仅适用于简单压缩方案。
图8是索引格式410以及对应的绝对值420、增量430、注释440、字节450和带宽460的示例的表500。这些示例索引格式410(即,索引格式512、514和516)可以与上述复杂压缩方案结合使用。例如,索引格式512(例如,“9_777_2”)表示32位(4字节)格式,其包括用于绝对值的9位(给出最大值511)、用于3个无符号增量中的每个的7位(针对每个无符号增量值,给出最大值127)、以及用于控制位的2位(例如,用于重新布置索引的顺序)。在另一示例中,索引格式514(例如,“16_101010_2”)表示48位(6字节)格式,其包括用于绝对值的16位、用于3个无符号增量中的每个的10位(对于每个无符号增量值,给出最大值1023)、以及用于控制位的2位。在另一示例中,索引格式516(例如,“32_101010_2”)表示64位格式(8字节),其包括用于绝对值的32位、用于3个无符号增量中的每个的10位、以及用于控制位的2位。应当注意,与32位索引格式相比,索引格式514可以实现75%的压缩率,并且索引格式512和516可以实现50%的压缩率。索引格式512和516可以实现压缩率,与当前索引格式方案相比,该压缩率可以占据例如50%的带宽。然而,索引格式514可以提供更好的范围,但是可能无法实现最佳压缩,因为索引格式514占当前索引格式方案的带宽的约75%。
图9是用图形处理系统72的一部分示出的示例用例900,其中输入汇编器级80知道用于在索引缓冲器100中存储数据的压缩方案。压缩方案可以是如上所述的简单压缩方案或复杂压缩方案、或某种其他压缩方案。在910处,输入汇编器80从索引缓冲器100读取压缩索引(例如,来自图5或图6的压缩索引384),并且在缩输入汇编器级80处解压索引。输入汇编器级80在910处用于读取索引的带宽量与当前解决方案相比更少,因为索引在索引缓冲器100中是压缩形式(例如,来自图5或图6的压缩索引384)。换言之,索引缓冲器100中的索引的压缩减少了GPU 12(例如,输入汇编器级80)必须读取的图形存储器58的量。这可以减少GPU 12使用的带宽量和/或允许更高数据传输速率。然后,输入汇编器级80对压缩的索引进行解压缩,如上面参考图3-6所述,GPU 12继续在顶点着色器级82和光栅化器级94处进行绘制处理,以如上面参考图1和2所述绘制像素。
图10是用图形处理系统72的一部分示出的另一示例用例1000,使得当绘制网格时,可以运行计算着色器79以加载网格(索引、顶点)。计算着色器79执行诸如变换、三角形剔除等操作,并且将计算着色器79的输出写入另一索引缓冲器、仅包含可见三角形的优化索引缓冲器1060。也就是说,在计算着色器79处的剔除操作期间剔除诸如背面三角形等三角形(例如,由硬件、计算着色器79执行的剔除操作)。输入汇编器80如上所述使用类似于图9的过程从优化的索引缓冲器1060读取索引数据以绘制像素。应当注意,在用例1000中压缩的益处更大,因为a)计算着色器79从索引缓冲器100读取压缩索引,b)计算着色器79仅将可见三角形写入优化索引缓冲器1040,以及c)输入汇编器80从优化的索引缓冲器1060读取压缩索引。在一个实现中,上面参考图4-5描述的简单压缩方案可以在用例1000中使用,因为当仅在优化的索引缓冲器1060中存储可见三角形时相对容易丢弃不可见的三角形。输入汇编器80从优化的索引缓冲器1060读取压缩的索引并且在输入汇编器80处解压缩压缩的索引,如上面参考图4所述,并且GPU 12继续在顶点着色器级82和光栅化器级94处进行绘制处理以如上面参考图1和2所述绘制像素。
因此,如上面参考图3-7所述,可以有效地格式化和压缩存储在索引缓冲器100中的索引以改进GPU 12处的操作。
如本申请中使用的,术语“组件”、“系统”等旨在包括计算机相关实体,诸如但不限于硬件、固件、硬件和软件的组合、软件、或执行软件。例如,组件可以是但不限于是在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。作为说明,在计算设备上运行的应用和计算设备都可以是组件。一个或多个组件可以驻留在进程和/或执行线程内,并且组件可以位于一个计算机上和/或分布在两个或更多个计算机之间。另外,这些组件可以从其上存储有各种数据结构的各种计算机可读介质来执行。这些组件可以通过本地和/或远程过程进行通信,诸如根据具有一个或多个数据分组的信号,诸如来自与本地系统、分布式系统中的另一组件交互和/或跨越诸如因特网等网络通过信号的方式与其他系统交互的一个组件的数据。
此外,本文中结合设备(例如,计算机设备10)描述了各种实现,该设备可以是有线设备或无线设备。这样的设备可以包括但不限于游戏设备或控制台、膝上型计算机、平板计算机、个人数字助理、蜂窝电话、卫星电话、无绳电话、会话发起协议(SIP)电话、无线本地环路(WLL)站、个人数字助理(PDA)、具有无线连接能力的手持设备、计算设备、或连接到无线调制解调器的其他处理设备。
此外,术语“或”旨在表示包含性的“或”而不是排他性的“或”。即,除非另有说明或从上下文中清楚,否则短语“X使用A或B”是旨在表示任何自然的包含性排列。也就是说,以下任何一种情况满足短语“X使用A或B”:X使用A;X使用B;或者X使用A和B两者。另外,本申请和所附权利要求中使用的冠词“一个(a)”和“一个(an)”通常应当理解为表示“一个或多个”,除非另有说明或从上下文中很清楚涉及单数形式。
各种实现或特征将在可以包括多个设备、组件、模块等的系统方面来呈现。应当理解和了解,各种系统可以包括附加的设备、组件、模块等,和/或可以并非包括结合附图所讨论的所有设备、组件、模块等。也可以使用这些方法的组合。
结合本文中公开的实施例而描述的方法的各种说明性逻辑、逻辑块和动作可以使用被设计为执行本文中描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、离散门或晶体管逻辑、分立硬件组件或其任何组合中的特别编程的一者来实施或执行。通用处理器可以是微处理器,但是在替代方案中,处理器可以是任何传统的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP核、或任何其他这样的配置。另外,至少一个处理器可以包括可操作以执行上述步骤和/或动作中的一个或多个的一个或多个组件。
此外,结合本文中公开的实现而描述的方法或算法的步骤和/或动作可以直接用硬件、由处理器执行的软件模块或两者的组合来实施。软件模块可以驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移除磁盘、CD-ROM或本领域已知的任何其他形式的存储介质中。示例性存储介质可以耦合到处理器,使得处理器可以从存储介质读取信息和向存储介质写入信息。在替代方案中,存储介质可以是处理器的组成部分。此外,在一些实现中,处理器和存储介质可以驻留在ASIC中。另外,ASIC可以驻留在计算机设备(诸如但不限于游戏控制台)中。在替代方案中,处理器和存储介质可作为分立组件驻留在用户终端中。另外,在一些实现中,方法或算法的步骤和/或动作可以作为一个或任何组合或一组代码和/或指令驻留在可以并入计算机程序产品中的机器可读介质和/或计算机可读介质上。
在一个或多个实现中,所描述的功能可以用硬件、软件、固件或其任何组合来实现。如果用软件实现,则这些功能可以作为一个或多个指令或代码在计算机可读介质上存储或传输。计算机可读介质包括计算机存储介质和通信介质,包括支持将计算机程序从一个地方传送到另一地方的任何介质。存储介质可以是可以由计算机访问的任何可用介质。作为示例而非限制,这种计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储装置、磁盘存储装置或其他磁存储设备、或者可以用于以指令或数据结构的形式携带或存储所需要的程序代码并且可以由计算机访问的任何其他介质。而且,任何连接都可以称为计算机可读介质。本文中使用的磁盘和光盘包括紧凑光盘(CD)、激光光盘、数字通用光盘、数字通用光盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘通常用激光光学地再现数据。上述的组合也应当被包括在计算机可读介质的范围内。
虽然已经结合其示例描述了本公开的实现,但是本领域技术人员将理解,可以在不脱离本发明的范围的情况下对上述实现进行变化和修改。通过考虑说明书或根据本文中公开的实现的实践,其他实现对于本领域技术人员而言是很清楚的。

Claims (15)

1.一种计算机设备中的索引压缩方法,包括:
在所述计算机设备中的处理单元处读取多个索引组,每个索引组对应于要绘制的对象的网格的多个图元之一的至少一部分;
标识所述多个组中的每个组中的最小索引;
旋转所述多个组中的每个组中的索引,使得所述最小索引是第一值,或者计算针对所述多个组中的每个组的多个控制位;
对于所述多个组中的每个组中的剩余索引,计算相对于所述多个组中的每个组中的所述最小索引的无符号增量编码值;
将所述多个索引组转换为多个压缩索引组,其中所述多个压缩索引组中的每个压缩索引组包括与所述多个组之一的所述最小索引的绝对值相对应的所述第一值,后跟所述多个组之一的所述剩余索引的所述无符号增量编码值;以及
存储所述多个压缩索引组。
2.根据权利要求1所述的方法,其中所述第一值和所述剩余索引的所述无符号增量编码值相对于每个图元以相同的缠绕顺序被布置。
3.根据权利要求1所述的方法,其中存储所述压缩索引组还包括使用总共32位进行存储,包括:
对于所述绝对值,使用12位,并且对于所述无符号增量编码值中的每个无符号增量编码值,使用10位;或者
对于所述绝对值,使用14位,并且对于所述无符号增量编码值中的每个无符号增量编码值,使用9位。
4.根据权利要求1所述的方法,其中所述多个索引组中的每个索引组对应于所述多个图元中的多于一个图元,并且所述方法还包括:
计算针对所述多个组中的每个组的所述多个控制位,其中所述多个控制位中的每个控制位指示所述多个组之一中的所述最小索引的位置;
其中所述转换还包括将所述多个控制位中的每个控制位添加到所述多个压缩索引组中的对应压缩索引组;以及
其中所述存储还包括将所述多个控制位中的每个控制位与所述多个压缩索引组中的对应压缩索引组一起存储。
5.根据权利要求4所述的方法,还包括存储所述压缩索引组。
6.根据权利要求5所述的方法,其中存储所述压缩索引组还包括:
使用总共32位进行存储,其中9位用于所述绝对值,7位用于3个无符号增量编码值中的每个无符号增量编码值,并且2位用于所述多个控制位中的每个控制位;或者
使用总共48位进行存储,其中16位用于所述绝对值,10位用于3个无符号增量编码值中的每个无符号增量编码值,并且2位用于所述多个控制位中的每个控制位;或者
使用总共64位进行存储,其中32位用于所述绝对值,10位用于3个无符号增量编码值中的每个无符号增量编码值,并且2位用于所述多个控制位中的每个控制位。
7.一种计算机设备中的索引解压缩方法,包括:
在所述计算机设备中的处理单元处读取多个压缩索引组,每个压缩索引组对应于要被绘制的对象的网格的多个图元之一的至少一部分;
将第一索引标识为所述多个组中的每个组中的绝对值;
通过将所述绝对值和所述多个组中的每个组的剩余索引的无符号增量编码值中的每个无符号增量编码值相加来计算所述剩余索引;
将所述多个压缩索引组转换为多个解压缩索引组,其中所述多个解压缩索引组中的每个解压缩索引组包括与所述多个组之一的所述绝对值相对应的第一值,后跟所述多个组之一的所述剩余索引;以及
存储所述多个解压缩索引组。
8.根据权利要求7所述的方法,其中所述第一值和所述剩余索引的所述无符号增量编码值相对于每个图元以相同的缠绕顺序被读取。
9.根据权利要求7所述的方法,其中所述多个索引组中的每个索引组对应于所述多个图元中的多于一个图元,并且所述方法还包括:
读取针对所述多个压缩索引组中的每个压缩索引组的多个控制位,其中所述多个控制位中的每个控制位指示所述多个组之一中的最小索引的位置;
其中所述转换还包括基于所述多个控制位写入未压缩位置的所述第一值,并且按顺序写入所述剩余索引的每个无符号增量编码值和所述第一值的总和,同时针对所述剩余索引中的每个剩余索引,跳过所述第一值的所述未压缩位置;以及
其中所述存储还包括存储所述多个解压缩索引组中的每个解压缩索引组。
10.一种用于索引压缩的计算设备,包括:
处理单元,被配置为:
在所述计算机设备中的处理单元处读取多个索引组,每个索引组对应于要被绘制的对象的网格的多个图元之一的至少一部分;
标识所述多个组中的每个组中的最小索引;
旋转所述多个组中的每个组中的索引,使得所述最小索引是第一值,或者计算针对所述多个组中的每个组的多个控制位;
对于所述多个组中的每个组中的剩余索引,计算相对于所述多个组中的每个组中的所述最小索引的无符号增量编码值;
将所述多个索引组转换为多个压缩索引组,其中所述多个压缩索引组中的每个压缩索引组包括与所述多个组之一的所述最小索引的绝对值相对应的第一值,后跟所述多个组之一的所述剩余索引的所述无符号增量编码值;以及
存储所述多个压缩索引组。
11.根据权利要求10所述的计算设备,其中所述处理单元还被配置为相对于每个图元以相同的缠绕顺序布置所述第一值和所述剩余索引的所述无符号增量编码值。
12.根据权利要求10所述的计算设备,其中所述处理单元还被配置为使用总共32位来存储所述压缩索引组,包括:
对于所述绝对值,使用12位,并且对于所述无符号增量编码值中的每个无符号增量编码值,使用10位;或者
对于所述绝对值,使用14位,并且对于所述无符号增量编码值中的每个无符号增量编码值,使用9位。
13.根据权利要求10所述的计算设备,其中所述多个索引组中的每个索引组对应于所述多个图元中的多于一个图元,并且其中所述处理单元还被配置为:
为所述多个压缩索引组中的每个压缩索引组计算所述多个控制位,其中所述多个控制位中的每个控制位指示所述多个组之一中的所述最小索引的位置;以及
将所述多个控制位中的每个控制位添加到所述多个压缩索引组中的对应压缩索引组;以及
将所述多个控制位中的每个控制位与所述多个压缩索引组中的对应压缩索引组一起存储。
14.根据权利要求13所述的计算设备,其中所述处理单元还被配置为以适合于一个或两个存储器指令的大小存储所述压缩索引组。
15.根据权利要求14所述的计算设备,其中所述处理单元还被配置为:
使用总共32位来存储所述压缩索引组,其中9位用于所述绝对值,7位用于3个无符号增量编码值中的每个无符号增量编码值,并且2位用于所述多个控制位中的每个控制位;或者
使用总共48位来存储所述压缩索引组,其中16位用于所述绝对值,10位用于3个无符号增量编码值中的每个无符号增量编码值,并且2位用于所述多个控制位中的每个控制位;或者
使用总共64位来存储所述压缩索引组,其中32位用于所述绝对值,10位用于3个无符号增量编码值中的每个无符号增量编码值,并且2位用于所述多个控制位中的每个控制位。
CN201880011335.XA 2017-02-10 2018-02-02 缓冲器索引格式和压缩 Active CN110291562B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762457711P 2017-02-10 2017-02-10
US62/457,711 2017-02-10
US15/626,679 2017-06-19
US15/626,679 US10460418B2 (en) 2017-02-10 2017-06-19 Buffer index format and compression
PCT/US2018/016541 WO2018148109A1 (en) 2017-02-10 2018-02-02 Buffer index format and compression

Publications (2)

Publication Number Publication Date
CN110291562A true CN110291562A (zh) 2019-09-27
CN110291562B CN110291562B (zh) 2023-05-23

Family

ID=63104710

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880011335.XA Active CN110291562B (zh) 2017-02-10 2018-02-02 缓冲器索引格式和压缩

Country Status (4)

Country Link
US (1) US10460418B2 (zh)
EP (1) EP3580726B1 (zh)
CN (1) CN110291562B (zh)
WO (1) WO2018148109A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116758175A (zh) * 2023-08-22 2023-09-15 摩尔线程智能科技(北京)有限责任公司 图元块压缩装置、方法、图形处理器及电子设备
CN117575882A (zh) * 2023-11-17 2024-02-20 摩尔线程智能科技(北京)有限责任公司 顶点缓冲区的更新方法、装置及存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10438569B2 (en) 2017-04-17 2019-10-08 Intel Corporation Consolidation of data compression using common sectored cache for graphics streams
CN110175269B (zh) * 2019-05-31 2021-03-12 西安芯瞳半导体技术有限公司 一种顶点索引的压缩及解压缩方法、装置及计算机存储介质
US20210398325A1 (en) * 2020-06-22 2021-12-23 Advanced Micro Devices, Inc. Delta triplet index compression

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7599975B1 (en) * 2005-03-04 2009-10-06 Nvidia Corporation Decompression of compressed 16 bit data
US20090319549A1 (en) * 2008-06-20 2009-12-24 Perfect Search Corporation Index compression
US7978921B1 (en) * 2007-08-06 2011-07-12 Nvidia Corporation Low dynamic range 3-channel color decompression
US20120229464A1 (en) * 2011-03-09 2012-09-13 Steven Fishwick Compression of a tessellated primitive index list in a tile rendering system
US20140022355A1 (en) * 2012-07-20 2014-01-23 Google Inc. Systems and Methods for Image Acquisition
US20150154733A1 (en) * 2013-12-04 2015-06-04 Nvidia Corporation Stencil buffer data compression

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5369744A (en) * 1989-10-16 1994-11-29 Hitachi, Ltd. Address-translatable graphic processor, data processor and drawing method with employment of the same
US5793371A (en) 1995-08-04 1998-08-11 Sun Microsystems, Inc. Method and apparatus for geometric compression of three-dimensional graphics data
US6304676B1 (en) 1996-10-03 2001-10-16 Mark A. Mathews Apparatus and method for successively refined competitive compression with redundant decompression
US6426747B1 (en) * 1999-06-04 2002-07-30 Microsoft Corporation Optimization of mesh locality for transparent vertex caching
FI115589B (fi) * 2003-10-14 2005-05-31 Nokia Corp Redundanttien kuvien koodaaminen ja dekoodaaminen
US8947444B1 (en) 2008-12-09 2015-02-03 Nvidia Corporation Distributed vertex attribute fetch
GB2483502B (en) 2010-09-10 2014-05-07 Imagination Tech Ltd Random accessible lossless parameter data compression for title based 3D computer graphics system
US8860742B2 (en) * 2011-05-02 2014-10-14 Nvidia Corporation Coverage caching
US9058377B2 (en) * 2011-06-03 2015-06-16 Google Inc. Fixed width encoding document posting lists
US9418616B2 (en) * 2012-12-20 2016-08-16 Nvidia Corporation Technique for storing shared vertices
US10102603B2 (en) 2013-06-10 2018-10-16 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
US9466090B2 (en) * 2013-06-20 2016-10-11 Intel Corporation Subset based compression and decompression of graphics data
US9514563B2 (en) 2013-08-30 2016-12-06 Arm Limited Graphics processing systems
US9836517B2 (en) * 2013-10-07 2017-12-05 Facebook, Inc. Systems and methods for mapping and routing based on clustering
US9589315B2 (en) * 2015-05-06 2017-03-07 Mediatek Inc. Vertex data compression method and apparatus for compressing vertex data through analyzing channel properties and related vertex data decompression method and apparatus
US20170236335A1 (en) 2016-02-11 2017-08-17 Hue As System and method for manipulating acceleration structures
GB2548120B (en) * 2016-03-08 2020-09-16 Advanced Risc Mach Ltd Graphics processing systems

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7599975B1 (en) * 2005-03-04 2009-10-06 Nvidia Corporation Decompression of compressed 16 bit data
US7978921B1 (en) * 2007-08-06 2011-07-12 Nvidia Corporation Low dynamic range 3-channel color decompression
US20090319549A1 (en) * 2008-06-20 2009-12-24 Perfect Search Corporation Index compression
US20120229464A1 (en) * 2011-03-09 2012-09-13 Steven Fishwick Compression of a tessellated primitive index list in a tile rendering system
CN103415872A (zh) * 2011-03-09 2013-11-27 想象技术有限公司 图块渲染系统中的被曲面细分的图元索引列表的压缩
US20140022355A1 (en) * 2012-07-20 2014-01-23 Google Inc. Systems and Methods for Image Acquisition
US20150154733A1 (en) * 2013-12-04 2015-06-04 Nvidia Corporation Stencil buffer data compression

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116758175A (zh) * 2023-08-22 2023-09-15 摩尔线程智能科技(北京)有限责任公司 图元块压缩装置、方法、图形处理器及电子设备
CN116758175B (zh) * 2023-08-22 2024-01-26 摩尔线程智能科技(北京)有限责任公司 图元块压缩装置、方法、图形处理器及电子设备
CN117575882A (zh) * 2023-11-17 2024-02-20 摩尔线程智能科技(北京)有限责任公司 顶点缓冲区的更新方法、装置及存储介质

Also Published As

Publication number Publication date
US10460418B2 (en) 2019-10-29
EP3580726A1 (en) 2019-12-18
WO2018148109A1 (en) 2018-08-16
US20180232849A1 (en) 2018-08-16
CN110291562B (zh) 2023-05-23
EP3580726B1 (en) 2021-06-02

Similar Documents

Publication Publication Date Title
CN110291562A (zh) 缓冲器索引格式和压缩
US10991127B2 (en) Index buffer block compression
CN104272740B (zh) 颜色缓冲和深度缓冲压缩
US11232534B2 (en) Scheme for compressing vertex shader output parameters
US10134175B2 (en) Gradient adjustment for texture mapping to non-orthonormal grid
CN110291563B (zh) 图形处理中的多个着色器进程
US9928637B1 (en) Managing rendering targets for graphics processing units
CN102113305B (zh) 高动态范围纹理压缩
CN108027957A (zh) 用于上下文切换的上下文信息的高效保存和恢复
US10269326B2 (en) Method and apparatus for color buffer compression
CN104823220B (zh) 用于图形处理的图形存储器加载掩模
JP2016523401A (ja) 加えられたインライン動作とともに、ビン毎の可視情報に基づくレンダリングコマンドの条件付き実行
US11501467B2 (en) Streaming a light field compressed utilizing lossless or lossy compression
US10783696B2 (en) Gradient adjustment for texture mapping to non-orthonormal grid
US10089964B2 (en) Graphics processor logic for encoding increasing or decreasing values
CN108780582A (zh) 可见性信息修改
CN115836317A (zh) 增量三元组索引压缩
CN114247138B (zh) 图像渲染方法、装置、设备及存储介质
US20180040095A1 (en) Dynamic compressed graphics state references
Lloyd et al. Practical logarithmic rasterization for low-error shadow maps
Meyer Real-Time Geometry Decompression on Graphics Hardware

Legal Events

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