[發明專利]一種基于雙Buffer架構下的紋理貼圖硬件加速器在審
| 申請號: | 201910495890.0 | 申請日: | 2019-06-10 | 
| 公開(公告)號: | CN112070651A | 公開(公告)日: | 2020-12-11 | 
| 發明(設計)人: | 吳興濤;殷誠信;王磊 | 申請(專利權)人: | 華夏芯(北京)通用處理器技術有限公司 | 
| 主分類號: | G06T1/20 | 分類號: | G06T1/20;G06T11/00;G06T1/60 | 
| 代理公司: | 北京科家知識產權代理事務所(普通合伙) 11427 | 代理人: | 陳娟 | 
| 地址: | 100080 北京市海淀區*** | 國省代碼: | 北京;11 | 
| 權利要求書: | 查看更多 | 說明書: | 查看更多 | 
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 buffer 架構 紋理 貼圖 硬件 加速器 | ||
1.一種基于雙Buffer架構下的紋理貼圖硬件加速器,其特征在于,包括:
Image 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不同;支持1D、2D、3D、rectangle、cubemap、1D_ARRAY、2D_ARRAY、cubemap_array、2D_multisample、2D_multisample、2D_multisample_array模式下的寄存器配置;
LOD U1單元:完成對不同濾波模式下的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濾波方式,有以下濾波方式:trilinear isotropic(near_mipmap_linear、linear_mipmap_linear)、trilinear anisotropic;如果只有level0有效,有以下濾波方式:point isotropic(near、near_mipmap_near)、bilinear isotropic(linear、linear_mipmap_near)、bilinear anisotropic;
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階段的輸入;
Coordinate controller U3單元:當使能level0和level1時,filter_type為point模式時,mode為1D時,寫入coordinate bufferu0的數據為inte_u0,寫入coordinatebufferu1的數據為inte_u1;mode為2D時,寫入coordinate bufferu0的數據為inte_u0,寫入coordinate bufferv0的數據為inte_v0;寫入coordinate bufferu1的數據為inte_u1,寫入coordinate bufferv1的整數部分為inte_v1;mode為3D時,寫入coordinate bufferu0的數據為inte_u0,寫入coordinate bufferv0的數據為inte_v0,寫入coordinatebufferw0的數據為inte_w0,寫入coordinate bufferu1的數據為inte_u1,寫入coordinatebufferv1的數據為inte_v1,寫入coordinatew1的數據為inte_w1;filter_type為linear模式時,mode為1D時,寫入coordinate bufferu1的數據為inte_u1,寫入coordinatebufferu1的數據為inte_u1+1;寫入coordinate bufferu0的數據為inte_u0,寫入coordinate bufferu0的數據為inte_u0+1;mode為2D時,寫入coordinate bufferu0、coordinate bufferv0的數據依次為:(inte_u0,inte_v0)、(inte_u0+1,inte_v0)、(inte_u0,inte_v0+1)、(inte_u0+1,inte_v0+1);寫入coordinate bufferu1、coordinatebufferv1的數據依次為:(inte_u1,inte_v1)、(inte_u1+1,inte_v1)、(inte_u1,inte_v1+1)、(inte_u1+1,inte_v1+1);mode為3D時,寫入coordinate bufferu0、coordinatebufferv0、coordinate bufferw0的數據依次為:(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);寫入coordinate bufferu1、coordinatebufferv1、coordinate bufferw1的數據依次為:(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時,寫入coordinate bufferu0的數據為inte_u0;mode為2D時,寫入coordinate bufferu0的數據為inte_u0,寫入coordinate bufferv0的數據為inte_v0;mode為3D時,寫入coordinate bufferu0的數據為inte_u0,寫入coordinate bufferv0的數據為inte_v0,寫入coordinate bufferw0的數據為inte_w0;filter_type為linear模式時,mode為1D時,寫入coordinate bufferu0的數據為inte_u0,寫入coordinate bufferu0的數據為inte_u0+1;mode為2D時,寫入coordinate bufferu0、coordinate bufferv0的數據依次為:(inte_u0,inte_v0)、(inte_u0+1,inte_v0)、(inte_u0,inte_v0+1)、(inte_u0+1,inte_v0+1);mode為3D時,寫入coordinate bufferu0、coordinate bufferv0、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)。
address controller U4單元:首先完成紋理坐標到紋理偏移地址的計算;對于level0有效時,mode為1D,在地址計算沒有溢出時的偏移量為size*u0;mode為2D,在地址計算沒有溢出時的偏移量為size*(width0*u0+v0);mode為3D,在地址計算沒有溢出時的偏移量為size*(width0*u0+v0)+w0*width0*height0;得到最終訪問texel cache的地址為base0+偏移量。然后根據偏移量的末尾與4字節對齊方式,得到不同inte_format條件下的地址個數,并將末尾數據保存于offset0 buffer中;由于level1無效,所以請求texel cache時,按照雙buffer操作方式,奇數個地址請求texel cache地址訪問cache0,偶數個地址請求訪問cache1,實現地址的并行性訪問。對于level0和level1均有效時,mode為1D,在地址計算沒有溢出時的偏移量為size*u0,size*u1;mode為2D,在地址計算沒有溢出時的偏移量為size*(width0*u0+v0),size*(width1*u1+v1);mode為3D,在地址計算沒有溢出時的偏移量為size*(width0*u0+v0)+w0*width0*height0,size*(width1*u1+v1)+w1*width1*height1。得到最終訪問texel cache的地址為base0+level0偏移量,base1+level1偏移量。此時,并行請求cache0和cache1。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于華夏芯(北京)通用處理器技術有限公司,未經華夏芯(北京)通用處理器技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910495890.0/1.html,轉載請聲明來源鉆瓜專利網。





