Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот раздел относится только к Windows 7 и более поздним версиям, а также к windows Server 2008 R2 и более поздним версиям операционной системы Windows.
Отложенные контексты используются приложением для создания списков команд. Если драйвер отображения в пользовательском режиме указывает, что он поддерживает списки команд с помощью флага D3D11DDICAPS_COMMANDLISTS_BUILD_2 структуры D3D11DDI_THREADING_CAPS , он также должен поддерживать возможность создания и управления отложенными контекстами. Дополнительные сведения о том, как драйвер указывает возможности потоков, см. в разделе "Поддержка потоков", "Списки команд" и "Конвейер 3-D". Отложенные контексты отличаются от непосредственного контекста тем, что команды, записанные в отложенных контекстах, не могут быть выполнены до тех пор, пока приложение явно не запросит их выполнение, выполняя созданный список команд. Чтобы создать и использовать отложенный контекст, Direct3D версии 11 предоставляет следующие новые функции DDI. Эти функции представляют собой подмножество требуемых сведений для создания комбинации контекста устройства и непосредственного контекста.
Семантика функций CalcPrivateDeferredContextSize и CreateDeferredContext аналогична другим аналогичным функциям DDI.
Среда выполнения Direct3D передает новый дескриптор драйвера и основной дескриптор для каждого вызова функции CreateDeferredContext драйвера для создания каждого отложенного контекста. Состояние конвейера для каждого отложенного контекста должно быть эквивалентно состоянию конвейера, которое имеет немедленный контекст после выполнения операции ясного состояния. Драйвер должен заполнить члены структуры D3D11DDI_DEVICEFUNCS, на которую указывает член p11ContextFuncs структуры D3D11DDIARG_CREATEDEFERREDCONTEXT, подмножеством функций из своей таблицы функций. Среда выполнения использует каждое из соответствующих отложенных значений хендла контекста D3D10DDI_HDEVICE, которые член hDrvContext структуры D3D11DDIARG_CREATEDEFERREDCONTEXT определяет с этой таблицей функций.
Драйвер должен продолжать предоставлять функции, начинающиеся с pfnCreate, pfnOpen и pfnDestroy для отложенного контекста. Эти функции используют ту же семантику потоков, что и остальная часть отложенного контекста, и они применяются для открытия и закрытия локальных для контекста дескрипторов DDI, как описано в разделе Using Context-Local DDI Handles. Функции, начинающиеся с pfnCalcPrivate или pfnCheck , не используются для отложенных контекстов; Поэтому драйвер может задать элементы D3D11DDI_DEVICEFUNCS для этих функций значение NULL при создании отложенного контекста. Большинство оставшихся функций устройств используются для поддержки отложенного контекста. Однако драйвер не использует свою функцию QueryGetData . Однако драйвер использует свои функции ResourceMap и ResourceUnmap . Драйвер поддерживает только функцию ResourceIsStagingBusy и новые функции DDI для ограничения ресурсов Direct3D версии 11 в непосредственном контексте, используя дескрипторы контекста непосредственного исполнения. Полный список функций, которые не используются для отложенных контекстов, см. в разделе "Исключение функций DDI для отложенных контекстов".
Драйвер использует функции обратного вызова основного слоя, предоставляемые в блоке памяти, к которому указывает член D3D11DDIARG_CREATEDEFERREDCONTEXT p11UMCallbacks. Эти функции обратного вызова основного уровня предоставляют DDI обновленного состояния для каждого отложенного контекста. Однако самое главное — это добавление функции обратного вызова pfnPerformAmortizedProcessingCb , описанной в разделе "Изменения из Direct3D 10".
Драйвер не должен ожидать, что функция обратного вызова pfnDisableDeferredStagingResourceDestruction, на которую указывает элемент pfnDisableDeferredStagingResourceDestruction структуры D3D11DDI_CORELAYER_DEVICECALLBACKS, будет действительной. Драйвер должен вызывать pfnDisableDeferredStagingResourceDestruction в функции CreateDevice(D3D10) для устройства или непосредственного контекста; Затем драйвер никогда не должен вызывать pfnDisableDeferredStagingResourceDestruction с новой семантикой DDI версии 11 Direct3D.
Функция RecycleCreateDeferredContext драйвера должна очистить состояние конвейера для отложенного контекста, аналогично тому, как драйвер CreateDeferredContext очищает состояние конвейера для отложенного контекста. После вызова средой выполнения драйвера AbandonCommandList, CreateCommandList или RecycleCreateCommandList, среда выполнения может использовать дескриптор контекста отложенной записи с одной из функций драйвера DestroyDevice(D3D10) или RecycleCreateDeferredContext. Дополнительные сведения о RecycleCreateDeferredContext см. в разделе "Оптимизация для небольших списков команд".