Dela via


HLSL Shader Model 6.0

Beskriver den inbyggda vågåtgärden i HLSL Shader Model 6.0.

Skuggningsmodell 6.0

För tidigare skuggningsmodeller exponerar HLSL-programmering endast en enda körningstråd. Nya åtgärder på vågnivå tillhandahålls, från och med modell 6.0, för att uttryckligen dra nytta av parallelliteten hos aktuella GPU:er – många trådar kan köras i låssteg på samma kärna samtidigt. Modell 6.0 gör det till exempel möjligt att eliminera barriärkonstruktioner när synkroniseringsomfånget ligger inom SIMD-processorns bredd eller någon annan uppsättning trådar som är kända för att vara atomiska i förhållande till varandra.

Potentiella användningsfall är: strömkomprimering, minskningar, blocktransponering, bitonic sort eller Fast Fourier Transforms (FFT), binning, stream de-duplication och liknande scenarier.

De flesta inbyggda objekt visas i pixelskuggare och beräkningsskuggor, även om det finns vissa undantag (antecknade för varje funktion). Funktionerna har lagts till i kraven för DirectX-funktionsnivå 12.0 under API-nivå 12.

Den <typen> parametern och returvärdet för dessa funktioner innebär typen av uttryck, de typer som stöds är de från följande lista som också finns i målskuggningsmodellen för din app:

  • halv, halv2, halv3, halv4
  • float, float2, float3, float4
  • double, double2, double3, double4
  • int, int2, int3, int4
  • uint, uint2, uint3, uint4
  • short, short2, short3, short4
  • ushort, ushort2, ushort3, ushort4
  • uint64_t, uint64_t2, uint64_t3, uint64_t4

Vissa åtgärder (till exempel bitvisoperatorer) stöder bara heltalstyperna.

Terminologi

Term Definition
Körfält En enda körningstråd. Skuggningsmodellerna före version 6.0 exponerar bara en av dessa på språknivå, vilket gör att expansionen till parallell SIMD-bearbetning helt och hållet är upp till implementeringen.
Våg En uppsättning körfält (trådar) körs samtidigt i processorn. Inga uttryckliga hinder krävs för att garantera att de körs parallellt. Liknande begrepp är "warp" och "wavefront".
Inaktivt körfält Ett körfält som inte körs, till exempel på grund av kontrollflödet, eller otillräckligt arbete för att fylla vågens minsta storlek.
Active Lane Ett körfält för vilket körningen utförs. I pixelskuggare kan det innehålla eventuella pixelfält för hjälpen.
Quad En uppsättning med 4 intilliggande körfält som motsvarar bildpunkter ordnade på en 2x2 kvadrat. De används för att uppskatta toningar genom differentiering i antingen x eller y. En våg kan bestå av flera fyrhjulingar. Alla bildpunkter i en aktiv quad körs (och kan vara "Active Lanes"), men de som inte ger synliga resultat kallas "Helper Lanes".
Hjälpfil Ett körfält som körs enbart för toningar i pixelskuggningskvadlar. Utdata från ett sådant körfält tas bort och återges därför inte till målytan.

Inbyggda skuggningsspråk

Alla åtgärder i den här skuggningsmodellen har lagts till i en rad inbyggda funktioner.

Vågfråga

De inbyggda funktionerna för att köra frågor mot en enda våg.

inbyggda Beskrivning Pixel shader Compute Shader
WaveGetLaneCount Returnerar antalet körfält i den aktuella vågen. * *
WaveGetLaneIndex Returnerar indexet för det aktuella körfältet i den aktuella vågen. * *
WaveIsFirstLane Returnerar endast sant för det aktiva körfältet i den aktuella vågen med det minsta indexet * *

Vågröstning

Den här uppsättningen inbyggda värden jämför värden mellan trådar som för närvarande är aktiva från den aktuella vågen.

inbyggda Beskrivning Pixel shader Compute Shader
WaveActiveAnyTrue Returnerar sant om uttrycket är sant i ett aktivt körfält i den aktuella vågen. * *
WaveActiveAllTrue Returnerar sant om uttrycket är sant i alla aktiva körfält i den aktuella vågen. * *
WaveActiveBallot Returnerar en 64-bitars osignerad heltalsbitmask av utvärderingen av det booleska uttrycket för alla aktiva banor i den angivna vågen. * *

Wave Broadcast

Dessa inbyggda gör det möjligt för alla aktiva körfält i den aktuella vågen att ta emot värdet från det angivna körfältet, vilket effektivt sänder det. Returvärdet från ett ogiltigt körfält är odefinierat.

inbyggda Beskrivning Pixel shader Compute Shader
WaveReadLaneAt Returnerar värdet för uttrycket för det angivna filindexet inom den angivna vågen. * *
WaveReadLaneFirst Returnerar värdet för uttrycket för det aktiva körfältet för den aktuella vågen med det minsta indexet. * *

Vågreduktion

Dessa inbyggda faktorer beräknar den angivna åtgärden över alla aktiva körfält i vågen och sänder slutresultatet till alla aktiva körfält. Därför garanteras de slutliga utdata som är enhetliga över vågen.

inbyggda Beskrivning Pixel shader Compute Shader
WaveActiveAllEqual Returnerar sant om uttrycket är detsamma för varje aktivt körfält i den aktuella vågen (och därmed enhetligt över den). * *
WaveActiveBitAnd Returnerar bitvis OCH för alla värden i uttrycket över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla banor i vågen. * *
WaveActiveBitOr Returnerar bitvis ELLER för alla värden i uttrycket över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla körfält i vågen. * *
WaveActiveBitXor Returnerar bitvis exklusivt ELLER för alla värden i uttrycket över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla körfält i vågen. * *
WaveActiveCountBits Räknar antalet booleska variabler som utvärderas till sant över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla körfält i vågen. * *
WaveActiveMax Beräknar det maximala värdet för uttrycket över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla körfält i vågen. * *
WaveActiveMin Beräknar det minsta värdet för uttrycket över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla banor i vågen. * *
WaveActiveProduct Multiplicerar uttryckets värden tillsammans över alla aktiva körfält i den aktuella vågen och replikerar resultatet till alla banor i vågen. * *
WaveActiveSum Summerar uttryckets värde över alla aktiva körfält i den aktuella vågen och replikerar det till alla körfält i den aktuella vågen och replikerar resultatet till alla körfält i vågen. * *

Våggenomsökning och prefix

Dessa inbyggda egenskaper tillämpar åtgärden på varje körfält och lämnar varje partiellt resultat av beräkningen i motsvarande körfält.

inbyggda Beskrivning Pixel shader Compute Shader
WavePrefixCountBits Returnerar summan av alla angivna booleska variabler som angetts till true för alla aktiva körfält med index som är mindre än det aktuella körfältet. * *
WavePrefixSum Returnerar summan av alla värden i de aktiva körfälten med mindre index än den här. * *
WavePrefixProduct Returnerar produkten av alla värden i körfälten före den angivna vågen. * *

Quad-wide Shuffle-åtgärder

Dessa inbyggda funktioner utför växlingsåtgärder på värdena över en våg som är känd för att innehålla pixelskuggningskvadlar enligt definitionen här. Indexen för bildpunkterna i quad definieras i genomsökningsraden eller läsordningen – där koordinaterna inom en quad är:

+---------> X

| [0] [1]

| [2] [3]

v

Y

Dessa rutiner fungerar antingen i beräkningsskuggare eller pixelskuggare. I beräkningsskuggor fungerar de i quads som definieras som jämnt fördelade grupper på 4 i en SIMD-våg. I pixelskuggor bör de användas på vågor som fångas av WaveQuadLanes, annars är resultaten odefinierade.

inbyggda Beskrivning Pixel shader Compute Shader
QuadReadLaneAt Returnerar det angivna källvärdet som lästs från körfältet för den aktuella fyrhjulingen som identifieras av quadLaneID [0..3] som måste vara enhetligt över fyrhjulingen. *
QuadReadAcrossDiagonal Returnerar det angivna lokala värdet som läss från det diagonalt motsatta körfältet i den här fyrhjulingen. *
QuadReadAcrossX Returnerar det angivna källvärdet som lästs från det andra körfältet i den här fyrhjulingen i X-riktningen. *
QuadReadAcrossY Returnerar det angivna källvärdet som lästs från det andra körfältet i den här fyrhjulingen i Y-riktningen. *

Maskinvarukapacitet

För att kontrollera att vågåtgärdsfunktionerna är tillgängliga på någon specifik maskinvara anropar du ID3D12Enhet::CheckFeatureSupportoch anger beskrivningen och användningen av D3D12_FEATURE_DATA_D3D12_OPTIONS1 struktur.