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