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

使用位 OR 運算結合D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG值的組合。 產生的值會指定如何建立內容狀態物件。 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、ID3D10Device1ID3D11Device1、ID3D11Device 和 ID3D11Device1 介面上使用 __uuidof 運算符來取得有效值。 請參閱<備註>。

[out, optional] pChosenFeatureLevel

類型: D3D_FEATURE_LEVEL*

pFeatureLevels 陣列接收D3D_FEATURE_LEVEL值的變數指標。 這是 CreateDeviceContextState 成功建立內容狀態物件的第一個數位列值。 如果 CreateDeviceContextState 呼叫失敗, pChosenFeatureLevel 所指向的變數會設定為零。

[out, optional] ppContextState

類型: ID3DDeviceContextState**

ID3DDeviceContextState 物件的指標位址,代表 Direct3D 裝置的狀態。

傳回值

類型: 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 或 D3D11CreateDeviceD3D11CreateDeviceAndSwapChain 建立裝置時,會透過 ID3D11DeviceContext 介面啟用鑲嵌階段,而不是透過 Direct3D 10 對等專案。 由於 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

分派

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

 

下表顯示當指定的內容狀態物件為使用中時,運行時間不會停用的立即內容方法。

當 或 __uuidof(ID3D10Device) 為使用中時__uuidof(ID3D10Device1)ID3D11DeviceContext 的方法 使用中時 __uuidof(ID3D11Device)ID3D10Device 的方法

開始

End

GetCreationFlags

GetPrivateData

GetContextFlags

GetData

地圖

Unmap

 

下表顯示運行時間不會停用的 ID3D10Device 介面方法,因為它們不是立即的內容方法。

ID3D10Device 的方法

CheckCounter

CheckCounterInfo

建立*,例如 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
程式庫 D3D11.lib

另請參閱

ID3D11Device1