Какой формат использовать для представления ресурса шейдера в ресурсе буфера трафарета глубины?

Ресурс буфера трафарета глубины определяется как формат 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 в имени. Однако вы можете просмотреть ресурс без типа, указав типизированный формат для представления.


Я действительно не понимаю, почему формат без типа не разрешен и какой формат следует использовать вместо него?


person Jaanus Varus    schedule 13.08.2016    source источник


Ответы (1)


Наоборот, вы создаете ресурс с бестиповыми компонентами и специфицируете ресурс в представлении с нужным вам окончательным представлением. Поскольку вы уже дали шаблону ресурса представление uint, вы застряли с ним.

person galop1n    schedule 13.08.2016
comment
Спасибо, это имеет смысл! В итоге я определил ресурс как R24G8_TYPELESS, DSV как D24_UNORM_S8_UINT и SRV как R24_UNORM_X8_TYPELESS. - person Jaanus Varus; 14.08.2016