Partilhar via


Como verificar o suporte ao driver

Este tópico mostra como determinar se os recursos multithreading (incluindo criação de recursos e listas de comandos) têm suporte para aceleração de hardware.

Recomendamos que os aplicativos verifiquem o suporte de hardware gráfico de multithreading. Se o driver e o hardware gráfico não derem suporte à criação de objetos multithreaded, o desempenho poderá ser limitado das seguintes maneiras:

  • A criação de vários objetos (mesmo de tipos diferentes) ao mesmo tempo pode ser limitada.
  • A criação de um objeto durante a renderização de comandos gráficos usando um contexto imediato pode ser limitada. Por exemplo, se o hardware não der suporte a multithreading, um aplicativo deverá evitar criar em um thread em segundo plano um objeto que exija muito tempo para ser criado. Uma operação de criação que leva muito tempo pode bloquear a renderização imediata do contexto e aumentar o risco de uma gagueira visual na taxa de quadros.

O runtime dá suporte a multithreading e listas de comandos, independentemente do suporte a driver e hardware; Se não houver suporte a driver e hardware para multithreads ou listas de comandos, o runtime emulará a funcionalidade. Para obter mais informações sobre multithreading, consulte Introdução ao Multithreading no Direct3D 11.

Para verificar o suporte do driver para multithreading:

  1. Inicialize um objeto de interface ID3D11Device. Por padrão, o multithreading está habilitado.
  2. Chame ID3D11Device::CheckFeatureSupport. Passe o valor D3D11_FEATURE_THREADING para o parâmetro Feature, passe a estrutura D3D11_FEATURE_DATA_THREADING para o parâmetro pFeatureSupportData e passe o tamanho da estrutura D3D11_FEATURE_DATA_THREADING para o parâmetro FeatureSupportDataSize .
  3. Se o método ID3D11Device::CheckFeatureSupport for bem-sucedido, a estrutura D3D11_FEATURE_DATA_THREADING que você passou na etapa anterior será inicializada com informações sobre o suporte a multithreading.
    • Se DriverConcurrentCreates for TRUE, um driver poderá criar mais de um recurso ao mesmo tempo (simultaneamente) em threads diferentes.

      Se DriverCommandLists for TRUE, o driver dará suporte a listas de comandos. Ou seja, os comandos de renderização emitidos por um contexto imediato podem ser simultâneos com a criação de objetos em threads separados com baixo risco de gagueira na taxa de quadros.

    • Se DriverConcurrentCreates for FALSE, um driver não dará suporte à criação simultânea, o que significa que a quantidade de simultaneidade possível é extremamente limitada. O hardware gráfico não pode criar objetos de diferentes tipos em diferentes threads simultaneamente. Além disso, o hardware gráfico não pode usar um contexto imediato para emitir comandos de renderização enquanto o hardware gráfico tenta criar um recurso em outro thread.

Como usar o Direct3D 11

Multithread