Freigeben über


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

Übersicht über Shadermodell 6

Shadermodell 6