CN107003964B - 处理未对准块传送操作 - Google Patents

处理未对准块传送操作 Download PDF

Info

Publication number
CN107003964B
CN107003964B CN201580067163.4A CN201580067163A CN107003964B CN 107003964 B CN107003964 B CN 107003964B CN 201580067163 A CN201580067163 A CN 201580067163A CN 107003964 B CN107003964 B CN 107003964B
Authority
CN
China
Prior art keywords
blt
aligned
region
command
commands
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.)
Expired - Fee Related
Application number
CN201580067163.4A
Other languages
English (en)
Other versions
CN107003964A (zh
Inventor
A·E·格鲁贝尔
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of CN107003964A publication Critical patent/CN107003964A/zh
Application granted granted Critical
Publication of CN107003964B publication Critical patent/CN107003964B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明描述用于处理未对准块传送BLT命令的技术。本发明的所述技术可涉及将未对准BLT命令转换为多个对准BLT命令,其中所述多个对准BLT命令可集体地产生与所述未对准BLT命令本应产生的存储器状态相同的所得存储器状态。本发明的所述技术可允许在不需要CPU预处理和/或后处理基础未对准表面的情况下可实现针对未对准BLT命令的相对低功率的GPU加速BLT处理的益处。以此方式,可改善在基于对准约束GPU的系统中与处理未对准BLT命令相关联的性能和/或功率消耗。

Description

处理未对准块传送操作
技术领域
本发明涉及图形处理,且更确切地说,涉及用于利用图形处理器执行块传送(BLT)操作的技术。
背景技术
图形处理单元(GPU)通常执行BLT操作以将源表面区域复制到目的地表面区域,或将多个源表面的对应区域合成到目的地表面的单个对应区域中。GPU可包含用于将表面写入到存储器和从存储器读取表面作为BLT操作的部分的专用硬件。用于写入和读取的GPU硬件可能具有需要满足的各种对准约束条件,以便成功地服务BLT命令。如果BLT命令不满足此类对准约束条件,则所述GPU硬件可能不能够服务所述BLT命令。
发明内容
本发明描述用于处理未对准BLT命令的技术。未对准BLT命令可指不满足对准约束GPU的对准约束条件且因此可能不能够被GPU处理的BLT命令。本发明的技术可涉及将未对准BLT命令转换为多个对准BLT命令,其中所述多个对准BLT命令可集体地产生与未对准BLT命令本应产生的存储器状态相同的所得存储器状态。然而,不同于未对准BLT命令,多个对准BLT命令可满足GPU的对准约束条件,并且因此能够被GPU处理。
相对于使用中央处理单元(CPU),使用GPU来处理BLT命令可加快BLT命令的执行和/或减小与BLT命令的执行相关联的功率消耗。因此,通过将未对准BLT命令转换为多个对准BLT命令,在不需要CPU预处理和/或后处理基础未对准表面的情况下,可实现针对未对准BLT命令的相对低功率的GPU加速BLT处理的益处。以此方式,可改善在基于对准约束GPU的系统中与处理未对准BLT命令相关联的性能和/或功率消耗。
在一个实例中,本发明描述一种方法,其包含利用一或多个处理器将未对准BLT命令转换为多个对准BLT命令。
在另一实例中,本发明描述一种装置,其包含经配置以将未对准BLT命令转换为多个对准BLT命令的一或多个处理器。
在另一实例中,本发明描述一种设备,其包含用于接收未对准BLT命令的装置。所述设备进一步包含用于将未对准BLT命令转换为多个对准BLT命令的装置。
在另一实例中,本发明描述一种计算机可读存储媒体存储指令,其在执行时致使一或多个处理器将未对准BLT命令转换为多个对准BLT命令。
在附图和下文描述中阐述本发明的一或多个实例的细节。本发明的其它特征、目标和优势将从所述描述和图式以及从权利要求书中显而易见。
附图说明
图1是说明可用以实施本发明的BLT操作处理技术的实例计算装置的框图。
图2是更详细地说明图1的计算装置的部分的框图。
图3是说明根据本发明的实例单源BLT操作的概念图。
图4是说明根据本发明的实例多源BLT操作的概念图。
图5是说明用于图1和2的实例计算装置的实例命令处理流程的概念图。
图6是说明根据本发明的用于通过组合表面的线来产生对准表面的实例技术的概念图。
图7和8是说明使用图6中所说明的技术将未对准BLT操作转换为两个对准BLT操作的实例的概念图。
图9是说明根据本发明的用于界定多个对准虚拟表面的实例技术的概念图。
图10和11是说明根据本发明的使用图9中所界定的多个对准虚拟表面将未对准BLT操作转换为两个对准BLT操作的实例的概念图。
图12是说明根据本发明的用于处理未对准BLT操作的实例技术的流程图。
具体实施方式
本发明描述用于处理未对准块传送(BLT)命令的技术。未对准BLT命令可指不满足对准约束图形处理单元(GPU)的对准约束条件并且因此可能不能够被GPU处理的BLT命令。本发明的技术可涉及将未对准BLT命令转换为多个对准BLT命令,其中所述多个对准BLT命令可集体地产生与未对准BLT命令本应产生的存储器状态相同的所得存储器状态。然而,不同于未对准BLT命令,多个对准BLT命令可满足GPU的对准约束条件,并且因此能够被GPU处理。
相对于使用中央处理单元(CPU),使用GPU来处理BLT命令可加快BLT命令的执行和/或减小与BLT命令的执行相关联的功率消耗。因此,通过将未对准BLT命令转换为多个对准BLT命令,在不需要CPU预处理和/或后处理基础未对准表面的情况下,可实现针对未对准BLT命令的相对低功率的GPU加速BLT处理的益处。以此方式,可改善在基于对准约束GPU的系统中与处理未对准BLT命令相关联的性能和/或功率消耗。
BLT命令可指发指令给GPU以执行BLT操作的命令。BLT操作可指涉及将源表面区域复制到目的地表面区域、或将多个源表面的对应区域合成到目的地表面的单个对应区域中的操作。源表面区域可称作源区域,且目的地表面区域可称作目的地区域。所述源区域和目的地区域或者可称为BLT区域和/或复制区域,以指示复制和合成相对于这些区域内的像素而发生。BLT区域中的每一者可以是包含相应BLT区域的表面的连续子集。在一些实例中,BLT区域可为矩形区域。
GPU可包含用于将表面写入到存储器和从存储器读取表面作为BLT操作的部分的专用硬件。所述硬件可具有对准约束条件,其要求表面的每一行的开始对应于是预定对准宽度的整数倍数的存储器地址。满足对准约束条件的表面称为对准表面,而不满足对准约束条件的表面称为未对准表面。
时常,编译器或应用程序可存取将执行BLT操作的特定GPU硬件的对准约束条件,且可因此基于所述对准约束条件而产生BLT指令以使得所得表面被对准。然而,并非所有系统使GPU的对准约束条件可供编译器或应用程序使用。或即便可用,一些编译器或应用程序也可能因为各种原因(例如,为了减小编译器或应用程序的复杂度)而确定不优化所产生的代码来满足此类对准约束条件。
如果用于BLT操作的一或多个表面并不满足GPU硬件的对准约束条件,则GPU驱动程序可能不能够直接使用GPU来加快BLT操作的性能。GPU驱动程序可能改为需要利用中央处理单元(CPU)执行BLT操作。在其它情况下,GPU驱动程序可使用CPU来将未对准表面复制到对准表面中,使用GPU对对准表面执行BLT操作,且使用CPU将BLT操作的结果复制回到未对准表面中。在任一情况下,使用CPU执行BLT操作自身或在未对准表面与对准表面之间转变会增大BLT操作的功率消耗且降低BLT操作的性能。
对准BLT命令可指其中与BLT命令相关联的所有表面是对准表面的BLT命令。未对准BLT命令可指其中所述表面中的至少一者是未对准表面的BLT命令。类似地,对准BLT操作可指其中与BLT操作相关联的所有表面是对准表面的BLT操作,且未对准BLT操作可指其中所述表面中的至少一者是未对准表面的BLT命令。
在概念上,对准表面可指其中所述表面的每一行的开始对应于是预定对准宽度的整数倍数的存储器地址的表面。在一些实例中,所述预定对准宽度可对应于GPU存储器存取硬件所需的用于适当执行BLT操作的对准宽度。对准边界可指是预定对准宽度的整数倍数的存储器地址。
表面可由表面指针、表面宽度参数和表面高度参数界定。所述表面指针可指示(或指向)对应于所述表面的起始的存储器地址。所述表面宽度参数(或跨距参数)可指示表面中每一行的宽度。所述表面高度参数可指示表面中包含多少行。
对准表面可指以下情况下的表面:(1)表面指针指向对准边界;和(2)表面宽度是对准宽度的整数倍数。如果这些条件中的任一者未满足,则将所述表面称为未对准。
根据本发明的第一方面,在满足条件(1)且不满足条件(2)的情况下(即,BLT命令的基础表面的表面宽度并非对准宽度的整数倍数),针对与BLT命令相关联的源表面和目的地表面中的每一者,图形驱动程序可将相应表面的多个行组合为单个行以形成具有对准宽度的整数倍数的表面宽度的对准虚拟表面。因为虚拟表面的表面宽度是对准宽度的整数倍数,所以虚拟表面是可被对准约束GPU处理的对准表面。
然而,组合行以形成虚拟表面可导致BLT区域(即,将被复制和/或合成的区域)转变,使得所述区域不再是连续区域(例如,不再是单个连续矩形)。举例来说,如果与传入BLT命令相关联的源BLT区域是单个连续矩形,那么将源表面转变为虚拟源表面可将源BLT区域转变为可能彼此不连续的两个单独矩形。通常,无法针对不连续BLT区域执行单BLT操作。
为了解决这个问题,图形驱动程序可确定转变的BLT区域的连续子集并产生多个BLT命令,其中BLT命令中的每一者致使GPU针对转变的BLT区域的连续子集中的相应一者执行BLT操作。举例来说,在一矩形源BLT区域被转变为两个矩形源BLT区域的情况下,图形驱动程序可产生针对第一矩形源BLT区域的第一BLT命令和针对第二矩形源BLT区域的第二BLT命令。
多个BLT命令的源和目的地表面中的每一者可对应于一或多个对准虚拟表面,由此致使所述多个BLT命令成为对准BLT命令。所述多个对准BLT命令可集体地处理整个源和目的地BLT区域,由此产生与单个未对准BLT命令本应产生的存储器状态相同的所得存储器状态。以此方式,图形驱动程序可将未对准BLT命令转换为可由对准约束GPU服务的多个对准BLT命令。
根据本发明的第二方面,在条件(1)和(2)都未满足的情况下(即,表面指针不指向对准边界,且BLT命令的基础表面的表面宽度并非对准宽度的整数倍数),图形驱动程序可按与上文相对于本发明的第一方面所描述的类似的方式加宽未对准表面的宽度。这将使加宽表面宽度对应于对准宽度。然而,因为加宽表面的表面指针不在对准边界处开始,所以加宽表面仍未对准。
用于解决这个问题的一个途径是移位表面指针,使得移位的表面指针指向最近的对准边界。与上文相对于本发明的第一方面所描述的类似,加宽所述表面可将BLT区域转变为多个连续子集,且图形驱动程序可产生多个BLT命令,其中BLT命令中的每一者致使GPU针对转变的BLT区域的连续子集中的相应一者执行BLT操作。然而,如果虚拟表面的宽度保持相同,那么移位表面指针可致使在所述表面的边界附近的转变的BLT区域子集卷包虚拟表面的边缘。换句话说,此类转变的BLT区域子集可能不再连续,且可能不能够通过单BLT操作服务。
为了解决这个问题,图形驱动程序可产生两个虚拟表面以用于源表面和目的地表面中的每一者。所述两个虚拟表面可具有相同加宽的表面宽度,但具有单独的对准表面指针。虚拟表面中的每一者的表面指针可对应于未对准表面指针的任一侧上的对准边界。举例来说,GPU驱动程序可针对第一虚拟表面产生指向小于未对准表面指针的对准边界的表面指针,且针对第二虚拟表面产生指向大于未对准表面指针的对准边界的表面指针。
如果转变的BLT区域子集卷包虚拟表面中的一者的边缘,则所述子集将不卷包另一虚拟表面的边缘。因此,当产生针对转变的BLT区域子集中的每一者的BLT命令时,图形驱动程序可针对相应BLT命令选择虚拟表面,其中对应的转变的BLT区域子集不卷包虚拟表面的边缘。换句话说,图形驱动程序可选择允许转变的BLT区域子集中的每一者被表示为连续区域(例如,连续矩形区域)的虚拟表面。
多个BLT命令的源和目的地表面中的每一者可对应于多个对准虚拟表面中的一者,由此致使所述多个BLT命令成为对准BLT命令。所述多个对准BLT命令可集体地处理整个源和目的地BLT区域,由此产生与单个未对准BLT命令本应产生的存储器状态相同的所得存储器状态。
不同于未对准BLT命令,多个对准BLT命令可能能够被对准约束图形处理单元(GPU)处理,这相对于中央处理单元(CPU)可能能够加快BLT命令的执行和/或减小与BLT命令的执行相关联的功率消耗。通过将未对准BLT命令转换为多个对准BLT命令,在不需要CPU预处理和/或后处理基础未对准表面的情况下,可实现针对未对准BLT命令的相对低功率的GPU加速BLT处理的益处。以此方式,可改善与处理未对准BLT命令相关联的性能和/或功率消耗。
图1是说明可用以实施本发明的BLT操作处理技术的实例计算装置2的框图。计算装置2可包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持装置(例如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机,或处理和/或显示图形数据的任何其它类型的装置。
如图1的实例中所说明,计算装置2包含用户输入接口4、CPU 6、存储器子系统8、GPU 10、显示接口12、显示器14和总线16。用户输入接口4、CPU 6、存储器子系统8、GPU 10及显示接口12可使用总线16彼此通信。应注意,图1中展示的不同组件之间的总线和通信接口的特定配置仅是示范性的,且具有相同或不同组件的计算装置和/或其它图形处理系统的其它配置可用于实施本发明的技术。
用户输入接口4可允许一或多个用户输入装置(未展示)以通信方式耦合到计算装置2。用户输入装置可允许用户经由用户输入接口4将输入提供到计算装置2。实例用户输入装置包含键盘、鼠标、轨迹球、麦克风、触摸垫、触敏或存在敏感(presence-sensitive)显示器,或另一输入装置。在触敏或存在敏感显示器用作用户输入装置的实例中,用户输入接口4的全部或部分可与显示器14集成。
CPU 6可包括控制计算装置2的操作的通用或专用处理器。CPU 6可执行一或多个软件应用程序。所述软件应用程序可包含(例如)视频游戏应用程序、图形应用程序、字处理器应用程序、电子邮件应用程序、总分析表应用程序、媒体播放器应用程序、图形用户接口应用程序、操作系统或任何其它类型的软件应用或程序。
在CPU 6上执行的软件应用程序可包含发指令给GPU 10以使图形数据呈现到显示器14的一或多个图形呈现指令。在一些实例中,软件指令可符合图形应用程序编程接口(API),例如,开放图形库
Figure BDA0001313856950000061
API、开放图形库嵌入系统(OpenGL ES)API、Direct3DAPI、DirectX API、RenderMan API、WebGL API或任何其它公共或专有标准图形API。为了处理图形呈现指令,CPU 6可将一或多个图形呈现命令发布到GPU 10以使GPU 10执行图形数据的呈现的一些或全部。在一些实例中,待呈现的图形数据可包含例如点、线、三角形、四边形、三角形带、分块等图形基元的列表。
存储器子系统8可经配置以服务从计算装置2内的其它组件接收的存储器存取请求。举例来说,存储器子系统8可服务来自CPU 6、GPU 10和/或显示接口12的存储器存取请求。存储器存取请求可包含读取存取请求和写入存取请求。存储器子系统8经由总线16以通信方式耦合到CPU 6、GPU 10、用户输入接口4和显示接口12。
存储器子系统8包含存储器控制器20和存储器22。存储器控制器20促进进出存储器22的数据的传送。举例来说,存储器控制器20可接收来自CPU 6和/或GPU 10的存储器读取请求和存储器写入请求,且相对于存储器22服务于此类请求以便向计算装置2中的组件提供存储器服务。
存储器控制器20经由专用存储器总线以通信方式耦合到存储器22,且经由总线16耦合到其它组件(例如,CPU 6和GPU 10)。虽然存储器控制器20在图1的实例计算装置2中说明为与CPU 6和存储器22两者分开的处理模块,但在其它实例中,存储器控制器20的功能性中的一些或全部可在CPU 6、GPU 10和存储器22中的一或多者中实施。
存储器22可存储可由CPU 6存取以用于执行的程序模块及/或指令及/或由在CPU6上执行的程序使用的数据。举例来说,存储器22可存储用户应用程序和与所述应用程序相关联的图形数据。存储器22还可存储用于由计算装置2的其它组件使用和/或由其产生的信息。举例来说,存储器22可充当用于GPU 10的装置存储器,且可存储将由GPU 10操作的数据以及由GPU 10执行的操作所产生的数据。举例来说,存储器22可存储表面、源表面、目的地表面、纹理缓冲器、深度缓冲器、模板缓冲器、顶点缓冲器、帧缓冲器或其类似者的任何组合。另外,存储器22可存储用于由GPU 10处理的命令流。存储器22可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、同步动态随机存取存储器(SDRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。在一些实例中,存储器22可为双数据速率(DDR)SDRAM,例如,DDR1SDRAM、DDR2SDRAM、DDR3SDRAM、DDR4SDRAM等。
GPU 10可经配置以执行由CPU 6发布到GPU 10的命令。由GPU 10执行的命令可包含图形命令、绘制调用命令、GPU状态编程命令、BLT命令、通用计算命令、内核执行命令等。BLT命令可包含例如存储器复制命令、存储器合成命令和传图命令(即,块传送命令)。
在一些实例中,GPU 10可经配置以呈现和显示从CPU 6接收的图形数据。在此类实例中,CPU 6可向GPU 10提供图形数据以用于呈现到显示器14,且发布一或多个图形命令到GPU 10。图形命令可包含例如绘制调用命令、GPU状态编程命令、BLT命令、传图命令等。图形数据可包含顶点缓冲器、纹理数据、表面数据等。在一些实例中,CPU 6可通过将命令和图形数据写入到存储器22(其可由GPU 10存取)而将所述命令和图形数据提供给GPU 10。
在其它实例中,GPU 10可经配置以针对在CPU 6上执行的应用程序执行通用计算。在此类实例中,CPU 6可将通用计算数据提供到GPU 10,且将一或多个通用计算命令发布到GPU 10。通用计算命令可包含例如内核执行命令、BLT命令等。在一些实例中,CPU 6可通过将命令和图形数据写入到存储器22(其可由GPU 10存取)而将命令和通用计算数据提供到GPU 10。
在一些情况下,与CPU 6相比,GPU 10可内置有提供更有效的向量操作处理的高度并行结构。举例来说,GPU 10可包含多个处理元件,其经配置而以并行方式对多个顶点、控制点、像素和/或其它数据进行操作。在一些情况下,与使用CPU 6呈现图像相比,GPU 10的高度并行性质可允许GPU 10更快地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)呈现到显示器14上。另外,GPU 10的高度并行性质可允许GPU 10比CPU 6更快速地处理用于通用计算应用程序的某些类型的向量和矩阵运算。
在一些实例中,GPU 10可集成到计算装置2的母板中。在其它情况下,GPU 10可存在于安装在计算装置2的母板中的端口中的图形卡上,或可以其它方式并入经配置以与计算装置2交互操作的外围装置内。在其它情况下,GPU 10可位于与CPU 6相同的微芯片上,从而形成片上系统(SoC)。GPU 10可包含一或多个处理器,例如,一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。
在一些实例中,GPU 10可包含GPU高速缓冲存储器,其可针对存储器22的全部或一部分提供高速缓存服务。在此类实例中,GPU 10可使用高速缓冲存储器以利用本地存储装置而非片外存储器来本地处理数据。这可允许GPU 10通过减少GPU 10经由总线16(其可能经受繁重的总线业务)存取存储器22的需要而以更有效的方式操作。然而,在一些实例中,GPU 10可不包含单独的高速缓冲存储器,而改为经由总线16利用存储器22。GPU高速缓冲存储器可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
CPU 6和/或GPU 10可将呈现的图像数据存储在分配于存储器22内的帧缓冲器中。显示接口12可从帧缓冲器检索数据且对显示器14进行配置以显示由呈现的图像数据表示的图像。在一些实例中,显示接口12可包含经配置以将从帧缓冲器检索的数字值转换为可由显示器14消耗的模拟信号的数/模转换器(DAC)。在其它实例中,显示接口12可将数字值直接传递到显示器14以进行处理。
显示器14可包含监视器、电视、投影装置、液晶显示器(LCD)、等离子显示面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视显示器、纳米晶体显示器或另一类型的显示单元。显示器14可集成于计算装置2内。举例来说,显示器14可为移动电话手持机或平板计算机的屏幕。或者,显示器14可为经由有线或无线通信链路耦合到计算装置2的独立装置。举例来说,显示器14可为经由电缆或无线链路连接至个人计算机的计算机监视器或平板显示器。
总线16可使用总线结构和总线协议(包含第一代、第二代和第三代总线结构和协议、共享总线结构和协议、点对点总线结构和协议、单向总线结构和协议以及双向总线结构和协议)的任何组合来实施。可用以实施总线16的不同总线结构和协议的实例包含例如超传输总线、InfiniBand总线、高级图形端口总线、外围组件互连(PCI)总线、PCI高速总线、高级微控制器总线架构(AMBA)、高级高性能总线(AHB)、AMBA高级外围总线(APB)和AMBA高级eXentisible接口(AXI)总线。也可使用其它类型的总线结构和协议。
GPU 10可接收BLT命令,且通过执行对应的BLT操作服务所述BLT命令。在一些情况下,GPU 10可包含经配置以执行BLT操作的存储器存取硬件,且此硬件可具有需要满足以便成功地服务BLT操作的各种对准约束条件。举例来说,此类存储器存取硬件可经配置以要求用于BLT操作的表面中的一些或全部对准。
对于待对准的表面,存储器存取硬件可要求(1)所述表面的表面指针指向对准边界;和(2)所述表面的表面宽度是对准宽度的整数倍数。如果这些条件中的任一者未满足,则将所述表面称为未对准。
在一些情况下,在CPU 6上执行的软件应用程序可发布未对准BLT命令。当编译软件应用程序的编译器或编写的软件应用程序在编译和/或运行时间之时并不具有可供所述编译器或应用程序使用的对准约束条件或并不决定优化所产生的代码以满足对准约束条件(例如,为了减小编译器或应用程序的复杂度)时,未对准BLT命令可产生。因为BLT命令未对准,所以GPU 10可能不能够直接服务此类命令。
根据本发明的实例,CPU 6和/或GPU 10可经配置以将未对准BLT命令转换为多个对准BLT命令,其中所述多个对准BLT命令可集体地产生与未对准BLT命令本应产生的存储器状态相同的所得存储器状态。所述多个对准BLT命令可满足GPU 10的对准约束条件,且因此能够被GPU 10处理。以此方式,可获得针对未对准BLT命令的相对低功率的GPU加速BLT处理的益处,由此改善与处理未对准BLT命令相关联的性能和/或功率消耗。
图2是更详细地说明图1中的计算装置2的部分的框图。如图2中所展示,CPU 6以通信方式耦合到GPU 10和存储器子系统8,且GPU 10以通信方式耦合到CPU 6和存储器子系统8。在一些实例中,GPU 10可集成到具有CPU 6的母板上。在额外实例中,GPU 10可实施在安装于包含CPU 6的母板的端口中的图形卡上。在其它实例中,GPU 10可并入在经配置以与CPU 6交互操作的外围装置内。在额外实例中,GPU 10可位于与CPU 6相同的微芯片上,从而形成片上系统(SoC)。
在图2的实例系统中,CPU 6执行软件应用程序24、图形API 26、GPU驱动程序28和操作系统30。软件应用程序24可包含使图形图像被显示的一或多个指令和/或使非图形任务(例如,通用计算任务)在GPU 10上执行的一或多个指令。在一些实例中,软件应用程序24可包含一或多个BLT指令,其可替换地称为BLT命令、软件BLT命令或应用程序BLT命令。软件应用程序24可将指令发布到图形API 26。图形API 26可为将从软件应用程序24接收的指令转译为可由GPU驱动程序28消耗的格式的运行时间服务。
GPU驱动程序28经由图形API 26从软件应用程序24接收指令,且控制GPU 10的操作以服务所述指令。举例来说,GPU驱动程序28可调配一或多个命令,将所述命令放置到存储器22中,且发指令给GPU 10以执行所述命令。在一些实例中,GPU驱动程序28可将命令放置到存储器22中,且经由操作系统30(例如经由一或多个系统调用)与GPU 10通信。
在一些实例中,GPU驱动程序28(或CPU 6上的另一软件组件)可经配置以从软件应用程序24接收未对准BLT命令,且根据本发明中描述的技术中的任一者将所述未对准BLT命令转换为多个对准BLT命令。GPU驱动程序28可将所述多个对准BLT命令提供到GPU 10以用于执行。
GPU 10包含命令引擎32、光栅操作单元34、缓冲器36、读取引擎38和写入引擎40。在一些实例中,GPU 10可包含三维(3D)图形呈现管线(未展示)。在此类实例中,光栅操作单元34可形成3D图形呈现管线的一部分。
在一些实例中,GPU 10可包含多个处理单元(未展示),其中每一者可为可编程处理单元或固定功能处理单元。在GPU 10包含3D图形呈现管线的情况下,所述多个处理单元可一起操作以实施3D图形呈现管线。在一些实例中,3D图形呈现管线可符合由一或多个公共和/或专有3D图形标准API(例如,开放图形库
Figure BDA0001313856950000101
API、开放图形库嵌入系统(OpenGL ES)API、Direct3D API、DirectX API等)指定的3D图形管线。
可编程处理单元可包含例如经配置以执行通过CPU 6加载到GPU 10上的一或多个着色器程序的可编程着色器单元。在一些实例中,着色器程序可为用高级着色语言(例如,OpenGL着色语言(GLSL)、高级着色语言(HLSL)、用于图形的C(Cg)着色语言等)编写的程序的经编译版本。在一些实例中,可编程着色器单元可包含经配置以并行操作的多个处理单元,例如,SIMD管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。所述可编程着色器单元可包含(例如)顶点着色器单元、像素着色器单元、几何着色器单元、外壳着色器单元、域着色器单元、计算着色器单元等。
固定功能处理单元可包含含经硬连线以执行某些功能的硬件。尽管固定功能硬件可经由例如一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。GPU 10中包含的固定功能处理单元可包含(例如)执行例如光栅操作、深度测试、剪刀测试、阿尔法(alpha)混合等的处理单元。
在光栅操作单元34包含在3D呈现管线中的实例中,光栅操作单元34在一些实例中可为可配置固定功能处理单元。在一些实例中,光栅操作单元34可实施为3D呈现管线的输出合并器处理单元。
命令引擎32经配置以从CPU 6接收命令且使GPU 10执行所述命令。在一些实例中,CPU 6可将命令放置于存储器22中,且命令引擎32可从存储器22检索所述命令。所述命令可包含(例如)改变GPU 10的状态(例如,呈现状态)的状态命令、发指令给GPU10以将特定着色器程序加载到3D呈现管线中的可编程处理单元中的一或多者中的着色器程序绑定命令、发指令给GPU 10以呈现存储在存储器22中的特定数据的绘制命令、发指令给GPU 10以相对于存储在存储器22中的特定数据执行一或多个通用计算内核的通用计算命令,和/或发指令给GPU 10以执行一或多个BLT操作的BLT命令。
响应于接收到状态命令,命令引擎32可经配置以基于所述状态命令将GPU 10中的一或多个状态寄存器设置到特定值,和/或基于所述状态命令对用于GPU 10的3D呈现管线(未展示)中的固定功能处理单元中的一或多者进行配置。响应于接收到绘制调用命令,命令引擎32可经配置以使GPU 10中的3D呈现管线(未展示)从存储器22检索3D几何形状,且将所述3D几何形状数据呈现为2D图形图像。响应于接收到着色器程序绑定命令,命令引擎32可将一或多个特定着色器程序加载到3D呈现管线中的可编程处理单元中的一或多者中。
响应于接收到BLT命令,命令引擎32可使GPU 10执行对应于所述BLT命令的BLT操作。为了执行所述BLT操作,在一些实例中,命令引擎32可基于所述BLT命令对光栅操作单元34、缓冲器36、读取引擎38和写入引擎40中的一或多者进行配置,且使经配置的组件执行对应于所述BLT命令的BLT操作。
光栅操作单元34可基于源数据执行一或多个光栅操作以产生目的地数据。所述源数据可对应于BLT操作的一或多个源BLT区域。在一些实例中,光栅操作单元34可从缓冲器36和/或从写入引擎40接收源数据。所述目的地数据可写入到与所述BLT操作相关联的目的地BLT区域。
由光栅操作单元34执行的光栅操作类型可例如由命令引擎32配置。所述光栅操作类型可指定目的地数据如何基于源数据而产生以用于特定BLT操作。在光栅操作单元34组合两个不同源区域以产生目的地数据(例如,合成操作)的情况下,光栅化操作类型可指定所述两个不同源区域如何组合以产生目的地数据。在一些实例中,光栅操作类型可为逐位运算,其指定如何基于源区域中的对应像素位置产生针对目的地区域中的特定像素位置的目的地数据。所述源区域中的对应像素位置可为当像素位置处于目的地区域中时处于其相应源区域的同一相对位置中的像素位置。逐位运算可包含(例如)布尔型(Boolean)运算,例如逐位AND、OR、NOT和/或XOR运算。逐位运算还可包含位复制操作、位反转操作、实心填充操作等。
在额外实例中,光栅操作类型可包含混合操作(例如,阿尔法混合操作)。在一些实例中,混合操作可指定在混合操作的执行期间将使用的源像素乘数和目的地像素乘数。在此类实例中,在混合操作的执行期间,源像素值(例如,源像素色彩和/或源阿尔法值)可乘以源像素乘数以产生第一乘积,对应的目的地像素值(例如,目的地像素色彩和/或目的地阿尔法值)可乘以目的地像素乘数以产生第二乘积,且两个乘积的总和可加在一起以产生针对像素位置的目的地值。其它类型的混合操作也是可能的。
在一些实例中,命令引擎32可基于由GPU 10从CPU 6接收的BLT命令中所包含的数据来对光栅操作单元34进行配置。举例来说,命令引擎32可基于BLT命令中所指定的光栅操作类型而选择将由光栅操作单元34执行的光栅操作类型,且对光栅操作单元34进行配置以使用所选择的光栅化操作类型执行BLT操作。
虽然光栅操作单元34在本文中描述为组合不同源区域以产生用于BLT操作的目的地数据,但在其它实例中,可另外或代替光栅操作单元34使用GPU 10中的一或多个其它组件来执行所述BLT操作。举例来说,在GPU 10的着色器单元(未展示)上执行的着色器程序可根据所述着色器程序中指定的组合技术将不同源区域组合以产生用于BLT操作的目的地数据。
缓冲器36可存储在BLT操作的执行期间从存储器22检索的源数据。在一些实例中,缓冲器36可实施为GPU 10内的多个寄存器。缓冲器36可利用包括例如先进先出(FIFO)缓冲方案的多种缓冲方案中的任一者。根据FIFO缓冲方案,存储在缓冲器36中的源数据按源数据放置到缓冲器36中的次序由消耗者(例如,写入引擎40)消耗。
读取引擎38可经配置以发布读取请求到存储器子系统8且响应于所述读取请求将所接收的源数据放置到缓冲器36中。所述读取请求可集体地从在接收自CPU 6的BLT命令中指定的一或多个源BLT区域读取数据。
写入引擎40可经配置以消耗来自缓冲器36的源数据,基于所消耗的源数据产生目的地数据,并且将写入请求发布到存储器子系统8以便将目的地数据写入到存储器22中的目的地区域。所述写入请求可集体地将数据写入到在接收自CPU 6的BLT命令中指定的目的地BLT区域。
在一些实例中,写入引擎40可产生目的地数据,使得目的地数据与源数据相同。此类实例可用以执行例如BLT复制操作。在其它实例中,写入引擎40可组合来自至少两个不同源区域的源数据以产生目的地数据。此类实例可用以执行例如BLT合成操作。在此类实例中,写入引擎40可在一些实例中使用光栅操作单元34执行光栅操作,以便组合源数据且产生目的地数据。
在一些实例中,消耗源数据可指写入引擎40直接从读取引擎38接收源数据且处理源数据。在其它实例中,消耗源数据可指写入引擎40从缓冲器36检索源数据且处理源数据。处理源数据可包含基于源数据产生目的地数据。在已处理数据之后,写入引擎40可发布写入请求以写入目的地数据。
在一些实例中,读取引擎38可要求所读取的表面的每一行的开始对应于是预定对准宽度的整数倍数的存储器地址。此类需求可为如本发明中所描述的对准约束条件的实例,且预定对准宽度可为用于所述对准约束条件的对准参数。此类对准约束条件可简化用于实施读取引擎38的硬件。是预定对准宽度的整数倍数的存储器地址可称作对准边界。当读取引擎38需要此类对准约束条件以用于适当操作时,读取引擎38可称作对准约束读取引擎38。
类似地,在其它实例中,写入引擎40可要求待写入的表面的每一行的开始对应于预定对准宽度的整数倍数。此类需求可为如本发明中所描述的对准约束条件的实例,且预定对准宽度可为用于所述对准约束条件的对准参数。此类需求可简化用于实施写入引擎40的硬件。当写入引擎40需要此类对准约束条件以用于适当操作时,写入引擎40可称作对准约束写入引擎40。
在一些实例中,读取引擎38和写入引擎40均可经对准约束。在其它实例中,读取引擎38可能经对准约束,且写入引擎40可能未经对准约束。在额外实例中,写入引擎40可能经对准约束,且读取引擎38可能未经对准约束。在另一实例中,读取引擎38和写入引擎40均未经对准约束。
存储器子系统8包含存储器22。存储器22可存储一或多个源表面42和目的地表面44。源表面42和目的地表面44中的每一者对应于像素数据的二维阵列。像素数据可包含红、绿、蓝(RGB)颜色值,且在一些情况下可包含用于表面中的每一像素位置的阿尔法值(A)。因为源表面42和目的地表面44对应于像素数据的二维阵列,所以表面中的个别像素位置的像素数据可通过行和列坐标而寻址。用在BLT操作中的源区域中的每一者可对应于相应源表面的全部或子集,且目的地区域可对应于目的地表面的全部或子集。源和目的地区域可为相同的大小和形状,且通常(但非必定)是矩形区域。虽然图2描绘单独的源表面42和目的地表面44。在一些实例中,目的地表面44可用作源表面以用于BLT操作,和/或源表面42中的一或多者可充当目的地表面以用于BLT操作。存储器子系统8经由总线16以通信方式耦合到CPU 6、GPU 10、读取引擎38和写入引擎40。
响应于接收到存储器存取请求,存储器子系统8可使所请求的存储器操作相对于存储器22而执行。举例来说,响应于接收到读取请求,存储器子系统8可从存储器22中对应于所述读取请求中指定的一或多个存储地址的一或多个存储位置获得(即,读取)存储在存储器22中的数据,并将所获得的数据提供给GPU 10(例如,读取引擎38)。作为另一实例,响应于接收到写入请求和对应于所述写入请求的写入数据,存储器子系统8可使写入数据存储在存储器22中对应于所述写入请求中指定的一或多个存储器地址的一或多个位置处。在一些实例中,存储器子系统8可向写入引擎40提供写入请求已成功完成的确认。
虽然命令引擎32在本文中描述为对GPU 10中的其它处理组件进行配置以执行BLT操作,但在其它实例中,除了或代替命令引擎32,GPU 10中的一或多个其它组件可执行这些功能。举例来说,专用BLT操作控制单元可用于执行命令引擎32的上文所提到的功能性,或读取引擎38和写入引擎40可经配置以执行此类功能性。
如上文所论述,GPU 10可执行BLT操作以服务从CPU 6接收到的BLT命令。BLT操作可包含BLT复制操作和BLT合成操作。在一些实例中,BLT操作可替换地称为存储器传送操作。BLT复制操作可涉及将数据从源表面的源区域复制到目的地表面的目的地区域。也就是说,GPU 10可从源表面的源区域读取数据且将所述源表面的源区域中含有的数据的精确复制品写入到目的地表面的目的地区域。
BLT合成操作可涉及以某种方式组合相同或不同源表面的至少两个不同源区域,且将源区域的组合写入到目的地表面的目的地区域。在一些情况下,源表面中的一或多者可为与目的地表面相同的表面以用于BLT合成操作。举例来说,BLT合成操作可涉及读取单个源区域和单个目的地区域,将所述两者混合在一起,且将所混合的结果写回到目的地区。
在一些实例中,当执行BLT合成操作时,可根据光栅操作组合不同源区域,所述光栅操作可针对BLT合成操作的不同情况而不同。光栅操作可为针对特定BLT合成操作而指定应如何组合位的操作。在一些实例中,光栅操作可包含逐位运算,例如,布尔型逻辑运算。布尔型逻辑运算可包含例如逐位AND、OR、NOT和/或XOR运算。在额外实例中,光栅操作可包含混合操作(例如,阿尔法混合操作)。
用在BLT操作中的源和目的地表面可为相同或不同表面,且可各自对应于像素数据的二维阵列。像素数据可包含红、绿、蓝(RGB)颜色值,且在一些情况下可包含用于表面中的每一像素的阿尔法值(A)。因为所述表面对应于像素数据的二维阵列,所以表面中的个别像素位置的像素数据可通过行和列坐标来寻址。用在BLT操作中的源区域中的每一者可对应于相应源表面的全部或子集。类似地,用在BLT操作中的目的地区域可对应于目的地表面的全部或子集。源和目的地区域可为相同的大小和形状,且通常(但非必定)是矩形区域。
当GPU 10执行BLT操作时,用于所述BLT操作的源表面和目的地表面通常存储在片外存储器22中。换句话说,存储器22可形成于、定位于和/或安置于微芯片、集成电路和/或不同于所述微芯片、集成电路的裸片和/或其上形成、定位和/或安置GPU 10的裸片上。存储器22可经由一或多个总线且在一些情况下经由存储器控制器以通信方式耦合到GPU 10。
当执行BLT复制操作时,GPU 10可从源区域中的像素位置中的每一者读取数据且将从源区域读取的数据写入到目的地区域中的对应像素位置。类似地,当执行BLT合成操作时,GPU 10可从多个源区域中的位置中的每一者读取数据,组合所述数据,且将所组合的数据写入到目的地区域。
图3是说明根据本发明的实例单源BLT操作的概念图。图3描绘源表面50和目的地表面52,其中的每一者对应于像素数据的二维阵列。像素数据可包含红、绿、蓝(RGB)颜色值,且在一些情况下可包含用于表面中的每一像素的阿尔法值(A)。因为表面50、52中的每一者对应于像素数据的二维阵列,所以表面中的个别像素位置的像素数据可通过行和列坐标来编索引。在一些实例中,源表面50和目的地表面52可为位图。在其它实例中,源表面50和目的地表面52可为缓冲器资源,例如,纹理缓冲器。图3中的实例源表面50和目的地表面52是相同的形状和大小,且是矩形。然而,在其它实例中,源表面50和目的地表面52可具有不同形状和/或大小。
源表面50包含源BLT区域54,且目的地表面52包含目的地BLT区域56。源BLT区域54包含源表面50中所包含的像素数据的子集,且目的地BLT区域56包含目的地表面52中所包含的像素数据的子集。表面中所包含的像素数据的子集可指所述表面中所包含的像素数据的全部或少于全部。如图3中所展示,源BLT区域54和目的地BLT区域56是相同的大小和形状,且是矩形。然而,在其它实例中,源BLT区域54和目的地BLT区域56可能不是矩形。
在展示于图3中的实例BLT操作中,GPU 10将数据从源表面50的源BLT区域54传送到目的地表面52的目的地BLT区域56。一般来说,源BLT区域54中的每一像素位置的数据被传送到目的地BLT区域56中的对应的像素位置。如果像素位置中的每一者在其相应区域中的相对位置相同,那么不同区域中的不同像素位置可称为对应的像素位置。举例来说,源BLT区域54和目的地BLT区域56中的第二行的第三列具有相同的相对位置。
展示于图3中的BLT操作是单源BLT操作,这是因为单个源区域被用作BLT操作的源操作数。展示于图3中的单源BLT操作可表示BLT复制操作,在所述BLT复制操作中源BLT区域54的数据被复制到目的地BLT区域56中。虽然展示于图3中的BLT操作展现单独源表面50和目的地表面52,但在其它实例中,源表面50和目的地表面52可为同一表面。在此类实例中,源BLT区域54和目的地BLT区域56在一些实例中可为同一表面内的不同区域,数据在所述不同区域之间通过所述BLT复制操作传送。
图4是说明根据本发明的实例多源BLT操作的概念图。图4描绘第一源表面58、第二源表面60和目的地表面62。表面58、60、62中的每一者可大体上类似于上文相对于图3所论述的表面50、52。第一源表面58包含第一源BLT区域64,第二源表面60包含第二源BLT区域66,且目的地表面62包含目的地BLT区域68。第一源BLT区域64包含第一源表面58中所包含的像素数据的子集,第二源BLT区域66包含第二源表面60中所包含的像素数据的子集,且目的地BLT区域68包含目的地表面62中所包含的像素数据的子集。如图4中所展示,第一源BLT区域64、第二源BLT区域66和目的地BLT区域68是相同的大小和形状,且是矩形。然而,在其它实例中,区域64、66和68可能不是矩形。
在图4的实例BLT操作中,来自第一源BLT区域64的源数据和来自第二源BLT区域66的源数据经由光栅操作70组合以产生目的地数据,且所述目的地数据被放置到目的地表面62的目的地BLT区域68中。一般来说,第一源BLT区域64中的每一像素位置的数据与来自第二源BLT区域66中的对应像素位置的数据组合,且写入到目的地BLT区域68中的对应像素位置。如果像素位置中的每一者在其相应区域中的相对位置相同,那么不同区域中的不同像素位置可称为对应的像素位置。
图4中所展示的BLT操作是多源BLT操作,这是因为多个源区域被用作BLT操作的源操作数。图4中所展示的多源BLT操作可表示BLT合成操作,在所述BLT合成操作中GPU 10组合或合成来自两个不同源区域的数据以产生被写入到目的地区域的目的地数据。虽然图4中所展示的BLT操作展示单独第一源表面58、第二源表面60和目的地表面62,但在其它实例中,表面58、60、62中的一或多者可为同一表面。举例来说,第二源表面60和目的地表面62可为同一表面,且第二源BLT区域66和目的地BLT区域68可为所述表面内的相同区域。在此实例中,BLT合成操作可使用特定光栅算子将第一源BLT区域64中的像素数据与目的地表面62中的现有像素数据合并。
图5是说明用于图1和2的实例计算装置2的实例命令处理流程72的概念图。如图5中所展示,软件应用程序24将软件BLT命令74发布到GPU驱动程序28。GPU驱动程序28接收软件BLT命令74,基于软件BLT命令74产生一或多个GPU BLT命令76,且将GPU BLT命令76发布到GPU 10。GPU 10执行BLT操作78以服务GPU BLT命令76。举例来说,针对GPU BLT命令76中的每一者,GPU 10可执行相应对准BLT操作78。
在一些实例中,软件BLT命令74可为未对准BLT命令,且GPU BLT命令76可包含对应于软件BLT命令74的多个对准BLT命令。在此类实例中,GPU驱动程序28可根据本发明中描述的技术中的任一者将未对准软件BLT命令74转换为多个对准GPU BLT命令76。
图6为说明根据本发明的用于界定对准虚拟表面的实例技术的概念图。图6说明未对准表面80和虚拟表面82。未对准表面80可作为未对准BLT命令的部分从软件应用程序24接收。GPU驱动程序28可基于未对准表面80界定虚拟表面82。
在图6的实例中,32字节对准约束GPU(例如,GPU 10)被用于执行BLT操作。32字节对准约束GPU可对应于要求表面的行中的每一者的开始是32(即,预定对准宽度)的整数倍数的GPU。32(即,对准宽度)的每一倍数可称作对准边界。
如图6中所展示,未对准表面80的表面宽度是720字节,且未对准表面80的表面高度是480行。因为720不可被32除尽,所以未对准表面80的一些行将不以32的倍数的存储器地址开始。因此,表面80被称作未对准。
GPU驱动程序28可通过将来自未对准表面80的两个行的集合组合在一起以形成虚拟表面82中的单个行来界定虚拟表面82。如图6中所展示,虚拟表面82是未对准表面80的两倍宽和一半高。虚拟表面82的表面宽度是1440字节,其可被32除尽。因此,虚拟表面82是32字节对准约束GPU可对其执行BLT操作的对准表面。
图7和8是说明使用根据图6中说明的技术所界定的对准虚拟表面将未对准BLT操作转换为两个对准BLT操作的实例的概念图。
图7说明可与从软件应用程序24接收的BLT命令相关联的单个未对准BLT操作。未对准BLT命令指定未对准源表面84和未对准目的地表面86以用于BLT操作。源表面84包含源BLT区域88,且目的地表面86包含目的地BLT区域90。如图7中所展示,未对准BLT操作将源表面84的源BLT区域88传送到目的地表面86的目的地BLT区域90。
图8说明对应于所述单个未对准BLT操作的对准双BLT操作。所述对准双BLT操作可包含由两个对准BLT命令指定的两个单独BLT操作。对准BLT命令中的每一者可指定对准虚拟源表面92和对准虚拟目的地表面94以用于BLT操作。虚拟源表面92包含源BLT区域96、98,且虚拟目的地表面94包含目的地BLT区域100、102。
虚拟源表面92可基于源表面84而界定,且虚拟目的地表面94可基于目的地表面86而界定。GPU驱动程序28可使用图6中说明的技术将源表面84转变为虚拟源表面92,且将目的地表面86转变为虚拟目的地表面94。
举例来说,GPU驱动程序28可将源表面84中的两个行的每个集合组合在一起以形成虚拟源表面92中的单个行。这有效地使源表面84的所有偶数行聚合在虚拟源表面92的左侧,且源表面84的所有奇数行聚合在虚拟源表面92的右侧。GPU驱动程序28可使用类似技术将目的地表面86的行组合在一起以形成虚拟目的地表面94。
在图7中,以交错方式将区域88、90的每隔一行画上影线。如图8中所展示,组合源表面84的行以形成虚拟源表面92致使源BLT区域88被转变,使得其不再是一个连续的矩形区域。替代地,源BLT区域88转变为源BLT区域96和98,其中源BLT区域96表示源BLT区域88的偶数行,且源BLT区域98表示源BLT区域88的奇数行。由此,源BLT区域88已转变为彼此不连续的两个单独矩形区域。类似转变相对于目的地BLT区域90发生,其中目的地BLT区域90转变为目的地BLT区域100和102。
在这个实例中,无法针对不连续BLT区域执行单BLT操作。因为现存在两个单独源BLT区域96、98和两个单独目的地BLT区域100、102,所以GPU驱动程序28将用于未对准表面84、86的单个未对准BLT命令转换为相对于虚拟表面92和94而执行的两个对准BLT命令——一个BLT命令用于带影线的区域96、100,且一个BLT命令用于白色区域98、102。以此方式,GPU驱动程序28可使GPU 10执行两个BLT操作,在所述BLT操作中第一BLT操作将源BLT区域96传送到目的地BLT区域100,且第二BLT操作将源BLT区域98传送到目的地BLT区域102。
由GPU驱动程序28产生的多个BLT命令可集体地处理整个源BLT区域88和目的地BLT区域90,由此产生与单个未对准BLT命令本应产生的存储器状态相同的所得存储器状态。此外,对准BLT命令中的每一者相对于32字节对准虚拟表面(即,虚拟表面92和94)而执行,所述32字节对准虚拟表面允许BLT命令被32字节对准约束GPU处理。以此方式,GPU驱动程序28可将未对准BLT命令转换为可由对准约束GPU服务的多个对准BLT命令,且由此获得相对低功率的GPU加速BLT处理的益处。
在一些实例中,为了将未对准BLT命令转换为多个对准BLT命令,GPU驱动程序28可将与未对准BLT命令相关联的BLT源或目的地区域的坐标和尺寸转换为待用于多个对准BLT命令的BLT区域的坐标和尺寸。在一些实例中,对于图7和8中所展示的双BLT转换操作,GPU驱动程序28可基于以下伪码产生BLT区域坐标和尺寸:
BLT1:New_SRC_X=SRC_X+(SRC_Y&0x1)*SRC_width;
New_SRC_Y=SRC_Y/2;
New DST_X=DST_X+(DST_Y&0x1)*DST_width;
New DST_Y=DST_Y/2;
New BLT_width=BLT_width
New BLT_height=(BLT_Height+1)/2;
New SRC_SURFACE_base=SRC_SURFACE_base;//Unchanged
New SRC_SURFACE_WIDTH=SRC_SURFACE_WIDTH*2
New SRC_SURFACE_HEIGHT=SRC_SURFACE_HEIGHT+((~SRC_Y)&1)/2
New DST_SURFACE_base=DST_SURFACE_base//Unchanged
New DST_SURFACE_WIDTH=DST_SURFACE_WIDTH*2
New DST_SURFACE_HEIGHT=DST_SURFACE_HEIGHT+((~SRC_Y)&1)/2
BLT2:New_SRC_X=SRC_X+((SRC_Y+1)&0x1)*SRC_width;
New_SRC_Y=(SRC_Y+1)/2;
New DST_X=DST_X+((DST_Y+1)&0x1)*DST_width;
New DST_Y=(DST_Y+1)/2;
New BLT_width=BLT_width
New BLT_height=(BLT_Height)/2;
New SRC_SURFACE_base=SRC_SURFACE_base;//Unchanged
New SRC_SURFACE_WIDTH=SRC_SURFACE_WIDTH*2;
New SRC_SURFACE_HEIGHT=(SRC_SURFACE_HEIGHT+((~SRC_Y+1)&1)/2;
New DST_SURFACE_base=DST_SURFACE_base;//Unchanged
New DST_SURFACE_WIDTH=DST_SURFACE_WIDTH*2;
New DST_SURFACE_HEIGHT=(DST_SURFACE_HEIGHT+1)+((~SRC_Y+1)&1)/2;
在所述实例伪码中,BLT1和BLT2对应于基于单个未对准BLT命令产生的不同对准BLT命令,SRC_X对应于源BLT区域88的左上角的x坐标,SRC_Y对应于源BLT区域88的左上角的y坐标,DST_X对应于目的地BLT区域90的左上角的x坐标,DST_Y对应于目的地BLT区域90的左上角的y坐标,BLT_width对应于源BLT区域88的宽度(例如,按字节计),BLT_Height对应于源BLT区域88的高度(例如,按行计),SRC_width对应于源表面84的表面宽度(例如,按字节计),DST_width对应于目的地表面86的表面宽度(例如,按字节计),SRC_SURFACE_base对应于源表面84的表面指针,SRC_SURFACE_WIDTH对应于源表面84的表面宽度,SRC_SURFACE_HEIGHT对应于源表面84的高度,DST_SURFACE_base对应于目的地表面86的表面指针,DST_SURFACE_WIDTH对应于目的地表面86的表面宽度,DST_SURFACE_HEIGHT对应于目的地表面86的高度,New_SRC_X对应于源BLT区域96(针对BLT1)或源BLT区域98(针对BLT2)的左上角的x坐标,New_SRC_Y对应于源BLT区域96(针对BLT1)或源BLT区域98(针对BLT2)的左上角的y坐标,New DST_X对应于目的地BLT区域100(针对BLT1)或目的地BLT区域102(针对BLT2)的左上角的x坐标,New DST_Y对应于目的地BLT区域100(针对BLT1)或目的地BLT区域102(针对BLT2)的左上角的y坐标,New BLT_width对应于源BLT区域96(针对BLT1)或源BLT区域98(针对BLT2)的宽度(例如,按字节计),New BLT_Height对应于源BLT区域96(针对BLT1)或源BLT区域98(针对BLT2)的高度(例如,按行计),New SRC_SURFACE_base对应于虚拟源表面92的表面指针,New SRC_SURFACE_WIDTH对应于虚拟源表面92的表面宽度,NewSRC_SURFACE_HEIGHT对应于虚拟源表面92的高度,New DST_SURFACE_base对应于虚拟目的地表面94的表面指针,New DST_SURFACE_WIDTH对应于虚拟目的地表面94的表面宽度,且New DST_SURFACE_HEIGHT对应于虚拟目的地表面94的高度。
在所述实例伪码中,算子“/”对应于整数除法,算子“&”对应于逐位AND运算,且首码“0x”指示随后的数字是十六进制常数。在一些实例中,用于虚拟源表面92的New SRC_SURFACE_HEIGHT的值针对BLT1和BLT2可不同,从而产生用于BLT1和BLT2的略微不同的虚拟源表面。在其它实例中,用于虚拟目的地表面94的New DST_SURFACE_HEIGHT的值针对BLT1和BLT2可不同,从而产生用于BLT1和BLT2的略微不同的虚拟目的地表面。
图9是说明根据本发明的用于界定多个对准虚拟表面的实例技术的概念图。图9说明未对准表面110和两个虚拟表面112、114。未对准表面110可作为未对准BLT命令的部分从软件应用程序24接收。虚拟表面112、114可基于未对准表面110而由GPU驱动程序28界定。
在图9的实例中,32字节对准约束GPU用于执行BLT操作。如图9中所展示,未对准表面110的表面宽度是720字节,且未对准表面110的表面高度是480行。因为720不可被32除尽,所以未对准表面110的一些行将不以32的倍数的存储器地址开始。因此,表面110被称作未对准。
为了处理这个问题,CPU 6可以与上文相对于图6所描述的类似的方式加宽未对准表面110的宽度。这将使加宽的表面宽度对应于对准宽度约束条件。然而,未对准表面110具有表面指针1。因为1不可被32除尽,所以加宽表面的表面指针是未对准的。由此,所述加宽表面仍未对准。
用于处理这个问题的一个途径是移位所述表面指针,使得移位的表面指针指向最近的对准边界。类似于上文相对于图6到8所描述的技术,加宽所述表面可将矩形BLT区域转变为多个单独矩形区域,且GPU驱动程序28可产生多个BLT命令,其中BLT命令中的每一者使GPU针对矩形BLT区域中的相应一者执行BLT操作。然而,如果虚拟表面的宽度保持相同,那么移位所述表面指针可致使在所述虚拟表面的边界附近的转变的矩形BLT区域卷包虚拟表面的边缘。换句话说,此类转变的BLT矩形区域可能不再连续,且可能不能够通过单BLT操作服务。
为了处理这个问题,GPU驱动程序28可产生两个虚拟表面112、114以用于源和目的地表面中的每一者。虚拟表面112、114可具有相同加宽的表面宽度,但具有不同的对准表面指针。在一些实例中,GPU驱动程序28可确定虚拟表面112的未对准表面指针的两个最近对准边界,且将所述最近对准边界中的一者指派为用于虚拟表面112的表面指针,且将所述最近对准边界中的另一者指派为用于虚拟表面114的表面指针。对于图9中的实例,未对准表面指针1的最近32字节对准边界是0和32。因此,GPU驱动程序28将虚拟表面112的表面指针设置到0,且将虚拟表面114的表面指针设置到32。
虚拟表面112、114中的每一者的表面宽度是1440字节,其可被32除尽。另外,用于所述虚拟表面的表面指针中的每一者指向可被32除尽的存储器地址(即,0和32)。因此,虚拟表面112、114两者均是32字节对准约束GPU可对其执行BLT操作的对准表面。
如图9中所展示,未对准表面110的偶数行中的每一者完全含有于虚拟表面112的各行中的相应一者中。类似地,未对准表面110的奇数行中的每一者完全含有于虚拟表面114的各行中的相应一者中。由此,GPU驱动程序28可使GPU 10相对于未对准表面110的偶数行使用虚拟表面112来执行第一对准BLT操作,且相对于未对准表面110的奇数行使用虚拟表面114来执行第二对准BLT操作。以这种方式执行BLT操作可避免对卷包虚拟表面112、114的任一者的边缘的转变的矩形BLT区域进行处理的需要。
图10和11是说明根据本发明的使用图9中所界定的多个对准虚拟表面将未对准BLT操作转换为两个对准BLT操作的实例的概念图。从图7中所展示的单个未对准BLT操作开始,GPU驱动程序28可将单BLT操作转换为图10中所展示的偶数BLT操作和图11中所展示的奇数BLT操作。
虚拟源表面116、128可基于图7中的源表面84而界定,且虚拟目的地表面118、130可基于图7中的目的地表面86而界定。GPU驱动程序28可使用图9中说明的技术将源表面84转变为虚拟源表面116、128,且将目的地表面86转变为虚拟目的地表面118、130。具体来说,虚拟表面116、118可对应于图9中的虚拟表面112,且虚拟表面128、130可对应于图9中的虚拟表面114。虚拟源表面116、128各自包含源BLT区域120、122,且虚拟目的地表面118、130各自包含目的地BLT区域124、126。
GPU驱动程序28使GPU 10相对于源BLT区域120和目的地BLT区域124执行偶数BLT操作(图10)。具体来说,所述偶数BLT操作可将虚拟源表面116的源BLT区域120传送到虚拟目的地表面118的目的地BLT区域124类似地,GPU驱动程序28使GPU10相对于源BLT区域122和目的地BLT区域126执行奇数BLT操作(图11)。具体来说,所述奇数BLT操作可将虚拟源表面128的源BLT区域122传送到虚拟目的地表面130的目的地BLT区域126。
如图10中所展示,目的地BLT区域126卷包虚拟目的地表面118的边缘。类似地,在图11中,源BLT区域120卷包虚拟源表面128的边缘。对这些区域的卷包使这些区域不连续,由此阻止单BLT操作能够处理所述区域。然而,通过以上文所描述的方式执行偶数和奇数BLT操作,可避免对这些卷包区域的处理,由此提高BLT操作的效率。
为使GPU 10执行所述偶数和奇数BLT操作,GPU驱动程序28可将用于图7的未对准表面84、86的单个未对准BLT命令转换为两个对准BLT命令——相对于虚拟表面116、118和加阴影区域120、124执行的一个偶数BLT命令,以及相对于虚拟表面128、130和白色区域122、126执行的一个奇数BLT命令。
由GPU驱动程序28产生的多个BLT命令可集体地处理整个源和目的地区域,由此产生与所述单个未对准BLT命令本应产生的存储器状态相同的所得存储器状态。此外,所述对准BLT命令中的每一者相对于32字节对准虚拟表面而执行,所述32字节对准虚拟表面允许BLT命令被32字节对准约束GPU处理。以此方式,GPU驱动程序28可将未对准BLT命令转换为可由对准约束GPU服务的多个对准BLT命令,且由此获得相对低功率的GPU加速BLT处理的益处。
在一些实例中,为了将未对准BLT命令转换为多个对准BLT命令,GPU驱动程序28可将与未对准BLT命令相关联的BLT源或目的地区域的坐标和尺寸转换为待用于多个对准BLT命令的BLT区域的坐标和尺寸。在一些实例中,对于图7、10和11中所展示的双BLT转换操作,GPU驱动程序28可基于以下伪码产生BLT区域坐标和尺寸:
BLT1:SRC_align=(SRC_Y&0x1)?((SRC_base&0x3f)-64):SRC_base&0x3f;
DST_align=(DST_Y&0x1)?((DST_base&0x3f)-64):DST_base&0x3f;
NEW_SRC_base=SRC_base-SRC_align;
NEW_DST_base=DST_base-DST_align;
New_SRC_X=SRC_X+SRC_align+(SRC_Y&0x1)*SRC_width;
New_SRC_Y=SRC_Y/2;
New DST_X=DST_X+DST_align+(DST_Y&0x1)*DST_width;
New DST_Y=DST_Y/2;
New BLT_width=BLT_width
New BLT_height=(BLT_Height+1)/2;
New SRC_SURFACE_WIDTH=SRC_SURFACE_WIDTH*2;
New SRC_SURFACE_HEIGHT=SRC_SURFACE_HEIGHT+(~SRC_Y)&1)/2;
New DST_SURFACE_WIDTH=DST_SURFACE_WIDTH*2;
New DST_SURFACE_HEIGHT=DST_SURFACE_HEIGHT+(~SRC_Y)&1)/22;
BLT2:SRC_align=((SRC_Y+1&0x1)?((SRC_base&0x3f)-64):SRC_base&0x3f;
DST_align=((DST_Y+1)&0x1)?((DST_base&0x3f)-64):DST_base&0x3f;
NEW_SRC_base=SRC_base-SRC_align;
NEW_DST_base=DST_base-DST_align;
New_SRC_X=SRC_X+SRC_align+((SRC_Y+1)&0x1)*SRC_width;
New_SRC_Y=(SRC_Y+1)/2;
New DST_X=DST_X+DST_align+((DST_Y+1)&0x1)*DST_width;
New DST_Y=(DST_Y+1)/2;
New BLT_width=BLT_width
New BLT_height=(BLT_Height)/2;
New SRC_SURFACE_WIDTH=SRC_SURFACE_WIDTH*2;
New SRC_SURFACE_HEIGHT=(SRC_SURFACE_HEIGHT+1)+((~SRC_Y+1)&1)/2;
New DST_SURFACE_WIDTH=DST_SURFACE_WIDTH*2;
New DST_SURFACE_HEIGHT=(DST_SURFACE_HEIGHT+1)+((~SRC_Y+1)&1)/2;
在所述实例伪码中,BLT1对应于图10中所展示的偶数BLT操作,BLT2对应于图11中所展示的奇数BLT操作,SRC_X对应于源BLT区域88的左上角的x坐标,SRC_Y对应于源BLT区域88的左上角的y坐标,DST_X对应于目的地BLT区域90的左上角的x坐标,DST_Y对应于目的地BLT区域90的左上角的y坐标,BLT_width对应于源BLT区域88的宽度(例如,按字节计),BLT_Height对应于源BLT区域88的高度(例如,按行计),SRC_width对应于源表面84的表面宽度(例如,按字节计),DST_width对应于目的地表面86的表面宽度(例如,按字节计),SRC_base对应于源表面84的表面指针,DST_base对应于目的地表面86的表面指针,SRC_SURFACE_WIDTH对应于源表面84的表面宽度,SRC_SURFACE_HEIGHT对应于源表面84的高度,DST_SURFACE_WIDTH对应于目的地表面86的表面宽度,DST_SURFACE_HEIGHT对应于目的地表面86的高度,New_SRC_X对应于源BLT区域120(针对BLT1)或源BLT区域122(针对BLT2)的左上角的x坐标,New_SRC_Y对应于源BLT区域120(针对BLT1)或源BLT区域122(针对BLT2)的左上角的y坐标,New DST_X对应于目的地BLT区域124(针对BLT1)或目的地BLT区域126(针对BLT2)的左上角的x坐标,New DST_Y对应于目的地BLT区域124(针对BLT1)或目的地BLT区域126(针对BLT2)的左上角的y坐标,New BLT_width对应于源BLT区域120(针对BLT1)或源BLT区域122(针对BLT2)的宽度(例如,按字节计),New BLT_Height对应于源BLT区域120(针对BLT1)或源BLT区域122(针对BLT2)的高度(例如,按行计),New SRC_base对应于虚拟源表面116(针对BLT1)或虚拟源表面128(针对BLT2)的表面指针,New DST_base对应于虚拟目的地表面118(针对BLT1)或虚拟目的地表面130(针对BLT2)的表面指针,New SRC_SURFACE_WIDTH对应于虚拟源表面116(针对BLT1)或虚拟源表面128(针对BLT2)的表面宽度,NewSRC_SURFACE_HEIGHT对应于虚拟源表面116(针对BLT1)或虚拟源表面128(针对BLT2)的高度,New DST_SURFACE_WIDTH对应于虚拟目的地表面118(针对BLT1)或虚拟目的地表面130(针对BLT2)的表面宽度,且New DST_SURFACE_HEIGHT对应于虚拟目的地表面118(针对BLT1)或虚拟目的地表面130(针对BLT2)的高度。
在所述实例伪码中,算子“/”对应于整数除法,算子“&”对应于逐位AND运算,(A)?(B):(C)算子对应于三元算子(例如,如果-则-否则框架(具体来说,如果A则B否则C)),且首码“0x”指示随后的数字是十六进制常数。在一些实例中,用于虚拟源表面92的New SRC_SURFACE_HEIGHT针对BLT1和BLT2可不同,从而产生用于BLT1和BLT2的略微不同的虚拟源表面。在其它实例中,用于虚拟目的地表面94的New DST_SURFACE_HEIGHT针对BLT1和BLT2可不同,从而产生用于BLT1和BLT2的略微不同的虚拟目的地表面。
图12是说明根据本发明的用于处理未对准BLT操作的实例技术的流程图。CPU 6接收未对准BLT命令(131)。CPU 6(例如,GPU驱动程序28)将未对准BLT命令转换为多个对准BLT命令(132)。
在一些实例中,未对准BLT命令指定与所述未对准BLT命令相关联的表面中的至少一者的第一表面宽度。在此类实例中,为了转换未对准BLT命令,CPU 6可基于第一表面宽度确定第二表面宽度(其中所述第二表面宽度是第一表面宽度的N倍),且产生多个对准BLT命令,使得多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的表面中的至少一者的第二表面宽度。在此类实例中,N可以是大于或等于二的整数。在一些实例中,N可等于二。
在其它实例中,为了确定第二表面宽度,CPU 6可基于第一表面宽度和与执行多个对准BLT命令的处理器相关联的预定对准宽度约束条件来确定第二表面宽度。
在额外实例中,第一表面宽度可能不是预定对准宽度约束条件的整数倍数。在此类实例中,为了基于第一表面宽度和预定对准宽度约束条件确定第二表面宽度,CPU 6可确定第二表面宽度以使得第二表面宽度是预定对准宽度约束条件的整数倍数。
在一些实例中,多个对准BLT命令可包含第一对准BLT命令和第二对准BLT命令,且未对准BLT命令指定第一BLT区域。在此类实例中,为了产生多个对准BLT命令,CPU 6可基于第一BLT区域确定第二BLT区域和第三BLT区域(所述第二BLT区域不同于所述第三BLT区域),产生第一对准BLT命令以使得第一对准BLT命令指定第二BLT区域,且产生第二对准BLT命令以使得第二对准BLT命令指定第三BLT区域。在一些情况下,第二BLT区域可包含第一BLT区域的偶数行,且第三BLT区域可包含第一BLT区域的奇数行。
在其它实例中,未对准BLT命令指定与所述未对准BLT命令相关联的第一表面的第一表面指针值。在此类实例中,为了产生多个对准BLT命令,CPU 6可产生多个对准BLT命令以使得多个对准BLT命令中的每一者指定与多个对准BLT命令中的每一者相关联的表面中的一者的第一表面指针值。
在额外实例中,多个对准BLT命令包含第一对准BLT命令和第二对准BLT命令,且未对准BLT命令指定第一BLT区域。在此类实例中,为了产生多个对准BLT命令,CPU 6可基于所述第一BLT区域确定第二BLT区域和第三BLT区域(所述第二BLT区域不同于所述第三BLT区域),且产生第一对准BLT命令以使得所述第一对准BLT命令指定第二表面宽度、第一表面指针值和第二BLT区域。在此类实例中,CPU 6可进一步产生第二对准BLT命令以使得第二对准BLT命令指定第二表面宽度、第一表面指针值和第三BLT区域。在一些情况下,第二BLT区域可包含第一BLT区域的偶数行,且第三BLT区域可包含第一BLT区域的奇数行。
在一些实例中,未对准BLT命令指定与未对准BLT命令相关联的第一表面的第一表面指针值,所述第一表面指针值并非是与执行所述多个对准BLT命令的处理器相关联的预定对准宽度约束条件的整数倍数,且所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令。在此类实例中,为了产生多个对准BLT命令,CPU 6可基于第一表面指针值和预定对准宽度约束条件确定第二表面指针值和第三表面指针值以使得第二表面指针值和第三表面指针值是预定对准宽度约束条件的不同整数倍数,产生第一对准BLT命令以使得第一对准BLT命令指定与第一对准BLT命令相关联的表面中的一者的第二表面指针值,且产生第二对准BLT命令以使得第二对准BLT命令指定与第二对准BLT命令相关联的表面中的一者的第三表面指针值。在一些情况下,第二BLT区域可包含第一BLT区域的偶数行,且第三BLT区域可包含第一BLT区域的奇数行。
在其它实例中,未对准BLT命令指定第一BLT区域。在此类实例中,CPU 6可基于第一BLT区域确定第二BLT区域和第三BLT区域(所述第二BLT区域不同于所述第三BLT区域),产生第一对准BLT命令以使得第一对准BLT命令指定第二表面宽度、第二表面指针值和第二BLT区域,且产生第二对准BLT命令以使得第二对准BLT命令指定第二表面宽度、第三表面指针值和第三BLT区域。在一些情况下,第二BLT区域可包含第一BLT区域的偶数行,且第三BLT区域可包含第一BLT区域的奇数行。
本文所描述的技术可延伸到其中多于两个的表面行分组在一起以形成虚拟表面的单个行的表面。举例来说,当N个表面行分组在一起时,单个未对准BLT命令可转换为N个对准BLT命令,其中N是大于或等于二的整数。
在多于两个的表面行分组在一起的情况下,如果用于未对准BLT命令的未对准表面中的一者的表面指针未对准,那么CPU 6可产生两个不同的虚拟表面(类似于图9),其中第一虚拟表面具有小于所述未对准表面指针的对准表面指针,且第二虚拟表面具有大于所述未对准表面的对准表面指针。CPU 6可将两个虚拟表面中的一者以确保在特定BLT命令期间存取的表面行不卷包所指派的虚拟表面的边缘的方式指派到N个BLT命令中的每一者。
在一些实例中,本发明的技术可用于服务执行缩放和/或滤波的BLT操作。在此类实例中,读取引擎38可能未经对准约束,而写入引擎40可能经对准约束。
本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例来说,所描述技术的各种方面可在一或多个处理器中实施,所述一或多个处理器包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效的集成或离散逻辑电路,以及此类组件的任何组合。术语“处理器”或“处理电路”可一般指前述逻辑电路中的任一者(单独或与其它逻辑电路组合)或例如执行处理的离散硬件的任何其它等效电路。
此类硬件、软件和固件可实施于同一装置内或分开的装置内以支持本发明中所描述的各种操作和功能。另外,所描述的单元、模块或组件中的任一者可一起或分开作为离散但可互操作逻辑装置而实施。将不同特征描绘为模块或单元旨在强调不同功能方面,且未必暗示此类模块或单元必须由单独硬件或软件组件实现。确切地说,与一或多个模块或单元相关联的功能性可由单独硬件、固件及/或软件组件执行,或集成到共用或单独硬件或软件组件内。
本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可使一或多个处理器执行本文中所描述的技术(例如,当所述指令由所述一或多个处理器执行时)。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电子可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
计算机可读媒体可包含计算机可读存储媒体,其对应于有形存储媒体,例如上文所列的那些存储媒体。计算机可读媒体也可包括通信媒体,其包含促进计算机程序从一个位置到另一位置的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”一般可对应于(1)非暂时性有形计算机可读存储媒体,和(2)例如暂时性信号或载波等非有形计算机可读通信媒体。
已描述各种方面和实例。然而,可在不脱离以下权利要求的范围的情况下对本发明的结构或技术作出修改。

Claims (28)

1.一种用于处理块传送BLT命令的方法,其包括:
通过一或多个处理器将未对准BLT命令转换为多个对准BLT命令,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的表面中的至少一者的第一表面宽度和第一BLT区域,所述表面中的至少一者对应于像素数据的二维阵列,且其中转换所述未对准BLT命令包括:
基于所述第一表面宽度确定第二表面宽度,其中所述第二表面宽度是所述第一表面宽度的N倍,其中N是大于或等于二的整数;以及
产生所述多个对准BLT命令,使得所述多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的所述表面中的至少一者的所述第二表面宽度,所述多个对准BLT命令指定:
源虚拟表面和目的地虚拟表面,所述源虚拟表面和所述目的地虚拟表面中的每一者指定所述第二表面宽度;以及
与对准源虚拟表面相关联的多个源区域和与对准目的地虚拟表面相关联的多个目的地区域,通过将与所述未对准BLT命令相关联的所述第一BLT区域划分为与所述多个对准BLT命令中的一或多者相关联的多个不连续区域而产生所述多个源区域。
2.根据权利要求1所述的方法,其中确定所述第二表面宽度包括基于所述第一表面宽度和与执行所述多个对准BLT命令的处理器相关联的预定对准宽度约束条件来确定所述第二表面宽度。
3.根据权利要求2所述的方法,其中所述第一表面宽度并非是所述预定对准宽度约束条件的整数倍数,且其中基于所述第一表面宽度和所述预定对准宽度约束条件确定所述第二表面宽度包括确定所述第二表面宽度以使得所述第二表面宽度是所述预定对准宽度约束条件的整数倍数。
4.根据权利要求1所述的方法,其中N等于2。
5.根据权利要求1所述的方法,其中所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令,其中产生所述多个对准BLT命令包括:
基于所述第一BLT区域确定第二BLT区域和第三BLT区域,所述第二BLT区域不同于所述第三BLT区域;
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定所述第二BLT区域;以及
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定所述第三BLT区域。
6.根据权利要求5所述的方法,其中所述第二BLT区域包含所述第一BLT区域的偶数行,且所述第三BLT区域包含所述第一BLT区域的奇数行。
7.根据权利要求1所述的方法,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的第一表面的第一表面指针值,且其中产生所述多个对准BLT命令包括:产生所述多个对准BLT命令,使得所述多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的所述表面中的一者的所述第一表面指针值。
8.根据权利要求7所述的方法,其中所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令,其中产生所述多个对准BLT命令包括:
基于所述第一BLT区域确定第二BLT区域和第三BLT区域,所述第二BLT区域不同于所述第三BLT区域;
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定所述第二表面宽度、所述第一表面指针值和所述第二BLT区域;以及
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定所述第二表面宽度、所述第一表面指针值和所述第三BLT区域。
9.根据权利要求8所述的方法,其中所述第二BLT区域包含所述第一BLT区域的偶数行,且所述第三BLT区域包含所述第一BLT区域的奇数行。
10.根据权利要求1所述的方法,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的第一表面的第一表面指针值,其中所述第一表面指针值并非是与执行所述多个对准BLT命令的处理器相关联的预定对准宽度约束条件的整数倍数,其中所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令,且其中产生所述多个对准BLT命令包括:
基于所述第一表面指针值和所述预定对准宽度约束条件确定第二表面指针值和第三表面指针值,使得所述第二和第三表面指针值是所述预定对准宽度约束条件的不同整数倍数;
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定与所述第一对准BLT命令相关联的所述表面中的一者的所述第二表面指针值;以及
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定与所述第二对准BLT命令相关联的所述表面中的一者的所述第三表面指针值。
11.根据权利要求10所述的方法,其中所述第二表面指针值小于所述第一表面指针值,且所述第三表面指针值大于所述第一表面指针值。
12.根据权利要求10所述的方法,
其中产生所述多个对准BLT命令包括基于所述第一BLT区域确定第二BLT区域和第三BLT区域,所述第二BLT区域不同于所述第三BLT区域,
其中产生所述第一对准BLT命令包括产生所述第一对准BLT命令,使得所述第一对准BLT命令指定所述第二表面宽度、所述第二表面指针值和所述第二BLT区域;且
其中产生所述第二对准BLT命令包括产生所述第二对准BLT命令,使得所述第二对准BLT命令指定所述第二表面宽度、所述第三表面指针值和所述第三BLT区域。
13.根据权利要求12所述的方法,其中所述第二BLT区域包含所述第一BLT区域的偶数行,且所述第三BLT区域包含所述第一BLT区域的奇数行。
14.一种用于处理块传送BLT命令的装置,其包括:
存储器,其经配置以存储BLT命令;以及
一或多个处理器,其经配置以:
将未对准BLT命令转换为多个对准BLT命令,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的表面中的至少一者的第一表面宽度和第一BLT区域,且所述表面中的至少一者对应于像素数据的二维阵列;
基于所述第一表面宽度确定第二表面宽度,其中所述第二表面宽度是所述第一表面宽度的N倍,其中N是大于或等于二的整数;且
产生所述多个对准BLT命令,使得所述多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的所述表面中的至少一者的所述第二表面宽度,所述多个对准BLT命令指定:
源虚拟表面和目的地虚拟表面,所述源虚拟表面和所述目的地虚拟表面中的每一者指定所述第二表面宽度;以及
与对准源虚拟表面相关联的多个源区域和与对准目的地虚拟表面相关联的多个目的地区域,通过将与所述未对准BLT命令相关联的所述第一BLT区域划分为与所述多个对准BLT命令中的一或多者相关联的多个不连续区域而产生所述多个源区域。
15.根据权利要求14所述的装置,其中所述一或多个处理器进一步经配置以基于所述第一表面宽度和与执行所述多个对准BLT命令的处理器相关联的预定对准宽度约束条件来确定所述第二表面宽度。
16.根据权利要求15所述的装置,其中所述第一表面宽度并非是所述预定对准宽度约束条件的整数倍数,且其中所述一或多个处理器进一步经配置以确定所述第二表面宽度,使得所述第二表面宽度是所述预定对准宽度约束条件的整数倍数。
17.根据权利要求14所述的装置,其中N等于2。
18.根据权利要求14所述的装置,其中所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令,且其中所述一或多个处理器进一步经配置以:
基于所述第一BLT区域确定第二BLT区域和第三BLT区域,所述第二BLT区域不同于所述第三BLT区域;
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定所述第二BLT区域;且
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定所述第三BLT区域。
19.根据权利要求18所述的装置,其中所述第二BLT区域包含所述第一BLT区域的偶数行,且所述第三BLT区域包含所述第一BLT区域的奇数行。
20.根据权利要求14所述的装置,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的第一表面的第一表面指针值,且其中所述一或多个处理器进一步经配置以:
产生所述多个对准BLT命令,使得所述多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的所述表面中的一者的所述第一表面指针值。
21.根据权利要求20所述的装置,其中所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令,且其中所述一或多个处理器进一步经配置以:
基于所述第一BLT区域确定第二BLT区域和第三BLT区域,所述第二BLT区域不同于所述第三BLT区域;
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定所述第二表面宽度、所述第一表面指针值和所述第二BLT区域;且
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定所述第二表面宽度、所述第一表面指针值和所述第三BLT区域。
22.根据权利要求21所述的装置,其中所述第二BLT区域包含所述第一BLT区域的偶数行,且所述第三BLT区域包含所述第一BLT区域的奇数行。
23.根据权利要求14所述的装置,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的第一表面的第一表面指针值,其中所述第一表面指针值并非是与执行所述多个对准BLT命令的处理器相关联的预定对准宽度约束条件的整数倍数,其中所述多个对准BLT命令包括第一对准BLT命令和第二对准BLT命令,且其中所述一或多个处理器进一步经配置以:
基于所述第一表面指针值和所述预定对准宽度约束条件确定第二表面指针值和第三表面指针值,使得所述第二和第三表面指针值是所述预定对准宽度约束条件的不同整数倍数;
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定与所述第一对准BLT命令相关联的所述表面中的一者的所述第二表面指针值;且
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定与所述第二对准BLT命令相关联的所述表面中的一者的所述第三表面指针值。
24.根据权利要求23所述的装置,其中所述第二表面指针值小于所述第一表面指针值,且所述第三表面指针值大于所述第一表面指针值。
25.根据权利要求23所述的装置,
其中所述一或多个处理器进一步经配置以:
基于所述第一BLT区域确定第二BLT区域和第三BLT区域,所述第二BLT区域不同于所述第三BLT区域,
产生所述第一对准BLT命令,使得所述第一对准BLT命令指定所述第二表面宽度、所述第二表面指针值和所述第二BLT区域;且
产生所述第二对准BLT命令,使得所述第二对准BLT命令指定所述第二表面宽度、所述第三表面指针值和所述第三BLT区域。
26.根据权利要求14所述的装置,其中所述装置包括无线通信装置和移动电话手持机中的至少一者。
27.一种用于处理块传送BLT命令的设备,其包括:
用于接收未对准BLT命令的装置;
用于将所述未对准BLT命令转换为多个对准BLT命令的装置,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的表面中的至少一者的第一表面宽度和第一BLT区域,且所述表面中的至少一者对应于像素数据的二维阵列;
用于基于所述第一表面宽度确定第二表面宽度的装置,其中所述第二表面宽度是所述第一表面宽度的N倍,其中N是大于或等于二的整数;且
用于产生所述多个对准BLT命令的装置,使得所述多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的所述表面中的至少一者的所述第二表面宽度,所述多个对准BLT命令指定:
源虚拟表面和目的地虚拟表面,所述源虚拟表面和所述目的地虚拟表面中的每一者指定所述第二表面宽度;以及
与对准源虚拟表面相关联的多个源区域和与对准目的地虚拟表面相关联的多个目的地区域,通过将与所述未对准BLT命令相关联的所述第一BLT区域划分为与所述多个对准BLT命令中的一或多者相关联的多个不连续区域而产生所述多个源区域。
28.一种存储指令的非暂时性计算机可读存储媒体,所述指令在被执行时使一或多个处理器进行以下操作:
将未对准块传送BLT命令转换为多个对准BLT命令,其中所述未对准BLT命令指定与所述未对准BLT命令相关联的表面中的至少一者的第一表面宽度和第一BLT区域,且所述表面中的至少一者对应于像素数据的二维阵列;
基于所述第一表面宽度确定第二表面宽度,其中所述第二表面宽度是所述第一表面宽度的N倍,其中N是大于或等于二的整数;且
产生所述多个对准BLT命令,使得所述多个对准BLT命令中的每一者指定与所述多个对准BLT命令中的每一者相关联的所述表面中的至少一者的所述第二表面宽度,所述多个对准BLT命令指定:
源虚拟表面和目的地虚拟表面,所述源虚拟表面和所述目的地虚拟表面中的每一者指定所述第二表面宽度;以及
与对准源虚拟表面相关联的多个源区域和与对准目的地虚拟表面相关联的多个目的地区域,通过将与所述未对准BLT命令相关联的所述第一BLT区域划分为与所述多个对准BLT命令中的一或多者相关联的多个不连续区域而产生所述多个源区域。
CN201580067163.4A 2014-12-10 2015-11-06 处理未对准块传送操作 Expired - Fee Related CN107003964B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/566,423 2014-12-10
US14/566,423 US9818170B2 (en) 2014-12-10 2014-12-10 Processing unaligned block transfer operations
PCT/US2015/059450 WO2016093990A1 (en) 2014-12-10 2015-11-06 Processing unaligned block transfer operations

Publications (2)

Publication Number Publication Date
CN107003964A CN107003964A (zh) 2017-08-01
CN107003964B true CN107003964B (zh) 2020-05-22

Family

ID=54602040

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580067163.4A Expired - Fee Related CN107003964B (zh) 2014-12-10 2015-11-06 处理未对准块传送操作

Country Status (5)

Country Link
US (1) US9818170B2 (zh)
EP (1) EP3230880A1 (zh)
JP (1) JP6352546B2 (zh)
CN (1) CN107003964B (zh)
WO (1) WO2016093990A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10180734B2 (en) 2015-03-05 2019-01-15 Magic Leap, Inc. Systems and methods for augmented reality
IL296028A (en) 2015-03-05 2022-10-01 Magic Leap Inc Systems and methods for augmented reality
US10838207B2 (en) 2015-03-05 2020-11-17 Magic Leap, Inc. Systems and methods for augmented reality
JP2018536244A (ja) 2015-12-04 2018-12-06 マジック リープ, インコーポレイテッドMagic Leap,Inc. 再位置特定システムおよび方法
CA3032567A1 (en) 2016-08-02 2018-02-08 Magic Leap, Inc. Fixed-distance virtual and augmented reality systems and methods
US10812936B2 (en) 2017-01-23 2020-10-20 Magic Leap, Inc. Localization determination for mixed reality systems
CN117873313A (zh) 2017-03-17 2024-04-12 奇跃公司 具有彩色虚拟内容扭曲的混合现实系统及使用该系统生成虚拟内容的方法
CN110419061B (zh) * 2017-03-17 2023-09-29 奇跃公司 混合现实系统及使用该系统生成虚拟内容的方法
US10769752B2 (en) 2017-03-17 2020-09-08 Magic Leap, Inc. Mixed reality system with virtual content warping and method of generating virtual content using same
CN116483200A (zh) 2018-07-23 2023-07-25 奇跃公司 具有虚拟内容翘曲的混合现实系统和使用该系统生成虚拟内容的方法
JP7413345B2 (ja) 2018-07-23 2024-01-15 マジック リープ, インコーポレイテッド フィールド順次ディスプレイにおけるフィールド内サブコードタイミング
CN109656477B (zh) * 2018-12-11 2020-05-19 华中科技大学 一种基于STT-MRAM的非接触式智能卡SoC
CN111126589B (zh) 2019-12-31 2022-05-20 昆仑芯(北京)科技有限公司 神经网络数据处理装置、方法和电子设备
CN111899150A (zh) * 2020-08-28 2020-11-06 Oppo广东移动通信有限公司 数据处理方法、装置、电子设备及存储介质

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2089165B (en) * 1980-10-30 1985-10-09 Canon Kk Character and image processing
US4903217A (en) * 1987-02-12 1990-02-20 International Business Machines Corp. Frame buffer architecture capable of accessing a pixel aligned M by N array of pixels on the screen of an attached monitor
US5131083A (en) 1989-04-05 1992-07-14 Intel Corporation Method of transferring burst data in a microprocessor
US5218674A (en) * 1990-09-14 1993-06-08 Hughes Aircraft Company Hardware bit block transfer operator in a graphics rendering processor
US5251298A (en) * 1991-02-25 1993-10-05 Compaq Computer Corp. Method and apparatus for auxiliary pixel color management using monomap addresses which map to color pixel addresses
CA2074388C (en) * 1992-01-30 2003-01-14 Jeremy E. San Programmable graphics processor having pixel to character conversion hardware for use in a video game system or the like
US5801717A (en) * 1996-04-25 1998-09-01 Microsoft Corporation Method and system in display device interface for managing surface memory
US6031550A (en) * 1997-11-12 2000-02-29 Cirrus Logic, Inc. Pixel data X striping in a graphics processor
WO1999034273A2 (en) 1997-12-30 1999-07-08 Lsi Logic Corporation Automated dual scatter/gather list dma
US6065070A (en) 1998-03-18 2000-05-16 National Semiconductor Corporation DMA configurable channel with memory width N and with steering logic comprising N multiplexors, each multiplexor having a single one-byte input and N one-byte outputs
US6542909B1 (en) * 1998-06-30 2003-04-01 Emc Corporation System for determining mapping of logical objects in a computer system
US6411302B1 (en) 1999-01-06 2002-06-25 Concise Multimedia And Communications Inc. Method and apparatus for addressing multiple frame buffers
US6513107B1 (en) * 1999-08-17 2003-01-28 Nec Electronics, Inc. Vector transfer system generating address error exception when vector to be transferred does not start and end on same memory page
JP2001111651A (ja) 1999-10-07 2001-04-20 Internatl Business Mach Corp <Ibm> データ伝送装置およびその方法
US6587112B1 (en) 2000-07-10 2003-07-01 Hewlett-Packard Development Company, L.P. Window copy-swap using multi-buffer hardware support
US6900813B1 (en) 2000-10-04 2005-05-31 Ati International Srl Method and apparatus for improved graphics rendering performance
US7120317B1 (en) * 2001-03-01 2006-10-10 Silicon Motion, Inc. Method and system for a programmable image transformation
US7340495B2 (en) * 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
US6943804B2 (en) * 2002-10-30 2005-09-13 Hewlett-Packard Development Company, L.P. System and method for performing BLTs
EP1631911B1 (en) 2003-05-26 2007-02-14 Koninklijke Philips Electronics N.V. Method and device for transferring data between a main memory and a storage device
US7308526B2 (en) * 2004-06-02 2007-12-11 Intel Corporation Memory controller module having independent memory controllers for different memory types
US7296108B2 (en) 2005-05-26 2007-11-13 International Business Machines Corporation Apparatus and method for efficient transmission of unaligned data
US8031197B1 (en) 2006-02-03 2011-10-04 Nvidia Corporation Preprocessor for formatting video into graphics processing unit (“GPU”)-formatted data for transit directly to a graphics memory
FR2899354A1 (fr) 2006-03-28 2007-10-05 St Microelectronics Sa Traitement de donnees avec transfert de donnees entre memoires.
JP5226341B2 (ja) 2008-02-27 2013-07-03 富士通株式会社 チャネル装置、情報処理システム、及びデータ転送方法
US9245496B2 (en) * 2012-12-21 2016-01-26 Qualcomm Incorporated Multi-mode memory access techniques for performing graphics processing unit-based memory transfer operations

Also Published As

Publication number Publication date
CN107003964A (zh) 2017-08-01
EP3230880A1 (en) 2017-10-18
JP6352546B2 (ja) 2018-07-04
JP2017539030A (ja) 2017-12-28
US20160171644A1 (en) 2016-06-16
US9818170B2 (en) 2017-11-14
WO2016093990A1 (en) 2016-06-16

Similar Documents

Publication Publication Date Title
CN107003964B (zh) 处理未对准块传送操作
US10885607B2 (en) Storage for foveated rendering
EP3559914B1 (en) Foveated rendering in tiled architectures
EP3180773B1 (en) Bandwidth reduction using texture lookup by adaptive shading
JP6009692B2 (ja) グラフィックスプロセッシングユニットベースのメモリ転送動作を行うためのマルチモードメモリアクセス技法
US9449410B2 (en) Intra-frame timestamps for tile-based rendering
US10062139B2 (en) Vertex shaders for binning based graphics processing
US10410398B2 (en) Systems and methods for reducing memory bandwidth using low quality tiles
US10078883B2 (en) Writing graphics data from local memory to system memory
CN106575428B (zh) 图形处理单元中的高阶滤波
US9019284B2 (en) Input output connector for accessing graphics fixed function units in a software-defined pipeline and a method of operating a pipeline

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20200522

Termination date: 20211106