(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-13
(45)【発行日】2023-02-21
(54)【発明の名称】デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ
(51)【国際特許分類】
G06T 15/04 20110101AFI20230214BHJP
【FI】
G06T15/04
(21)【出願番号】P 2021573726
(86)(22)【出願日】2020-06-10
(86)【国際出願番号】 CN2020095464
(87)【国際公開番号】W WO2020249026
(87)【国際公開日】2020-12-17
【審査請求日】2022-02-09
(31)【優先権主張番号】201910495890.0
(32)【優先日】2019-06-10
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】521541860
【氏名又は名称】フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】110002572
【氏名又は名称】弁理士法人平木国際特許事務所
(72)【発明者】
【氏名】ウー,シンタオ
(72)【発明者】
【氏名】ワン,レイ
【審査官】橋爪 正樹
(56)【参考文献】
【文献】特開2006-244426(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00-15/87
(57)【特許請求の範囲】
【請求項1】
デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータであって、
Image U0ユニットと、LOD U1ユニットと、Coordinate U2ユニットと、Coordinate controller U3ユニットと、address controller U4ユニットと、を含み、
前記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レイヤーの1つのアドレスを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モードでのレジスタコンフィギュレーションをサポートし、
前記U1ユニットは、
異なるフィルタリングモードでのlevel値の計算を完了し、targetアドレスへのアクセスと組み合わせてimageユニットにアクセスするアドレスを得、
level値を計算する前に、まずtarget及びbase_level値をlevel0とし、imageユニットを読み取り、後のlevel計算時の参考としてimageの基本情報を得る必要があり、そしてlevel値の計算に下記の2つの場合が考えられ、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モードで整数を取って隣接する2つのレイヤーを、読み取る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の2つの場合に分け、それぞれ計算し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モードで整数を取って隣接する2つのレイヤーを、読み取る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というフィルタリング方式があり、
前記Coordinate U2ユニットは、
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であり、coordinate bufferu1に書き込まれたデータが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であり、coordinate bufferw0に書き込まれたデータがinte_w0であり、coordinate bufferu1に書き込まれたデータがinte_u1であり、coordinate bufferv1に書き込まれたデータがinte_v1であり、coordinatew1に書き込まれたデータがinte_w1であり、filter_typeがlinearモードであるとき、modeが1Dであれば、coordinate bufferu1に書き込まれたデータがinte_u1であり、coordinate bufferu1に書き込まれたデータが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、coordinate bufferv1に書き込まれたデータが順次(inte_u1、inte_v1)、(inte_u1+1、inte_v1)、(inte_u1、inte_v1+1)、(inte_u1+1、inte_v1+1)であり、
modeが3Dであれば、coordinate bufferu0、coordinate bufferv0、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、coordinate bufferv1、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、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)であり、
前記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が無効であるので、デュアルBufferの操作方式により、texel cacheをリクエストするとき、奇数のアドレスの場合、cache0にアクセスするtexel cacheアドレスをリクエストし、偶数のアドレスの場合、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を並行してリクエストする、
ことを特徴とするデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
【請求項2】
前記LOD U1ユニットは、直接接続されている2つのcacheを含み、異なるtexelが所在するcacheラインのインデックス付け及びcache lineのstore、replace操作を完了し、level0及びlevel1が同時に有効である場合、cache0及びcache1の読み取り操作リクエストを並行して完了し、level0だけが有効である場合、cache0にodd cache lineを記憶し、cache1にeven cache lineを記憶する、
ことを特徴とする請求項1に記載のデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
【請求項3】
前記Coordinate U2ユニットは、data controllerU0ユニットと、filterU1ユニットと、pixelユニットU2と、を含み、
前記data controllerU0ユニットは、
level0及びlevel1が同時に有効である場合、それぞれ異なるinte_formatに従って、off0及びoff1を結び付け、1つのcache lineにおいてデータのスティッチングタスクを完了し、テクスチャアドレスに対応するテクスチャデータを得、かつそれぞれのデータをdata buffer0及びdata buffer1に同時に書き込み、かつdata buffer0、data buffer1がそれぞれのlevelのデータをそれぞれ格納し、
level0だけが有効である場合、同様に、cache0及びcache1からそれぞれのcache lineのデータをそれぞれ読み出し、異なるinte_format及びoff0に従って、odd data及びeven dataを得、data buffer0及びdata buffer1に二重に書き込み、このときdata buffer0及びdata buffer1に同じlevelのテクセルデータを格納し、
前記filterU1ユニットは、
まず、切り捨て演算を完了し、異なるinte_formatに対して、異なるビット幅のr、g、b、a値を切り捨て、そして独立な方式でそれぞれフィルタリング計算を行い、ビット幅の切り捨て方法が異なるinte_formatに従って実行し、
level0及びlevel1がいずれも有効である場合、このときfilter_typeのフィルタリング方式には、NAF(non-anisotropic)(near_mipmap_linear isotropic、linear_mipmap_linear isotropic)、BAF(bilinear-anisotropic)(無効)、TAF(trilinear-anisotropic)があり、level0が有効で、level1が無効である場合、このときfilter_typeのフィルタリング方式には、NAF(non-anisotropic)(near、near_mipmap_near、linear_mipmap_near)、BAF(bilinear anisotropic)、TAF(trilinear-anisotropic)(無効)があり、
level0及びlevel1が同時に有効で、filter_typeがTAF(near_mipmap_linear)である場合、modeが1D、2D、3Dであるかに関わらず、同時にdata buffer0、data buffer1からdata0及びdata1という1つのデータを同時に読み取り、得たフィルタリング結果がdata0*(1.0-ratio_l)+data1*ratio_lであり、
フィルタリング方式がTAF(linear_mipmap_linear)で、modeが1Dであれば、まずdata buffer0、data buffer1から同時にdata0、data1及びdata2、data3という2つのデータを順次読み取り、フィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0、data1*(1.0-ratio_u1)+data3*ratio_u1であり、得たフィルタリングの最終結果が(data0*(1.0-ratio_u0)+(data2*ratio_u0)*(1.0-ratio_l)+(data1*1.0-ratio_u1)+(data3*ratio_u1)*ratio_lであり、
modeが2Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3及びdata4、data5、data6、data7という4つのデータを順次読み取り、そうするとまずdata0、data2、data4、data6という最初の4つのデータにより得たフィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0、data4*(1.0-ratio_u1)+data6*ratio_u1であり、
そしてdata1、data3、data5、data7という後の4つのデータにより得たフィルタリングの中間結果がdata1*(1.0-ratio_u0)+data3*ratio_u0、data5*(1.0-ratio_u1)+data7*ratio_u1であり、最後にそれぞれ(data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data2*(1.0-ratio_u0)+data3*ratio_u0*ratio_v0、(data4*(1.0-ratio_u1)+data5*ratio_u1)*(1.0-ratio_v1)+(data6*(1.0-ratio_u1)+data7*ratio_u1)*ratio_v1というlevel0及びlevel1の最終結果を得、最終的なフィルタリング結果が((data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data2*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0)*(1.0-ratio_l)+((data4*(1.0-ratio_u1)+data5*ratio_u1)*(1.0-ratio_v1)+(data6*(1.0-ratio_u1)+data7*ratio_u1)*ratio_v1)*ratio_lであり、
modeが3Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3、data4、data5、data6、data7及びdata8、data9、data10、data11、data12、data13、data14、data15という8つのデータを順次読み取り、
まずdata0、data1、data2、data3、data8、data9、data10、data11という最初の8つのデータにより得たフィルタリングの中間結果がそれぞれ((data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_v0)+((data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0、((data8*(1.0-ratio_u1)+data9*ratio_u1)*(1.0-ratio_v1)+((data10*(1.0-ratio_u1)+data11*ratio_u1)*ratio_v1であり、そしてdata4、data5、data6、data7、data12、data13、data14、data15という後の8つのデータにより得たフィルタリングの中間結果がそれぞれ((data4*(1.0-ratio_u0)+data5*ratio_u0)*(1.0-ratio_v0)+((data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0、((data12*(1.0-ratio_u1)+data13*ratio_u1)*(1.0-ratio_v1)+((data14*(1.0-ratio_u1)+data15*ratio_u1)*ratio_v1であり、
最後に得たフィルタリングの最終結果が((((data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_v0)+((data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0)*(1.0-ratio_w0)+(((data4*(1.0-ratio_u0)+data5*ratio_u0)*(1.0-ratio_v0)+((data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0)*ratio_w0)*(1.0-ratio_l)+((((data8*(1.0-ratio_u1)+data9*ratio_u1)*(1.0-ratio_v1)+((data10*(1.0-ratio_u1)+data11*ratio_u1)*ratio_v1)*(1.0-ratio_w1)+(((data12*(1.0-ratio_u1)+data13*ratio_u1)*(1.0-ratio_v1)+((data14*(1.0-ratio_u1)+data15*ratio_u1)*ratio_v1)*ratio_w1)*ratio_lであり、anisotropicを有効にした場合、このときdata buffer0、data buffer1におけるデータに対してそれぞれanisotropic計算した後にdata0、data1の中間フィルタリング結果を得、そうすると最終的なフィルタリング結果がdata0*(1.0-ratio_l)+data1*ratio_lであり、
level0だけが有効で、filter_typeがnear、near_mipmap_nearである場合、modeが1D、2D、3Dであるかに関わらず、同時にdata buffer0、data buffer1からdata0及びdata1という1つのデータを同時に読み取り、フィルタリングせず、data0、data1フォーマットを変換した後に直接出力し、
フィルタリング方式がBAFである場合、modeが1Dであれば、まずdata buffer0、data buffer1から同時にdata0、data1という1つのデータを順次読み取り、最終的なフィルタリング結果がdata0*(1.0-ratio_u0)+data2*ratio_u0であり、
modeが2Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3という2つのデータを順次読み取り、そうするとまずdata0、data2という最初の2つのデータにより得たフィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0であり、
そしてdata1、data3という後の2つのデータにより得たフィルタリングの中間結果がdata1*(1.0-ratio_u0)+data3*ratio_u0であり、最後に得たフィルタリングの最終結果が(data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_l)+(data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_lであり、
modeが3Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3及びdata4、data5、data6、data7という4つのデータを順次読み取り、まずdata0、data1、data4、data5という最初の4つのデータにより得たフィルタリングの中間結果が(data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data4*(1.0-ratio_u0)+data5*ratio_u0)*ratio_v0であり、そしてdata2、data3、data6、data7という後の4つのデータにより得たフィルタリングの中間結果がそれぞれ(data2*(1.0-ratio_u0)+data3*ratio_u0)*(1.0-ratio_v0)+(data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0であり、
最後に得たフィルタリングの最終結果が((data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data4*(1.0-ratio_u0)+data5*ratio_u0)*ratio_v0)*(1.0-ratio_w0)+((data2*(1.0-ratio_u0)+data3*ratio_u0)*(1.0-ratio_v0)+(data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0)*ratio_w0であり、フィルタリング操作を実行した後、異なるinte_formatフォーマットに従って、texel_r、texel_g、texel_b、texel_aというfilterの出力結果に割り当て操作を行い、formatがcolorであれば、inte_formatにおけるrのみに値がある場合、このときtexel_rがフィルタリング結果であり、texel_g、texel_bがいずれも0であり、
texel_aが1であり、
formatがdepth、stencilであれば、このときフィルタリングせず、結果をtexel_r、texel_g成分に割り当て、texel_b、texel_a成分が0であり、
前記pixelユニットU2は、
border_colorを有効にした場合、border_colorデータをpixel段階の入力データとして採用し、swizzle操作を有効にしていない場合、pixel_r、pixel_g、pixel_b、pixel_aとborder_colorのborder_color_r、border_color_g、border_color_b、border_color_aが等しく、swizzle操作を有効にした場合、swizzleモードによりそれぞれのチャンネルデータをそれぞれ変換し、最終的にpixel_r、pixel_g、pixel_b、pixel_aという4つの色成分を並行して出力する、
ことを特徴とする請求項1に記載のデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
【請求項4】
Color、depth、stencil、depth_stencilモードにおけるFP32、FP16、FP11、FP10、INT32のデータタイプをサポートする、
ことを特徴とする請求項3に記載のデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
【請求項5】
RGB/BGR formatにおける異なる整数型、浮動小数点型type、RGBA/BGRA formatにおける異なる整数型、浮動小数点型typeの変換もサポートする、
ことを特徴とする請求項3に記載のデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
【請求項6】
depth、stencil、depth_stencilの深度テクスチャに対する比較及びstencil indexの計算もサポートする、
ことを特徴とする請求項3に記載のデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、GPUチップ設計技術分野に関し、具体的にはデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータである。
[関連出願の相互参照]
本開示は2019年6月10日に提出された、出願番号201910495890.0、名称「デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ」という特許文献の優先権を主張し、その内容の全てが参照によって本開示に組み込まれる。
【背景技術】
【0002】
テクスチャマッピング操作は、GPGPUによる汎用計算分野内の計算ユニットとしてだけでなく、テクスチャデータfetch、sampleに対するグラフィックレンダリングパイプラインの実行者としてもGPUで広く利用されている。従ってテクスチャマッピングユニットの性能の良し悪しは、グラフィックプロセッサ内部の実行効率に直接影響し、汎用計算分野ではデータlookup、transferの遅さに直接影響し、従って、効率的なテクスチャマッピングユニットを設計することは、GPU設計において特に重要である。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本開示の目的は、上記背景技術で提案されたグラフィックプロセッサ内部の実行効率が悪く、汎用計算分野ではデータLookup、transferの遅さに直接影響するという問題を解決するために、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータを提供することである。
【課題を解決するための手段】
【0004】
上記目的を達成するために、本開示は以下の技術的解決手段を提供し、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータであって、
Image U0ユニットと、LOD U1ユニットと、Coordinate U2ユニットと、Coordinate controller U3ユニットと、address controller U4ユニットと、を含み、
前記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レイヤーの1つのアドレスを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モードでのレジスタコンフィギュレーションをサポートし、
前記U1ユニットは、異なるフィルタリングモードでのlevel値の計算を完了し、targetアドレスへのアクセスと組み合わせてimageユニットにアクセスするアドレスを得、level値を計算する前に、まずtarget及びbase_level値をlevel0とし、imageユニットを読み取り、後のlevel計算時の参考としてimageの基本情報を得る必要があり、そしてlevel値の計算に下記の2つの場合が考えられ、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モードで整数を取って隣接する2つのレイヤーを、読み取る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の2つの場合に分け、それぞれ計算し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モードで整数を取って隣接する2つのレイヤーを、読み取る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というフィルタリング方式があり、
前記Coordinate U2ユニットは、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であり、coordinate bufferu1に書き込まれたデータが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であり、coordinate bufferw0に書き込まれたデータがinte_w0であり、coordinate bufferu1に書き込まれたデータがinte_u1であり、coordinate bufferv1に書き込まれたデータがinte_v1であり、coordinatew1に書き込まれたデータがinte_w1であり、filter_typeがlinearモードであるとき、modeが1Dであれば、coordinate bufferu1に書き込まれたデータがinte_u1であり、coordinate bufferu1に書き込まれたデータが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、coordinate bufferv1に書き込まれたデータが順次(inte_u1、inte_v1)、(inte_u1+1、inte_v1)、(inte_u1、inte_v1+1)、(inte_u1+1、inte_v1+1)であり、modeが3Dであれば、coordinate bufferu0、coordinate bufferv0、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、coordinate bufferv1、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、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)であり、
前記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が無効であるので、デュアルBufferの操作方式により、texel cacheをリクエストするとき、奇数のアドレスの場合、cache0にアクセスするtexel cacheアドレスをリクエストし、偶数のアドレスの場合、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を並行してリクエストする。
【0005】
選択可能に、前記LOD U1ユニットは、直接接続されている2つのcacheを含み、異なるtexelが所在するcacheラインのインデックス付け及びcache lineのstore、replace操作を完了し、level0及びlevel1が同時に有効である場合、cache0及びcache1の読み取り操作リクエストを並行して完了し、level0だけが有効である場合、cache0にodd cache lineを記憶し、cache1にeven cache lineを記憶する。
【0006】
選択可能に、前記Coordinate U2ユニットは、data controllerU0ユニットと、filterU1ユニットと、pixelユニットU2と、を含み、
前記data controllerU0ユニットは、level0及びlevel1が同時に有効である場合、それぞれ異なるinte_formatに従って、off0及びoff1を結び付け、1つのcache lineにおいてデータのスティッチングタスクを完了し、テクスチャアドレスに対応するテクスチャデータを得、かつそれぞれのデータをdata buffer0及びdata buffer1に同時に書き込み、かつdata buffer0、data buffer1がそれぞれのlevelのデータをそれぞれ格納し、level0だけが有効である場合、同様に、cache0及びcache1からそれぞれのcache lineのデータをそれぞれ読み出し、異なるinte_format及びoff0に従って、odd data及びeven dataを得、data buffer0及びdata buffer1に二重に書き込み、このときdata buffer0及びdata buffer1に同じlevelのテクセルデータを格納し、
前記filterU1ユニットは、まず、切り捨て演算を完了し、異なるinte_formatに対して、異なるビット幅のr、g、b、a値を切り捨て、そして独立な方式でそれぞれフィルタリング計算を行い、ビット幅の切り捨て方法が異なるinte_formatに従って実行し、level0及びlevel1がいずれも有効である場合、このときfilter_typeのフィルタリング方式には、NAF(non-anisotropic)(near_mipmap_linear isotropic、linear_mipmap_linear isotropic)、BAF(bilinear-anisotropic)(無効)、TAF(trilinear-anisotropic)があり、level0が有効で、level1が無効である場合、このときfilter_typeのフィルタリング方式には、NAF(non-anisotropic)(near、near_mipmap_near、linear_mipmap_near)、BAF(bilinear anisotropic)、TAF(trilinear-anisotropic)(無効)があり、level0及びlevel1が同時に有効で、filter_typeがTAF(near_mipmap_linear)である場合、modeが1D、2D、3Dであるかに関わらず、同時にdata buffer0、data buffer1からdata0及びdata1という1つのデータを同時に読み取り、得たフィルタリング結果がdata0*(1.0-ratio_l)+data1*ratio_lであり、フィルタリング方式がTAF(linear_mipmap_linear)で、modeが1Dであれば、まずdata buffer0、data buffer1から同時にdata0、data1及びdata2、data3という2つのデータを順次読み取り、フィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0、data1*(1.0-ratio_u1)+data3*ratio_u1であり、得たフィルタリングの最終結果が(data0*(1.0-ratio_u0)+(data2*ratio_u0)*(1.0-ratio_l)+(data1*1.0-ratio_u1)+(data3*ratio_u1)*ratio_lであり、modeが2Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3及びdata4、data5、data6、data7という4つのデータを順次読み取り、そうするとまずdata0、data2、data4、data6という最初の4つのデータにより得たフィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0、data4*(1.0-ratio_u1)+data6*ratio_u1であり、そしてdata1、data3、data5、data7という後の4つのデータにより得たフィルタリングの中間結果がdata1*(1.0-ratio_u0)+data3*ratio_u0、data5*(1.0-ratio_u1)+data7*ratio_u1であり、最後にそれぞれ(data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data2*(1.0-ratio_u0)+data3*ratio_u0*ratio_v0、(data4*(1.0-ratio_u1)+data5*ratio_u1)*(1.0-ratio_v1)+(data6*(1.0-ratio_u1)+data7*ratio_u1)*ratio_v1というlevel0及びlevel1の最終結果を得、最終的なフィルタリング結果が((data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data2*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0)*(1.0-ratio_l)+((data4*(1.0-ratio_u1)+data5*ratio_u1)*(1.0-ratio_v1)+(data6*(1.0-ratio_u1)+data7*ratio_u1)*ratio_v1)*ratio_lであり、modeが3Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3、data4、data5、data6、data7及びdata8、data9、data10、data11、data12、data13、data14、data15という8つのデータを順次読み取り、まずdata0、data1、data2、data3、data8、data9、data10、data11という最初の8つのデータにより得たフィルタリングの中間結果がそれぞれ((data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_v0)+((data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0、((data8*(1.0-ratio_u1)+data9*ratio_u1)*(1.0-ratio_v1)+((data10*(1.0-ratio_u1)+data11*ratio_u1)*ratio_v1であり、そしてdata4、data5、data6、data7、data12、data13、data14、data15という後の8つのデータにより得たフィルタリングの中間結果がそれぞれ((data4*(1.0-ratio_u0)+data5*ratio_u0)*(1.0-ratio_v0)+((data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0、((data12*(1.0-ratio_u1)+data13*ratio_u1)*(1.0-ratio_v1)+((data14*(1.0-ratio_u1)+data15*ratio_u1)*ratio_v1であり、最後に得たフィルタリングの最終結果が((((data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_v0)+((data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0)*(1.0-ratio_w0)+(((data4*(1.0-ratio_u0)+data5*ratio_u0)*(1.0-ratio_v0)+((data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0)*ratio_w0)*(1.0-ratio_l)+((((data8*(1.0-ratio_u1)+data9*ratio_u1)*(1.0-ratio_v1)+((data10*(1.0-ratio_u1)+data11*ratio_u1)*ratio_v1)*(1.0-ratio_w1)+(((data12*(1.0-ratio_u1)+data13*ratio_u1)*(1.0-ratio_v1)+((data14*(1.0-ratio_u1)+data15*ratio_u1)*ratio_v1)*ratio_w1)*ratio_lであり、anisotropicを有効にした場合、このときdata buffer0、data buffer1におけるデータに対してそれぞれanisotropic計算した後にdata0、data1の中間フィルタリング結果を得、そうすると最終的なフィルタリング結果がdata0*(1.0-ratio_l)+data1*ratio_lであり、level0だけが有効で、filter_typeがnear、near_mipmap_nearである場合、modeが1D、2D、3Dであるかに関わらず、同時にdata buffer0、data buffer1からdata0及びdata1という1つのデータを同時に読み取り、フィルタリングせず、data0、data1フォーマットを変換した後に直接出力し、フィルタリング方式がBAFである場合、modeが1Dであれば、まずdata buffer0、data buffer1から同時にdata0、data1という1つのデータを順次読み取り、最終的なフィルタリング結果がdata0*(1.0-ratio_u0)+data2*ratio_u0であり、modeが2Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3という2つのデータを順次読み取り、そうするとまずdata0、data2という最初の2つのデータにより得たフィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0であり、そしてdata1、data3という後の2つのデータにより得たフィルタリングの中間結果がdata1*(1.0-ratio_u0)+data3*ratio_u0であり、最後に得たフィルタリングの最終結果が(data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_l)+(data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_lであり、modeが3Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3及びdata4、data5、data6、data7という4つのデータを順次読み取り、まずdata0、data1、data4、data5という最初の4つのデータにより得たフィルタリングの中間結果が(data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data4*(1.0-ratio_u0)+data5*ratio_u0)*ratio_v0であり、そしてdata2、data3、data6、data7という後の4つのデータにより得たフィルタリングの中間結果がそれぞれ(data2*(1.0-ratio_u0)+data3*ratio_u0)*(1.0-ratio_v0)+(data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0であり、最後に得たフィルタリングの最終結果が((data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data4*(1.0-ratio_u0)+data5*ratio_u0)*ratio_v0)*(1.0-ratio_w0)+((data2*(1.0-ratio_u0)+data3*ratio_u0)*(1.0-ratio_v0)+(data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0)*ratio_w0であり、フィルタリング操作を実行した後、異なるinte_formatフォーマットに従って、texel_r、texel_g、texel_b、texel_aというfilterの出力結果に割り当て操作を行い、formatがcolorであれば、inte_formatにおけるrのみに値がある場合、このときtexel_rがフィルタリング結果であり、texel_g、texel_bがいずれも0であり、texel_aが1であり、formatがdepth、stencilであれば、このときフィルタリングせず、結果をtexel_r、texel_g成分に割り当て、texel_b、texel_a成分が0であり、
前記pixelユニットU2は、border_colorを有効にした場合、border_colorデータをpixel段階の入力データとして採用し、swizzle操作を有効にしていない場合、pixel_r、pixel_g、pixel_b、pixel_aとborder_colorのborder_color_r、border_color_g、border_color_b、border_color_aが等しく、swizzle操作を有効にした場合、swizzleモードによりそれぞれのチャンネルデータをそれぞれ変換し、最終的にpixel_r、pixel_g、pixel_b、pixel_aという4つの色成分を並行して出力する。
【0007】
選択可能に、Color、depth、stencil、depth_stencilモードにおけるFP32、FP16、FP11、FP10、INT32のデータタイプをサポートする。
【0008】
選択可能に、RGB/BGR formatにおける異なる整数型、浮動小数点型type、RGBA/BGRA formatにおける異なる整数型、浮動小数点型typeの変換もサポートする。
【0009】
選択可能に、depth、stencil、depth_stencilの深度テクスチャに対する比較及びstencil indexの計算もサポートする。
【発明の効果】
【0010】
従来技術に比べて、本開示の有益な効果は以下のとおりであり、
該発明はデュアルBufferを用いることによりテクスチャインデックスアドレスの計算効率を向上させることができ、2つのレイヤーのデータを同時に計算する必要がある場合、並行計算を開始することができ、1つのレイヤーのデータを有効にして計算する必要がある場合、奇数偶数方式並行的にステクセルをインデックすることを採用してデータの並行計算を保証し、それによってテクセルデータのインデックス時間を短縮し、テクセルの計算効率を向上させる。
【0011】
デュアルBufferを用いることによりテクセルデータの計算効率を向上させることができ、2つのレイヤーのデータを同時に計算する必要がある場合、平行計算を実現するために2つのそれぞれのパイプラインに従ってテクセルをそれぞれ読み出すことができ、1つのレイヤーのデータを有効にして計算する必要がある場合、デュアルBuffer方式を用いて並行してアクセスし、それによって並行アクセスの効率を向上させ、テクセルの計算時間を低減することができる。
【0012】
mipmapテクスチャを有効にした場合、lod計算が設定されたmax_levelである場合、その中の1つのbufferパイプラインアドレス、データ計算を有効にすることができ、trilinearがbilinearフィルタリング方式であり、それによって計算の複雑さを低減し、ハードウェア計算の消費電力を低減する。
【0013】
border値が存在し、wrap操作後の(U,V)座標がオーバーフローする場合、border_colorを用いてユーザがデータを設定することにより、アドレス及びデータ計算を回避し、それによってテクスチャアクセス時間を節約し、テクスチャマッピング計算の消費電力を低減する。
【図面の簡単な説明】
【0014】
【
図1】本開示の実施例によるデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータの設計図である。
【
図2】本開示の実施例による2Dテクスチャ座標のbilienarモードでのテクスチャ座標値を示す図である。
【
図3】本開示の実施例による3Dテクスチャ座標のbilinearモードでのマッピング関係図である。
【
図4】本開示の実施例によるデュアル操作時のテクスチャアドレスとcache lineの対応関係を示す図である。
【
図5】本開示の実施例による1Dbilinearモードでの計算モデル図である。
【
図6】本開示の実施例による2Dbilinearモードでの計算モデル図である。
【
図7】本開示の実施例による3Dbilinearモードでの計算モデル図である。
【
図8】本開示の実施例による1Dbilinearモードでの計算モデル図である。
【
図9】本開示の実施例による2Dbilinearモードでの計算モデル図である。
【
図10】本開示の実施例による3Dbilinearモードでの計算モデル図である。
【発明を実施するための形態】
【0015】
以下、本開示の実施例における技術的解決手段を、本開示の実施例における図面を参照して、明確かつ完全に説明するが、明らかに、説明される実施例は、本開示の一部の実施例にすぎず、全ての実施例にすぎないと考えられる。本開示の実施例に基づいて、発明的な労働をせずに当業者によって得られる他の全ての実施例は、本開示の保護範囲に属する。
【0016】
図1~10を参照すると、本開示は、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ設計を提供し、テクスチャアドレス計算及びデータ計算プロセスにおける時間プロセステクスチャを良好に解決することができ、テクスチャマッピングにおけるcolor、depth、stencilの異なるモードでのフィルタリング処理を低減する。
図1に示すように、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ設計であって、Image U0ユニットと、LOD U1ユニットと、Coordinate U2ユニットと、Coordinate controller U3ユニットと、address controller U4ユニットと、を含むaddress calculationユニットを含む。
【0017】
前記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レイヤーの1つのアドレスを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モードでのレジスタコンフィギュレーションをサポートする。
【0018】
前記U1ユニットは、異なるフィルタリングモードでのlevel値の計算を完了し、targetアドレスへのアクセスと組み合わせてimageユニットにアクセスするアドレスを得、level値を計算する前に、まずtarget及びbase_level値をlevel0とし、imageユニットを読み取り、後のlevel計算時の参考としてimageの基本情報を得る必要があり、そしてlevel値の計算に下記の2つの場合が考えられ、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モードで整数を取って隣接する2つのレイヤーを、読み取る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の2つの場合に分け、それぞれ計算し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モードで整数を取って隣接する2つのレイヤーを、読み取る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というフィルタリング方式がある。
【0019】
前記Coordinate U2ユニットは、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コンテンツのborderが有効であり、かつこのときアドレスがオーバーフローした場合、このときdisableがテクセルをリクエストし、border_color値を最終pixel段階での入力として有効にする。
【0020】
前記Coordinate controller U3ユニットは、level0及びlevel1を有効にした場合、filter_typeがpointモードであるとき、modeが1Dであれば、coordinate bufferu0に書き込まれたデータがinte_u0であり、coordinate bufferu1に書き込まれたデータが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であり、coordinate bufferw0に書き込まれたデータがinte_w0であり、coordinate bufferu1に書き込まれたデータがinte_u1であり、coordinate bufferv1に書き込まれたデータがinte_v1であり、coordinatew1に書き込まれたデータがinte_w1であり、filter_typeがlinearモードであるとき、modeが1Dであれば、coordinate bufferu1に書き込まれたデータがinte_u1であり、coordinate bufferu1に書き込まれたデータがinte_u1+1であり、coordinate bufferu0に書き込まれたデータがinte_u0であり、coordinate bufferu0に書き込まれたデータがinte_u0+1であり、modeが2Dであれば、周囲の4つの点の座標を取り、次の
図2に示すように、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、coordinate bufferv1に書き込まれたデータが順次(inte_u1、inte_v1)、(inte_u1+1、inte_v1)、(inte_u1、inte_v1+1)、(inte_u1+1、inte_v1+1)であり、modeが3Dであれば、周囲の8つの点の座標を取り、次の
図3に示すように、coordinate bufferu0、coordinate bufferv0、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、coordinate bufferv1、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、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)である。
【0021】
前記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が無効であるので、デュアルBufferの操作方式により、texel cacheをリクエストするとき、奇数のアドレスの場合、cache0にアクセスするtexel cacheアドレスをリクエストし、偶数のアドレスの場合、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を並行してリクエストする。
【0022】
texel cache U1ユニットは、直接接続されている2つのcacheを含み、異なるtexelがあるcacheラインのインデックス付け及びcache lineのstore、replace操作を完了し、level0及びlevel1が同時に有効である場合、cache0及びcache1の読み取り操作リクエストを並行して完了し、level0だけが有効である場合、cache0にodd cache lineを記憶し、cache1にeven cache lineを記憶する。
【0023】
data calculationU2ユニットは、data controllerU0ユニットと、filterU1ユニットと、pixelユニットU2と、を含む。
【0024】
前記data controllerU0ユニットは、address controllerユニットと同様に、level0及びlevel1が同時に有効である場合、それぞれ異なるinte_formatに従って、off0及びoff1を結び付け、1つのcache lineにおいてデータのスティッチングタスクを完了し、テクスチャアドレスに対応するテクスチャデータを得、かつそれぞれのデータをdata buffer0及びdata buffer1に同時に書き込み、かつdata buffer0、data buffer1がそれぞれのlevelのデータをそれぞれ格納し、level0だけが有効である場合、同様に、cache0及びcache1からそれぞれのcache lineのデータをそれぞれ読み出し、異なるinte_format及びoff0に従って、odd data及びeven dataを得、data buffer0及びdata buffer1に二重に書き込み、このときdata buffer0及びdata buffer1に同じlevelのテクセルデータを格納し、
図4に示すように、時計回りにcacheの読み取り操作を完了する。
【0025】
前記filterU1ユニットは、まず、切り捨て演算を完了し、異なるinte_formatに対して、異なるビット幅のr、g、b、a値を切り捨て、そして独立な方式でそれぞれフィルタリング計算を行い、ビット幅の切り捨て方法が異なるinte_formatに従って実行し、filterユニットがサポートするOGL規格においてinte_formatがcolorであるのは、r8_norm、r8_snorm、r8I、r8UI、r3_g3_b2_norm(大きい側、小さい側)、rgba2_norm、rgba4(大きい側、小さい側)、rgb5_a1_norm(大きい側、小さい側)、rgb4_norm、rgb5_norm、rgb565_norm(大きい側、小さい側)、r16_norm、r16_snorm、r16f、r16UI、r16I、rg8_norm、rg8_snorm、rg8UI、rg8I、srgb8(非線形)、rgb8I、rgb8UI、rgb8_snorm、rgb8_norm、rgb10_norm、rgb10_a2_norm(大きい側、小さい側)、rgb10_a2UI(大きい側、小さい側)、srgb8_a8_norm(大きい側、小さい側)、r11f_g11f_b10f、rgb9_e5(共有)、rgba8_norm(大きい側、小さい側)、rgba8_snorm(大きい側、小さい側)、rgba8UI(大きい側、小さい側)、rgba8I(大きい側、小さい側)、rg16、rg16_snorm、rg16I、rg16UI、rg16f、r32I、r32UI、r32fであり、filterユニットがサポートするinte_formatがdepth及びstencilであるのは、depth16、depth24、depth32、depth32f、stencil_index1、stencil_index4、stencil_index8、stencil_index16、depth24_stencil8、depth32f_stencil8であり、integerのデータタイプ(符号ありと符号なし)の2つの場合、floatのデータタイプ(normalized、unnormalized、非線形、共有データタイプ)の4つの場合について、フィルタリング演算を実行する前にsnorm、norm、srgb、rgbaeに異なるfilter_typeでフィルタリング計算を完了する必要がある。level0及びlevel1がいずれも有効である場合、このときfilter_typeのフィルタリング方式には、NAF(non-anisotropic)(near_mipmap_linear isotropic、linear_mipmap_linear isotropic)、BAF(bilinear-anisotropic)(無効)、TAF(trilinear-anisotropic)があり、level0が有効で、level1が無効である場合、このときfilter_typeのフィルタリング方式には、NAF(non-anisotropic)(near、near_mipmap_near、linear_mipmap_near)、BAF(bilinear anisotropic)、TAF(trilinear-anisotropic)(無効)がある。
図8に示されるように、level0及びlevel1が同時に有効で、filter_typeがTAF(near_mipmap_linear)である場合、modeが1D、2D、3Dであるかに関わらず、同時にdata buffer0、data buffer1からdata0及びdata1という1つのデータを同時に読み取り、得たフィルタリング結果がdata0*(1.0-ratio_l)+data1*ratio_lであり、フィルタリング方式がTAF(linear_mipmap_linear)で、modeが1Dであれば、まずdata buffer0、data buffer1から同時にdata0、data1及びdata2、data3という2つのデータを順次読み取り、フィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0、data1*(1.0-ratio_u1)+data3*ratio_u1であり、得たフィルタリングの最終結果が(data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_l)+(data1*(1.0-ratio_u1)+data3*ratio_u1)*ratio_lであり、modeが2Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3及びdata4、data5、data6、data7という4つのデータを順次読み取り、そうするとまずdata0、data2、data4、data6という最初の4つのデータにより得たフィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0、data4*(1.0-ratio_u1)+data6*ratio_u1であり、そして、
図9に示されるように、data1、data3、data5、data7という後の4つのデータにより得たフィルタリングの中間結果がdata1*(1.0-ratio_u0)+data3*ratio_u0、data5*(1.0-ratio_u1)+data7*ratio_u1であり、最後にそれぞれ(data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data2*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0、(data4*(1.0-ratio_u1)+data5*ratio_u1)*(1.0-ratio_v1)+(data6*(1.0-ratio_u1)+data7*ratio_u1)*ratio_v1というlevel0及びlevel1の最終結果を得、最終的なフィルタリング結果が((data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data2*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0)*(1.0-ratio_l)+((data4*(1.0-ratio_u1)+data5*ratio_u1)*(1.0-ratio_v1)+(data6*(1.0-ratio_u1)+data7*ratio_u1)*ratio_v1)*ratio_lであり、modeが3Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3、data4、data5、data6、data7及びdata8、data9、data10、data11、data12、data13、data14、data15という8つのデータを順次読み取り、まずdata0、data1、data2、data3、data8、data9、data10、data11という最初の8つのデータにより得たフィルタリングの中間結果がそれぞれ((data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_v0)+((data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0、((data8*(1.0-ratio_u1)+data9*ratio_u1)*(1.0-ratio_v1)+((data10*(1.0-ratio_u1)+data11*ratio_u1)*ratio_v1であり、そしてdata4、data5、data6、data7、data12、data13、data14、data15という後の8つのデータにより得たフィルタリングの中間結果がそれぞれ((data4*(1.0-ratio_u0)+data5*ratio_u0)*(1.0-ratio_v0)+((data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0、((data12*(1.0-ratio_u1)+data13*ratio_u1)*(1.0-ratio_v1)+((data14*(1.0-ratio_u1)+data15*ratio_u1)*ratio_v1であり、最後に得たフィルタリングの最終結果が((((data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_v0)+((data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_v0)*(1.0-ratio_w0)+(((data4*(1.0-ratio_u0)+data5*ratio_u0)*(1.0-ratio_v0)+((data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0)*ratio_w0)*(1.0-ratio_l)+((((data8*(1.0-ratio_u1)+data9*ratio_u1)*(1.0-ratio_v1)+((data10*(1.0-ratio_u1)+data11*ratio_u1)*ratio_v1)*(1.0-ratio_w1)+(((data12*(1.0-ratio_u1)+data13*ratio_u1)*(1.0-ratio_v1)+((data14*(1.0-ratio_u1)+data15*ratio_u1)*ratio_v1)*ratio_w1)*ratio_lであり、
図10に示すように、anisotropicを有効にした場合、このときdata buffer0、data buffer1におけるデータに対してそれぞれanisotropic計算した後にdata0、data1の中間フィルタリング結果を得、そうすると最終的なフィルタリング結果がdata0*(1.0-ratio_l)+data1*ratio_lであり、level0だけが有効で、filter_typeがnear、near_mipmap_nearである場合、modeが1D、2D、3Dであるかに関わらず、同時にdata buffer0、data buffer1からdata0及びdata1という1つのデータを同時に読み取り、フィルタリングせず、data0、data1フォーマットを変換した後に直接出力し、フィルタリング方式がBAFである場合、modeが1Dであれば、まずdata buffer0、data buffer1から同時にdata0、data1という1つのデータを順次読み取り、最終的なフィルタリング結果がdata0*(1.0-ratio_u0)+data2*ratio_u0であり、次の
図5に示されるように、modeが2Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3という2つのデータを順次読み取り、そうするとまずdata0、data2という最初の2つのデータにより得たフィルタリングの中間結果がdata0*(1.0-ratio_u0)+data2*ratio_u0であり、そして、次の
図6に示されるように、data1、data3という後の2つのデータにより得たフィルタリングの中間結果がdata1*(1.0-ratio_u0)+data3*ratio_u0であり、最後に得たフィルタリングの最終結果が(data0*(1.0-ratio_u0)+data2*ratio_u0)*(1.0-ratio_l)+(data1*(1.0-ratio_u0)+data3*ratio_u0)*ratio_lであり、modeが3Dであれば、data buffer0、data buffer1から同時にdata0、data1、data2、data3及びdata4、data5、data6、data7という4つのデータを順次読み取り、まずdata0、data1、data4、
data5という最初の4つのデータにより得たフィルタリングの中間結果が(data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data4*(1.0-ratio_u0)+data5*ratio_u0)*ratio_v0であり、そしてdata2、data3、data6、data7という後の4つのデータにより得たフィルタリングの中間結果がそれぞれ(data2*(1.0-ratio_u0)+data3*ratio_u0)*(1.0-ratio_v0)+(data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0であり、最後に得たフィルタリングの最終結果が((data0*(1.0-ratio_u0)+data1*ratio_u0)*(1.0-ratio_v0)+(data4*(1.0-ratio_u0)+data5*ratio_u0)*ratio_v0)*(1.0-ratio_w0)+((data2*(1.0-ratio_u0)+data3*ratio_u0)*(1.0-ratio_v0)+(data6*(1.0-ratio_u0)+data7*ratio_u0)*ratio_v0)*ratio_w0であり、次の
図7に示され、フィルタリング操作を実行した後、異なるinte_formatフォーマットに従って、texel_r、texel_g、texel_b、texel_aというfilterの出力結果に割り当て操作を行い、formatがcolorであれば、inte_formatにおけるrのみに値がある場合、このときtexel_rがフィルタリング結果であり、texel_g、texel_bがいずれも0であり、texel_aが1であり、formatがdepth、stencilであれば、このときフィルタリングせず、結果をtexel_r、texel_g成分に割り当て、texel_b、texel_a成分が0である。
【0026】
前記pixelユニットU2は、border_colorを有効にした場合、border_colorデータをpixel段階の入力データとして採用し、swizzle操作を有効にしていない場合、pixel_r、pixel_g、pixel_b、pixel_aとborder_colorのborder_color_r、border_color_g、border_color_b、border_color_aが等しく、swizzle操作を有効にした場合、swizzleモードによりそれぞれのチャンネルデータをそれぞれ変換し、最終的にpixel_r、pixel_g、pixel_b、pixel_aという4つの色成分を並行して出力する。
【0027】
以上、実施例を参照して本開示を説明したが、本開示の範囲を逸脱することなく、種々の変形が可能であり、それらの構成要素を均等物に置き換えることができる。特に、本開示に開示された実施例における各特徴は、構造的な矛盾がない限り、任意の方法で相互に組み合わせて使用することができ、これらの組み合わせが本明細書において網羅的に記載されていないのは、単に、紙面の省略及びリソースの節約のためである。従って、本開示は、本明細書に開示された特定の実施例に限定されるものではなく、特許請求の範囲に含まれる全ての技術的解決手段を含む。