CN114237916B - 一种数据处理方法及相关设备 - Google Patents
一种数据处理方法及相关设备 Download PDFInfo
- Publication number
- CN114237916B CN114237916B CN202210171815.0A CN202210171815A CN114237916B CN 114237916 B CN114237916 B CN 114237916B CN 202210171815 A CN202210171815 A CN 202210171815A CN 114237916 B CN114237916 B CN 114237916B
- Authority
- CN
- China
- Prior art keywords
- description
- channel
- resource
- effective
- invalid
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Abstract
本申请实施例公开了一种数据处理方法及相关设备,该数据处理方法包括:获取渲染管线描述;渲染管线描述包括通道描述、资源描述以及通道描述对应的通道与资源描述对应的资源之间的依赖关系;基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据,无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述;根据目标渲染管线描述生成渲染管线,输出渲染管线。通过本申请实施例,可以精简渲染管线描述,进而简化渲染管线的构建,避免资源浪费。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法、一种数据处理装置、一种计算机设备、一种计算机可读存储介质。
背景技术
随着计算机图形技术的迅速发展,图像渲染技术越来越成熟,尤其是借助于图形API(Application Programming Interface,应用程序接口)的发展,传统图形API中支持的固定功能的渲染流水线(或者说固定渲染管线)已经不再能够满足人们对高品质画面的追求。
新一代图形API的出现为需要渲染图形的应用程序的开发者提供了可编程渲染管线的框架,通过该框架可以使得应用程序的开发者根据提供的图形API来创建自定义的渲染管线,开发者可以通过定制的代码来控制某个阶段的操作,从而实现特定场景下的定制化渲染,然而定制渲染管线是人为参与的渲染管线构建,对于硬件来说可能并不是最优的渲染管线,可能会存在资源浪费的问题,因此有必要对定制渲染管线进行优化处理来避免这一问题。
发明内容
本申请实施例提供一种数据处理方法及相关设备,可以精简渲染管线描述,进而简化渲染管线的构建,避免资源浪费。
一方面,本申请实施例提供了一种数据处理方法,包括:
获取渲染管线描述;渲染管线描述包括通道描述、资源描述以及通道描述对应的通道与资源描述对应的资源之间的依赖关系;
基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据,无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;
将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述;
根据目标渲染管线描述生成渲染管线,输出渲染管线。
一方面,本申请实施例提供了一种数据处理装置,包括:
获取模块,用于获取渲染管线描述;渲染管线描述包括通道描述、资源描述以及通道描述对应的通道与资源描述对应的资源之间的依赖关系;
确定模块,用于基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据,无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;
剔除模块,用于将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述;
生成模块,用于根据目标渲染管线描述生成渲染管线,输出渲染管线。
在一个实施例中,获取模块,具体用于:获取原始渲染管线描述,原始渲染管线描述包括原始通道描述、原始资源描述,以及原始通道描述对应的原始通道和原始资源描述对应的原始资源之间的依赖关系,原始通道描述包括渲染通道描述,渲染通道描述包括多个子通道描述;基于原始通道和原始资源之间的依赖关系,确定原始资源描述中的子资源描述;基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,对原始渲染管线描述进行依赖分析处理,确定无效原始描述数据,无效原始描述数据包括无效子通道描述以及无效子资源描述中的任一种或两种;将无效原始描述数据从多个子通道描述和原始资源描述中剔除,得到通道描述和资源描述;根据无效原始描述数据,调整原始通道和原始资源之间的依赖关系,得到通道与资源之间的依赖关系。
在一个实施例中,当无效原始描述数据包括无效子通道描述以及无效子资源描述时,确定模块,具体用于:基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,确定多个子通道之间的依赖关系;根据多个子通道之间的依赖关系确定渲染通道描述中的无效子通道描述,并依据无效子通道和子资源之间的依赖关系确定无效子资源描述。
在一个实施例中,剔除模块,具体用于:若多个子通道描述存在至少一个有效子通道描述,则将渲染通道描述中的无效子通道描述进行剔除,并将无效子通道描述剔除后的渲染通道描述和其余原始通道描述均作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
在一个实施例中,剔除模块,具体用于:若多个子通道描述均是无效子通道描述,则将原始渲染管线描述中除渲染通道描述以外的其余原始通道描述作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
在一个实施例中,确定模块,还用于:若有效子资源描述对应的有效子资源与除渲染通道以外的原始通道之间不存在依赖关系,则确定有效子资源描述为无内存分配资源描述,并为无内存分配资源描述对应的无内存分配资源分配存储指示信息,存储指示信息用于指示将有效子资源存储于片上内存中。
在一个实施例中,目标渲染管线描述包括有效通道描述和有效资源描述,有效资源描述包括有效资源在有效通道内的使用状态;生成模块,具体用于:根据有效资源在有效通道内的使用状态,生成有效通道对应的资源屏障,基于有效资源描述和资源屏障创建有效资源;基于有效通道描述创建有效通道,将资源屏障、有效资源和有效通道排布为渲染管线。
在一个实施例中,生成模块,还用于:编译有效通道和有效资源,得到渲染命令;将资源屏障和渲染命令录入命令队列;命令队列用于提交至图形处理器,以使得图形处理器基于渲染命令渲染图形。
在一个实施例中,有效通道描述包含有效生产通道描述和有效消费通道描述,有效消费通道描述对应的有效消费通道包括第一消费通道和第二消费通道,有效消费通道消费有效生产通道描述对应的有效生产通道生产的有效资源;生成模块,还用于:获取有效资源在第一消费通道以及第二消费通道的使用状态;若有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件,则对有效资源的使用状态进行合并处理,得到合并状态;为有效生产通道和第一消费通道生成包含合并状态的资源屏障,有效资源在第一消费通道和第二消费通道中的使用状态均由资源屏障指示。
在一个实施例中,生成模块,具体用于:若有效资源在第一消费通道和第二消费通道的使用状态相同,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件;将有效资源在第一消费通道或者第二消费通道的使用状态确定为合并状态。
在一个实施例中,生成模块,具体还用于:若有效资源在第一消费通道和第二消费通道的使用状态为设定使用状态集中的不同使用状态,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件;有效资源的合并状态对应的使用方法包括有效资源在第一消费通道的使用状态对应的使用方法,以及有效资源在第二消费通道的使用状态对应的使用方法。
在一个实施例中,确定模块,还用于:若有效资源描述对应的有效资源与除生产有效资源的有效通道之外的任一有效通道之间不存在依赖关系,则确定有效资源描述为冗余资源描述;输出针对冗余资源描述的提示信息,提示信息用于提示修改原始渲染管线描述。
在一个实施例中,生成模块,具体用于:基于资源屏障,确定有效资源在渲染生命周期中的使用状态集合,获取使用状态集合对应的目标使用方法集合;根据有效资源描述创建有效资源,并将有效资源的使用方法设置为目标使用方法集合。
在一个实施例中,通道描述对应的通道数量为多个,当无效描述数据包括无效通道描述和无效资源描述时,确定模块,具体用于:基于通道和资源之间的依赖关系获取多个通道之间的依赖关系;根据多个通道之间的依赖关系确定无效通道描述,并依据无效通道描述对应的无效通道和资源之间的依赖关系确定无效资源描述。
在一个实施例中,通道与资源之间的依赖关系通过资源描述的标记信息指示;标记信息包括读标记和写标记;确定模块,具体用于:若资源描述的读标记指示从第一通道中读取资源,资源描述的写标记指示将资源写入第二通道,则确定第一通道和第二通道之间存在依赖关系。
在一个实施例中,确定模块,具体用于:根据通道和资源之间的依赖关系,生成资源流向图,资源流向图的节点对应资源描述和通道描述;以结束通道描述对应的节点为起点,对资源流向图进行遍历;若存在未被遍历的节点,则将未被遍历的节点对应的通道描述确定为无效通道描述。
一方面,本申请实施例提供了一种计算机设备,包括:处理器和存储器;存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行本申请实施例中的数据处理方法。
相应地,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时,执行本申请实施例中的数据处理方法。
相应地,本申请实施例提供了一种计算机程序产品,计算机程序产品包括计算机程序或计算机指令,计算机程序或计算机指令被处理器执行时实现本申请实施例的数据处理方法的步骤。
在本申请实施例中,通过渲染管线描述对渲染管线的构建进行预先布局,基于通道和资源之间的依赖关系,将无效描述数据(包括无效资源描述和无效通道描述)确定出来并从渲染管线描述中剔除,优化渲染管线描述,进而生成对硬件友好的渲染管线。在这个过程中,通过剔除无效描述数据,可以避免渲染管线描述中存在不必要的描述数据,大大简化了渲染管线描述,进而生成简化的渲染管线,实现对渲染管线定制过程的简化,节约渲染过程中所需的计算资源。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的一种数据处理系统的架构图;
图2是本申请一个示例性实施例提供的一种数据处理方法的流程示意图;
图3a是本申请一个示例性实施例提供的一种资源流向图;
图3b是本申请一个示例性实施例提供的另一种资源流向图;
图4是本申请一个示例性实施例提供的一种渲染管线描述获取方法的流程示意图;
图5是本申请一个示例性实施例提供的一种延迟着色过程的示意图;
图6是本申请一个示例性实施例提供的另一种数据处理方法的流程示意图;
图7a是本申请一个示例性实施例提供的一种包含冗余资源描述的资源流向图;
图7b是本申请一个示例性实施例提供的一种通道间资源屏障的示意图;
图7c是本申请一个示例性实施例提供的一种在两个不同平台下资源的状态转换的示意图;
图8是本申请一个示例性实施例提供的一种简化渲染管线描述的整体执行流程图;
图9是本申请一个示例性实施例提供的一种数据处理装置的结构示意图;
图10是本申请一个示例性实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了更好地理解本申请实施例的方案,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。
GPU:Graphics Processing Unit,图形处理器,GPU精于简单且重复的运算,且可以大量并发的执行运算。
图形API:图形应用程序接口(Application Programming Interface,API)是针对GPU 的图形库,可以实现图形的底层渲染。例如游戏开发中对游戏场景/游戏任务的渲染、地图引擎中对地图上的数据渲染,动画中对动画的绘制等等。
图形API可以划分为传统图形API和新一代图形API,传统图形API诸如有OpenGL(Open Graphics Library,开放图形库)、D3D11等;新一代图形API(或者说现代图形API)诸如有D3D12、Metal、Vulkan等。在传统的渲染架构下,资源的创建以及渲染命令的提交都是立即发生的,在传统图形API上,这种模式是简单易用的,而在新一代图形API中这种模式不能得到有效使用,因为新一代图形API需要主动管理资源依赖关系,主动进行多线程命令提交。逻辑上后提交的命令可能在时间上先录入命令列表Command List,逻辑上先提交的命令可能在时间上后录入Command List。
渲染管线:又称为渲染流水线,指的是一帧中所有的渲染过程是如何去组织的。使用图形API可以自定义渲染管线,例如Unity3D引擎集成的一套定制渲染过程的框架SRP(Scriptable Render Pipeline,可编程渲染管线),又例如虚幻引擎(Unreal Engine)的一套实验性的渲染过程描述框架RDG(Render Dependency Graph,渲染依赖图表),均可以支持对渲染管线的自主设计。
Render Pass:渲染通道或者渲染过程,一组GPU渲染子过程SubPass的集合,对应使用一个帧缓冲Framebuffer。
SubPass:一个Render Pass中的子渲染过程,或称为子通道,通常表示游戏中一类物体的渲染。
Framebuffer:帧缓冲区,一组GPU渲染目标的集合,是所有绘制操作的最终目标。通常包括颜色缓冲、深度缓冲和累积缓冲。
MSAA :Multi-sample anti-aliasing,多重采样抗锯齿,通过对每个像素中的多个位置进行采样,并将这些样本合并以生成最终像素,可以解决空间锯齿问题。
RED:Rendering Execution Descriptor,渲染执行描述符或渲染执行描述。是本申请实施例提供的一种基于延迟模式的渲染框架,在组织渲染过程的时候不会立刻执行资源创建操作和渲染命令提交操作,而是对渲染管线描述进行分析优化之后再进行资源的创建和渲染命令的提交。
Resource:包括纹理Texture和缓冲Buffer。Texture资源包括多个子资源Subresource,一个Subresource指的是Texture中一个特定的Plane(镜面)中一个特定的Array Slice(数组切片)中的一个特定的Mip Level(贴图)。对于Buffer资源来说只有一个Subresource,就是指一整个Buffer。
Target Resource:包括Color Target(颜色目标)、Depth Target(深度目标)、Stencil Target(蒙板目标)和Resolve Target(解析目标),为执行一个RenderPass时绑定到Framebuffer中的资源。RenderPass中有两个特殊的SubPass,分别为Begin SubPass和End SubPass,其中Begin SubPass负责导入Target Resource(目标资源),End SubPass负责导出Target Resource和进行MSAA Resolve操作。
ResourceBarrier:插入在两个Pass之间,用于指定资源依赖关系的指令。
Tile Memory:一种快速访问的缓存,独立于Global Memory之外,对应渲染目标中的一小块。
Compute Pass:一个GPU通用计算过程,可以称为计算通道。
Copy Pass:一个GPU数据拷贝过程,可以称为拷贝通道。
Command List:存储渲染命令的列表。
基于上述术语及概念,下面将结合附图,对本申请实施例提供的数据处理系统的架构进行介绍。
请参见图1,图1是本申请一个示例性实施例提供的一种数据处理场景的示意图。如图1所示,该架构图可以包括数据处理设备100及数据库101。数据处理设备可以和数据库101通过有线或无线的方式建立通信连接,并和数据库进行数据交互。其中,数据库101可以是数据处理设备100的本地数据库,也可以是数据处理设备100可以访问的云端数据库等,该数据处理设备100可以设置于服务器或者终端等计算机设备中。
其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器,在此不做限制。终端可以是智能手机、平板电脑、智能可穿戴设备、智能语音交互设备、智能家电、台式电脑、车载终端等等设备,在此不做限制。
数据处理设备100可以获取渲染管线描述,并基于渲染管线描述中包含的通道和资源之间的依赖关系,分析出无效描述数据,之后将无效描述数据从渲染管线中剔除,进而得到简化后的目标渲染管线描述,生成对应的渲染管线。可选地,简化后的目标渲染管线描述还可以进一步优化,具体地,可以按照预设的规则检测目标渲染管线描述是否存在冗余描述数据,例如冗余资源描述,当存在冗余资源描述时,可以输出提示信息提醒开发者修改编写的渲染管线描述以改变通道与资源的引用关系。还可以检测资源描述对应的资源是否为无内存分配资源,进而为其生成存储指示信息,在创建出对应的物理资源之后按照该存储指示信息进行内存分配,优化内存使用。
在一个实施例中,渲染管线描述可能不是开发者编写的原始渲染管线描述,而是经过初步简化处理的渲染管线描述。具体地,可以获取原始渲染管线描述,该原始渲染管线描述是从用户角度定义的渲染管线描述,按照和无效描述数据类似的逻辑,可以基于原始渲染管线描述中包含的子通道和子资源之间的依赖关系,筛选出无效原始描述数据(可以理解为无效子通道描述,和/或无效子资源描述),并将其从原始渲染管线描述中剔除,进而得到渲染管线描述。
基于目标渲染管线描述包含的各种描述数据(包括有效资源、有效通道)可以创建对应的资源、通道以及资源屏障,进而将其排布为渲染管线,通过编译渲染管线(即创建出来的有效资源和有效通道)可以得到渲染命令,生成资源屏障,整个渲染过程的渲染命令集合和资源屏障可以加入一个命令队列中,并提交至图形处理器,图形处理器可以从命令队列中提取渲染命令并执行该渲染命令,实现图形渲染。
数据库101可以存储资源在各个通道中的使用状态以及在整个渲染过程的生命周期内的使用方法,在创建实际的物理资源的时候可以从数据库中获取资源的用法,从而创建出物理资源。
本申请提供的数据处理系统,通过资源和通道之间的依赖关系,可以将渲染通道描述中的无效描述数据确定出来,由于这些无效描述数据创建出来对渲染结果几乎没有影响,因此可以将其从渲染管线描述中剔除,进而避免基于渲染管线描述创建无用资源和无用通道的过程,简化渲染管线,还可以根据简化后的渲染管线提高图形渲染效率。
下面结合附图,对本申请实施例提出的数据处理方法的具体实现方式进行详细阐述。
请参见图2,图2是本申请一个示例性实施例提供的一种数据处理方法的流程示意图。该方法可以由计算机设备(例如图1所示的数据处理设备101)执行。其中,该数据处理方法包括但不限于以下步骤。
S201,获取渲染管线描述。
由于渲染任何物体都需要明确形状、何处、何时以及使用什么设置等内容,具体内容的复杂度也取决于物体涉及到的效果,例如光源、阴影、图像效果等,这些往往都需要正确地的顺序处理来得到最终的图像,此过程被称为渲染管线。具体可以通过渲染管线描述来明确物体渲染所需的资源以及过程,从而基于渲染管线描述创建实际的渲染管线,实现图形渲染。
渲染管线描述可以是开发者定义的原始渲染管线描述,也可以是对原始渲染管线描述进行初步处理之后得到的渲染管线描述,后者的具体处理过程可以参见下述图4对应实施例的介绍,在此先不做详述。
本申请实施例中,渲染管线描述包括通道描述、资源描述以及通道描述对应的通道与资源描述对应的资源之间的依赖关系。其中,通道描述是指对通道(Pass)的描述,具体声明了通道所有要使用的资源(即消费/生产何种资源)以及如何使用资源,具体来说,通过声明通道在渲染管线中的绑定点、颜色资源附件的个数和引用等表明通道所有要使用的资源(即消费/生产何种资源)以及如何使用资源。这里的通道可以理解为一个步骤,或者一个过程,或者一个阶段,或者一个流程。不同类型的通道有不同的功能,例如几何通道GPass可以生成GBuffer数据,光照通道LightingPass利用GBuffer数据可以执行光照计算,例如计算开启阴影光源的阴影图、计算每个灯光对屏幕空间像素的贡献量并累计到屏幕颜色(scene color)中等等。
资源描述是指对资源(resource)的描述,声明了资源在通道中的使用状态、资源布局、接口、协议、资源的读/写标记等等。其中,资源可以向渲染管线提供数据,并定义要在场景中渲染的内容实体。资源可以划分为纹理(texture)资源和缓冲区(buffer)资源,缓冲区资源用于存储属性数据信息,包含用于描述几何图形、索引集合信息和着色器常量的数据等,例如顶点坐标、纹理坐标、关联颜色等,纹理资源是用于存储纹素的数据的结构化集合,纹素是由渲染管线读取的或可写入的纹理的最小单位。
上述资源描述和通道描述都是未实例化的资源和通道,并没有实际创建出来,可以视为资源和通道都是虚拟的。基于通道描述或者资源描述可以得到通道和资源之间的依赖关系,这里的依赖关系是指通道如何引用资源,具体包括资源被通道作为生产者引用(即资源由通道生产)或者是资源被通道作为消费者引用(即资源被通道消费)。也就是说,不论是通道消费资源或者通道生产资源,都视为通道和资源之间存在依赖关系。基于通道和资源之间的依赖关系可以对渲染管线进一步分析,以实现对渲染管线的简化,具体可参见下述步骤S202。
需要说明的是,渲染管线描述可以是在渲染框架RED下定义的,该渲染框架可以搭载于一些图形API中,例如游戏引擎中的NGI(Cross Native Graphics Interface,跨原生图形接口),因此上述资源描述可以认为是REDResource,根据该资源描述创建出来的实际的物理资源可以称为NGI资源。
S202,基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据。
通道和资源之间的依赖关系是指通道消费资源或通道生产资源,无效描述数据是指渲染管线描述中对图形的渲染结果没有任何作用的描述数据。无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种。其中,无效通道描述可以是无用的RenderPass/ComputePass/CopyPass中的任一种,无效资源描述可以是与无效通道描述存在依赖关系的资源,通过本申请对无效描述数据的识别,无效通道描述对应的通道以及无效资源描述对应的资源均不会被实际创建出来。
在一个实施例中,通道描述对应的通道数量为多个,当无效描述数据包括无效通道描述和无效资源描述时,S202具体包括以下子步骤S2021和S2022:
S2021:基于通道和资源之间的依赖关系获取多个通道之间的依赖关系。
在一种实施方式中,通道和资源之间的依赖关系通过资源描述的标记信息指示,该标记信息包括读标记和写标记。该标记信息是由渲染框架(例如RED)中每个通道对每个引用的资源所做的标记,可以包含在资源描述中。多个通道之间的依赖关系可以利用标记信息确定:若资源描述的读标记指示从第一通道中读取资源,资源描述的写标记指示将资源写入第二通道,则确定第一通道和第二通道之间存在依赖关系。
读标记意味着该Pass会读该资源被之前Pass生产的版本,通过读标记可以知晓生产该资源的Pass。写标记意味着该Pass会写入该资源内容供后面Pass消费,通过写标记可以得知消费该资源的Pass。综合资源描述的读标记指示该资源是由第一通道生产的以及资源描述的写标记指示该资源由第二通道消费,可以得到第二通道消费的资源是由第一通道生产的,也即,通过这些标记可以得到每个Pass中消费的资源是从哪个Pass生产的,这样两个Pass之间就建立了依赖关系。
需要说明的是,在渲染框架RED中,RED中包括两个特殊的Pass,分别是BeginPass(起始通道)和EndPass(结束通道),其中BeginPass负责导入所有的External Resource(外部资源),是所有External Resource的初始生产者,且如果一个Pass没有其他的依赖,则依赖BeginPass,EndPass负责导出External Resource,是External Resource的最后消费者。如果一个Pass没有消费任何资源,则该Pass会隐式依赖Begin Pass(起始通道)。针对渲染管线描述中包含的通道描述对应的通道以及资源描述对应的资源,均可以按照上述的逻辑确定出任意两个Pass之间依赖关系,进而得到渲染管线描述中对应的所有通道之间的依赖关系。
S2022:根据多个通道之间的依赖关系确定无效通道描述,并依据无效通道描述对应的无效通道和资源之间的依赖关系确定无效资源描述。
在得到通道之间的依赖关系之后,可以进一步确定无效通道描述,进而确定无效资源描述。在一种实施方式中,确定无效通道描述的实现方式可以包括:
①根据通道和资源之间的依赖关系,生成资源流向图,该资源流向图的节点对应资源描述和通道描述;②以结束通道描述对应的节点为起点,对资源流向图进行遍历;③若存在未被遍历的节点,则将未被遍历的节点对应的通道描述确定为无效通道描述。
由于通道和资源之间的依赖关系可以指示某个通道消费的资源具体由哪个通道产生,根据这样的依赖关系可以构建出资源流向图。资源流向图中的节点对应为资源描述或者通道描述。在具体查找无效通道描述的过程中,从结束通道(EndPass)描述开始往资源流向的反方向开始遍历,得到所有依赖的节点,而未被遍历到的节点对应的通道描述为无效通道描述。
示例性地,如图3a所示的资源流向图,包括多个通道对应的通道描述以及资源描述,以及通过有向箭头表示的资源和通道之间的依赖关系。为便于说明,在图3a示出的通道和资源并未实际创建,而是分别以通道描述和资源描述来反映的,因此该资源流向图可以视为虚拟的渲染管线,进一步基于该虚拟的渲染管线进行分析,通道描述对应的通道包括为起始通道(BeginPass)、生产通道(ProducerPass)、消费通道(ConsumerPass)、虚拟通道(DummyPass)以及结束通道(EndPass),资源描述对应的资源包括外部资源0(externalResource version 0)、外部资源1(externalResource version 1)以及临时资源(tempResource)。由图3a可知,BeginPass负责导入externalResource;ProducerPass负责生产tempResource,由于它没有任何依赖的资源(此处为消费的资源),则隐式依赖BeginPass;ConsumerPass负责消费tempResource并生产externalResource;DummyPass负责消费externalResource和tempResource;EndPass负责导出externalResource。由此,可以得出通道之间的依赖关系,即:EndPass依赖于ConsumerPass;ConsumerPass依赖于ProducerPass;ProducerPass依赖于BeginPass;DummyPass依赖于BeginPass和ProducerPass。在这里只有DummyPass不会从EndPass开始根据依赖关系找到,更一般地,无论DummyPass是否存在于该渲染管线中,均不会影响EndPass输出的渲染结果,因此DummyPass为无效通道,渲染管线描述中对应的通道描述为无效通道描述。
在一种实施方式中,当资源描述指示对应的资源没有被任何通道引用时,该资源描述为无效资源描述,对应的资源也可以称为彻底无效资源,不会被实际创建出来;在另一种实施方式中,无效通道所引用的资源对应的资源描述在满足一定条件时,也会被视为无效资源描述。具体地,当该资源描述指示对应的资源没有被除无效通道之外的任何通道引用时,该资源描述为无效资源描述,对应的资源也不会被实际创建出来。
如图3b所示的另一种资源流向图,虚拟通道DummyPass所引用的资源还包括虚拟资源dummyResource,其余内容和图3a相同。而在整个渲染过程中,根据通道和资源之间的依赖关系对图3a的依赖分析,DummyPass在依赖关系遍历中被视为无效通道,而其引用的dummyResource又没有被其他通道消费,因此该虚拟资源是无效资源,对应的资源描述为无效资源描述,dummyResource不会被创建出来。
此外,渲染管线描述可以包括渲染通道描述、计算通道描述和拷贝通道描述,渲染通道描述是剔除了无效子通道描述之后的渲染通道描述。因此,此步骤中,确定出来的无效描述数据所包含的无效通道描述具体涉及无效渲染通道描述、无效计算通道描述以及无效拷贝通道描述中的一种或多种,后续剔除无效通道描述可以基于这一种或多种类别的通道描述进行剔除。
S203,将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述。
当无效描述数据中包括的无效通道描述被剔除时,对应的无效通道对资源的引用也会一并去掉,对应为无效资源描述。例如图3b中的DummyPass由于在依赖关系遍历中被视为无效通道,对应的无效通道描述会被剔除,那么其引用的资源dummyResource没有被其他通道引用,对应的资源描述也会一并剔除而不会创建出实际的资源。剔除了无效描述数据之后的渲染管线描述即为目标渲染管线描述,需要说明的是,如果无效描述数据只包括无效通道描述或无效资源描述,渲染管线描述中剔除该无效通道描述或无效资源描述后剩余的资源描述和通道描述构成目标渲染管线,如果无效描述数据为空,即渲染管线描述中不存在无效描述数据,那么目标渲染管线描述即等价于渲染管线描述。
目标渲染管线描述包含的通道描述和资源描述均是有效的,在此可以分别称为有效通道描述和有效资源描述。但是在目标渲染管线中可能还存在冗余描述数据,例如资源描述对应的资源被生产出来但未被使用,此时不会剔除这些未被消费的资源,因为剔除之后可能会使得依赖这些资源的通道出错,由此后续还可以对这些数据进行优化,例如输出提示信息来提示用户修改原始的资源引用关系,进行更进一步的优化,进而得到渲染图形必要的通道和资源分别对应的描述数据,以及通道和资源之间的引用关系。
S204,根据目标渲染管线描述生成渲染管线,输出渲染管线。
基于目标渲染管线描述包含的有效通道描述和有效资源描述可以创建有效通道和有效资源,即实例化通道和物理资源,这些实例化通道和物理资源可以按照各自的依赖关系构建出渲染管线并输出,之后由CPU和GPU按照渲染管线中包含的处理流程、所需资源等合力渲染图形。对于创建物理资源和实例化通道等可以借助图形API,例如基于跨图形原生接口NGI来创建的物理资源,也可以称为NGI资源。
通过本申请实施例提供的数据处理方案,在开发渲染管线的过程中,可以根据通道和资源之间的依赖关系将通道之间的依赖关系确定出来,并基于通道之间的依赖关系确定无效通道描述,依据通道和资源之间的依赖关系确定与无效通道描述相关的无效资源描述,将这些无效描述数据从渲染管线描述中自动剔除,过滤没有用到的通道描述和资源描述,精简渲染管线描述,从而简化了渲染管线的构建,避免生成渲染管线的资源浪费。
由于渲染管线描述可以包括渲染通道RenderPass描述,对应的渲染通道包括的子通道也是属于渲染管线的一部分,为了更好地对渲染管线进行精简,在对检测是否存在无效通道描述之前,可以对编写的原始渲染通道描述中的渲染通道描述包含的子通道描述是否为渲染图形的必要处理流程描述进行检测,进而得到渲染管线描述,针对渲染管线描述再进一步执行无效通道描述的检测。
请参见图4,图4是本申请一个示例性实施例提供的一种获取渲染管线描述的流程示意图。该方法可以由计算机设备(例如图1所示的数据处理设备101)执行。其中,该数据处理方法包括但不限于以下步骤。
S401,获取原始渲染管线描述。
原始渲染管线描述是开发者自定义的渲染管线描述,包括定制渲染管线最原始的描述数据,没有经过任何自动地删减或增加或修改。原始渲染管线描述包括原始通道描述、原始资源描述,以及原始通道描述对应的原始通道和原始资源描述对应的原始资源之间的依赖关系。原始通道描述是对原始通道的描述,包括原始通道引用何种资源以及如何使用(例如read、write、create),原始资源描述是对原始资源的描述,例如原始资源在原始通道中的使用状态,原始通道和原始资源之间的依赖关系描述了原始通道如何引用原始资源,更具体的内容可以参考图2对应实施例对资源描述、通道描述、资源和通道之间的依赖关系的介绍。
原始通道描述包括渲染通道描述,渲染通道描述包括多个子通道描述。渲染通道描述是对渲染通道RenderPass的描述,包括但不限于渲染通道包含多少子通道SubPass、渲染通道的具体功能,例如延迟着色或者延迟光照(具体可以由子通道描述构成)。渲染通道中包含一个或多个子通道,每个子通道对应准备有子通道描述,子通道描述可以描述如何使用颜色附件等图像资源、子通道在流水线中的绑定点、颜色资源附件的个数和指针引用等。
S402,基于原始通道和原始资源之间的依赖关系,确定原始资源描述中的子资源描述。
基于原始通道和原始资源之间的依赖关系可以确定原始通道生产或消费的原始资源,具体可以确定与渲染通道存在依赖关系的原始资源,由于一个渲染通道中会包含一个或多个子通道,一个计算通道或一个拷贝通道则不包含任何子通道,因此,原始资源中仅被子通道引用的资源可以称为子资源,也即仅被渲染通道消费或生产的原始资源可以作为子资源,对应的描述称为子资源描述。本申请中原始资源描述中指示仅被子通道生产或消费的资源所对应的描述即子资源描述。由于渲染通道中包含的特殊SubPass,分别为BeginSubPass和End SubPass,可以分别负责导入目标资源和导出目标资源,对应的子资源描述可以包括目标资源描述和非目标资源描述。
S403,基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,对原始渲染管线描述进行依赖分析处理,确定无效原始描述数据。
基于多个子通道和子资源之间的依赖关系对原始渲染管线描述的依赖分析处理,具体是对渲染通道描述包含的子通道描述的依赖分析。可以根据子通道之间的依赖关系,确定无效原始描述数据,该无效原始描述数据包括无效子通道描述以及无效子资源描述中的任一种或两种。
在一个实施例中,当无效原始描述数据包括无效子通道描述以及无效子资源描述时,确定无效原始描述数据的步骤可以包括:
S4031、基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,确定多个子通道之间的依赖关系;S4032、根据多个子通道之间的依赖关系确定渲染通道描述中的无效子通道描述,并依据无效子通道和子资源之间的依赖关系确定无效子资源描述。
子通道和子资源之间的依赖关系指示了子通道如何引用子资源,包括子通道消费子资源或者子通道生成子资源。根据子通道和子资源之间的依赖关系,确定出子通道之间的依赖关系,即哪个子通道消费另一个子通道生产的子资源,进而确定出无效子通道描述。具体地,可以基于子通道之间的依赖关系构建资源流向子图,在该资源流向子图中包含子通道描述和子资源描述。采用和资源流向图相同的分析方式,将其中未被遍历到的子通道描述确定为无效子通道描述,进一步地,无效子资源描述指示该子资源仅被无效子通道引用。
前述确定无效子通道描述考虑了与渲染通道有关的所有资源,而一个渲染通道Render Pass中也包含Begin Pass和End Pass两个SubPass,分别负责Render Pass所需的目标资源(TargetResource)的导入和导出。在一个实施例中,还可以只考虑TargetResource(ColorTarget/DepthTarget/StencilTarget/ResolveTarget)和子通道之间的依赖关系,来确定出无效子通道描述和无效子资源描述,而非TargetResource和子通道之间的依赖关系则不在考虑范围之内,从而能够更加快速地分析出无效原始描述数据,包括无效子通道描述和无效子资源描述,提高依赖分析的处理效率。
具体来说,根据目标资源和子通道之间的依赖关系确定出的无效子资源描述和/或无效子通道描述均是与目标资源相关的描述数据。其中,无效子资源描述是从目标资源描述中确定的无效目标资源描述,对于无效子资源描述的剔除,具体是从目标资源描述中剔除的,而非目标资源描述则保留在原始渲染管线描述中;同样地,无效子通道描述是与目标资源相关的子通道描述,对于无效子通道描述的剔除对应是剔除与目标资源相关的无效子通道描述,而未引用目标资源的子通道对应的子通道描述则保留在原始渲染管线描述中。
剔除这些无用的描述数据之后,得到的渲染管线描述是包含有效子通道描述和有效子资源描述的。有效子资源描述是所有子资源描述中除无效子资源描述之外的子资源描述,有效子通道描述是所有子通道描述中除无效子通道描述之外的子通道描述。换而言之,渲染管线描述是剔除了无效子通道描述和无效子资源描述后的原始渲染管线描述。
需要说明的是,为了进一步提高数据处理的效率,在基于原始渲染管线描述确定无效子通道描述和无效子资源描述的同时,也可以确定无效原始通道描述和无效原始资源描述,这里的无效原始通道描述和无效原始资源描述可以作为无效通道描述和无效资源描述。若为了保证数据剔除的有序性以及减少无用资源的判断,无效子通道描述剔除会先于无效通道描述被剔除,对应还未创建的通道上,即SubPass先于RenderPass/ComputePass/CopyPass剔除,因此在之后的剔除处理中,如果一个无效子通道描述被剔除了,该无效子通道描述对应的子通道使用的非TargetResource就不会被加入到对应的RenderPass中,这样不仅可以极大地减轻确定无效资源描述的工作量,提高处理效率,还可以避免渲染图形的过程处理非目标资源,提高计算效能。
S404,将无效原始描述数据从多个子通道描述和原始资源描述中剔除,得到通道描述和资源描述。
将无效原始描述数据包含的无效子通道描述与无效子资源描述中的一种或两种从原始渲染管线描述中剔除,具体是从原始资源描述和渲染通道描述包含的多个子通道描述中剔除,剔除后剩余的描述数据即可作为渲染管线描述中的包含通道描述和资源描述。当无效原始描述数据包括无效子通道描述以及无效子资源描述时,具体有如下两种情况得到通道描述和资源描述:
方式一:若多个子通道描述存在至少一个有效子通道描述,则将渲染通道描述中的无效子通道描述进行剔除,并将无效子通道描述剔除后的渲染通道描述和其余原始通道描述均作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
也即,在无效原始描述数据包含的无效子通道描述覆盖某个渲染通道描述中的部分子通道描述时,可以将这些无效子通道描述从渲染通道描述中剔除,将剔除了子通道描述后的渲染通道描述和除该渲染通道描述之外的其他原始通道描述作为通道描述。而剔除无效子资源描述之后剩余的其他原始资源描述即可以作为资源描述。
方式二:若多个子通道描述均是无效子通道描述,则将原始渲染管线描述中除渲染通道描述以外的其余原始通道描述作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
也即,在无效原始描述数据包含的无效子通道描述覆盖渲染通道描述中的所有子通道描述时,该渲染通道描述也是无效原始通道描述,除该渲染通道描述之外的原始通道描述均可以作为通道描述。同方式一,剔除无效子资源描述后的其余原始资源描述均可以作为资源描述。在此需要注意的是,此方式下剔除的渲染通道描述是所有子通道都无效的渲染通道对应的渲染通道描述。
需要说明的是,由于原始渲染管线描述中可能包含多个渲染通道对应的渲染通道描述,针对原始渲染管线描述中包含的每一个渲染通道描述,均可以采用方式一或者方式二来得到相应的资源描述和通道描述。在任一种方式下,其余原始通道描述可以包含计算通道描述和拷贝通道描述中的一种或多种。另外,在无效子通道描述为空,即原始渲染管线描述中不存在无效子通道描述时,可以将所有原始通道描述均作为通道描述,当无效子资源描述为空时,同理,可以将所有原始资源描述均作为资源描述。
S405,根据无效原始描述数据,调整原始通道和原始资源之间的依赖关系,得到通道与资源之间的依赖关系。
当原始渲染管线描述中存在一部分无效原始描述数据时,由于剔除了无效原始描述数据,原始通道和原始资源之间的依赖关系可能会发生变化,例如渲染通道描述包含的所有子通道描述均是无效子通道描述,那么该渲染通道描述也是无效的,这样渲染通道与其使用的原始资源之间的依赖关系、以及其他原始通道依赖渲染通道的关系也会消失。
需要说明的是,当无效描述数据为空,如原始渲染管线描述中不存在无效子通道描述和无效子资源描述时,原始渲染管线描述即可作为渲染管线描述,原始通道描述和通道描述、原始资源描述和资源描述等内容是等价的。
原始资源描述中剔除无效子资源描述后的其他子资源描述可以称为有效子资源描述。在一个实施例中,若有效子资源描述对应的有效子资源与除渲染通道以外的原始通道之间不存在依赖关系,则确定有效子资源描述为无内存分配资源描述,并为无内存分配资源描述对应的无内存分配资源分配存储指示信息,存储指示信息用于指示将有效子资源存储于片上内存中。
总的来说,渲染管线描述中保留下来的子通道描述和子资源描述都是有效的,通过对子通道描述和子资源描述的识别,可以确定无效子通道描述和子资源描述,进而优化渲染管线描述,生成精简的渲染管线。由于子通道描述是移动平台所特有的,因此,本申请提供的方案可以实现对移动平台的优化。
此处通过有效子资源描述可以判断即将创建的有效子资源是否为无内存分配资源,但此阶段有效子资源并未真正创建。具体地,若根据有效资源描述得知有效子资源仅被没有依赖关系的多个渲染通道引用,那么该有效子资源可以视为无内存分配(Memoryless)资源,对应的有效资源描述为无内存分配资源描述。
更一般地,在整个渲染管线描述中,如果一个资源仅被渲染通道RenderPass引用作为目标资源TargetResource并且所有引用该资源的RenderPass前后没有依赖关系,那么该资源就是Memoryless资源。对于无内存分配资源可以只存在于片上内存Tile Memory中,通过借助片上内存Tile Memory可以无需真正分配附件Attachement 资源内存。因此,在渲染管线执行前的优化阶段,通过有效子资源描述预先判定即将创建的有效子资源是否为无内存分配资源,并在该描述为无内存分配资源描述时分配存储指示信息,指示在有效子资源创建出来之后存储于片上内存中,可以实现对物理资源的存储空间的优化。根据存储指示信息,在支持的平台,一些引擎的图形接口,例如游戏引擎中的NGI(Cross NativeGraphics Interface,跨原生图形接口)会尝试分配Memoryless资源,具体也就是将其存储在片上内存中,以达到最小内存利用。
示例性地,如图5所示,是本申请一个示例性实施例提供的一种延迟着色DeferredShading过程的示意图,几何子通道Geometry SubPass和光照子通道Lighting SubPass同属于延迟着色渲染通道Deferred Shading Render Pass。GBuffer资源只被这两个SubPass使用,因此GBuffer就可以完全放到片上内存Tile Memory中,不需要在全局内存GlobalMemory中进行分配,进而达到优化内存资源使用的目的。在一些情景中,在一次RenderPass中将结果临时存储在图形处理器 on-chip 上的 Tile Memory中,Render Pass结束后将 Tile Memory 的数据再一次性写入到系统内存System Memory以保存渲染结果,由于计算是写入在 on-chip 的Tile Memory,速度极快,并且不必每次写入到系统内存中,也极大地减少了 GPU 频繁写入数据到显存的带宽,从而降低了功耗。
需要说明的是,上述根据有效子资源描述检测无内存分配资源描述,以实现对物理资源的进一步优化,可以在创建物理资源之前,在物理资源创建之后,可以直接对物理资源判定是否是无内存分配资源来确定存储在何处,在此不做限制。
本申请实施例提供的数据处理方案,通过对原始渲染管线描述进行初步筛查,在存在无效原始描述数据,例如无效子通道描述和无效子资源描述时将其进行剔除,得到渲染管线描述,并且,渲染管线描述可以检测无内存分配资源描述,进而在物理资源创建之后根据存储指示信息优化内存。在整个渲染管线描述中对于无效子通道描述也能够筛选出来并提出,而子通道描述是移动平台支持的渲染管线描述,这样对于移动平台有着良好的支持,且同一套管线可用于桌面平台和移动平台。
请参见图6,图6是本申请一个示例性实施例提供的另一种数据处理方法的流程示意图。该方法可以由计算机设备(例如图1所示的数据处理设备101)执行。其中,该数据处理方法包括但不限于以下步骤。
S601,获取渲染管线描述。
S602,基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据。
步骤S601和S602的具体实现方式可以参见图2对应实施例中的S201和S202,在此不做赘述。
S603,将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述。
在一个实施例中,目标渲染管线描述包含有效资源描述和有效通道描述,根据目标渲染管线描述创建相应的通道和资源时,还可以对目标渲染管线描述中的有效资源描述进行冗余检测处理,以进一步对目标渲染管线描述进行优化,具体可以为:若有效资源描述对应的有效资源与除生产有效资源的有效通道之外的任一有效通道之间不存在依赖关系,则确定有效资源描述为冗余资源描述;输出针对冗余资源描述的提示信息,提示信息用于提示修改原始渲染管线描述。
此处的依赖关系是指除了生产有效资源的有效通道之外的任一有效通道消费该有效资源。如果这种依赖关系不存在,即有效资源描述对应的有效资源仅被生产出来但没有被其他有效通道消费,那么该有效资源属于冗余资源,对应的有效资源描述称为冗余资源描述。更一般地,如果一个资源被某个Pass作为生产者引用,但其后没有其他Pass消费,而生产者Pass也没有被剔除,那么它就是冗余资源。当确定出目标渲染管线描述中存在冗余资源描述时,可以输出针对该冗余资源描述的提示信息,提示开发者修改原本定义的原始渲染管线描述,具体涉及更改着色器Shader或者更改渲染框架(例如RED)结构,以此来更改原始的资源引用关系,避免冗余资源的生成。
请参见图7a,是本申请实施例提供的一种包含冗余资源的资源流向图,其中,节点对应为有效通道描述或有效资源描述的节点,为便于描述,将这些通道描述和资源描述分别以通道和资源代替,但是这里的通道和资源是没有实际创建的,而是虚拟的。消费通道ConsumerPass生产出的虚拟资源dummy resource2,因为后续没有Pass继续消费它了,属于冗余资源,但ConsumerPass本身没有被剔除,对应的通道描述和资源描述均是有效的,因此会提示用户去修改ConsumerPass的资源依赖关系,去掉冗余资源描述,进而去掉冗余资源,优化内存使用。
根据目标渲染管线描述生成渲染管线的实现方式可以包括下述步骤S604和S605。
S604,根据有效资源在有效通道内的使用状态,生成有效通道对应的资源屏障,基于有效资源描述和资源屏障创建有效资源。
资源屏障用于记录资源在通道中的使用状态的迁移,通过资源屏障可以保证资源被正确地使用。在一个实施例中,目标渲染管线描述包括有效通道描述和有效资源描述,有效资源描述包括有效资源在有效通道内的使用状态。有效资源在有效通道中的使用状态可以包括有效资源在有效通道中是读还是写的状态,以及在渲染管线中哪个阶段使用(即具体使用该有效资源的有效通道是哪一个),以及使用方式。举例来说,在游戏引擎中 NGI定义了一套抽象的资源状态,更详细地可以参见下表1示出的部分资源状态所对应的状态含义:
表1 NGI资源状态
例如在资源被CPU读取之前,资源需要转换到HostRead状态,表示资源处于被CPU读取的状态。目标资源ColorTarget等绑定在Framebuffer中的Target Texture资源在进入渲染通道在Render Pass开始前转换到TargertReadWrite状态,在最后一个被用到的SubPass中的状态则作为转换到下一个状态的起始状态。而非目标资源(即非TargetResource)在一个Render Pass中只能有一种状态(非TargetReadWrite/TargetRead/TargetResolveSrc/TargetResolveDst/SubPassRead状态中的一种),在Render Pass开始前转换到这个状态。
通道之间插入资源屏障ResourceBarrier,指定资源在两个渲染命令之间的依赖关系需要提前知道这两个渲染命令对该资源的使用方式,而这两个渲染命令可能在不同线程的任意时刻提交,从API层面上无法判断资源前后的使用方式,需要由应用层主动提供ResourceBarrier的信息。由此可以预先根据目标渲染管线描述中的有效资源描述包含的有效资源在有效通道中的使用状态生成资源屏障。在一个实施例中,有效通道描述包含有效生产通道描述和有效消费通道描述,有效消费通道描述对应的有效消费通道包括第一消费通道和第二消费通道,有效消费通道消费有效生产通道描述对应的有效生产通道生产的有效资源。将有效生产通道记为PassA,将第一消费通道和第二消费通道分别记为PassB和PassC,根据上述描述,PassA生产的有效资源被PassB和PassC消费。生成资源屏障的实现步骤可以包括:
①获取有效资源在第一消费通道以及第二消费通道的使用状态。
由于每个资源在渲染管线描述的每个Pass中都维护了一个使用状态(ResourceState),因此,有效资源在两个Pass中也有使用状态。具体可以是资源描述记录该有效资源在第一消费通道和第二消费通道的使用状态,资源在两个有效消费通道中的使用状态可能相同或者不同,例如在第一消费通道资源处于拷贝目的地的状态,在第二消费通道中资源处于索引缓冲的状态。可选地,第一消费通道和第二消费通道为前后相邻的两个Pass或者说两个连续Pass。
②若有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件,则对有效资源的使用状态进行合并处理,得到合并状态。
为了避免渲染管线中插入太多资源屏障,影响渲染的性能,在有效资源在第一消费通道的使用状态和在第二消费中的使用状态满足合并条件的情况下,可以对两种使用状态进行合并,得到合并状态,进而减少资源屏障的插入。对于是否满足合并条件的判断方式,具体包含以下两种:
方式一、若有效资源在第一消费通道和第二消费通道的使用状态相同,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件。
进一步地,合并处理得到合并状态的方式可以是:将有效资源在第一消费通道或者第二消费通道的使用状态确定为合并状态。
也就是说,当有效资源在第一消费通道和第二消费通道的使用状态相同时,有效资源的使用状态是可以合并的,由于两个使用状态相同,具体的合并方式可以是将该有效资源在任一个消费通道中的使用状态作为合并状态。举例来说,有效资源在第一消费通道和第二消费通道的使用状态均为A状态,则可以确定两种使用状态是满足合并条件的,合并之后得到的合并状态也是A状态。
方式二、若有效资源在第一消费通道和第二消费通道的使用状态为设定使用状态集中的不同使用状态,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件。
此处的设定使用状态集是指可以合并的使用状态的集合,也可称为可合并使用状态集,是预先定义的。举例来说,在NGI中,可合并使用状态集包含的具体内容如下表2所示:
表2可合并使用状态集
针对缓冲资源,可以合并的使用状态包括的任意两个使用状态支持合并,例如资源状态IndexBuffer和ShaderResource是可以合并的。对于纹理资源也是相同的原理。纹理资源或缓冲资源中其他单个相同状态是指相同的使用状态。
如果有效资源在第一消费通道和第二消费通道中的使用状态为可合并使用状态集中的任意两个不同的,那么可以将两种使用状态合并为一个新的使用状态,即合并状态,该合并状态包含两种不同的使用状态,该资源的使用状态对应的用法(即使用方法)在第一消费通道和第二消费通道不同。具体地:有效资源的合并状态对应的使用方法包括有效资源在第一消费通道的使用状态对应的使用方法,以及有效资源在第二消费通道的使用状态对应的使用方法。即处于合并状态的资源包括两种原有的使用状态分别对应的用法。处于合并状态的资源所在的第一个消费通道负责进行状态转换,通过状态转换可以描述资源在通道之间的依赖关系。
③为有效生产通道和第一消费通道生成包含合并状态的资源屏障,有效资源在第一消费通道和第二消费通道中的使用状态均由资源屏障指示。
由于有效生产通道和第一消费通道、第二消费通道之间分别都有依赖关系,在没有合并之前,有效生产通道和第一消费通道、有效生产通道和第二消费通道之间都需要资源屏障来指示资源的状态的转换,以保证资源在通道中的正确使用,但是在将资源可合并的状态合并之后,有效生产通道和第一消费通道之间可以生成包含合并状态的资源屏障,而有效生产通道和第二消费通道之间可以不生成该资源屏障,在另一种实现方式中,也可以为有效生产通道和第二消费通道生成包含合并状态的资源屏障,而有效生产通道和第一消费通道之间不生成该资源屏障。无论哪种方式,资源屏障均可以指示有效资源在第一消费通道和第二消费通道中的使用状态。举例来说,对于一段内存,前一个Pass写入,后面有两个连续的Pass读取,则可以将后面2个Pass的资源屏障合并为1个。如图7b所示,是资源屏障在PASS之间生成的示意图,由于资源在两个消费通道中的使用状态相同,原本为两个资源屏障可以使用一个资源屏障。
上述对资源的使用状态进行合并,得到合并状态并生成资源屏障的方案,属于一种管理Pass间资源依赖关系的方法,可以应用在RED渲染框架中,通过将可以合并的使用状态进行合并,可以有效减少资源屏障的生成,实现对资源屏障的优化设置,进而保证图形处理器的并行度,提升资源屏障的性能。
具体地,在D3D12平台下,通过资源屏障将几何通道中生产的有效资源的状态转换为光照通道使用的资源的状态,而在Vulkan平台下则不需要资源屏障进行状态转换。为了同时兼容D3D12和Vulkan平台,RED将处理TargetResource的ResourceBarrier作为BeginRenderPass中的一个参数传给NGI;GPass和LightingPass之间的ResourceBarrier仍然继续存在,但是NGI只在D3D12平台下使用这个ResourceBarrier,在Vulkan平台下则不去处理。如此设计NGI就通过一套统一的接口支持了两个不同的平台。
资源屏障在上述示出的图形API中的使用有所区别是由于Vulkan要求所有的TargetResource在进入RenderPass之前都必须进入Target相关状态(如下图7c示出的Vulkan平台下的ResourceBarrier),且在中间不能通过ResourceBarrier进行状态转换。而D3D12通过模拟的方式支持SubPass,TargetResource在SubPass中还是以常规的方式引用,因此需要在Pass之间插入ResourceBarrier。例如在Tiled Based Deferred Shading(切片式延迟着色)过程中,在Vulkan平台下和D3D12平台下资源的状态转换如图7c所示。
在一个实施例中,创建有效资源的实现方式可以包括:基于资源屏障,确定有效资源在渲染生命周期中的使用状态集合,获取使用状态集合对应的目标使用方法集合;根据有效资源描述创建有效资源,并将有效资源的使用方法设置为目标使用方法集合。
底层图形API要求在创建资源(具体为物理资源)时,要求预先指定资源的使用方法,例如D3D12通过的D3D12_RESOURCE_FLAGS指定资源可能的用法,Vulkan通过VkBufferUsageFlagBits和VkImageUsageFlagBits指定资源可能的用法。要求预先指定资源的使用方法对用户不是一种十分友好的方法。
由于资源屏障记录了资源在通道中使用状态的迁移,因此,根据资源屏障记录的状态迁移可以得知有效资源在渲染生命周期内的所有使用状态,构成使用状态集合。通常,资源的每种使用状态对应有使用方法(也即用法),可以获取有效资源的使用状态集合对应的目标使用方法集合,该目标使用方法集合是系统针对该资源自动且预先收集好的所有使用方法。
得知了有效资源的使用方法之后,可以得到完整的有效资源描述,进而根据有效资源描述可以创建实际的有效资源。在实际创建资源时并没有即时提交,而是将开发者对渲染管线的描述优化为对硬件友好的管线的描述,例如增加对开发者无感的资源屏障,剔除开发者申明的冗余资源描述等操作之后,再通过预先收集到的资源的用法进行资源的创建,这一过程也即延迟创建资源。而通过延迟创建,可以自动收集资源的所有用法,系统可以自动推导出资源在整个渲染生命周期中各个阶段的使用方法,进而避免了在声明资源的时候需要填入正确的用法,简化了开发者使用渲染框架RED创建物理资源的步骤。
此处将Buffer资源的用法以及Texture的用法抽象出来,具体是在给定的渲染框架中(例如RED),每个资源在每个Pass中都处于一个特定的使用状态,每个资源状态有相应的资源用法(即资源的使用方法),结合资源类型,可以推导出该资源在该Pass中的用法。所有用法的并集即为资源在整个渲染生命周期中的用法。示例性地,如下表3,是在游戏引擎中根据NGI资源状态和NGI资源类型推导出的资源用法。前述中的表1中NGI资源的使用状态可以对应表3中的NGI资源状态:
表3资源用法
对于上述根据资源状态和资源类型推导出的Buffer资源的用法和Texture资源的用法的具体解释可以参见下述表4和表5:
表4 Buffer资源的用法
表5 Texture的用法
可见,资源的用法和资源的使用状态是用相同的代名词的,但是具体的含义不用,资源的用法是指资源在各阶段以何种角色使用,而资源的使用状态则是该资源在使用时处于何种状态,两者之间有必然的联系但又不完全等价。例如资源在着色器处于只读的状态下,结合资源的类型推导的资源的用法包括以下三种:可作为只读StructuredBuffer、可作为只读ByteAddressBuffer、可作为只读TexelBuffer。
S605,基于有效通道描述创建有效通道,将资源屏障、有效资源和有效通道排布为渲染管线。
上述创建的有效资源为物理资源,是在渲染过程中真实要使用的资源,此步骤中基于有效通道描述将实际的通道创建出来,是对Pass的实例化过程,得到的有效通道也即实例化Pass,之后基于实例化Pass、物理资源以及资源屏障排布的流向图即为渲染管线。如前述图3a示出的资源流向图,将除无效通道描述或无效资源描述对应节点之外的每个节点都实例化之后,即可以作为渲染管线。
在一个实施例中,还可以:编译有效通道和有效资源,得到渲染命令;将资源屏障和渲染命令录入命令队列;该命令队列用于提交至图形处理器,以使得图形处理器基于渲染命令渲染图形。
编译渲染管线得到渲染命令,具体是对渲染管线包含的有效通道和有效资源进行编译,确定出对应的渲染命令,该渲染命令指示了在何时采用何种资源运用什么方法进行图形渲染。由于通过资源屏障不仅可以用来在需要不同资源的权限的时候提供安全距离的控制(即资源的使用状态的转换),还可以用于适当的同步过程的控制,保证渲染命令的串行执行。因此,可以将该资源屏障和渲染命令录入一个命令队列,并将该命令队列交由图形处理器执行渲染命令以渲染图形,这样可以有效保证图形处理器基于渲染命令渲染图形的性能以及图形渲染有序执行。
命令队列中可以记录CPU发送给GPU的渲染命令(也可称为图形命令),由资源屏障指示渲染命令的执行顺序,可以将编译渲染管线得到的所有渲染命令和资源屏障录制到一个命令队列(Command Queue)中,在一种实施例中,命令队列中包含所有有效通道对应的渲染命令的集合,当命令队列录制完毕之后,由于根据资源屏障能够得知渲染命令的执行顺序,可以直接将其提交给图形处理器GPU,并由图形处理器按照渲染命令执行具体的渲染流程。
在另一种实施例中,一个有效通道对应一组渲染命令,且录制在单个命令列表中,多个有效通道分别对应的命令列表可以并行录制,例如N个有效通道对应N个命令列表,通过申请多个命令列表,可以更有效地利用CPU的多个核心进行命令的录制,提高录制效率。在所有命令列表的录制完毕之后,可以将资源屏障和命令列表放入命令队列中,具体地,根据资源屏障指示的资源在通道之间的依赖关系,所有命令列表和资源屏障可以按照一定顺序放入命令队列中,即CPU往命令队列中添加渲染命令,GPU从里面读取渲染命令执行,命令队列提供了同步的手段。
本申请实施例提供的数据处理方案,在获取到渲染管线描述之后,并没有立即创建资源以及生成渲染命令进行提交,而是经过对渲染管线描述的优化处理,包括剔除无效通道描述、无效资源描述等无用的描述数据,得到包含有效通道描述和有效资源描述的目标渲染管线描述,该目标渲染管线描述是对硬件友好的渲染管线描述;再基于目标渲染管线描述对所需的资源、通道等进行实例化,进而运用有效通道和有效资源生成用于渲染图形的渲染命令,通过延迟创建资源和生成渲染命令,可以利用延迟时间推导出资源用法,收集到完整的有效资源描述,避免声明资源的正确用法,进而简化渲染管线中资源的创建参数;此外,对无法剔除的冗余资源描述进行提示,实现了对渲染管线的定制过程的优化,避免冗余资源的生成,提高图形渲染效率。
基于上述所有实施例介绍的内容,可以将整个过程分为以下几步:
S801,分析整个渲染过程的资源依赖,剔除无效Pass和资源。
获取渲染管线描述,基于渲染管线描述包含的内容对渲染过程的资源依赖进行分析,筛选出无效Pass和无效资源对应的描述数据,并将其从渲染管线描述中剔除。这里的无效Pass可能是Render Pass、Compute Pass或Copy Pass中的任一种或多种,也可能是Render Pass中的单个SubPass。
S802,建立资源在各Pass之间的依赖关系,生成Pass之间的ResourceBarrier。
此步骤涉及一种管理RenderPass中资源依赖的方法,使用该方法可以将有效资源在通道中能够合并的使用状态进行合并,进而减少资源屏障的生成,实现资源屏障的优化。在有了所有的Pass之间的ResourceBarrier,就可以准备对有效资源创建对应的物理资源,对有效Pass进行并行的渲染命令提交。
S803,收集有效的RenderPass描述,创建RenderPass和Framebuffer。
在剔除无效Pass描述等之后剩余的通道描述中即包含有效的RenderPass描述,根据有效的RenderPass描述可以对RenderPass以及对应的帧缓冲资源Framebuffer进行实例化,准备在渲染阶段使用,其他Pass创建也是类似的原理,通过有效Pass描述实例化通道。
S804,收集资源用法,通过完整资源描述创建物理资源。
剔除无效资源描述之后剩余的资源描述为有效资源描述,该描述中包含资源在各个有效通道中的使用状态,利用使用状态能够推导出资源的使用方法,得到完整资源描述,进而创建出相应的物理资源。在此步骤中,通过资源用法的推导,可以避免用户填入资源的正确使用方法,简化用户的输入,进而提升使用渲染框架创建物理资源的便捷度。
S805,分析资源是否只存在于RenderPass中,对物理资源进行进一步优化。
通过资源描述可以分析出资源是否存在于RenderPass,进一步可以判定该资源描述对应的资源是否为Memoryless资源,得到待优化的Memoryless资源,继而可以判断出哪些物理资源可以完全分配在片上内存上,这样在简化资源的用法的同时还可以节约GPU内存使用。可选地,可以在创建物理资源之前对属于Memoryless资源的资源描述分配存储指示信息,在创建物理资源之后,按照该存储指示信息存储物理资源,实现对物理资源的优化。
S806,分析冗余资源,对外发出警告。
通过渲染管线描述分析冗余资源描述,冗余资源描述对应的冗余资源属于无用资源,当检测到存在时,可以发出警告,提示用户修改渲染框架或者着色器,以去除这些资源。需要说明的是,对于无效资源、冗余资源的分析以及资源用法的推导均可属于一种资源检测算法,并且该资源检测算法可以是在创建物理资源之前执行(例如步骤S805和S806在步骤S804之前执行),上述步骤的序号并不能构成方案执行顺序的限定。
根据以上介绍,如图8所示,为简化渲染管线描述的整体执行流程图,可以基于Cross Native Graphics Interface(NGI)设计,可选地,基于延迟模式的渲染框架RED结合NGI定义了一套简单的接口,可以清晰地描述一整个渲染过程。其关键接口有:①AllocateTexture:分配一个NGI Texture(纹理资源)在RED中的代理。②AllocateTextureView:分配一个NGI Texture View(纹理资源视图)在RED中的代理。③AllocateBuffer;分配一个NGI Buffer(缓冲资源)在RED中的代理。④AllocateBufferView: 分配一个NGI Buffer View(缓冲资源视图)在RED中的代理。⑤BeginRenderPass:设置RenderPass参数并标记开始。⑥AllocateSubRenderPass:分配一个SubRenderPass。⑦EndRenderPass:标记一个RenderPass的结束。⑧BeginComputePass:标记一个NGI通用GPU计算Pass。⑨BeginCopyPass:标记一个NGI资源拷贝Pass。
根据图8示出的内容,在有了所有的Pass之间的ResourceBarrier,就可以对有效资源创建对应的物理资源,对有效Pass进行并行的渲染命令提交。采用延迟模式,可以方便地调用底层硬件的新功能,例如原生多线程渲染等,而且着重考虑了可定制性和对移动平台的优化。其中,原生多线程渲染是指通过分配多个命令列表的方式,每个命令列表记录渲染管线中的一个有效通道对应的渲染命令集合,具体地,可以调用CPU的多个线程并行录制命令列表,这样每个Pass中的渲染命令都可以并行进行录制,进一步地,一个Pass中的渲染命令也可以通过多个子命令列表进行并行录制,通过并行录制可以有效提高渲染命令的录制效率,进而提高整体性能。
请参见图9,图9是本申请一个示例性实施例提供的一种数据处理装置的结构示意图。上述数据处理装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该数据处理装置为一个应用软件;该数据处理装置可以用于执行本申请实施例提供的方法中的相应步骤。如图9所示,该数据处理装置900可以包括:获取模块901、确定模块902、剔除模块903、生成模块904。
获取模块901,用于获取渲染管线描述;渲染管线描述包括通道描述、资源描述以及通道描述对应的通道与资源描述对应的资源之间的依赖关系;
确定模块902,用于基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据,无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;
剔除模块903,用于将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述;
生成模块904,用于根据目标渲染管线描述生成渲染管线,输出渲染管线。
在一个实施例中,获取模块901,具体用于:获取原始渲染管线描述,原始渲染管线描述包括原始通道描述、原始资源描述,以及原始通道描述对应的原始通道和原始资源描述对应的原始资源之间的依赖关系,原始通道描述包括渲染通道描述,渲染通道描述包括多个子通道描述;基于原始通道和原始资源之间的依赖关系,确定原始资源描述中的子资源描述;基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,对原始渲染管线描述进行依赖分析处理,确定无效原始描述数据,无效原始描述数据包括无效子通道描述以及无效子资源描述中的任一种或两种;将无效原始描述数据从多个子通道描述和原始资源描述中剔除,得到通道描述和资源描述;根据无效原始描述数据,调整原始通道和原始资源之间的依赖关系,得到通道与资源之间的依赖关系。
在一个实施例中,当无效原始描述数据包括无效子通道描述以及无效子资源描述时,确定模块902,具体用于:基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,确定多个子通道之间的依赖关系;根据多个子通道之间的依赖关系确定渲染通道描述中的无效子通道描述,并依据无效子通道和子资源之间的依赖关系确定无效子资源描述。
在一个实施例中,剔除模块903,具体用于:若多个子通道描述存在至少一个有效子通道描述,则将渲染通道描述中的无效子通道描述进行剔除,并将无效子通道描述剔除后的渲染通道描述和其余原始通道描述均作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
在一个实施例中,剔除模块903,具体用于:若多个子通道描述均是无效子通道描述,则将原始渲染管线描述中除渲染通道描述以外的其余原始通道描述作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
在一个实施例中,确定模块902,还用于:若有效子资源描述对应的有效子资源与除渲染通道以外的原始通道之间不存在依赖关系,则确定有效子资源描述为无内存分配资源描述,并为无内存分配资源描述对应的无内存分配资源分配存储指示信息,存储指示信息用于指示将有效子资源存储于片上内存中。
在一个实施例中,目标渲染管线描述包括有效通道描述和有效资源描述,有效资源描述包括有效资源在有效通道内的使用状态;生成模块904,具体用于:根据有效资源在有效通道内的使用状态,生成有效通道对应的资源屏障,基于有效资源描述和资源屏障创建有效资源;基于有效通道描述创建有效通道,将资源屏障、有效资源和有效通道排布为渲染管线。
在一个实施例中,生成模块904,还用于:编译有效通道和有效资源,得到渲染命令;将资源屏障和渲染命令录入命令队列;命令队列用于提交至图形处理器,以使得图形处理器基于渲染命令渲染图形。
在一个实施例中,有效通道描述包含有效生产通道描述和有效消费通道描述,有效消费通道描述对应的有效消费通道包括第一消费通道和第二消费通道,有效消费通道消费有效生产通道描述对应的有效生产通道生产的有效资源;生成模块904,还用于:获取有效资源在第一消费通道以及第二消费通道的使用状态;若有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件,则对有效资源的使用状态进行合并处理,得到合并状态;为有效生产通道和第一消费通道生成包含合并状态的资源屏障,有效资源在第一消费通道和第二消费通道中的使用状态均由资源屏障指示。
在一个实施例中,生成模块904,具体用于:若有效资源在第一消费通道和第二消费通道的使用状态相同,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件;将有效资源在第一消费通道或者第二消费通道的使用状态确定为合并状态。
在一个实施例中,生成模块904,具体还用于:若有效资源在第一消费通道和第二消费通道的使用状态为设定使用状态集中的不同使用状态,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件;有效资源的合并状态对应的使用方法包括有效资源在第一消费通道的使用状态对应的使用方法,以及有效资源在第二消费通道的使用状态对应的使用方法。
在一个实施例中,确定模块902,还用于:若有效资源描述对应的有效资源与除生产有效资源的有效通道之外的任一有效通道之间不存在依赖关系,则确定有效资源描述为冗余资源描述;输出针对冗余资源描述的提示信息,提示信息用于提示修改原始渲染管线描述。
在一个实施例中,生成模块904,具体用于:基于资源屏障,确定有效资源在渲染生命周期中的使用状态集合,获取使用状态集合对应的目标使用方法集合;根据有效资源描述创建有效资源,并将有效资源的使用方法设置为目标使用方法集合。
在一个实施例中,通道描述对应的通道数量为多个,当无效描述数据包括无效通道描述和无效资源描述时,确定模块902,具体用于:基于通道和资源之间的依赖关系获取多个通道之间的依赖关系;根据多个通道之间的依赖关系确定无效通道描述,并依据无效通道描述对应的无效通道和资源之间的依赖关系确定无效资源描述。
在一个实施例中,通道与资源之间的依赖关系通过资源描述的标记信息指示;标记信息包括读标记和写标记;确定模块902,具体用于:若资源描述的读标记指示从第一通道中读取资源,资源描述的写标记指示将资源写入第二通道,则确定第一通道和第二通道之间存在依赖关系。
在一个实施例中,确定模块902,具体用于:根据通道和资源之间的依赖关系,生成资源流向图,资源流向图的节点对应资源描述和通道描述;以结束通道描述对应的节点为起点,对资源流向图进行遍历;若存在未被遍历的节点,则将未被遍历的节点对应的通道描述确定为无效通道描述。
可以理解的是,本申请实施例所描述的数据处理装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
请参见图10,图10是本申请实施例提供的一种计算机设备的结构示意图。该计算机设备1000可以包含独立设备(例如服务器、节点、终端等等中的一个或者多个),也可以包含独立设备内部的部件(例如芯片、软件模块或者硬件模块等)。该计算机设备1000可以包括至少一个处理器1001和通信接口1002,进一步可选地,计算机设备1000还可以包括至少一个存储器1003和总线1004。其中,处理器1001、通信接口1002和存储器1003通过总线1004相连。
其中,处理器1001是进行算术运算和/或逻辑运算的模块,具体可以是中央处理器(central processing unit,CPU)、图片处理器(graphics processing unit,GPU)、微处理器(microprocessor unit,MPU)、专用集成电路(Application SpecificIntegratedCircuit,ASIC)、现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)、复杂可编程逻辑器件(Complex programmable logic device,CPLD)、协处理器(协助中央处理器完成相应处理和应用)、微控制单元(Microcontroller Unit,MCU)等处理模块中的一种或者多种的组合。
通信接口1002可以用于为至少一个处理器提供信息输入或者输出。和/或,通信接口1002可以用于接收外部发送的数据和/或向外部发送数据,可以为包括诸如以太网电缆等的有线链路接口,也可以是无线链路(Wi-Fi、蓝牙、通用无线传输、车载短距通信技术以及其他短距无线通信技术等)接口。
存储器1003用于提供存储空间,存储空间中可以存储操作系统和计算机程序等数据。存储器1003可以是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory, ROM)、可擦除可编程只读存储器(erasable programmable read onlymemory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM)等等中的一种或者多种的组合。
该计算机设备1000中的至少一个处理器1001用于调用至少一个存储器1003中存储的计算机程序,用于执行前述的数据处理方法,例如前述图2、图4以及图6所示实施例所描述的数据处理方法。
在一种可能的实施方式中,该计算机设备1000中的处理器1001用于调用至少一个存储器1003中存储的计算机程序,用于执行以下操作:获取渲染管线描述;渲染管线描述包括通道描述、资源描述以及通道描述对应的通道与资源描述对应的资源之间的依赖关系;基于通道和资源之间的依赖关系,对渲染管线描述进行依赖分析处理,确定渲染管线描述包含的无效描述数据,无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;将无效描述数据从渲染管线描述中剔除,得到目标渲染管线描述;根据目标渲染管线描述生成渲染管线,输出渲染管线。
在一个实施例中,处理器1001具体用于:获取原始渲染管线描述,原始渲染管线描述包括原始通道描述、原始资源描述,以及原始通道描述对应的原始通道和原始资源描述对应的原始资源之间的依赖关系,原始通道描述包括渲染通道描述,渲染通道描述包括多个子通道描述;基于原始通道和原始资源之间的依赖关系,确定原始资源描述中的子资源描述;基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,对原始渲染管线描述进行依赖分析处理,确定无效原始描述数据,无效原始描述数据包括无效子通道描述以及无效子资源描述中的任一种或两种;将无效原始描述数据从多个子通道描述和原始资源描述中剔除,得到通道描述和资源描述;根据无效原始描述数据,调整原始通道和原始资源之间的依赖关系,得到通道与资源之间的依赖关系。
在一个实施例中,当无效原始描述数据包括无效子通道描述以及无效子资源描述时,处理器1001具体用于:基于多个子通道描述对应的子通道和子资源描述对应的子资源之间的依赖关系,确定多个子通道之间的依赖关系;根据多个子通道之间的依赖关系确定渲染通道描述中的无效子通道描述,并依据无效子通道和子资源之间的依赖关系确定无效子资源描述。
在一个实施例中,处理器1001具体用于:若多个子通道描述存在至少一个有效子通道描述,则将渲染通道描述中的无效子通道描述进行剔除,并将无效子通道描述剔除后的渲染通道描述和其余原始通道描述均作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
在一个实施例中,处理器1001具体用于:若多个子通道描述均是无效子通道描述,则将原始渲染管线描述中除渲染通道描述以外的其余原始通道描述作为通道描述;将原始资源描述中除无效子资源描述以外的原始资源描述均作为资源描述。
在一个实施例中,处理器1001还用于:若有效子资源描述对应的有效子资源与除渲染通道以外的原始通道之间不存在依赖关系,则确定有效子资源描述为无内存分配资源描述,并为无内存分配资源描述对应的无内存分配资源分配存储指示信息,存储指示信息用于指示将有效子资源存储于片上内存中。
在一个实施例中,目标渲染管线描述包括有效通道描述和有效资源描述,有效资源描述包括有效资源在有效通道内的使用状态;处理器1001具体用于:根据有效资源在有效通道内的使用状态,生成有效通道对应的资源屏障,基于有效资源描述和资源屏障创建有效资源;基于有效通道描述创建有效通道,将资源屏障、有效资源和有效通道排布为渲染管线。
在一个实施例中,处理器1001还用于:编译有效通道和有效资源,得到渲染命令;将资源屏障和渲染命令录入命令队列;命令队列用于提交至图形处理器,以使得图形处理器基于渲染命令渲染图形。
在一个实施例中,有效通道描述包含有效生产通道描述和有效消费通道描述,有效消费通道描述对应的有效消费通道包括第一消费通道和第二消费通道,有效消费通道消费有效生产通道描述对应的有效生产通道生产的有效资源;
处理器1001具体用于:获取有效资源在第一消费通道以及第二消费通道的使用状态;若有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件,则对有效资源的使用状态进行合并处理,得到合并状态;为有效生产通道和第一消费通道生成包含合并状态的资源屏障,有效资源在第一消费通道和第二消费通道中的使用状态均由资源屏障指示。
在一个实施例中,处理器1001还用于:若有效资源在第一消费通道和第二消费通道的使用状态相同,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件;将有效资源在第一消费通道或者第二消费通道的使用状态确定为合并状态。
在一个实施例中,处理器1001还用于:若有效资源在第一消费通道和第二消费通道的使用状态为设定使用状态集中的不同使用状态,则确定有效资源在第一消费通道和第二消费通道中的使用状态满足合并条件;有效资源的合并状态对应的使用方法包括有效资源在第一消费通道的使用状态对应的使用方法,以及有效资源在第二消费通道的使用状态对应的使用方法。
在一个实施例中,处理器1001还用于:若有效资源描述对应的有效资源与除生产有效资源的有效通道之外的任一有效通道之间不存在依赖关系,则确定有效资源描述为冗余资源描述;输出针对冗余资源描述的提示信息,提示信息用于提示修改原始渲染管线描述。
在一个实施例中,处理器1001具体用于:基于资源屏障,确定有效资源在渲染生命周期中的使用状态集合,获取使用状态集合对应的目标使用方法集合;根据有效资源描述创建有效资源,并将有效资源的使用方法设置为目标使用方法集合。
在一个实施例中,通道描述对应的通道数量为多个,当无效描述数据包括无效通道描述和无效资源描述时,处理器1001具体用于:基于通道和资源之间的依赖关系获取多个通道之间的依赖关系;根据多个通道之间的依赖关系确定无效通道描述,并依据无效通道描述对应的无效通道和资源之间的依赖关系确定无效资源描述。
在一个实施例中,通道与资源之间的依赖关系通过资源描述的标记信息指示;标记信息包括读标记和写标记;处理器1001具体用于:若资源描述的读标记指示从第一通道中读取资源,资源描述的写标记指示将资源写入第二通道,则确定第一通道和第二通道之间存在依赖关系。
在一个实施例中,处理器1001具体用于:根据通道和资源之间的依赖关系,生成资源流向图,资源流向图的节点对应资源描述和通道描述;以结束通道描述对应的节点为起点,对资源流向图进行遍历;若存在未被遍历的节点,则将未被遍历的节点对应的通道描述确定为无效通道描述。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文所对应实施例中对该数据处理方法的描述,也可执行前文图9所对应实施例中对该数据处理装置900的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,还应指出,本申请一个示例性实施例还提供了一种存储介质,该存储介质中存储了前述数据处理方法的计算机程序,该计算机程序包括程序指令,当一个或多个处理器加载并执行该程序指令,可以实现实施例中对数据处理方法的描述,这里不再赘述,对采用相同方法的有益效果描述,也在此不再赘述。可以理解的是,程序指令可以被部署在一个或能够互相通信的多个计算机设备上执行。
上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中一方面提供的方法。
本申请的一个方面,提供了另一种计算机程序产品,该计算机程序产品包括计算机程序或计算机指令,该计算机程序或计算机指令被处理器执行时实现本申请实施例提供的数据处理方法的步骤。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (17)
1.一种数据处理方法,其特征在于,所述方法包括:
获取渲染管线描述;所述渲染管线描述包括通道描述、资源描述以及所述通道描述对应的通道与所述资源描述对应的资源之间的依赖关系;
基于所述通道和所述资源之间的依赖关系,对所述渲染管线描述进行依赖分析处理,确定所述渲染管线描述包含的无效描述数据,所述无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;
将所述无效描述数据从所述渲染管线描述中剔除,得到目标渲染管线描述;所述目标渲染管线描述包括有效通道描述和有效资源描述,所述有效资源描述包括有效资源在有效通道内的使用状态,所述有效通道描述包含有效生产通道描述和有效消费通道描述,所述有效消费通道描述对应的有效消费通道包括第一消费通道和第二消费通道,所述有效消费通道消费所述有效生产通道描述对应的有效生产通道生产的有效资源;
获取所述有效资源在所述第一消费通道以及所述第二消费通道的使用状态;
若所述有效资源在所述第一消费通道和所述第二消费通道中的使用状态满足合并条件,则对所述有效资源的使用状态进行合并处理,得到合并状态;
为所述有效生产通道和所述第一消费通道生成包含所述合并状态的资源屏障,所述有效资源在所述第一消费通道和所述第二消费通道中的使用状态均由所述资源屏障指示;
基于所述有效资源描述和所述资源屏障创建有效资源,所述资源屏障用于记录资源在通道中的使用状态的迁移;
基于所述有效通道描述创建有效通道,将所述资源屏障、所述有效资源和所述有效通道排布为渲染管线,输出所述渲染管线。
2.根据权利要求1所述的方法,其特征在于,所述获取渲染管线描述,包括:
获取原始渲染管线描述,所述原始渲染管线描述包括原始通道描述、原始资源描述,以及所述原始通道描述对应的原始通道和所述原始资源描述对应的原始资源之间的依赖关系,所述原始通道描述包括渲染通道描述,所述渲染通道描述包括多个子通道描述;
基于所述原始通道和所述原始资源之间的依赖关系,确定所述原始资源描述中的子资源描述;
基于所述多个子通道描述对应的子通道和所述子资源描述对应的子资源之间的依赖关系,对所述原始渲染管线描述进行依赖分析处理,确定无效原始描述数据,所述无效原始描述数据包括无效子通道描述以及无效子资源描述中的任一种或两种;
将所述无效原始描述数据从所述多个子通道描述和所述原始资源描述中剔除,得到所述通道描述和所述资源描述;
根据所述无效原始描述数据,调整所述原始通道和所述原始资源之间的依赖关系,得到所述通道与所述资源之间的依赖关系。
3.根据权利要求2所述的方法,其特征在于,当所述无效原始描述数据包括无效子通道描述以及无效子资源描述时,所述基于所述多个子通道描述对应的子通道和所述子资源描述对应的子资源之间的依赖关系,对所述原始渲染管线描述进行依赖分析处理,确定无效原始描述数据,包括:
基于所述多个子通道描述对应的子通道和所述子资源描述对应的子资源之间的依赖关系,确定多个子通道之间的依赖关系;
根据所述多个子通道之间的依赖关系确定所述渲染通道描述中的无效子通道描述,并依据所述无效子通道和所述子资源之间的依赖关系确定无效子资源描述。
4.根据权利要求3所述的方法,其特征在于,所述将所述无效原始描述数据从所述多个子通道描述和所述原始资源描述中剔除,得到所述通道描述和所述资源描述,包括:
若所述多个子通道描述存在至少一个有效子通道描述,则将所述渲染通道描述中的无效子通道描述进行剔除,并将无效子通道描述剔除后的渲染通道描述和其余原始通道描述均作为所述通道描述;
将所述原始资源描述中除所述无效子资源描述以外的原始资源描述均作为所述资源描述。
5.根据权利要求3所述的方法,其特征在于,所述将所述无效原始描述数据从所述多个子通道描述和所述原始资源描述中剔除,得到所述通道描述和所述资源描述,包括:
若所述多个子通道描述均是无效子通道描述,则将所述原始渲染管线描述中除所述渲染通道描述以外的其余原始通道描述作为所述通道描述;
将所述原始资源描述中除所述无效子资源描述以外的原始资源描述均作为所述资源描述。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若有效子资源描述对应的有效子资源与除所述渲染通道以外的原始通道之间不存在依赖关系,则确定所述有效子资源描述为无内存分配资源描述,并为所述无内存分配资源描述对应的无内存分配资源分配存储指示信息,所述存储指示信息用于指示将所述有效子资源存储于片上内存中。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
编译所述有效通道和所述有效资源,得到渲染命令;
将所述资源屏障和所述渲染命令录入命令队列;所述命令队列用于提交至图形处理器,以使得所述图形处理器基于所述渲染命令渲染图形。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述有效资源在所述第一消费通道和所述第二消费通道的使用状态相同,则确定所述有效资源在所述第一消费通道和所述第二消费通道中的使用状态满足合并条件;
所述对所述有效资源的使用状态进行合并处理,得到合并状态,包括:
将所述有效资源在所述第一消费通道或者所述第二消费通道的使用状态确定为所述合并状态。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
若所述有效资源在所述第一消费通道和所述第二消费通道的使用状态为设定使用状态集中的不同使用状态,则确定所述有效资源在所述第一消费通道和所述第二消费通道中的使用状态满足合并条件;
所述有效资源的合并状态对应的使用方法包括所述有效资源在所述第一消费通道的使用状态对应的使用方法,以及所述有效资源在所述第二消费通道的使用状态对应的使用方法。
10.根据权利要求1~9任一项所述的方法,其特征在于,所述方法还包括:
若所述有效资源描述对应的有效资源与除生产所述有效资源的有效通道之外的任一有效通道之间不存在依赖关系,则确定所述有效资源描述为冗余资源描述;
输出针对所述冗余资源描述的提示信息,所述提示信息用于提示修改原始渲染管线描述。
11.根据权利要求1所述的方法,其特征在于,所述基于所述有效资源描述和所述资源屏障创建有效资源,包括:
基于所述资源屏障,确定所述有效资源在渲染生命周期中的使用状态集合,获取所述使用状态集合对应的目标使用方法集合;
根据所述有效资源描述创建所述有效资源,并将所述有效资源的使用方法设置为所述目标使用方法集合。
12.根据权利要求1所述的方法,其特征在于,所述通道描述对应的通道数量为多个,当所述无效描述数据包括无效通道描述和无效资源描述时,所述基于所述通道和所述资源之间的依赖关系,对所述渲染管线描述进行依赖分析处理,确定所述渲染管线描述包含的无效描述数据,包括:
基于所述通道和所述资源之间的依赖关系获取多个通道之间的依赖关系;
根据所述多个通道之间的依赖关系确定无效通道描述,并依据所述无效通道描述对应的无效通道和所述资源之间的依赖关系确定无效资源描述。
13.根据权利要求12所述的方法,其特征在于,所述通道与所述资源之间的依赖关系通过所述资源描述的标记信息指示;所述标记信息包括读标记和写标记;所述基于所述通道和所述资源之间的依赖关系获取多个通道之间的依赖关系,包括:
若所述资源描述的读标记指示从第一通道中读取所述资源,所述资源描述的写标记指示将所述资源写入第二通道,则确定所述第一通道和所述第二通道之间存在依赖关系。
14.根据权利要求12所述的方法,其特征在于,所述根据所述多个通道之间的依赖关系确定无效通道描述,包括:
根据所述通道和所述资源之间的依赖关系,生成资源流向图,所述资源流向图的节点对应资源描述和通道描述;
以结束通道描述对应的节点为起点,对所述资源流向图进行遍历;
若存在未被遍历的节点,则将所述未被遍历的节点对应的通道描述确定为无效通道描述。
15.一种数据处理装置,其特征在于,包括:
获取模块,用于获取渲染管线描述;所述渲染管线描述包括通道描述、资源描述以及所述通道描述对应的通道与所述资源描述对应的资源之间的依赖关系;
确定模块,用于基于所述通道和所述资源之间的依赖关系,对所述渲染管线描述进行依赖分析处理,确定所述渲染管线描述包含的无效描述数据,所述无效描述数据包括无效通道描述以及无效资源描述中的任一种或两种;
剔除模块,用于将所述无效描述数据从所述渲染管线描述中剔除,得到目标渲染管线描述;所述目标渲染管线描述包括有效通道描述和有效资源描述,所述有效资源描述包括所述有效资源在所述有效通道内的使用状态,所述有效通道描述包含有效生产通道描述和有效消费通道描述,所述有效消费通道描述对应的有效消费通道包括第一消费通道和第二消费通道,所述有效消费通道消费所述有效生产通道描述对应的有效生产通道生产的有效资源;
生成模块,用于获取所述有效资源在所述第一消费通道以及所述第二消费通道的使用状态,若所述有效资源在所述第一消费通道和所述第二消费通道中的使用状态满足合并条件,则对所述有效资源的使用状态进行合并处理,得到合并状态,为所述有效生产通道和所述第一消费通道生成包含所述合并状态的资源屏障,所述有效资源在所述第一消费通道和所述第二消费通道中的使用状态均由所述资源屏障指示,基于所述有效资源描述和所述资源屏障创建有效资源,所述资源屏障用于记录资源在通道中的使用状态的迁移;
生成模块,用于基于所述有效通道描述创建有效通道,将所述资源屏障、所述有效资源和所述有效通道排布为渲染管线,输出所述渲染管线。
16.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供网络通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求1至14任一项所述的数据处理方法。
17.一种计算机可读存储介质,其特征在于,计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行权利要求1至14任一项所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210171815.0A CN114237916B (zh) | 2022-02-24 | 2022-02-24 | 一种数据处理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210171815.0A CN114237916B (zh) | 2022-02-24 | 2022-02-24 | 一种数据处理方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114237916A CN114237916A (zh) | 2022-03-25 |
CN114237916B true CN114237916B (zh) | 2022-05-17 |
Family
ID=80748029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210171815.0A Active CN114237916B (zh) | 2022-02-24 | 2022-02-24 | 一种数据处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114237916B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115439586B (zh) * | 2022-10-27 | 2023-03-24 | 腾讯科技(深圳)有限公司 | 数据处理方法、设备、存储介质及计算机程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426259A (zh) * | 2014-09-16 | 2016-03-23 | 辉达公司 | 用于传递api中的依赖关系的技术 |
WO2019086764A1 (en) * | 2017-11-06 | 2019-05-09 | Basemark Oy | Graphics engine resource management and allocation system |
WO2019086765A1 (en) * | 2017-11-06 | 2019-05-09 | Basemark Oy | Combined rendering and compute resource allocation management system |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10467722B2 (en) * | 2017-11-06 | 2019-11-05 | Basemark Oy | Combined rendering and computing resource allocation management system |
CN110969685B (zh) * | 2018-09-28 | 2024-03-12 | 苹果公司 | 使用渲染图的可定制渲染管线 |
CN111563031A (zh) * | 2020-03-24 | 2020-08-21 | 完美世界(北京)软件科技发展有限公司 | 一种游戏资源查验方法、系统、存储介质以及计算设备 |
CN112785676B (zh) * | 2021-02-08 | 2024-04-12 | 腾讯科技(深圳)有限公司 | 一种图像渲染方法、装置、设备和存储介质 |
-
2022
- 2022-02-24 CN CN202210171815.0A patent/CN114237916B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426259A (zh) * | 2014-09-16 | 2016-03-23 | 辉达公司 | 用于传递api中的依赖关系的技术 |
WO2019086764A1 (en) * | 2017-11-06 | 2019-05-09 | Basemark Oy | Graphics engine resource management and allocation system |
WO2019086765A1 (en) * | 2017-11-06 | 2019-05-09 | Basemark Oy | Combined rendering and compute resource allocation management system |
Also Published As
Publication number | Publication date |
---|---|
CN114237916A (zh) | 2022-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2022116759A1 (zh) | 图像渲染方法、装置、计算机设备和存储介质 | |
US11681564B2 (en) | Heterogeneous computing-based task processing method and software and hardware framework system | |
CN103999128B (zh) | 具有命令处理器的图形处理单元 | |
CN111639287A (zh) | 一种页面处理方法、装置、终端设备及可读存储介质 | |
US9830176B2 (en) | Methods, systems, and media for binary compatible graphics support in mobile operating systems | |
CN114880133A (zh) | 分布式计算系统,分布式计算系统中数据传输方法和装置 | |
US9021430B2 (en) | Method of determining multimedia architectural pattern, and apparatus and method for transforming single-core based architecture to multi-core based architecture | |
US11094036B2 (en) | Task execution on a graphics processor using indirect argument buffers | |
CN110908697A (zh) | 一种资源打包方法、装置、服务器及存储介质 | |
CN115350479B (zh) | 渲染处理方法、装置、设备及介质 | |
CN110457033A (zh) | 用于在gpu上生成动态踪迹数据的装置和方法 | |
CN110908707A (zh) | 一种资源打包方法、装置、服务器及存储介质 | |
CN114237916B (zh) | 一种数据处理方法及相关设备 | |
CN109634611B (zh) | 基于OpenGL的移动端三维模型ply文件解析与展示方法 | |
CN116662039B (zh) | 基于共享内存的工业信息并行检测方法、装置及介质 | |
US10198784B2 (en) | Capturing commands in a multi-engine graphics processing unit | |
CN113743573A (zh) | 用于访问和利用压缩数据及其状态信息的技术 | |
CN114647548A (zh) | 一种日志生成方法及装置 | |
CN114637499B (zh) | 可视化组件处理方法、装置、设备及介质 | |
CN115167822A (zh) | 分支代码合并方法、装置、设备和存储介质 | |
CN114827186A (zh) | 云应用处理方法和系统 | |
CN110960858B (zh) | 一种游戏资源的处理方法、装置、设备及存储介质 | |
CN114247138A (zh) | 图像渲染方法、装置、设备及存储介质 | |
US11714614B2 (en) | Code generation tool for cloud-native high-performance computing | |
US11055812B1 (en) | Opportunistic launch of idempotent geometry stage render operations |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40071408 Country of ref document: HK |