Método correto para escolher as placas de vídeo do usuário?

8

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?

Raptormeat
fonte

Respostas:

11

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

Miklas
fonte
Em última análise, acho que é isso que tenho que fazer. Ainda estou sentindo falta de algo importante aqui - outros jogos parecem escolher o adaptador certo, enquanto o meu falha - mas acho que a melhor coisa a fazer agora é apenas dar controle aos jogadores.
precisa saber é o seguinte
3
@Raptormeat: os drivers geralmente incluem "perfis" que eles usam para selecionar o dispositivo padrão para o aplicativo para jogos conhecidos, que é um dos motivos pelos quais outros jogos se comportam conforme o esperado, mas o seu não. Também existem hacks como o stackoverflow.com/questions/10535950/…, mas isso só funciona para a NVIDIA (e outros fornecedores de GPU não possuem equivalentes).
Sean Middleditch
11
Outra abordagem é executar alguns quadros representativos (use Flushe um destino fictício em vez de Presentem 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.
MooseBoys
3

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.

jmegaffin
fonte
2

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.

Brad Werth
fonte