Я много читал о Direct3D11 (в том числе прямо здесь о переполнении стека!) И во всех своих исследованиях я не смог окончательно ответить на этот вопрос:
Когда объект Resource (то есть объект Buffer или Texture) создается, например, с помощью pDevice-> CreateBuffer (), где он хранится? На системной памяти или на видео-оперативной памяти графического процессора? Или я совершенно неправильно понимаю фундаментальную природу объекта Resource?
Очевидно, что любые данные, которыми вы заполняете ресурс (например, массивы вершин и индексов), хранятся там, где вы — программист — разместили их, но как только вы сопоставите эти данные с ресурсом, куда они копируются? (Я предполагаю, что, поскольку ресурсы должны отображаться и не отображаться для защиты от чтения / записи, сопоставленные данные фактически копируются, возможно, в VRAM). Кроме того, где создается экземпляр самого объекта Resource?
Заранее спасибо за любую помощь!
Во время создания ресурса ваш вызов Create * проходит через среду выполнения D3D, UMD (графический драйвер пользовательского режима) & KMD (режим ядра).
KMD заботится об управлении таблицами страниц (он может взаимодействовать с ОС в случае разделяемой виртуальной памяти, но позволяет это игнорировать). Если ваш ресурс не использует SVM, то он помещается в графическую память.
Графическая память для процессора (например, Intel Iris) — это оперативная память вашей системы. Таким образом, это действительно просто копия из виртуального адресного пространства приложения в KMD.
Для дискретных видеокарт данные хранятся в видеопамяти вашей карты. Графический процессор может работать только с данными видеопамяти. (Я не уверен, как общая виртуальная память работает для дискретной графики)
Других решений пока нет …