Partilhar via


Considerações sobre o desempenho de Direct3D9 e interoperabilidade com WPF

Você pode hospedar o conteúdo de Direct3D9 usando o D3DImage classe. Hospedagem de conteúdo de Direct3D9 pode afetar o desempenho do seu aplicativo. Este tópico descreve as práticas recomendadas para otimizar o desempenho ao hospedar o conteúdo de Direct3D9 em um aplicativo de Windows Presentation Foundation (WPF). Essas práticas incluem como usar D3DImage e práticas recomendadas quando você estiver usando o Windows Vista, Windows XP e exibe vários monitores.

Observação

Para obter exemplos de código que demonstram essas práticas recomendadas, consulte WPF e a interoperação de Direct3D9.

Use o D3DImage com moderação

O conteúdo de Direct3D9 hospedado em um D3DImage instância não processa como rapidamente como em um aplicativo Direct3D puro. Copiando a superfície e liberar o buffer de comando podem ser caras operações. Como o número de D3DImage aumenta de instâncias, liberando mais ocorre e o desempenho cai. Portanto, você deve usar D3DImage com moderação.

Práticas recomendadas no Windows Vista

Para melhor desempenho no Windows Vista com uma exibição que está configurado para usar o Windows exibir Driver WDDM (Model), criar sua superfície de Direct3D9 em um IDirect3DDevice9Ex dispositivo. Isso permite o compartilhamento de superfície. A placa de vídeo deve oferecer suporte a D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES e D3DCAPS2_CANSHARERESOURCE recursos de driver no Windows Vista. Outras configurações, fazer com que a superfície a ser copiada por meio de software, que reduz significativamente o desempenho.

Observação

Se o Windows Vista possui uma exibição que está configurada para usar o Windows XP exibir Driver modelo (XDDM), a superfície é sempre copiada através de software, independentemente das configurações.Com as configurações adequadas e a placa de vídeo, você verá um melhor desempenho no Windows Vista quando você usa o WDDM porque as cópias de superfície são executadas no hardware.

Práticas recomendadas no Windows XP

Para obter melhor desempenho no Windows XP, que usa o modelo de Driver de vídeo (XDDM) do Windows XP, criar uma superfície de bloqueável comporta-se corretamente quando o IDirect3DSurface9::GetDC método é chamado. Internamente, o BitBlt método transfere a superfície em dispositivos de hardware. O GetDC método sempre funciona em superfícies XRGB. No entanto, se o computador cliente executando o Windows XP com SP3 ou SP2, e o cliente também possui o hotfix para o recurso de janela em camadas, este método só funciona em superfícies ARGB. A placa de vídeo deve oferecer suporte a D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES recurso de driver.

Uma profundidade de exibição da área de trabalho de 16 bits pode reduzir significativamente o desempenho. Recomenda-se uma área de trabalho de 32 bits.

Se você estiver desenvolvendo para o Windows Vista e Windows XP, teste o desempenho no Windows XP. Execução de memória de vídeo no Windows XP é uma preocupação. Além disso, D3DImage no Windows XP usa o vídeo de mais memória e largura de banda que o Windows Vista WDDM, devido a uma cópia de memória de vídeo extra necessário. Portanto, você pode esperar um desempenho pior no Windows XP do que no Windows Vista seja o mesmo hardware de vídeo.

Observação

XDDM está disponível no Windows XP e no Windows Vista; No entanto, o WDDM está disponível apenas no Windows Vista.

Práticas recomendadas gerais

Ao criar o dispositivo, use o D3DCREATE_MULTITHREADED criação sinalizador. Isso reduz o desempenho, mas o sistema de renderização do WPF chama métodos neste dispositivo de outro segmento. Certifique-se de seguir o protocolo de bloqueio corretamente, para que nenhum dois threads acessem o dispositivo ao mesmo tempo.

Se o seu processamento é executado em um segmento gerenciado do WPF, é altamente recomendável que você criar o dispositivo com o D3DCREATE_FPU_PRESERVE criação sinalizador. Sem essa configuração, o processamento do D3D pode reduzir a precisão das operações de dupla precisão do WPF e apresentar problemas de processamento.

Ladrilhar uma D3DImage é rápida, a menos que o lado a lado uma superfície não pow2 sem suporte de hardware, ou se você colocar lado a lado um DrawingBrush ou VisualBrush que contém um D3DImage.

Práticas recomendadas para exibe vários monitores

Se você estiver usando um computador que possui vários monitores, você deve seguir as práticas recomendadas descritas anteriormente. Também há algumas considerações adicionais de desempenho para uma configuração de vários monitores.

Quando você cria o buffer de fundo, ele é criado em um dispositivo específico e o adaptador, mas o WPF pode exibir o buffer frontal em qualquer adaptador. Copiando através de adaptadores para atualizar o buffer frontal pode ser muito caro. No Windows Vista que está configurado para usar o WDDM com várias placas de vídeo e com um IDirect3DDevice9Ex o dispositivo, não se o buffer frontal estiver em um adaptador diferente, mas ainda a mesma placa de vídeo, há nenhuma penalidade de desempenho. No entanto, no Windows XP e o XDDM com várias placas de vídeo, há uma penalidade de desempenho significativo quando o buffer frontal é exibido em um adaptador diferente que o buffer de fundo. For more information, see WPF e a interoperação de Direct3D9.

Resumo do desempenho

A tabela a seguir mostra o desempenho da atualização do buffer frontal como uma função do sistema operacional, o formato de pixel e lockability de superfície. O buffer frontal e traseiro do buffer são considerados no mesmo adaptador. Dependendo da configuração do adaptador, atualizações de hardware são geralmente muito mais rápidas que as atualizações de software.

Formato de pixel de superfície

O WDDM, 9Ex e no Windows Vista

Outras configurações do Windows Vista

O Windows XP SP3 ou o SP2 com o hotfix

Windows XP SP2

D3DFMT_X8R8G8B8 (não bloqueáveis)

Atualização de hardware

Atualização de software

Atualização de software

Atualização de software

D3DFMT_X8R8G8B8 (bloqueáveis)

Atualização de hardware

Atualização de software

Atualização de hardware

Atualização de hardware

D3DFMT_A8R8G8B8 (não bloqueáveis)

Atualização de hardware

Atualização de software

Atualização de software

Atualização de software

D3DFMT_A8R8G8B8 (bloqueáveis)

Atualização de hardware

Atualização de software

Atualização de hardware

Atualização de software

Consulte também

Tarefas

Demonstra Passo a passo: A criação de conteúdo de Direct3D9 para hospedagem no WPF

Demonstra Passo a passo: Hospedagem de conteúdo de Direct3D9 no WPF

Referência

D3DImage

Conceitos

WPF e a interoperação de Direct3D9