本公开涉及图像渲染,尤其涉及一种图像渲染方法、图形处理器、图形处理系统、装置及设备。
背景技术:
1、纹理采样是图像渲染流程中的重要环节,而由于纹理数据的数据量较大,通常难以将全部纹理数据均加载至显存。相关技术中,cpu上运行的应用程序为了尽可能将gpu实际需要使用的纹理数据加载至显存,应用程序会预测摄像机位置,并根据预测的摄像机位置情况,将可能需要渲染的对象对应的纹理数据加载至显存。
2、然而,一方面如果应用程序预测的摄像机位置不准确,则可能导致gpu在进行纹理采样时采样到没有被加载到显存的纹理数据,从而产生缺页错误。另一方面由于在渲染过程中,gpu需要对待渲染对象的顶点进行坐标转换,而应用程序无法得知gpu坐标变换后的结果,因此应用程序需要将gpu可能使用的纹理数据都加载至显存,会造成一定的显存空间浪费。
技术实现思路
1、本公开的目的是提供一种图像渲染方法、图形处理器、图形处理系统、装置及设备,旨在避免缺页错误和减少显存空间的浪费。
2、根据本公开的一个方面,提供一种图像渲染方法,应用于gpu,该方法包括:
3、接收cpu提交的绘图命令,获取绘图命令对应的状态信息;
4、在状态信息表示不需要执行纹理采样的情况下,对待渲染对象执行几何处理和属性插值计算以确定每个片元的多个属性信息,并将每个片元的多个属性信息存储至显存,以及向cpu发送反馈信息,使cpu根据属性信息中包括的纹理索引信息将相应的纹理数据加载至显存;其中,多个属性信息包括纹理索引信息;
5、在状态信息表示需要执行纹理采样的情况下,从显存中读取纹理数据和每个片元的多个属性信息,并将读取的纹理数据和每个片元的多个属性信息输入片元着色器进行处理。
6、本公开一种可行的实现方式中,状态信息包含采样标识,采样标识用于表示是否需要执行纹理采样;在获取绘图命令对应的状态信息后,方法还包括:
7、根据状态信息中的采样标识,判断是否需要执行纹理采样。
8、本公开一种可行的实现方式中,在向cpu发送反馈信息之前,方法还包括:
9、将每个片元的多个属性信息在显存中的存储地址写入状态信息;
10、根据绘图命令携带的目标地址,将写入存储地址后的状态信息存入显存。
11、本公开一种可行的实现方式中,从显存中读取纹理数据和每个片元的多个属性信息,包括:
12、根据状态信息中的纹理显存地址,从显存中读取纹理数据;其中,纹理显存地址是cpu根据纹理数据在显存中的地址写入状态信息中的;
13、根据状态信息中的属性信息存储地址,从显存中读取每个片元的多个属性信息。
14、本公开一种可行的实现方式中,绘图命令对应的状态信息为多个,每个状态信息分别对应一个待渲染对象,每个状态信息包含采样标识,每个状态信息包含的采样标识用于表征是否需要对相应待渲染对象执行纹理采样;
15、在获取绘图命令对应的状态信息后,方法还包括:
16、根据每个状态信息中的采样标识,确定是否需要对相应待渲染对象执行纹理采样;
17、在状态信息表示不需要执行纹理采样的情况下,对待渲染对象执行几何处理和属性插值计算以确定每个片元的多个属性信息,包括:
18、在绘图命令对应有表示不需要执行纹理采样的状态信息的情况下,针对该状态信息对应的待渲染对象执行几何处理和属性插值计算,以确定每个片元的多个属性信息。
19、本公开一种可行的实现方式中,在状态信息表示需要执行纹理采样的情况下,从显存中读取纹理数据和每个片元的多个属性信息,包括:
20、在绘图命令对应有表示需要执行纹理采样的状态信息的情况下,针对该状态信息对应的待渲染对象,从显存中读取该待渲染对象对应的纹理数据和每个片元的多个属性信息。
21、本公开一种可行的实现方式中,在状态信息表示不需要执行纹理采样的情况下,对待渲染对象执行几何处理和属性插值计算以确定每个片元的多个属性信息,并将每个片元的多个属性信息存储至显存,包括:
22、在状态信息表示不需要执行纹理采样的情况下,对待渲染对象执行几何处理和属性插值计算以确定每个片元的多个属性信息;
23、对多个片元进行深度检测,以保留未被遮挡的片元;
24、将未被遮挡的片元的多个属性信息存储至显存。
25、根据本公开的另一个方面,提供一种图形处理器,包括:
26、命令接收模块,用于接收cpu提交的绘图命令;
27、状态信息获取模块,用于获取绘图命令对应的状态信息;
28、几何处理模块,用于在状态信息表示不需要执行纹理采样的情况下,对待渲染对象执行几何处理;
29、插值计算模块,用于在状态信息表示不需要执行纹理采样的情况下,对待渲染对象执行属性插值计算以确定每个片元的多个属性信息,并将每个片元的多个属性信息存储至显存,以及向cpu发送反馈信息,使cpu根据纹理索引信息将相应的纹理数据加载至显存;其中,多个属性信息包括纹理索引信息;
30、纹理采样器,用于在状态信息表示需要执行纹理采样的情况下,从显存中读取纹理数据和每个片元的多个属性信息,并将读取的纹理数据和每个片元的多个属性信息输入片元着色器进行处理。
31、本公开一种可行的实现方式中,状态信息包含的采样标识,采样标识用于表征是否需要执行纹理采样,纹理采样器还用于根据状态信息中的采样标识,判断是否需要执行纹理采样。
32、本公开一种可行的实现方式中,插值计算模块在向cpu发送反馈信息之前,还用于将每个片元的多个属性信息在显存中的存储地址写入状态信息,根据绘图命令携带的目标地址,将写入存储地址后的状态信息存入显存。
33、本公开一种可行的实现方式中,纹理采样器在从显存中读取纹理数据和每个片元的多个属性信息时,具体用于:
34、根据状态信息中的纹理显存地址,从显存中读取纹理数据;其中,纹理显存地址是cpu根据纹理数据在显存中的地址写入状态信息中的;
35、根据状态信息中的属性信息存储地址,从显存中读取每个片元的多个属性信息。
36、本公开一种可行的实现方式中,绘图命令对应的状态信息为多个,每个状态信息分别对应一个待渲染对象,每个状态信息包含采样标识,每个状态信息包含的采样标识用于表征是否需要对相应待渲染对象执行纹理采样;
37、纹理采样器还用于根据每个状态信息中的采样标识,确定是否需要对相应待渲染对象执行纹理采样;
38、几何处理模块在对待渲染对象执行几何处理时,具体用于在绘图命令对应有表示不需要执行纹理采样的状态信息的情况下,针对该状态信息对应的待渲染对象执行几何处理;
39、插值计算模块在对待渲染对象执行属性插值计算时,具体用于在绘图命令对应有表示不需要执行纹理采样的状态信息的情况下,针对该状态信息对应的待渲染对象执行属性插值计算。
40、本公开一种可行的实现方式中,纹理采样器在从显存中读取纹理数据和每个片元的多个属性信息时,具体用于在绘图命令对应有表示需要执行纹理采样的状态信息的情况下,针对该状态信息对应的待渲染对象,从显存中读取该待渲染对象对应的纹理数据和每个片元的多个属性信息。
41、本公开一种可行的实现方式中,图形处理器还包括:
42、深度检测模块,用于对多个片元进行深度检测,以保留未被遮挡的片元;
43、插值计算模块在将每个片元的多个属性信息存储至显存时,具体用于将未被遮挡的片元的多个属性信息存储至显存。
44、根据本公开的另一方面,还提供一种图形处理系统,该图形处理系统包括上述任一实施例中的图形处理器。
45、根据本公开的另一方面,还提供一种电子装置,该电子装置包括上述的图形处理系统。在一些使用场景下,该电子装置的产品形式体现为显卡;在另一些使用场景下,该电子装置的产品形式体现为cpu主板。
46、根据本公开的另一方面,还提供一种电子设备,该电子设备包括上述的电子装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、vr设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
47、根据本公开的另一方面,还提供一种图像渲染方法,该方法包括:
48、向gpu提交绘图命令,该绘图命令对应有用于表示不需要执行纹理采样的第一状态信息,使gpu根据对待渲染对象执行几何处理和属性插值计算以确定每个片元的多个属性信息,并将每个片元的多个属性信息存储至显存;其中,多个属性信息包括纹理索引信息;
49、响应于gpu的反馈信息,根据纹理索引信息,将相应的纹理数据加载至显存;
50、向gpu再次提交绘图命令,该绘图命令对应有用于表示需要执行纹理采样的第二状态信息,使gpu从显存中读取纹理数据和每个片元的多个属性信息,并将读取的纹理数据和每个片元的多个属性信息输入片元着色器进行处理。
51、本公开一种可行的实现方式中,在向gpu提交绘图命令之前,方法还包括:
52、配置第一状态信息,第一状态信息包含第一采样标识,第一采样标识用于表示不需要执行纹理采样。
53、本公开一种可行的实现方式中,在向gpu再次提交绘图命令之前,方法还包括:
54、将第一状态信息中的第一采样标识替换为第二采样标识,以获得第二状态信息,第二采样标识用于表示需要执行纹理采样;或者,配置第二状态信息,第二状态信息包含第二采样标识,第二采样标识用于表示需要执行纹理采样。
55、本公开一种可行的实现方式中,响应于gpu的反馈信息,根据纹理索引信息,将相应的纹理数据加载至显存,包括:
56、响应于gpu的反馈信息,根据第一状态信息中记录的属性信息存储地址,从显存中读取每个片元的多个属性信息,并根据多个属性信息中的纹理索引信息,将相应的纹理数据加载至显存。
57、本公开一种可行的实现方式中,在向gpu再次提交绘图命令之前,方法还包括:
58、将纹理数据在显存中的地址写入第二状态信息。
59、本公开一种可行的实现方式中,每次向gpu提交的绘图命令对应多个状态信息,多个状态信息中包括第一状态信息和第二状态信息,第一状态信息包含用于表示不需要执行纹理采样的第一采样标识,第二状态信息包含用于表示需要执行纹理采样的第二采样标识,每个状态信息分别对应一个待渲染对象;
60、在每次向gpu提交绘图命令之前,方法还包括:
61、将上一个绘图命令对应的第一状态信息中的第一采样标识替换为第二采样标识,以获得第二状态信息;
62、为新的待渲染对象配置第一状态信息,第一状态信息中的采样标识为第一采样标识;
63、将获得的第二状态信息和配置的第一状态信息作为当前绘图命令对应的多个状态信息。