Метод ID3D11Device1::CreateDeviceContextState (d3d11_1.h)

Создает объект состояния контекста, который содержит все состояние Microsoft Direct3D и некоторое поведение Direct3D.

Синтаксис

HRESULT CreateDeviceContextState(
                  UINT                    Flags,
  [in]            const D3D_FEATURE_LEVEL *pFeatureLevels,
                  UINT                    FeatureLevels,
                  UINT                    SDKVersion,
                  REFIID                  EmulatedInterface,
  [out, optional] D3D_FEATURE_LEVEL       *pChosenFeatureLevel,
  [out, optional] ID3DDeviceContextState  **ppContextState
);

Параметры

Flags

Тип: UINT

Сочетание D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG значений , объединенных с помощью побитовой операции OR . Полученное значение указывает, как создать объект состояния контекста. Флаг D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED в настоящее время является единственным определенным флагом. Если исходное устройство было создано с помощью D3D11_CREATE_DEVICE_SINGLETHREADED, необходимо создать с этого устройства все объекты состояния контекста с флагом D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED .

Если вы задали флаг однопотока как для объекта состояния контекста, так и для устройства, вы гарантируете, что вызовете весь набор методов контекста и методов устройства только из одного потока. Поэтому не нужно использовать критические разделы для синхронизации доступа к контексту устройства, и среда выполнения может избежать работы с этими критическими разделами, ресурсоемкими для процессора.

[in] pFeatureLevels

Тип: const D3D_FEATURE_LEVEL*

Указатель на массив D3D_FEATURE_LEVEL значений. Массив может содержать элементы из следующего списка и определяет порядок уровней компонентов, для которых предпринимается попытка создания. В отличие от D3D11CreateDevice, нельзя задать для pFeatureLevelsзначение NULL , так как по умолчанию не существует массива уровня компонентов.

{
    D3D_FEATURE_LEVEL_11_1,
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1,
};
          

FeatureLevels

Тип: UINT

Количество элементов в pFeatureLevels. В отличие от D3D11CreateDevice, необходимо задать для FeatureLevels значение больше 0, так как нельзя задать для pFeatureLevelsзначение NULL.

SDKVersion

Тип: UINT

Версия пакета SDK. Для этого параметра необходимо задать значение D3D11_SDK_VERSION.

EmulatedInterface

Тип: REFIID

Глобальный уникальный идентификатор (GUID) для эмулированного интерфейса. Это значение указывает поведение устройства при активном объекте состояния контекста. Допустимые значения получаются с помощью оператора __uuidof в интерфейсах ID3D10Device, ID3D10Device1, ID3D11Device и ID3D11Device1 . См. заметки.

[out, optional] pChosenFeatureLevel

Тип: D3D_FEATURE_LEVEL*

Указатель на переменную, которая получает значение D3D_FEATURE_LEVEL из массива pFeatureLevels . Это первое значение массива, с помощью которого CreateDeviceContextState удалось создать объект состояния контекста. Если вызов CreateDeviceContextState завершается ошибкой , переменная, на которую указывает pChosenFeatureLevel , имеет значение 0.

[out, optional] ppContextState

Тип: ID3DDeviceContextState**

Адрес указателя на объект ID3DDeviceContextState , представляющий состояние устройства Direct3D.

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

Тип: HRESULT

Этот метод возвращает один из кодов возврата Direct3D 11.

Комментарии

Значение REFIID эмулированного интерфейса — это GUID, полученный с помощью оператора __uuidof . Например, __uuidof(ID3D11Device) получает GUID интерфейса для устройства Microsoft Direct3D 11.

Вызовите метод ID3D11DeviceContext1::SwapDeviceContextState , чтобы активировать объект состояния контекста. Если объект состояния контекста активен, поведение устройства, связанное как с уровнем функций объекта состояния контекста, так и с совместимым интерфейсом, активируются на устройстве Direct3D до следующего вызова SwapDeviceContextState.

Если объект состояния контекста активен, среда выполнения отключает определенные методы в интерфейсе устройства и контекста. Например, объект состояния контекста, созданный с __uuidof(ID3D11Device) помощью , приведет к тому, что среда выполнения отключит большинство интерфейсов устройств Microsoft Direct3D 10, а объект состояния контекста, созданный с __uuidof(ID3D10Device1) помощью или __uuidof(ID3D10Device) , приведет к отключению среды выполнения большинства методов ID3D11DeviceContext . Такое поведение гарантирует, что пользователь эмулированного интерфейса не сможет задать состояние устройства, которое другой эмулированный интерфейс не может выразить. Это ограничение гарантирует, что эмулированный интерфейс ID3D10Device1 точно отражает полное состояние конвейера и что эмулированный интерфейс не будет работать в соответствии с исходным определением интерфейса.

Например, предположим, что этап тесселяции активируется через интерфейс ID3D11DeviceContext при создании устройства с помощью D3D11CreateDevice или D3D11CreateDeviceAndSwapChain, а не через эквиваленты Direct3D 10. Так как контекст Direct3D 11 активен, интерфейс Direct3D 10 неактивен при первом получении с помощью QueryInterface. Это означает, что невозможно сразу передать интерфейс Direct3D 10, полученный с устройства Direct3D 11, в функцию. Сначала необходимо вызвать SwapDeviceContextState , чтобы активировать объект состояния контекста, совместимый с Direct3D 10.

В следующей таблице показаны активные и неактивные методы для каждого эмулированного интерфейса.

Эмулированный интерфейс Интерфейсы активного устройства или непосредственного контекста Интерфейсы неактивного устройства или непосредственного контекста

ID3D11Device или

ID3D11Device1

ID3D11Device

IDXGIDevice +

IDXGIDevice1 +

IDXGIDevice2

ID3D10Multithread

ID3D10Device

ID3D10Device1 или

ID3D10Device

ID3D10Device

ID3D10Device1

IDXGIDevice +

IDXGIDevice1

ID3D10Multithread

ID3D11Device

ID3D11DeviceContext (опубликовано непосредственным контекстом. Эмулированный интерфейс Direct3D 10 или Microsoft Direct3D 10.1 не влияет на отложенные контексты.)

 

В следующей таблице показаны непосредственные методы контекста, которые среда выполнения отключает, когда указанные объекты состояния контекста активны.

Методы ID3D11DeviceContext , если __uuidof(ID3D10Device1) или __uuidof(ID3D10Device) активен Методы ID3D10Device , если __uuidof(ID3D11Device) активен

ClearDepthStencilView

ClearDepthStencilView

ClearRenderTargetView

ClearRenderTargetView

ClearState

ClearState

ClearUnorderedAccessViewUint

ClearUnorderedAccessViewFloat

CopyResource

CopyResource

CopyStructureCount

CopySubresourceRegion

CopySubresourceRegion

CSGetConstantBuffers

CSGetSamplers

CSGetShader

CSGetShaderResources

CSGetUnorderedAccessViews

CSSetConstantBuffers

CsSetSamplers

CSSetShader

CSSetShaderResources

CSSetUnorderedAccessViews

Dispatch

DispatchIndirect

CreateBlendState

Draw

Draw

DrawAuto

DrawAuto

DrawIndexed

DrawIndexed

DrawIndexedInstanced

DrawIndexedInstanced

DrawIndexedInstancedIndirect

DrawInstanced

DrawInstanced

DrawInstancedIndirect

DSGetConstantBuffers

DSGetSamplers

DSGetShader

DSGetShaderResources

DSSetConstantBuffers

DSSetSamplers

DSSetShader

DSSetShaderResources

ExecuteCommandList

FinishCommandList

Очистка

Очистка

GenerateMips

GenerateMips

GetPredication

GetPredication

GetResourceMinLOD

GetType

GetTextFilterSize

GSGetConstantBuffers

GSGetConstantBuffers

GSGetSamplers

GSGetSamplers

GSGetShader

GSGetShader

GSGetShaderResources

GSGetShaderResources

GSSetConstantBuffers

GSSetConstantBuffers

GSSetSamplers

GSSetSamplers

GSSetShader

GSSetShader

GSSetShaderResources

GSSetShaderResources

HSGetConstantBuffers

HSGetSamplers

HSGetShader

HSGetShaderResources

HSSetConstantBuffers

HSSetSamplers

HSSetShader

HSSetShaderResources

IAGetIndexBuffer

IAGetIndexBuffer

IAGetInputLayout

IAGetInputLayout

IAGetPrimitiveTopology

IAGetPrimitiveTopology

IAGetVertexBuffers

IAGetVertexBuffers

IASetIndexBuffer

IASetIndexBuffer

IASetInputLayout

IASetInputLayout

IASetPrimitiveTopology

IASetPrimitiveTopology

IASetVertexBuffers

IASetVertexBuffers

OMGetBlendState

OMGetBlendState

OMGetDepthStencilState

OMGetDepthStencilState

OMGetRenderTargets

OMGetRenderTargets

OMGetRenderTargetsAndUnorderedAccessViews

OMSetBlendState

OMSetBlendState

OMSetDepthStencilState

OMSetDepthStencilState

OMSetRenderTargets

OMSetRenderTargets

OMSetRenderTargetsAndUnorderedAccessViews

PSGetConstantBuffers

PSGetConstantBuffers

PSGetSamplers

PSGetSamplers

PSGetShader

PSGetShader

PSGetShaderResources

PSGetShaderResources

PSSetConstantBuffers

PSSetConstantBuffers

PSSetSamplers

PSSetSamplers

PSSetShader

PSSetShader

PSSetShaderResources

PSSetShaderResources

ResolveSubresource

ResolveSubresource

RSGetScissorRects

RSGetScissorRects

RSGetState

RSGetState

RSGetViewports

RSGetViewports

RSSetScissorRects

RSSetScissorRects

RSSetState

RSSetState

RSSetViewports

RSSetViewports

SetPredication

SetPredication

SetResourceMinLOD

SetTextFilterSize

SOGetTargets

SOGetTargets

SOSetTargets

SOSetTargets

UpdateSubresource

UpdateSubresource

VSGetConstantBuffers

VSGetConstantBuffers

VSGetSamplers

VSGetSamplers

VSGetShader

VSGetShader

VSGetShaderResources

VSGetShaderResources

VSSetConstantBuffers

VSSetConstantBuffers

VsSetSamplers

VsSetSamplers

VSSetShader

VSSetShader

VSSetShaderResources

VSSetShaderResources

 

В следующей таблице показаны непосредственные методы контекста, которые среда выполнения не отключает, когда указанные объекты контекстного состояния активны.

Методы ID3D11DeviceContext , если __uuidof(ID3D10Device1) или __uuidof(ID3D10Device) активна Методы ID3D10Device , если __uuidof(ID3D11Device) активен

Начать

END

GetCreationFlags

GetPrivateData

GetContextFlags

GetData

Схема

Unmap

 

В следующей таблице показаны методы интерфейса ID3D10Device , которые среда выполнения не отключает, так как они не являются непосредственными методами контекста.

Методы ID3D10Device

CheckCounter

CheckCounterInfo

Create*, например CreateQuery

GetDeviceRemovedReason

GetExceptionMode

OpenSharedResource

SetExceptionMode

SetPrivateData

SetPrivateDataInterface

 

Windows Phone 8. Этот API поддерживается.

Требования

Требование Значение
Минимальная версия клиента Windows 8 и обновление платформы для Windows 7 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 и обновление платформы для Windows Server 2008 R2 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header d3d11_1.h
Библиотека D3D11.lib

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

ID3D11Device1