Нужно ли CreateSharedHandle для передачи ID3D11Texture2D в другой поток? - PullRequest
0 голосов
/ 30 мая 2018

Как видно из заголовка: мне нужно использовать CreateSharedHandle для передачи ID3D11Texture2D, сгенерированного в потоке, в другой поток в том же процессе ?

Мой вариант использованиячто каждый поток будет использовать текстуру со своим собственным устройством, созданным на том же адаптере.

1 Ответ

0 голосов
/ 30 мая 2018

Цитирование Совместное использование поверхностей между графическими API-интерфейсами Windows :

Синхронизированные общие поверхности обеспечивают многопоточное, внутрипроцессное и внепроцессное использование нескольких устройств рендеринга, используемыхDirect3D 10.1, Direct2D и Direct3D 11 API.[...]

Синхронизированные общие поверхности DXGI 1.1

API-интерфейсы Direct3D 11, Direct3D 10.1 и Direct2D используют DXGI 1.1, который обеспечивает функцию синхронизации чтения и записи в одну и ту же видеопамятьповерхность (DXGISurface1) двумя или более устройствами Direct3D.Устройства рендеринга, использующие синхронизированные общие поверхности, могут быть устройствами Direct3D 10.1 или Direct3D 11, каждое из которых работает в одном и том же процессе или в разных процессах .

Использование синхронизированных поверхностей / текстур позволяетиспользовать их в многопоточной среде параллельного выполнения.Однако вам не нужно включать этот механизм, просто используйте текстуру в другом потоке.Вы должны сделать это по другой причине:

... каждый поток будет использовать текстуру со своим собственным устройством, созданным на том же адаптере.

Текстуры принадлежатих устройства, поэтому вы должны включить общий доступ, чтобы несколько устройств работали с общими данными текстуры.

...