Compartilhar via


Tipos de dispositivo e requisitos de processamento de vértice (Direct3D 9)

O desempenho das operações de processamento de vértice, incluindo transformação e iluminação, depende muito de onde o buffer de vértice existe na memória e do tipo de dispositivo de renderização que está sendo usado. Os aplicativos controlam a alocação de memória para buffers de vértice quando são criados. Quando o sinalizador de memória D3DPOOL_SYSTEMMEM é definido, o buffer de vértice é criado na memória do sistema. Quando o sinalizador de memória D3DPOOL_DEFAULT é usado, o driver do dispositivo determina onde a memória do buffer de vértice é melhor alocada, geralmente conhecida como memória ideal do driver. A memória ideal do driver pode ser memória de vídeo local, memória de vídeo não local ou memória do sistema.

Definir a constante D3DUSAGE_SOFTWAREPROCESSING com IDirect3DDevice9::CreateVertexBuffer habilita o processamento de vértice de software nos dados do buffer de vértice. Esse sinalizador é necessário para o processamento de vértice de software no modo misto. O sinalizador pode não ser usado para o modo de processamento de vértice de hardware. Os buffers de vértice usados com o processamento de vértice de software incluem o seguinte:

O raciocínio que você usa para determinar o local da memória - sistema ou driver ideal - para buffers de vértice é o mesmo que para texturas. O processamento de vértice, incluindo transformação e iluminação, em hardware funciona melhor quando os buffers de vértice são alocados na memória ideal do driver, enquanto o processamento de vértice de software funciona melhor com buffers de vértice alocados na memória do sistema. Para texturas, a rasterização de hardware funciona melhor quando as texturas são alocadas na memória ideal do driver, enquanto a rasterização de software funciona melhor com texturas de memória do sistema.

O Microsoft Direct3D 9 dá suporte ao processamento autônomo de vértices, sem renderizar nenhum primitivo com o método IDirect3DDevice9::P rocessVertices . Esse processamento de vértice autônomo é sempre executado no software no processador do host. Por isso, os buffers de vértice usados como fontes definidas com IDirect3DDevice9::SetStreamSource devem ser criados com o sinalizador D3DUSAGE_SOFTWAREPROCESSING. A funcionalidade fornecida por IDirect3DDevice9::P rocessVertices é idêntica à dos métodos IDirect3DDevice9::D rawPrimitive e IDirect3DDevice9::D rawIndexedPrimitive ao usar o processamento de vértice de software.

Se o aplicativo executar seu próprio processamento de vértice e passar vértices transformados, iluminados e recortados para métodos de renderização, o aplicativo poderá gravar diretamente vértices em um buffer de vértice alocado na memória ideal do driver. Essa técnica impede uma operação de cópia redundante mais tarde. Observe que essa técnica não funcionará bem se o aplicativo ler dados de volta de um buffer de vértice, pois as operações de leitura feitas pelo host da memória ideal do driver podem ser muito lentas. Portanto, se o aplicativo precisar ler durante o processamento ou gravar dados no buffer de forma errática, um buffer de vértice de memória do sistema será uma opção melhor.

Ao usar os recursos de processamento de vértice Direct3D (passando vértices nãotransformados para métodos de renderização de buffer de vértice), o processamento pode ocorrer em hardware ou software, dependendo do tipo de dispositivo e dos sinalizadores de criação do dispositivo. É recomendável que os buffers de vértice sejam alocados no pool D3DPOOL_DEFAULT para obter o melhor desempenho em praticamente todos os casos. Quando um dispositivo está usando o processamento de vértice de hardware, há várias otimizações adicionais que podem ser feitas com base nos sinalizadores D3DUSAGE_DYNAMIC e D3DUSAGE_WRITEONLY. Consulte IDirect3DDevice9::CreateVertexBuffer para obter mais informações sobre como usar esses sinalizadores.

Buffers de vértice