Introdução aos Contextos Adiados

Esta seção se aplica somente ao Windows 7 e posterior e ao Windows Server 2008 R2 e versões posteriores do sistema operacional Windows.

Contextos adiados são usados por um aplicativo para criar listas de comandos. Se um driver de exibição no modo de usuário indicar que ele dá suporte a listas de comandos por meio do sinalizador D3D11DDICAPS_COMMANDLISTS_BUILD_2 da estrutura D3D11DDI_THREADING_CAPS , ele também deverá dar suporte à capacidade de criar e manipular contextos adiados. Para obter mais informações sobre como o driver indica recursos de threading, consulte Suporte a threading, listas de comandos e pipeline 3D. Os contextos adiados diferem do contexto imediato, porque os comandos que o registro de contextos adiados não podem ser executados até que o aplicativo solicite explicitamente a execução dos comandos, executando a lista de comandos gerada. Para criar e usar um contexto adiado, o Direct3D versão 11 fornece as novas funções DDI a seguir. Essas funções são um subconjunto de informações necessárias para criar a combinação de contexto imediato/dispositivo.

A semântica das funções CalcPrivateDeferredContextSize e CreateDeferredContext é semelhante a outras funções DDI semelhantes.

O runtime do Direct3D passa um novo identificador de driver e um identificador de camada principal para cada chamada para a função CreateDeferredContext do driver para criar cada contexto adiado. O estado do pipeline de cada contexto adiado deve ser equivalente ao estado do pipeline que o contexto imediato tem depois que a operação de estado claro é executada nele. O driver deve preencher membros da estrutura D3D11DDI_DEVICEFUNCS para a qual o membro p11ContextFuncs de D3D11DDIARG_CREATEDEFERREDCONTEXT estrutura aponta para com um subconjunto das funções de sua tabela de funções; o runtime usa cada um dos contextos adiados correspondentes D3D10DDI_HDEVICE manipular valores que o membro hDrvContext de D3D11DDIARG_CREATEDEFERREDCONTEXT especifica com essa tabela de funções.

O driver deve continuar fornecendo funções que começam com pfnCreate, pfnOpen e pfnDestroy para o contexto adiado. Essas funções compartilham a mesma semântica de threading que o restante do contexto adiado e são usadas para abrir e fechar identificadores DDI locais de contexto, conforme descrito em Usando Context-Local identificadores DDI. As funções que começam com pfnCalcPrivate ou pfnCheck não são aproveitadas para contextos adiados; Portanto, o driver pode definir os membros de D3D11DDI_DEVICEFUNCS para essas funções como NULL quando o contexto adiado é criado. A maioria das funções de dispositivo restantes são aproveitadas para suporte de contexto adiado. No entanto, o driver não aproveita sua função QueryGetData . No entanto, o driver aproveita suas funções ResourceMap e ResourceUnmap . O driver dá suporte apenas à função ResourceIsStagingBusy e às novas funções DDI para fixações de recursos do Direct3D versão 11 no contexto imediato usando identificadores de contexto imediato. Para obter uma lista completa das funções que não são aproveitadas para contextos adiados, consulte Excluindo funções DDI para contextos adiados.

O driver aproveita as funções de retorno de chamada da camada principal fornecidas no bloco de memória para o qual o membro p11UMCallbacks do D3D11DDIARG_CREATEDEFERREDCONTEXT aponta. Essas funções de retorno de chamada de camada principal fornecem a DDI de estado de atualização para cada contexto adiado. O mais importante, no entanto, é a adição da função de retorno de chamada pfnPerformAmortizedProcessingCb descrita em Alterações do Direct3D 10.

O driver não deve esperar a função de retorno de chamada pfnDisableDeferredStagingResourceDestruction para a qual o membro pfnDisableDeferredStagingResourceDestruction de D3D11DDI_CORELAYER_DEVICECALLBACKS pontos seja válido. O driver deve ter chamado pfnDisableDeferredStagingResourceDestruction dentro da função CreateDevice(D3D10) para o contexto do dispositivo/imediato; posteriormente, o driver nunca deve chamar pfnDisableDeferredStagingResourceDestruction com a nova semântica de DDI do Direct3D versão 11.

A função RecycleCreateDeferredContext do driver deve limpar o estado do pipeline para o contexto adiado, semelhante a como CreateDeferredContext do driver limpa o estado do pipeline para o contexto adiado. Depois que o runtime chama AbandonCommandList, CreateCommandList ou RecycleCreateCommandList do driver, o runtime pode usar o identificador de contexto adiado com a função DestroyDevice(D3D10) ou RecycleCreateDeferredContext do driver. Para obter mais informações sobre RecycleCreateDeferredContext, confira Otimização para listas de comandos pequenos.