Объект состояния конвейера (PSO)
Неизменяемый объект, который собирает почти всё фиксированное состояние GPU — шейдеры, смешивание, тест глубины, формат вершин — в одну заранее скомпилированную единицу.
Старые API вроде OpenGL и D3D11 позволяли переключать состояние рендера по одному флагу, после чего драйвер тихо перекомпилировал и проверял комбинацию при первом draw call — непредсказуемый подвис посреди кадра. Direct3D 12 (2015) и Vulkan перевернули подход: всё состояние объявляется заранее как pipeline state object, драйвер компилирует его один раз, а привязка при рендеринге — дешёвая подмена указателя.
Цена — жёсткость. Каждая уникальная комбинация шейдеров и состояния — отдельный PSO, так что движку их могут понадобиться тысячи, и лучше строить их при загрузке, чтобы новый PSO посреди игры не вызывал статтер. У mesh- и compute-конвейеров есть свои, более простые варианты PSO.