Obsah
PSO (Pipeline State Object)
PSO je objekt, který v sobě zapouzdřuje kompletní stav grafické linky (pipeline) pro danou operaci vykreslování. Obsahuje konfiguraci od shaderů až po nastavení míchání barev a hloubkového testu.
1. Proč PSO vznikly? (Problém "stutteringu")
V dobách starších API (jako OpenGL) byl stav grafické karty nastaven jako globální stavový stroj. Programátor měnil jednotlivé parametry (např. glEnable(GL_DEPTH_TEST)) těsně před vykreslením.
Nevýhody starého přístupu:
- Kompilace za běhu: Ovladač GPU často zjistil, že kombinace nastavení je nová, a musel kompilovat shadery nebo rekonfigurovat hardware uprostřed vykreslování snímku.
- Záškuby (Stuttering): Tato náhlá zátěž CPU vedla k citelnému propadu snímkové frekvence (FPS).
2. Co všechno PSO obsahuje?
PSO je v podstatě „recept“, který říká GPU, jak přesně má zpracovat data. Po vytvoření je PSO neměnný (immutable). Obsahuje:
- Shaders: Binární kód (např. ve formátu SPIR-V) pro Vertex, Fragment a další shadery.
- Input Layout: Definice toho, jak jsou data ve vertex bufferu uspořádána (pozice, barvy, texturové souřadnice).
- Rasterization State: Nastavení culling (zahazování neviditelných stěn), šířka čar, režim vyplňování.
- Depth/Stencil State: Konfigurace hloubkového testu (zjišťování, co je vpředu a co vzadu).
- Blend State: Matematika pro míchání barev (průhlednost).
- Multisampling: Nastavení vyhlazování hran (Antialiasing).
3. Životní cyklus PSO
Hlavní výhodou PSO je, že se vytvářejí během načítání aplikace (loading screen), nikoliv během samotného hraní.
1. **Vytvoření (Creation):** Aplikace definuje všechny stavy a požádá [[Vulkan]]/DX12 o vytvoření PSO. Ovladač provede veškeré náročné výpočty a kompilace dopředu. 2. **Uložení do mezipaměti (Caching):** Vytvořené PSO se často ukládají na disk (Pipeline Cache), aby při příštím spuštění hry nebylo nutné znovu kompilovat. 3. **Vázání (Binding):** Během vykreslování scény aplikace pouze přepíná mezi hotovými PSO. To je extrémně rychlá operace.
4. Pipeline Cache a "Shader Compilation"
Možná jste si u moderních PC her všimli obrazovky „Compiling Shaders“ při prvním spuštění. To je právě proces vytváření tisíců PSO pro všechny možné kombinace materiálů a efektů ve hře.
| Vlastnost | Starý přístup (OpenGL) | Moderní přístup (PSO) |
|---|---|---|
| Kdy se konfiguruje? | Těsně před kreslením (za běhu). | Při načítání aplikace (dopředu). |
| Změna stavu | Pomalá, nepředvídatelná. | Extrémně rychlá. |
| Zátěž CPU | Vysoká během renderování. | Minimální během renderování. |
| Plynulost | Možné záškuby při změnách. | Naprosto plynulý průběh. |
—
Zajímavost: Pro vývojáře je správa PSO náročná, protože i malá změna (např. zapnutí průhlednosti u jednoho objektu) vyžaduje vytvoření úplně nového PSO objektu. Proto jich moderní AAA hry mají v paměti tisíce.
Související: Vulkan, GPU, C++, Adobe Photoshop
