Meu jogo usa o DirectX 10, e estou tendo um problema em que os usuários relatam que meu jogo não está aparecendo na placa gráfica. Em vez disso, prefere rodar em sua placa Intel integrada, prejudicando o desempenho. É possível que isso esteja relacionado ao Windows 8. Também pode estar relacionado aos cartões móveis.
Até agora, eu estava criando o dispositivo DirectX 10 sem adaptador especificado (como já vi em todos os exemplos / demos até agora), para permitir que o DirectX escolha seu próprio adaptador. Aparentemente, vou ter que mudar isso.
Já tenho uma função que percorre todos os adaptadores disponíveis e escolhe aquele com a maior quantidade de memória dedicada. Isso funciona muito bem para corrigir o problema, mas é correto em geral?
Infelizmente, não posso confiar no cartão com saída de vídeo válida (ou seja: um monitor conectado), pois as máquinas afetadas por esse problema não relatam saídas para o cartão desejado.
Qual algoritmo posso usar para escolher corretamente qual adaptador usar com o DirectX?
Respostas:
A seleção do adaptador com a memória dedicada mais alta disponível pode funcionar em muitos casos, mas, em alguns casos, uma GPU com menos poder de processamento pode ter mais memória dedicada e o jogo ainda será executado no adaptador "errado".
Isso me leva a uma contra-pergunta: qual é o adaptador certo? Aquele com mais poder computacional? Aquele com mais memória? Aquele em que a tela principal está conectada? Aquele que consome menos energia? Todas essas perguntas provavelmente têm respostas diferentes por usuário. Alguém usando um laptop pode preferir bateria de longa duração a gráficos melhores. Alguém pode preferir jogar em seu monitor secundário (por exemplo, uma TV).
Portanto, muitos jogos permitem que o usuário decida qual GPU deseja usar. A maioria dos fabricantes de GPU possui painéis de controle nos quais a GPU preferida (mesmo por aplicativo) pode ser escolhida. Alguns jogos têm uma caixa de diálogo de inicialização que permite ao usuário selecionar explicitamente a GPU preferida. Essa caixa de diálogo de inicialização geralmente é mostrada apenas na primeira execução ou após falhas, portanto também pode funcionar como uma boa ferramenta de recuperação.
Nvidia preferido selecção GPU , AMD selecção GPU preferida , Flatout 2 selecção GPU preferida
fonte
Flush
e um destino fictício em vez dePresent
em uma cadeia de troca) em cada um e escolha o que concluir mais rápido como padrão. No entanto, você ainda deve permitir que os usuários escolham, pois eles podem optar por sacrificar a taxa de quadros para obter uma melhor duração da bateria.Permitiria ao jogador escolher qual placa de vídeo usar, ou seja, através de uma lista suspensa no menu de opções. Você pode usar a GPU com a maior VRAM detectada, velocidade do relógio etc. como padrão padrão. Você pode ir além e solicitar ao jogador que escolha entre "alto desempenho" e "economia de energia" (escolhe a carta com a menor especificação) para o padrão quando o jogo é iniciado pela primeira vez e, em seguida, permite que eles sejam mais específicos com sua escolha em o menu de opções.
Esta é uma solução simples que também não incomodará o player se ele escolher a placa de vídeo indesejada, pois é fácil o suficiente para trocá-la se ela escolher a incorreta.
fonte
Se você escolher o adaptador com base no que tem mais memória, pode estar tendo problemas para detectar com precisão a quantidade de memória usada pela Intel HD Graphics. Os gráficos HD da Intel têm acesso a dois bancos de memória; um dedicado e outro compartilhado com a CPU. O tamanho dos dois bancos é refletido na estrutura DXGI_ADAPTER_DESC como DedicatedVideoMemory e SharedSystemMemory. Para fins de comparação com outros adaptadores, você pode usar apenas o banco dedicado ou os dois.
A Intel possui um exemplo de detecção de GPU que também mostra como medir os dois bancos de memória.
fonte