Predikáció
A predikáció egy olyan funkció, amely lehetővé teszi, hogy a GPU ne a CPU határozza meg, hogy ne rajzoljon, másoljon vagy küldjön el objektumot.
Áttekintés
A predikáció tipikus használata az elzáródás; ha egy határolókeret van rajzolva, és el van takarva, nyilvánvalóan nincs értelme magát az objektumot rajzolni. Ebben az esetben az objektum rajza "predikálható", ami lehetővé teszi a GPU tényleges rendereléséből való eltávolítását.
Ez elsőre redundánsnak tűnhet a standard mélységi teszt és a korai mélységi átlépés felett. A predikáció azonban képes eltávolítani magát a rajzparancsállapot többletterhelését, valamint a raszterizálást. Míg a korai mélységi átengedés eltávolítja a szükségtelen képpontokat, továbbra is végrehajthatja a csúcsokat, a burkolatot, a tartományt és a geometria-árnyékolókat, és meghívhatja a rögzített funkciójú bemeneti szerelvényeket, a tesselatort és a raszterizátort. Ha egy egyszerű határolókeretet vagy hasonló határoló kötetet rajzol – amely a valós modellnél egyszerűbben feldolgozható és raszterizálható –, elkerülheti a szükségtelen raszterizálást és feldolgozást.
A Direct3D 11-től eltérően a predikáció leválasztva van a lekérdezésekről, és a Direct3D 12-ben ki van bontva, hogy az alkalmazás az alkalmazás fejlesztője által esetleg eldöntendő indokok alapján predikálja az objektumokat (nem csak az elzárkózást).
SetPredication
A predikáció a pufferen belüli 64 bites érték alapján állítható be (lásd D3D12_PREDICATION_OP).
Amikor a GPU végrehajt egy SetPredication parancsot, az illeszti az értéket a pufferbe. A pufferben lévő adatok jövőbeli változásai visszamenőlegesen nem befolyásolják a predikációs állapotot.
Ha a puffer bemeneti paramétere NULL, akkor a predikáció le van tiltva.
A predikációs tippek nem szerepelnek a Direct3D 12 API-ban; és a predikáció engedélyezve van a közvetlen, számítási és másolási parancslistákon. A forráspuffer bármilyen halomtípusban (alapértelmezett, feltöltés, visszaolvasás, egyéni) lehet.
Az alapvető futtatókörnyezet a következőket ellenőrzi:
- AlignedBufferOffset 8 bájt többszöröse
- Az erőforrás puffer
- A művelet az enumerálás érvényes tagja
- SetPredication nem hívható meg csomagon belülről
- A parancslista típusa támogatja a predikációt
- Az eltolás nem haladja meg a puffer méretét
A hibakeresési réteg hibát ad ki, ha a forráspuffer nincs a D3D12_RESOURCE_STATE_PREDICATION (amely megegyezik D3D12_RESOURCE_STATE_INDIRECT_ARGUMENTés egyszerűen alias) állapotban.
A predikálható műveletek a következők:
- DrawInstanced
- DrawIndexedInstanced
- Dispatch
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- ClearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle nincs megadva. Ehelyett a fenti lista egyes műveleteit, amelyek a csomag oldalán találhatók, előre vannak dikálva.
Az ID3D12GraphicsCommandList metódusok ResolveQueryData, BeginQuery és EndQuery nincsenek predikálva.
Kapcsolódó témakörök