функция обратного вызова PFND3DDDI_CREATERESOURCE (d3dumddi.h)

Функция CreateResource создает ресурс.

Синтаксис

PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;

HRESULT Pfnd3dddiCreateresource(
  HANDLE hDevice,
  D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}

Параметры

hDevice

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

unnamedParam2

pResource [in, out]

Указатель на структуру D3DDDIARG_CREATERESOURCE , описывающую созданный ресурс.

Возвращаемое значение

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

Код возврата Описание
S_OK Ресурс успешно создан.
E_OUTOFMEMORY CreateResource не удалось выделить необходимую память для его завершения.
D3DERR_NOTAVAILABLE CreateResource не удалось создать ресурс по другим причинам, кроме того, что не удалось выделить память. CreateResource может возвращать эту ошибку только при создании буферов вершин или индексов.

Комментарии

Вызов CreateResource может содержать список поверхностей. Элемент SurfCountструктуры D3DDDIARG_CREATERESOURCE , заданной параметром pResource , указывает количество создаваемых поверхностей, включая уровни MIP-карты. Например, ресурс текстуры MIP-карты 256x256x9 содержит список из девяти поверхностей, в которых для элемента SurfCount и количества уровней MIP-карты задано значение 9. Для карты куба, содержащей девять уровней MIP-карты, должно быть установлено число уровней MIP-карты равным 9, а для SurfCount — значение 54. Для цепочки буферов с тремя поверхностями surfCount должно быть задано значение 3, а для количества уровней MIP-карты — значение 0. Обратите внимание, что количество уровней MIP-карты всегда меньше или равно значению в SurfCount.

В ответ на вызов CreateResource драйвер отображения пользовательского режима может вызвать функцию pfnAllocateCb для создания одного или нескольких выделений памяти. Драйвер дисплея пользовательского режима должен определить, должен ли он создавать несколько выделений для каждой поверхности, одно выделение для всех поверхностей или одно выделение для каждой поверхности. Дополнительные сведения о выделении ресурсов см. в разделе Управление видеопамятью и планирование GPU.

Примечание Функция CreateResource драйвера не требуется для вызова pfnAllocateCb перед возвратом; Вместо этого драйвер может отложить создание выделения.
 
Примечание Общий доступ к ресурсу можно использовать только в том случае, если все выделения для ресурса выполняются атомарно в одном вызове pfnAllocateCb.
 
Элемент hResource в структуре D3DDDIARG_CREATERESOURCE — это дескриптор, который используется для идентификации ресурса. Драйвер отображения пользовательского режима должен хранить значение hResource , переданное в вызове CreateResource , и перезаписать его другим значением, которое среда выполнения Microsoft Direct3D может использовать при возврате вызова CreateResource . Другими словами, в вызовах среды выполнения драйвер отображения пользовательского режима использует значение hResource , переданное в CreateResource; В вызовах драйвера отображения пользовательского режима (например, в вызовах функций SetTexture или SetStreamSource ) среда выполнения использует значение hResource , возвращенное из CreateResource. Обратите внимание, что у каждой поверхности нет явного дескриптора; Если на поверхность необходимо ссылаться по отдельности (например, при вызове функции Blt ), на нее ссылается дескриптор и индекс. Индекс идентифицирует поверхность в ресурсе. Индекс совпадает с индексом поверхности в массиве, который содержится в элементе pSurfList D3DDDIARG_CREATERESOURCE.

Ресурсы могут совместно использоваться несколькими устройствами (hDevice) и процессами. Среда выполнения указывает, что ресурс является общим, установив флаг битового поля SharedResource в элементе FlagsD3DDDIARG_CREATERESOURCE. Если этот флаг битового поля установлен, драйвер отображения пользовательского режима должен соответствовать следующим ограничениям на общие ресурсы:

  • Драйвер отображения пользовательского режима может вызывать функции pfnAllocateCb и pfnDeallocateCb ровно по одному разу.
  • Драйвер отображения пользовательского режима не может создать дополнительные выделения для ресурса после первоначального создания ресурса и также может уничтожить выделение ресурсов только во время уничтожения самого ресурса.
  • Когда функция DestroyResource драйвера отображения пользовательского режима вызывается для общего ресурса, который был создан или открыт с помощью вызова функции CreateResource или OpenResource драйвера, драйвер должен задать для элемента hResourceструктуры D3DDDICB_DEALLOCATE значение, отличное от NULL, а для элемента NumAllocations D3DDDICB_DEALLOCATE значение 0 в вызове функции pfnDeallocateCb , чтобы уничтожить или закрыть ресурс. То есть выделения, связанные с общим ресурсом, не могут быть уничтожены или закрыты по отдельности; Ресурс должен быть уничтожен или закрыт атомарно в одном вызове pfnDeallocateCb.
  • Количество выделений должно быть согласованным для типа ресурса (то есть другой процесс, создающий тот же тип ресурса, должен генерировать такое же количество и тип выделений). Кроме того, переименование для этих ресурсов запрещено.
Флаги битового поля, указанные в структуре D3DDDI_RESOURCEFLAGS , передаются в элементе Flags D3DDDIARG_CREATERESOURCE.
Примечание Ресурс можно создать без указания флагов. Поверхности, связанные с таким ресурсом, потенциально могут быть заблокированы и могут быть источником или назначением в операции передачи битового блока (bitblt). Однако такие поверхности нельзя использовать ни для чего другого.
 
Примечание Простые поверхности отличаются от текстур или автономных целевых объектов отрисовки отсутствием флага текстуры или основного битового поля. Например, наличие флага основного битового поля указывает на автономный целевой объект отрисовки, а отсутствие этого флага указывает на целевой объект отрисовки, который является задним буфером.
 
Примечание Чтобы изменения среды выполнения не нарушали работу существующих драйверов, драйверы не должны использовать следующие зарезервированные члены структуры D3DDDIARG_CREATERESOURCE в вызовах функции CreateResource , чтобы повлиять на поведение драйверов:
  • Неопределенные биты элемента Flags зарезервированы .
  • Если флаг основного битового поля не задан в разделе Флаги, элементы RefreshRate и Output зарезервированы.
  • Если флаг bit-field RenderTarget, DecodeRenderTarget или VideoProcessRenderTarget не задан в разделе Флаги, то элементы MultisampleType и MultisampleQuality зарезервированы.
  • Если флаг битового поля VertexBuffer не задан в разделе Флаги, элемент Fvf зарезервирован.
  • Если флаги битовых полей Texture, CubeMap и Volume не заданы в разделе Флаги, элемент MipLevels зарезервирован.
 
Дополнительные сведения о создании и уничтожении ресурсов см. в разделе Обработка создания и уничтожения ресурсов.

Новый createResource DDI отличается от DdCreateSurface DDI для модели драйвера дисплея Microsoft Windows 2000 следующими способами:

  • В новом DDI CreateResource поверхности никогда не присоединяются явным образом. Все вложения подразумеваются атомарным созданием.
  • В новом DDI CreateResource частичное создание сопоставлений кубов запрещено.
Для ресурса системной памяти драйвер минипорта дисплея может выбрать перенос выделения вокруг системной памяти, если системная память правильно выровнена для прямого доступа к графическому процессору (GPU). Драйвер мини-порта дисплея создает оболочку для выделения системной памяти, устанавливая флаг ExistingSysMem в элементе Flagsструктуры DXGK_ALLOCATIONINFO при создании выделения с помощью функции DxgkDdiCreateAllocation . Если драйверу мини-порта дисплея не удается упаковать выделение вокруг системной памяти или происходит сбой оболочки, драйвер по-прежнему должен успешно создать ресурс и использовать ЦП для доступа к ресурсу.

Если среда выполнения запрашивает создание буфера вершин или индексов и драйвер отображения пользовательского режима не может создать буфер по причинам, отличным от нехватки памяти (например, из-за отсутствия поддержки оборудования), драйвер должен завершиться сбоем с D3DERR_NOTAVAILABLE.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

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

Blt

D3DDDIARG_CREATERESOURCE

D3DDDI_DEVICEFUNCS

D3DDDI_RESOURCEFLAGS

SetStreamSource

SetTexture

pfnAllocateCb

pfnDeallocateCb