W-буфер (ing) в Direct3D 12 - PullRequest
       85

W-буфер (ing) в Direct3D 12

0 голосов
/ 24 апреля 2020

На D3D10 Docs есть список , который показывает устаревшие функции от D3D9 до D3D10. Это говорит о том, что буферизация W больше не поддерживается, и мы должны вместо этого использовать высокоточные буферы глубины / Z-буферы. Я подозреваю, что он также (полностью) не поддерживается в Direct3D 11 и 12. Но есть ли способ использовать W-буферы в Direct3D 12?

1 Ответ

1 голос
/ 24 апреля 2020

Функция W-буферизации в Direct3D 9 является частью устаревшего конвейера с фиксированными функциями. В Direct3D 10 и более поздних версиях вы можете использовать только программируемый шейдерный конвейер (или для DirectX 11+ шейдерный конвейер DirectCompute). Следовательно, аппаратная функция «w-buffering» не актуальна. Это было также гораздо более серьезной проблемой с аппаратным обеспечением Direct3D 9-ой эпохи, когда люди использовали 16-битные буферы глубины.

В модели программируемого шейдера ваши шейдеры могут вычислять значения глубины, используя обычный z или линеаризованный -depth значения и установите соответствующее состояние глубины / трафарета. Помните, что вам нужно использовать SV_DepthGreater или SV_DepthLessEqual вместо SV_Depth, чтобы не потерять оптимизацию "раннего отклонения z".

См. этот пост и этот пост для хорошего обсуждения топи c.

TL; DR: Большинство людей просто используют DXGI_FORMAT_D32_FLOAT и не беспокоятся об этом.

...