Método ID3D11Device1::CreateDeviceContextState (d3d11_1.h)
Crea un objeto de estado de contexto que contiene todo el estado de Microsoft Direct3D y algún comportamiento de Direct3D.
Sintaxis
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
);
Parámetros
Flags
Tipo: UINT
Combinación de D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG valores que se combinan mediante una operación OR bit a bit. El valor resultante especifica cómo crear el objeto de estado de contexto. La marca D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED es actualmente la única marca definida. Si el dispositivo original se creó con D3D11_CREATE_DEVICE_SINGLETHREADED, debe crear todos los objetos de estado de contexto a partir de ese dispositivo con la marca D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED .
Si establece la marca de un solo subproceso para el objeto de estado de contexto y el dispositivo, se garantiza que llamará a todo el conjunto de métodos de contexto y métodos de dispositivo solo desde un subproceso. Por lo tanto, no es necesario usar secciones críticas para sincronizar el acceso al contexto del dispositivo y el tiempo de ejecución puede evitar trabajar con esas secciones críticas intensivas del procesador.
[in] pFeatureLevels
Tipo: const D3D_FEATURE_LEVEL*
Puntero a una matriz de valores D3D_FEATURE_LEVEL . La matriz puede contener elementos de la lista siguiente y determina el orden de los niveles de características para los que se intenta crear. A diferencia de D3D11CreateDevice, no se puede establecer pFeatureLevels en NULL porque no hay ninguna matriz de nivel de característica predeterminada.
{
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
Tipo: UINT
Número de elementos de pFeatureLevels. A diferencia de D3D11CreateDevice, debe establecer FeatureLevels en mayor que 0 porque no se puede establecer pFeatureLevels en NULL.
SDKVersion
Tipo: UINT
La versión del SDK. Debe establecer este parámetro en D3D11_SDK_VERSION.
EmulatedInterface
Tipo: REFIID
Identificador único global (GUID) de la interfaz emulada. Este valor especifica el comportamiento del dispositivo cuando el objeto de estado de contexto está activo. Los valores válidos se obtienen mediante el operador __uuidof en las interfaces ID3D10Device, ID3D10Device1, ID3D11Device e ID3D11Device1 . Vea la sección Comentarios.
[out, optional] pChosenFeatureLevel
Tipo: D3D_FEATURE_LEVEL*
Puntero a una variable que recibe un valor de D3D_FEATURE_LEVEL de la matriz pFeatureLevels . Este es el primer valor de matriz con el que CreateDeviceContextState se creó correctamente en la creación del objeto de estado de contexto. Si se produce un error en la llamada a CreateDeviceContextState , la variable a la que apunta pChosenFeatureLevel se establece en cero.
[out, optional] ppContextState
Tipo: ID3DDeviceContextState**
Dirección de un puntero a un objeto ID3DDeviceContextState que representa el estado de un dispositivo Direct3D.
Valor devuelto
Tipo: HRESULT
Este método devuelve uno de los códigos de retorno de Direct3D 11.
Comentarios
El valor REFIID de la interfaz emulada es un GUID obtenido mediante el uso del operador __uuidof . Por ejemplo, __uuidof(ID3D11Device)
obtiene el GUID de la interfaz en un dispositivo Microsoft Direct3D 11.
Llame al método ID3D11DeviceContext1::SwapDeviceContextState para activar el objeto de estado de contexto. Cuando el objeto de estado de contexto está activo, los comportamientos del dispositivo asociados con el nivel de característica del objeto de estado de contexto y su interfaz compatible se activan en el dispositivo Direct3D hasta la siguiente llamada a SwapDeviceContextState.
Cuando un objeto de estado de contexto está activo, el tiempo de ejecución deshabilita determinados métodos en las interfaces de dispositivo y contexto. Por ejemplo, un objeto de estado de contexto creado con __uuidof(ID3D11Device)
hará que el tiempo de ejecución desactive la mayoría de las interfaces de dispositivo de Microsoft Direct3D 10 y un objeto de estado de contexto creado con __uuidof(ID3D10Device1)
o __uuidof(ID3D10Device)
hará que el tiempo de ejecución desactive la mayoría de los métodos ID3D11DeviceContext .
Este comportamiento garantiza que un usuario de cualquiera de las interfaces emuladas no pueda establecer el estado del dispositivo que la otra interfaz emulada no pueda expresar. Esta restricción ayuda a garantizar que la interfaz emulada ID3D10Device1 refleje con precisión el estado completo de la canalización y que la interfaz emulada no funcionará contrariamente a su definición de interfaz original.
Por ejemplo, supongamos que la fase de teselación se activa a través de la interfaz ID3D11DeviceContext al crear el dispositivo a través de D3D11CreateDevice o D3D11CreateDeviceAndSwapChain, en lugar de a través de los equivalentes de Direct3D 10. Dado que el contexto de Direct3D 11 está activo, una interfaz de Direct3D 10 está inactiva cuando se recupera por primera vez a través de QueryInterface. Esto significa que no puedes pasar inmediatamente una interfaz de Direct3D 10 que recuperaste de un dispositivo Direct3D 11 a una función. Primero debes llamar a SwapDeviceContextState para activar un objeto de estado de contexto compatible con Direct3D 10.
En la tabla siguiente se muestran los métodos que están activos e inactivos para cada interfaz emulada.
Interfaz emulada | Interfaces de contexto de dispositivo activo o inmediato | Interfaces de contexto de dispositivo inactivas o inmediatas |
---|---|---|
ID3D10Dispositivo | ||
ID3D11DeviceContext (tal como lo publica el contexto inmediato. La interfaz emulada direct3D 10.1 o Direct3D 10.1 no tiene ningún efecto en los contextos diferidos). |
En la tabla siguiente se muestran los métodos de contexto inmediatos que el tiempo de ejecución deshabilita cuando los objetos de estado de contexto indicados están activos.
Métodos de ID3D11DeviceContext cuando __uuidof(ID3D10Device1) o __uuidof(ID3D10Device) está activo |
Métodos de ID3D10Device cuando __uuidof(ID3D11Device) está activo |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
En la tabla siguiente se muestran los métodos de contexto inmediatos que el tiempo de ejecución no deshabilita cuando los objetos de estado de contexto indicados están activos.
Métodos de ID3D11DeviceContext cuando __uuidof(ID3D10Device1) o __uuidof(ID3D10Device) está activo |
Métodos de ID3D10Device cuando __uuidof(ID3D11Device) está activo |
---|---|
En la tabla siguiente se muestran los métodos de interfaz ID3D10Device que el runtime no deshabilita porque no son métodos de contexto inmediatos.
Métodos de ID3D10Device |
---|
Crear*, como CreateQuery |
Windows Phone 8: se admite esta API.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8 y Actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2012 y actualización de plataforma para Windows Server 2008 R2 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | d3d11_1.h |
Library | D3D11.lib |