CN109213607B - 一种多线程渲染的方法和装置 - Google Patents

一种多线程渲染的方法和装置 Download PDF

Info

Publication number
CN109213607B
CN109213607B CN201710524166.7A CN201710524166A CN109213607B CN 109213607 B CN109213607 B CN 109213607B CN 201710524166 A CN201710524166 A CN 201710524166A CN 109213607 B CN109213607 B CN 109213607B
Authority
CN
China
Prior art keywords
rendering
command
instructions
thread
sub
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
CN201710524166.7A
Other languages
English (en)
Other versions
CN109213607A (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.)
Guangzhou Chengshi Animation Technology Co.,Ltd.
Yami Technology Guangzhou Co ltd
Original Assignee
Wuhan Douyu Network Technology 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201710524166.7A priority Critical patent/CN109213607B/zh
Publication of CN109213607A publication Critical patent/CN109213607A/zh
Application granted granted Critical
Publication of CN109213607B publication Critical patent/CN109213607B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Advance Control (AREA)
  • Image Generation (AREA)

Abstract

本发明实施例提供了一种多线程渲染的方法和装置,用于实现提高渲染效率的技术效果。所述方法包括:在入口接口中创建命令执行队列;在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;创建与N个所述命令列表一一对应的N个渲染子线程;通过N个所述渲染子线程向N个所述命令列表提交渲染指令;当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。

Description

一种多线程渲染的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种多线程渲染的方法和装置。
背景技术
直接三维Direct 3D是由微软公司所制定的3D规格界面,与Windows 95和WindowsNT操作系统兼容性好,可绕过图形显示接口直接进行支持接口的各种硬件的底层操作。然而,相关技术在利用Direct 3D进行游戏编程时,通常使用单线程渲染,即所有的绘制指令操作都只能在一个线程中执行。这对于大型的游戏或者实时性要求很高的游戏而言,单线程渲染的效率是达不到期望的。
发明内容
本发明实施例提供了一种多线程渲染的方法和装置,用于实现提高渲染效率的技术效果。
第一方面,本发明提供了一种多线程渲染的方法,包括:
在入口接口中创建命令执行队列;
在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;
创建与N个所述命令列表一一对应的N个渲染子线程;
通过N个所述渲染子线程向N个所述命令列表提交渲染指令;
当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。
可选的,所述方法还包括:
在每个所述渲染子线程中创建信号事件;
如果所述渲染子线程未完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为无信号状态;
如果所述渲染子线程完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为有信号状态。
可选的,所述方法还包括:
如果所述渲染主线程监测到N个所述信号事件均为所述有信号状态,确定N个所述命令列表的渲染指令提交完成。
可选的,在通过N个所述渲染子线程向N个所述命令列表提交渲染指令之前,所述方法还包括:
获得每个所述命令列表所要对应实现的渲染功能的渲染参数;
基于所述渲染参数生成所述渲染指令。
第二方面,本发明提供了一种多线程渲染的装置,包括:
第一创建模块,用于在入口接口中创建命令执行队列;
第二创建模块,用于在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;
第三创建模块,用于创建与N个所述命令列表一一对应的N个渲染子线程;
提交模块,用于通过N个所述渲染子线程向N个所述命令列表提交渲染指令;
执行模块,用于当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。
可选的,所述装置还包括:
第四创建模块,用于在每个所述渲染子线程中创建信号事件;
第一设置模块,用于如果所述渲染子线程未完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为无信号状态;
第二设置模块,用于如果所述渲染子线程完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为有信号状态。
可选的,所述装置还包括:
确定模块,用于如果所述渲染主线程监测到N个所述信号事件均为所述有信号状态,确定N个所述命令列表的渲染指令提交完成。
可选的,所述装置还包括:
获得模块,用于在通过N个所述渲染子线程向N个所述命令列表提交渲染指令之前,获得每个所述命令列表所要对应实现的渲染功能的渲染参数;
生成模块,用于基于所述渲染参数生成所述渲染指令。
第三方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一项所述方法的步骤。
第四方面,本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面任一项所述方法的步骤。
本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
在本发明实施例的技术方案中,首先在入口接口中创建一个命令执行队列,然后在所述命令执行队列中创建N个命令列表,N为大于等于2的整数,接着创建与N个所述命令列表一一对应的N个渲染子线程,并通过N个所述渲染子线程向N个所述命令列表提交渲染指令,当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。所以,通过N个所述渲染子线程同时向N个所述命令列表提交所述渲染指令,所述命令执行队列再执行N个所述命令列表中的所述渲染指令,那么,相较于现有技术通过单线程提交并执行相同数量的指令,本发明实施例减少了渲染指令提交和执行用时,所以提高了渲染效率。
附图说明
图1为本发明实施例中多线程渲染的方法流程图;
图2为本发明实施例中多线程渲染的装置结构示意图;
图3为本发明实施例中计算机设备的结构示意图。
具体实施方式
本发明实施例提供了一种多线程渲染的方法和装置,用于实现提高渲染效率的技术效果。
为了解决上述技术问题,本发明提供的技术方案总体思路如下:
在本发明实施例的技术方案中,首先在入口接口中创建一个命令执行队列,然后在所述命令执行队列中创建N个命令列表,N为大于等于2的整数,接着创建与N个所述命令列表一一对应的N个渲染子线程,并通过N个所述渲染子线程向N个所述命令列表提交渲染指令,当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。所以,通过N个所述渲染子线程同时向N个所述命令列表提交所述渲染指令,所述命令执行队列再执行N个所述命令列表中的所述渲染指令,那么,相较于现有技术通过单线程提交并执行相同数量的指令,本发明实施例减少了渲染指令提交和执行用时,所以提高了渲染效率。
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本发明第一方面提供了一种多线程渲染的方法,请参考图1,为本发明实施例中多线程渲染的方法流程图,该方法包括:
S101:在入口接口中创建命令执行队列;
S102:在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;
S103:创建与N个所述命令列表一一对应的N个渲染子线程;
S104:通过N个所述渲染子线程向N个所述命令列表提交渲染指令;
S105:当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。
具体来讲,本发明实施例中的入口接口具体为Direct 3D中的ID3D12Device接口。ID3D12Device接口是对一块显卡的抽象,可以用来创建资源接口,创建命令列表,创建命令执行队列等。当需要进行多线程渲染时,渲染主线程调用API(应用程序编程接口,Application Programming Interface)函数D3D12CreateDevice创建一ID3D12Device接口。
在S101中,为了能够执行渲染指令,渲染主线程在入口接口中创建一个命令执行队列。具体来讲,命令执行队列ID3D12CommandQueue用于执行命令列表中所有缓存的渲染指令。具体地,命令执行队列ID3D12CommandQueue在渲染主线程中执行。而渲染主线程为系统原生线程,不需要单独创建。在创建命令执行队列ID3D12CommandQueue时,调用ID3D12Device入口接口的CreateCommandQueue方法创建一个命令执行队列ID3D12CommandQueue。
接下来,为了实现多线程渲染,在S102中,在命令执行队列ID3D12CommandQueue中创建N个命令列表。具体来讲,N为大于等于2的整数,例如2、3、5或10等,本发明所属领域的普通技术人员可以根据实际需要设置命令列表的数量,本发明不做具体限制。
在Direct3D9之前,之所以不能进行多线程渲染,其中一个原因就是所有的渲染指令都是通过Direct3D9的入口接口串行地提交。如果将Direct3D9的入口接口用于多个线程提交渲染指令,则可能会因为多线程导致程序崩溃。而对于Direc3D12,由于图形框架的改变,便有了一个新的接口,该接口便是本发明实施例中的ID3D12GraphicsCommandList命令列表接口。
ID3D12GraphicsCommandList命令列表用于将渲染指令存储到该命令列表中等待执行。ID3D12GraphicsCommandList命令列表还用于接收开发人员设置的顶点、视口、裁剪区域、绘制图元等渲染参数。并且,ID3D12GraphicsCommandList命令列表还有一个较为突出的优点在于:ID3D12GraphicsCommandList命令列表中渲染指令的执行是异步的。换言之,提交到ID3D12GraphicsCommandList命令列表的渲染命令并不是立即执行,而是先将所有的渲染指令缓存到该命令列表中,等待将来在合适的时机再执行。
鉴于此,本发明实施例在命令执行队列ID3D12CommandQueue中创建N个ID3D12GraphicsCommandList命令列表来异步提交渲染命令。具体来讲,渲染主线程调用入口接口的CreateCommandList方法创建N个ID3D12GraphicsCommandList命令列表。
接下来,在S103中,为了能够同时在N个命令列表中存储渲染指令,渲染主线程创建N个渲染子线程。具体来讲,本发明实施例中的N个渲染子线程与N个ID3D12GraphicsCommandList命令列表一一对应,每个渲染子线程用于向对应的命令列表提交渲染命令。在具体实现过程中,可以通过调用API函数CreateThread来创建N个不同的渲染子线程。
创建完成的渲染子线程需等待渲染主线程的启动信号才可以启动。在具体实现过程中,渲染主线程可以基于用户的触发操作向N个渲染子线程发送启动信号,也可以在当前时间到的预设时间时向N个渲染子线程发送启动信号,还可以在确定N个渲染子线程创建完成后立刻向N个渲染子线程发送启动信号,本发明不做具体限制。
并且,在具体实现过程中,渲染主线程可以同时向N个渲染子线程发送启动信号,进而同时启动N个渲染子线程运行,或者,也可以按照需要在不同的时刻向不同的一个或多个渲染子线程发送启动信号,进而分时启动N个渲染子线程。
接下来,在S104中,通过N个渲染子线程向N个命令列表分别提交渲染指令。具体来讲,在一种实施方式中,N个渲染子线程可以向每个命令列表提交数量一致的渲染指令。举例来说,最终需要执行的渲染指令共有100条,预先将该100条渲染指令等分为10个集合,每个集合包括10条渲染指令,并创建10个命令列表和10个渲染子线程,每个渲染子线程向其中一个命令列表提交一个集合的10条渲染指令。或者,在另一种实施方式中,N个渲染子线程也可以向每个命令列表提交数量不完全一致的渲染指令。还是以100条渲染指令为例来说明,预先将该100条渲染指令随机地划分为10个集合,每个集合包括任意数量(不为零)的渲染指令,并创建10个命令列表和10个渲染子线程,每个渲染子线程向其中一个命令列表提交一个集合的渲染指令。或者,为了便于对渲染指令进行维护,在另一种实施方中,每个渲染子线程向对应的命令列表提交用于实现一个功能或者多个相近功能的渲染指令。例如,还是以100条渲染指令为例来说明,预先按照渲染指令能够实现的功能将该100条渲染指令类聚为10个集合,该10个集合分别用于实现时间变换功能、光照操作功能和纹理加载功能等,每个集合包括任意数量(不为零)的渲染指令,并创建10个命令列表和10个渲染子线程,每个渲染子线程向其中一个命令列表提交一个集合的渲染指令。
在具体实现过程中,包括但不限于上述实施方式。本发明所属领域的普通技术人员可以根据实际进行选择,本发明不做具体限制。
接下来,在S105中,当N个渲染子线程均完成了渲染命令的提交,那么命令执行队列ID3D12CommandQueue则开始执行每个命令列表中的每条渲染指令以进行渲染。具体来讲,渲染主线程调用命令执行队列ID3D12CommandQueue的ExecuteCommandList方法执行N个ID3D12CommandList命令列表中的渲染指令绘制图像,将绘制的图像缓存在缓冲区内。然后,渲染主线程进一步调用IDXGISwapChain接口将缓冲区内的图像显示在显示区域中。其中,IDXGISwapChain接口代表一个交换链接口,该接口的功能包括利用该接口的Present方法,将后台缓冲区中的图像提交到前台显示。
由上述描述可以看出,通过N个渲染子线程同时向N个命令列表提交渲染指令,命令执行队列再执行N个命令列表中的渲染指令,那么,相较于现有技术通过单线程提交并执行相同数量的指令,本发明实施例减少了渲染指令提交和执行用时,所以就提高了渲染效率。
可选的,在本发明实施例中,还进一步包括:
在每个所述渲染子线程中创建信号事件;
如果所述渲染子线程未完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为无信号状态;
如果所述渲染子线程完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为有信号状态。
具体来讲,在Windows操作系统中,有一种内核对象叫做信号事件对象Event,用于线程的同步与互斥。信号事件对象通常有两种状态,一种是有信号状态,一种是无信号状态。当一个线程去等待一个有信号状态的信号事件时,等待条件能够得到满足,该线程就会继续执行;而当一个线程去等待一个无信号状态的信号事件时,等待条件不能得到满足,只有当该信号事件变为有信号状态时,该线程才会被唤醒,从而继续执行。
因此,为了便于N个渲染子线程向渲染主线程表示是否完成渲染命令的提交,本发明进一步还会在每个渲染子线程中创建一个信号事件。具体来讲,通过调用API函数CreateEvent方法在每个渲染子线程中创建一个信号事件,共创建N个信号事件。并且,对于信号事件的状态,如果信号事件所在的渲染子线程尚未向对应的命令队列提交完所有的渲染指令,渲染子线程将该信号事件的状态设置为无信号状态。如果信号事件所在的渲染子线程向对应的命令队列提交完所有的渲染指令,渲染子线程将该信号事件的状态设置为有信号状态。
具体来讲,如果渲染子线程提交完所有渲染指令,那么该渲染子线程则调用对于的ID3D12GraphicsCommandList命令列表的close方法将ID3D12GraphicsCommandList命令列表关闭。信号事件在确定ID3D12GraphicsCommandList命令列表关闭后,则切换为有信号状态。
在本发明实施例中,还进一步包括:
如果所述渲染主线程监测到N个所述信号事件均为所述有信号状态,确定N个所述命令列表的渲染指令提交完成。
渲染主线程对N个渲染子线程的N个信号事件进行监测,如果监测到N个信号事件均为有信号状态,则渲染主线程被唤醒,调用ID3D12GraphicsCommandList命令列表开始执行各个命令队列中的渲染指令。而如果监测到N个信号事件中存在无信号状态的信号事件,则渲染主线程不被唤醒。
进一步,在具体实现过程中,N个渲染子线程还可以进一步向渲染主线程发送触发信号,进而,渲染主线程在监测到N个信号事件均为有信号状态,且收到N个渲染子线程发送的触发信号后,调用命令执行队列ID3D12CommandQueue开始执行各个ID3D12GraphicsCommandList命令列表中的渲染指令。
更进一步,在具体实现过程中,如果命令执行队列ID3D12CommandQueue执行完成所有的渲染指令后,还可以进一步向N个渲染子线程发送完成信号,进而N个渲染子线程基于完成信号将对应的信号事件切换为无信号状态并打开对应的ID3D12GraphicsCommandList命令列表,重现等待渲染主线程发送启动信号,进而重新向各个ID3D12GraphicsCommandList命令列表提交新的渲染指令。
可选的,在本本发明实施例中,N个渲染子线程向N个命令列表提交渲染指令之前,还可以进一步包括:
获得每个所述命令列表所要对应实现的渲染功能的渲染参数;
基于所述渲染参数生成所述渲染指令。
在本发明实施例中,一种实施方式为直接接收编写完成的渲染命令。或者,如前文介绍的,ID3D12GraphicsCommandList命令列表可以接收开发人员输入的渲染参数,例如顶点参数和视口参数等,因此,在另一种实施方式中,还可以基于开发人员输入的渲染参数自行生成渲染指令。
具体来讲,首先获取开发人员在ID3D12GraphicsCommandList命令列表中输入的对应实现渲染功能的渲染参数,然后基于渲染参数生成渲染指令。
举例来说,获取指导渲染顶点的顶点参数(x1,y1),进一步生成在(x1,y1)点渲染顶点的渲染指令。获取图元参数圆形,进一步生成渲染圆形图元的渲染指令。获取实现渲染大小功能的高度参数h1和宽度参数w1,进一步生成绘制h1高和w1宽的渲染指令。更多的例子这里就不再一一赘述了。
由上述描述可知,通过获得每个ID3D12GraphicsCommandList命令列表的渲染参数,并进一步基于渲染参数生成渲染指令,使得开发人员可以不需要编写所有的渲染命令,输入相应的渲染参数即可,故而方便了开发人员,提高了开发效率。
基于与前述实施例中多线程渲染的方法同样的发明构思,本发明第二方面还提供一种多线程渲染的装置,如图2所示,包括:
第一创建模块101,用于在入口接口中创建命令执行队列;
第二创建模块102,用于在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;
第三创建模块103,用于创建与N个所述命令列表一一对应的N个渲染子线程;
提交模块104,用于通过N个所述渲染子线程向N个所述命令列表提交渲染指令;
执行模块105,用于当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。
进一步,所述装置还包括:
第四创建模块,用于在每个所述渲染子线程中创建信号事件;
第一设置模块,用于如果所述渲染子线程未完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为无信号状态;
第二设置模块,用于如果所述渲染子线程完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为有信号状态。
更进一步,所述装置还包括:
确定模块,用于如果所述渲染主线程监测到N个所述信号事件均为所述有信号状态,确定N个所述命令列表的渲染指令提交完成。
更进一步,所述装置还包括:
获得模块,用于在通过N个所述渲染子线程向N个所述命令列表提交渲染指令之前,获得每个所述命令列表所要对应实现的渲染功能的渲染参数;
生成模块,用于基于所述渲染参数生成所述渲染指令。
前述图1实施例中的多线程渲染的方法的各种变化方式和具体实例同样适用于本实施例的多线程渲染的装置,通过前述对多线程渲染的方法的详细描述,本领域技术人员可以清楚的知道本实施例中多线程渲染的装置的实施方法,所以为了说明书的简洁,在此不再详述。
基于与前述实施例中多线程渲染的方法同样的发明构思,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文所述多线程渲染的方法的任一方法的步骤。
基于与前述实施例中多线程渲染的方法同样的发明构思,本发明还提供一种计算机设备,如图3所示,包括存储器304、处理器302及存储在存储器304上并可在处理器302上运行的计算机程序,所述处理器302执行所述程序时实现前文所述多线程渲染的方法的任一方法的步骤。
其中,在图3中,总线架构(用总线300来代表),总线300可以包括任意数量的互联的总线和桥,总线300将包括由处理器302代表的一个或多个处理器和存储器304代表的存储器的各种电路链接在一起。总线300还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口306在总线300和接收器301和发送器303之间提供接口。接收器301和发送器303可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。
处理器302负责管理总线300和通常的处理,而存储器304可以被用于存储处理器302在执行操作时所使用的数据。
本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
在本发明实施例的技术方案中,首先在入口接口中创建一个命令执行队列,然后在所述命令执行队列中创建N个命令列表,N为大于等于2的整数,接着创建与N个所述命令列表一一对应的N个渲染子线程,并通过N个所述渲染子线程向N个所述命令列表提交渲染指令,当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染。所以,通过N个所述渲染子线程同时向N个所述命令列表提交所述渲染指令,所述命令执行队列再执行N个所述命令列表中的所述渲染指令,那么,相较于现有技术通过单线程提交并执行相同数量的指令,本发明实施例减少了渲染指令提交和执行用时,所以提高了渲染效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (6)

1.一种多线程渲染的方法,其特征在于,包括:
调用渲染主线程在入口接口中创建命令执行队列;其中,所述入口接口为Direct 3D中的ID3D12Device接口;
在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;其中,所述命令列表为ID3D12GraphicsCommandList命令列表;
创建与N个所述命令列表一一对应的N个渲染子线程;
通过N个所述渲染子线程向N个所述命令列表提交渲染指令;
当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染;
所述在入口接口中创建命令执行队列,包括:
调用所述ID3D12Device接口的CreateCommandQueue方法创建所述命令执行队列;
所述方法还包括:
在每个所述渲染子线程中创建信号事件;
如果所述渲染子线程未完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为无信号状态;
如果所述渲染子线程完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为有信号状态;
所述方法还包括:
如果所述渲染主线程监测到N个所述信号事件均为所述有信号状态,确定N个所述命令列表的渲染指令提交完成。
2.如权利要求1所述的方法,其特征在于,在通过N个所述渲染子线程向N个所述命令列表提交渲染指令之前,所述方法还包括:
获得每个所述命令列表所要对应实现的渲染功能的渲染参数;
基于所述渲染参数生成所述渲染指令。
3.一种多线程渲染的装置,其特征在于,包括:
第一创建模块,用于调用渲染主线程在入口接口中创建命令执行队列;其中,所述入口接口为Direct 3D中的ID3D12Device接口;还用于调用所述ID3D12Device接口的CreateCommandQueue方法创建所述命令执行队列;
第二创建模块,用于在所述命令执行队列中创建N个命令列表,N为大于等于2的整数;其中,所述命令列表为ID3D12GraphicsCommandList命令列表;
第三创建模块,用于创建与N个所述命令列表一一对应的N个渲染子线程;
提交模块,用于通过N个所述渲染子线程向N个所述命令列表提交渲染指令;
执行模块,用于当N个所述命令列表的渲染指令提交完成后,通过所述命令执行队列执行N个所述命令列表的渲染指令进行渲染;
所述装置还包括:
第四创建模块,用于在每个所述渲染子线程中创建信号事件;
第一设置模块,用于如果所述渲染子线程未完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为无信号状态;
第二设置模块,用于如果所述渲染子线程完成向对应的所述命令列表提交所有渲染指令,将所述渲染子线程对应的所述信号事件设置为有信号状态;
所述装置还包括:
确定模块,用于如果所述渲染主线程监测到N个所述信号事件均为所述有信号状态,确定N个所述命令列表的渲染指令提交完成。
4.如权利要求3所述的装置,其特征在于,所述装置还包括:
获得模块,用于在通过N个所述渲染子线程向N个所述命令列表提交渲染指令之前,获得每个所述命令列表所要对应实现的渲染功能的渲染参数;
生成模块,用于基于所述渲染参数生成所述渲染指令。
5.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1或2所述方法的步骤。
6.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1或2所述方法的步骤。
CN201710524166.7A 2017-06-30 2017-06-30 一种多线程渲染的方法和装置 Active CN109213607B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710524166.7A CN109213607B (zh) 2017-06-30 2017-06-30 一种多线程渲染的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710524166.7A CN109213607B (zh) 2017-06-30 2017-06-30 一种多线程渲染的方法和装置

Publications (2)

Publication Number Publication Date
CN109213607A CN109213607A (zh) 2019-01-15
CN109213607B true CN109213607B (zh) 2021-07-23

Family

ID=64961102

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710524166.7A Active CN109213607B (zh) 2017-06-30 2017-06-30 一种多线程渲染的方法和装置

Country Status (1)

Country Link
CN (1) CN109213607B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110362375A (zh) * 2019-07-11 2019-10-22 广州虎牙科技有限公司 桌面数据的显示方法、装置、设备和存储介质
CN111131910B (zh) * 2020-01-02 2022-04-12 广州虎牙科技有限公司 弹幕实现方法、装置、电子设备和可读存储介质
CN113051082A (zh) * 2021-03-02 2021-06-29 长沙景嘉微电子股份有限公司 软件硬件数据同步方法、装置、电子设备和存储介质
CN113515396B (zh) * 2021-07-09 2024-01-30 北京字节跳动网络技术有限公司 图形渲染方法、装置、电子设备与存储介质
WO2023044877A1 (zh) * 2021-09-26 2023-03-30 厦门雅基软件有限公司 一种渲染任务处理方法、装置、电子设备及存储介质
CN114247138B (zh) * 2022-02-25 2022-05-13 腾讯科技(深圳)有限公司 图像渲染方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577158A (zh) * 2012-07-18 2014-02-12 阿里巴巴集团控股有限公司 数据处理方法与装置
CN103942823A (zh) * 2014-02-27 2014-07-23 优视科技有限公司 一种游戏引擎渲染方法及装置
CN105204881A (zh) * 2014-06-25 2015-12-30 中兴通讯股份有限公司 在Android系统上运行J2me应用程序的方法及设备
CN106340055A (zh) * 2016-08-19 2017-01-18 江苏电力信息技术有限公司 一种基于多线程的OpenGL快速绘制方法
CN106484348A (zh) * 2016-09-20 2017-03-08 Tcl集团股份有限公司 一种基于同步信号的动画绘制方法及系统

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7975272B2 (en) * 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
US20110227934A1 (en) * 2010-03-19 2011-09-22 Microsoft Corporation Architecture for Volume Rendering
US8954986B2 (en) * 2010-12-17 2015-02-10 Intel Corporation Systems and methods for data-parallel processing
KR101399473B1 (ko) * 2012-08-13 2014-05-28 (주)투비소프트 다중 프로세싱을 이용한 렌더링 처리 장치 및 방법
US20140092087A1 (en) * 2012-09-28 2014-04-03 Takayuki Kazama Adaptive load balancing in software emulation of gpu hardware
CN103399729B (zh) * 2013-06-28 2016-04-27 广州市动景计算机科技有限公司 一种HTML5 Canvas应用处理方法、装置及处理器
CN104102488B (zh) * 2014-07-18 2017-09-22 无锡梵天信息技术股份有限公司 一种基于多线程并行化的3d引擎系统
CN105389159A (zh) * 2014-09-03 2016-03-09 优视科技有限公司 图片渲染方法、装置和移动终端
CN106600656A (zh) * 2016-11-24 2017-04-26 合肥中科云巢科技有限公司 图形渲染方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577158A (zh) * 2012-07-18 2014-02-12 阿里巴巴集团控股有限公司 数据处理方法与装置
CN103942823A (zh) * 2014-02-27 2014-07-23 优视科技有限公司 一种游戏引擎渲染方法及装置
CN105204881A (zh) * 2014-06-25 2015-12-30 中兴通讯股份有限公司 在Android系统上运行J2me应用程序的方法及设备
CN106340055A (zh) * 2016-08-19 2017-01-18 江苏电力信息技术有限公司 一种基于多线程的OpenGL快速绘制方法
CN106484348A (zh) * 2016-09-20 2017-03-08 Tcl集团股份有限公司 一种基于同步信号的动画绘制方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"OpenProbe地震体数据并行渲染机制及实现";杨帆;《中国优秀硕士学位论文全文数据库 信息科技辑》;20150915(第09期);第I138-1400页 *
"UE4里的渲染线程";天天不在;《https://www.cnblogs.com/zhouxin/p/6362505.html》;20170203;第1-4页 *

Also Published As

Publication number Publication date
CN109213607A (zh) 2019-01-15

Similar Documents

Publication Publication Date Title
CN109213607B (zh) 一种多线程渲染的方法和装置
KR101900172B1 (ko) 가상화 환경에서의 지능형 gpu 스케줄링
US9286119B2 (en) System, method, and computer program product for management of dependency between tasks
CN106575228B (zh) 图形处理中的渲染目标命令重新排序
KR101563098B1 (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
JP6390021B2 (ja) グラフィック処理ユニットのためのワークロードバッチサブミットメカニズム
US9256623B2 (en) System, method, and computer program product for scheduling tasks associated with continuation thread blocks
US10970129B2 (en) Intelligent GPU scheduling in a virtualization environment
US7697007B1 (en) Predicated launching of compute thread arrays
EP3646177B1 (en) Early virtualization context switch for virtualized accelerated processing device
US20110276966A1 (en) Managing task dependency within a data processing system
US10861125B2 (en) Preparing and executing command streams in data processing systems
US11830101B2 (en) Graphics processors
US10453243B2 (en) Primitive level preemption using discrete non-real-time and real time pipelines
CN109254826A (zh) 虚拟化加速处理装置的挂起检测
US20120218278A1 (en) Parallelized Definition and Display of Content in a Scripting Environment
JP7245179B2 (ja) 仮想化デバイス用のファームウェアの変更
CN109426529B (zh) 基于x窗口系统图形绘制的方法、装置及终端
CN115861510A (zh) 对象渲染方法、装置、电子设备、存储介质及程序产品
CN115775198A (zh) 多核gpu中的重叠几何形状处理
US20230094115A1 (en) Load multiple primitives per thread in a graphics pipeline
US20230169621A1 (en) Compute shader with load tile
EP3866007B1 (en) Intelligent gpu scheduling in a virtualization environment

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230418

Address after: Room 801, No. 85, Kefeng Road, Huangpu District, Guangzhou, Guangdong 510000 (office only)

Patentee after: Yami Technology (Guangzhou) Co.,Ltd.

Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building

Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd.

Effective date of registration: 20230418

Address after: Room 301, Building 15, No. 644 Shibei Industrial Road, Dashi Street, Panyu District, Guangzhou City, Guangdong Province, 510000

Patentee after: Guangzhou Chengshi Animation Technology Co.,Ltd.

Address before: Room 801, No. 85, Kefeng Road, Huangpu District, Guangzhou, Guangdong 510000 (office only)

Patentee before: Yami Technology (Guangzhou) Co.,Ltd.

PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: A method and device for multi-threaded rendering

Granted publication date: 20210723

Pledgee: China Co. truction Bank Corp Guangzhou Panyu branch

Pledgor: Guangzhou Chengshi Animation Technology Co.,Ltd.

Registration number: Y2024980024092