пятница, 15 января 2010 г.

Depth/Stencil: Render vs CopyResource

Провёл ещё одно тестирование, которое на этот раз касается stencil-routed K-buffer.

Как известно, в D3D 10.0 нельзя копировать depth/stencil и MSAA ресурсы. В D3D 10.1 это ограничение было снято, но т. к. у меня не было доступа к этому железу, было неясно, насколько копирование быстрее инициализации стенсель-буфера. Я решил это выяснить и провёл несколько простых тестов. Я тестировал в двух разрешениях: 512x512 и 1024x1024, при 8xMSAA:
512x512:

Copy stencil: ~1390 fps
Init stencil: ~1800 fps
1024x1024:

Copy stencil: ~390 fps
Init stencil: ~512 fps
Как видно, копирование примерно на 25% медленнее инициализации. Т. е. несмотря на многократную смену stencil ref и sample mask, это быстрее, чем один вызов ::CopyResource(). Возможно, отставание в скорости происходит из-за того, что кроме stencil копируется и depth буфер, тогда как при инициализации запись происходит только в stencil (DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO). Т. е. в инициализации всего один шаг:
1) Write stencil.
При копировании:
1) Read depth.
2) Read stencil.
3) Write depth.
4) Write stencil.

Комментариев нет:

Отправить комментарий