JP7227404B2 - デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ - Google Patents

デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ Download PDF

Info

Publication number
JP7227404B2
JP7227404B2 JP2021573726A JP2021573726A JP7227404B2 JP 7227404 B2 JP7227404 B2 JP 7227404B2 JP 2021573726 A JP2021573726 A JP 2021573726A JP 2021573726 A JP2021573726 A JP 2021573726A JP 7227404 B2 JP7227404 B2 JP 7227404B2
Authority
JP
Japan
Prior art keywords
ratio
inte
data
mode
filtering
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021573726A
Other languages
English (en)
Other versions
JP2022536738A (ja
Inventor
ウー,シンタオ
ワン,レイ
Original Assignee
フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド filed Critical フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド
Publication of JP2022536738A publication Critical patent/JP2022536738A/ja
Application granted granted Critical
Publication of JP7227404B2 publication Critical patent/JP7227404B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Description

本開示は、GPUチップ設計技術分野に関し、具体的にはデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータである。
[関連出願の相互参照]
本開示は2019年6月10日に提出された、出願番号201910495890.0、名称「デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ」という特許文献の優先権を主張し、その内容の全てが参照によって本開示に組み込まれる。
テクスチャマッピング操作は、GPGPUによる汎用計算分野内の計算ユニットとしてだけでなく、テクスチャデータfetch、sampleに対するグラフィックレンダリングパイプラインの実行者としてもGPUで広く利用されている。従ってテクスチャマッピングユニットの性能の良し悪しは、グラフィックプロセッサ内部の実行効率に直接影響し、汎用計算分野ではデータlookup、transferの遅さに直接影響し、従って、効率的なテクスチャマッピングユニットを設計することは、GPU設計において特に重要である。
本開示の目的は、上記背景技術で提案されたグラフィックプロセッサ内部の実行効率が悪く、汎用計算分野ではデータLookup、transferの遅さに直接影響するという問題を解決するために、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータを提供することである。
上記目的を達成するために、本開示は以下の技術的解決手段を提供し、デュアル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を並行してリクエストする。
選択可能に、前記LOD U1ユニットは、直接接続されている2つのcacheを含み、異なるtexelが所在するcacheラインのインデックス付け及びcache lineのstore、replace操作を完了し、level0及びlevel1が同時に有効である場合、cache0及びcache1の読み取り操作リクエストを並行して完了し、level0だけが有効である場合、cache0にodd cache lineを記憶し、cache1にeven cache lineを記憶する。
選択可能に、前記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つの色成分を並行して出力する。
選択可能に、Color、depth、stencil、depth_stencilモードにおけるFP32、FP16、FP11、FP10、INT32のデータタイプをサポートする。
選択可能に、RGB/BGR formatにおける異なる整数型、浮動小数点型type、RGBA/BGRA formatにおける異なる整数型、浮動小数点型typeの変換もサポートする。
選択可能に、depth、stencil、depth_stencilの深度テクスチャに対する比較及びstencil indexの計算もサポートする。
従来技術に比べて、本開示の有益な効果は以下のとおりであり、
該発明はデュアルBufferを用いることによりテクスチャインデックスアドレスの計算効率を向上させることができ、2つのレイヤーのデータを同時に計算する必要がある場合、並行計算を開始することができ、1つのレイヤーのデータを有効にして計算する必要がある場合、奇数偶数方式並行的にステクセルをインデックすることを採用してデータの並行計算を保証し、それによってテクセルデータのインデックス時間を短縮し、テクセルの計算効率を向上させる。
デュアルBufferを用いることによりテクセルデータの計算効率を向上させることができ、2つのレイヤーのデータを同時に計算する必要がある場合、平行計算を実現するために2つのそれぞれのパイプラインに従ってテクセルをそれぞれ読み出すことができ、1つのレイヤーのデータを有効にして計算する必要がある場合、デュアルBuffer方式を用いて並行してアクセスし、それによって並行アクセスの効率を向上させ、テクセルの計算時間を低減することができる。
mipmapテクスチャを有効にした場合、lod計算が設定されたmax_levelである場合、その中の1つのbufferパイプラインアドレス、データ計算を有効にすることができ、trilinearがbilinearフィルタリング方式であり、それによって計算の複雑さを低減し、ハードウェア計算の消費電力を低減する。
border値が存在し、wrap操作後の(U,V)座標がオーバーフローする場合、border_colorを用いてユーザがデータを設定することにより、アドレス及びデータ計算を回避し、それによってテクスチャアクセス時間を節約し、テクスチャマッピング計算の消費電力を低減する。
本開示の実施例によるデュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータの設計図である。 本開示の実施例による2Dテクスチャ座標のbilienarモードでのテクスチャ座標値を示す図である。 本開示の実施例による3Dテクスチャ座標のbilinearモードでのマッピング関係図である。 本開示の実施例によるデュアル操作時のテクスチャアドレスとcache lineの対応関係を示す図である。 本開示の実施例による1Dbilinearモードでの計算モデル図である。 本開示の実施例による2Dbilinearモードでの計算モデル図である。 本開示の実施例による3Dbilinearモードでの計算モデル図である。 本開示の実施例による1Dbilinearモードでの計算モデル図である。 本開示の実施例による2Dbilinearモードでの計算モデル図である。 本開示の実施例による3Dbilinearモードでの計算モデル図である。
以下、本開示の実施例における技術的解決手段を、本開示の実施例における図面を参照して、明確かつ完全に説明するが、明らかに、説明される実施例は、本開示の一部の実施例にすぎず、全ての実施例にすぎないと考えられる。本開示の実施例に基づいて、発明的な労働をせずに当業者によって得られる他の全ての実施例は、本開示の保護範囲に属する。
図1~10を参照すると、本開示は、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ設計を提供し、テクスチャアドレス計算及びデータ計算プロセスにおける時間プロセステクスチャを良好に解決することができ、テクスチャマッピングにおけるcolor、depth、stencilの異なるモードでのフィルタリング処理を低減する。図1に示すように、デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ設計であって、Image U0ユニットと、LOD U1ユニットと、Coordinate U2ユニットと、Coordinate controller U3ユニットと、address controller U4ユニットと、を含むaddress calculationユニットを含む。
前記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コンテンツのborderが有効であり、かつこのときアドレスがオーバーフローした場合、このとき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であれば、周囲の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)である。
前記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を並行してリクエストする。
texel cache U1ユニットは、直接接続されている2つのcacheを含み、異なるtexelがあるcacheラインのインデックス付け及びcache lineのstore、replace操作を完了し、level0及びlevel1が同時に有効である場合、cache0及びcache1の読み取り操作リクエストを並行して完了し、level0だけが有効である場合、cache0にodd cache lineを記憶し、cache1にeven cache lineを記憶する。
data calculationU2ユニットは、data controllerU0ユニットと、filterU1ユニットと、pixelユニットU2と、を含む。
前記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の読み取り操作を完了する。
前記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である。
前記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つの色成分を並行して出力する。
以上、実施例を参照して本開示を説明したが、本開示の範囲を逸脱することなく、種々の変形が可能であり、それらの構成要素を均等物に置き換えることができる。特に、本開示に開示された実施例における各特徴は、構造的な矛盾がない限り、任意の方法で相互に組み合わせて使用することができ、これらの組み合わせが本明細書において網羅的に記載されていないのは、単に、紙面の省略及びリソースの節約のためである。従って、本開示は、本明細書に開示された特定の実施例に限定されるものではなく、特許請求の範囲に含まれる全ての技術的解決手段を含む。

Claims (6)

  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アーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ。
JP2021573726A 2019-06-10 2020-06-10 デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ Active JP7227404B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201910495890.0 2019-06-10
CN201910495890.0A CN112070651A (zh) 2019-06-10 2019-06-10 一种基于双Buffer架构下的纹理贴图硬件加速器
PCT/CN2020/095464 WO2020249026A1 (zh) 2019-06-10 2020-06-10 一种基于双Buffer架构下的纹理贴图硬件加速器

Publications (2)

Publication Number Publication Date
JP2022536738A JP2022536738A (ja) 2022-08-18
JP7227404B2 true JP7227404B2 (ja) 2023-02-21

Family

ID=73657991

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021573726A Active JP7227404B2 (ja) 2019-06-10 2020-06-10 デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ

Country Status (6)

Country Link
US (1) US20220327759A1 (ja)
EP (1) EP3982255A4 (ja)
JP (1) JP7227404B2 (ja)
KR (1) KR20220019791A (ja)
CN (1) CN112070651A (ja)
WO (1) WO2020249026A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230122931A (ko) 2022-02-15 2023-08-22 연세대학교 산학협력단 심방세동 진단을 위한 엑소좀 내 긴 비암호화 RNA(long non-coding RNA) 바이오마커 및 이의 용도
CN116433464B (zh) * 2023-06-14 2023-11-17 北京象帝先计算技术有限公司 存储地址偏移量计算装置、方法、电子组件及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006244426A (ja) 2005-03-07 2006-09-14 Sony Computer Entertainment Inc テクスチャ処理装置、描画処理装置、およびテクスチャ処理方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5594854A (en) * 1995-03-24 1997-01-14 3Dlabs Inc. Ltd. Graphics subsystem with coarse subpixel correction
US6331856B1 (en) * 1995-11-22 2001-12-18 Nintendo Co., Ltd. Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing
US6002410A (en) * 1997-08-25 1999-12-14 Chromatic Research, Inc. Reconfigurable texture cache
US6246422B1 (en) * 1998-09-01 2001-06-12 Sun Microsystems, Inc. Efficient method for storing texture maps in multi-bank memory
US6766281B1 (en) * 2000-05-12 2004-07-20 S3 Graphics Co., Ltd. Matched texture filter design for rendering multi-rate data samples
US7057623B1 (en) * 2000-11-15 2006-06-06 Micron Technology, Inc. Texture addressing circuit and method
US6778181B1 (en) * 2000-12-07 2004-08-17 Nvidia Corporation Graphics processing system having a virtual texturing array
US6859209B2 (en) * 2001-05-18 2005-02-22 Sun Microsystems, Inc. Graphics data accumulation for improved multi-layer texture performance
JP4264530B2 (ja) * 2002-07-19 2009-05-20 ソニー株式会社 画像処理装置およびその方法
US6987517B1 (en) * 2004-01-06 2006-01-17 Nvidia Corporation Programmable graphics processor for generalized texturing
US8300059B2 (en) * 2006-02-03 2012-10-30 Ati Technologies Ulc Method and apparatus for selecting a mip map level based on a min-axis value for texture mapping
US20100091018A1 (en) * 2008-07-11 2010-04-15 Advanced Micro Devices, Inc. Rendering Detailed Animated Three Dimensional Characters with Coarse Mesh Instancing and Determining Tesselation Levels for Varying Character Crowd Density
CN102903146B (zh) * 2012-09-13 2015-09-16 中国科学院自动化研究所 用于场景绘制的图形处理方法
US10430169B2 (en) * 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
KR102329475B1 (ko) * 2014-08-27 2021-11-19 삼성전자주식회사 렌더링 퀄리티 제어 장치 및 방법
US9811875B2 (en) * 2014-09-10 2017-11-07 Apple Inc. Texture state cache
KR102264163B1 (ko) * 2014-10-21 2021-06-11 삼성전자주식회사 텍스쳐를 처리하는 방법 및 장치
US10388058B2 (en) * 2017-02-16 2019-08-20 Microsoft Technology Licensing, Llc Texture residency hardware enhancements for graphics processors
CN109064535B (zh) * 2018-07-19 2023-05-23 南京军微半导体科技有限公司 Gpu中一种纹理贴图的硬件加速实现方法
CN109634666B (zh) * 2018-12-11 2022-11-15 华夏芯(北京)通用处理器技术有限公司 一种预取机制下融合btb的方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006244426A (ja) 2005-03-07 2006-09-14 Sony Computer Entertainment Inc テクスチャ処理装置、描画処理装置、およびテクスチャ処理方法

Also Published As

Publication number Publication date
US20220327759A1 (en) 2022-10-13
WO2020249026A1 (zh) 2020-12-17
KR20220019791A (ko) 2022-02-17
EP3982255A1 (en) 2022-04-13
EP3982255A4 (en) 2023-07-12
JP2022536738A (ja) 2022-08-18
CN112070651A (zh) 2020-12-11

Similar Documents

Publication Publication Date Title
US8149243B1 (en) 3D graphics API extension for a packed float image format
JP7227404B2 (ja) デュアルBufferアーキテクチャに基づくテクスチャマッピング用ハードウェアアクセラレータ
US7986325B1 (en) Loading integer-based data into a graphics processing system
US7528843B1 (en) Dynamic texture fetch cancellation
US8514235B2 (en) System and method for managing the computation of graphics shading operations
US20130271465A1 (en) Sort-Based Tiled Deferred Shading Architecture for Decoupled Sampling
US7466318B1 (en) Avoiding unnecessary uncovered texture fetches
US20130002651A1 (en) Apparatus and Method For Texture Level Of Detail Computation
US7880745B2 (en) Systems and methods for border color handling in a graphics processing unit
US20110216068A1 (en) Edge processing techniques
US20080094409A1 (en) Image Generation Device and Image Generation Method
US6333743B1 (en) Method and apparatus for providing image and graphics processing using a graphics rendering engine
US7405735B2 (en) Texture unit, image rendering apparatus and texel transfer method for transferring texels in a batch
JP2006244426A (ja) テクスチャ処理装置、描画処理装置、およびテクスチャ処理方法
CA2558657A1 (en) Embedded system with 3d graphics core and local pixel buffer
US7773092B1 (en) Texture map coverage optimization
US10013735B2 (en) Graphics processing unit with bayer mapping
US7136071B1 (en) Method and apparatus for sampling non-power of two dimension texture maps
US20080211823A1 (en) Three-dimensional graphic accelerator and method of reading texture data
US7619635B1 (en) Anisotropic texture sampling for odd ratios
US11257277B2 (en) Methods and apparatus to facilitate adaptive texture filtering
US7091983B1 (en) Coordinate wrapping for anisotropic filtering of non-power of two textures
US10706607B1 (en) Graphics texture mapping
KR100420858B1 (ko) 3차원 렌더링 프로세서의 매핑 처리 장치 및 방법
US7167183B1 (en) Reorganized anisotropic sampling order

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220209

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221215

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230110

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230209

R150 Certificate of patent or registration of utility model

Ref document number: 7227404

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150