【技术实现步骤摘要】
一种基于双Buffer架构下的纹理贴图硬件加速器
本专利技术涉及GPU芯片设计
,具体为一种基于双Buffer架构下的纹理贴图硬件加速器。
技术介绍
纹理贴图操作在GPU的应用非常广泛,不仅可以作为GPGPU通用计算领域内的计算单元,同时作为图形渲染管线对纹理数据fetch、sample的执行者。所以纹理贴图单元性能的好坏直接影响了图形处理器内部执行效率,在通用计算领域直接影响了数据lookup、transfer的快慢,所以设计高效的纹理贴图单元在GPU设计中尤为关键。
技术实现思路
本专利技术的目的在于提供一种基于双Buffer架构下的纹理贴图硬件加速器,以解决上述
技术介绍
中提出的图形处理器内部执行效率差,在通用计算领域直接影响了数据Lookup、transfer的快慢的问题。为实现上述目的,本专利技术提供如下技术方案:一种基于双Buffer架构下的纹理贴图硬件加速器,包括:ImageU0单元:对image基本信息进行存储,当使能mipmap纹理时,通过target以及不同map层作为地址,存储对应image的mode、width、height、depth、border、inte_format、format、type、base;当使能layer层时,通过target以及不同的layer层作为地址,存储对应层的mode、width、height、depth、border、inte_format、format、type、base值,当使能cubemap时,将mipmap层的一个 ...
【技术保护点】
1.一种基于双Buffer架构下的纹理贴图硬件加速器,其特征在于,包括:/nImage U0单元:对image基本信息进行存储,当使能mipmap纹理时,通过target以及不同map层作为地址,存储对应image的mode、width、height、depth、border、inte_format、format、type、base;当使能layer层时,通过target以及不同的layer层作为地址,存储对应层的mode、width、height、depth、border、inte_format、format、type、base值,当使能cubemap时,将mipmap层的一个地址进行细分为6个,分别代表0,1,2,3,4,5不同的face信息,当使能layer层没有map层信息时,不同layer层的mode、width、height、depth、border、inte_format、format、type相同,base不同;当使能layer并使能map层时的mode、width、height、depth、border、inte_format、format、type相同,base不同 ...
【技术特征摘要】
1.一种基于双Buffer架构下的纹理贴图硬件加速器,其特征在于,包括:
ImageU0单元:对image基本信息进行存储,当使能mipmap纹理时,通过target以及不同map层作为地址,存储对应image的mode、width、height、depth、border、inte_format、format、type、base;当使能layer层时,通过target以及不同的layer层作为地址,存储对应层的mode、width、height、depth、border、inte_format、format、type、base值,当使能cubemap时,将mipmap层的一个地址进行细分为6个,分别代表0,1,2,3,4,5不同的face信息,当使能layer层没有map层信息时,不同layer层的mode、width、height、depth、border、inte_format、format、type相同,base不同;当使能layer并使能map层时的mode、width、height、depth、border、inte_format、format、type相同,base不同;支持1D、2D、3D、rectangle、cubemap、1D_ARRAY、2D_ARRAY、cubemap_array、2D_multisample、2D_multisample、2D_multisample_array模式下的寄存器配置;
LODU1单元:完成对不同滤波模式下的level值计算,结合访问target地址得到访问image单元的地址;在计算level值之前,首先需要通过target和base_level值为level0读取image单元,获得image的基本信息作为后续level计算时的参考,然后level值的计算考虑两种情况:当使能lod时,如果image为layer模式,此时,不同层的width、height信息相等,无论滤波模式为mag_filter还是min_filter,都取整取最靠近base_level方向的一个level值为level0读取image信息的offset,而filter_type大小与请求的滤波大小相匹配;当使能lod时,如果image为mipmap模式,此时,不同层的width、height、depth不相等,考虑mag_filter在near和linear模式下取整取最靠近base_level值读取image信息的offset,考虑min_filter模式下near、linear、near_mipmap_near、linear_mipmap_near取最不靠近base_level值为level0读取image的offset,而filter_type分别和请求的滤波模式相匹配,考虑min_filter在near_mipmap_linear、linear_mipmap_linear模式下取整取临近的两层作为读取image信息的offset,ratio_l为lod值减去level值的小数部分,此时称为lod的整数部分为level0,level0加1为level1,如果lod值为min_lod,此时level0与level1相同,所以取fiter_type分别为near_mipmap_near和linear_mipmap_near滤波;同理,当使能偏导数作为lod时,按照raster传递过来的图元类型primitive、dux、duy、dvx、dvy、dwx、dwy、delt_x、delt_y,分为polygon/point和line两种情况,分别计算得到polygon/point和line的lod,如果image为layer模式,此时,不同层的width、height信息相等,无论滤波模式为mag_filter还是min_filter,都取整取最靠近base_level方向的一个level值为level0读取image信息的offset,而filter_type大小与请求的滤波大小相匹配;如果image为mipmap模式,此时,不同层的width、height、depth不相等,考虑mag_filter在near和linear模式下取整取最靠近base_level值读取image信息的offset,考虑min_filter模式下near、linear、near_mipmap_near、linear_mipmap_near取最不靠近base_level值为level0读取image的offset,而filter_type分别和请求的滤波模式相匹配,考虑min_filter在near_mipmap_linear、linear_mipmap_linear模式下取整取临近的两层作为读取image信息的offset,ratio_l为lod值减去level值的小数部分,此时称为lod的整数部分为level0,level0加1为level1,如果lod值为min_lod,此时level0与level1相同,所以取fiter_type分别为near_mipmap_near和linear_mipmap_near滤波;如果使能了level0和level1,则考虑为trilinear滤波方式,有以下滤波方式:trilinearisotropic(near_mipmap_linear、linear_mipmap_linear)、trilinearanisotropic;如果只有level0有效,有以下滤波方式:pointisotropic(near、near_mipmap_near)、bilinearisotropic(linear、linear_mipmap_near)、bilinearanisotropic;
CoordinateU2单元:完成对fetch、sampler模式下的s、t、r、q的坐标、地址转换;当使能cubemap_array时,此时的Q坐标不为0,表示layer行号,s、t、r分别表示x,y,z方向上的大小,通过映射关系得到平面坐标内的s、t坐标;当使能rectangle模式,此时的s、t坐标不需要进行解归一化处理;如果s、t、r坐标超出了各自的表示范围,采用不同的wrap模式对坐标进行约束;当使能level0和level1时,从image单元得到level0和level1各自的width、height、depth值,分别与s、t、r相乘,得到解归一化后的纹理坐标u0,v0,w0和u1,v1,w1,当只有level0有效时,从image单元得到level0的width、height、depth值,分别与s、t、r相乘,得到解归一化后的纹理坐标u0,v0,w0;此时的ratio_u0、ratio_v0、ratio_w0分别为u0、v0、w0的小数部分,ratio_u1、ratio_v1、ratio_w1分别为u1、v1、w1的小数部分,inte_u0,inte_v0,inte_w0分别为u0、v0、w0的整数部分,inte_u1,inte_v1,inte_w1分别为u1、v1、w1的整数部分;执行wrap操作时,如果image内容中的borde值有值,并且此时地址已经溢出,此时disable请求纹素,并使能border_color值作为最终pixel阶段的输入;
CoordinatecontrollerU3单元:当使能level0和level1时,filter_type为point模式时,mode为1D时,写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferu1的数据为inte_u1;mode为2D时,写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferv0的数据为inte_v0;写入coordinatebufferu1的数据为inte_u1,写入coordinatebufferv1的整数部分为inte_v1;mode为3D时,写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferv0的数据为inte_v0,写入coordinatebufferw0的数据为inte_w0,写入coordinatebufferu1的数据为inte_u1,写入coordinatebufferv1的数据为inte_v1,写入coordinatew1的数据为inte_w1;filter_type为linear模式时,mode为1D时,写入coordinatebufferu1的数据为inte_u1,写入coordinatebufferu1的数据为inte_u1+1;写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferu0的数据为inte_u0+1;mode为2D时,写入coordinatebufferu0、coordinatebufferv0的数据依次为:(inte_u0,inte_v0)、(inte_u0+1,inte_v0)、(inte_u0,inte_v0+1)、(inte_u0+1,inte_v0+1);写入coordinatebufferu1、coordinatebufferv1的数据依次为:(inte_u1,inte_v1)、(inte_u1+1,inte_v1)、(inte_u1,inte_v1+1)、(inte_u1+1,inte_v1+1);mode为3D时,写入coordinatebufferu0、coordinatebufferv0、coordinatebufferw0的数据依次为:(inte_u0,inte_v0,inte_w0)、(inte_u0+1,inte_v0,inte_w0)、(inte_u0,inte_v0+1,inte_w0)、(inte_u0+1,inte_v0+1,inte_w0)、(inte_u0,inte_v0,inte_w0+1)、(inte_u0+1,inte_v0,inte_w0+1)、(inte_u0,inte_v0+1,inte_w0+1)、(inte_u0+1,inte_v0+1,inte_w0+1);写入coordinatebufferu1、coordinatebufferv1、coordinatebufferw1的数据依次为:(inte_u1,inte_v1,inte_w1)、(inte_u1+1,inte_v1,inte_w1)、(inte_u1,inte_v1+1,inte_w1)、(inte_u1+1,inte_v1+1,inte_w1)、(inte_u1,inte_v1,inte_w1+1)、(inte_u1+1,inte_v1,inte_w1+1)、(inte_u1,inte_v1+1,inte_w1+1)、(inte_u1+1,inte_v1+1,inte_w1+1);当使能level0时,filter_type为point模式时,mode为1D时,写入coordinatebufferu0的数据为inte_u0;mode为2D时,写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferv0的数据为inte_v0;mode为3D时,写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferv0的数据为inte_v0,写入coordinatebufferw0的数据为inte_w0;filter_type为linear模式时,mode为1D时,写入coordinatebufferu0的数据为inte_u0,写入coordinatebufferu0的数据为inte_u0+1;mode为2D时,写入coordinatebufferu0、coordinatebufferv0的数据依次为:(inte_u0,inte_v0)、(inte_u0+1,inte_v0)、(inte_u0,inte_v0+1)、(inte_u0+1,inte_v0+1);mode为3D时,写入coordinatebufferu0、coordinatebufferv0、coordinatebufferw0的数据依次为:(inte_u0,inte_v0,inte_w0)、(inte_u0+1,inte_v0,inte_w0)、(inte_u0,inte_v0+1,inte_w0)、(inte_u0+1,inte_v0+1,inte_w0)、(inte_u0,inte_v0,inte_w0+1)、(inte_u0+1,inte_v0,inte_w0+1)、(inte_u0,inte_v0+1,inte_w0+1)、(inte_u0+1,inte_v0+1,inte_w0+1)。
addresscontrollerU4单元:首先完成纹理坐标到纹理偏移地址的计算;对于level0有效时,mode为1D,在地址计算没有溢出时的偏移量为size*u0;mode为2D,在地址计算没有溢出时的偏移量为size*(width0*u0+v0);mode为3D,在地址计算没有溢出时的偏移量为size*(width0*u0+v0)+w0*width0*height0;得到最终访问texelcache的地址为base0+偏移量。然后根据偏移量的末尾与4字节对齐方式,得到不同inte_format条件下的地址个数,并将末尾数据保存于offset0buffer中;由于level1无效,所以请求texelcache时,按照双buffer操作方式,奇数个地址请求texelcache地址访问cache0,偶数个地址请求访问cache1,实现地址的并行性访问。对于level0和level1均有效时,mode为1D,在地址计算没有溢出时的偏移量为size*u0,size*u1;mode为2D,在地址计算没有溢出时的偏移量为size*(width0*u0+v0),size*(width1*u1+v1);mode为3D,在地址计算没有溢出时的偏移量为size...
【专利技术属性】
技术研发人员:吴兴涛,殷诚信,王磊,
申请(专利权)人:华夏芯北京通用处理器技术有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。