(57)【要約】  本開示は、タイルベースのレンダリングを実行するグラフィックスシステム内でイントラフレームタイムスタンプをサポートする技法を説明する。イントラフレームタイムスタンプをサポートする技法は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成することを含むことができる。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つの関数とすることができる。タイムスタンプ値は、中央処理装置（ＣＰＵ）、ＧＰＵ、別のプロセッサ、またはその任意の組合せによって生成され得る。イントラフレームタイムスタンプ要求に関するタイムスタンプ値を生成するのにビンごとのタイムスタンプ値を使用することによって、イントラフレームタイムスタンプが、タイルベースのレンダリングを実行するグラフィックスシステムによってサポートされ得る。
2016522474.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサを用いて、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成することを備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
方法。
【請求項２】
前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、請求項１に記載の方法。
【請求項３】
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項２に記載の方法。
【請求項４】
前記少なくとも２つのビンごとのタイムスタンプ値は、少なくとも２つの基準タイムスタンプ値をさらに備え、前記少なくとも２つの基準タイムスタンプ値の各々は、前記レンダリングパス反復のうちのそれぞれの１つ中に、前記レンダリングパス反復のうちの前記それぞれの１つに関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される、請求項３に記載の方法。
【請求項５】
前記タイムスタンプ値を生成することは、次式に基づいて前記タイムスタンプ値を生成することを備え、
【数１】
2016522474.tif 000007
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項２に記載の方法。
【請求項６】
前記タイムスタンプ値を生成することは、前記グラフィックスフレームについて実行されるコマンドの順序付けられたシーケンス内の少なくとも２つの描画呼出しコマンドの間に位置決めされたタイムスタンプ要求に応答して前記タイムスタンプ値を生成することを備える、請求項１に記載の方法。
【請求項７】
前記ＧＰＵは、前記グラフィックスフレームに関するタイルベースのレンダリングを実行している間に複数のレンダリングパス反復を実行し、
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第１のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第２のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項６に記載の方法。
【請求項８】
前記複数のビンごとのタイムスタンプ値の各々は、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに応答して生成され、前記ビンごとのタイムスタンプ要求の各々は、複数のコマンドストリームのうちのそれぞれの１つ内に配置され、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、請求項１に記載の方法。
【請求項９】
前記タイムスタンプ値を生成することは、
前記複数のビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値を生成すること、前記タイムスタンプ値の各々は、前記グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つに対応し、前記タイムスタンプ要求の各々は、グラフィックスアプリケーションによって要求される、
を備える、請求項１に記載の方法。
【請求項１０】
前記タイムスタンプ要求のうちの少なくとも２つは、前記グラフィックスフレームについて実行されるコマンドの前記順序付けられた前記順序付けられたシーケンス内で連続する描画呼出しコマンドのそれぞれの対の間に位置決めされ、
前記複数のタイムスタンプ値を生成することは、コマンドの前記順序付けられたシーケンス内の前記タイムスタンプ要求について返される前記タイムスタンプ値が、コマンドの前記順序付けられたシーケンスの始めからコマンドの前記順序付けられたシーケンスの終りまで値において単調に増加するように、前記ビンごとのタイムスタンプ値に基づいて前記複数のタイムスタンプ値を生成することを備える、
請求項９に記載の方法。
【請求項１１】
前記複数のタイムスタンプ値は、前記グラフィックスフレームの前記レンダリング中に実行するのにコマンドの前記順序付けられたシーケンス内の描画呼出しコマンドによって費やされる時間の相対的な長さを示す、請求項９に記載の方法。
【請求項１２】
前記複数のタイムスタンプ値を生成することは、次式に基づいて前記複数のタイムスタンプ値を生成することを備え、
【数２】
2016522474.tif 000008
Ｖａｌｕｅ（ｘ）は、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に対応する、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関して何らかのプリミティブをレンダリングする前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項９に記載の方法。
【請求項１３】
前記タイムスタンプ値を生成することは、
グラフィックスアプリケーションからタイムスタンプ要求を受け取ることと、
前記タイムスタンプ要求に基づいて複数のビンごとのタイムスタンプ要求を生成することと、
前記ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれの１つ内に配置することと、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成され、
前記ＧＰＵに前記コマンドストリームを実行させることと、
前記コマンドストリーム内に配置された前記ビンごとのタイムスタンプ要求に応答して前記ＧＰＵによって生成された前記ビンごとのタイムスタンプ値に基づいて前記タイムスタンプ値を生成することと、
を備える、請求項１に記載の方法。
【請求項１４】
前記１つまたは複数のプロセッサは、中央処理装置（ＣＰＵ）を備える、請求項１に記載の方法。
【請求項１５】
前記１つまたは複数のプロセッサは、前記ＧＰＵを備える、請求項１に記載の方法。
【請求項１６】
グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するように構成された１つまたは複数のプロセッサを備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
デバイス。
【請求項１７】
前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、請求項１６に記載のデバイス。
【請求項１８】
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項１７に記載のデバイス。
【請求項１９】
前記少なくとも２つのビンごとのタイムスタンプ値は、少なくとも２つの基準タイムスタンプ値をさらに備え、前記少なくとも２つの基準タイムスタンプ値の各々は、前記レンダリングパス反復のうちのそれぞれの１つ中に、前記レンダリングパス反復のうちの前記それぞれの１つに関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される、請求項１８に記載のデバイス。
【請求項２０】
前記１つまたは複数のプロセッサは、次式に基づいて前記タイムスタンプ値を生成するようにさらに構成され、
【数３】
2016522474.tif 000009
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項１７に記載のデバイス。
【請求項２１】
前記１つまたは複数のプロセッサは、前記グラフィックスフレームについて実行されるコマンドの順序付けられたシーケンス内の少なくとも２つの描画呼出しコマンドの間に位置決めされたタイムスタンプ要求に応答して前記タイムスタンプ値を生成するようにさらに構成される、請求項１６に記載のデバイス。
【請求項２２】
前記ＧＰＵは、前記グラフィックスフレームに関するタイルベースのレンダリングを実行している間に複数のレンダリングパス反復を実行し、
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第１のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第２のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項２１に記載のデバイス。
【請求項２３】
前記複数のビンごとのタイムスタンプ値の各々は、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに応答して生成され、前記ビンごとのタイムスタンプ要求の各々は、複数のコマンドストリームのうちのそれぞれの１つ内に配置され、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、請求項１６に記載のデバイス。
【請求項２４】
前記１つまたは複数のプロセッサは、前記複数のビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値を生成するようにさらに構成され、前記タイムスタンプ値の各々は、前記グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つに対応し、前記タイムスタンプ要求の各々は、グラフィックスアプリケーションによって要求される、請求項１６に記載のデバイス。
【請求項２５】
前記タイムスタンプ要求のうちの少なくとも２つは、前記グラフィックスフレームについて実行されるコマンドの前記順序付けられた前記順序付けられたシーケンス内で連続する描画呼出しコマンドのそれぞれの対の間に位置決めされ、
前記１つまたは複数のプロセッサは、コマンドの前記順序付けられたシーケンス内の前記タイムスタンプ要求について返される前記タイムスタンプ値が、コマンドの前記順序付けられたシーケンスの始めからコマンドの前記順序付けられたシーケンスの終りまで値において単調に増加するように、前記ビンごとのタイムスタンプ値に基づいて前記複数のタイムスタンプ値を生成するようにさらに構成される、
請求項２４に記載のデバイス。
【請求項２６】
前記複数のタイムスタンプ値は、前記グラフィックスフレームの前記レンダリング中に実行するのにコマンドの前記順序付けられたシーケンス内の描画呼出しコマンドによって費やされる時間の相対的な長さを示す、請求項２４に記載のデバイス。
【請求項２７】
前記１つまたは複数のプロセッサは、次式に基づいて前記複数のタイムスタンプ値を生成するようにさらに構成され、
【数４】
2016522474.tif 000010
Ｖａｌｕｅ（ｘ）は、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に対応する、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関して何らかのプリミティブをレンダリングする前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項２４に記載のデバイス。
【請求項２８】
前記１つまたは複数のプロセッサは、
グラフィックスアプリケーションからタイムスタンプ要求を受け取り、
前記タイムスタンプ要求に基づいて複数のビンごとのタイムスタンプ要求を生成し、
前記ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれの１つ内に配置し、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成され、
前記ＧＰＵに前記コマンドストリームを実行させ、
前記コマンドストリーム内に配置された前記ビンごとのタイムスタンプ要求に応答して前記ＧＰＵによって生成された前記ビンごとのタイムスタンプ値に基づいて前記タイムスタンプ値を生成する、
ようにさらに構成される、請求項１６に記載のデバイス。
【請求項２９】
前記１つまたは複数のプロセッサは、中央処理装置（ＣＰＵ）を備える、請求項１６に記載のデバイス。
【請求項３０】
前記１つまたは複数のプロセッサは、前記ＧＰＵを備える、請求項１６に記載のデバイス。
【請求項３１】
前記デバイスは、ワイヤレス通信デバイスを備える、請求項１６に記載のデバイス。
【請求項３２】
前記デバイスは、携帯電話送受話器を備える、請求項１６に記載のデバイス。
【請求項３３】
グラフィックス処理ユニット（ＧＰＵ）と、
グラフィックスフレームに関するタイルベースのレンダリングを実行している間に前記ＧＰＵによって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するための手段と、を備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
装置。
【請求項３４】
前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、請求項３３に記載の装置。
【請求項３５】
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項３４に記載の装置。
【請求項３６】
前記タイムスタンプ値を生成するための前記手段は、次式に基づいて前記タイムスタンプ値を生成するための手段を備え、
【数５】
2016522474.tif 000011
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項３４に記載の装置。
【請求項３７】
前記タイムスタンプ値を生成するための前記手段は、中央処理装置（ＣＰＵ）と前記ＧＰＵとのうちの少なくとも１つを備える、請求項３３に記載の装置。
【請求項３８】
１つまたは複数のプロセッサによって実行された時に、前記１つまたは複数のプロセッサに、
グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成させる、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
命令を備える非一時的コンピュータ可読記憶媒体。
【請求項３９】
前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、請求項３８に記載の非一時的コンピュータ可読記憶媒体。
【請求項４０】
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項３９に記載の非一時的コンピュータ可読記憶媒体。
【請求項４１】
前記１つまたは複数のプロセッサに前記タイムスタンプ値を生成させる前記命令は、前記１つまたは複数のプロセッサに次式に基づいて前記タイムスタンプ値を生成させる命令を備え、
【数６】
2016522474.tif 000012
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項３９に記載の非一時的コンピュータ可読記憶媒体。
【請求項４２】
前記１つまたは複数のプロセッサは、中央処理装置（ＣＰＵ）と前記ＧＰＵとのうちの少なくとも１つを備える、請求項３８に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本願は、その内容全体が参照によって本明細書に組み込まれている、２０１３年４月１１日に出願した米国特許仮出願第６１／８１１０５６号の利益を主張するものである。
【０００２】
[0002]本開示は、グラフィックス処理システムに関し、より具体的には、グラフィックス処理システムでのタイムスタンプの使用に関する。
【背景技術】
【０００３】
[0003]コンピューティングデバイスは、しばしば、表示のためのグラフィックスデータのレンダリングを加速するために、グラフィックス処理ユニット（ＧＰＵ）を利用する。そのようなコンピューティングデバイスは、たとえば、コンピュータワークステーション、携帯電話（たとえば、いわゆるスマートフォン）、組込みシステム、パーソナルコンピュータ、タブレットコンピュータ、およびビデオゲーム機を含むことができる。レンダリングは、一般に、１つまたは複数の３次元（３Ｄ）グラフィックスオブジェクトを含むことができる３Ｄグラフィックスシーンを２次元（２Ｄ）のラスタ化された画像データに変換するプロセスを指す。グラフィックスシーンは、各フレームが時間における特定の瞬間のグラフィックスシーンを描く、１つまたは複数のフレームのシーケンスとしてレンダリングされ得る。
【０００４】
[0004]ＧＰＵは、３Ｄグラフィックスシーンのレンダリングに関する少なくとも部分的なハードウェアアクセラレーションを提供するために、３Ｄレンダリングパイプラインを含むことができる。シーン内の３Ｄグラフィックスオブジェクトは、グラフィックスアプリケーションによって１つまたは複数の３Ｄグラフィックスプリミティブ（たとえば、点、線、三角形、パッチなど）に副分割され得、ＧＰＵは、レンダリングされるフレームの各々について、シーンの３Ｄグラフィックスプリミティブを２Ｄのラスタ化された画像データに変換することができる。したがって、ＧＰＵレンダリングの特定の文脈では、レンダリングは、グラフィックスシーン内の３Ｄオブジェクトに対応する３Ｄグラフィックスプリミティブを２Ｄのラスタ化された画像データに変換するプロセスを指すことができる。
【０００５】
[0005]特定のフレームに関して３Ｄグラフィックスプリミティブをレンダリングするために、ホスト中央処理装置（ＣＰＵ）上で実行するグラフィックスアプリケーションは、レンダリングされるべきプリミティブに対応するジオメトリデータをＧＰＵアクセス可能メモリ内に配置し、１つまたは複数のＧＰＵ状態セットアップコマンドをコマンドストリーム内に配置し、ＧＰＵにジオメトリデータに基づいてプリミティブをレンダリングさせる１つまたは複数の描画呼出しをコマンドストリーム内に配置することができる。ＧＰＵは、コマンドストリーム内に含まれるコマンドを、コマンドがコマンドストリーム内に配置されている順序で処理し、これによってシーンをレンダリングすることができる。
【発明の概要】
【０００６】
[0006]本開示は、タイルベースのレンダリングを実行するグラフィックス処理システム内でイントラフレームタイムスタンプ要求をサポートする技法を説明するものである。タイルベースのレンダリングは、レンダターゲット（たとえば、フレーム）を複数のビン（たとえば、副領域またはタイル）に副分割することと、ビンの各々について別々のレンダリングパス反復を実行することとを含むことができる。イントラフレームタイムスタンプ要求は、レンダリングされるべきグラフィックスフレームに関連するグラフィックスコマンドストリーム内の任意の位置に配置され得るタイムスタンプ要求を指すことができる。タイムスタンプ要求は、タイムスタンプ要求を処理するデバイス（たとえば、ＧＰＵまたはＣＰＵ）によってタイムスタンプ要求が処理される時間における瞬間を示すタイムスタンプ値の要求を指すことができる。本開示のイントラフレームタイムスタンプ生成技法は、タイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される１つまたは複数のビンごとのタイムスタンプ値に基づいて、アプリケーションによって要求されたタイムスタンプ値を生成することができる。アプリケーションによって要求されたタイムスタンプ値を生成するのにビンごとのタイムスタンプ値を使用することは、タイルベースのレンダリングを実行するグラフィックス処理システムによってイントラフレームタイムスタンプをサポートすることを可能にすることができる。
【０００７】
[0007]一例では、本開示は、１つまたは複数のプロセッサを用いて、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にＧＰＵによって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成することを含む方法を説明する。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とすることができる。
【０００８】
[0008]別の例では、本開示は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にＧＰＵによって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するように構成された１つまたは複数のプロセッサを含むデバイスを説明する。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とすることができる。
【０００９】
[0009]別の例では、本開示は、ＧＰＵを含む装置を説明する。この装置は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にＧＰＵによって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するための手段をさらに含む。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とすることができる。
【００１０】
[0010]別の例では、本開示は、実行された時に、１つまたは複数のプロセッサに、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成させる命令を記憶するコンピュータ可読記憶媒体を説明する。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とすることができる。
【００１１】
[0011]本開示の１つまたは複数の例の詳細は、添付図面と下の説明とに示される。本開示の他の特徴、目的、および利点は、その説明と図面と特許請求の範囲とから明白になる。
【図面の簡単な説明】
【００１２】
【図１】[0012]本開示のイントラフレームタイムスタンプ生成技法を実施するのに使用され得る例のコンピューティングデバイスを示すブロック図。
【図２】[0013]図１に示されたコンピューティングデバイスのＣＰＵとＧＰＵとメモリとをさらに詳細に示すブロック図。
【図３】[0014]複数の副領域（たとえば、タイル）に副分割される例のレンダターゲットと、副分割されたレンダターゲット上に表示されるプリミティブの例のセットとを示す概念図。
【図４】[0015]本開示に従ってグラフィックスアプリケーションよって発行される例のコマンドストリームを示す概念図。
【図５】[0016]本開示に従ってレンダリングパスを実行するための例の実行タイムラインを示す概念図。
【図６】[0017]本開示に従って複数のレンダリングパス反復を実行するための例のコマンドストリームを示す概念図。
【図７】[0018]本開示に従ってタイルベースのレンダリングを実行するグラフィックス処理システム内でイントラフレームタイムスタンプをサポートする例の技法を示す流れ図。
【図８】[0019]本開示に従ってタイルベースのレンダリングを実行するグラフィックス処理システム内でイントラフレームタイムスタンプをサポートする別の例の技法を示す流れ図。
【発明を実施するための形態】
【００１３】
[0020]本開示は、タイルベースのレンダリングを実行するグラフィックス処理システム内でイントラフレームタイムスタンプ要求をサポートする技法を説明するものである。タイルベースのレンダリングは、レンダターゲット（たとえば、フレーム）を複数のビン（たとえば、副領域またはタイル）に副分割することと、ビンの各々について別々のレンダリングパス反復を実行することとを含むことができる。イントラフレームタイムスタンプ要求は、レンダリングされるべきグラフィックスフレームに関連するグラフィックスコマンドストリーム内の任意の位置に配置され得るタイムスタンプ要求を指すことができる。タイムスタンプ要求は、タイムスタンプ要求を処理するデバイス（たとえば、ＧＰＵまたはＣＰＵ）によってタイムスタンプ要求が処理される時間における瞬間を示すタイムスタンプ値の要求を指すことができる。本開示のイントラフレームタイムスタンプ生成技法は、タイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される１つまたは複数のビンごとのタイムスタンプ値に基づいて、アプリケーションによって要求されたタイムスタンプ値を生成することができる。アプリケーションによって要求されたタイムスタンプ値を生成するのにビンごとのタイムスタンプ値を使用することは、タイルベースのレンダリングを実行するグラフィックス処理システムによってイントラフレームタイムスタンプをサポートすることを可能にすることができる。
【００１４】
[0021]２つの異なる描画呼出しコマンドの間に配置されたイントラフレームタイムスタンプ要求を発行するグラフィックスアプリケーションは、たとえば、要求に応答して返されるタイムスタンプ値が第１の描画呼出しコマンドの実行と第２の描画呼出しコマンドの実行との間の時刻に対応することを期待することができる。しかしながら、タイルベースのレンダリングシステムは、ある描画呼出しコマンドの実行が同一のグラフィックスフレームに関連する他の描画呼出しコマンドの実行とインターリーブされるように、あるグラフィックスフレームに関する描画呼出しコマンドを不連続な形で実行する場合がある。たとえば、タイルベースのレンダリングシステムは、レンダリングされるべきグラフィックスフレームに関連する描画呼出しコマンドの実行を複数のビンごとの描画呼出しに副分割し、ビンごとの描画呼出しをビンによって一緒にグループ化し、ビンごとの描画呼出しのグループの各々を、別々のレンダリングパス反復の一部として実行する場合がある。描画呼出しコマンドを実行する、この不連続なインターリーブされた形は、タイルベースのレンダリングシステムがイントラフレームタイムスタンプをサポートすることを困難にする。
【００１５】
[0022]本開示で説明される技法は、タイルベースのレンダリングシステムが、不連続なインターリーブされた形で描画呼出しコマンドを実行する場合であっても、タイルベースのレンダリングシステムが、イントラフレームタイムスタンプをサポートすることを可能にすることができる。たとえば、本開示のイントラフレームタイムスタンプ生成技法は、タイルベースのレンダリングを実行している間にＧＰＵによって生成される複数のビンごとのタイムスタンプ値に基づいて、アプリケーションによって要求されたタイムスタンプ値を生成することができる。アプリケーションによって要求されたタイムスタンプ値を生成するのに使用されるビンごとのタイムスタンプ値のうちの少なくとも一部は、異なるレンダリングパス反復の一部として生成され得る。異なるレンダリングパス反復中に生成されるビンごとのタイムスタンプ値を使用することは、グラフィックスフレームのレンダリング中に実行するのに異なる描画呼出しコマンドによって費やされる時間の相対的な長さを少なくともある度合まで反映する、アプリケーションによって要求されたタイムスタンプ値をグラフィックス処理システムが生成ことを可能にすることができる。この形で、有用なタイムスタンプ値が、異なる描画呼出しコマンドによって費やされる実行時間の相対的な長さに関するタイミング統計を使用するグラフィックスアプリケーションに、タイルベースのレンダリングシステムよって提供され得る。
【００１６】
[0023]本明細書で使用される時に、アプリケーションによって要求されるタイムスタンプ値は、グラフィックスアプリケーション（たとえば、ソフトウェアスタック内でドライバレベルより上位にあるアプリケーション）によって生成されるタイムスタンプ要求に応答して生成されるタイムスタンプ値を指すことができる。ビンごとのタイムスタンプ値は、特定のビン（たとえば、レンダターゲットの副領域）に関するレンダリングパス反復を実行している間にＧＰＵによって生成されるタイムスタンプ値を指すことができる。グラフィックスアプリケーションによって生成されるタイムスタンプ要求は、アプリケーションによって生成されるタイムスタンプ要求と呼ばれる場合がある。いくつかの場合に、ビンごとのタイムスタンプ要求は、ＧＰＵドライバによってまたはＧＰＵ（たとえば、ユーザアプリケーションレイヤより下位にあるソフトウェア／ハードウェアレイヤ）によって生成されるタイムスタンプ要求を指すことができる。
【００１７】
[0024]いくつかの例では、ＧＰＵドライバまたは他のアプリケーションは、コマンドストリーム内で受け取られるアプリケーションによって生成されたタイムスタンプ要求の各々について、複数のビンごとのタイムスタンプ要求を生成することができる。ビンごとのタイムスタンプ要求は、ＧＰＵによってサービスされ得、このＧＰＵは、ビンごとのタイムスタンプ要求のそれぞれを受け取ることに応答して、それぞれのビンごとのタイムスタンプ値を生成することができる。ビンごとのタイムスタンプ値は、ＧＰＵが、タイルベースのレンダリングを実行している時に実行されるコマンドストリーム内でビンごとのタイムスタンプ要求に出会った時刻を示すことができる。アプリケーションによって生成されたタイムスタンプ要求に応答して生成されるタイムスタンプおよびタイムスタンプ値は、それぞれ、アプリケーションによって要求されたタイムスタンプおよびアプリケーションによって要求されたタイムスタンプ値と呼ばれる場合がある。同様に、ビンごとのタイムスタンプ要求に応答して生成されるタイムスタンプおよびタイムスタンプ値は、それぞれ、ビンごとのタイムスタンプおよびビンごとのタイムスタンプ値と呼ばれる場合がある。
【００１８】
[0025]グラフィックスアプリケーション（たとえば、ＧＰＵに１つまたは複数のグラフィックスフレームをレンダリングさせる命令を含む、ホスト中央処理装置（ＣＰＵ）上で実行されるアプリケーション）は、しばしば、特定のグラフィックスフレームをレンダリングするために複数の描画呼出しコマンドを発行する場合がある。たとえば、ＧＰＵは、通常、実行されるべき描画呼出しコマンドごとにレンダ状態セッティングの単一のセットを伴って、単一のタイプのプリミティブ（たとえば、点、線、三角形、パッチなど）をレンダリングするように構成される。そのような例では、あるフレームをレンダリングするために、複数のタイプのプリミティブが必要である場合、またはそのフレームをレンダリングするために、複数のタイプのレンダ状態が必要である場合に、グラフィックスアプリケーションは、単一のグラフィックスフレームをレンダリングするために複数の描画呼出しコマンドを発行する必要がある可能性がある。
【００１９】
[0026]あるグラフィックスフレームをレンダリングするために複数の描画呼出しコマンドが使用される時に、個々の描画呼出しコマンドまたは描画呼出しコマンドのサブセットの実行に関するタイミング統計を入手するために、グラフィックスアプリケーションは、ＧＰＵによって実行されるべきコマンドストリーム内の描画呼出しコマンドの間にタイムスタンプ要求を配置することができる。個々のグラフィックスフレームをレンダリングするのに使用される描画呼出しコマンドの間に配置されるタイムスタンプ要求は、本明細書では、イントラフレームタイムスタンプ要求と呼ばれる場合があり、そのような要求に応答して生成される対応するタイムスタンプは、イントラフレームタイムスタンプと呼ばれる場合がある。
【００２０】
[0027]グラフィックスアプリケーションは、コマンドストリーム内に配置される各タイムスタンプ要求に応答してタイムスタンプを受け取ることができる。タイムスタンプは、ＧＰＵがタイムスタンプ要求を実行する時刻を指定するタイムスタンプ値を含むことができる。グラフィックスコマンドストリームは、通常、コマンドがコマンドストリーム内に配置される順序でＧＰＵによって実行されるので、グラフィックスアプリケーションは、タイムスタンプ要求がコマンドストリーム内で２つの隣接する描画呼出しの間に配置される時に、返されるタイムスタンプが、第１の描画呼出しコマンドの実行と第２の描画呼出しコマンドの実行との間に発生する時刻に対応すると期待することができる。
【００２１】
[0028]上で述べた期待を満足するタイムスタンプ値は、グラフィックスアプリケーションが、たとえば様々なタイムスタンプ処理技法を実行することを可能にすることができる。たとえば、そのようなタイムスタンプ値は、コマンドストリーム内で描画呼出しコマンドの前と後とに配置されたタイムスタンプ要求に応答して返されるタイムスタンプ値の間の差をとることによって、描画呼出しコマンドの近似実行時間を決定するのに使用され得る。
【００２２】
[0029]タイルベースのレンダリングは、いくつかの例で、レンダターゲット（たとえば、フレーム）を複数の副領域（たとえば、ビンまたはタイル）に副分割することと、レンダターゲットの副領域の各々について、別々のレンダリングパス反復を含むレンダリングパスを実行することとを含むことができる。別々のレンダリングパス反復を実行するために、タイルベースのレンダリングシステムは、レンダリングされるべきグラフィックスフレームに関連する描画呼出しコマンドの実行を複数のビンごとの描画呼出しに副分割し、ビンごとの描画呼出しをビンによって一緒にグループ化することができる。ビンごとの描画呼出しのグループの各々は、別々のレンダリングパス反復の一部として実行され得る。
【００２３】
[0030]レンダリングされるべきグラフィックスフレームが、複数の描画呼出しを含む場合には、１つの描画呼出しコマンドに関連するビンごとの描画呼出しの実行は、同一のグラフィックスフレームに関する他の描画呼出しコマンドに関連するビンごとの描画呼出しの実行とインターリーブされ得る。しかしながら、上で議論されたように、あるタイプのタイムスタンプ処理技法は、描画呼出しコマンドが、連続的な形で、グラフィックスコマンドがコマンドストリーム内に配置される順序で実行されることを仮定する場合がある。タイルベースのレンダリングを実行する時に発生する描画呼出しコマンドのインターリーブされた実行は、有用なイントラフレームタイムスタンプをそのようなタイムスタンプ処理技法に提供することをむずかしくする可能性がある。
【００２４】
[0031]本開示の技法は、描画呼出しコマンドがタイルベースのレンダリング技法の実行に起因してインターリーブされた形で実行される時であっても、イントラフレームタイムスタンプを生成するのに使用され得る。いくつかの例では、本開示に従って生成されるイントラフレームタイムスタンプ値は、コマンドストリーム内の描画呼出しコマンドについて行われた実行時間の相対的な長さを示すタイムスタンプ値を提供すると同時に、連続的な順序通りの描画呼出し処理が実行された場合に入手されるはずのタイムスタンプ値を模倣しまたは近似することができる（描画呼出しが実際にはインターリーブされた形で実行される可能性がある場合であっても）。この形で、タイムスタンプ値は、描画呼出しコマンドが、連続的な形で、グラフィックスコマンドがコマンドストリーム内に配置される順序で実行されることを仮定するタイムスタンプ処理技法とともに使用され得る。
【００２５】
[0032]図１は、本開示のイントラフレームタイムスタンプ生成技法を実施するのに使用され得る例のコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはビデオゲーム機、ワイヤレス通信デバイス（たとえば、携帯電話、セルラ電話、衛星電話、および／または携帯電話送受話器など）、陸線電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレイヤ、ビデオプレイヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、または、グラフィカルデータを処理し、および／もしくは表示する任意の他のタイプのデバイスを備えることができる。
【００２６】
[0033]図１の例に示されているように、コンピューティングデバイス２は、ユーザインターフェース４、ＣＰＵ６、メモリコントローラ８、メモリ１０、グラフィックス処理ユニット（ＧＰＵ）１２、ディスプレイインターフェース１４、ディスプレイ１６、およびバス１８を含む。ユーザインターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびディスプレイインターフェース１４は、バス１８を使用して互いと通信することができる。図１に示す異なる構成要素同士の間のバスおよび通信インターフェースの特定の構成は単なる例示であり、本開示の本技法を実装するために、同じもしくは異なる構成要素を備えたコンピューティングデバイスおよび／または他のグラフィックス処理システムの他の構成が使用され得ることに留意されたい。
【００２７】
[0034]ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサを備えることができる。ユーザは、ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるための入力をコンピューティングデバイス２に与えることができる。ＣＰＵ６上で実行されるソフトウェアアプリケーションは、たとえば、グラフィックスアプリケーション、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレイヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、オペレーティングシステム、または任意の他のタイプのプログラムを含むことができる。ユーザは、ユーザインターフェース４を介してコンピューティングデバイス２に結合される、キーボード、マウス、マイクロホン、タッチパッド、または別の入力デバイスなどの１つまたは複数の入力デバイス（図示せず）を介してコンピューティングデバイス２に入力を提供することができる。
【００２８】
[0035]ＣＰＵ６上で実行されるソフトウェアアプリケーションは、ディスプレイ１６上での表示のためにグラフィックスデータをフレームバッファにレンダリングするようにＧＰＵ１２に指示する１つまたは複数のグラフィックスレンダリング命令を含むことができる。いくつかの例では、グラフィックスレンダリング命令は、たとえば、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））アプリケーションプログラミングインターフェース（ＡＰＩ）、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、または任意の他の公共のもしくはプロプライエタリな標準グラフィックスＡＰＩなどのグラフィックスＡＰＩに準拠することができる。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、グラフィックスデータのレンダリングの一部またはすべてをＧＰＵ１２に実行させるために、１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行することができる。一部の例では、レンダリングされることになるグラフィックスデータは、グラフィックスプリミティブのリスト、たとえば、点、線、三角形、四角形、トライアングルストリップなどを含み得る。
【００２９】
[0036]メモリコントローラ８は、メモリ１０に出入りするデータの転送を容易にする。たとえば、メモリコントローラ８は、コンピューティングデバイス２内のコンポーネントにメモリサービスを提供するために、メモリ読取コマンドとメモリ書込コマンドとを受け取り、メモリ１０に関してそのようなコマンドをサービスする。メモリコントローラ８はメモリ１０に通信可能に結合される。メモリコントローラ８は、図１の例のコンピューティングデバイス２内で、ＣＰＵ６とメモリ１０との両方と別々である処理モジュールであるものとして図示されているが、他の例では、メモリコントローラ８の機能性の一部またはすべてが、ＣＰＵ６とメモリ１０との一方または両方で実施され得る。
【００３０】
[0037]メモリ１０は、ＣＰＵ６による実行のためにアクセス可能なプログラムモジュールおよび／もしくは命令ならびに／またはＣＰＵ６上で実行されるプログラムによる使用のためのデータを記憶することができる。たとえば、メモリ１０は、ＣＰＵ６上で実行されるアプリケーションに関連するプログラムコードとグラフィックスデータとを記憶することができる。メモリ１０は、さらに、コンピューティングデバイス２の他のコンポーネントによる使用のための情報および／またはこれによって生成された情報を記憶することができる。たとえば、メモリ１０は、ＧＰＵ１２のデバイスメモリとして機能することができ、ＧＰＵ１２によって演算されことになるデータ、ならびにＧＰＵ１２によって実行される演算の結果生じるデータを記憶することができる。たとえば、メモリ１０は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファ、レンダターゲット、または類似物の任意の組合せを記憶することができる。さらに、メモリ１０は、ＧＰＵ１２による処理のためにコマンドストリームを記憶することができる。メモリ１０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体、または光学記憶媒体など、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含むことができる。
【００３１】
[0038]ＧＰＵ１２は、ＣＰＵ６によってＧＰＵ１２に発行されたコマンドを実行するように構成され得る。ＧＰＵ１２によって実行されるコマンドは、グラフィックスコマンド、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、タイムスタンプ要求、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含むことができる。
【００３２】
[0039]いくつかの例で、ＧＰＵ１２は、ディスプレイ１６に１つまたは複数のグラフィックスプリミティブをレンダリングするためにグラフィックス動作を実行するように構成され得る。そのような例では、ＣＰＵ６上で実行されるソフトウェアアプリケーションのうちの１つが、グラフィックス処理を必要とする時に、ＣＰＵ６は、グラフィックスデータをＧＰＵ１２に供給し、１つまたは複数のグラフィックスコマンドをＧＰＵ１２に発行する。グラフィックスコマンドは、たとえば、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、ブリットコマンドなどを含み得る。グラフィックスデータは、頂点バッファ、テクスチャデータ、面データなどを含み得る。いくつかの例では、ＣＰＵ６は、コマンドとグラフィックスデータとをＧＰＵ１２によってアクセスされ得るメモリ１０に書き込むことによって、コマンドとグラフィックスデータとをＧＰＵ１２に提供することができる。
【００３３】
[0040]さらなる例では、ＧＰＵ１２は、ＣＰＵ６上で実行されるアプリケーションのために汎用コンピューティングを実行するように構成され得る。そのような例では、ＣＰＵ６上で実行されるソフトウェアアプリケーションの１つが計算タスクをＧＰＵ１２にオフロードすることを決定するとき、ＣＰＵ６は、汎用コンピューティングデータをＧＰＵ１２に提供して、ＧＰＵ１２に１つまたは複数の汎用コンピューティングコマンドを出すことができる。汎用コンピューティングコマンドは、たとえば、カーネル実行コマンド、メモリ転送コマンドなどを含み得る。いくつかの例で、ＣＰＵ６は、ＧＰＵ１２によってアクセスされ得るメモリ１０にコマンドとデータとを書き込むことによって、コマンドおよび汎用コンピューティングデータをＧＰＵ１２に供給することができる。
【００３４】
[0041]ＧＰＵ１２は、いくつかの例では、ＣＰＵ６よりも効率的なベクトル演算の処理を行う高並列構造を伴って構築され得る。たとえば、ＧＰＵ１２は、複数の頂点、制御点、画素および／または他のデータについて並列の方式で演算するように構成された複数の処理要素を含み得る。ＧＰＵ１２の高並列な性質は、いくつかの例では、ＧＰＵ１２が、ＣＰＵ６を使用して画像をレンダリングするよりもより迅速にグラフィックス画像（たとえば、ＧＵＩおよび２次元（２Ｄ）ならびに／または３次元（３Ｄ）のグラフィックスシーン）をディスプレイ１６上にレンダリングするのを可能にし得る。さらに、ＧＰＵ１２の高並列な性質は、ＧＰＵ１２が、汎用コンピューティングアプリケーションに関するある種のタイプのベクトル演算と行列演算とをＣＰＵ６よりすばやく処理することを可能にすることができる。
【００３５】
[0042]ＧＰＵ１２は、一部の例では、コンピューティングデバイス２のマザーボードに統合され得る。他の例では、ＧＰＵ１２は、コンピューティングデバイス２のマザーボードにおけるポートに差し込まれたグラフィックスカード上に存在し得、またはコンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる例では、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。ＧＰＵ１２は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、または他の同等の集積回路もしくはディスクリート論理回路網など、１つまたは複数のプロセッサを含むことができる。
【００３６】
[0043]いくつかの例では、ＧＰＵ１２は、メモリ１０のすべてまたは一部に関するキャッシングサービスを提供することができるＧＰＵキャッシュを含むことができる。そのような例では、ＧＰＵ１２は、オフチップメモリではなくローカルストレージを使用してデータをローカルに処理するのにキャッシュを使用することができる。これは、各読取コマンド中と各書込コマンド中とに、激しいバストラフィックを経験する可能性があるバス１８を介してＧＰＵ１２がメモリ１０にアクセスする必要を減らすことによって、ＧＰＵ１２がより効率的な形で動作することを可能にする。しかしながら、いくつかの例では、ＧＰＵ１２が、別々のキャッシュを含むのではなく、その代わりにバス１８を介してメモリ１０を利用する場合がある。ＧＰＵキャッシュは、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、その他など、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含むことができる。
【００３７】
[0044]ＣＰＵ６および／またはＧＰＵ１２は、メモリ１０内で割り振られるフレームバッファ内に、ラスタ化された画像データを記憶することができる。ディスプレイインターフェース１４は、フレームバッファからデータを取り出し、ラスタ化された画像データによって表される画像を表示するようにディスプレイ１６を構成することができる。いくつかの例では、ディスプレイインターフェース１４は、フレームバッファから取り出されたデジタル値をディスプレイ１６によって消費可能なアナログ値に変換するように構成されたデジタル−アナログ変換器（ＤＡＣ）を含むことができる。他の例では、ディスプレイインターフェース１４は、処理のために、デジタル値をディスプレイ１６に直接的に渡すことができる。
【００３８】
[0045]ディスプレイ１６は、モニタ、テレビジョン、映写デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面電界ディスプレイ（ＳＥＤ：surface-conduction electron-emitted display）、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含むことができる。ディスプレイ１６を、コンピューティングデバイス２内に一体化することができる。たとえば、ディスプレイ１６を、携帯電話送受話器またはタブレットコンピュータのスクリーンとすることができる。代替案では、ディスプレイ１６を、有線またはワイヤレスの通信リンクを介してコンピューティングデバイス２に結合される独立型のデバイスとすることができる。たとえば、ディスプレイ１６を、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイとすることができる。
【００３９】
[0046]バス１８は、第１世代、第２世代、および第３世代のバス構造およびバスプロトコル、共有バス構造および共有バスプロトコル、ポイントツーポイントバス構造およびポイントツーポイントバスプロトコル、単一方向バス構造および単一方向バスプロトコル、ならびに両方向バス構造および両方向プロトコルを含む、バス構造とバスプロトコルとの任意の組合せを使用して実施され得る。バス１８を実施するのに使用され得る異なるバス構造およびバスプロトコルの例は、たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバス、ＩｎｆｉｎｉＢａｎｄバス、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ  Ｂｕｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＡＭＢＡ）Ａｄｖａｎｃｅｄ  Ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ  Ｂｕｓ（ＡＨＢ）、ＡＭＢＡ  Ａｄｖａｎｃｅｄ  Ｐｅｒｉｐｈｅｒａｌ  Ｂｕｓ（ＡＰＢ）、およびＡＭＢＡ  Ａｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バスを含む。他のタイプのバス構造およびバスプロトコルも、使用され得る。
【００４０】
[0047]本開示によれば、コンピューティングデバイス２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、本開示で説明されるイントラフレームタイムスタンプ値生成技法のいずれかを実行するように構成され得る。たとえば、コンピューティングデバイス２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にＧＰＵ１２によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するように構成され得る。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とされ得る。アプリケーションによって要求されたタイムスタンプ値を生成するのにビンごとのタイムスタンプ値を使用することは、イントラフレームタイムスタンプ要求がタイルベースのレンダリングを実行するグラフィックス処理システムによってサポートされることを可能にすることができる。
【００４１】
[0048]動作中に、ＣＰＵ６上で実行されるグラフィックスアプリケーションは、グラフィックスフレームをレンダリングするために、コマンドの順序付けられたシーケンス（たとえば、コマンドストリーム）を生成することができる。いくつかの場合に、コマンドの順序付けられたシーケンスは、複数の描画呼出しコマンドと複数のタイムスタンプ要求とを含む可能性がある。タイムスタンプ要求のうちの少なくともいくつかは、コマンドの順序付けられたシーケンス内の異なる描画呼出しコマンドの間に配置され得る。
【００４２】
[0049]タイルベースのレンダリング技法を使用してコマンドのシーケンスを実行するために、ＣＰＵ６は、タイムスタンプ要求の各々について、それぞれのタイムスタンプ要求に基づいて複数のビンごとのタイムスタンプ要求を生成することができる。ＣＰＵ６は、ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれのコマンドストリームに配置することができる。コマンドストリームの各々は、タイルベースのレンダリングを実行している間に、複数のレンダリングパス反復のうちのそれぞれのレンダリングパス反復中にＧＰＵ１２によって実行され得る。これらのコマンドストリームは、ビンごとのコマンドストリームと呼ばれる場合がある。レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの副領域をレンダリングするように構成され得る。
【００４３】
[0050]ＣＰＵ６は、ＧＰＵ１２に、ビンごとのコマンドストリームを実行させることができる。ビンごとのコマンドストリームを実行している間に、ＧＰＵ１２は、ＧＰＵ１２によって受け取られたビンごとのコマンドストリーム内のビンごとのタイムスタンプ要求の実行に応答して、ビンごとのタイムスタンプ値を生成することができる。いくつかの場合に、ＧＰＵ１２は、ビンごとのコマンドストリーム内に含まれるビンごとのタイムスタンプ要求の各々について、それぞれのビンごとのタイムスタンプ値を生成することができる。ビンごとのタイムスタンプ値の各々は、それぞれのビンごとのタイムスタンプ値に関連するビンごとのタイムスタンプ要求がＧＰＵ１２によって実行された時刻を示すことができる。いくつかの例では、ビンごとのタイムスタンプ値の各々は、ＧＰＵ１２によって生成されるそれぞれのビンごとのタイムスタンプ内に含まれ得る。
【００４４】
[0051]いくつかの例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値をＣＰＵ６に供給することができる。ビンごとのタイムスタンプ値の受取に応答して、ＣＰＵ６は、ビンごとのタイムスタンプ値に基づいて、１つまたは複数のアプリケーションによって要求されたタイムスタンプ値を生成することができる。ＣＰＵ６は、アプリケーションによって要求されたタイムスタンプ値を生成するために、本開示で説明される技法のいずれかを使用することができる。ＣＰＵ６は、アプリケーションによって要求されたタイムスタンプ値をグラフィックスアプリケーションに供給することができる。
【００４５】
[0052]さらなる例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値に基づいて、１つまたは複数のアプリケーションによって要求されたタイムスタンプ値を生成し、これらのアプリケーションによって要求されたタイムスタンプ値をＣＰＵ６に供給することができる。ＧＰＵ１２は、アプリケーションによって要求されたタイムスタンプ値を生成するために、本開示で説明される技法のいずれかを使用することができる。ＣＰＵ６は、アプリケーションによって要求されたタイムスタンプ値をグラフィックスアプリケーションに供給することができる。
【００４６】
[0053]追加の例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値に基づいて１つまたは複数の中間値を生成し、これらの中間値をＣＰＵ６に供給することができる。ＣＰＵ６は、中間値に基づいてビンごとのタイムスタンプ値を生成することができる。ＣＰＵ６およびＧＰＵ１２は、アプリケーションによって要求されたタイムスタンプ値を生成するために、本開示で説明される技法のいずれかを使用することができる。ＣＰＵ６は、アプリケーションによって要求されたタイムスタンプ値をグラフィックスアプリケーションに供給することができる。
【００４７】
[0054]いくつかの例では、ＣＰＵ６および／またはＧＰＵ１２は、各アプリケーションによって要求されたタイムスタンプ値が少なくとも２つの異なるビンごとのタイムスタンプ値の関数になるように、アプリケーションによって要求されたタイムスタンプ値を生成することができる。そのような例では、少なくとも２つの異なるビンごとのタイムスタンプ値は、いくつかの例で、異なるレンダリングパス反復中に生成され得る。異なるレンダリングパス反復中に生成されるビンごとのタイムスタンプ値を使用することは、グラフィックスフレームのレンダリング中に実行するのに異なる描画呼出しコマンドが費やす時間の相対的な長さを少なくともある度合まで反映するアプリケーションによって要求されたタイムスタンプ値をグラフィックス処理システムが生成することを可能にすることができる。この形で、本開示で説明される技法は、タイルベースのレンダリングシステムが、不連続なインターリーブされた形で描画呼出しコマンドを実行する場合であっても、タイルベースのレンダリングシステムが、イントラフレームタイムスタンプをサポートすることを可能にすることができる。
【００４８】
[0055]いくつかの例では、コンピューティングデバイス２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、タイルベースのレンダリングを実行する時に受け取られるイントラフレームタイムスタンプ要求に応答してイントラフレームタイムスタンプを生成するように構成され得る。さらなる例では、コンピューティングデバイス２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、レンダリングされるグラフィックスフレームに関して実行される複数の描画呼出しコマンドと、レンダリングされるグラフィックスフレームに関連する１つまたは複数のタイムスタンプ要求とを含むコマンドストリームを受け取るように構成され得る。そのような例では、コンピューティングデバイス２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、いくつかの例で、ＧＰＵ１２に、タイルベースのレンダリング技法を使用してグラフィックスフレームをレンダリングするために複数の描画呼出しコマンドを実行させ、１つまたは複数のタイムスタンプ要求に応答して１つまたは複数のタイムスタンプを生成させるようにさらに構成され得る。いくつかの例では、１つまたは複数のタイムスタンプを、複数のビンごとのタイムスタンプ値に基づいて生成することができる。
【００４９】
[0056]本開示で説明される技法は、いくつかの例で、たとえばＣＰＵ６、ＧＰＵ１２、およびシステムメモリ１０を含む、図１に示されたコンピューティングデバイス２内のコンポーネントのいずれかにおいて実施され得る。たとえば、イントラフレームタイムスタンプを生成する技法を、ＣＰＵ６内のグラフィックスドライバ、ＧＰＵ１２内の処理ユニット、またはその組合せによって実行することができる。別の例として、タイムスタンプ要求を、ＣＰＵ６上で実行されるソフトウェアアプリケーション（たとえば、グラフィックスアプリケーションまたはユーザアプリケーション）によって、ＣＰＵ６上で実行されるＧＰＵドライバに発行することができ、このタイムスタンプ要求に応答して、ＧＰＵドライバは、本開示の技法に従って生成されたタイムスタンプを返すことができる。いくつかの例では、タイムスタンプ要求および描画呼出しを、メモリ１０内に記憶することができる（たとえば、１つまたは複数のコマンドキューの一部として）。さらなる例では、タイムスタンプ要求に応答して返されたタイムスタンプを、メモリ１０内に記憶することができる。
【００５０】
[0057]図２は、図１のコンピューティングデバイス２のＣＰＵ６、ＧＰＵ１２、およびメモリ１０をさらに詳細に示すブロック図である。図２に示すように、ＣＰＵ６はＧＰＵ１２とメモリ１０とに通信可能に結合され、ＧＰＵ１２はＣＰＵ６とメモリ１０とに通信可能に結合される。いくつかの例では、ＧＰＵ１２は、ＣＰＵ６によってマザーボードに統合され得る。追加の例では、ＧＰＵ１２は、ＣＰＵ６を含むマザーボードのポート内にインストールされたグラフィックスカード上で実装され得る。さらなる例では、ＧＰＵ１２は、ＣＰＵ６と相互作用するように構成された周辺デバイス内に組み込まれることが可能である。追加の例では、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。
【００５１】
[0058]ＣＰＵ６は、ソフトウェアアプリケーション２４と、グラフィックスＡＰＩ２６と、ＧＰＵドライバ２８と、オペレーティングシステム３０とのいずれかを実行するように構成された１つまたは複数のプロセッサ（たとえば、マイクロプロセッサ）を含むことができる。いくつかの例では、ＣＰＵ６は、ＣＰＵ６の１つまたは複数のプロセッサに本開示で説明される技法のいずれかのすべてまたは一部を実行させる命令を実行するように構成され得る。
【００５２】
[0059]ＧＰＵ１２は、コマンドエンジン３２と、１つまたは複数の処理ユニット３４と、ビニングバッファ（binning buffer）３６とを含む。１つまたは複数の処理ユニット３４は、３Ｄグラフィックスレンダリングパイプラインを形成するように構成され得る。いくつかの例では、１つまたは複数の処理ユニット３４は、オンチップのテッセレーション対応グラフィックスレンダリングパイプラインを実施することができる。コマンドエンジン３２および処理ユニット３４は、そのようなコンポーネントに帰せられる機能を実行するように構成された、専用ハードウェアユニットとファームウェアとソフトウェアとプロセッサとの任意の組合せを含むことができる。いくつかの例では、ＧＰＵ１２は、ＧＰＵ１２の１つまたは複数のプロセッサに本開示で説明される技法のいずれかのすべてまたは一部を実行させる命令を実行するように構成され得る。
【００５３】
[0060]メモリ１０は、１つまたは複数のコマンド３８とプリミティブデータ４０とタイムスタンプデータ４２とを記憶することができる。いくつかの例で、メモリ１０は、実行された時に１つまたは複数のプロセッサに本開示で説明される技法のいずれかのすべてまたは一部を実行させる命令をも記憶することができる。
【００５４】
[0061]ソフトウェアアプリケーション２４は、１つまたは複数の３Ｄグラフィックスシーンおよび／または３Ｄグラフィックスオブジェクトをディスプレイ上に表示される画像にレンダリングするのにＧＰＵ１２を使用するグラフィックスアプリケーションとすることができる。ソフトウェアアプリケーション２４は、ＧＰＵ１２に３Ｄグラフィックスプリミティブのセットをラスタ化させ、レンダリングさせる命令を含むことができる。ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６を介してＧＰＵドライバ２８に命令を発行することができる。グラフィックスＡＰＩ２６は、ソフトウェアアプリケーション２４から受け取られた命令をＧＰＵドライバ２８によって消費可能なフォーマットに変換するランタイムサービスとすることができる。
【００５５】
[0062]ＧＰＵドライバ２８は、グラフィックスＡＰＩ２６を介してソフトウェアアプリケーション２４から命令を受け取り、命令をサービスするためにＧＰＵ１２の動作を制御する。たとえば、ＧＰＵドライバ２８は、１つまたは複数のコマンド３８を構築して、コマンド３８をメモリ１０内に配置して、コマンド３８を実行するようにＧＰＵ１２に命令することができる。いくつかの例では、ＧＰＵドライバ２８は、コマンド３８をメモリ１０内に配置して、オペレーティングシステム３０、たとえば、１つまたは複数のシステム呼出しを介してＧＰＵ１２と通信することができる。
【００５６】
[0063]オペレーティングシステム３０は、ソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、およびＧＰＵドライバ２８がその上で実行されるソフトウェアプラットフォームを提供することができる。オペレーティングシステム３０は、ＣＰＵ６とメモリ１０とＧＰＵ１２との間でのデータの通信および転送のハードウェア詳細を管理することができる。
【００５７】
[0064]コマンド３８は、１つもしくは複数の状態コマンド、１つもしくは複数の描画呼出しコマンド、および／または１つもしくは複数のタイムスタンプ要求（たとえば、１つもしくは複数のビンごとのタイムスタンプ要求）を含むことができる。状態コマンドは、たとえばプリミティブデータなど、ＧＰＵ１２内の状態変数のうちの１つまたは複数を変更するようにＧＰＵ１２に命令することができる。描画呼出しコマンドは、メモリ１０内に記憶された（たとえば、頂点バッファ内で定義された）１つまたは複数の頂点のグループによって定義された形状をレンダリングするようにＧＰＵ１２に命令することができる。１つまたは複数の頂点のグループによって定義されたジオメトリは、いくつかの例で、レンダリングされる複数のプリミティブ（たとえば、プリミティブデータ４０）に対応することができる。一般に、描画呼出しコマンドは、メモリ１０の定義されたセクション（たとえば、バッファ）内に記憶された頂点のすべてをレンダリングするためにＧＰＵ１２を呼び出すことができる。言い換えると、ＧＰＵ１２が描画呼出しコマンドを受け取った後に、制御は、メモリ１０の定義されたセクション（たとえば、バッファ）内の頂点によって表されるジオメトリとプリミティブとをレンダリングするために、ＧＰＵ１２に渡される。
【００５８】
[0065]タイムスタンプ要求は、タイムスタンプ要求の処理に応答してタイムスタンプを生成するようにＧＰＵ１２および／またはＧＰＵドライバ２８に命令することができる。ＧＰＵ１２および／またはＧＰＵドライバ２８は、タイムスタンプ要求の受取に応答してタイムスタンプを返すことができる。タイムスタンプは、時刻値を含むことができる。ビンごとのタイムスタンプ要求について、時刻値は、ＧＰＵ１２がタイムスタンプ要求を処理した時刻を示すものとすることができる。アプリケーションによって要求されたタイムスタンプ要求について、時刻値は、ＧＰＵ１２によってコマンドストリーム内の描画呼出しを実行するのに費やされた時間の相対的な長さを示すものとすることができる。
【００５９】
[0066]いくつかの例では、コマンド３８は、コマンドストリームの形で（たとえば、コマンドキュー、コマンドバッファなど）記憶され得る。コマンドストリームは、グラフィックスコマンドの順序付けられたシーケンスを指定することができる。いくつかの例では、コマンドの順序付けられたシーケンスは、複数の描画呼出しコマンドと、複数のタイムスタンプ要求とを含むことができる。いくつかの例では、タイムスタンプ要求のうちの少なくとも１つを、グラフィックスコマンドの順序付けられたシーケンス内で少なくとも２つの描画呼出しコマンドの間に位置決めすることができる。さらなる例では、描画呼出しコマンドのうちの少なくとも１つを、グラフィックスコマンドの順序付けられたシーケンス内で少なくとも２つのタイムスタンプ要求の間に位置決めすることができる。
【００６０】
[0067]コマンドエンジン３２は、メモリ１０内に記憶されたコマンド３８を取り出し、実行するように構成される。コマンドエンジン３２は、ＧＰＵ１２のレンダリング状態を管理し、処理ユニット３４がグラフィックスレンダリングパイプラインを実施するように処理ユニット３４の動作を制御し、グラフィックスレンダリングパイプラインを介してグラフィックスデータをレンダターゲットにレンダリングさせ、コマンドストリーム内のタイムスタンプ要求（たとえば、ビンごとのタイムスタンプ要求）に出会うことに応答してタイムスタンプを返すことができる。
【００６１】
[0068]状態コマンドの受取に応答して、コマンドエンジン３２は、状態コマンドに基づいてＧＰＵ内の１つまたは複数の状態レジスタに特定の値をセットし、および／または状態コマンドに基づいて固定機能処理ユニット３４のうちの１つまたは複数を構成するように構成され得る。描画呼出しコマンドの受取に応答して、コマンドエンジン３２は、メモリ１０内の頂点によって表されるジオメトリ（たとえば、プリミティブデータ４０によって表されるジオメトリ）を処理ユニット３４にレンダリングさせるように構成され得る。コマンドエンジン３２は、シェーダプログラム結合コマンドを受け取って、それらのシェーダプログラム結合コマンドに基づいて、特定のシェーダプログラムをプログラマブル処理ユニット３４のうちの１つまたは複数にロードすることも可能である。タイムスタンプ要求（たとえば、ビンごとのタイムスタンプ要求）の受取に応答して、コマンドエンジン３２は、タイムスタンプを生成し、そのタイムスタンプをＣＰＵ６（たとえば、ＧＰＵドライバ２８）に供給することができる。
【００６２】
[0069]処理ユニット３４は、その各々がプログラマブル処理ユニットまたは固定機能処理ユニットであり得る、１つもしくは複数の処理ユニットを含み得る。プログラマブル処理ユニットは、たとえば、ＣＰＵ６からＧＰＵ１２上にダウンロードされた１つまたは複数のシェーダプログラムを実行するように構成されたプログラマブルシェーダユニットを含み得る。いくつかの例では、シェーダプログラムは、たとえば、ＯｐｅｎＧＬ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＧＬＳＬ）、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）、Ｃ  ｆｏｒ  Ｇｒａｐｈｉｃｓ（Ｃｇ）シェーディング言語など、ハイレベルシェーディング言語で書き込まれたプログラムのコンパイルバージョンであり得る。
【００６３】
[0070]プログラマブルシェーダユニットは、いくつかの例で、並列に動作するように構成された複数の処理ユニット、たとえば単一命令複数データ（ＳＩＭＤ）パイプラインを含むことができる。プログラマブルシェーダユニットは、シェーダプログラム命令を記憶するプログラムメモリと実行状態レジスタ、たとえば、実行されつつあるプログラムメモリ内の現在の命令または取り出されるべき次の命令を示すプログラムカウンタレジスタとを有することができる。処理ユニット３４内のプログラマブルシェーダユニットは、たとえば、頂点シェーダユニット、ピクセルシェーダユニット、ジオメトリシェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、コンピュートシェーダユニット、および／またはユニファイドシェーダユニットを含み得る。
【００６４】
[0071]固定機能処理ユニットは、ある種の機能を実行するために配線接続されたハードウェアを含み得る。固定機能ハードウェアを、たとえば異なる機能を実行するために、１つまたは複数の制御信号を介して構成可能とすることができるが、固定機能ハードウェアは、通常、ユーザによってコンパイルされたプログラムを受け取ることができるプログラムメモリを含まない。いくつかの例では、処理ユニット３４内の固定機能処理ユニットは、たとえば、深度テスト、シザーテスト、アルファブレンド、その他などのラスタ演算を実行する処理ユニットを含むことができる。
【００６５】
[0072]ビニングバッファ３６は、レンダターゲットの副領域に関するラスタ化されたデータを記憶するように構成され得る。ビニングバッファ３６は、レンダリングパスの実行中に実際のレンダターゲットの特定の副領域に関する一時レンダターゲットとして働くことができる。ビニングバッファ３６は、たとえばランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、その他など、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含むことができる。いくつかの例では、ビニングバッファ３６を、オンチップバッファとすることができる。オンチップバッファは、ＧＰＵが形成され、置かれ、および／または配置されるマイクロチップ、集積回路、および／またはダイと同一であるマイクロチップ、集積回路、および／またはダイ上に形成され、置かれ、および／または配置されるバッファを指すことができる。
【００６６】
[0073]いくつかの例では、処理ユニット３４は、第１の通信インターフェースを介してビニングバッファ３６にアクセスし、第１の通信インターフェースとは異なる第２の通信インターフェースを介してレンダターゲット（たとえば、メモリ１０内に記憶されたフレームバッファ）にアクセスすることができる。そのような例では、第１の通信インターフェースは、いくつかの例で、第２の通信インターフェースより高い帯域幅を有することができる。第２の通信インターフェースは、いくつかの例で、図１のバス１８と、図１のメモリコントローラ８とメモリ１０との間の接続とに対応することができる。ビニングバッファ３６がオンチップビンバッファである時には、第１の通信インターフェースを、ＧＰＵ１２の内部の通信インターフェースとすることができる。
【００６７】
[0074]本明細書で使用される時に、帯域幅は、通信インターフェースが２つのコンポーネント、たとえばメモリコンポーネントとＧＰＵ１２との間でデータを転送することができる速度を指すことができる。帯域幅の単位は、いくつかの例で、単位時間あたりのビット数、たとえばギガビット毎秒（Ｇｂ／ｓ）として与えることができる。複数ビットのバス幅を有するバスが、通信インターフェースの一部として使用される時には、帯域幅は、いくつかの例で、バスの幅に、データが単一のビット線に沿って転送される速度を乗じた積と等しいものとすることができる。たとえば、バスが１６ビット幅であり、このバスの各ビット線が２Ｇｂ／ｓの速度でデータを転送できる場合には、このバスの帯域幅は、３２Ｇｂ／ｓと等しいものとすることができる。複数のバスが、２つのコンポーネントの間の通信インターフェースを形成する場合には、この通信インターフェースの帯域幅は、複数のバスの各々の帯域幅の関数、たとえば、個々のバスの各々の最小帯域幅とすることができる。
【００６８】
[0075]ビニングバッファ３６が、ＧＰＵ１２と同一のチップ上で実施される時に、ＧＰＵ１２は、必ずしもシステムバスとメモリバスと（たとえば、図１のバス１８と、図１のメモリコントローラ８とメモリ１０との間の接続と）を介してビニングバッファ３６にアクセスする必要があるのではなく、ＧＰＵ１２と同一のチップ上で実施される内部通信インターフェース（たとえば、バス）を介してビニングバッファ３６にアクセスすることができる。そのようなインターフェースは、オンチップなので、システムバスおよびメモリバスより高い帯域幅で動作できる可能性がある。上で説明された技法は、メモリ１０にアクセスするのに使用される通信インターフェースの帯域幅を超える、ビニングバッファ３６のための通信インターフェースを達成する１つの形であるが、他の技法が、可能であり、本開示の範囲に含まれる。
【００６９】
[0076]ビニングバッファ３６の容量は、いくつかの例で、あるタイプのコンピューティングデバイス、たとえばモバイルデバイス上で使用可能な面積によって制限される場合がある。さらに、ビニングバッファ３６が、ＧＰＵ１２と同一のチップ上で実施される時には、同一のチップ上でビニングバッファ３６を実施するために使用可能な面積の量が、チップ上で実施される他の機能性に起因して制限される場合がある。いくつかの例では、ビニングバッファ３６は、レンダターゲットのビット密度より低いビット密度を有する場合があり、これがビニングバッファ３６の容量をさらに制限する可能性がある。上記および／または他の要因のゆえに、ビニングバッファ３６の容量は、いくつかの場合に、レンダターゲットのサイズより小さくなる可能性がある。その結果、ビニングバッファ３６の容量は、いくつかの例で、グラフィックス画像（たとえば、単一のフレーム）に関連する複数の宛先画素のすべての画素データを記憶するのに必要な最小容量未満である場合がある。メモリコンポーネントの容量は、そのメモリコンポーネント内に記憶され得るデータの最大量（たとえば、最大ビット数）を指すことができる。レンダターゲットのサイズは、レンダターゲットに割り振られたメモリ範囲内に記憶されるデータの量（たとえば、ビット数）を指すことができる。ビット密度は、特定の量の面積内に記憶できるビット数を指すことができる。
【００７０】
[0077]上で議論したように、タイルベースのレンダリングを実行する時に、ＧＰＵ１２は、レンダリングパスの別々の反復中にレンダターゲットの各副領域をレンダリングすることができる。たとえば、レンダターゲットの特定の副領域（たとえば、グラフィックス画像の宛先画素の特定のサブセット）の単一のレンダリングパス反復の一部として、ＧＰＵ１２は、レンダターゲットの特定の副領域に関するプリミティブのすべてまたはサブセットをレンダリングすることができる。ビニングバッファ３６の容量は、レンダターゲットの副領域のサイズ以上になるように構成され得る。したがって、単一のレンダリングパス反復中に、レンダターゲットの副領域のうちのそれぞれの副領域に関連するすべての宛先画素データは、必ずしもメモリ１０内のフレームバッファにアクセスする必要なしに、ビニングバッファ３６内で使用可能にされ得る。その結果、単一のレンダリングパス反復中に、ＧＰＵ１２は、相対的に低帯域幅の通信インターフェースを介してメモリ１０から宛先画素データを読み取る必要があるのではなく、相対的に高帯域幅の通信インターフェースを介してビニングバッファ３６から宛先画素データを読み取ることができる可能性がある。
【００７１】
[0078]タイルベースのレンダリングを実行しないいくつかのグラフィックスシステムは、ハードウェアベースのオンチップキャッシュを使用することによってフレームバッファの一部をキャッシングすることができる場合があるが、そのようなキャッシュは、所与の画素の宛先画素値が、必要な時に使用可能になることを保証しない。これは、複数の宛先画素がハードウェアベースのキャッシュ内で同一のアドレスにマッピングされる可能性があるからである。タイルベースのレンダリングが使用されない場合には、ハードウェアベースのキャッシュの現在の状態は、必ずしも、レンダターゲットの現在処理されている副領域に関連する宛先画素値を含むのではなく、レンダターゲットの他の副領域内の以前に処理されたプリミティブに関連する宛先画素値を含む可能性がある。
【００７２】
[0079]複数の宛先画素が同一のキャッシュ位置にマッピングされるハードウェアベースのキャッシュとは異なって、所与のレンダリングパス反復についてビニングバッファ３６内に記憶される宛先画素は、いくつかの例で、一意にアドレッシング可能とすることができる。言い換えると、所与のレンダリングパス反復について、ビニングバッファ３６内のアドレス可能ストレージスロットとそのレンダリングパス反復に使用される宛先画素との間に、１対１マッピングを定義することができる。その結果、タイルベースのレンダリングを実行する時に、所与のビニングパスに関するすべての宛先画素値が、いくつかの例で、相対的に低帯域幅の通信インターフェースを介してビニングバッファ３６から使用可能とされ得る。さらに、ハードウェアベースのキャッシュシステムとは異なって、ビニングバッファ３６内の一意にアドレス可能なデータのゆえに、キャッシュミスが発生せず、これによって、キャッシュミスの場合の帯域幅的に高価なフレームバッファアクセスに頼る必要が軽減される。
【００７３】
[0080]宛先画素は、特定の画素位置についてレンダターゲット（たとえば、フレームバッファまたは対応するビニングバッファのいずれか）内に記憶された画素データを指すことができる。対照的に、ソース画素は、処理ユニット３４内のラスタ化処理ユニットによって生成されたが、まだレンダターゲットに記憶されおよび／またはマージされていない画素データを指すことができる。宛先画素は、異なるプリミティブに関連する複数のソース画素から合成された画素データを含む場合がある。
【００７４】
[0081]タイルベースのレンダリングを実行するために、ソフトウェアアプリケーション２４は、いくつかの例で、レンダリングされる１つまたは複数の３Ｄグラフィックスプリミティブのセットを幾何学的に定義するプリミティブデータ４０をメモリ１０内に配置し、１つまたは複数の描画呼出しコマンドをグラフィックスＡＰＩ２６を介してＧＰＵドライバ２８に発行することができる。描画呼出しコマンドは、プリミティブデータ４０によって定義されたプリミティブをＧＰＵ１２によってラスタ化させ、レンダターゲット（たとえば、メモリ１０内に記憶されたフレームバッファ）にレンダリングさせることができる。
【００７５】
[0082]いくつかの例では、ソフトウェアアプリケーション２４は、特定のタイプのプリミティブをレンダリングするようにＧＰＵ１２を構成することができる。たとえば、ソフトウェアアプリケーション２４は、描画呼出し中にレンダリングすべきプリミティブの特定のタイプを指定する状態コマンドをＧＰＵ１２に発行することができる。追加の例では、描画呼出しコマンドを発行する前に、ソフトウェアアプリケーション２４は、プリミティブをレンダリングするために１つまたは複数のテッセレーション技法を使用するようにＧＰＵ１２を構成することができる。たとえば、ソフトウェアアプリケーション２４は、テッセレーション技法を実施する１つまたは複数のシェーダプログラムに、描画呼出し命令中にＧＰＵ１２の１つまたは複数のシェーダユニット（たとえば、ハルシェーダユニットおよび／またはドメインシェーダユニット）上で実行させることができる。
【００７６】
[0083]プリミティブデータ４０は、レンダリングされる１つまたは複数のプリミティブを示すデータを含むことができる。いくつかの場合に、プリミティブデータ４０は、レンダリングされるプリミティブを幾何学的に定義することができる。プリミティブを幾何学的に定義することは、頂点（または制御点）のセットと対応する頂点属性とによってプリミティブを定義することを指すことができる。いくつかの例では、プリミティブデータ４０は、複数の頂点、頂点リスト、および／または頂点バッファの形をとることができる。さらなる例では、プリミティブデータ４０は、インデックスバッファと組み合わされた頂点バッファの形をとることができる。そのような例では、頂点バッファは、頂点を定義することができ、インデックスバッファは、どの頂点がプリミティブの各々を定義するのに使用されるのかを指定することができる。
【００７７】
[0084]プリミティブデータ４０内に含まれる頂点の各々は、たとえば位置座標、法線座標、テクスチャ座標、その他などの１つまたは複数の属性を含むことができる。頂点は、幾何プリミティブ（たとえば、点、線、三角形など）の頂点および／またはより高次のプリミティブ（たとえば、ベジエ面などのより高次の面）の制御点に概念的に対応することができる。いくつかの場合に、頂点の各々を、１つまたは複数の頂点のグループにグループ化することができ、頂点のこれらのグループの各々は、単一のプリミティブに対応することができる。
【００７８】
[0085]幾何学的に定義されたプリミティブの形状を、いくつかの例で、必ずしもプリミティブデータ４０内には含まれない追加のデータによって定義することができる。追加のデータは、１つもしくは複数の事前に決定されたプリミティブタイプのセットからの指定されたプリミティブタイプ、１つもしくは複数の数学関数、および／または１つもしくは複数のテッセレーション技法のうちの１つまたは複数を含むことができる。
【００７９】
[0086]いくつかの例では、指定されたプリミティブタイプは、ＧＰＵ１２内のレンダリング状態変数として記憶され得、ソフトウェアアプリケーション２４によって構成可能とされ得る。指定されたプリミティブタイプは、いくつかの場合に、結果のレンダリングされるプリミティブの形状（たとえば、点、線、三角形など）および／またはプリミティブデータ４０内に含まれる頂点の接続性（たとえば、トライアングルストリップ、トライアングルファンなど）を定義することができる。いくつかの例では、異なるプリミティブタイプは、処理ユニット３４によって実施されるグラフィックスパイプラインが処理できるプリミティブトポロジのセットに対応することができる。さらなる例では、異なるプリミティブタイプは、グラフィックスＡＰＩ２６によって定義され、ソフトウェアアプリケーション２４による使用のために使用可能な、プリミティブトポロジのセットに対応することができる。
【００８０】
[0087]１つまたは複数の数学関数および／または１つまたは複数のテッセレーション技法は、ＧＰＵ１２の１つまたは複数のシェーダユニット（たとえば、ハルシェーダユニットおよび／またはドメインシェーダユニット）上で実行するように構成された１つまたは複数のシェーダプログラム内で指定され得る。数学関数は、曲線および／または曲面を有するプリミティブを定義するのに使用され得る。１つまたは複数のテッセレーション技法は、入力プリミティブの形状および／または曲率を近似する複数のテッセレートされたプリミティブによってプリミティブを定義するのに使用され得る。
【００８１】
[0088]ソフトウェアアプリケーション２４からの描画呼出しコマンドの受取に応答して、ＧＰＵドライバ２８は、レンダリングされる複数のプリミティブ（たとえば、プリミティブデータ４０）に基づいて、ＧＰＵ１２にタイルベースのレンダリングを実行させることができる。たとえば、ＧＰＵドライバ２８は、ＧＰＵ１２に、ビニングパスと複数のレンダリングパス反復を含むレンダリングパスとを実行させることができる。ビニングパス中に、ＧＰＵ１２は、プリミティブの各々がレンダターゲットの複数の副領域のうちのどれに画像データ（たとえば、画素データ）を与えるのかを決定し、プリミティブの各々がレンダターゲットの複数の副領域のうちのどれに画像データ（たとえば、画素データ）を与えるのかを示すビニングデータを生成することができる。ビニングデータが生成された後に、ＧＰＵ１２は、プリミティブの合成されたラスタ化された版を生成するために、ビニングデータとプリミティブデータ４０とに基づいて、複数のレンダリングパス反復を含むレンダリングパスを実行することができる。
【００８２】
[0089]いくつかの例では、ビニングパスを実行するために、ＧＰＵ１２内のラスタライザは、ラスタ化されるプリミティブに対して低解像度ｚバッファリングおよび／または裏面カリング（back-face culling）を実行するように構成され得る。そのような例では、ビニングデータは、ｚバッファリングおよび／または裏面カリングの後に可視であるプリミティブに基づいて生成され得る。
【００８３】
[0090]いくつかの場合に、レンダリングされたプリミティブは、複数の画素として記憶され得る。画素の各々は、レンダターゲットの１つまたは複数の空間位置に関連付けられ得、それぞれの画素の色を示す１つまたは複数の属性を含むことができる。いくつかの場合に、画素の各々は、さらに、画素の透明度を示す１つまたは複数の属性を含むことができる。いくつかの例では、画素データは、各画素の赤、緑、青、およびアルファ（ＲＧＢＡ）属性を含むことができ、「ＲＧＢ」成分は色値に対応し「Ａ」成分はアルファ値（すなわち、透明度またはブレンディング値）に対応する。
【００８４】
[0091]本開示で説明される技法は、たとえばソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、ＧＰＵドライバ２８、コマンドエンジン３２、および処理ユニット３４を含む、図２に示されたコンポーネントのいずれかにおいて実施され得る。たとえば、ＧＰＵドライバ２８、コマンドエンジン３２、および／または処理ユニット３４は、本開示で説明される技法のいずれかに従って１つまたは複数のタイムスタンプ（たとえば、イントラフレームタイムスタンプ）を生成するように構成され得る。
【００８５】
[0092]いくつかの例では、ＧＰＵドライバ２８、コマンドエンジン３２、および／または処理ユニット３４は、グラフィックスフレームに関してタイルベースのレンダリングを実行している間にＧＰＵ１２によって生成される複数のビンごとのタイムスタンプ値に基づいて、時点を示すタイムスタンプ値を生成するように構成され得る。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とされ得る。アプリケーションによって要求されたタイムスタンプ値を生成するのにビンごとのタイムスタンプ値を使用することは、タイルベースのレンダリングを実行するグラフィックス処理システムによってイントラフレームタイムスタンプ要求をサポートすることを可能にすることができる。
【００８６】
[0093]動作中に、ＣＰＵ６上で実行されるソフトウェアアプリケーション２４（たとえば、グラフィックスアプリケーション）は、グラフィックスフレームをレンダリングするために、コマンドの順序付けられたシーケンス（たとえば、コマンドストリーム）を生成することができる。いくつかの場合に、コマンドの順序付けられたシーケンスは、複数の描画呼出しコマンドと複数のタイムスタンプ要求とを含むことができる。タイムスタンプ要求のうちの少なくともいくつかは、コマンドの順序付けられたシーケンス内の異なる描画呼出しコマンドの間に配置され得る。ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６を介してＧＰＵドライバ２８にコマンドの順序付けられたシーケンスを供給することができる。
【００８７】
[0094]タイルベースのレンダリング技法を使用してコマンドのシーケンスを実行するために、ＧＰＵドライバ２８は、タイムスタンプ要求の各々について、それぞれのタイムスタンプ要求に基づいて複数のビンごとのタイムスタンプ要求を生成することができる。ＧＰＵドライバ２８は、ビンごとのタイムスタンプ要求の各々を、複数のコマンドストリームのうちのそれぞれのコマンドストリーム（たとえば、メモリ１０内のコマンド３８）に配置することができる。コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれのレンダリングパス反復中にＧＰＵ１２によって実行され得る。このコマンドストリームは、ビンごとのコマンドストリームと呼ばれる場合がある。レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの副領域をレンダリングするように構成され得る。
【００８８】
[0095]ＧＰＵドライバ２８は、ＧＰＵ１２に、ビンごとのコマンドストリームを実行させることができる。ビンごとのコマンドストリームを実行している間に、ＧＰＵ１２（たとえば、コマンドエンジン３２および／または処理ユニット３４）は、ＧＰＵ１２によって受け取られたビンごとのコマンドストリーム内のビンごとのタイムスタンプ要求の実行に応答して、ビンごとのタイムスタンプ値を生成することができる。いくつかの場合に、ＧＰＵ１２は、ビンごとのコマンドストリーム内のビンごとのタイムスタンプ要求の各々について、それぞれのビンごとのタイムスタンプ値を生成することができる。ビンごとのタイムスタンプ値の各々は、それぞれのビンごとのタイムスタンプ値に関連するビンごとのタイムスタンプ要求がＧＰＵ１２によって実行された時刻を示すことができる。いくつかの例では、ビンごとのタイムスタンプ値の各々は、ＧＰＵ１２によって生成されるそれぞれのビンごとのタイムスタンプ内に含まれ得る。
【００８９】
[0096]いくつかの例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値をＧＰＵドライバ２８に供給することができる。たとえば、ＧＰＵ１２は、ビンごとのタイムスタンプ値をメモリ１０のタイムスタンプデータ４２内に配置することができ、このタイムスタンプデータ４２が、ＧＰＵドライバ２８によってアクセスされ得る。ビンごとのタイムスタンプ値の受取に応答して、ＧＰＵドライバ２８は、ビンごとのタイムスタンプ値に基づいて１つまたは複数のアプリケーションによって要求されたタイムスタンプ値を生成することができる。ＧＰＵドライバ２８は、アプリケーションによって要求されたタイムスタンプ値を生成するのに、本開示で説明される技法のいずれかを使用することができる。ＧＰＵドライバ２８は、アプリケーションによって要求されたタイムスタンプ値をソフトウェアアプリケーション２４に供給することができる。
【００９０】
[0097]さらなる例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値に基づいて１つまたは複数のアプリケーションによって要求されたタイムスタンプ値を生成し、アプリケーションによって要求されたタイムスタンプ値をＧＰＵドライバ２８に供給することができる。ＧＰＵ１２は、アプリケーションによって要求されたタイムスタンプ値を生成するのに、本開示で説明される技法のいずれかを使用することができる。いくつかの例では、ＧＰＵ１２は、アプリケーションによって要求されたタイムスタンプ値をメモリ１０のタイムスタンプデータ４２に配置することができ、このタイムスタンプデータ４２が、ＧＰＵドライバ２８によってアクセスされ得る。ＧＰＵドライバ２８は、アプリケーションによって要求されたタイムスタンプ値をソフトウェアアプリケーション２４に供給することができる。
【００９１】
[0098]追加の例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値に基づいて１つまたは複数の中間値を生成し、この中間値をＧＰＵドライバ２８に供給することができる。ＧＰＵドライバ２８は、中間値に基づいてビンごとのタイムスタンプ値を生成することができる。ＧＰＵドライバ２８およびＧＰＵ１２は、アプリケーションによって要求されたタイムスタンプ値を生成するのに、本開示で説明される技法のいずれかを使用することができる。ＧＰＵドライバ２８は、アプリケーションによって要求されたタイムスタンプ値をソフトウェアアプリケーション２４に供給することができる。
【００９２】
[0099]いくつかの例では、ＣＰＵ６および／またはＧＰＵ１２は、各アプリケーションによって要求されたタイムスタンプ値が少なくとも２つの異なるビンごとのタイムスタンプ値の関数になるように、アプリケーションによって要求されたタイムスタンプ値を生成することができる。そのような例では、少なくとも２つの異なるビンごとのタイムスタンプ値は、いくつかの例で、異なるレンダリングパス反復中に生成され得る。異なるレンダリングパス反復中に生成されるビンごとのタイムスタンプ値を使用することは、グラフィックスフレームのレンダリング中に実行するのに異なる描画呼出しコマンドによって費やされる時間の相対的な長さを少なくともある度合まで反映するアプリケーションによって要求されたタイムスタンプ値をグラフィックス処理システムが生成することを可能にすることができる。この形で、本開示で説明される技法は、タイルベースのレンダリングシステムが描画呼出しコマンドを不連続なインターリーブされた形で実行する場合であっても、タイルベースのレンダリングシステムがイントラフレームタイムスタンプをサポートすることを可能にすることができる。
【００９３】
[0100]タイルベースのレンダリングは、いくつかの例で、レンダターゲットを複数の副領域（たとえば、ビンまたはタイル）に副分割することと、レンダターゲットの副領域の各々について別々のレンダリングパス反復を含むレンダリングパスを実行することとを含むことができる。レンダリングパス中に処理される必要があるプリミティブの個数を減らすために、ビニングパスが、いくつかの例で、レンダリングパスの前に実行され得る。ビニングパスは、レンダリングされるプリミティブの各々がレンダターゲットの複数の副領域のうちのどれに画素データを与えるのかを示すビニングデータを生成するのに使用され得る。ビニングデータは、これによってレンダリングパス中に処理される必要があるプリミティブの個数を減らすために、特定のレンダリングパス反復中にアクティブであるレンダターゲットの副領域に寄与するプリミティブを選択的にレンダリングするのに、レンダリングパス反復中に使用され得る。
【００９４】
[0101]レンダリングは、グラフィックスシーン内の３Ｄオブジェクトに対応する３Ｄグラフィックスプリミティブを２Ｄのラスタ化された画像データに変換するプロセスを指すことができる。レンダリングは、通常、レンダターゲット（たとえば、フレームバッファ）に関して行われ、このレンダターゲットは、通常、シーン内のグラフィックスプリミティブの各々がレンダリングされる時に更新される。したがって、レンダターゲットは、グラフィックスシーンの最終的な２Ｄのラスタ化された画像データを記憶するだけではなく、グラフィックスシーンがレンダリングされる時に中間データを記憶することもできる。レンダターゲット内に記憶される２Ｄのラスタ化された画像データは、複数の画素を含むことができ、画素の各々は、色データ、透明度データ、および／または深度データを含む。各新しいプリミティブがレンダターゲット内にレンダリングされる時に、新しいプリミティブの２Ｄのラスタ化された画像データは、以前にレンダリングされたプリミティブに関するレンダターゲット内にすでに記憶されている既存の中間データとマージされる。
【００９５】
[0102]レンダターゲット内でデータをマージするために、中間データは、通常、レンダターゲットに新しいデータを書き込む前にレンダターゲットから読み取られる必要がある。したがって、レンダリングは、レンダターゲットを含むメモリに関する多数の読取動作と書込動作との実行を伴い、これによって大量のメモリ帯域幅使用をもたらす場合がある。大量のメモリ帯域幅使用のゆえに、レンダターゲットに専用の高帯域幅オンチップメモリを使用することが望ましい。しかし、たとえばモバイルアプリケーションなど、面積を制限されるアプリケーションでは、レンダターゲット内の画素の各々のデータのすべてを同時に保持することができる高帯域幅オンチップメモリを実装するのに十分な使用可能な面積がない場合がある。
【００９６】
[0103]タイルベースのレンダリングは、レンダターゲットを複数の副領域（たとえば、タイルまたはビン）に副分割することと、レンダターゲットの副領域の各々について別々のレンダリングパス反復を含むレンダリングパスを実行することとによって、上で述べた問題に対処することができる。副領域の各々は、レンダターゲット内の画素のサブセット（たとえば、画素の１６ｘ１６タイル）に対応することができる。レンダターゲットの副領域は、その代わりにタイルまたはビンと呼ばれる場合がある。レンダリングパス反復の各々中に、対応する副領域に関連する画像データのすべてをレンダリングすることができ、これは、画素データを副領域に与えるプリミティブの各々をレンダリングすることを含む可能性がある。レンダターゲットの単一の副領域のデータを記憶するのに十分に大きい高帯域幅オンチップメモリが、レンダリングパス反復の各々のローカルレンダターゲットとして使用され得、あるレンダリングパス反復が完了した後に、そのレンダリングパス反復のローカルレンダターゲットの内容は、低帯域幅オフチップシステムメモリに記憶される一般的なレンダターゲットに転送され得る。タイルごとに別々のレンダリングパス反復を実行することによって、タイルベースのレンダリング方式は、大きいオンチップメモリを可能にしない面積を制限されたアプリケーションにおいても、ラスタ化された画像データをマージするのに高帯域幅オンチップメモリを使用することを可能にすることができる可能性がある。
【００９７】
[0104]タイルベースのレンダリングを実行する１つの手法は、レンダターゲットの副領域の各々についてレンダリングパス反復を実行し、レンダリングパス反復の各々中に、現在レンダリングされつつある特定の副領域への出力を制限するために異なるシザーセッティングを使用しながらシーン内のプリミティブのすべてをレンダリングすることである。しかしながら、そのような手法は、プリミティブがレンダリングされる副領域内で実際に可視であるか否かにかかわらず、プリミティブの各々がレンダリングパス反復の各々でレンダリングされるので、非効率的である可能性がある。
【００９８】
[0105]タイルベースのレンダリングの効率を改善するために、ビニングパスは、いくつかの例で、レンダリングパスの実行の前に実行され得る。ビニングパスは、プリミティブについてビニングデータを決定するのに使用され得る。レンダリングされるプリミティブの各々について、ビニングデータは、プリミティブの各々がレンダターゲットの副領域のどれに画素データを与えるのかに関して示すことができる。
【００９９】
[0106]図３は、複数の副領域に副分割される例のレンダターゲット５０を示す概念図である。図３は、副分割されたレンダターゲット５０上に表示される複数のプリミティブをも示す。いくつかの場合に、レンダターゲット５０は、フレームバッファに対応することができる。図３に示されているように、レンダターゲット５０は、１〜２０の番号を付けられた、複数のオーバーラップしない副領域（代替案ではビンまたはタイルと呼ばれる）に分割される。副領域の各々は、レンダターゲット５０内の画素のサブセット（たとえば、画素の１６ｘ１６タイルなど）に対応することができる。図３に示された例のプリミティブについて、ビニングデータは、プリミティブＡがタイル１と２と６と７と８と１２とに画素データを与えること、プリミティブＢがタイル７と８と１２と１３とに画素データを与えることなどを示すことができる。
【０１００】
[0107]いくつかの例では、ビニングデータは、レンダターゲットにレンダリングされるプリミティブの各々のラスタ化された版の合成物に基づいて生成され得る。いくつかの場合に、保守的なｚテストおよび／または他のカリング技法が、プリミティブの各々のラスタ化された版を生成するのに使用され得る。保守的なｚテストおよび／または他のカリング技法は、特定のタイルに寄与すると言われるプリミティブのリストに含まれないように、遮蔽されるプリミティブ（すなわち、他のプリミティブの背後に配置されたプリミティブ）を除去することができる。
【０１０１】
[0108]特定の副領域（たとえば、タイルまたはビン）のレンダリングパス反復中に、ビニングデータは、実際に副領域に画像データ（たとえば、画素データ）を与える、レンダリングされるプリミティブを選択し、副領域に画像データを与えないプリミティブのレンダリングをバイパスするのに使用され得る。この形で、所与のレンダリングパス反復中に処理される必要があるプリミティブの個数が、いくつかの場合に減らされ得る。
【０１０２】
[0109]いくつかの例では、ＧＰＵ１２は、ビニングパスから生成されたビニングデータに基づいて、レンダターゲットの副領域の各々のレンダリングパス反復を実行することができる。たとえば、複数のレンダリングパス反復の各々について、ＧＰＵ１２は、ビニングデータに基づいて、それぞれのレンダリングパス反復中に１つまたは複数の描画呼出しに関連する複数のプリミティブをレンダリングすべきかどうかを決定することができる。プリミティブがそれぞれのレンダリングパス反復に関連する副領域に画素データを与えることをビニングデータが示す場合には、ＧＰＵ１２は、そのレンダリングパス反復中に、それぞれのレンダリングパス反復に関連する副領域にプリミティブをレンダリングすることができる。その一方で、プリミティブがそれぞれのレンダリングパス反復に関連する副領域に画素データを与えないことをビニングデータが示す場合には、ＧＰＵ１２は、それぞれのレンダリングパス反復に関連する副領域にそのプリミティブをレンダリングしないものとすることができる。
【０１０３】
[0110]図３に示された副領域は、実質的に同一のサイズと形状とであるが、他の例では、副領域が、異なるサイズおよび／または異なる形状を有することができる。さらに、副領域のサイズおよび形状は、ＧＰＵの製造時またはレンダリングの時に実質的に固定される必要があるのではなく、いくつかの例では、ＧＰＵ１２の動作中に動的に調整され得る。
【０１０４】
[0111]図４は、本開示に従ってグラフィックスアプリケーションよって発行される例のコマンドストリーム５２を示す概念図である。いくつかの例では、コマンドストリーム５２は、図２に示されたソフトウェアアプリケーション２４によって発行され得る。さらなる例では、コマンドストリーム５２は、図２に示されたＧＰＵドライバ２８によって受け取られ、および／または処理され得る。
【０１０５】
[0112]コマンドストリーム５２は、コマンドの順序付けられたシーケンス（すなわち、ＴＳＲ１、ＤＲＡＷ１、ＴＳＲ２、ＤＲＡＷ２、ＴＳＲ３、ＤＲＡＷ３、ＴＳＲ４）を含む。図４では、ＴＳＲは「ｔｉｍｅｓｔａｍｐ  ｒｅｑｕｅｓｔ（タイムスタンプ要求）」を表し、ＤＲＡＷは「ｄｒａｗ  ｃａｌｌ  ｃｏｍｍａｎｄ（描画呼出しコマンド）」を表す。したがって、図４に示されたコマンドのシーケンスは、第１のタイムスタンプ要求（ＴＳＲ１）と、それに続く第１の描画呼出しコマンド（ＤＲＡＷ１）と、それに続く第２のタイムスタンプ要求（ＴＳＲ２）と、それに続く第２の描画呼出しコマンド（ＤＲＡＷ２）と、それに続く第３のタイムスタンプ要求（ＴＳＲ３）と、それに続く第３の描画呼出しコマンド（ＤＲＡＷ３）と、それに続く第４のタイムスタンプ要求（ＴＳＲ４）と、それに続く第４の描画呼出しコマンド（ＤＲＡＷ４）とを含む。
【０１０６】
[0113]コマンドストリーム５２内のコマンドの各々は、単一のグラフィックスフレームのレンダリングに関連付けられ得る。描画呼出しコマンドの各々は、同一のグラフィックスフレームの一部としてレンダリングされる１つまたは複数のプリミティブを指定することができる。いくつかの例では、異なる描画呼出しコマンドが、そのグラフィックスフレーム内のプリミティブをレンダリングするのに使用される異なるプリミティブタイプおよび／またはそのグラフィックスフレーム内のプリミティブをレンダリングするのに使用される異なるレンダリング状態に関連付けられ得る。
【０１０７】
[0114]図４に示されているように、タイムスタンプ要求は、描画呼出しコマンドの各々の間に配置される。図４にさらに示されているように、描画呼出しコマンドは、タイムスタンプ要求の各々の間に配置される。ＴＳＲ２およびＴＳＲ３は、そのようなタイムスタンプ要求のそれぞれが２つの異なる描画呼出しコマンドの間に位置決めされるので、両方ともイントラフレームタイムスタンプ要求に対応することができる。
【０１０８】
[0115]図５は、本開示に従ってレンダリングパスを実行するための例の実行タイムライン５４を示す概念図である。実行タイムライン５４は、時間において左から右に増加する。
【０１０９】
[0116]例の実行タイムライン５４は、レンダターゲットが４つのビンまたは副領域（すなわち、ＡとＢとＣとＤと）に副分割される場合の、レンダリングパスの一部として実行されるレンダリングパス反復のシーケンスを示す。レンダリングパス反復の各々は、レンダターゲットの特定のビンに関して実行される。たとえば、「レンダリングパス反復Ａ」は、レンダターゲットの第１のビン（すなわち、ビン「Ａ」）に関して実行され、「レンダリングパス反復Ｂ」は、レンダターゲットの第２のビン（すなわち、ビン「Ｂ」）に関して実行されるなどである。
【０１１０】
[0117]いくつかの例では、図１に示されたコンピューティングシステム２が、実行タイムライン５４に示されたレンダリングパス反復を実行することができる。さらなる例では、ＧＰＵ１２が、実行タイムライン５４に示されたレンダリングパス反復を実行することができ、ＣＰＵ６は、ＧＰＵ１２に、実行タイムライン５４に示されたレンダリングパス反復を実行させることができる。
【０１１１】
[0118]図５に示されているように、コンピューティングシステム２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、レンダターゲット内に含まれるビンの各々についてレンダリングパス反復を実行することができる。たとえば、コンピューティングシステム２（たとえば、ＣＰＵ６および／またはＧＰＵ１２）は、第１のビンに関する第１のレンダリングパス反復（レンダリングパス反復Ａ）と、それに続く第２のビンに関する第２のレンダリングパス反復（レンダリングパス反復Ｂ）と、それに続く第３のビンに関する第３のレンダリングパス反復（レンダリングパス反復Ｃ）と、それに続く第４のビンに関する第４のレンダリングパス反復（レンダリングパス反復Ｄ）とを実行することができる。
【０１１２】
[0119]図６は、本開示に従って複数のレンダリングパス反復を実行するための例のコマンドストリーム５６と５８と６０と６２とを示す概念図である。いくつかの例では、コマンドストリーム５６、５８、６０、および６２は、図２に示されたＧＰＵドライバ２８によって発行され、および／または生成され得る。さらなる例では、コマンドストリーム５６、５８、６０、および６２は、図２に示されたＧＰＵ１２および／またはコマンドエンジン３２によって受け取られ、および／または処理され得る。
【０１１３】
[0120]図６では、ＴＳＲは「ｔｉｍｅｓｔａｍｐ  ｒｅｑｕｅｓｔ（タイムスタンプ要求）」を表し、ＤＲＡＷは「ｐｅｒ−ｂｉｎ  ｄｒａｗ  ｃａｌｌ  ｃｏｍｍａｎｄ（ビンごとの描画呼出しコマンド）」を表す。ＴＳＲＧＰＵタイムスタンプ要求は、ＧＰＵドライバ２８によって生成され、それぞれのレンダリングパス反復の始めにそれぞれのコマンドストリーム５６と５８と６０と６２との中に配置されるタイムスタンプ要求に対応する。いくつかの例では、図６のＴＳＲおよびＴＳＲＧＰＵは、図４のコマンドストリーム５２内に含まれるタイムスタンプ要求からそのようなタイムスタンプ要求を区別するために、その代わりに、ビンごとのタイムスタンプ要求と呼ばれる場合がある。ビンごとのタイムスタンプ要求に応答して生成されるタイムスタンプおよびタイムスタンプ値は、それぞれ、ビンごとのタイムスタンプおよびビンごとのタイムスタンプ値と呼ばれる場合がある。
【０１１４】
[0121]同様に、図４のコマンドストリーム５２内に含まれるタイムスタンプ要求は、ＧＰＵドライバ２８によって生成されるビンごとのタイムスタンプ要求からそのようなタイムスタンプ要求を区別するために、アプリケーションによって生成されたタイムスタンプ要求と呼ばれる場合がある。アプリケーションによって生成されたタイムスタンプ要求に応答して生成されるタイムスタンプおよびタイムスタンプ値は、それぞれ、アプリケーションによって生成されたタイムスタンプおよびアプリケーションによって生成されたタイムスタンプ値と呼ばれる場合がある。
【０１１５】
[0122]いくつかの例では、ビンごとのタイムスタンプ要求は、コマンドストリーム５２内でソフトウェアアプリケーション２４からのアプリケーションによって生成されたタイムスタンプ要求を受け取ることに応答して、ＧＰＵドライバ２８によって生成され得る。たとえば、ＧＰＵドライバ２８は、コマンドストリーム５２内でアプリケーションによって生成されたタイムスタンプ要求ＴＳＲ１に出会うことに応答して、ビンごとのタイムスタンプ要求ＴＳＲ１ＡとＴＳＲ１ＢとＴＳＲ１ＣとＴＳＲ１Ｄとを生成することができる。別の例として、ＧＰＵドライバ２８は、コマンドストリーム５２内でアプリケーションによって生成されたタイムスタンプ要求ＴＳＲ３に出会うことに応答して、ビンごとのタイムスタンプ要求ＴＳＲ３ＡとＴＳＲ３ＢとＴＳＲ３ＣとＴＳＲ３Ｄとを生成することができる。
【０１１６】
[0123]いくつかの例では、ＴＳＲＧＰＵタイムスタンプ要求は、コマンドストリーム５２内でアプリケーションによって生成されたタイムスタンプ要求に出会うことに基づいてまたはこれに応答して生成されるのではないものとすることができる。その代わりに、そのような例では、ＧＰＵドライバ２８は、レンダリングパス中に実行されるレンダリングパスインスタンスごとにＴＳＲＧＰＵタイムスタンプ要求を自動的に生成することができる。
【０１１７】
[0124]ビンごとのタイムスタンプ要求の各々の後の数は、そのビンごとのタイムスタンプ要求に関連するアプリケーションによって生成されたタイムスタンプ要求を示す。ビンごとのタイムスタンプ要求は、アプリケーションによって生成されたコマンドストリーム（たとえば、コマンドストリーム５２）内でアプリケーションによって生成されたタイムスタンプ要求に出会うことに基づいてまたはこれに応答して、ＧＰＵドライバ２８によって生成される内のビンごとのタイムスタンプ要求の場合に、アプリケーションによって生成されたタイムスタンプ要求に関連付けられ得る。たとえば、ビンごとのタイムスタンプ要求ＴＳＲ１ＡとＴＳＲ１ＢとＴＳＲ１ＣとＴＳＲ１Ｄとは、コマンドストリーム５２内のアプリケーションによって生成されたタイムスタンプ要求ＴＳＲ１に関連付けられる。
【０１１８】
[0125]ビンごとのタイムスタンプ要求の各々の後の文字は、それぞれのビンごとのタイムスタンプ要求に関連する実行タイムライン５４内のレンダリングパス反復を示す。タイムスタンプ要求は、そのタイムスタンプ要求がレンダリングパス反復中に発行され、および／またはサービスされる場合に、そのレンダリングパス反復に関連付けられ得る。たとえば、ＴＳＲ１Ａは、アプリケーションによって生成されたタイムスタンプ要求ＴＳＲ１と、実行タイムライン５４内の第１のレンダリングパス反復（すなわち、レンダリングパス反復Ａ）とに関連するビンごとのタイムスタンプ要求を示す。
【０１１９】
[0126]ビンごとの描画呼出しの各々の後の数は、それぞれのビンごとの描画呼出しに関連するコマンドストリーム５２内の描画呼出しコマンドを示す。ビンごとの描画呼出しの各々の後の文字は、それぞれのビンごとの描画呼出しに関連する実行タイムライン５４内のレンダリングパス反復を示す。
【０１２０】
[0127]たとえば、「ＤＲＡＷ１Ａ」は、コマンドストリーム５２内の第１の描画呼出しコマンド（すなわち、ＤＲＡＷ１）と、実行タイムライン５４内の第１のレンダリングパス反復（すなわち、レンダリングパス反復Ａ）とに関連するビンごとの描画呼出しを示す。別の例として、「ＤＲＡＷ２Ｃ」は、コマンドストリーム５２内の第２の描画呼出しコマンド（すなわち、ＤＲＡＷ２）と、実行タイムライン５４内の第３のレンダリングパス反復（すなわち、レンダリングパス反復Ｃ）とに関連するビンごとの描画呼出しを示す。
【０１２１】
[0128]ビンごとの描画呼出しは、そのビンごとの描画呼出しが描画呼出しコマンドを実行するために描画呼出しコマンドに基づいて生成される場合に、その描画呼出しコマンドに関連付けられ得る。ビンごとの描画呼出しは、そのビンごとの描画呼出しがレンダリングパス反復中に実行される場合に、そのレンダリングパス反復に関連付けられ得る。
【０１２２】
[0129]図４に似て、図６のコマンドストリーム５６、５８、６０、および６２の各々は、コマンドの順序付けられたシーケンスを含む。たとえば、コマンドストリーム５６は、第１のビンごとのタイムスタンプ要求（ＴＳＲＧＰＵＡ）と、それに続く第２のビンごとのタイムスタンプ要求（ＴＳＲ１Ａ）と、それに続く第１のビンごとの描画呼出し（ＤＲＡＷ１Ａ）と、それに続く第３のビンごとのタイムスタンプ要求（ＴＳＲ２Ａ）と、それに続く第２のビンごとの描画呼出し（ＤＲＡＷ２Ａ）と、それに続く第４のビンごとのタイムスタンプ要求（ＴＳＲ３Ａ）と、それに続く第３のビンごとの描画呼出し（ＤＲＡＷ３Ａ）と、それに続く第５のビンごとのタイムスタンプ要求（ＴＳＲ４Ａ）とを含む。
【０１２３】
[0130]コマンドストリーム５６、５８、６０、および６２の各々は、レンダリングパス反復のうちのそれぞれのレンダリングパス反復中に実行される。たとえば、コマンドストリーム５６は、「レンダリングパス反復Ａ」中に実行され、コマンドストリーム５８は、「レンダリングパス反復Ｂ」中に実行され、コマンドストリーム６０は、「レンダリングパス反復Ｃ」中に実行され、コマンドストリーム６２は、「レンダリングパス反復Ｄ」中に実行される。
【０１２４】
[0131]レンダリングパス反復の各々は、複数のビン（たとえば、レンダターゲットの副領域）のうちのそれぞれのビンをレンダリングするように構成される。たとえば、図６に示されているように、「レンダリングパス反復Ａ」は、レンダターゲットの「ビンＡ」をレンダリングするように構成され、「レンダリングパス反復Ｂ」は、レンダターゲットの「ビンＢ」をレンダリングするように構成され、「レンダリングパス反復Ｃ」は、レンダターゲットの「ビンＣ」をレンダリングするように構成され、「レンダリングパス反復Ｄ」は、レンダターゲットの「ビンＤ」をレンダリングするように構成される。
【０１２５】
[0132]図４に示されたコマンドストリーム５２の受取に応答して、ＧＰＵドライバ２８は、コマンドストリーム５２内に含まれる描画呼出しコマンドの各々に関する複数のビンごとの描画呼出しと、コマンドストリーム５２内に含まれるタイムスタンプ要求の各々に関する複数のビンごとのタイムスタンプ要求とを生成することができる。たとえば、コマンドストリーム５２内のＤＲＡＷ１に出会うことに応答して、ＧＰＵドライバ２８は、ＤＲＡＷ１ＡとＤＲＡＷ１ＢとＤＲＡＷ１ＣとＤＲＡＷ１Ｄとを生成することができる。別の例として、コマンドストリーム５２内のＴＳＲ２に出会うことに応答して、ＧＰＵドライバ２８は、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄとを生成することができる。
【０１２６】
[0133]ＧＰＵドライバ２８は、ＧＰＵドライバ２８によって生成されたビンごとの描画呼出しとビンごとのタイムスタンプ要求とに基づいて、複数レンダリングパス反復固有のコマンドストリーム５６と５８と６０と６２とを生成することもできる。たとえば、ＧＰＵドライバ２８は、ビンごとの描画呼出しとビンごとのタイムスタンプ要求とをビンによって一緒にグループ化し、ビンごとの描画呼出しとビンごとのタイムスタンプ要求との各グループをコマンドストリーム５６と５８と６０と６２とのうちの別々の１つに配置することができる。
【０１２７】
[0134]いくつかの例では、ＧＰＵドライバ２８は、図４のコマンドストリーム５２内のアプリケーションによって生成されたタイムスタンプ要求に関連しないコマンドストリーム５６と５８と６０と６２との各々の始めにタイムスタンプ要求を配置することもできる。これらのタイムスタンプ要求は、いくつかの例で、アプリケーションによって生成されたタイムスタンプ要求のタイムスタンプ値を生成する時に基準タイムスタンプとして働くことができる。
【０１２８】
[0135]ＧＰＵドライバ２８は、ＧＰＵ１２に、コマンドストリーム５６と５８と６０と６２とに基づいて複数のレンダリングパス反復を実行させることができる。たとえば、ＧＰＵドライバ２８は、ＧＰＵ１２に、別々のレンダリングパス反復中にコマンドストリーム５６と５８と６０と６２との各々を実行させることができる。
【０１２９】
[0136]いくつかの例では、コマンドストリーム５６と５８と６０と６２とを実行する時に、ＧＰＵ１２は、コマンドストリーム５６と５８と６０と６２と内でビンごとのタイムスタンプ要求の各々に出会うことに応答して、ＣＰＵ６（たとえば、ＧＰＵドライバ２８）にビンごとのタイムスタンプを発行することができる。ＧＰＵ１２によって発行されるビンごとのタイムスタンプは、コマンドストリーム５６と５８と６０と６２とのうちの１つを実行する時にＧＰＵ１２がビンごとのタイムスタンプ要求に出会った時刻に対応するタイムスタンプ値を含むことができる。そのような例では、ＧＰＵ１２からのビンごとのタイムスタンプおよび／またはビンごとのタイムスタンプ値の受取に応答して、ＧＰＵドライバ２８は、ＧＰＵ１２から受け取られたビンごとのタイムスタンプおよび／またはビンごとのタイムスタンプ値に基づいて１つまたは複数のアプリケーションによって要求されたタイムスタンプ値を生成し、このアプリケーションによって要求されたタイムスタンプ値をソフトウェアアプリケーション２４に供給することができる。
【０１３０】
[0137]さらなる例では、コマンドストリーム５６と５８と６０と６２とを実行している間に、ＧＰＵ１２は、ビンごとのタイムスタンプ要求に対応するビンごとのタイムスタンプ値を内部で記録することができる。そのような例では、ＧＰＵ１２は、いくつかの例で、ＧＰＵ１２によって内部で追跡されるビンごとのタイムスタンプ値に基づいて、１つまたは複数のアプリケーションによって要求されたタイムスタンプおよび／または１つまたは複数のアプリケーションによって要求されたタイムスタンプ値を生成し、そのアプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値をＧＰＵドライバ２８に供給することができる。アプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値の受取に応答して、ＧＰＵドライバ２８は、アプリケーションによって生成されたタイムスタンプを生成し、および／またはこれをソフトウェアアプリケーション２４に供給することができる。
【０１３１】
[0138]ＧＰＵ１２がビンごとのタイムスタンプ値を内部で追跡する追加の例では、ＧＰＵ１２は、いくつかの例で、１つまたは複数の中間時刻値を生成し、その１つまたは複数の中間時刻値をＧＰＵドライバ２８に供給することができる。中間時刻値の受取に応答して、ＧＰＵドライバ２８は、アプリケーションによって生成されたタイムスタンプを生成し、そのアプリケーションによって生成されたタイムスタンプをソフトウェアアプリケーション２４に供給することができる。
【０１３２】
[0139]いくつかの例では、図４に示されたコマンドストリーム５２について、コマンドストリーム５２内に含まれるタイムスタンプ要求の各々についてＧＰＵドライバ２８によって返されるタイムスタンプ内に含まれるタイムスタンプ値は、表１にリストされた式に基づいて生成され得る。
【０１３３】
【表１】
2016522474.tif 000003
【０１３４】
[0140]表１では、ＴＳＶｘは、タイムスタンプ要求ＴＳＲｘに応答して生成されるタイムスタンプ値であり、ＴＳＶＧＰＵｘは、タイムスタンプ要求ＴＳＲＧＰＵｘに応答して生成されるタイムスタンプ値である。たとえば、ＴＳＶ１は、タイムスタンプ要求ＴＳＲ１に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ３Ｂは、タイムスタンプ要求ＴＳＲ３Ｂに応答して生成されるタイムスタンプのタイムスタンプ値である。別の例として、ＴＳＶＧＰＵＡは、タイムスタンプ要求ＴＳＲＧＰＵＡに応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶＧＰＵＢは、タイムスタンプ要求ＴＳＲＧＰＵＢに応答して生成されるタイムスタンプのタイムスタンプ値である。
【０１３５】
[0141]さらなる例では、コマンドストリーム５２内に含まれるタイムスタンプ要求の各々についてＧＰＵドライバ２８によって返されるタイムスタンプ内に含まれるタイムスタンプ値は、次の包括的な式に基づいて生成され得る。
【０１３６】
【数１】
2016522474.tif 000004
【０１３７】
ただし、ＴＳＶｘは、タイムスタンプ要求ＴＳＲｘに応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶｘＡは、タイムスタンプ要求ＴＳＲｘＡに応答して生成されるタイムスタンプのタイムスタンプ値であるなどである。式（５）では、ｘは、任意の整数とすることができる。
【０１３８】
[0142]いくつかの例では、ＴＳＲｘＡ、ＴＳＲｘＢ、ＴＳＲｘＣ、およびＴＳＲｘＤは、コマンドストリーム５２内でＴＳＲｘを受け取ることに応答して生成されるタイムスタンプ要求とすることができ、ＴＳＲＧＰＵＡ、ＴＳＲＧＰＵＢ、ＴＳＲＧＰＵＣ、およびＴＳＲＧＰＵＤは、それぞれのレンダリングパス反復の始めにＧＰＵドライバ２８によって生成されるタイムスタンプ要求とすることができる。
【０１３９】
[0143]追加の例では、ＣＰＵ６および／またはＧＰＵ１２は、次式に基づいて１つまたは複数のタイムスタンプ値を生成することができる。
【０１４０】
【数２】
2016522474.tif 000005
【０１４１】
ただし、Ｖａｌｕｅは、グラフィックスアプリケーションから受け取られたタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、第ｙのレンダリングパス反復について何らかのプリミティブをレンダリングする前に生成される基準タイムスタンプ値であり、Ｎは、グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である。いくつかの例では、式（６）は、表１の式の一般化された形とすることができる。
【０１４２】
[0144]いくつかの場合に、ＴＳＶ（ｙ）ビンごとのタイムスタンプ値の各々は、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに対応することができ、複数のビンごとのタイムスタンプ要求の各々は、Ｖａｌｕｅに対応するグラフィックスアプリケーションから受け取られたタイムスタンプ要求に対応し、これに応答して生成される。
【０１４３】
[0145]さらなる例では、ＣＰＵ６および／またはＧＰＵ１２は、次式に基づいて、グラフィックスアプリケーションから受け取られたコマンドストリーム内に含まれる複数のタイムスタンプ要求のタイムスタンプ値を生成することができる。
【０１４４】
【数３】
2016522474.tif 000006
【０１４５】
ただし、Ｖａｌｕｅ（ｘ）は、グラフィックスアプリケーションから受け取られたコマンドストリーム内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドストリーム内の第ｘのタイムスタンプ要求に対応し、これに応答して生成される、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、第ｙのレンダリングパス反復について何らかのプリミティブをレンダリングする前に生成される基準タイムスタンプ値であり、Ｎは、グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である。いくつかの場合に、ＴＳＶ（ｘ，ｙ）ビンごとのタイムスタンプ値の各々は、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに対応することができ、複数のビンごとのタイムスタンプ要求の各々は、グラフィックスアプリケーションから受け取られたコマンドストリーム内の第ｘのタイムスタンプ要求に対応し、これに応答して生成される。いくつかの例では、式（７）は、表１の式の一般化された形とすることができる。
【０１４６】
[0146]いくつかの例では、グラフィックスアプリケーションから受け取られるコマンドストリーム内に含まれるタイムスタンプ要求の各々について、ＧＰＵドライバ２８は、ビンごとのコマンドストリームの各々内にビンごとのタイムスタンプ要求を配置することができる。そのような例では、ビンごとのコマンドストリームの各々内のビンごとのタイムスタンプ要求の順序は、いくつかの例で、グラフィックスアプリケーションから受け取られるコマンドストリーム内の対応するタイムスタンプ要求の順序と同一とすることができる。
【０１４７】
[0147]さらなる例では、グラフィックスアプリケーションから受け取られるコマンドストリームは、描画呼出しコマンドとタイムスタンプ要求とを含むことができる。いくつかの場合に、タイムスタンプ要求のうちの少なくとも１つは、コマンドストリーム内で描画呼出しコマンドのうちの少なくとも２つの間に位置決めされ得る。そのような例では、グラフィックスアプリケーションから受け取られるコマンドストリーム内のタイムスタンプ要求の各々について、ＧＰＵドライバ２８は、ビンごとのコマンドストリームの各々内にビンごとのタイムスタンプ要求を配置することができる。さらに、グラフィックスアプリケーションから受け取られるコマンドストリーム内の描画呼出しコマンドの各々について、ＧＰＵドライバ２８は、ビンごとのコマンドストリームの各々内にビンごとの描画呼出しを配置することができる。そのような例では、ビンごとのコマンドストリームの各々内のビンごとのタイムスタンプ要求とビンごとの描画呼出しとの順序は、いくつかの例で、グラフィックスアプリケーションから受け取られたコマンドストリーム内の対応するタイムスタンプ要求と描画呼出しコマンドとの順序と同一とすることができる。
【０１４８】
[0148]一般に、ＧＰＵドライバ２８とＧＰＵ１２との一方または両方は、ビンごとのタイムスタンプ値に基づいて、アプリケーションによって要求されたタイムスタンプおよび／またはアプリケーションによって要求されたタイムスタンプ値を生成することができる。いくつかの例では、ＧＰＵドライバ２８は、ＧＰＵ１２からビンごとのタイムスタンプ値を受け取り、ビンごとのタイムスタンプ値に基づいて、アプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値を生成することができる。そのような例では、ＧＰＵドライバ２８は、いくつかの例で、式（１）〜（７）のうちの１つまたは複数に基づいて、アプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値を生成することができる。
【０１４９】
[0149]さらなる例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値を生成し、ビンごとのタイムスタンプ値に基づいてアプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値を生成し、アプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値をＧＰＵドライバ２８に供給することができる。そのような例では、ＧＰＵ１２は、いくつかの例で、式（１）〜（７）のうちの１つまたは複数に基づいて、アプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値を生成することができる。
【０１５０】
[0150]追加の例では、ＧＰＵ１２は、ビンごとのタイムスタンプ値を生成し、ビンごとのタイムスタンプ値に基づいて１つまたは複数の中間値を生成し、中間値をＧＰＵドライバ２８に供給することができる。そのような例では、ＧＰＵドライバ２８は、ＧＰＵ１２から中間値を受け取り、中間値に基づいて、アプリケーションによって要求されたタイムスタンプおよび／またはタイムスタンプ値を生成することができる。
【０１５１】
[0151]いくつかの場合に、中間値は、式（１）〜（７）内の１つまたは複数の項に対応することができる。追加の場合に、中間値は、式（１）〜（７）内で指定される入力変数の任意の組合せに対応することができる。
【０１５２】
[0152]図４〜６に示されているように、ＣＰＵ６および／またはＧＰＵ１２は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にＧＰＵ１２によって生成される複数のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄとに対応するビンごとのタイムスタンプ値）に基づいて時点を示すタイムスタンプ値（たとえば、ＴＳＲ２に対応するタイムスタンプ値）を生成することができる。タイムスタンプ値（たとえば、ＴＳＲ２に対応するタイムスタンプ値）は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄとに対応するビンごとのタイムスタンプ値）の関数とすることができる。
【０１５３】
[0153]いくつかの例では、複数のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄとに対応するビンごとのタイムスタンプ値）の各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つの間にＧＰＵ１２によって生成され得る。たとえば、ＴＳＲ２Ａのビンごとのタイムスタンプ値は、レンダリングパス反復Ａ中にＧＰＵ１２によって生成され、ＴＳＲ２Ｂのビンごとのタイムスタンプ値は、レンダリングパス反復Ｂ中にＧＰＵ１２によって生成され、ＴＳＲ２Ｃのビンごとのタイムスタンプ値は、レンダリングパス反復Ｃ中にＧＰＵ１２によって生成され、ＴＳＲ２Ｄのビンごとのタイムスタンプ値は、レンダリングパス反復Ｄ中にＧＰＵ１２によって生成される。
【０１５４】
[0154]レンダリングパス反復の各々は、いくつかの例で、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成され得る。たとえば、レンダリングパス反復Ａは、レンダターゲットのビンＡをレンダリングするように構成され、レンダリングパス反復Ｂは、レンダターゲットのビンＢをレンダリングするように構成され、レンダリングパス反復Ｃは、レンダターゲットのビンＣをレンダリングするように構成され、レンダリングパス反復Ｄは、レンダターゲットのビンＤをレンダリングするように構成される。
【０１５５】
[0155]いくつかの例では、タイムスタンプ値（たとえば、ＴＳＲ２に対応するタイムスタンプ値）を生成するのに使用される少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ａに対応するタイムスタンプ値）と、第２のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ｂに対応するタイムスタンプ値）とを含むことができる。第１のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ａに対応するタイムスタンプ値）は、複数のレンダリングパス反復のうちの第１のレンダリングパス反復（たとえば、レンダリングパス反復Ａ）中にＧＰＵ１２によって生成され得る。第２のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ｂに対応するタイムスタンプ値）は、複数のレンダリングパス反復のうちの第２のレンダリングパス反復（たとえば、レンダリングパス反復Ｂ）中にＧＰＵ１２によって生成され得る。第２のレンダリングパス反復（たとえば、レンダリングパス反復Ｂ）は、第１のレンダリングパス反復（たとえば、レンダリングパス反復Ａ）とは異なるものとすることができる。
【０１５６】
[0156]さらなる例では、タイムスタンプ値（たとえば、ＴＳＲ２に対応するタイムスタンプ値）を生成するのに使用される少なくとも２つのビンごとのタイムスタンプ値は、少なくとも２つの基準タイムスタンプ値（たとえば、ＴＳＲＧＰＵＡとＴＳＲＧＰＵＢとＴＳＲＧＰＵＣとＴＳＲＧＰＵＤとに対応するタイムスタンプ値）をさらに含むことができる。少なくとも２つの基準タイムスタンプ値の各々は、レンダリングパス反復のうちのそれぞれの１つ中に、レンダリングパス反復のうちのそれぞれの１つに関して何らかのプリミティブをレンダリングする前に、生成され得る。たとえば、ＴＳＲＧＰＵＡに対応するタイムスタンプ値は、レンダリングパス反復Ａ中に、レンダリングパス反復Ａに関して何らかのプリミティブをレンダリングする前に（たとえば、ＤＲＡＷ１ＡとＤＲＡＷ２ＡとＤＲＡＷ３Ａとを実行する前に）生成される。
【０１５７】
[0157]追加の例では、ＣＰＵ６および／またはＧＰＵ１２は、グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス（コマンドストリーム５２）内の少なくとも２つの描画呼出しコマンド（たとえば、ＤＲＡＷ１、ＤＲＡＷ２）の間に位置決めされたタイムスタンプ要求（たとえば、ＴＳＲ２）に応答して、タイムスタンプ値（たとえば、ＴＳＲ２に対応するタイムスタンプ値）を生成することができる。いくつかの例では、ＴＳＲ２のタイムスタンプ値は、グラフィックスフレームのレンダリング中に実行するのにコマンドの順序付けられたシーケンス内の描画呼出しコマンド（たとえば、ＤＲＡＷ１、ＤＲＡＷ２）によって費やされる時間の相対的な長さに基づいて生成され得る。
【０１５８】
[0158]いくつかの例では、ＧＰＵ１２は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間に、複数のレンダリングパス反復を実行することができる。レンダリングパス反復の各々は、少なくとも２つのビンごとの描画呼出しを実行するように構成され得る。たとえば、レンダリングパス反復Ａは、ＤＲＡＷ１ＡとＤＲＡＷ２Ａとを実行するように構成され得る。少なくとも２つのビンごとの描画呼出しの各々は、少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連付けられ得る。たとえば、ＤＲＡＷ１Ａは、コマンドストリーム５２内のＤＲＡＷ１に関連付けられ得、ＤＲＡＷ２Ａは、コマンドストリーム５２内のＤＲＡＷ２に関連付けられ得る。
【０１５９】
[0159]そのような例では、タイムスタンプ値（たとえば、ＴＳＲ２に対応するタイムスタンプ値）を生成するのに使用される少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ａに対応するタイムスタンプ値）と、第２のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ｂに対応するタイムスタンプ値）とを含むことができる。第１のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ａに対応するタイムスタンプ値）は、複数のレンダリングパス反復のうちの第１のレンダリングパス反復（たとえば、レンダリングパス反復Ａ）中に少なくとも２つのビンごとの描画呼出し（たとえば、ＤＲＡＷ１Ａ、ＤＲＡＷ２Ａ）の間に発生する時点を示すものとすることができる。第２のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２Ｂに対応するタイムスタンプ値）は、複数のレンダリングパス反復のうちの第２のレンダリングパス反復（たとえば、レンダリングパス反復Ｂ）中に少なくとも２つのビンごとの描画呼出し（たとえば、ＤＲＡＷ１Ｂ、ＤＲＡＷ２Ｂ）の間に発生する時点を示すものとすることができる。第２のレンダリングパス反復（たとえば、レンダリングパス反復Ｂ）は、第１のレンダリングパス反復（たとえば、レンダリングパス反復Ａ）とは異なるものとされ得る。
【０１６０】
[0160]さらなる例では、複数のビンごとのタイムスタンプ値（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄとに対応するビンごとのタイムスタンプ値）の各々は、複数のビンごとのタイムスタンプ要求のそれぞれの１つ（たとえば、それぞれＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄと）に応答して生成され得る。そのような例では、ビンごとのタイムスタンプ要求の各々（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄと）は、複数のコマンドストリームのうちのそれぞれの１つ（たとえば、それぞれコマンドストリーム５６と５８と６０と６２と）内に配置され得る。コマンドストリームの各々（たとえば、それぞれコマンドストリーム５６と５８と６０と６２と）は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ（たとえば、それぞれレンダリングパス反復ＡとＢとＣとＤと）中にＧＰＵ１２によって実行され得る。レンダリングパス反復の各々（たとえば、レンダリングパス反復ＡとＢとＣとＤと）は、レンダターゲットの複数の副領域のうちのそれぞれの１つ（たとえば、それぞれビンＡとＢとＣとＤと）をレンダリングするように構成され得る。
【０１６１】
[0161]いくつかの例では、ＣＰＵ６および／またはＧＰＵ１２は、複数のビンごとのタイムスタンプ値（たとえば、ＴＳＲ１Ａ−ＴＳＲ１ＤとＴＳＲ２Ａ−ＴＳＲ２ＤとＴＳＲ３Ａ−ＴＳＲ３ＤとＴＳＲ４Ａ−ＴＳＲ４Ｄとに対応するビンごとのタイムスタンプ値）に基づいて、複数のタイムスタンプ値（たとえば、ＴＳＲ１とＴＳＲ２とＴＳＲ３とＴＳＲ４とに対応するタイムスタンプ値）を生成することができる。タイムスタンプ値の各々（たとえば、ＴＳＲ１とＴＳＲ２とＴＳＲ３とＴＳＲ４とに対応するタイムスタンプ値）は、グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス（たとえば、コマンドストリーム５２）内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つ（たとえば、それぞれＴＳＲ１とＴＳＲ２とＴＳＲ３とＴＳＲ４と）に対応することができる。タイムスタンプ要求の各々は、グラフィックスアプリケーションによって要求され得る。
【０１６２】
[0162]そのような例では、タイムスタンプ要求のうちの少なくとも２つ（たとえば、ＴＳＲ２とＴＳＲ３と）は、いくつかの例で、グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス（たとえば、コマンドストリーム５２）内の連続する描画呼出しコマンドのそれぞれの対（たとえば、それぞれＤＲＡＷ１／ＤＲＡＷ２とＤＲＡＷ２／ＤＲＡＷ３と）の間に位置決めされ得る。そのような例では、ＣＰＵ６および／またはＧＰＵ１２は、コマンドの順序付けられたシーケンス内のタイムスタンプ要求に関して返されるタイムスタンプ値が、コマンドの順序付けられたシーケンス（たとえば、コマンドストリーム５２）の始めからコマンドの順序付けられたシーケンス（たとえば、コマンドストリーム５２）の終りまで値において単調に増加するように、ビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値（たとえば、ＴＳＲ１とＴＳＲ２とＴＳＲ３とＴＳＲ４とに対応するタイムスタンプ値）を生成することができる。たとえば、ＴＳＲ１は、ＴＳＲ２以下とすることができ、ＴＳＲ２は、ＴＳＲ３以下とすることができ、ＴＳＲ３は、ＴＳＲ４以下とすることができる。
【０１６３】
[0163]そのような例では、複数のタイムスタンプ値（たとえば、ＴＳＲ１とＴＳＲ２とＴＳＲ３とＴＳＲ４とに対応するタイムスタンプ値）は、いくつかの例で、グラフィックスフレームのレンダリング中に実行するのにコマンドの順序付けられたシーケンス（たとえば、コマンドストリーム５２）内の描画呼出しコマンド（たとえば、ＤＲＡＷ１とＤＲＡＷ２とＤＲＡＷ３と）によって費やされる時間の相対的な長さを示すものとすることができる。たとえば、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ１によって費やされる時間の長さが、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ２によって費やされる時間の長さより長い場合には、ＴＳＲ２とＴＳＲ１との間の差は、いくつかの例で、ＴＳＲ３とＴＳＲ２との間の差より大きいものとすることができる。
【０１６４】
[0164]いくつかの場合に、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ１によって費やされる時間の長さは、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ１に関連するビンごとの描画呼出しコマンドの各々について費やされる時間の集計長さに対応することができ、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ２によって費やされる時間の長さは、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ２に関連するビンごとの描画呼出しコマンドの各々について費やされる時間の集計長さに対応することができる。たとえば、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ１によって費やされる時間の長さは、実行するのにＤＲＡＷ１ＡとＤＲＡＷ１ＢとＤＲＡＷ１ＣとＤＲＡＷ１Ｄとによって費やされる時間の長さの合計と等しいものとすることができ、グラフィックスフレームのレンダリング中に実行するのにＤＲＡＷ２によって費やされる時間の長さは、実行するのにＤＲＡＷ２ＡとＤＲＡＷ２ＢとＤＲＡＷ２ＣとＤＲＡＷ２Ｄとによって費やされる時間の長さの合計と等しいものとすることができる。
【０１６５】
[0165]いくつかの例では、ＧＰＵドライバ２８は、グラフィックスアプリケーション（たとえば、ソフトウェアアプリケーション２４）からタイムスタンプ要求（たとえば、ＴＳＲ２）を受け取ることができる。ＧＰＵドライバ２８は、タイムスタンプ要求（たとえば、ＴＳＲ２）に基づいて、複数のビンごとのタイムスタンプ要求（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄと）を生成することができる。ＧＰＵドライバ２８は、複数のコマンドストリームのうちのそれぞれの１つ（たとえば、それぞれコマンドストリーム５６と５８と６０と６２と）内にビンごとのタイムスタンプ要求の各々（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄと）を配置することができる。コマンドストリームの各々（たとえば、コマンドストリーム５６と５８と６０と６２と）は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ（たとえば、それぞれレンダリングパス反復ＡとＢとＣとＤと）中にＧＰＵ１２によって実行され得る。レンダリングパス反復の各々（たとえば、レンダリングパス反復ＡとＢとＣとＤと）は、レンダターゲットの複数の副領域のうちのそれぞれの１つ（たとえば、それぞれビンＡとＢとＣとＤと）をレンダリングするように構成され得る。
【０１６６】
[0166]ＧＰＵドライバ２８は、ＧＰＵ１２に、コマンドストリーム（たとえば、コマンドストリーム５６と５８と６０と６２と）を実行させることができる。ＧＰＵドライバ２８および／またはＧＰＵ１２は、コマンドストリーム内に配置されたビンごとのタイムスタンプ要求（たとえば、ＴＳＲ２ＡとＴＳＲ２ＢとＴＳＲ２ＣとＴＳＲ２Ｄと）に応答してＧＰＵ１２によって生成されたビンごとのタイムスタンプ値に基づいて、タイムスタンプ値（たとえば、ＴＳＲ２）を生成することができる。
【０１６７】
[0167]図４〜６は、グラフィックスフレームをレンダリングするための３つの描画呼出しコマンドを含む例のコマンドストリームと、レンダターゲットを４つの異なる副領域またはビンに副分割する例のタイルベースのレンダリングシステムとを示す。しかしながら、本開示で説明される技法が、レンダリングされるグラフィックスフレームごとに同一のまたは異なる個数の描画呼出しコマンドを含むコマンドストリームと、グラフィックスフレームを同一のまたは異なる個数の副領域またはビンに副分割するタイルベースのレンダリングシステムとを用いて実施され得ることを理解されたい。
【０１６８】
[0168]いくつかの例では、ビニングパスは、図５に示されたレンダリングパス反復の前に実行され得る。そのような例では、ビニングパスは、レンダリングパス反復（たとえば、「レンダリングパス反復Ａ」）に類似する形で扱われ得る。そのような例では、ＧＰＵドライバ２８および／またはＧＰＵ１２は、ビニングパス中に要求された１つまたは複数のビニングパスごとのタイムスタンプに基づき、レンダリングパスの１つまたは複数の反復中に要求された１つまたは複数のビンごとのタイムスタンプ要求に基づいて、１つまたは複数のタイムスタンプを生成することができる。
【０１６９】
[0169]いくつかの例では、ＧＰＵドライバ２８および／またはＧＰＵ１２は、レンダリングされるグラフィックスフレームのタイムスタンプ値のうちの少なくとも１つが、レンダリングされるグラフィックスフレームのタイムスタンプ値のうちの他の少なくとも１つと異なるように、レンダリングされるグラフィックスフレームに関する複数のタイムスタンプ要求に応答して複数のタイムスタンプ値を生成することができる。さらなる例では、ＧＰＵドライバ２８および／またはＧＰＵ１２は、タイムスタンプ値が、レンダリングされるグラフィックスフレームに関するコマンドストリームの始めからレンダリングされるグラフィックスフレームに関するコマンドストリームの終りまで単調に増加するように、レンダリングされるグラフィックスフレームに関する複数のタイムスタンプ要求に応答して複数のタイムスタンプ値を生成することができる。
【０１７０】
[0170]図７は、本開示に従ってタイルベースのレンダリングを実行するグラフィックス処理システム内でイントラフレームタイムスタンプをサポートする例の技法を示す流れ図である。ＣＰＵ６および／またはＧＰＵ１２は、タイムスタンプ要求を受け取る（７０）。いくつかの例では、タイムスタンプ要求は、ＣＰＵ６上で実行されるグラフィックスアプリケーションから受け取られ得る。ＣＰＵ６および／またはＧＰＵ１２は、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にＧＰＵ１２によって生成される複数のビンごとのタイムスタンプ値に基づいて、時点を示すタイムスタンプ値を生成する（７２）。タイムスタンプ値は、複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数とすることができる。
【０１７１】
[0171]ＣＰＵ６および／またはＧＰＵ１２は、タイムスタンプ値を生成するために、本開示で説明される技法のいずれかを使用することができる。いくつかの例では、ＣＰＵ６および／またはＧＰＵ１２は、式（１）〜（７）のうちの１つまたは複数に基づいてタイムスタンプ値を生成することができる。タイムスタンプ値を生成するのにビンごとのタイムスタンプ値を使用することは、タイルベースのレンダリングを実行するグラフィックス処理システムによってイントラフレームタイムスタンプ要求をサポートすることを可能にすることができる。
【０１７２】
[0172]図８は、本開示に従ってタイルベースのレンダリングを実行するグラフィックス処理システム内でイントラフレームタイムスタンプをサポートする別の例の技法を示す流れ図である。いくつかの例では、図８に示された技法の一部またはすべてが、図７に示された技法の一部またはすべてを実行するのに使用され得る。
【０１７３】
[0173]ＣＰＵ６は、タイムスタンプ要求を受け取る（７４）。いくつかの例では、タイムスタンプ要求は、ＣＰＵ６上で実行されるグラフィックスアプリケーションから受け取られ得る。ＣＰＵ６は、タイムスタンプ要求に基づいて、複数のビンごとのタイムスタンプ要求を生成する（７６）。ＣＰＵ６は、複数のコマンドストリームのうちのそれぞれの１つ内にビンごとのタイムスタンプ要求の各々を配置する（７８）。コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中にＧＰＵ１２によって実行され得る。レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成され得る。
【０１７４】
[0174]ＣＰＵ６は、ＧＰＵ１２にコマンドストリームを実行させる（８０）。ＣＰＵ６および／またはＧＰＵ１２は、コマンドストリーム内に配置されたビンごとのタイムスタンプ要求に応答してＧＰＵ１２によって生成されたビンごとのタイムスタンプ値に基づいてタイムスタンプ値を生成する（８２）。ＣＰＵ６および／またはＧＰＵ１２は、タイムスタンプ値を生成するために本開示で説明される技法のいずれかを使用することができる。いくつかの例では、ＣＰＵ６および／またはＧＰＵ１２は、式（１）〜（７）のうちの１つまたは複数に基づいてタイムスタンプ値を生成することができる。
【０１７５】
[0175]異なるレンダリングパス反復中に生成されるビンごとのタイムスタンプ値を使用することは、グラフィックスフレームのレンダリング中に実行するのに異なる描画呼出しコマンドによって費やされる時間の相対的な長さを少なくともある度合まで反映する、アプリケーションによって要求されたタイムスタンプ値をグラフィックス処理システムが生成することを可能にすることができる。この形で、本開示で説明される技法は、タイルベースのレンダリングシステムが不連続なインターリーブされた形で描画呼出しコマンドを実行する場合であっても、タイルベースのレンダリングシステムがイントラフレームタイムスタンプをサポートすることを可能にすることができる。
【０１７６】
[0176]それ自体は性能ペナルティをこうむらない、正確なイントラフレームタイムスタンプは、タイルベースのレンダリングアーキテクチャ上で入手することがむずかしい可能性がある。これは、ビニングと直接レンダリングとの間で動的に切り替えることができるドライバ上ではさらによりむずかしい。
いくつかの例では、本開示の技法は、ビニングと直接レンダリングとの両方について働くことができる、適度に正確で代表的なイントラフレームタイムスタンプを実施することができる。
【０１７７】
[0177]いくつかの例では、各タイムスタンプ要求は、ビンごとのタイムスタンプに変更され得る。所与のレンダターゲットに関するレンダリングが処理された後に、ビン開始から各ビンのタイムスタンプまでの平均時間が、生成され、タイムスタンプとして使用され得る。これは、直接レンダリングコンポーネントによって作られるものと同等のタイムスタンプを提供することができる。本開示の技法は、タイルベースのレンダリングＧＰＵがイントラフレームタイムスタンプをサポートすることを可能にすることができる。
【０１７８】
[0178]本開示で説明される技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組合せで実施され得る。たとえば、説明される技法の様々な態様は、１つまたは複数のプロマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、または任意の同等の集積回路もしくはディスクリート論理回路網を含む１つまたは複数のプロセッサならびにそのようなコンポーネントの任意の組合せ内で実施され得る。「プロセッサ」または「処理回路網」という用語は、一般に、単独でもしくは他の論理回路網と組み合わされた前述の論理回路網のいずれか、あるいは処理を実行するディスクリートハードウェアなどの任意の他の同等の回路網を指すことができる。
【０１７９】
[0179]そのようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明される様々な動作と機能とをサポートするために、同一のデバイス内または別々のデバイス内で実施され得る。さらに、説明されるユニット、モジュール、またはコンポーネントのいずれもが、一緒にまたは別個ではあるがインターオペラブルな論理デバイスとして別々に実施され得る。モジュールまたはユニットとしての異なる特徴の描写は、異なる機能的態様を強調することを意図されたものであって、必ずしも、そのようなモジュールまたはユニットが別々のハードウェアコンポーネントまたはソフトウェアコンポーネントによって実現されなければならないことを暗示するものではない。そうではなく、１つまたは複数のモジュールまたはユニットに関連する機能性は、別々のハードウェア、ファームウェア、および／もしくはソフトウェアコンポーネントによって実行され、または共通のもしくは別々のハードウェアもしくはソフトウェアコンポーネント内で一体化され得る。
【０１８０】
[0180]本開示で説明される技法は、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体内に記憶され、実施され、または符号化されることも可能である。コンピュータ可読媒体内に組み込まれまたは符号化された命令は、たとえば命令が１つまたは複数のプロセッサによって実行される時に、その１つまたは複数のプロセッサに、本明細書で説明される技法を実行させることができる。いくつかの例では、コンピュータ可読媒体は、非一時的コンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、プログラマブル読取専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読取専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピ（登録商標）ディスク、カセット、磁気媒体、光学媒体、または有形である他のコンピュータ可読記憶媒体を含むことができる。
【０１８１】
[0181]コンピュータ可読媒体は、上でリストされたものなどの有形の記憶媒体に対応するコンピュータ可読記憶媒体を含むことができる。コンピュータ可読媒体は、たとえば通信プロトコルに従う、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を備えることもできる。この形で、「コンピュータ可読媒体」という句は、一般に、（１）非一時的である有形のコンピュータ可読記憶媒体と、（２）過渡的信号または搬送波などの非有形のコンピュータ可読通信媒体とに対応することができる。
【０１８２】
[0182]様々な態様および例が、説明された。しかしながら、下の特許請求の範囲の範囲から逸脱せずに、本開示の構造または教示に対して変更を行うことができる。
【図１】
2016522474.tif 000013
【図２】
2016522474.tif 000014
【図３】
2016522474.tif 000015
【図４】
2016522474.tif 000016
【図５】
2016522474.tif 000017
【図６】
2016522474.tif 000018
【図７】
2016522474.tif 000019
【図８】
2016522474.tif 000020
【手続補正書】
【提出日】平成28年1月8日(2016.1.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサによって、中央処理装置（ＣＰＵ）上で実行するグラフィックスアプリケーションからタイムスタンプ要求を処理することと、
前記１つまたは複数のプロセッサのうちの少なくとも１つによって、前記タイムスタンプ要求に応答して複数のビンごとのタイムスタンプ要求を生成することと、
グラフィックス処理装置（ＧＰＵ）によって、グラフィックスフレームに関するタイムベースのレンダリングを実行している間に発生する複数のレンダリングパス反復中に前記複数のビンごとのタイムスタンプ要求に応答して複数のビンごとのタイムスタンプ値を生成することと、
１つまたは複数のプロセッサのうちの少なくとも１つを用いて、前記複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成することを備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
方法。
【請求項２】
各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングする、請求項１に記載の方法。
【請求項３】
前記複数のビンごとのタイムスタンプ値を生成することは、
前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に第１のビンごとのタイムスタンプ値を生成することと、
前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に第２のビンごとのタイムスタンプ値を生成することと、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なり、前記少なくとも２つのビンごとのタイムスタンプ値は、前記第１および第２のビンごとのタイムスタンプ値を備える、
請求項１に記載の方法。
【請求項４】
前記レンダリングパス反復のうちのそれぞれの１つ中に、および前記レンダリングパス反復のうちの前記それぞれの１つに関する何らかのプリミティブのレンダリングの前に、前記ＧＰＵによって、前記第１または第２のビンごとのタイムスタンプ値とそれぞれ関連する第１または第２の基準タイムスタンプ値を生成することをさらに備える、請求項３に記載の方法。
【請求項５】
前記タイムスタンプ値を生成することは、次式に基づいて前記タイムスタンプ値を生成することを備え、
【数１】
2016522474.tif 000021
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項１に記載の方法。
【請求項６】
前記タイムスタンプ要求が前記グラフィックスフレームについて実行されるコマンドの順序付けられたシーケンス内の少なくとも２つの描画呼出しコマンドの間に位置決めされていることに応答して前記タイムスタンプ値を生成することをさらに備える、請求項１に記載の方法。
【請求項７】
前記ＧＰＵによって、前記グラフィックスフレームに関するタイルベースのレンダリングを実行している間に複数のレンダリングパス反復を実行することをさらに備え、
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第１のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第２のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項６に記載の方法。
【請求項８】
複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに応答して前記複数のビンごとのタイムスタンプ値の各々を生成することと、前記ビンごとのタイムスタンプ要求の各々は、複数のコマンドストリームのうちのそれぞれの１つ内に配置され、
前記ＧＰＵによって、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記コマンドストリームの各々を実行することと、各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングする、
をさらに備える、請求項１に記載の方法。
【請求項９】
前記タイムスタンプ値を生成することは、
前記複数のビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値を生成すること、前記タイムスタンプ値の各々は、前記グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つに対応し、前記タイムスタンプ要求の各々は、前記グラフィックスアプリケーションによって要求される、
を備える、請求項１に記載の方法。
【請求項１０】
前記タイムスタンプ要求のうちの少なくとも２つは、前記グラフィックスフレームについて実行されるコマンドの前記順序付けられた前記順序付けられたシーケンス内で連続する描画呼出しコマンドのそれぞれの対の間に位置決めされ、
前記複数のタイムスタンプ値を生成することは、コマンドの前記順序付けられたシーケンス内の前記タイムスタンプ要求について返される前記タイムスタンプ値が、コマンドの前記順序付けられたシーケンスの始めからコマンドの前記順序付けられたシーケンスの終りまで値において単調に増加するように、前記ビンごとのタイムスタンプ値に基づいて前記複数のタイムスタンプ値を生成することを備える、
請求項９に記載の方法。
【請求項１１】
前記複数のタイムスタンプ値は、前記グラフィックスフレームの前記レンダリング中に実行するのにコマンドの前記順序付けられたシーケンス内の描画呼出しコマンドによって費やされる時間の相対的な長さを示す、請求項９に記載の方法。
【請求項１２】
前記複数のタイムスタンプ値を生成することは、次式に基づいて前記複数のタイムスタンプ値を生成することを備え、
【数２】
2016522474.tif 000022
Ｖａｌｕｅ（ｘ）は、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に対応する、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関して何らかのプリミティブをレンダリングする前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項９に記載の方法。
【請求項１３】
前記タイムスタンプ値を生成することは、
前記ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれの１つ内に配置することと、
前記ＧＰＵによって、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記コマンドストリームの各々を実行することと、各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングする、
前記コマンドストリーム内に配置された前記ビンごとのタイムスタンプ要求に応答して前記ＧＰＵによって生成された前記ビンごとのタイムスタンプ値に基づいて前記タイムスタンプ値を生成することと、
を備える、請求項１に記載の方法。
【請求項１４】
前記１つまたは複数のプロセッサは、前記中央処理装置（ＣＰＵ）を備える、請求項１に記載の方法。
【請求項１５】
前記１つまたは複数のプロセッサは、前記ＧＰＵを備える、請求項１に記載の方法。
【請求項１６】
中央処理装置（ＣＰＵ）上で実行するグラフィックスアプリケーションからタイムスタンプ要求を処理し、前記タイムスタンプ要求に応答して複数のビンごとのタイムスタンプ要求を生成するように構成された１つまたは複数のプロセッサと、
グラフィックスフレームに関するタイムベースのレンダリングを実行している間に発生する複数のレンダリングパス反復中に前記複数のビンごとのタイムスタンプ要求に応答して複数のビンごとのタイムスタンプ値を生成するように構成されたグラフィックス処理装置（ＧＰＵ）と、を備え、
前記１つまたは複数のプロセッサのうちの少なくとも１つは、前記複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するようにさらに構成され、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
デバイス。
【請求項１７】
各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングするように構成される、請求項１６に記載のデバイス。
【請求項１８】
前記タイムスタンプ値を生成するように構成された前記１つまたは複数のプロセッサのうちの少なくとも１つは、
前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に第１のビンごとのタイムスタンプ値を生成することと、
前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に第２のビンごとのタイムスタンプ値を生成することと、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なり、前記少なくとも２つのビンごとのタイムスタンプ値は、前記第１および第２のビンごとのタイムスタンプ値を備える、
請求項１６に記載のデバイス。
【請求項１９】
前記ＧＰＵは、前記レンダリングパス反復のうちのそれぞれの１つ中に、および前記レンダリングパス反復のうちの前記それぞれの１つに関する何らかのプリミティブのレンダリングの前に、前記第１または第２のタイムスタンプ値とそれぞれ関連する第１または第２の基準タイムスタンプ値を生成するようにさらに構成される、請求項１８に記載のデバイス。
【請求項２０】
前記１つまたは複数のプロセッサのうちの少なくとも１つは、次式に基づいて前記タイムスタンプ値を生成するようにさらに構成され、
【数３】
2016522474.tif 000023
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項１６に記載のデバイス。
【請求項２１】
前記１つまたは複数のプロセッサのうちの少なくとも１つは、前記タイムスタンプ要求が前記グラフィックスフレームについて実行されるコマンドの順序付けられたシーケンス内の少なくとも２つの描画呼出しコマンドの間に位置決めされたことに応答して前記タイムスタンプ値を生成するようにさらに構成される、請求項１６に記載のデバイス。
【請求項２２】
前記ＧＰＵは、前記グラフィックスフレームに関するタイルベースのレンダリングを実行している間に複数のレンダリングパス反復を実行するように構成され、
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第１のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第２のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
請求項２１に記載のデバイス。
【請求項２３】
前記１つまたは複数のプロセッサのうちの少なくとも１つは、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに応答して前記複数のビンごとのタイムスタンプ値の各々を生成するように構成され、前記ビンごとのタイムスタンプ要求の各々は、複数のコマンドストリームのうちのそれぞれの１つ内に配置され、前記ＧＰＵは、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記コマンドストリームの各々を実行するように構成され、各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングするように構成される、請求項１６に記載のデバイス。
【請求項２４】
前記１つまたは複数のプロセッサのうちの少なくとも１つは、前記複数のビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値を生成するようにさらに構成され、前記タイムスタンプ値の各々は、前記グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つに対応し、前記タイムスタンプ要求の各々は、前記グラフィックスアプリケーションによって要求される、請求項１６に記載のデバイス。
【請求項２５】
前記タイムスタンプ要求のうちの少なくとも２つは、前記グラフィックスフレームについて実行されるコマンドの前記順序付けられた前記順序付けられたシーケンス内で連続する描画呼出しコマンドのそれぞれの対の間に位置決めされ、
前記１つまたは複数のプロセッサのうちの少なくとも１つは、コマンドの前記順序付けられたシーケンス内の前記タイムスタンプ要求について返される前記タイムスタンプ値が、コマンドの前記順序付けられたシーケンスの始めからコマンドの前記順序付けられたシーケンスの終りまで値において単調に増加するように、前記ビンごとのタイムスタンプ値に基づいて前記複数のタイムスタンプ値を生成するようにさらに構成される、
請求項２４に記載のデバイス。
【請求項２６】
前記複数のタイムスタンプ値は、前記グラフィックスフレームの前記レンダリング中に実行するのにコマンドの前記順序付けられたシーケンス内の描画呼出しコマンドによって費やされる時間の相対的な長さを示す、請求項２４に記載のデバイス。
【請求項２７】
前記１つまたは複数のプロセッサのうちの少なくとも１つは、次式に基づいて前記複数のタイムスタンプ値を生成するようにさらに構成され、
【数４】
2016522474.tif 000024
Ｖａｌｕｅ（ｘ）は、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に対応する、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関して何らかのプリミティブをレンダリングする前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項２４に記載のデバイス。
【請求項２８】
前記１つまたは複数のプロセッサのうちの少なくとも１つは、
前記ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれの１つ内に配置し、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行されるように構成され、各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングするように構成され、
前記ＧＰＵに前記コマンドストリームを実行させ、
前記コマンドストリーム内に配置された前記ビンごとのタイムスタンプ要求に応答して前記ＧＰＵによって生成された前記ビンごとのタイムスタンプ値に基づいて前記タイムスタンプ値を生成する、
ようにさらに構成される、請求項１６に記載のデバイス。
【請求項２９】
前記１つまたは複数のプロセッサは、前記中央処理装置（ＣＰＵ）を備える、請求項１６に記載のデバイス。
【請求項３０】
前記１つまたは複数のプロセッサは、前記ＧＰＵを備える、請求項１６に記載のデバイス。
【請求項３１】
前記デバイスは、ワイヤレス通信デバイスを備える、請求項１６に記載のデバイス。
【請求項３２】
前記デバイスは、携帯電話送受話器を備える、請求項１６に記載のデバイス。
【請求項３３】
中央処理装置（ＣＰＵ）上で実行するグラフィックスアプリケーションからタイムスタンプ要求を処理するための手段と、
前記タイムスタンプ要求に応答して複数のビンごとのタイムスタンプ要求を生成するための手段と、
グラフィックスフレームに関するタイムベースのレンダリングを実行している間に発生する複数のレンダリングパス反復中に前記複数のビンごとのタイムスタンプ要求に応答して複数のビンごとのタイムスタンプ値を生成するための手段と、
前記複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するための手段と、を備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
装置。
【請求項３４】
各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングするように構成される、請求項３３に記載の装置。
【請求項３５】
前記複数のビンごとのタイムスタンプ値を生成するための手段は、
前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に第１のビンごとのタイムスタンプ値を生成するための手段と、
前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に第２のビンごとのタイムスタンプ値を生成するための手段と、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なり、前記少なくとも２つのビンごとのタイムスタンプ値は、前記第１および第２のビンごとのタイムスタンプ値を備える、
を備える、請求項３３に記載の装置。
【請求項３６】
前記タイムスタンプ値を生成するための前記手段は、次式に基づいて前記タイムスタンプ値を生成するための手段を備え、
【数５】
2016522474.tif 000025
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項３３に記載の装置。
【請求項３７】
前記タイムスタンプ値を生成するための前記手段は、前記中央処理装置（ＣＰＵ）とＧＰＵ（グラフィックス処理装置）とのうちの少なくとも１つを備える、請求項３３に記載の装置。
【請求項３８】
１つまたは複数のプロセッサによって実行された時に、前記１つまたは複数のプロセッサのうちの少なくとも１つに、
中央処理装置（ＣＰＵ）上で実行するグラフィックスアプリケーションからタイムスタンプ要求を処理させ、
前記タイムスタンプ要求に応答して複数のビンごとのタイムスタンプ要求を生成させ、
グラフィックスフレームに関するタイムベースのレンダリングを実行している間に発生する複数のレンダリングパス反復中に前記複数のビンごとのタイムスタンプ要求に応答して複数のビンごとのタイムスタンプ値を生成させ、
前記複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成させる、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
命令を備える非一時的コンピュータ可読記憶媒体。
【請求項３９】
各レンダリングパス反復は、レンダターゲットの複数の副領域のうちの１つをレンダリングするように構成される、請求項３８に記載の非一時的コンピュータ可読記憶媒体。
【請求項４０】
前記１つまたは複数のプロセッサのうちの少なくとも１つに前記タイムスタンプ値を生成させる前記命令は、前記１つまたは複数のプロセッサのうちの少なくとも１つに、
前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に第１のビンごとのタイムスタンプ値を生成させ、
前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に第２のビンごとのタイムスタンプ値を生成させる、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なり、前記少なくとも２つのビンごとのタイムスタンプ値は、前記第１および第２のビンごとのタイムスタンプ値を備える、
請求項３８に記載の非一時的コンピュータ可読記憶媒体。
【請求項４１】
前記１つまたは複数のプロセッサのうちの少なくとも１つに前記タイムスタンプ値を生成させる前記命令は、前記１つまたは複数のプロセッサのうちの少なくとも１つに次式に基づいて前記タイムスタンプ値を生成させる命令を備え、
【数６】
2016522474.tif 000026
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、請求項３８に記載の非一時的コンピュータ可読記憶媒体。
【請求項４２】
前記１つまたは複数のプロセッサは、前記中央処理装置（ＣＰＵ）とグラフィック処理装置（ＧＰＵ）とのうちの少なくとも１つを備える、請求項３８に記載の非一時的コンピュータ可読記憶媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１８２
【補正方法】変更
【補正の内容】
【０１８２】
[0182]様々な態様および例が、説明された。しかしながら、下の特許請求の範囲の範囲から逸脱せずに、本開示の構造または教示に対して変更を行うことができる。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］  １つまたは複数のプロセッサを用いて、グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成することを備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
方法。
［Ｃ２］  前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、Ｃ１に記載の方法。
［Ｃ３］  前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
Ｃ２に記載の方法。
［Ｃ４］  前記少なくとも２つのビンごとのタイムスタンプ値は、少なくとも２つの基準タイムスタンプ値をさらに備え、前記少なくとも２つの基準タイムスタンプ値の各々は、前記レンダリングパス反復のうちのそれぞれの１つ中に、前記レンダリングパス反復のうちの前記それぞれの１つに関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される、Ｃ３に記載の方法。
［Ｃ５］  前記タイムスタンプ値を生成することは、次式に基づいて前記タイムスタンプ値を生成することを備え、
【数４】
2016522474.tif 000027
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、Ｃ２に記載の方法。
［Ｃ６］  前記タイムスタンプ値を生成することは、前記グラフィックスフレームについて実行されるコマンドの順序付けられたシーケンス内の少なくとも２つの描画呼出しコマンドの間に位置決めされたタイムスタンプ要求に応答して前記タイムスタンプ値を生成することを備える、Ｃ１に記載の方法。
［Ｃ７］  前記ＧＰＵは、前記グラフィックスフレームに関するタイルベースのレンダリングを実行している間に複数のレンダリングパス反復を実行し、
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第１のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第２のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
Ｃ６に記載の方法。
［Ｃ８］  前記複数のビンごとのタイムスタンプ値の各々は、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに応答して生成され、前記ビンごとのタイムスタンプ要求の各々は、複数のコマンドストリームのうちのそれぞれの１つ内に配置され、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、Ｃ１に記載の方法。
［Ｃ９］  前記タイムスタンプ値を生成することは、
前記複数のビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値を生成すること、前記タイムスタンプ値の各々は、前記グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つに対応し、前記タイムスタンプ要求の各々は、グラフィックスアプリケーションによって要求される、
を備える、Ｃ１に記載の方法。
［Ｃ１０］  前記タイムスタンプ要求のうちの少なくとも２つは、前記グラフィックスフレームについて実行されるコマンドの前記順序付けられた前記順序付けられたシーケンス内で連続する描画呼出しコマンドのそれぞれの対の間に位置決めされ、
前記複数のタイムスタンプ値を生成することは、コマンドの前記順序付けられたシーケンス内の前記タイムスタンプ要求について返される前記タイムスタンプ値が、コマンドの前記順序付けられたシーケンスの始めからコマンドの前記順序付けられたシーケンスの終りまで値において単調に増加するように、前記ビンごとのタイムスタンプ値に基づいて前記複数のタイムスタンプ値を生成することを備える、
Ｃ９に記載の方法。
［Ｃ１１］  前記複数のタイムスタンプ値は、前記グラフィックスフレームの前記レンダリング中に実行するのにコマンドの前記順序付けられたシーケンス内の描画呼出しコマンドによって費やされる時間の相対的な長さを示す、Ｃ９に記載の方法。
［Ｃ１２］  前記複数のタイムスタンプ値を生成することは、次式に基づいて前記複数のタイムスタンプ値を生成することを備え、
【数５】
2016522474.tif 000028
Ｖａｌｕｅ（ｘ）は、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に対応する、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関して何らかのプリミティブをレンダリングする前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、Ｃ９に記載の方法。
［Ｃ１３］  前記タイムスタンプ値を生成することは、
グラフィックスアプリケーションからタイムスタンプ要求を受け取ることと、
前記タイムスタンプ要求に基づいて複数のビンごとのタイムスタンプ要求を生成することと、
前記ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれの１つ内に配置することと、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成され、
前記ＧＰＵに前記コマンドストリームを実行させることと、
前記コマンドストリーム内に配置された前記ビンごとのタイムスタンプ要求に応答して前記ＧＰＵによって生成された前記ビンごとのタイムスタンプ値に基づいて前記タイムスタンプ値を生成することと、
を備える、Ｃ１に記載の方法。
［Ｃ１４］  前記１つまたは複数のプロセッサは、中央処理装置（ＣＰＵ）を備える、Ｃ１に記載の方法。
［Ｃ１５］  前記１つまたは複数のプロセッサは、前記ＧＰＵを備える、Ｃ１に記載の方法。
［Ｃ１６］  グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するように構成された１つまたは複数のプロセッサを備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
デバイス。
［Ｃ１７］  前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、Ｃ１６に記載のデバイス。
［Ｃ１８］  前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
Ｃ１７に記載のデバイス。
［Ｃ１９］  前記少なくとも２つのビンごとのタイムスタンプ値は、少なくとも２つの基準タイムスタンプ値をさらに備え、前記少なくとも２つの基準タイムスタンプ値の各々は、前記レンダリングパス反復のうちのそれぞれの１つ中に、前記レンダリングパス反復のうちの前記それぞれの１つに関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される、Ｃ１８に記載のデバイス。
［Ｃ２０］  前記１つまたは複数のプロセッサは、次式に基づいて前記タイムスタンプ値を生成するようにさらに構成され、
【数６】
2016522474.tif 000029
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、Ｃ１７に記載のデバイス。
［Ｃ２１］  前記１つまたは複数のプロセッサは、前記グラフィックスフレームについて実行されるコマンドの順序付けられたシーケンス内の少なくとも２つの描画呼出しコマンドの間に位置決めされたタイムスタンプ要求に応答して前記タイムスタンプ値を生成するようにさらに構成される、Ｃ１６に記載のデバイス。
［Ｃ２２］  前記ＧＰＵは、前記グラフィックスフレームに関するタイルベースのレンダリングを実行している間に複数のレンダリングパス反復を実行し、
前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第１のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に実行される少なくとも２つのビンごとの描画呼出しの実行の間に発生する時点を示し、前記第２のレンダリングパス反復中に実行される前記少なくとも２つのビンごとの描画呼出しの各々は、前記少なくとも２つの描画呼出しコマンドのうちのそれぞれの１つに関連し、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
Ｃ２１に記載のデバイス。
［Ｃ２３］  前記複数のビンごとのタイムスタンプ値の各々は、複数のビンごとのタイムスタンプ要求のうちのそれぞれの１つに応答して生成され、前記ビンごとのタイムスタンプ要求の各々は、複数のコマンドストリームのうちのそれぞれの１つ内に配置され、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、Ｃ１６に記載のデバイス。
［Ｃ２４］  前記１つまたは複数のプロセッサは、前記複数のビンごとのタイムスタンプ値に基づいて複数のタイムスタンプ値を生成するようにさらに構成され、前記タイムスタンプ値の各々は、前記グラフィックスフレームに関して実行されるコマンドの順序付けられたシーケンス内に含まれる複数のタイムスタンプ要求のうちのそれぞれの１つに対応し、前記タイムスタンプ要求の各々は、グラフィックスアプリケーションによって要求される、Ｃ１６に記載のデバイス。
［Ｃ２５］  前記タイムスタンプ要求のうちの少なくとも２つは、前記グラフィックスフレームについて実行されるコマンドの前記順序付けられた前記順序付けられたシーケンス内で連続する描画呼出しコマンドのそれぞれの対の間に位置決めされ、
前記１つまたは複数のプロセッサは、コマンドの前記順序付けられたシーケンス内の前記タイムスタンプ要求について返される前記タイムスタンプ値が、コマンドの前記順序付けられたシーケンスの始めからコマンドの前記順序付けられたシーケンスの終りまで値において単調に増加するように、前記ビンごとのタイムスタンプ値に基づいて前記複数のタイムスタンプ値を生成するようにさらに構成される、
Ｃ２４に記載のデバイス。
［Ｃ２６］  前記複数のタイムスタンプ値は、前記グラフィックスフレームの前記レンダリング中に実行するのにコマンドの前記順序付けられたシーケンス内の描画呼出しコマンドによって費やされる時間の相対的な長さを示す、Ｃ２４に記載のデバイス。
［Ｃ２７］  前記１つまたは複数のプロセッサは、次式に基づいて前記複数のタイムスタンプ値を生成するようにさらに構成され、
【数７】
2016522474.tif 000030
Ｖａｌｕｅ（ｘ）は、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に応答して生成されるタイムスタンプのタイムスタンプ値であり、ＴＳＶ（ｘ，ｙ）は、第ｙのレンダリングパス反復中に生成され、コマンドの前記順序付けられたシーケンス内の第ｘのタイムスタンプ要求に対応する、ビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関して何らかのプリミティブをレンダリングする前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、Ｃ２４に記載のデバイス。
［Ｃ２８］  前記１つまたは複数のプロセッサは、
グラフィックスアプリケーションからタイムスタンプ要求を受け取り、
前記タイムスタンプ要求に基づいて複数のビンごとのタイムスタンプ要求を生成し、
前記ビンごとのタイムスタンプ要求の各々を複数のコマンドストリームのうちのそれぞれの１つ内に配置し、前記コマンドストリームの各々は、タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって実行され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成され、
前記ＧＰＵに前記コマンドストリームを実行させ、
前記コマンドストリーム内に配置された前記ビンごとのタイムスタンプ要求に応答して前記ＧＰＵによって生成された前記ビンごとのタイムスタンプ値に基づいて前記タイムスタンプ値を生成する、
ようにさらに構成される、Ｃ１６に記載のデバイス。
［Ｃ２９］  前記１つまたは複数のプロセッサは、中央処理装置（ＣＰＵ）を備える、Ｃ１６に記載のデバイス。
［Ｃ３０］  前記１つまたは複数のプロセッサは、前記ＧＰＵを備える、Ｃ１６に記載のデバイス。
［Ｃ３１］  前記デバイスは、ワイヤレス通信デバイスを備える、Ｃ１６に記載のデバイス。
［Ｃ３２］  前記デバイスは、携帯電話送受話器を備える、Ｃ１６に記載のデバイス。
［Ｃ３３］  グラフィックス処理ユニット（ＧＰＵ）と、
グラフィックスフレームに関するタイルベースのレンダリングを実行している間に前記ＧＰＵによって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成するための手段と、を備え、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
装置。
［Ｃ３４］  前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、Ｃ３３に記載の装置。
［Ｃ３５］  前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
Ｃ３４に記載の装置。
［Ｃ３６］  前記タイムスタンプ値を生成するための前記手段は、次式に基づいて前記タイムスタンプ値を生成するための手段を備え、
【数８】
2016522474.tif 000031
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、Ｃ３４に記載の装置。
［Ｃ３７］  前記タイムスタンプ値を生成するための前記手段は、中央処理装置（ＣＰＵ）と前記ＧＰＵとのうちの少なくとも１つを備える、Ｃ３３に記載の装置。
［Ｃ３８］  １つまたは複数のプロセッサによって実行された時に、前記１つまたは複数のプロセッサに、
グラフィックスフレームに関するタイルベースのレンダリングを実行している間にグラフィックス処理ユニット（ＧＰＵ）によって生成される複数のビンごとのタイムスタンプ値に基づいて時点を示すタイムスタンプ値を生成させる、前記タイムスタンプ値は、前記複数のビンごとのタイムスタンプ値のうちの少なくとも２つのビンごとのタイムスタンプ値の関数である、
命令を備える非一時的コンピュータ可読記憶媒体。
［Ｃ３９］  前記複数のビンごとのタイムスタンプ値の各々は、前記タイルベースのレンダリングを実行している間に発生する複数のレンダリングパス反復のうちのそれぞれの１つ中に前記ＧＰＵによって生成され、前記レンダリングパス反復の各々は、レンダターゲットの複数の副領域のうちのそれぞれの１つをレンダリングするように構成される、Ｃ３８に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ４０］  前記少なくとも２つのビンごとのタイムスタンプ値は、第１のビンごとのタイムスタンプ値と第２のビンごとのタイムスタンプ値とを備え、
前記第１のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第１のレンダリングパス反復中に前記ＧＰＵによって生成され、
前記第２のビンごとのタイムスタンプ値は、前記複数のレンダリングパス反復のうちの第２のレンダリングパス反復中に前記ＧＰＵによって生成され、前記第２のレンダリングパス反復は、前記第１のレンダリングパス反復とは異なる、
Ｃ３９に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ４１］  前記１つまたは複数のプロセッサに前記タイムスタンプ値を生成させる前記命令は、前記１つまたは複数のプロセッサに次式に基づいて前記タイムスタンプ値を生成させる命令を備え、
【数９】
2016522474.tif 000032
Ｖａｌｕｅは、前記タイムスタンプ値であり、ＴＳＶ（ｙ）は、第ｙのレンダリングパス反復中に生成されるビンごとのタイムスタンプ値であり、ＴＳＶＧＰＵ（ｙ）は、前記第ｙのレンダリングパス反復に関する何らかのプリミティブのレンダリングの前に前記ＧＰＵによって生成される基準タイムスタンプ値であり、Ｎは、前記グラフィックスフレームをレンダリングするのに使用されるレンダリングパス反復の回数である、Ｃ３９に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ４２］  前記１つまたは複数のプロセッサは、中央処理装置（ＣＰＵ）と前記ＧＰＵとのうちの少なくとも１つを備える、Ｃ３８に記載の非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2016522474.tif 000033
2016522474.tif 000034
2016522474.tif 000035