CopyResource с одного устройства D3D11 на другое

Я могу скопировать содержимое из текстуры D3D11 в другую с помощью ID3D11DeviceContext::CopyResource. Метод относится к непосредственному контексту конкретного устройства, поэтому я не могу скопировать текстуру с одного устройства на другое (я пробовал - взрывается, как и ожидалось, говоря

"D3D11 CORRUPT: ID3D11DeviceContext::CopyResource: первый параметр не соответствует устройству. [РАЗНОЕ ПОВРЕЖДЕНИЕ #13: CORRUPTED_PARAMETER1]"

).

Существуют ли какие-либо встроенные средства D3D11 для этого или я должен загружать данные через промежуточную текстуру и загружать их на другое устройство?


person Christoph    schedule 11.02.2015    source источник
comment
Насколько я знаю, вы должны явно блокировать и копировать себя. Это также имеет смысл, потому что разные устройства D3D на самом деле могут быть разными аппаратными устройствами.   -  person thang    schedule 11.02.2015


Ответы (1)


Чтобы скопировать ресурс с одного устройства на другое, вам необходимо использовать общие поверхности DXGI. См. раздел Совместное использование поверхности графическими API Windows.

Помните, что в общем случае устройства могут не иметь общей физической памяти или аппаратного обеспечения.

person Chuck Walbourn    schedule 11.02.2015
comment
Знаете ли вы, работает ли совместно используемая поверхность (значительно) быстрее, чем копирование самостоятельно? Я бы предположил, что только накладные расходы процессора могут быть меньше, потому что драйвер может оптимизировать это, но копирования через PCIe никогда не избежать. - person Christoph; 13.02.2015
comment
Я думаю, что может быть некоторый выигрыш в производительности, если он на самом деле находится на том же физическом устройстве, но это никогда не будет особенно «быстрым», чтобы сделать это. - person Chuck Walbourn; 13.02.2015