функция обратного вызова PFND3DDDI_CREATERESOURCE2 (d3dumddi.h)
Создает ресурс. Реализовано с помощью драйверов windows Display Driver Model (WDDM) 1.2 и более поздних версий в пользовательском режиме.
Синтаксис
PFND3DDDI_CREATERESOURCE2 Pfnd3dddiCreateresource2;
HRESULT Pfnd3dddiCreateresource2(
[in] HANDLE hDevice,
D3DDDIARG_CREATERESOURCE2 *unnamedParam2
)
{...}
Параметры
[in] hDevice
Дескриптор устройства отображения (графический контекст), который используется для создания ресурса.
unnamedParam2
pResource2 [вход, выход]
Указатель на структуру D3DDDIARG_CREATERESOURCE2 , описывающую созданный ресурс.
Возвращаемое значение
Возвращает S_OK или соответствующий результат ошибки. Драйверы WDDM 1.3 и более поздних версий Direct3D уровня 9 должны возвращать следующий код ошибки:
Код возврата | Описание |
---|---|
E_INVALIDARG | D3DDDIARG_CREATERESOURCE2 . Flagsmember имеет значение флага CaptureBuffer, а ресурс превышает то, что может поддерживать драйвер. |
Комментарии
Вызов CreateResource2 может содержать список поверхностей. Элемент SurfCountструктуры D3DDDIARG_CREATERESOURCE2 , заданной параметром pResource2 , указывает количество создаваемых поверхностей, включая уровни MIP-карты. Например, ресурс текстуры MIP-карты 256x9 содержит список из девяти поверхностей, где член SurfCount и количество уровней MIP-карты имеют значение 9. Для схемы куба, содержащей девять уровней MIP-карты, должно быть задано 9 уровней карты MIP, а для SurfCount — 54. Для цепочки буферов с тремя поверхностями surfCount должно быть задано значение 3, а для количества уровней MIP-карты — значение 0. Обратите внимание, что количество уровней MIP-карты всегда меньше или равно значению в SurfCount.
В ответ на вызов CreateResource2 драйвер отображения пользовательского режима может вызвать функцию pfnAllocateCb для создания одного или нескольких выделений памяти. Драйвер отображения пользовательского режима должен определить, должен ли он создавать несколько выделений для каждой поверхности, одно выделение для всех поверхностей или одно выделение для каждой поверхности. Дополнительные сведения о выделении ресурсов см. в разделе Управление видеопамятью и планирование GPU.
Ресурсы могут совместно использоваться несколькими устройствами (hDevice) и процессами. Среда выполнения указывает, что ресурс является общим, установив флаг битового поля SharedResource в элементе FlagsD3DDDIARG_CREATERESOURCE2. Если этот флаг битового поля установлен, драйвер отображения пользовательского режима должен соответствовать следующим ограничениям на общие ресурсы:
- Драйвер отображения пользовательского режима может вызывать функции pfnAllocateCb и pfnDeallocateCb ровно один раз.
- Драйвер отображения пользовательского режима не может создавать дополнительные выделения для ресурса после первоначального создания ресурса и также может уничтожить выделение ресурсов только в момент уничтожения самого ресурса.
- Когда функция DestroyResource драйвера пользовательского отображения вызывается для общего ресурса, который был создан или открыт с помощью вызова функции CreateResource2 или OpenResource драйвера, драйвер должен задать элементу hResource структуры D3DDDICB_DEALLOCATE значение, отличное от NULL, а член NumAllocationsD3DDDICB_DEALLOCATE равным нулю в вызове функции pfnDeallocateCb , чтобы уничтожить или закрыть ресурс. То есть выделения, связанные с общим ресурсом, не могут быть уничтожены или закрыты по отдельности; ресурс должен быть уничтожен или закрыт атомарным образом в одном вызове pfnDeallocateCb.
- Количество выделений должно быть согласованным для типа ресурса (то есть другой процесс, создающий тот же тип ресурса, должен генерировать такое же количество и тип выделений). Кроме того, переименование не допускается для этих ресурсов.
- Неопределенные биты элемента Flags зарезервированы .
- Если флаг основного битового поля не задан в разделе Флаги, элементы RefreshRate и Output зарезервированы.
- Если флаг битового поля RenderTarget, DecodeRenderTarget или VideoProcessRenderTarget не установлен в разделе Флаги, то элементы MultisampleType и MultisampleQuality зарезервированы.
- Если флаг битового поля VertexBuffer не задан в разделе Флаги, элемент Fvf резервируется.
- Если флаги битовых полей Texture, CubeMap и Volume не заданы в разделе Флаги, то элемент MipLevels резервируется.
Для ресурса системной памяти драйвер мини-порта дисплея может выбрать оболочку выделения вокруг системной памяти, если системная память правильно выровнена для прямого доступа к графическому процессору (GPU). Драйвер мини-порта дисплея создает оболочку для выделения системной памяти, устанавливая флаг ExistingSysMem в элементе Flags структуры DXGK_ALLOCATIONINFO при создании выделения с помощью функции DxgkDdiCreateAllocation . Если драйвер мини-порта дисплея не может упаковать выделение памяти системы или происходит сбой оболочки, драйвер по-прежнему должен успешно создать ресурс и использовать ЦП для доступа к ресурсу.
Если среда выполнения запрашивает создание буфера вершин или индексов и драйвер отображения пользовательского режима не может создать буфер по причинам, кроме нехватки памяти (например, из-за отсутствия аппаратной поддержки), драйвер должен завершиться сбоем с D3DERR_NOTAVAILABLE.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 |
Минимальная версия сервера | Windows Server 2012 |
Целевая платформа | Персональный компьютер |
Верхняя часть | d3dumddi.h (включая D3dumddi.h) |