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) 。 此值指定上下文状态对象处于活动状态时设备的行为。 使用 ID3D10Device、ID3D10Device1、ID3D11Device 和 ID3D11Device1 接口上的 __uuidof 运算符获取有效值。 请参阅“备注”。

[out, optional] pChosenFeatureLevel

类型: D3D_FEATURE_LEVEL*

指向从 pFeatureLevels 数组接收D3D_FEATURE_LEVEL值的变量的指针。 这是 CreateDeviceContextState 成功创建上下文状态对象的第一个数组值。 如果对 CreateDeviceContextState 的 调用失败, 则 pChosenFeatureLevel 指向的变量设置为零。

[out, optional] ppContextState

类型: ID3DDeviceContextState**

指向 表示 Direct3D 设备状态的 ID3DDeviceContextState 对象的指针的地址。

返回值

类型: HRESULT

此方法返回 Direct3D 11 返回代码之一。

注解

模拟接口的 REFIID 值是使用 __uuidof 运算符获取的 GUID。 例如, __uuidof(ID3D11Device) 获取 Microsoft Direct3D 11 设备的接口的 GUID。

调用 ID3D11DeviceContext1::SwapDeviceContextState 方法来激活上下文状态对象。 当上下文状态对象处于活动状态时,与上下文状态对象的功能级别及其兼容接口关联的设备行为在 Direct3D 设备上激活,直到下一次调用 SwapDeviceContextState

当上下文状态对象处于活动状态时,运行时会禁用设备和上下文接口上的某些方法。 例如,使用 __uuidof(ID3D11Device) 创建的上下文状态对象将导致运行时关闭大多数 Microsoft Direct3D 10 设备接口,以及使用 __uuidof(ID3D10Device1)__uuidof(ID3D10Device) 将导致运行时关闭大多数 ID3D11DeviceContext 方法的上下文状态对象。 此行为可确保其中一个模拟接口的用户无法设置另一个模拟接口无法表达的设备状态。 此限制有助于保证 ID3D10Device1 模拟接口准确反映管道的完整状态,并且模拟接口不会与其原始接口定义相反。

例如,假设通过 D3D11CreateDevice 或 D3D11CreateDeviceAndSwapChain(而不是 Direct3D 10 等效项)创建设备时,通过 ID3D11DeviceContext 接口使分割阶段处于活动状态。 由于 Direct3D 11 上下文处于活动状态,因此首次通过 QueryInterface 检索 Direct3D 10 接口时处于非活动状态。 这意味着无法立即将从 Direct3D 11 设备检索到的 Direct3D 10 接口传递到函数。 必须先调用 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 模拟接口对延迟上下文没有影响。)

 

下表显示了当指示的上下文状态对象处于活动状态时运行时禁用的即时上下文方法。

当 或 __uuidof(ID3D10Device) 处于活动状态时 __uuidof(ID3D10Device1)ID3D11DeviceContext 的方法 处于活动状态时 __uuidof(ID3D11Device)ID3D10Device 的方法

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

绘制

绘制

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

 

下表显示了指示的上下文状态对象处于活动状态时运行时不禁用的即时上下文方法。

当 或 __uuidof(ID3D10Device) 处于活动状态时 __uuidof(ID3D10Device1)ID3D11DeviceContext 的方法 处于活动状态时 __uuidof(ID3D11Device)ID3D10Device 的方法

开始

End

GetCreationFlags

GetPrivateData

GetContextFlags

GetData

Map

Unmap

 

下表显示了运行时不禁用的 ID3D10Device 接口方法,因为它们不是即时上下文方法。

ID3D10Device 的方法

CheckCounter

CheckCounterInfo

Create*,如 CreateQuery

GetDeviceRemovedReason

GetExceptionMode

OpenSharedResource

SetExceptionMode

SetPrivateData

SetPrivateDataInterface

 

Windows Phone 8:支持此 API。

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 适用于 Windows Server 2008 R2 的Windows Server 2012和平台更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d3d11_1.h
Library D3D11.lib

另请参阅

ID3D11Device1