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的方法

開始

結束

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