Ресурс буфера трафарета глубины определяется как формат DXGI_FORMAT_D24_UNORM_S8_UINT
.
Я бы предположил, что для создания представления ресурса шейдера (SRV) в этом ресурсе потребуется, чтобы формат представления был описан как:
DXGI_FORMAT_R24_UNORM_X8_TYPELESS
где красный канал обращается к значению глубиныDXGI_FORMAT_R24G8_TYPELESS
где красный канал обращается к глубине, а значение трафарета зеленого канала
Однако создание такого SRV завершается со следующей ошибкой:
ОШИБКА D3D12: ID3D12Device::CreateShaderResourceView: для формата ресурса D24_UNORM_S8_UINT при создании представления D3D имя формата представления не может быть R24_UNORM_X8_TYPELESS. См. в документации набор допустимых имен форматов представления для этого формата ресурсов, определяющих, как ресурс (или его часть) будет отображаться в шейдере. [ОШИБКА STATE_CREATION № 28: CREATESHADERRESOURCEVIEW_INVALIDFORMAT]
Просмотр документа по API дал мне следующую информацию:
При просмотре ресурса описание представления ресурса должно указывать типизированный формат, совместимый с форматом ресурса. Это означает, что вы не можете создать описание представления ресурса, используя любой формат с _TYPELESS в имени. Однако вы можете просмотреть ресурс без типа, указав типизированный формат для представления.
Я действительно не понимаю, почему формат без типа не разрешен и какой формат следует использовать вместо него?