WavePrefixCountBits-Funktion
Gibt die Summe aller angegebenen booleschen Variablen zurück, die für alle aktiven Lanes mit Indizes, die kleiner als die aktuelle Lane sind, auf TRUE festgelegt sind.
Syntax
uint WavePrefixCountBits(
bool bBit
);
Parameter
-
bBit
-
Die angegebenen booleschen Variablen.
Rückgabewert
Die Summe aller angegebenen booleschen Variablen, die über alle aktiven Lanes mit Indizes, die kleiner als die aktuelle Lane sind, auf true festgelegt sind.
Bemerkungen
Diese Funktion wird vom Shadermodell 6.0 in allen Shaderphasen unterstützt.
Beispiele
Der folgende Code beschreibt, wie sie einen komprimierten Schreibvorgang in einen geordneten Stream implementieren, 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