Поделиться через


Управление памятью Multiple-Head

Задание бита возможности DDSCAPS2_ADDITIONALPRIMARY в элементе dwCaps2 структуры DDSCAPS2 для каждой поверхности на подчиненной голове уведомляет голову о том, что эти поверхности являются последними поверхностями, выделенными из видеопамяти, назначенной этой голове. Затем подчиненный руководитель должен отказаться от управления выделением своей видеопамятки master голове, так как подчиненный руководитель гарантированно не будет получать последующие вызовы DdCreateSurface в течение времени существования приложения.

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

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

По большей части этот выбор того, какая голова владеет видеопамяти, является неотъемлемой частью существующего процесса DirectDraw. В частности:

  • Среда выполнения гарантирует, что последующие запросы на выделение не будут выполняться на подчиненных головах после выполнения вызовов DdCreateSurface с использованием бита DDSCAPS2_ADDITIONALPRIMARY. Поэтому драйверу не требуется в любое время ограничивать выделение ресурсов из собственного пула видеопамять.

  • Когда приложение завершается или свернуто, все поверхности уничтожаются. Поэтому все текстуры, созданные master головой из пула подчиненного руководителя, очищаются.

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

  • Драйвер должен предоставить реализацию, в которой master голова выделяет память из пула подчиненного руководителя, включая определение того, когда конкретный ресурс может быть выделен из пула подчиненного руководителя. Обратите внимание, что у master головы нет сведений о том, участвует ли она в сценарии с несколькими головами. Когда master голова заканчивается из собственной видеопамяти, она должна пройти все подчиненные головки в своей группе, чтобы определить, есть ли у любой из этих голов пулы, которые могут использоваться master (другими словами, чтобы определить, получили ли какие-либо подчиненные головки вызовы DdCreateSurface с набором битов DDSCAPS2_ADDITIONALPRIMARY).

  • Наконец, обратите внимание, что среда выполнения гарантирует, что все руководители группы участвуют в сценарии с несколькими головами. Таким образом, драйвер должен поддерживать только один бит состояния, указывающий, находится ли он в данный момент в режиме с несколькими головами.