Uživatelské nástroje

Nástroje pro tento web


pso

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

pso.txt · Poslední úprava: autor: admin