ID3DX11ThreadPump インターフェイス

スレッド ポンプはタスクを非同期的に実行します。スレッド ポンプを作成するには、D3DX11CreateThreadPump を呼び出します。D3DX11CreateTextureFromFileD3DX11CompileFromFile などのいくつかの API は、オプションのスレッド ポンプをパラメーターとして取ります。これらの API にスレッド ポンプ インターフェイスを渡すと、個別スレッドで非同期的に関数が実行されます。特にマルチプロセッサ コンピューターでは、パフォーマンスの顕著な低下を発生させることなく、スレッド ポンプによりリソースの読み込みとデータの処理を実行できます。

メソッド 説明
ID3DX11ThreadPump::AddWorkItem 作業項目をスレッド ポンプに追加します。
ID3DX11ThreadPump::GetQueueStatus スレッド ポンプ内の 3 つのキューそれぞれに入っている項目の数を取得します。
ID3DX11ThreadPump::GetWorkItemCount 現在、スレッド ポンプ内にある作業項目の数を取得します。
ID3DX11ThreadPump::ProcessDeviceWorkItems 作業項目が読み込みと処理を終了した後、作業項目をデバイスに設定します。
ID3DX11ThreadPump::PurgeAllItems すべての作業項目をスレッド ポンプからクリアします。
ID3DX11ThreadPump::WaitForAllItems スレッド ポンプ内のすべての作業項目が終了するまで待機します。

スレッド ポンプの使用

スレッド ポンプは、3 つのステップから成るプロセスでデータの読み込みと処理を行います。動作は次のとおりです。

  1. データ ローダーを使用して、データの読み込みと解凍を行います。データ ローダー オブジェクトには 3 つのメソッドがあり、スレッド ポンプはデータの読み込みおよび解凍時にこれらのメソッドを内部で呼び出します。それらのメソッドは、ID3DX11DataLoader::LoadID3DX11DataLoader::Decompress、および ID3DX11DataLoader::Destroy です。この 3 つの API の機能は、読み込みおよび解凍が行われるデータの種類によって異なります。また、データ ローダー インターフェイスを継承でき、API のいずれかが独自のカスタム フォーマットで定義されたデータ ファイルを読み込む場合にその API を変更することができます。
  2. データ プロセッサを使用して、データを処理します。データ プロセッサ オブジェクトには 3 つのメソッドがあり、スレッド ポンプはデータの処理時にこれらのメソッドを内部で呼び出します。それらのメソッドは、ID3DX11DataProcessor::ProcessID3DX11DataProcessor::CreateDeviceObject、および ID3DX11DataProcessor::Destroy です。データの処理方法は、データの種類によって異なります。たとえば、データが JPEG として保存されているテクスチャーの場合、ID3DX11DataProcessor::Process は JPEG 解凍を実行してイメージの Raw イメージ ビットを取得します。データがシェーダーの場合、ID3DX11DataProcessor::Process は HLSL をバイトコードにコンパイルします。データが処理されたら、(ID3DX11DataProcessor::CreateDeviceObject を使用して) そのデータについてデバイス オブジェクトが作成され、このオブジェクトがデバイス オブジェクトのキューに追加されます。また、データ プロセッサ インターフェイスを継承でき、API のいずれかが独自のカスタム フォーマットで定義されたデータ ファイルを処理する場合にその API を変更することができます。
  3. デバイス オブジェクトをデバイスにバインドします。これは、アプリケーションが ID3DX11ThreadPump::ProcessDeviceWorkItems を呼び出したときに実行されます。デバイス オブジェクトのキュー内の指定された数のオブジェクトがデバイスにバインドされます。

スレッド ポンプを使用して、次の 2 つの方法のいずれかでデータを読み込むことができます。D3DX11CreateTextureFromFileD3DX11CompileFromFile など、スレッド ポンプをパラメーターとして受け取る API を呼び出す方法と、ID3DX11ThreadPump::AddWorkItem を呼び出す方法です。スレッド ポンプを受け取る API の場合、データ ローダーとデータ プロセッサは内部で作成されます。AddWorkItem の場合は、データ ローダーとデータ プロセッサを事前に作成しておく必要があり、その後で AddWorkItem に渡されます。D3DX11 は、共通データ フォーマットの読み込みおよび処理機能を持つデータ ローダーおよびデータ プロセッサを作成するための API セットを備えています。カスタム データ フォーマットの場合は、データ ローダーとデータ プロセッサのインターフェイスを継承し、それらのメソッドを再定義する必要があります。

スレッド ポンプ オブジェクトはかなりの量のリソースを必要とするため、通常は、アプリケーションごとに 1 つだけ作成してください。

関連項目

D3DX インターフェイス