====== 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 [[Vulkan|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]]//