Совместное использование ресурсов Direct3D9ex и Direct3D10 - PullRequest
2 голосов
/ 11 февраля 2009

С Direct3D9ex возможно разделять ресурсы между устройствами. Возможно ли использовать эти общие ресурсы с устройствами Direct3D10?

Ответы [ 3 ]

3 голосов
/ 16 мая 2009

Да, вы можете разделять ресурсы между устройствами D3D9Ex и D3D10, используя описанную здесь методику:

Обзор функций (Direct3D 9 для Windows Vista) - Совместное использование ресурсов

Обратите внимание, что доступ графического процессора к совместно используемым поверхностям не синхронизирован - например, если вы выполняете рендеринг на одну и ту же поверхность рендеринга одновременно на двух устройствах, ожидайте всевозможные повреждения и расы.

Чтобы обойти это, убедитесь, что одно устройство завершило рендеринг на общую поверхность, прежде чем другое будет использовать его. Одним из вариантов является запрос события (IDirect3DQuery9), другой выполняет StretchRect на небольшой поверхности и блокирует его (если блокировка завершается успешно, GPU завершил всю предыдущую работу)

0 голосов
/ 10 мая 2009

Вы можете совместно использовать ресурсы Direct3D9 между устройствами или процессами.

Обзор функций (Direct3D 9 для Windows Vista) - Совместное использование ресурсов

Подобный метод работает для ресурсов Direct3D10 (вы также указываете дескриптор совместного использования).

В этой теме GameDev.net подробно обсуждается совместное использование D3D9Ex и D3D10. Выводы в этой теме, как представляется, заключаются в том, что, хотя на основе документации это должно быть возможно (с некоторыми ограничениями), на практике это не работает вообще (возможно, ограничения настолько серьезны, что они препятствуют любому практическому сценарию использования?)

0 голосов
/ 11 февраля 2009

Кто-то поправит меня, если я ошибаюсь, но, нет и нет.

Что вы намерены? Есть статическая текстура на двух устройствах? Если это так, это легко сделать, загрузив одну и ту же текстуру дважды в два разных пула по умолчанию. Просто знайте, что изменение одного не обязательно изменит другое.

Если вы пытаетесь поделиться управляемой текстурой на двух устройствах, я не думаю, что это достижимо при каком-либо контроле. SLI может сделать это за сценой, но вы не сможете его контролировать.

Если вы хотите явно использовать текстуру, сгенерированную одним устройством, на другом устройстве, вам придется загружать ее с исходного устройства и загружать на целевое устройство каждый кадр. Это будет медленно, но если это абсолютно необходимо, это можно сделать таким образом.

...