Во-первых, давайте удостоверимся, что мы все на одной странице:
В качестве справочной информации, пожалуйста, знайте, что при запуске операционной системы - любой операционной системы - BIOS (или UEFI GOP) сообщает операционной системе, какой графический адаптер следует использовать в качестве основного кадрового буфера, Основной кадровый буфер - это, по сути, область виртуальной памяти, которая при записи в нее заставляет графический драйвер инициировать передачу DMA для отправки данных кадра на устройство вывода графики. Очевидно, что в конфигурации с несколькими графическими процессорами все не так просто, но общая идея заключается в том, что операционная система на базовом уровне знает только об одном отдельном кадровом буфере. Для определения того, что представляет собой кадровый буфер, мониторы, подключенные к одной и той же видеокарте, считаются управляемыми одним и тем же кадровым буфером. Мониторы, подключенные к разным картам, по умолчанию работают от разных кадровых буферов. Сегодня существует несколько технических приемов, которые помогают преодолеть аппаратный разрыв между различными кадровыми буферами; отсюда мой вопрос ...
Предположим, что вы приобрели больше мониторов, чем у вас есть портов на любой из ваших видеокарт. Например, если ваша видеокарта имеет один порт, у вас есть два монитора. Если ваша видеокарта имеет два порта, у вас есть три монитора. И так далее.
Также предположим, что вы не хотите использовать Eyefinity или аналогичную настройку, где операционная система рассматривает все мониторы как один «большой монитор».
Вы действительно хотите , чтобы иметь возможность перетаскивать мышью, и окно, между различными мониторами, без проблем .
Способы сделать это:
Соединение физической видеокарты : Nvidia SLI или AMD CrossFire. Эти решения позволят вам подключить ваш «дополнительный монитор (и)» ко второй дискретной видеокарте. Эти две видеокарты обмениваются данными друг с другом с помощью специального аппаратного моста (или, в случае AMD Radeon последнего поколения, с использованием шины PCIe).
Совместное использование платформы с помощью аппаратного фрейм -буфера : Nvidia Optimus, AMD Enduro, LucidLogix Virtu MVP ... концепция такая же. Мониторы подключены к одной плате (обычно к материнской плате для использования процессора iGPU), а мониторы подключены к дискретной видеокарте. Некоторая микросхема на материнской плате помогает координировать и синхронизировать эти две отдельные видеокарты, так что операционная система имеет иллюзию только одного кадрового буфера, и, таким образом, вы можете настроить несколько мониторов. Обратите внимание, что некоторые из этих решений могут также контролировать, с какого графического процессора воспроизводятся кадры , а не только местоположение, в которое выходные кадры растеризуются .
Программного обеспечения? Если ни один из первых двух аппаратных решений доступны, по- видимому , есть еще способ сделать это. Например, если на вашей материнской плате нет Nvidia Optimus или LucidLogix Virtu MVP; и ваши карты не в SLI; вы все равно можете взять, скажем, Nvidia GTX 280 и Nvidia GT 210, подключить их к одной машине, и вы получите тот же результат с точки зрения работы с несколькими мониторами. Вы можете легко перемещать мышь и окна между мониторами.
Мой вопрос, в третьем варианте выше, «Программное обеспечение?», Как, черт возьми, это работает в Windows ? Кроме того, как называется этот конкретный механизм / функция?
- Это особенность графического драйвера конкретного производителя?
- Это встроено в саму Windows?
- Как называется проклятая вещь?
источник
Ответ Парасие является правильным, но, возможно, объяснил это от лица, которое предполагает, что вы можете заполнить многие пробелы.
Windows в 2D не работает с несколькими мониторами. Windows работает с одной или несколькими дискретными поверхностями, но полностью игнорирует мониторы, поскольку кадровый буфер полностью обрабатывается графическим процессором без вмешательства и вмешательства Windows. Все, что делает Windows, это выдает 2d растровое изображение в определенное место в памяти, которое предварительно назначено в качестве «горячей зоны» для полностью несвязанного чипа кадрового буфера, чтобы захватывать обновления экрана. Вот почему вы все равно получаете дисплей, если у вас нет драйверов. Ваш BIOS настроит режим VESA, определив место в памяти, куда вы хотите создать дамп, и ничего больше. Это потому, что современный графический процессор - это несколько устройств для Windows. А или несколько адаптеров дисплея + ускоритель рендеринга + вычислительное ядро.
Проблема в вашем вопросе. Windows не участвует в примере 1 или 2, кроме как сказать «запустить SLI» для адаптера.
Чтобы сделать это более явным. В Windows есть «Виртуальные дисплеи» и «Адаптеры виртуальных дисплеев». Первыми могут быть соединения VNC или RDP, так как им нечего делать, кроме как передавать эти данные после создания образа. Это для Windows аналогично записи в этот адрес памяти и используется для получения окончательного образа.
Последний - просто определяемый драйвером метод для вывода этого изображения на экран, но он может быть таким же сложным, как эмулируемый кадровый буфер, выводимый на порт SCSI посредством программного рендеринга, или так же просто, как простая команда «перейти к этому адресу». В основном это немного больше, чем последний. Это для получения окончательного изображения из вашей памяти на экран.
3D имеет значение, потому что именно так он работает в 2D и, следовательно, почему ваша карта будет работать без драйвера. Windows работает в 2D, отсюда и название. Если оставить на выходе подсистемы Windows, и ваш графический процессор никогда не будет обрабатывать рендеринг, точно так же, как без многопоточной обработки ваш ЦП никогда не будет использовать второе ядро ... Windows просто не знает, какую работу отправлять, или даже что она принимает работу. Даже 2D-рендеринг должен быть сделан таким образом.
3D гораздо более сложный и запатентованный для каждой карты и работает через DirectX / OpenGL или DirectDraw (который я в основном DX сейчас), а для Windows это черный ящик. Вот почему все карты должны внутренне поддерживать эти API, чтобы играть в игры ... Windows просто передает драйверам команды, которые она не понимает. Оба 3D API «подключают» обрабатывающую часть вашего графического процессора к Windows 2D рендереру и виртуальному дисплею Windows, а затем соединяют виртуальный дисплей с помощью драйверов, содержащих собственные команды, с графическим процессором. Когда я говорю «проприетарный», я имею в виду коды, специфичные для генерации VLIW / GCN / Geforce.
Вот как ваш графический процессор, если у него есть драйверы, может выполнять рендеринг непосредственно в свои собственные буферы кадров, а до этого, когда в режиме VESA ваш процессор выполняет рендеринг и запись в ОЗУ, тогда ваш BIOS / EFI передает его из ОЗУ на выход.
По этой же причине ваше устройство отображается в диспетчере устройств как одно, а не как 3.
источник