CN115861511B - 绘制命令的处理方法、装置、系统和计算机设备 - Google Patents

绘制命令的处理方法、装置、系统和计算机设备 Download PDF

Info

Publication number
CN115861511B
CN115861511B CN202211731074.3A CN202211731074A CN115861511B CN 115861511 B CN115861511 B CN 115861511B CN 202211731074 A CN202211731074 A CN 202211731074A CN 115861511 B CN115861511 B CN 115861511B
Authority
CN
China
Prior art keywords
command
indirect
command stream
template
target
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.)
Active
Application number
CN202211731074.3A
Other languages
English (en)
Other versions
CN115861511A (zh
Inventor
汪莹
武凤霞
赵静
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.)
Glenfly Tech Co Ltd
Original Assignee
Glenfly Tech Co Ltd
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 Glenfly Tech Co Ltd filed Critical Glenfly Tech Co Ltd
Priority to CN202211731074.3A priority Critical patent/CN115861511B/zh
Publication of CN115861511A publication Critical patent/CN115861511A/zh
Application granted granted Critical
Publication of CN115861511B publication Critical patent/CN115861511B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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

Landscapes

  • Controls And Circuits For Display Device (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请涉及一种绘制命令的处理方法、装置、系统、计算机设备、存储介质和计算机程序产品。所述方法包括:当软件应用产生任务时,从外部存储中读取硬件命令,所述硬件命令携带标签信息;若根据所述标签信息确定所述硬件命令为间接绘制命令,则对所述间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数;根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板;按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。采用本方法能够提高命令流解析器工作效率。

Description

绘制命令的处理方法、装置、系统和计算机设备
技术领域
本申请涉及图像处理技术领域,特别是涉及一种绘制命令的处理方法、装置、系统、计算机设备、存储介质和计算机程序产品。
背景技术
随着图像处理技术的发展,为了尽量减少CPU(中央处理器)与GPU(图像处理器)之间的交互、达到二者并行的目的,DirectX(多媒体编程接口)12用Indirect Draw(非直接渲染)替代了DirectX 11中的间接绘图和间接调用命令,提出了一种新的API(应用程序接口),即ExecuteIndirect(间接绘制指令)。
在对DirectX12进行处理时,由于DirectX12中的ExecuteIndirect API一次可以触发多个绘图/调用命令,当前技术中,多是将多个绘图/调用命令组成命令流列表的形式,由命令流解析器依次从命令流列表中读取命令,获取绘制参数,完成绘制,此种方式,由于在每一次绘制时,命令流解析器都需要从外部存储中读取一系列的绘制命令,并执行绘制命令,导致命令流预解析器的工作效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高命令流解析器工作效率的绘制命令的处理方法、装置、系统、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种绘制命令的处理方法。所述方法包括:
当软件应用产生任务时,从外部存储中读取硬件命令,所述硬件命令携带标签信息;
若根据所述标签信息确定所述硬件命令为间接绘制命令,则对所述间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数;
根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板;
按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。
在其中一个实施例中,所述间接绘制命令包括次数指针信息和最大绘制次数;所述对所述间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数,包括:当所述间接绘制命令的次数指针信息为第一标记时,则将所述最大绘制次数确定为所述目标绘制次数。
在其中一个实施例中,所述间接绘制命令还包括指针地址信息;所述对所述间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数,还包括:当所述间接绘制命令的次数指针信息为第二标记时,则根据所述指针地址信息确定间接绘制次数;将所述最大绘制次数和所述间接绘制次数进行比较,将数值较小的绘制次数作为所述目标绘制次数。
在其中一个实施例中,所述按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制,包括:将从所述外部存储中读取的命令流模板存储至命令流解析器中的命令流缓存区域;通过所述命令流解析器,并按照所述目标绘制次数对所述命令流缓存区域中的命令流模板进行循环执行,以完成图像绘制。
在其中一个实施例中,所述方法还包括:若所述命令流模板所需的存储空间大于所述命令流缓存区域的存储空间,则将所述命令流模板中的一部分存储于所述命令流缓存区域,另一部分存储于外部缓存中;通过所述命令流解析器,并按照所述目标绘制次数对所述命令流缓存区域和所述外部缓存中的命令流模板进行循环执行,以完成图像绘制。
在其中一个实施例中,每次对命令流模板进行执行的步骤包括:对所述命令流模板进行预解析和主解析;其中,在预解析过程中确定当次循环中的目标存储地址,并根据所述目标存储地址从所述外部存储中获取间接数据,在主解析过程中基于当次循环所获取的间接数据执行所述命令流模板中的各绘制命令。
在其中一个实施例中,所述命令流模板包括一次绘制时所需的多个绘制命令,所述在预解析过程中确定当次循环中的目标存储地址,并根据所述目标存储地址从所述外部存储中获取间接数据,包括:在预解析过程中确定当次循环中与各绘制命令分别对应的目标存储地址;根据各绘制命令分别对应的目标存储地址,依次从所述外部存储中获取与各绘制命令分别对应的间接数据;所述在主解析过程中基于当次循环所获取的间接数据执行所述命令流模板中的各绘制命令,包括:在主解析过程中,基于当次循环所获取的与各绘制命令分别对应的间接数据,分别执行所述命令流模板中的各绘制命令,以完成所述命令流模板的执行。
在其中一个实施例中,所述确定当次循环中与各绘制命令分别对应的目标存储地址,包括:对于首次循环,将与所述命令流模板中各绘制命令分别对应的起始地址,作为各绘制命令的目标存储地址;对于非首次循环,基于各绘制命令分别对应的起始地址、当前循环次数、以及预设偏移量,确定各绘制命令分别对应的目标存储地址。
第二方面,本申请还提供了一种绘制命令的处理装置。所述装置包括:
命令读取模块,用于当软件应用产生任务时,从外部存储中读取硬件命令,所述硬件命令携带标签信息;
第一数据处理模块,用于若根据所述标签信息确定所述硬件命令为间接绘制命令,则对所述间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数;
第二数据处理模块,用于根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板;
解析模块,用于按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。
第三方面,本申请还提供了一种绘制命令的处理系统,其特征在于,所述处理系统包括命令流解析器和外部存储,所述命令流解析器和所述外部存储通信连接,所述命令流解析器包括寄存器池、命令抓取器、解析器、命令数据缓存以及命令流缓存;所述寄存器池,用于记录软件应用产生的任务;所述命令抓取器,用于根据所述寄存器池中记录的软件应用产生的任务,从外部存储中读取硬件命令,并将所述硬件命令存储于所述命令数据缓存中,所述硬件命令携带标签信息;所述命令流解析器,用于若根据所述标签信息确定所述硬件命令为间接绘制命令,则对所述间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数,以及根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板,并将所述命令流模板存储于所述命令流缓存中,以及用于按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。
第四方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述绘制命令的处理方法的步骤。
第五方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述绘制命令的处理方法的步骤。
第六方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述绘制命令的处理方法的步骤。
上述绘制命令的处理方法、装置、计算机设备、存储介质和计算机程序产品,当软件应用产生任务时,从外部存储中读取硬件命令,硬件命令携带标签信息;若根据标签信息确定硬件命令为间接绘制命令,则对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数;根据间接绘制命令中的模板地址信息和尺寸信息,从外部存储中读取与间接绘制命令关联的命令流模板;按照目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制,其中,通过在硬件命令为间接绘制命令时,对间接绘制命令进行解析,确定出目标绘制次数,以及获取与间接绘制命令关联的命令流模板,最后根据目标绘制次数对命令流模板进行循环,使得可以通过一次命令读操作就完成多次绘制,提高了硬件执行效率。
附图说明
图1为一个实施例中绘制命令的处理方法的应用环境图;
图2为另一个实施例中绘制命令的处理方法的应用环境图;
图3为一个实施例中绘制命令的处理方法的流程示意图;
图4为另一个实施例中绘制命令的处理方法的流程示意图;
图5为另一个实施例中绘制命令的处理方法的流程示意图;
图6为另一个实施例中绘制命令的处理方法的流程示意图;
图7为一个实施例中绘制命令的处理方法的命令定义结构示意图;
图8为一个实施例中绘制命令的处理装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的绘制命令的处理方法,可以应用于如图1所示的绘制命令的处理系统中。其中,图1所示的绘制命令的处理系统中共涉及到命令流解析器、外部存储以及软件驱动配置寄存器三大模块,具体的,当软件驱动配置寄存器接收到软件应用的绘图任务之后,将其转换为相应的硬件命令包写入外部存储,并通过更新命令流解析器中的寄存器信息从而触发命令流解析器工作,命令流解析器开始工作后,从外部存储中读取硬件命令包,通过一系列的解析处理,完成图像绘制。
其中,命令流解析器中可以包括寄存器池、命令抓取器、命令/数据缓存、命令预解析器以及命令主解析器,命令/数据缓存包括命令缓存+数据缓存、命令流缓存,命令预解析器包括预解析器以及预解析控制器,命令主解析器包括主解析器以及主解析控制器。其中,寄存器池可以用于记录寄存器信息,命令抓取器可以用于检测寄存器池中的寄存器内容,判断软件应用是否有下发新的任务,若有,则命令抓取器可以根据寄存器池中的相关地址信息,开始从外部存储器中读取相应的命令流;命令缓存+数据缓存可以用来缓存从外部存储中读回来硬件命令(如绘制命令、调度命令等),以及硬件命令需要的间接数据。预解析器可以用于对命令缓存+数据缓存中的硬件命令进行解析,从而当硬件命令为间接绘制命令时,从外部存储中读取命令流模板,并将命令流模板存储在命令流缓存中。
最后,预解析器可以对命令流模板进行解析,在预解析过程中从外部存储中读取命令流模板中的绘制命令对应的间接数据,并将间接数据存储于命令缓存+数据缓存中,主解析器读取命令缓存+数据缓存中的间接数据,对每个间接绘制命令进行解析,更新相应的寄存器信息,然后发到后续的流水线中,以实现图像绘制,其中,在预解析器工作的过程中,预解析控制器可以对预解析器的工作进度进行判断,从而判断是否退出当前Execute_Indirect(间接绘制)命令的预解析,开始下一个命令,在主解析器工作的过程中,主解析控制器可以对主解析器的工作进度进行判断,从而判断是否退出当前Execute_Indirect命令的主解析,开始下一个命令。
在其中一个实施例中,命令流缓存的SIZE(大小)可以事先根据统计结果确定,从而保证能够满足大部分使用场景,具体的,命令流缓存的大小可以设定为32x256bits。
在其中一个实施例中,当本申请实施例提供的绘制命令的处理方法,还可以应用于如图2所示的命令流解析系统中。其中,图2所示的命令流解析系统中还包括外部缓存,其中,由于命令流模板的SIZE是变量,因此,若命令流模板的SIZE太大,而命令流缓存可能会存在装不下命令流模板的情况,因此,针对命令流缓存装不下的命令流模板部分,可以借助外部缓存,从而可以避免在命令流模板太大时,需要多次从外部存储中读取命令流模板的情况,有效提升了数据处理效率。
在其中一个实施例中,当软件应用产生任务时,从外部存储中读取硬件命令,硬件命令携带标签信息;若根据标签信息确定硬件命令为间接绘制命令,则对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数;根据间接绘制命令中的模板地址信息和尺寸信息,从外部存储中读取与间接绘制命令关联的命令流模板;按照目标绘制次数对命令流模板进行循环执行,以完成图像绘制。
其中,本申请中所涉及到的命令流解析器既可以支持DirectX(多媒体编程接口)12的Execute Indirect(间接绘制)API(应用程序接口),也可以同时兼容DirectX 9/10/11中的各种direct(直接)/indirect draw(非直接渲染)/dispatch(调度)API,由于命令流解析器中所涉及到的命令流缓存、预解析控制器、主解析控制器以及外部缓存正是针对DirectX 12所新增的硬件模块,因此,本申请的实施例中是对DirectX 12的间接绘制命令的处理过程为例进行说明的。
在一个实施例中,如图3所示,提供了一种绘制命令的处理方法,以该方法应用于图1中的命令流解析器为例进行说明,其中,该命令流解析器是部署在计算机设备中的,包括以下步骤:
步骤S302,当软件应用产生任务时,从外部存储中读取硬件命令,硬件命令携带标签信息。
其中,软件应用可以是指各种应用程序,软件应用产生的任务可以是指由应用程序所产生的各种绘制任务(如在播放器上显示一个3D画面等),硬件命令可以是指由软件驱动层根据软件应用产生的任务所生成的硬件可执行的命令,具体的,某一个软件应用基于DirectX12的API产生任务,则软件驱动层可以根据DirectX 12的API生成硬件命令。
其中,标签信息可以是指用来判断硬件命令的类型的判断标签,具体的,软件驱动层在产生硬件命令时,可以根据事先定义好的major opcode(主操作码)进行编码,针对DirectX12的API,则可以使用空闲的Major opcode(如“0x5”)进行编码。
在其中一个实施例中,软件驱动层在接收到软件应用产生的任务(如绘图任务)之后,软件驱动层可以将其转换为相应的硬件命令包写入外部存储中,并通过更新寄存器池中的相应寄存器信息触发命令流解析器开始工作,当命令流解析器工作之后,命令流解析器中的命令抓取器不断监视寄存器池中的若干寄存器信息,若发现软件驱动层改写相关寄存器信息且满足相应要求,则命令流解析器中的命令抓取器开始从外部存储中抓取命令包(包含多个硬件命令)并写入命令/数据存储缓存中。
步骤S304,若根据标签信息确定硬件命令为间接绘制命令,则对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数。
其中,间接绘制命令可以是指为了支持DirectX12的Execute Indirect API,由软件驱动层所定义的命令,目标绘制次数可以是指解析1次间接绘制命令所具体要绘制的次数。
具体的,命令流解析器的预解析器可以对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数。
步骤S306,根据间接绘制命令中的模板地址信息和尺寸信息,从外部存储中读取与间接绘制命令关联的命令流模板。
其中,模板地址信息是指命令流模板的起始地址,尺寸信息是指命令流模板的具体dw size(数据尺寸)。
其中,命令流模板可以是指软件驱动层对DirectX 12的Execute Indirect在一次绘制时涉及到的绘制命令进行打包之后得到的,其中,命令流模板中可以包括多个绘制命令,以及各绘制命令对应的获取间接数据的地址信息。命令流模板中的绘制命令可以是根据DirectX 12Execute Indirect API的函数声明确定的,具体的,软件驱动层可以是根据函数声明中的“pArgumentDesc(类型)”指向的各个“Argument(参数)”类型映射得到的绘制命令,相应的,命令流模板中每个绘制命令对应的取间接数据的地址信息可以是由函数声明中“pArgumentBuffer(参数缓冲信息)”和“ArgumentBufferOffset(参数缓冲偏移信息)”计算得到的。
在其中一个实施例中,命令流解析器中的预解析器可以根据间接绘制命令中的模板地址信息和尺寸信息,从外部存储中读取与间接绘制命令关联的命令流模板。
步骤S308,按照目标绘制次数对命令流模板进行循环执行,以完成图像绘制。
其中,命令流解析器在确定目标绘制次数以及获取到命令流模板之后,则可以按照目标绘制次数,对命令流模板进行循环执行,在每次循环执行过程中读取相应绘制参数后触发绘图命令,以完成图像绘制。
上述绘制命令的处理方法中,当软件应用产生任务时,从外部存储中读取硬件命令,硬件命令携带标签信息;若根据标签信息确定硬件命令为间接绘制命令,则对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数;根据间接绘制命令中的模板地址信息和尺寸信息,从外部存储中读取与间接绘制命令关联的命令流模板;按照目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制,其中,通过在硬件命令为间接绘制命令时,对间接绘制命令进行解析,确定出目标绘制次数,以及获取与间接绘制命令关联的命令流模板,最后根据目标绘制次数对命令流模板进行循环,使得可以通过一次命令读操作就完成多次绘制,提高了硬件执行效率。
在其中一个实施例中,间接绘制命令包括次数指针信息和最大绘制次数;对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数,包括:当间接绘制命令的次数指针信息为第一标记时,则将最大绘制次数确定为目标绘制次数。
其中,次数指针信息可以用于表示是否使用了count buffer(计数缓冲),软件驱动层在生成间接绘制指令时,可以根据DirectX 12Execute Indirect API的函数声明中的pCountBuffer(计数缓存指针),来确定次数指针信息,如果函数声明中pCountBuffer为NULL(空),则表明此时并未使用count buffer,如果函数声明中的次数指针信息不为空,则表明此时使用了count buffer。
进一步的,针对pCountBuffer为NULL的情况,可以采用第一标记进行标识,针对pCountBuffer不为NULL的情况,可以采用第二标记进行标识,具体的,可以采用数字作为标记,例如,可以采用0表示pCountBuffer为NULL,采用1表示pCountBuffer不为NULL,可选的,也可以采用1表示pCountBuffer为NULL,采用0表示pCountBuffer不为NULL,本申请实施例中,采用0表示pCountBuffer为NULL,采用1表示pCountBuffer不为NULL,因此,当命令流解析器根据次数指针信息确定第一标记为0时,确定未使用count buffer。
其中,最大绘制次数可以是根据函数声明中的MaxCmmandCount(最大命令计数)确定的。
具体的,当命令流解析器根据指针次数信息确定pCountBuffer为NULL时,则可以直接将最大绘制次数确定为目标绘制次数。
上述实施例中,命令流解析器在确定目标绘制次数时,实质上是通过DirectX12Execute Indirect API的函数声明中的信息来确定的,从而在未使用pCountBuffer时,直接将最大绘制次数确定为目标绘制次数。
在其中一个实施例中,间接绘制命令还包括指针地址信息;对间接绘制命令进行解析,得到与间接绘制命令对应的目标绘制次数,还包括:当间接绘制命令的次数指针信息为第二标记时,则根据指针地址信息确定间接绘制次数;将最大绘制次数和间接绘制次数进行比较,将数值较小的绘制次数作为目标绘制次数。
其中,指针地址信息可以是指在pCountBuffer不为NULL时,所对应的Countbuffer_Address(计数缓冲地址)和Countbuffer_Offset(计数缓冲偏移),当命令流解析器确定次数指针信息为1时,则表示使用了pCountBuffer,则命令流解析器可以根据指针地址信息确定间接绘制次数,然后将最大绘制次数和间接绘制次数进行比较,将数值较小的绘制次数作为目标绘制次数。
上述实施例中,命令流解析器针对pCountBuffer不为NULL的情况,获取到间接绘制次数,并将最大绘制次数和间接绘制次数进行比较,将数值较小的绘制次数作为目标绘制次数,从而避免出现错误绘制的情况。
在其中一个实施例中,如图4所示,为一个实施例中绘制命令的处理方法的流程示意图:
其中,图4中所涉及到的是命令流解析器如何确定出目标绘制次数的流程示意图,首先,命令流解析器可以根据间接绘制命令中的次数指针信息(即“CountBuf_En”)是否为1,确定最终需要执行的循环次数“FinalDrawCount”(目标绘制次数)。
若“CountBuf_En=1”,则表示间接绘制命令除了command header(命令头)部分,还跟随8个配套的dw(自定义数据),且命令流解析器需要根据5th~8th(第5到第8)个dwfollowed中的指针地址信息,从外部存储中读取间接绘制次数“IndirectDrawCount”,具体的,读取间接绘制次数时使用的具体地址为:Read Addr_IndirectDrawCount(读取间接绘制次数的地址)=Countbuffer_Address(计数缓冲地址)+Countbuffer_Offset(计数缓冲偏移)。
命令流解析器在根据读取间接绘制次数的地址读取到间接绘制次数之后,则可以将最大绘制次数和间接绘制次数进行比较,确定出目标绘制次数,具体的,可以采用如下方式获得目标绘制次数:
FinalDrawCount(目标绘制次数)=min{MaxDrawCount(最大绘制次数),IndirectDrawCount(间接绘制次数)}。
其中,若“CountBuf_En=0”,表示间接绘制命令除了command header部分,还跟随4个配套的dw,则此时的FinalDrawCount=MaxDrawCount。
在确定出目标绘制次数之后,命令流解析器还会根据命令流模板的存放地址“Cmdlist_Address”和总的dw个数“Cmd_List_Dwc”,读取命令流模板到命令流缓存区域(即命令流缓存)中。
在读取到命令流模板之后,则命令流解析器可以基于命令流模板执行循环绘制,直至绘制次数等于目标绘制次数,则完成绘制。
在其中一个实施例中,按照目标绘制次数对命令流模板进行循环执行,以完成图像绘制,包括:将从外部存储中读取的命令流模板存储至命令流解析器中的命令流缓存区域;通过命令流解析器,并按照目标绘制次数对命令流缓存区域中的命令流模板进行循环执行,以完成图像绘制。
其中,命令流解析器在获取命令流模板之后,会将命令流模板存储在命令流解析器中的命令流缓存区域中,然后按照目标绘制次数对命令流缓存区域中的命令流模板进行循环执行,以完成图像绘制。
上述实施例中,通过在命令流解析器中新增的命令流缓存区域,存放命令流模板,完成DirectX 12的API的绘制,而针对DirectX 11等API的绘制,则无需使用命令流缓存区域,因此,通过设置存储命令流模板的命令流缓存区域,很好的实现了前向兼容。
其中,由于命令流模板的SIZE是个变量,虽然能够满足大部分使用场景,但仍然可能会存在命令流缓存区域的存储空间无法容纳命令流模板的情况,因此,在其中一个实施例中,还包括:若命令流模板所需的存储空间大于命令流缓存区域的存储空间,则将命令流模板中的一部分存储于命令流缓存区域,另一部分存储于外部缓存中;通过命令流解析器,并按照目标绘制次数对命令流缓存区域和外部缓存中的命令流模板进行循环执行,以完成图像绘制。
其中,外部缓存可以是指硬件中的L2 cache(二级缓存)存放,当命令流解析器确定命令流模板的所需的存储空间大于命令流缓存区域的存储空间时,可以将命令流模板中的一部分存储于命令流缓存区域,另一部分存储于外部缓存中。
上述实施例中,针对命令流缓存区域装不下的命令流模板部分,可以借助外部缓存,从而可以避免在命令流模板太大时,需要多次从外部存储中读取命令流模板的情况,有效提升了数据处理效率。
其中,当命令流解析器获取到命令流模板,并将命令流模板存储在命令流缓存区域中之后,则可以对命令流模板进行执行,以此完成图像绘制,因此,在其中一个实施例中,每次对命令流模板进行执行的步骤包括:对命令流模板进行预解析和主解析;其中,在预解析过程中确定当次循环中的目标存储地址,并根据目标存储地址从外部存储中获取间接数据,在主解析过程中基于当次循环所获取的间接数据执行命令流模板中的各绘制命令。
其中,目标存储地址可以是指命令流模板中各绘制命令的间接数据在ArgumentBuffer(参数缓冲)中的地址,命令流解析器在对命令流模板进行执行时,可以分为主解析和预解析两个过程,其中,预解析可以是由命令流解析器中的预解析器完成的,主解析可以是由命令流解析器中的主解析器完成的,具体的,命令流解析器在根据目标绘制次数对命令流模板进行绘制执行的过程中,针对每一次循环过程,在采用预解析器进行预解析时,都会确定出该次循环所涉及到的目标存储地址,然后根据目标存储地址获取对应的间接数据,命令流解析器在获得间接数据之后,会将间接数据存储在命令+数据缓存中,从而主解析器可以从命令+数据缓存中,基于当次循环所获取的间接数据执行命令流模板中的各绘制命令。
其中,在预解析器在对命令流模板进行预解析时,命令流解析器中的预解析控制器会实时确定每个绘制命令的预解析进度,用以判断是否退出当前循环过程中某一个绘制命令的预解析,从而确定是否开始下一个绘制命令的预解析或者进入下一个循环过程,因此,只有当前命令为DirectX 12的绘制命令时才会启用预解析控制器,而DirectX 11等的绘制命令均采用预解析器直接解析即可。
其中,在主解析器根据当次循环所获取的间接数据执行命令流模板中的各绘制命令时,命令流解析器中的主解析控制器会实时确定每个绘制命令的主解析进度,用以判断是否退出当前循环过程中某一个绘制命令的主解析,从而确定是否开始下一个绘制命令的主解析或者进入下一个循环过程,因此,只有当前命令为DirectX 12的绘制命令时才会启用主解析控制器,而DirectX 11等的绘制命令均采用主解析器直接解析即可。
上述实施例中,命令流解析器在针对命令流模板进行执行的步骤共包括预解析和主解析两个部分,从而通过命令流模板进行循环执行,每次获取相应间接数据后触发绘制命令,完成图像绘制,提高了硬件执行效率。
在其中一个实施例中,命令流模板包括一次绘制时所需的多个绘制命令,在预解析过程中确定当次循环中的目标存储地址,并根据目标存储地址从外部存储中获取间接数据,包括:在预解析过程中确定当次循环中与各绘制命令分别对应的目标存储地址;根据各绘制命令分别对应的目标存储地址,依次从外部存储中获取与各绘制命令分别对应的间接数据;在主解析过程中基于当次循环所获取的间接数据执行命令流模板中的各绘制命令,包括:在主解析过程中,基于当次循环所获取的与各绘制命令分别对应的间接数据,分别执行命令流模板中的各绘制命令,以完成命令流模板的执行。
其中,软件驱动层在准备命令流模板时,填在命令流模板上面的读地址信息是一次绘制时该命令的间接数据在Argument Buffer中的地址。因此,在当次循环过程中,命令流解析器的预解析器若要从外部存储中获取绘制命令的间接数据,则需要确定各绘制命令分别对应的目标存储地址,然后根据目标存储地址,依次从外部存储中获取与各绘制命令分别对应的间接数据,进一步的,命令流解析器的主解析器需要根据当次循环所获取的与各绘制命令分别对应的间接数据,分别执行命令流模板中的各绘制命令,以完成命令流模板的执行。
上述实施例中,在每一次循环的过程中,命令流解析器的预解析器通过目标存储地址读取间接数据,主解析器通过获取的与各绘制命令分别对应的间接数据,分别执行命令流模板中的各绘制命令,由此通过两者的协同作用,完成绘制。
在其中一个实施例中,确定当次循环中与各绘制命令分别对应的目标存储地址,包括:对于首次循环,将与命令流模板中各绘制命令分别对应的起始地址,作为各绘制命令的目标存储地址;对于非首次循环,基于各绘制命令分别对应的起始地址、当前循环次数、以及预设偏移量,确定各绘制命令分别对应的目标存储地址。
其中,命令流解析器的预解析器在确定目标存储地址时,可以通过命令流解析器中给的预解析控制器判断当次循环是否为首次循环,具体的,预解析控制器可以根据CurrentDrawIdx(当前的循环次数)变量确定是否首次循环,具体的,若CurrentDrawIdx<=1,表示当次循环是首次循环,则命令流解析器的预解析器可以将与命令流模板中各绘制命令分别对应的起始地址,作为各绘制命令的目标存储地址。
若CurrentDrawIdx>1,表示当次循环不是首次循环,则预解析器需要根据各绘制命令分别对应起始地址、当前循环次数、以及预设偏移量自行计算对应的目标存储地址,具体的,在对命令流模板进行循环执行的过程中,第i次和第i+1次对应的间接数据在外部存储中可以只相差“ByteStride”个字节,因此软件驱动层可以将“ByteStride”放到间接绘制命令的dw followed(跟随数据)中,硬件在第j次执行时,在已有的address(地址)基础上“加上ByteStride*j”,再从外部存储中去读数据,具体的,在计算目标存储地址时,可以采用如下公式:
ReadAddr(当次循环的目标地址)=AddressOnCmd(起始地址)+(CurrentDrawIdx(当前循环次数)-1)*Argument_Stride(预设偏移量)。
在其中一个实施例中,如图5所示,为一个实施例中绘图命令的处理方法的流程示意图:
其中,图5中涉及到的是预解析控制器对预解析器的解析流程进行解析进度判断的流程示意图:
首先,计算出目标绘制次数之后,开始对命令流模板进行循环执行之前,预解析控制器可以初始化相关变量,其中,初始化的相关变量可以包括预解析过程的当前的循环次数,(即CurrentDrawIdx_Pr)、预解析过程的当次循环过程中的dw解析个数(即CurrentCmdDwIdx_Pre),具体的,预解析控制器可以将CurrentDrawIdx_Pre初始化为1,将CurrentCmdDwIdx_Pre初始化为1,当预解析器拿到完整的绘制命令(cmd)之后,则可以根据cmd的具体长度更新CurrentCmdDwIdx_Pre。
进一步的,预解析器对cmd进行预解析,在解析过程中,预解析控制器根据实时的CurrentCmdDwIdx_Pre,和更新的CurrentCmdDwIdx_Pre,确定是否完成本次循环,若完成本次循环,则CurrentDrawIdx_Pre按照预设步长增加,若没有完成本次循环,则保持解析过程,直至完成所有的循环。
在其中一个实施例中,如图6所示,为另一个实施例中绘图命令的处理方法的流程示意图:
其中,图6中涉及到的是主解析控制器对主解析器的解析流程进行解析进度判断的流程示意图:
首先,计算出目标绘制次数之后,开始对命令流模板进行循环执行之前,预解析控制器可以初始化相关变量,其中,初始化的相关变量可以包括主解析过程的当前的循环次数(即CurrentDrawIdx_Main),主解析过程中当次循环过程中的dw解析个数(即CurrentCmdDwIdx_Main),具体的,主解析控制器可以将CurrentDrawIdx_Main初始化为1,将CurrentCmdDwIdx_Main初始化为1,当主解析器拿到完整的绘制命令(即cmd)之后,则可以根据cmd的具体长度更新CurrentCmdDwIdx_Main。
进一步的,主解析器对cmd进行主解析,在主解析过程中,主解析控制器根据实时的CurrentCmdDwIdx_Main,和更新的CurrentCmdDwIdx_Main,确定是否完成本次循环,若完成本次循环,则CurrentDrawIdx_Main按照预设步长增加,若没有完成本次循环,则保持解析过程,直至完成所有的循环。
在其中一个实施例中,如图7所示,为一个实施例中中间绘制命令的参数定义说明示意图:
本实施例中,采用32bit(位)的command header(命令头)和若干dw followed完成了中间绘制命令的命令定义,其中,32bit command header中的每一比特都有其对应的含义,具体的:
【31:28】:高4bits为Major opcode,命令流解析器可以为每种不同的硬件命令事先定义好它的专属major opcode,软件驱动层在产生间接绘制命令时,可以根据事先定义好的major opcode进行编码,例如。可以给新增加的间接绘制命令使用“0x5”进行编码。
【27:27】:CountBuf_En这一比特为次数指针信息,表示是否使用了count buffer。从DirectX 12ExecuteIndirect API的函数声明中可知,“pCountBuffer”是一个指针,而且这个指针可以为NULL,表明此时并不需要使用count buffer。为了与此对应,可以定义一个“CountBuf_En”,用于确认是若否使用了pCountBuffer。软件驱动层根据DirectX 12API中的“pCountBuffer”是否为NULL来填“CountBuf_En”,为NULL则填0,否则填1。
当“CountBuf_En=1”、即“pCountBuffer!=NULL”时,command header后面会跟着共8个dw,其中dw 5~6对应“pCountBuffer”包含的地址信息,而dw7~8对应“CountBufferOffset”。
【26:16】:这11比特为保留的比特,暂时无特殊用处。
【15:0】:表示命令流模板的具体dw size,软件驱动层在解析DirectX12ExecuteIndirect API的函数声明中“pCommandSignature”指向的“Command signature”时,需要将其中的每一个“Argument”的更新映射为硬件已经支持的命令形式,由于这些命令需要执行多次、且每次执行需要的间接数据虽然存储于“Argument Buffer”中的不同位置,但间隔一定为“ByteStride”个字节,所以硬件和软件约定好软件每次只需要准备第一次执行时需要的所有命令、且将这些命令的总dw size填到“Cmd_List_Dwc”上,硬件在执行时也只从外部存储中读取“Cmd_List_Dwc”个dw后多次循环利用,以达到多次绘制的效果。
进一步的,在32bit command header之后,跟着若干配套使用的dw,dw个数为4或者8个dword,具体由“CountBuf_En”决定:
1st dw followed填的是32bit“MaxDrawCount”,即函数声明中的“UINTMaxCommandCount”,表示最大循环的次数(最大绘制次数);
2nd dw followed填的是32bit“Argument_Stride”,对应的是函数声明中的“UINTByteSride,表示每次循环需要的间接数据的总字节个数;
3rd~4th dw followed填的是命令流模板的存放地址“Cmdlist_Address”。命令流模板由软件驱动层根据“pArgumentDesc”指向的各个“Argument”类型映射得到,命令流模板中每个绘制命令取间接数据的地址信息由函数声明中的“pArgumentBuffer”和“ArgumentBufferOffset”计算得到,在生成一次绘制需要的命令流模板后,软件驱动层会将它写入分配好的存储空间中,并将这块空间的起始地址填到“Cmdlist_Address”上;
5th~6th dw followed填的是“Countbuffer_Address”,且仅当“CountBuf_En=1”时才有,对应于函数声明中的“pCountBuffer”;
7th~8th dw followed填的是“Countbuffer_Offset”,且仅当“CountBuf_En=1”时才有,对应于函数声明中的“CountBufferOffset”。
在一个实施例中,为了对绘制命令的处理流程进行说明,下述为一个实施例中绘制命令的处理方法的完整步骤:
首先,本实施例中在对绘制命令进行处理时,是基于图2所示的绘制命令的处理系统实现的,具体的,当命令流解析器接收到了“Execute_Indirect”(间接绘制)命令之后,则可以先对间接绘制命令进行解析,具体的解析步骤可以分为以下4个步骤:
步骤一:根据command header中的“CountBuf_En”是否为1,确定最终需要执行的循环次数(即目标绘制次次数)-“FinalDrawCount”;
若“CountBuf_En=1”,则需要用5th~8th dw followed从外部存储中读取间接绘制次数“IndirectDrawCount”(此处的读请求可以由预解析器进行预解析并发起),读间接绘制次数时使用的具体地址为:ReadAddr_IndirectDrawCount=Countbuffer_Address+Countbuffer_Offset;
其次,预解析器还需要从1st dw followed中读取MaxCommandCount,最后可以通过简单的比较得到最终的绘制次数:FinalDrawCount=min{MaxDrawCount,IndirectDrawCount};
若“CountBuf_En=0”,则可以直接将从1st dw followed中读取的MaxCommandCount确定为最终的绘制次数:FinalDrawCount=MaxDrawCount。
步骤二:根据命令流模板的存放地址“Cmdlist_Address”和总的dw个数“Cmd_List_Dwc”,读取命令流模板到命令流缓存,由于命令流模板的长度“Cmd_List_Dwc”是个变量,而命令流缓存的大小是事先根据统计结果确定的,只能保证能够满足大部分使用场景(在硬件设计中,预留的大小可以为32x256bits),因此,对于“Cmd_List_Dwc”太大而装不下((即超出32x256bits))的命令流模板部分,可以借助外部缓存(即硬件中的L2 cache)存放,后续在使用过程中,对于能够装载进命令流缓存部分的命令流模板,只需要读一次;而对于超出的部分,需要根据FinalDrawCount读多次,每次绘制时都需要读取一次。
步骤三:执行一次绘制,此步骤需要从命令流模板中依次取出每一个绘制命令,具体的,此步骤包括预解析和主解析:
首先,针对预解析:预解析主要是针对需要间接数据的绘制命令,为它们从外部存储单元中读取间接数据,而在这个过程中需要拿到准确的读地址信息。由于软件驱动层在准备命令流模板时,填在每个命令流模板上面的读地址信息是一次绘制时该绘制命令的间接数据在“Argument Buffer”中的地址,因此,若当前的绘制次数“CurrentDrawIdx”>1时,预解析器需要自行计算对应的读地址信息,即:ReadAddr=AddressOnCmd+(CurrentDrawIdx-1)*Argument_Stride。和普通命令一样,预解析器读读回来的间接数据依然存放在命令数据缓存中,供主解析器使用。
主解析:主解析就是根据各绘制命令分别对应的间接数据,依次对每个绘制命令进行解析,从而更新相应的寄存器信息或者解析绘制/调度命令,然后发到后续的相应模块中。
步骤四:判断是否完成所有绘制命令。这里,由于步骤三中的解析分为预解析和主解析两部分,而这两部分可以并行执行,因此对应到步骤四也分为两部分:
预解析器解析进度判断:通过预解析控制器掌握每个间接绘制命令的预解析进度,用以判断是否退出当前的绘制命令的预解析、开始下一个命令。具体的,预解析控制器主要用来判断当前的绘制命令是否预解析完成、以及计算其中每个命令需要的读地址,而具体的命令预解析工作仍然由预解析器完成、预解析读取到的间接数据仍然存储于命令数据缓存中。
主解析器解析进度判断:主解析控制器的主要工作目标就是掌握每个绘制命令的解析进度,用以判断是否退出当前绘制命令的解析、开始下一个命令。具体的,主解析控制器主要用来判断当前的绘制命令是否解析完成,而具体的命令解析工作仍然由主解析器完成、所需要的间接数据从命令数据缓存中读取。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的绘制命令的处理方法的绘制命令的处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个绘制命令的处理装置实施例中的具体限定可以参见上文中对于绘制命令的处理方法的限定,在此不再赘述。
在一个实施例中,如图8所示,提供了一种绘制命令的处理装置,包括:命令读取模块802、第一数据处理模块804、第二数据处理模块806和解析模块808,其中:
命令读取模块802,用于当软件应用产生任务时,从外部存储中读取硬件命令,硬件命令携带标签信息。
第一数据处理模块804,用于若根据标签信息确定硬件命令为间接绘制命令,则对间接绘制命令进行解析,得到与所述间接绘制命令对应的目标绘制次数。
第二数据处理模块806,用于根据间接绘制命令中的模板地址信息和尺寸信息,从外部存储中读取与间接绘制命令关联的命令流模板。
解析模块808,用于按照目标绘制次数对命令流模板进行循环执行,以完成图像绘制。
在其中一个实施例中,第一数据处理模块,还用于当间接绘制命令的次数指针信息为第一标记时,则将最大绘制次数确定为目标绘制次数,间接绘制命令包括次数指针信息和最大绘制次数。
在其中一个实施例中,第一数据处理模块,还用于当间接绘制命令的次数指针信息为第二标记时,则根据指针地址信息确定间接绘制次数;将最大绘制次数和间接绘制次数进行比较,将数值较小的绘制次数作为目标绘制次数,间接绘制命令还包括指针地址信息。
在其中一个实施例中,解析模块,还用于将从外部存储中读取的命令流模板存储至命令流解析器中的命令流缓存区域;通过命令流解析器,并按照目标绘制次数对命令流缓存区域中的命令流模板进行循环执行,以完成图像绘制。
在其中一个实施例中,解析模块,还用于若命令流模板所需的存储空间大于命令流缓存区域的存储空间,则将命令流模板中的一部分存储于命令流缓存区域,另一部分存储于外部缓存中;通过命令流解析器,并按照目标绘制次数对命令流缓存区域和所述外部缓存中的命令流模板进行循环执行,以完成图像绘制。
在其中一个实施例中,解析模块,还用于对命令流模板进行预解析和主解析;其中,在预解析过程中确定当次循环中的目标存储地址,并根据目标存储地址从外部存储中获取间接数据,在主解析过程中基于当次循环所获取的间接数据执行命令流模板中的各绘制命令。
在其中一个实施例中,解析模块,还用于在预解析过程中确定当次循环中与各绘制命令分别对应的目标存储地址;根据各绘制命令分别对应的目标存储地址,依次从外部存储中获取与各绘制命令分别对应的间接数据;在主解析过程中基于当次循环所获取的间接数据执行所述命令流模板中的各绘制命令,包括:在主解析过程中,基于当次循环所获取的与各绘制命令分别对应的间接数据,分别执行所述命令流模板中的各绘制命令,以完成所述命令流模板的执行,命令流模板包括一次绘制时所需的多个绘制命令。
在其中一个实施例中,解析模块,还用于对于首次循环,将与命令流模板中各绘制命令分别对应的起始地址,作为各绘制命令的目标存储地址;对于非首次循环,基于各绘制命令分别对应的起始地址、当前循环次数、以及预设偏移量,确定各绘制命令分别对应的目标存储地址。
上述绘制命令的处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,终端上可以运行有本申请中所涉及到的绘制命令的处理系统,从而完成图像绘制,其内部结构图可以如图9所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种绘制命令的处理方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置。显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述绘制命令的处理方法的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述绘制命令的处理方法的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述绘制命令的处理方法的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (11)

1.一种绘制命令的处理方法,其特征在于,所述方法包括:
当软件应用产生任务时,从外部存储中读取硬件命令,所述硬件命令携带标签信息;
若根据所述标签信息确定所述硬件命令为包括次数指针信息和最大绘制次数的间接绘制命令,则当所述间接绘制命令的次数指针信息为第一标记时,将所述最大绘制次数确定为与所述间接绘制命令对应的目标绘制次数;
根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板;
按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。
2.根据权利要求1所述的方法,其特征在于,所述间接绘制命令还包括指针地址信息;所述方法还包括:
当所述间接绘制命令的次数指针信息为第二标记时,则根据所述指针地址信息确定间接绘制次数;
将所述最大绘制次数和所述间接绘制次数进行比较,将数值较小的绘制次数作为所述目标绘制次数。
3.根据权利要求1所述的方法,其特征在于,所述按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制,包括:
将从所述外部存储中读取的命令流模板存储至命令流解析器中的命令流缓存区域;
通过所述命令流解析器,并按照所述目标绘制次数对所述命令流缓存区域中的命令流模板进行循环执行,以完成图像绘制。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若所述命令流模板所需的存储空间大于所述命令流缓存区域的存储空间,则将所述命令流模板中的一部分存储于所述命令流缓存区域,另一部分存储于外部缓存中;
通过所述命令流解析器,并按照所述目标绘制次数对所述命令流缓存区域和所述外部缓存中的命令流模板进行循环执行,以完成图像绘制。
5.根据权利要求1所述的方法,其特征在于,每次对命令流模板进行执行的步骤包括:
对所述命令流模板进行预解析和主解析;其中,在预解析过程中确定当次循环中的目标存储地址,并根据所述目标存储地址从所述外部存储中获取间接数据,在主解析过程中基于当次循环所获取的间接数据执行所述命令流模板中的各绘制命令。
6.根据权利要求5所述的方法,其特征在于,所述命令流模板包括一次绘制时所需的多个绘制命令,所述在预解析过程中确定当次循环中的目标存储地址,并根据所述目标存储地址从所述外部存储中获取间接数据,包括:
在预解析过程中确定当次循环中与各绘制命令分别对应的目标存储地址;
根据各绘制命令分别对应的目标存储地址,依次从所述外部存储中获取与各绘制命令分别对应的间接数据;
所述在主解析过程中基于当次循环所获取的间接数据执行所述命令流模板中的各绘制命令,包括:
在主解析过程中,基于当次循环所获取的与各绘制命令分别对应的间接数据,分别执行所述命令流模板中的各绘制命令,以完成所述命令流模板的执行。
7.根据权利要求5所述的方法,其特征在于,所述确定当次循环中与各绘制命令分别对应的目标存储地址,包括:
对于首次循环,将与所述命令流模板中各绘制命令分别对应的起始地址,作为各绘制命令的目标存储地址;
对于非首次循环,基于各绘制命令分别对应的起始地址、当前循环次数、以及预设偏移量,确定各绘制命令分别对应的目标存储地址。
8.一种绘制命令的处理装置,其特征在于,所述装置包括:
命令读取模块,用于当软件应用产生任务时,从外部存储中读取硬件命令,所述硬件命令携带标签信息;
第一数据处理模块,用于若根据所述标签信息确定所述硬件命令为包括次数指针信息和最大绘制次数的间接绘制命令,则当所述间接绘制命令的次数指针信息为第一标记时,将所述最大绘制次数确定为与所述间接绘制命令对应的目标绘制次数;
第二数据处理模块,用于根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板;
解析模块,用于按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。
9.一种绘制命令的处理系统,其特征在于,所述处理系统包括命令流解析器和外部存储,所述命令流解析器和所述外部存储通信连接,所述命令流解析器包括寄存器池、命令抓取器、解析器、命令数据缓存以及命令流缓存;
所述寄存器池,用于记录软件应用产生的任务;
所述命令抓取器,用于根据所述寄存器池中记录的软件应用产生的任务,从外部存储中读取硬件命令,并将所述硬件命令存储于所述命令数据缓存中,所述硬件命令携带标签信息;
所述命令流解析器,用于若根据所述标签信息确定所述硬件命令为包括次数指针信息和最大绘制次数的间接绘制命令,则当所述间接绘制命令的次数指针信息为第一标记时,将所述最大绘制次数确定为与所述间接绘制命令对应的目标绘制次数,以及根据所述间接绘制命令中的模板地址信息和尺寸信息,从所述外部存储中读取与所述间接绘制命令关联的命令流模板,并将所述命令流模板存储于所述命令流缓存中,以及用于按照所述目标绘制次数对所述命令流模板进行循环执行,以完成图像绘制。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
CN202211731074.3A 2022-12-30 2022-12-30 绘制命令的处理方法、装置、系统和计算机设备 Active CN115861511B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211731074.3A CN115861511B (zh) 2022-12-30 2022-12-30 绘制命令的处理方法、装置、系统和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211731074.3A CN115861511B (zh) 2022-12-30 2022-12-30 绘制命令的处理方法、装置、系统和计算机设备

Publications (2)

Publication Number Publication Date
CN115861511A CN115861511A (zh) 2023-03-28
CN115861511B true CN115861511B (zh) 2024-02-02

Family

ID=85656478

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211731074.3A Active CN115861511B (zh) 2022-12-30 2022-12-30 绘制命令的处理方法、装置、系统和计算机设备

Country Status (1)

Country Link
CN (1) CN115861511B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1653487A (zh) * 2002-05-10 2005-08-10 比特波伊斯有限责任公司 具有边绘制单元的图形引擎以及合并有该图形引擎的电子装置及存储器
CN103838669A (zh) * 2012-11-26 2014-06-04 辉达公司 用于本地调试图形程序的系统、方法和计算机程序产品
CN109242756A (zh) * 2018-09-07 2019-01-18 上海兆芯集成电路有限公司 计算机系统、图形处理单元及其图形处理方法
CN109389548A (zh) * 2018-10-12 2019-02-26 上海兆芯集成电路有限公司 计算机系统及其绘图处理方法
US10269167B1 (en) * 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
CN111915475A (zh) * 2020-07-10 2020-11-10 长沙景嘉微电子股份有限公司 绘制命令的处理方法、gpu、主机、终端和介质
CN114443189A (zh) * 2021-08-20 2022-05-06 荣耀终端有限公司 一种图像处理方法和电子设备
CN115237599A (zh) * 2022-07-27 2022-10-25 格兰菲智能科技(武汉)有限公司 一种渲染任务处理方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8878833B2 (en) * 2006-08-16 2014-11-04 Barco, Inc. Systems, methods, and apparatus for recording of graphical display
US8427493B2 (en) * 2009-10-13 2013-04-23 Nvidia Corporation Draw commands with built-in begin/end
US10192281B2 (en) * 2016-07-07 2019-01-29 Intel Corporation Graphics command parsing mechanism
US10311542B2 (en) * 2017-03-06 2019-06-04 Thinci, Inc. Node topology employing recirculating ring command and data buffers for executing thread scheduling
US11232531B2 (en) * 2017-08-29 2022-01-25 Intel Corporation Method and apparatus for efficient loop processing in a graphics hardware front end
US10732978B2 (en) * 2018-08-24 2020-08-04 Arm Limited Data processing systems

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1653487A (zh) * 2002-05-10 2005-08-10 比特波伊斯有限责任公司 具有边绘制单元的图形引擎以及合并有该图形引擎的电子装置及存储器
CN103838669A (zh) * 2012-11-26 2014-06-04 辉达公司 用于本地调试图形程序的系统、方法和计算机程序产品
US10269167B1 (en) * 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
CN109242756A (zh) * 2018-09-07 2019-01-18 上海兆芯集成电路有限公司 计算机系统、图形处理单元及其图形处理方法
CN109389548A (zh) * 2018-10-12 2019-02-26 上海兆芯集成电路有限公司 计算机系统及其绘图处理方法
CN111915475A (zh) * 2020-07-10 2020-11-10 长沙景嘉微电子股份有限公司 绘制命令的处理方法、gpu、主机、终端和介质
WO2022007206A1 (zh) * 2020-07-10 2022-01-13 长沙景嘉微电子股份有限公司 绘制命令的处理方法、gpu、主机、终端和介质
CN114443189A (zh) * 2021-08-20 2022-05-06 荣耀终端有限公司 一种图像处理方法和电子设备
CN115237599A (zh) * 2022-07-27 2022-10-25 格兰菲智能科技(武汉)有限公司 一种渲染任务处理方法和装置

Also Published As

Publication number Publication date
CN115861511A (zh) 2023-03-28

Similar Documents

Publication Publication Date Title
JP6008515B2 (ja) グラフィックス処理
US8159491B2 (en) Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus
CN106462393B (zh) 用于统一应用编程接口和模型的系统和方法
US20100214301A1 (en) VGPU: A real time GPU emulator
JP6108670B2 (ja) グラフィックス処理
KR101609079B1 (ko) 그래픽 프로세싱 유닛에서의 명령 선별
JP2006012066A (ja) トレース解析装置およびトレース解析方法
CN112652025B (zh) 图像渲染方法、装置、计算机设备及可读存储介质
CN110223216B (zh) 一种基于并行plb的数据处理方法、装置及计算机存储介质
CN116185743B (zh) OpenGL接口的双显卡对比调试方法、装置及介质
US7268785B1 (en) System and method for interfacing graphics program modules
CN116302103B (zh) 指令编译方法及装置、图形处理单元、存储介质
CN109634611B (zh) 基于OpenGL的移动端三维模型ply文件解析与展示方法
US20200012636A1 (en) System and method for identifying maximal independent sets in parallel
CN115861511B (zh) 绘制命令的处理方法、装置、系统和计算机设备
US10049487B2 (en) Identifying duplicate indices in an input index stream
US9442826B2 (en) Kernel functionality checker
CN115408305B (zh) 一种基于dma重定向的图形渲染方式检测方法
CN109344083A (zh) 一种程序调试方法、装置、设备及可读存储介质
CN111882482B (zh) 图形分块数据读写方法、装置、设备及存储介质
CN111541901B (zh) 图片解码的方法和装置
CN117724987B (zh) 一种基于纹理转换跟踪的OpenGL层次化实现验证方法
CN116883228B (zh) 一种gpu像素填充率测量方法
CN115456858B (zh) 图像处理方法、装置、计算机设备及计算机可读存储介质
US20240013469A1 (en) Programmable pixel blending pipeline, programmable pixel blending method and apparatus, and storage medium

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