次の方法で共有


WavePrefixCountBits 関数

現在のレーンより小さいインデックスを持つすべてのアクティブなレーンで true に設定されたすべてのブール変数の合計を返します。

構文

uint WavePrefixCountBits(
   bool bBit
);

パラメーター

bBit

指定されたブール変数。

戻り値

現在のレーンより小さいインデックスを持つすべてのアクティブなレーンで、指定されたすべてのブール変数の合計が true に設定されます。

注釈

この関数は、すべてのシェーダー ステージでシェーダー モデル 6.0 からサポートされています。

 

次のコードでは、レーンごとに書き込まれる要素の数が 1 または 0 である順序付きストリームへの圧縮された書き込みを実装する方法について説明します。

bool bDoesThisLaneHaveAnAppendItem = <expr>;
// compute number of items to append for the whole wave
uint laneAppendOffset = WavePrefixCountBits( bDoesThisLaneHaveAnAppendItem );
uint appendCount = WaveActiveCountBits( bDoesThisLaneHaveAnAppendItem);
// update the output location for this whole wave
uint appendOffset;
if ( WaveIsFirstLane () )
{
    // this way, we only issue one atomic for the entire wave, which reduces contention
    // and keeps the output data for each lane in this wave together in the output buffer
    InterlockedAdd(bufferSize, appendCount, appendOffset);
}
appendOffset = WaveReadLaneFirst( appendOffset ); // broadcast value
appendOffset += laneAppendOffset; // and add in the offset for this lane
buffer[appendOffset] = myData; // write to the offset location for this lane

こちらもご覧ください

シェーダー モデル 6 の概要

シェーダー モデル 6