WavePrefixCountBits-Funktion

Gibt die Summe aller angegebenen booleschen Variablen zurück, die für alle aktiven Lanes auf TRUE festgelegt sind, wobei indizes kleiner als die aktuelle Lane sind.

Syntax

uint WavePrefixCountBits(
   bool bBit
);

Parameter

bBit

Die angegebenen booleschen Variablen.

Rückgabewert

Die Summe aller angegebenen booleschen Variablen, die für alle aktiven Lanes mit Indizes kleiner als die aktuelle Lane auf TRUE festgelegt sind.

Hinweise

Diese Funktion wird vom Shadermodell 6.0 in allen Shaderstufen unterstützt.

Beispiele

Der folgende Code beschreibt, wie ein komprimierter Schreibvorgang in einen geordneten Stream implementiert wird, bei dem die Anzahl der pro Lane geschriebenen Elemente entweder 1 oder 0 beträgt.

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

Siehe auch

Übersicht über Shadermodell 6

Shadermodell 6