发明内容
本发明解决的是纹理坐标的维度增加所带来的指令开销较大,编译器较为复杂的技术问题。
为解决上述技术问题,本发明提供一种多维纹理坐标采样方法,包括:接收纹理采样指令,并基于所述纹理采样指令获取初始纹理坐标;检测到所述纹理采样指令的附加指示符使能时,继续接收一条或多条辅助采样指令,直至所述辅助采样指令的结束指示符使能;基于所述一条或多条辅助采样指令获取后续纹理坐标;将所述初始纹理坐标以及所述后续纹理坐标进行组装并发射。
可选的,所述附加指示符使能时指示纹理坐标未发射结束,所述结束指示符使能时指示纹理坐标发射结束。
可选的,所述多维纹理坐标采样方法还包括:检测到所述附加指示符未使能时,发射所述初始纹理坐标。
可选的,所述纹理采样指令涉及的源寄存器与所述辅助采样指令涉及的源寄存器之间存在间隙,不同的辅助采样指令涉及的源寄存器之间存在间隙。
可选的,所述辅助采样指令的目的域为空,且所述辅助采样指令的源操作数为纹理坐标。
可选的,所述纹理采样指令承载有纹理坐标的维数,不同的维数对应不同的通用寄存器。
本发明还提供了一种指令编译方法,包括:生成纹理采样指令,所述纹理采样指令用于获取初始纹理坐标;所述纹理采样指令的附加指示符使能时,继续生成一条或多条辅助采样指令,所述辅助采样指令用于获取后续纹理坐标,最后一条辅助采样指令的结束指示符使能,其他辅助采样指令的结束指示符未使能;其中,所述初始纹理坐标和后续纹理坐标组装后形成用于单次纹理值计算的全部坐标。
本发明还提供了一种图形处理器,包括:调度执行核心,用于向纹理采样控制器发送纹理采样指令;且当所述纹理采样指令的附加指示符使能时,向所述纹理采样控制器发送辅助采样指令,直至所述辅助采样指令的结束指示符使能;所述纹理采样控制器,用于接收所述纹理采样指令,并基于所述纹理采样指令从通用寄存器中获取初始纹理坐标;检测到所述纹理采样指令的附加指示符使能时,继续接收一条或多条辅助采样指令,直至所述辅助采样指令的结束指示符使能;基于所述一条或多条辅助采样指令从所述通用寄存器中获取后续纹理坐标;将所述初始纹理坐标以及所述后续纹理坐标进行组装并发射至纹理协处理器;所述通用寄存器,其中存储有所述初始纹理坐标以及所述后续纹理坐标。
本发明还提供了一种指令编译装置,包括:第一生成单元,用于生成纹理采样指令,所述纹理采样指令用于获取初始纹理坐标;第二生成单元,用于在所述纹理采样指令的附加指示符使能时,继续生成一条或多条辅助采样指令,所述辅助采样指令用于获取后续纹理坐标,最后一条辅助采样指令的结束指示符使能,其他辅助采样指令的结束指示符未使能;其中,所述初始纹理坐标和后续纹理坐标组装后形成用于单次纹理值计算的全部坐标。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质为非易失性存储介质或非瞬态存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述所述的多维纹理坐标采样方法的步骤;或者,所述计算机指令被处理器运行时执行上述所述的指令编译方法的步骤。
与现有技术相比,本发明的技术方案具有以下有益效果:
接收纹理采样指令,获取纹理采样指令对应的初始纹理坐标。若纹理采样指令的附加指示符使能,则继续接收一条或多条辅助采样指令,直至辅助采样指令的结束指示符使能。根据辅助采样指令获取后续纹理坐标,并将初始纹理坐标与后续纹理坐标进行组装并发射。在一次纹理值计算过程中,纹理坐标可以被分为不同的部分,使得纹理坐标不需要放置在连续的多个寄存器中,从而可以有效避免编译器生成额外的搬移指令和拼接指令,有效减少指令开销,降低编译器的复杂度。
具体实施方式
现有技术中,随着纹理坐标维度的增加,为了解决多维度坐标的连续发射问题,由编译器分析通用寄存器的使用情况,按照纹理坐标的数目分配相应数目的连续通用寄存器资源。但是,上述操作会带来数据搬移的情况出现。
例如,通用寄存器r0~r10为连续的11个通用寄存器,其中,通用寄存器r2与r6处于使用状态。当纹理坐标数目为8时,可以将纹理坐标放置在通用寄存器r3 ~r10。但是,由于寄存器r6处于被占用,故需要将寄存器r6中的数据搬移。如,将寄存器r6的数据搬移至寄存器r0。另外,当纹理坐标维度较大时,还需要进行数据的拼接。
在本发明实施例中,接收纹理采样指令,获取纹理采样指令对应的初始纹理坐标。若纹理采样指令的附加指示符使能,则继续接收一条或多条辅助采样指令,直至辅助采样指令的结束指示符使能。根据辅助采样指令获取后续纹理坐标,并将初始纹理坐标与后续纹理坐标进行组装并发射。在一次纹理值计算过程中,纹理坐标可以被分为不同的部分,使得纹理坐标不需要放置在连续的多个寄存器中,从而可以有效避免编译器生成额外的搬移指令和拼接指令,有效减少指令开销,降低编译器的复杂度。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
本发明实施例提供了一种多维纹理坐标采样方法,参照图1,以下通过具体步骤进行详细说明。
步骤S101,接收纹理采样指令,并基于纹理采样指令获取初始纹理坐标。
在具体实施中,可以预先对指令集架构(ISA)进行改进,针对每一条纹理采样指令,均可以在其中设置一个附加指示符。通过该附加指示符是否使能,来指示该纹理采样指令发射后纹理坐标是否发射完毕。本发明实施例中所述的纹理坐标是否发射完毕,指的是用于单次纹理值计算的全部纹理坐标是否发射完毕。
在本发明实施例中,可以在纹理采样指令中,选择一比特域,通过该比特域的取值来确定该附加指示符是否使能。比特域的长度可以为一个比特,也可以为2个或者更多个比特。
在本发明一实施例中,在128比特的纹理采样指令中,选择一空闲位置的比特域,该比特域的长度为1比特,将该比特域命名为additional域。
在本发明一实施例中,当additional域的取值置1时,表征附加指示符使能,指示该纹理采样指令发射后纹理坐标尚未发射完毕;当additional域的取值置0时,表征附加指示符未使能,指示该纹理采样指令发射后纹理坐标发射完毕。
在本发明另一实施例中,当additional域的取值置1时,表征附加指示符未使能,指示该纹理采样指令发射后纹理坐标发射完毕;当additional域的取值置0时,表征附加指示符使能,指示该纹理采样指令发射后纹理坐标尚未发射完毕。
可以理解的是,该比特域也可以其他名称命名,并不仅限于上述示例。比特域的长度也并不仅限于上述示例中提供的1比特。
在具体实施中,比特域也可以独立于纹理采样指令设置。比特域可以设置在纹理采样指令之前,或者后缀于纹理采样指令之后。
在具体实施中,纹理采样控制器可以接收来自调度执行核心发送的纹理采样指令。纹理采样控制器可以基于纹理采样指令,获取纹理坐标的通用处理器(GPR)位置,向通用寄存器发送读请求,以获取相应数目的纹理坐标。
在本发明实施例中,为便于描述,纹理采样控制器基于纹理采样指令获取到的纹理坐标简称为初始纹理坐标。
步骤S102,检测到纹理采样指令的附加指示符使能时,继续接收一条或多条辅助采样指令,直至辅助采样指令的结束指示符使能。
在具体实施中,纹理采样控制器在获取初始纹理坐标时,还可以检测纹理采样指令中的附加指示符是否使能。
在本发明一实施例中,若纹理采样指令中的additional域的取值置1,则表征纹理坐标尚未完全发送,则可以将接收到的初始纹理坐标保存在本地,并继续接收一条或者多条辅助采样指令;若纹理采样指令中的additional域的取值置0,表征纹理坐标完全发送,则可以将初始纹理坐标进行组装并发送。
在本发明实施例中,由于纹理坐标尚未完全发送,故可以采用辅助采样指令来承载未完全发送的纹理坐标。辅助采样指令的个数可以为两个或多个,辅助采样指令的个数可以与未完全发送的纹理坐标的数目相关。
在具体实施中,辅助采样指令可以用于获取剩余的未完全发送的纹理坐标。辅助采样指令的目的域为空(void),且源操作数仅需纹理采样坐标,不需要指定纹理和滤波算法属性。
在本发明实施例中,辅助采样指令中可以设置有结束指示符,该结束指示符用于指示:在该条辅助采样指令执行完成后,纹理坐标是否全部发射完毕。
在具体实施中,可以在辅助采样指令中设置一比特域,通过该比特域的取值,来表征结束指示符是否使能。辅助采样指令中的比特域的长度可以为一个比特,也可以为两个或者更多个比特。
在本发明一实施例中,在辅助采样指令中,选择一空闲位置的比特域,该比特域的长度为1比特,将该比特域命名为end域。
在本发明一实施例中,当end域的取值置1时,表征结束指示符使能,指示该辅助采样指令发射后纹理坐标发射完毕;当end域的取值置0时,表征结束指示符未使能,指示该辅助采样指令发射后纹理坐标未发射完毕。
在本发明实施例中,end域的取值可以默认为0,即在辅助采样指令上不显示写end字符。
在本发明另一实施例中,当end域的取值置1时,表征结束指示符未使能,指示该辅助采样指令发射后纹理坐标未发射完毕;当end域的取值置0时,表征结束指示符使能,指示该辅助采样指令发射后纹理坐标发射完毕。
可以理解的是,辅助采样指令中的比特域也可以其他名称命名,并不仅限于上述示例。辅助采样指令中的比特域的长度也并不仅限于上述示例中提供的1比特。
步骤S103,基于一条或多条辅助采样指令获取后续纹理坐标。
在具体实施中,纹理采样控制器可以接收来自调度执行核心发送的辅助采样指令。纹理采样控制器可以基于辅助采样指令,获取纹理坐标的通用处理器(GPR)位置,向通用寄存器发送读请求,以获取相应数目的纹理坐标。
在本发明实施例中,为便于描述,纹理采样控制器基于辅助采样指令获取到的纹理坐标简称为后续纹理坐标。也就是说,后续纹理坐标可以包括一条或者多条辅助采样指令对应的纹理坐标。
换言之,若纹理采样控制器在接收到第一条辅助采样指令之后,检测到该辅助采样指令中的结束指示符使能,则将第一条辅助采样指令对应的纹理坐标作为后续纹理坐标。若纹理采样控制器在接收到两条辅助采样指令之后,检测到第一条辅助采样指令中结束指示符不使能,第二条辅助采样指令中结束指示符使能,则将第一条辅助采样指令以及第二条辅助采样指令对应的纹理坐标作为后续纹理坐标。
步骤S104,将初始纹理坐标以及后续纹理坐标进行组装并发射。
在具体实施中,若纹理采样控制器检测到某一条辅助采样指令中的结束指示符使能,则确定在该条辅助采样指令执行完成后,完成纹理坐标的发射。此时,纹理采样控制器可以将获取到初始纹理坐标以及后续纹理坐标进行组装,并将组装后的纹理坐标发射。
在具体实施中,纹理采样指令所涉及到的源寄存器与辅助采样指令涉及到的源寄存器可以是不连续的。纹理采样指令可以涉及多个源寄存器,且纹理采样指令所涉及的多个源寄存器可以是连续的。一条辅助采样指令可以涉及到一个或多个源寄存器,不同的辅助采样指令涉及的源寄存器可以连续,也可以不连续。
在本发明实施例中,源寄存器连续,可以是指源寄存器的地址相邻。
例如,纹理坐标需要放置在7个源寄存器。纹理采样指令涉及的源寄存器为r7、r8、r10以及r11,第一条辅助采样指令涉及的源寄存器为r19、r20,第二条辅助采样指令涉及的源寄存器为r1、r2以及r3。可见,最终的纹理坐标所存放的源寄存器并不需要全部连续。
在具体实施中,上述纹理采样指令以及辅助采样指令可以由编译器生成。下面对编译器的执行过程进行说明。
参照图2,给出了本发明实施例中的一种指令编译方法,以下通过具体步骤进行说明。
步骤S201,生成纹理采样指令。
在具体实施中,在进行纹理值运算时,编译器可以生成纹理采样指令,纹理采样指令可以用于获取初始纹理坐标。
步骤S202,纹理采样指令的附加指示符使能时,继续生成一条或者多条辅助采样指令。
在具体实施中,可以由编译器来确定纹理采样指令的附加指示符是否使能。编译器可以根据纹理坐标数目的大小,来确定附加指示符是否使能。
具体而言,若纹理坐标数目较大,则编译器可以确定纹理采样指令的附加指示符使能。若纹理坐标数据较小,则编译器可以确定纹理采样指令的附加指示符不使能。若编译器确定纹理采样指令的附加指示符不使能,则可以按照现有技术中的方案对纹理采样指令进行相应的操作。
在本发明实施例中,编译器也可以不考虑纹理坐标数据的大小,均确定纹理采样指令的附加指示符使能。
当编译器确定附加指示符使能时,可以继续生成一条或者多条辅助采样指令,辅助采样指令可以用于获取后续纹理坐标,且最后一条辅助采样指令的结束指示符使能,其他辅助采样指令的结束指示符未使能。
下面通过示例,对本发明上述实施例中提供的多维纹理坐标采样方法进行说明。
首先介绍一组现有的smp指令,smp指令为一种纹理采样指令。smp指令如下:smpr9.xy,[r4.xyz], t[0], s[0]。上述指令中,r4.xyz表示本次纹理坐标数目为3(三维的xyz,故坐标数目为3),分别存放于通用寄存器r4、r5、r6,r9.xy表示返回的纹理值,有两个元素(component),分别存放在通用寄存器r9以及r10。t[0]表示纹理的属性类型,s[0]表示滤波算法的属性类型。
可见,上述纹理坐标是连续存放的。
而在本发明实施例中,则是对指令集的改动,提供了如下示例的指令集:
smp_d.a r4.xyzw, [r8.xyzw], t[0], s[0]
smp_a void, [r20.xy]
smp_a.e void, [r0.xyz]
为了避免编译器的搬移和拼接操作,在纹理采样指令(smp_d)中引入了比特域“a”(additional)的缩写,也即附加指示符使能,用于表征本次纹理坐标未完成发射。r8.xyzw表示本次纹理坐标数目为4(四维的xyz,故坐标数目为4),分别存放于通用寄存器r8、r9、r10以及r11。
两条辅助采样指令中,第一条辅助采样指令(smp_a)对应的纹理坐标存放于通用寄存器r20以及r21,第二条辅助采样指令(smp_a.e)对应的纹理坐标存放于通用寄存器r0,r1以及r2。
第二条辅助采样指令引入了比特域“e”(end的缩写),也即结束指示符使能,用于表征纹理坐标发射结束。第一条辅助采样指令没有引入比特域“e”,表征结束指示符未使能。
辅助采样指令实质上是为了后续继续发射纹理坐标,而并未新的纹理采样,因此,只需要指定纹理坐标即可(返回的纹理值硬件仍旧存放于纹理采样指令指定的通用寄存器r4、 r5、 r6 及r7)。
综上可见,通过引入辅助采样指令,本次纹理采样对应的9个纹理坐标并未要求连续存放于通用寄存器。可以存放在r0~r21之间未被使用的通用寄存器。
综上可见,在本发明实施例中,一次纹理值计算过程中,纹理坐标可以被分为不同的部分,使得纹理坐标不需要放置在连续的多个寄存器中,从而可以有效避免编译器生成额外的搬移指令和拼接指令,有效减少指令开销,降低编译器的复杂度。
参照图3,给出了本发明实施例中的一种图形处理器的结构示意图。图3中,图形处理器30包括:调度执行核心301、纹理采样控制器302以及通用寄存器303,其中:
调度执行核心301,用于向纹理采样控制器302发送纹理采样指令;且当所述纹理采样指令的附加指示符使能时,向所述纹理采样控制器302发送辅助采样指令,直至所述辅助采样指令的结束指示符使能;
所述纹理采样控制器302,用于接收所述纹理采样指令,并基于所述纹理采样指令从通用寄存器303中获取初始纹理坐标;检测到所述纹理采样指令的附加指示符使能时,继续接收一条或多条辅助采样指令,直至所述辅助采样指令的结束指示符使能;基于所述一条或多条辅助采样指令从所述通用寄存器303中获取后续纹理坐标;将所述初始纹理坐标以及所述后续纹理坐标进行组装并发射至纹理协处理器34;
所述通用寄存器303,其中存储有所述初始纹理坐标以及所述后续纹理坐标。
在具体实施中,上述提供的图形处理器的具体执行过程及原理可以对应参照上述实施例,此处不做赘述。
参照图4,本发明实施例还提供了一种指令编译装置40,包括:第一生成单元401以及第二生成单元402,其中:
第一生成单元401,用于生成纹理采样指令,所述纹理采样指令用于获取初始纹理坐标;
第二生成单元402,用于在所述纹理采样指令的附加指示符使能时,继续生成一条或多条辅助采样指令,所述辅助采样指令用于获取后续纹理坐标,最后一条辅助采样指令的结束指示符使能,其他辅助采样指令的结束指示符未使能;其中,所述初始纹理坐标和后续纹理坐标组装后形成用于单次纹理值计算的全部坐标。
在具体实施中,上述第一生成单元401以及第二生成单元402的具体执行过程可以对应参照步骤S201~步骤S202,此处不做赘述。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质为非易失性存储介质或非瞬态存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述实施例提供的指令编译方法的步骤。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指示相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。