Como verificar o suporte ao driver

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

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

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

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 marcar para suporte ao 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 oferecerá suporte a listas de comandos. Ou seja, renderizar comandos emitidos por um contexto imediato pode ser simultâneo com a criação de objeto em threads separados com baixo risco de gaguejar de taxa de quadros.

    • Se DriverConcurrentCreates for FALSE, um driver não oferecerá 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 threads diferentes de forma simultânea. 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