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


Улучшения производительности отрисовки Direct3D

Драйверы модели отображения Windows (WDDM) версии 1.3 и выше могут поддерживать улучшения производительности отрисовки Microsoft Direct3D, что позволяет аппаратному обеспечению Direct3D 9 более эффективно использовать аппаратные буферы команд и счетчики и эффективно копировать системную память в подресурсы. Эти возможности, которые отражают некоторые возможности, доступные для оборудования Direct3D версии 10, являются новыми, начиная с Windows 8.1.

Также доступны новые улучшения производительности для обрезки ресурсов Direct3D 11.1 и улучшенной работы сопоставления по умолчанию. Сценарий по умолчанию карты описан в разделе "Изменения поведения" ниже.

Справочник по эффективности рендеринга

В этом справочном разделе описываются интерфейсы драйверов устройств в пользовательском режиме (DDIs).

Функции производительности отрисовки Direct3D, реализованные драйвером пользовательского режима

В этом разделе содержатся функции, которые реализует драйвер windows Display Driver Model (WDDM) 1.3 и более поздних версий в пользовательском режиме, чтобы поддерживать улучшения производительности отрисовки Microsoft Direct3D.

PFND3DDDI_FLUSH1: PFND3DDDI_CHECKCOUNTERINFO

PFND3DDDI_CHECKCOUNTER: PFND3DDDI_UPDATESUBRESOURCEUP

Структуры и перечисления производительности отрисовки Direct3D

Эти структуры и перечисления в пользовательском режиме поддерживают улучшение производительности отрисовки и являются новыми или обновленными для Windows 8.1. Все применяются к драйверам уровня Direct3D 9, кроме D3D11_1_DDI_FLUSH_FLAGS.

Требования к реализации DDI, начиная с WDDM 1.3

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

Группа функций Описание

Функции Direct3D 9, которые являются необязательными до WDDM 1.3. Теперь требуется:

Функции Direct3D 9, доступные начиная с WDDM 1.3. Драйвер должен либо реализовать все эти функции, либо ни один из них:

При реализации дополнительных функций WDDM 1.3 и более поздних версий эти функции связаны с изменениями поведения:

  • BltDXGI — нативная стадия
  • Blt1DXGI — встроенный стейджинг
  • CreateResource2 — собственные промежуточные текстуры, большие текстуры захвата
  • GetCaps — метки времени, простая вставка
  • Блокировка — собственный промежуточный режим
  • TexBlt1 — собственный промежуточный режим
  • Разблокировка — собственный промежуточный режим
  • VolBlt1 — собственная подготовка к выпуску

Эти сценарии применяются при вызове GetCaps :

  • Если задано D3DDDICAPS_GETD3DQUERYDATA, драйвер может при необходимости сообщить о поддержке меток времени, что означает, что среда выполнения Direct3D не будет скрывать эту поддержку.
  • Если задано D3DDDICAPS_GET_SIMPLE_INSTANCING_SUPPORT , драйвер может сообщить о необязательной поддержке оборудования для инстантирования.

Эти функции Direct3D 11 связаны с изменениями поведения:

  • CreateResource(D3D11) — карта буфера по умолчанию (см. раздел "Изменения поведения" ниже)
  • pfnFlush1 — обрезка ресурсов
  • ResourceMap — карта буфера по умолчанию (см. раздел "Изменения поведения" ниже)
  • ResourceUnmap — карта буфера по умолчанию (см. раздел "Изменения поведения" ниже)

Изменения в поведении вызовов функций создания ресурсов, сопоставления и отмены сопоставления

Для этих функций, реализованных драйверами WDDM 1.3 и более поздних версий, рантайм Direct3D предоставляет ограниченный набор входных значений для сценария маппинга по умолчанию. Эти ограниченные значения применяются только к драйверам, поддерживающим уровень компонентов 11.1 и более поздних версий.

Функция CreateResource(D3D11)

Эти входные D3D11DDIARG_CREATERESOURCE члены структуры ограничены:

Член Описание

ResourceDimension и Usage

Эти изменения в поведении применяются только в том случае, если среда выполнения Direct3D предоставляет тип D3D10DDIRESOURCE_BUFFER для ResourceDimension и тип D3D10_DDI_USAGE_DEFAULT для использования.

BindFlags

Среда выполнения Direct3D задает только значения D3D10_DDI_BIND_SHADER_RESOURCE и D3D11_DDI_BIND_UNORDERED_ACCESS .

MapFlags

Если выполнены все остальные требования к члену, указанные здесь, среда выполнения может задать D3D10_DDI_MAP_READ, D3D10_DDI_MAP_WRITE и D3D10_DDI_MAP_READWRITE значения. Драйвер должен поддерживать эти значения. Значения D3D10_DDI_MAP_WRITE_DISCARD и D3D10_DDI_MAP_WRITE_NOOVERWRITE недопустимы.

MiscFlags

Среда выполнения задает только значения D3D11_DDI_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS и D3D11_DDI_RESOURCE_MISC_BUFFER_STRUCTURED.

Формат

Среда выполнения задает только значение DXGI_FORMAT_UNKNOWN .

SampleDesc

Среда выполнения задает элемент DXGI_SAMPLE_DESC.Count равным 1, а элемент Quality равным нулю.

MipLevels

Среда выполнения задает значение 1.

ArraySize

Среда выполнения задает значение 1.

pPrimaryDesc

Среда выполнения задает значение NULL.

ResourceMapфункция

Эти входные параметры в ResourceMap ограничены:

Параметр Описание

hResource

Среда выполнения Direct3D задает только ресурс D3D10DDIRESOURCE_BUFFER, если в вызове создания CreateResource(D3D11) задано ненулевое значение для MapFlags.

Среда выполнения задает только значение DXGI_FORMAT_UNKNOWN .

Подресурс

Среда выполнения задает только значение 0.

DDIMap

Если выполнены все остальные требования к члену, указанные здесь, среда выполнения может задать D3D10_DDI_MAP_READ, D3D10_DDI_MAP_WRITE или D3D10_DDI_MAP_READWRITE значения, соответствующие значению MapFlags, заданному в вызове создания CreateResource(D3D11).

Флаги

Хотя входное значение среды выполнения не ограничено, драйвер должен поддерживать значение D3D10_DDI_MAP_FLAG_DONOTWAIT .

pMappedSubResource

Хотя входное значение из среды выполнения не ограничено, драйвер должен назначить допустимый указатель на член D3D10DDI_MAPPED_SUBRESOURCE.pData, который поддерживает кэширование процессором, и должен установить значения параметров RowPitch и DepthPitch так, чтобы они соответствовали размеру буфера и данным, представленным в pData.

Функция ResourceUnmap

Эти входные параметры в ResourceUnmap ограничены:

Параметр Описание

hDevice

Хотя входное значение из среды выполнения Direct3D не ограничено, значение, соответствующее значению hDevice из исходного вызова ResourceMap .

hResource

Среда выполнения задает ресурс D3D10DDIRESOURCE_BUFFER только в том случае, если в вызове создания CreateResource(D3D11) установлено ненулевое значение для MapFlags.

Подресурс

Среда выполнения задает только значение 0.