ユーザ用ツール

サイト用ツール


d3d:d3d12:query

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
d3d:d3d12:query [2015/09/09 23:03] – 作成 ogad3d:d3d12:query [2015/09/10 03:27] (現在) – [同期] oga
行 81: 行 81:
  
 <code cpp> <code cpp>
-unsigned int  start= QUERY_COUNT * sizeof(UI64) * Offset;+unsigned int  start= (QUERY_COUNT * sizeof(UI64)) * ReadOffset;
 D3D12_RANGE range{ start, start + QUERY_COUNT * sizeof(UI64) }; D3D12_RANGE range{ start, start + QUERY_COUNT * sizeof(UI64) };
 void* ptr= nullptr; void* ptr= nullptr;
行 90: 行 90:
 </code> </code>
  
-==== 注意点 ====+==== 同期 ====
  
-最近の GPU は他の描画とオーバーラップ実行されることが多く、必ずしも Command 実行時の TimeStamp が正確な描画にかかった GPU 時間を計測しているとは限りません。単なる Command 発行間隔の計測になっている可能性があります。バッファが多ければ極端に短い結果を返す可能性があります。+最近の GPU は他の描画とオーバーラップ実行されることが多く、必ずしも Command 実行時の TimeStamp が描画にかかった GPU 時間を計測しているとは限りません。単なる Command 発行間隔の計測になっている可能性があります。バッファが多ければ極端に短い結果を返す可能性があります。完了を待つには Fence が必要になるかもしれません。主に RADEON で差が出るようです。
  
 +Fence の作成
  
 +<code cpp>
 +ID3D12Fence* iFence= nullptr;
 +iD3D12Device->CreateFence( 0, 0, IID_PPV_ARGS(&iFence) );
 +UI64 FenceCount= 0;
 +</code>
  
  
 +Fence の挿入
 +
 +<code cpp>
 +iCommand->EndQuery( iQuery, D3D12_QUERY_TYPE_TIMESTAMP, Offset + 0 );
 +
 +~ Draw
 +
 +iCommand->Close();
 +{
 +  ID3D12CommandList* list[]= { iCommand };
 +  iCommandQueue->ExecuteCommandLists( 1, list );
 +}
 +
 +iCommandQueue->Signal( iFence, FenceCount );
 +iCommandQueue->Wait( iFence, FenceCount );
 +FenceCount++;
 +
 +iCommand2->EndQuery( iQueue, D3D12_QUERY_TYPE_TIMESTAMP, Offset + 1 );
 +iCommand2->Close();
 +{
 +  ID3D12CommandList* list[]= { iCommand2 };
 +  iCommandQueue->ExecuteCommandLists( 1, list );
 +}
 +</code>
  
  
d3d/d3d12/query.1441807386.txt.gz · 最終更新: 2015/09/09 23:03 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki