Для реализации цели в этом вопросе Высокоэффективный способ захвата видео RGB и отображения его в Windows 10 , мне интересно, может ли устройство PCIe (например, FPGA на плате захвата видео PCIex4 подключено к южному мосту)) получить доступ к заблокированной поверхности DirectX.
Сначала заблокируйте поверхность D3D, например, через IDirect3DSurface9 :: LockRect, теперь приложение пользовательского режима имеет виртуальный адрес (и другую информацию, например размер межстрочного интервала) этой заблокированной области.
Во-вторых, устройство PCIe может быть запрограммировано на использование DMA для передачи данных (пиксель RGB) по соответствующим физическим адресам линий на заблокированной поверхности. Пример способа получения физических адресов подобен этому вопросу Как преобразовать адрес виртуальной памяти в физический адрес? .
Выше можно сделать это для буферов в системной памяти наверняка, ноИнтересно, можно ли это сделать для заблокированной поверхности DirectX, поскольку эти данные находятся в VRAM, так что: (1) Когда вы пытаетесь получить его физический адрес в драйвере, API-интерфейсы DDK могут просто не работать, поскольку API работает только для системной оперативной памяти. (2) На аппаратном уровне наборы микросхем могут вообще не разрешать устройствам PCIe на южном мосту доступ к VRAM, только разрешает доступ к ОЗУ системы.