Compartilhar via


Exigir retroativamente Free-Threaded DDIs CalcPrivate

O Direct3D versão 11 requer retroativamente funções de driver de exibição no modo de usuário que começam com pfnCalcPrivate em funções DDI do Direct3D versão 10 que são de thread livre. Esse requisito retroativo corresponde ao comportamento das funções DDI do Direct3D versão 11 para sempre exigir pfnCalcPrivate* e pfnCalcDeferredContextHandleSize , mesmo que o driver indique que não dá suporte ao threading DDI. Para obter mais informações sobre como o driver indica suporte ao threading, consulte Suporte a threading, listas de comandos e pipeline 3D. O motivo para esse requisito retroativo é que essas funções normalmente são muito simples, pois retornam um valor imediato para o tamanho. As funções mais complexas decidem qual valor imediato retornar com base nos parâmetros passados para a função. O requisito de funções que começam com pfnCalcPrivate para realmente gravar dados em locais diferentes da pilha não existe. O requisito para que essas funções leiam dados diferentes de parâmetros é uma raridade. Qualquer requisito para ler dados não produz problemas de contenção. Esse fato permite que a API do Direct3D versão 11 use uma otimização muito necessária e impeça a execução de sincronização cara duas vezes por criação (por exemplo, qualquer chamada para criar um objeto como uma chamada para CreateResource(D3D10) ou CreateGeometryShader), em vez de apenas uma vez.

Uma exceção notável a esse requisito retroativo de thread livre é a função CalcPrivateDeviceSize usada para atender à criação do dispositivo de exibição. CalcPrivateDeviceSize está localizado na tabela de funções do adaptador (D3D10_2DDI_ADAPTERFUNCS ou D3D10DDI_ADAPTERFUNCS). CalcPrivateDeviceSize não se enquadra no grupo de funções que experimentaram o relaxamento no modelo de threading. Não é necessário liberar thread da função CalcPrivateDeviceSize .