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


структура DXGI1_2_DDI_BASE_FUNCTIONS (dxgiddi.h)

Содержит указатели на функции, которые может реализовать драйвер дисплея Windows Display Driver Model (WDDM) 1.2 и более поздних версий для выполнения низкоуровневых задач, таких как представление отображаемых кадров на выходе, управление гамма, получение уведомлений об общих и совместимых поверхностях интерфейса графических устройств Windows (GDI), а также управление полноэкранным переходом.

Синтаксис

typedef struct DXGI1_2_DDI_BASE_FUNCTIONS {
  HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
  HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
  HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
  HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
  HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
  HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
  HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
  HRESULT()(DXGI_DDI_ARG_RESOLVESHAREDRESOURCE *) * pfnResolveSharedResource;
  HRESULT()(DXGI_DDI_ARG_BLT1 *) * pfnBlt1;
  HRESULT()(DXGI_DDI_ARG_OFFERRESOURCES *) * pfnOfferResources;
  HRESULT()(DXGI_DDI_ARG_RECLAIMRESOURCES *) * pfnReclaimResources;
  HRESULT()(DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *) * pfnGetMultiplaneOverlayCaps;
  HRESULT()(void *) * pfnGetMultiplaneOverlayFilterRange;
  HRESULT()(DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT *) * pfnCheckMultiplaneOverlaySupport;
  HRESULT()(DXGI_DDI_ARG_PRESENTMULTIPLANEOVERLAY *) * pfnPresentMultiplaneOverlay;
} DXGI1_2_DDI_BASE_FUNCTIONS;

Члены

pfnPresent

Указатель на функцию PresentDXGI драйвера.

pfnGetGammaCaps

Указатель на функцию GetGammaCapsDXGI драйвера.

pfnSetDisplayMode

Указатель на функцию SetDisplayModeDXGI драйвера.

pfnSetResourcePriority

Указатель на функцию SetResourcePriorityDXGI драйвера.

pfnQueryResourceResidency

Указатель на функцию QueryResourceResidencyDXGI драйвера.

pfnRotateResourceIdentities

Указатель на функцию RotateResourceIdentitiesDXGI драйвера.

pfnBlt

Указатель на функцию BltDXGI драйвера.

Среда выполнения Direct3D может задать элемент FlagsDXGI_DDI_ARG_BLT структуры, на которую указывает параметр pBltData , таким образом, чтобы функция Blt1DXGI выполняла операцию передачи битовых блоков (bitblt ), которая разрешает ресурсы с несколькими выборками, выполняет преобразование цветового формата и выполняет растяжение или сжатие всех одновременно. Однако среда выполнения Direct3D никогда не устанавливает для элемента FlagsDXGI_DDI_ARG_BLT1 нулевое значение (т. е. не устанавливает флаги) вместе со значением DXGI_DDI_MODE_ROTATION_IDENTITY , заданным в элементе RotateDXGI_DDI_ARG_BLT1 (т. е. для указания отсутствия поворота) для выполнения операции прямого копирования памяти. Вместо этого, если оба ресурса не являются многофакторными, среда выполнения Direct3D вызывает функцию ResourceCopy или ResourceCopyRegion(D3D11_1) драйвера для выполнения операции копирования прямой памяти.

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

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

Когда среда выполнения вызывает Blt1DXGI для презентации, среда выполнения устанавливает флаг битового поля Present в элементе FlagsDXGI_DDI_ARG_BLT1. Среда выполнения устанавливает флаг битового поля Present , чтобы сообщить драйверу, что существуют дополнительные требования к bitblt и что может потребоваться дополнительная синхронизация (например, среде выполнения может потребоваться выполнить дополнительную синхронизацию в конфигурациях компьютеров, содержащих два графических адаптера, каждый из которых обрабатывает отдельные части дисплея). Если установлен флаг Битовое поле Present , драйвер должен выполнить операцию копирования из задних буферов приложения в общую поверхность DWM. Так как синхронизация для этого типа операции копирования является неточным, разрыв артефактов должен быть худшим типом артефактов, с которыми сталкивается пользователь. Для этого типа операции копирования драйвер не должен использовать многопроходный подход, сначала разрешая в области назначения, а затем преобразуя результаты на месте, так как возможные артефакты будут гораздо хуже.

Если драйвер поддерживает возврат DXGI_DDI_ERR_UNSUPPORTED во время создания основной поверхности (то есть возврат DXGI_DDI_ERR_UNSUPPORTED из вызова функции CreateResource(D3D10) с флагом D3D10_DDI_BIND_PRESENT , установленным в элементе BindFlagsD3D10DDIARG_CREATERESOURCE вместе с элементом pPrimaryDescD3D10DDIARG_CREATERESOURCE Для параметра задано значение, отличное от NULL), драйвер также должен поддерживать поворот во время операции копирования. Если драйвер никогда не возвращает DXGI_DDI_ERR_UNSUPPORTED из вызова функции CreateResource(D3D10) или CreateResource(D3D11), среда выполнения никогда не передает значение DXGI_DDI_MODE_ROTATION_ROTATE90, DXGI_DDI_MODE_ROTATION_ROTATE180 или DXGI_DDI_MODE_ROTATION_ROTATE270 элементу Rotate DXGI_DDI_ARG_BLT1. Поэтому в этом случае функция Blt1DXGI драйвера не требуется для поддержки поворота.

Среда выполнения задает значение в элементе ПовернутьDXGI_DDI_ARG_BLT1 , чтобы указать количество градусов для поворота содержимого источника против часовой стрелки, прежде чем драйвер копирует содержимое в место назначения. Поворот задается с шагом в 90 градусов.

Примечание

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

Ограничения источника

Функция Blt1DXGI всегда использует для выполнения операции bitblt весь исходный подресурс (в отличие от некоторых подпрямоугольных областей). Кроме того, источником является D3D10DDIRESOURCE_TEXTURE2D представление (указанное в элементе ResourceDimensionD3D10DDIARG_CREATERESOURCE или D3D11DDIARG_CREATERESOURCE при создании источника при вызове функции CreateResource(D3D10) или CreateResource(D3D11) драйвера пользовательского режима отображения соответственно). Когда среда выполнения задает битовое поле Resolve в элементе FlagsDXGI_DDI_ARG_BLT1, источником является ресурс с несколькими выборками. Исходный ресурс ограничен ресурсом, в котором был установлен флаг D3D10_DDI_BIND_PRESENT в элементе BindFlagsD3D10DDIARG_CREATERESOURCE или D3D11DDIARG_CREATERESOURCE. Формат источника (указанный в элементе Formatэлемента D3D10DDIARG_CREATERESOURCE или D3D11DDIARG_CREATERESOURCE) ограничен форматами режима отображения, заданными следующими значениями из перечисления DXGI_FORMAT :

  • DXGI_FORMAT_B5G6R5_UNORM
  • DXGI_FORMAT_B5G5R5A1_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM (см. примечание ниже).
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

Примечание

Если драйвер поддерживает исходный формат DXGI_FORMAT_B8G8R8A8_UNORM, применяются следующие ограничения:

  • Когда драйвер выполняет битовую операцию из формата с плавающей запятой в целочисленный формат, например BGRA8888, он должен неявно кодировать гамма в результатах.
  • И наоборот, когда драйвер выполняет операцию bitblt из целочисленного формата в формат с плавающей запятой, он должен неявно удалить гамма-кодировку из результатов.

Ограничения назначения

Назначение также является D3D10DDIRESOURCE_TEXTURE2D представлением. Формат назначения также ограничен форматами режима отображения. Целевой ресурс ограничен ресурсом, привязанным как целевой объект отрисовки (D3D10_DDI_BIND_RENDER_TARGET задан в элементе BindFlagsD3D10DDIARG_CREATERESOURCE или D3D11DDIARG_CREATERESOURCE).

Создание обратного стерео буфера

Начиная с Windows 8, если драйвер должен создать обратный буфер стерео, он должен задать элементы структуры D3D10DDIARG_CREATERESOURCE или D3D11DDIARG_CREATERESOURCE соответственно, на которые указывает параметр pCreateResource функций CreateResource(D3D10) или CreateResource(D3D11), следующим образом:

  1. Задайте для элемента ArraySize значение 2.
  2. Задайте значение флага D3D10_DDI_BIND_PRESENT в элементе BindFlags .

Кроме того, для поддержки стереопрезентации функция BltDXGI должна разрешать любые значения для элементов DstSubresource и SrcSubresourceструктуры DXGI_DDI_ARG_BLT , которые находятся в диапазоне исходных и целевых ресурсов.

pfnResolveSharedResource

Указатель на функцию ResolveSharedResourceDXGI драйвера.

pfnBlt1

Указатель на функцию Blt1DXGI драйвера.

pfnOfferResources

Указатель на функцию pfnOfferResources драйвера.

pfnReclaimResources

Вызывается средой выполнения DXGI для освобождения ресурсов видеопамять, которые ранее предлагал драйвер дисплея пользовательского режима для повторного использования. Реализовано в драйверах отображения пользовательского режима WDDM 1.2 и более поздних версий.

pfnGetMultiplaneOverlayCaps

Вызывается средой выполнения microsoft DirectX Graphics Infrastructure (DXGI) для запроса на получение базовых возможностей плоскости наложения в драйвере пользовательского режима. При необходимости реализовано с помощью драйверов windows Display Driver Model (WDDM) 1.3 и более поздних версий в пользовательском режиме. Синтаксис pfnGetMultiplaneOverlayCaps выглядит следующим образом:

pfnGetMultiPlaneOverlayCaps GetMultiPlaneOverlayCaps;

HRESULT __stdcall* GetMultiPlaneOverlayCaps(
    DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *pCaps
)
{ ... }

Параметр pCaps является указателем на структуру DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS , которая указывает возможности плоскости наложения.

pfnGetMultiplaneOverlayCaps возвращает одно из следующих значений:

  • S_OK. Драйвер успешно предоставил возможности плоскости наложения.
  • D3DDDIERR_DEVICEREMOVED. Драйвер обнаружил, что видеоадаптер был удален, поэтому драйвер не завершил операцию. Если драйвер не знает об удалении адаптера, драйвер не должен возвращать этот код ошибки.

pfnGetMultiplaneOverlayFilterRange

Этот элемент зарезервирован и должен иметь нулевое значение. Поддерживается начиная с Windows 8.1.

pfnCheckMultiplaneOverlaySupport

Вызывается средой выполнения инфраструктуры графики Microsoft DirectX (DXGI) для проверка сведения об аппаратной поддержке многоплановых наложениях. Синтаксис pfnCheckMultiplaneOverlaySupport :

PFND3DDDI_CHECKMULTIPLANEOVERLAYSUPPORT pfnCheckMultiplaneOverlaySupport;

HRESULT __stdcall* pfnCheckMultiplaneOverlaySupport(
   D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT *pSupport
)
{ ... }

Параметр pSupport является указателем на структуру DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT , описывающую способ отображения на целевой поверхности.

Если pfnCheckMultiplaneOverlaySupport завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

pfnPresentMultiplaneOverlay

Указатель на функцию драйвера pfnPresentMultiplaneOverlay (DXGI). Поддерживается начиная с Windows 8.1.

pSupport

Указатель на структуру DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT , описывающую способ отображения на целевой поверхности.

Требования

Требование Значение
Минимальная версия клиента Windows 8, WDDM 1.2
Минимальная версия сервера Windows Server 2012
Верхняя часть dxgiddi.h (включая D3d10umddi.h)

См. также раздел

CreateDevice(D3D10)

D3D10DDIARG_CREATEDEVICE

DXGI1_3_DDI_BASE_FUNCTIONS

DXGI_DDI_BASE_ARGS

DXGI_DDI_BASE_FUNCTIONS