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:

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:

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