CBV
CBV (Constant Buffer View) — это механизм в графических API, таких как Direct3D 12, позволяющий передавать константные данные в шейдеры. CBV представляет собой специальное представление (View) буфера констант (Constant Buffer), который используется для хранения небольших объемов данных, часто изменяемых между вызовами рендеринга.
Основные характеристики CBV
- Малый объем данных — предназначен для хранения матриц трансформации, параметров освещения и других небольших структур данных.
- Высокая скорость доступа — данные, хранящиеся в CBV, кэшируются и доступны для шейдеров с минимальной задержкой.
- Раздельное использование с другими ресурсами — CBV может применяться отдельно или в комбинации с SRV (Shader Resource View) и UAV (Unordered Access View).
Использование CBV в Direct3D 12
В Direct3D 12 константные буферы передаются в шейдеры через Root Signature. Пример создания CBV:
D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {};
cbvDesc.BufferLocation = constantBuffer->GetGPUVirtualAddress();
cbvDesc.SizeInBytes = (sizeof(ConstantData) + 255) & ~255; // Выравнивание на 256 байт
device->CreateConstantBufferView(&cbvDesc, cbvHandle);
Где применяется CBV?
- Передача матриц трансформации — используется для хранения модели, вида и проекционных матриц в 3D-графике.
- Настройки освещения — хранит параметры источников света, цвета и интенсивности.
- Глобальные переменные шейдеров — позволяет передавать общие параметры рендеринга без использования текстур или буферов.
Заключение
CBV (Constant Buffer View) — это ключевой элемент передачи константных данных в графических API, таких как Direct3D 12. Благодаря высокой скорости доступа и простоте использования, он широко применяется в рендеринге для передачи важных параметров шейдерам, обеспечивая эффективную работу графического процессора.