Compartilhar via


Considerações sobre desempenho de Direct3D9 e interoperabilidade do WPF

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

ObservaçãoObservação:

Para obter exemplos de código que demonstram essas práticas recomendadas, consulte Criando conteúdo Direct3D9 que pode ser hospedado no WPF.

Use D3DImage com moderação

Conteúdo de Direct3D9 hospedado em um D3DImage instância não processa sistema autônomo rapidamente sistema autônomo em um aplicativo Direct3D puro. Copiando a superfície e liberar o buffer de comando podem ser caras operações. sistema autônomo o número de D3DImage instâncias aumenta, liberar mais ocorre e o desempenho fica prejudicado. Portanto, você deve usar D3DImage com moderação.

Práticas recomendadas no Windows Vista

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

ObservaçãoObservação:

Se o Windows Vista possui uma exibição que é configurado para usar o modelo de driver de vídeo do Windows XP ( XDDM ) , a superfície é sempre copiados por meio de software , independentemente das configurações. Com as configurações adequadas e placa de vídeo, você verá melhor desempenho no Windows Vista quando Você usa o WDDM como superfície cópias são realizadas no hardware.

Práticas recomendadas no Windows XP

Para obter um melhor desempenho no Windows XP, que usa o Windows XP Display Driver Model (XDDM), criar uma superfície bloqueáveis que se comporte corretamente quando o IDirect3DSurface9::GetDC método é chamado. Internamente, a BitBlt método transfere a superfície em dispositivos de hardware. The GetDC método sempre funciona em superfícies XRGB, mas ela só funciona em superfícies ARGB se o usuário tiver o Windows XP SP3 ou Windows XP SP2 com o hotfix de janela em camadas. O vídeo cartão deve oferecer suporte a D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES recurso de driver.

Uma profundidade de exibição da área de trabalho 16 bit pode reduzir significativamente o desempenho. É recomendável uma área de trabalho de 32 bit.

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

ObservaçãoObservação:

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

Práticas recomendadas Geral

Ao criar o dispositivo, use o D3DCREATE_MULTITHREADED sinalizar de criação. 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 time.

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

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

Práticas recomendadas para Multi-monitor exibida

Se você estiver usando um computador com 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, é criada em um dispositivo específico e um adaptador, mas 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 está configurado para usar o WDDM com várias placas de vídeo e com um IDirect3DDevice9Ex dispositivo, se for buffer frontal em um adaptador diferente, mas ainda a mesma placa de vídeo, não há nenhuma penalidade de desempenho. No entanto, no Windows XP e XDDM com várias placas de vídeo, há uma penalidade de desempenho significativa quando o buffer frontal é exibido em um adaptador diferente que o buffer de fundo. Para obter mais informações, consulte Criando conteúdo Direct3D9 que pode ser hospedado no WPF.

Resumo do desempenho

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

Formato de pixel de superfície

Windows Vista, o WDDM e 9Ex

Outras configurações do Windows Vista

Windows XP SP3 ou o SP2 com hotfix

Windows XP SP2

D3DFMT_X8R8G8B8 (não bloqueáveis)

Atualização de hardware

Atualização do software

Atualização do software

Atualização do software

D3DFMT_X8R8G8B8 (bloqueáveis)

Atualização de hardware

Atualização do software

Atualização de hardware

Atualização de hardware

D3DFMT_A8R8G8B8 (não bloqueáveis)

Atualização de hardware

Atualização do software

Atualização do software

Atualização do software

D3DFMT_A8R8G8B8 (bloqueáveis)

Atualização de hardware

Atualização do software

Atualização de hardware

Atualização do software

Consulte também

Tarefas

Demonstra Passo a passo: Criando conteúdo Direct3D9 para hospedagem no WPF

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

Conceitos

Criando conteúdo Direct3D9 que pode ser hospedado no WPF

Referência

D3DImage

Date

History

Motivo

Julho de 2008

Adicione novo tópico.

Alteração de recurso do SP1.