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


Поддержка нескольких процессоров

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

оптимизацияRuntime-Handled Multiple-Processor

Оптимизации с несколькими процессорами, которые обрабатываются средой выполнения Direct3D, включаются только на драйверах, поддерживающих функции LockAsync, UnlockAsync и Rename. Эти функции позволяют оптимизации с несколькими процессорами хорошо работать с приложениями, которые часто блокируют динамические ресурсы. Функции LockAsync и UnlockAsync наряду с функцией GetQueryData должны повторно выполняться на драйверах, которые предоставляют версию DDI 0x0000000B или больше. Драйвер возвращает значение версии DDI в элементе DriverVersion структуры D3D10DDIARG_OPENADAPTER в вызове функции OpenAdapter драйвера. Когда среда выполнения вызывает функцию драйвера повторно, один поток может выполняться внутри этой функции, а другой поток, ссылающийся на то же устройство отображения, выполняется внутри другой функции драйвера.

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

Вместо прямого вызова драйвера отображения в пользовательском режиме команды слоя программного обеспечения помещает команды в пакеты, которые рабочий поток асинхронно обрабатывает. Однако программный уровень не может обрабатывать пакетами все вызовы, сделанные в функции дисплей драйвера пользовательского режима. В частности, уровень программного обеспечения не может пакетные вызовы к функциям, возвращающим сведения (например, CreateResource). Когда программный слой должен вызвать одну из таких функций драйвера, он отправляет все команды из очереди через рабочий поток, а затем вызывает функцию драйвера в основном потоке приложения.

оптимизацияDriver-Handled Multiple-Processor

Если драйвер выполнит собственную оптимизацию с несколькими процессорами, он не должен реализовывать функции LockAsync, UnlockAsync и Rename . В этой ситуации драйвер должен вызвать функцию pfnSetAsyncCallbacksCb , чтобы уведомить среду выполнения о том, будет ли среда выполнения запускать или останавливать прием вызовов функций обратного вызова среды выполнения из рабочего потока.

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

  • Приложение выполняется в окне.

  • Компьютер содержит только один процессор (или ядро процессора); Драйвер должен отключить оптимизацию на компьютерах с одним процессором с гиперпотоками.

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

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