Clique aqui para instalar o Silverlight*
BrasilAlterar|Todos os sites da Microsoft
MSDN
|Developer Centers|Biblioteca|Downloads|Assinaturas MSDN
Pesquisa rápida


A história do desenvolvedor do Windows Vista: DirectX

Microsoft Corporation

Publicado em: 17 de outubro de 2006

A História do desenvolvedor do Windows Vista (em inglês) inclui conteúdo para desenvolvedores, bem como outros especialistas em tecnologia e gerentes da área, interessados em explorar profundamente os recursos novos e aprimorados do Windows Vista. Ela foi lançada no Windows Vista Developer Center na forma de artigos curtos publicados a cada duas semanas. Esses artigos são apenas um resumo do arquivo de Ajuda do Windows, que pode ser baixado aqui.

Observação  esse tópico é uma documentação de pré-lançamento e está sujeito a alterações em lançamentos futuros.

Observação   para fazer comentários sobre os artigos, envie um email para Vistadev@microsoft.com.

*
Nesta página
IntroduçãoIntrodução
ArquiteturaArquitetura
O Windows Vista Display Driver Model (WDDM)O Windows Vista Display Driver Model (WDDM)
Direct3D 10Direct3D 10
Direct3D 9Ex Direct3D 9Ex

Introdução

O Direct3D sempre ofereceu as APIs de melhor desempenho para o processamento de gráficos na plataforma Windows. O lançamento do Windows Vista leva essas tecnologias ao próximo nível. O Direct3D agora está diretamente integrado ao Vista que usa a pipeline de gráficos do Direct3D para composição da área de trabalho, o Picture Viewer e o Windows Presentation Foundation.

Este artigo resume alguns dos novos recursos do Direct3D Vista com o objetivo de explicar como eles podem beneficiar um desenvolvedor do DirectX. Cada seção também indica onde podem ser encontradas informações adicionais sobre o recurso.

Mais artigos sobre o Direct3D podem ser encontrados no arquivo de Ajuda do Windows que pode ser baixado na página Windows Vista Developer Story.

Arquitetura

O Windows Vista apresenta dois novos tipos de DirectX: o Direct3D 9Ex e o Direct3D 10.

O Direct3D 9Ex é uma versão expandida do DirectX, projetada para aplicativos que usam o Direct3D 9, mas também desejam usar alguns dos recursos do novo driver do Windows Vista.

O Direct3D 10 é uma nova tecnologia do DirectX, inteiramente reconstruída para o Windows Vista. Ele oferece os recursos mais avançados de processamento de gráficos disponíveis.

Adicionalmente, o Direct3D 9 e as APIs herdadas do DirectX ainda funcionam no Windows Vista, permitindo compatibilidade retroativa do código herdado.

O Windows Vista Display Driver Model (WDDM)

Tanto o Direct3D 9Ex como o Direct3D 10 estão integrados ao novo Windows Display Driver Model (WDDM). O hardware de gráfico precisa implementar o WDDM para poder utilizar o Direct3D no Vista.

O WDDM proporciona maior estabilidade, alocação virtualizada de memória, segurança e capacidade de multitarefa com o processador gráfico (GPU).

A maior estabilidade foi alcançada no WDDM pela divisão dos drivers em dois componentes: um driver de modo kernel simplificado e um driver de modo usuário. Por meio da retirada da maior parte do código de driver do kernel, o WDDM permite que o sistema seja recuperado de paralisações e falhas fatais sem interromper todo o sistema operacional.

O WDDM agora permite memória de vídeo virtualizada. A virtualização abstrai memória de vídeo de modo que não é mais preciso pensar em criar um recurso na memória do vídeo ou do sistema. Especifique apenas qual o recurso que será usado e o sistema colocará a memória no melhor local possível. Além disso, a virtualização possibilita a alocação de mais memória do que a realmente existente no hardware. A memória é então paginada no hardware correto conforme necessário.

As alocações de memória estão limitadas ao espaço de localização do aplicativo por razões de segurança. O WDDM oferece maior segurança através do isolamento de aplicativos e seus recursos uns dos outros.

O modelo de driver anterior (XPDM) foi projetado para um único aplicativo que fazia uso pesado do hardware gráfico. Isso foi feito por razões de desempenho, mas dificultava o compartilhamento da GPU. A maioria dos usuários vivenciava situações em que o uso das teclas Alt Tab em um jogo forçava um estado de perda do dispositivo no aplicativo. Quando o foco retornava ao jogo, era necessário recriar todos os recursos e redefinir o dispositivo, o que, na melhor das hipóteses, demorava e, na pior, provocava erros de travamento.

Agora o WDDM oferece um gerenciador e um agendador de memória GPU que permitem o acesso simultâneo de diversos aplicativos à GPU. Como os aplicativos Direct3D não requerem mais acesso exclusivo à GPU é possível alternar o foco entre aplicativos com poucas penalidades. Com o WDDM Direct3D os dispositivos só são perdidos durante atualizações de drivers, remoção física do dispositivo, redefinição da GPU e erros inesperados.

O WDDM imita o comportamento de modelos de driver anteriores quando executa versões legadas do DirectX.

Para obter mais informações sobre o WDDM, veja Windows Vista Display Driver Model.

Direct3D 10

O tempo de execução em camadas do Direct3D 10

O Direct3D 10 é construído em 4 camadas; uma fina camada de núcleo e três camadas opcionais que acrescentam funcionalidade.

Nome da camada*
Descrição*

Core

Fornece todas as funcionalidades básicas e é a única camada exigida para acessar o Direct3D 10.

Depurar

Adiciona validação de parâmetros e de consistência e muita saída de depuração.

Shader-Reflection

Oferece métodos que permitem que um aplicativo recupere informações de sombra ou de efeito a partir do dispositivo.

Thread-Safe

Permite que aplicativos multithread acessem o dispositivo. Essa camada é ativada por padrão, mas não causa um impacto de desempenho em aplicativos de thread única.

Pode-se especificar diferentes combinações de camadas quando o dispositivo é criado.

Veja "API Layers" na documentação do Direct3D 10 para obter mais detalhes.

Observação   para obter o DirectX SDK, consulte Microsoft DirectX Downloads.

A pipeline gráfica do Direct3D 10

Versões anteriores do Direct3D ofereciam alguns algoritmos predefinidos chamados de pipeline gráfica Fixed-Function. Os recursos de memória como modelos geométricos e texturas eram executados por esses algoritmos para gerar a imagem final exibida. Havia muitos modos diferentes para configurar esses algoritmos de modo a gerar efeitos diferentes, mas um desenvolvedor não podia programar a pipeline para criar novos efeitos gráficos.

O Direct3D 8 introduziu a programação do modelo de pipeline programável de gráficos, que quebra a pipeline em diversos estágios, cada um dos quais é responsável por um tipo específico de processamento de recursos. O Direct3D 10 generalizou e aumentou ainda mais a capacidade da pipeline programável. O Direct3D 10 tem sete estágios, três dos quais são programáveis. Os estágios programáveis da pipeline permitem que um desenvolvedor crie o algoritmo usado pelo estágio por meio da escrita de um sombreador.

A tabela a seguir lista os estágios de pipeline:

Nome do estágio*
Descrição*

Input Assembler Stage

NOVO: Fornece dados geométricos (triângulos, linhas, pontos) para a pipeline.

Vertex Shader Stage

Estágio programável que processa vértices individuais de dados geométricos. Mover e iluminar os vértices são operações comuns.

Geometry Shader Stage

NOVO: Estágio programável que processa geometria primitiva (triângulos inteiros, linhas ou pontos). Este estágio pode criar e servir de saída para nova geometria com base na entrada primitiva. Os sombreadores podem ser usados neste estágio para criar formas inteiras por meio de programação.

Stream Output Stage

NOVO: Escreve dados de vértice gerados a partir dos estágios que vêm antes dele na memória. Isto pode ser usado para alimentar os vértices de volta à pipeline para outra passagem ou para permitir que sejam copiados para processamento pela CPU.

Rasterizer Stage

Define a geometria de modo que possa ser mapeada no modo de exibição em 2D que é finalmente exibida.

Pixel Shader Stage

Estágio programável que calcula um valor de pixel para cada processamento primitivo. Os sombreadores neste estágio podem ser usados para gerar efeitos avançados de iluminação ou reflexo por pixel.

Output Merger Stage

Combina os vários tipos de dados de saída com buffers de profundidade/estêncil e escreve o resultado no alvo processado.

Veja a seção "Pipeline Stages" na documentação do Direct3D 10 para obter mais informações.

Sombreadores do Direct3D 10

Um sombreador é um conjunto de comandos que aceita recursos gráficos como entrada, executa uma série de instruções sobre os recursos e apresenta o resultado. O Direct3D 10 oferece três tipos diferentes de sombreadores que correspondem aos três estágios programáveis da pipeline: Vertex Shaders, Geometry Shaders e Pixel Shaders. Todos os sombreadores baseiam-se em um núcleo sombreador comum e fornecem a mesma funcionalidade de base. Além da funcionalidade de base, cada tipo de sombreador oferece alguma funcionalidade única e específica a seu estágio particular. Os sombreadores são escritos usando a HLSL (High Level Shading Language) que permite a programação de sombreadores em um nível de algoritmo. Não há limite para o número de instruções em um sombreador.

As informações do sombreador agora podem ser recuperadas por meio de reflexo com o uso das interfaces ID3D10ShaderReflection se a camada Shader-Reflection for incluída na criação do dispositivo.

Veja a seção "Shader Features" da documentação do Direct3D 10 para obter mais informações.

Geometry Shaders

Novos no DirectX, o recurso Geometry Shaders pode criar objetos geométricos para a cena em 3D. Isto pode ser usado para gerar uma ampla variedade de efeitos. Shadow Volumes, Fur, Fins, geometria de procedimento, detalhamento, sistemas de partículas de GPU, efeitos de deslocamento e vegetação programática (veja "Pipes GS Sample" na documentação do Direct3D 10) são apenas alguns exemplos do que pode ser realizado com esse novo e potente tipo de sombreador. Como o sombreador é executado na GPU, os recursos da CPU não são consumidos e ficam liberados para outras tarefas.

Veja a seção "Tutorial 13: Geometry Shader" da documentação do Direct3D 10 para obter um exemplo de sombreadores de geometria em ação.

O estágio de Stream Output

Novo no DirectX, o estágio Stream Output escreve dados de vértice a partir da pipeline gráfica em um buffer. Isso permite que os dados de vértice gerados pelo estágio Vertex Shader ou pelo estágio Geometry Shader (dependendo da configuração da pipeline) sejam lidos de volta à pipeline para outra passagem. Isso pode ser realizado por meio do comando DrawAuto sem envolvimento da CPU. Ou então, os dados podem ser copiados em um recurso para ser processado posteriormente pela CPU.

Veja a seção "Stream-Output Stage" da documentação do Direct3D 10 para obter mais informações.

cbuffers e tbuffers

A HLSL proporciona dois tipos de buffers para armazenamento de variáveis constantes, cbuffers e tbuffers. Um cbuffer age como um struct C nos Effect Files.

Aqui está o exemplo de um Constant Buffer que declara uma matriz de mundo, uma posição de objeto e um índice de matrizes:

cbuffer MyObject { float4x4 matWorld; float3 vObjectPosition; int arrayIndex; }

No Direct3D 10 todas as constantes de sombreadores devem ser colocadas em Constant Buffers. Você pode colocar todas as Constants em um buffer ou em muitos buffers, organizando-as de qualquer modo. Muitas vezes, organizar as constantes em buffers com base na freqüência com que são atualizadas ou usadas traz um bom desempenho. Ao organizar as constantes pela freqüência de atualização, você pode reduzir o número de chamadas e atualizações necessárias, o que maximiza a eficiência da CPU para a largura de banda da GPU. A latência ao acessar esses buffers a partir de um sombreador é reduzida.

Os tbuffers no Direct3D 10 são constantes de sombreador que fazem a leitura nas cargas de textura. Isto dá a eles melhor desempenho para dados indexados arbitrariamente.

Veja "Shader Constant Variables" na documentação do Direct3D 10 para obter mais informações.

Device State

O Direct3D 10 organiza o estado do dispositivo em cinco objetos de estado.

Objeto de estado*
Descrição*

Input Layout

Define o formato e o tamanho dos dados geométricos no buffer de entrada que flui os primitivos da memória para a pipeline.

Rasterizer

Define o estado do Rasterizer Stage inclusive os modos preencher ou eliminar, ativando retângulos de recorte para recortar e mapear primitivos geométricos em espaço 3D para o visor 2D.

DepthStencil

Configura o buffer de profundidade e define o teste de estêncil.

Blend

Define como o estágio de Output Merger mistura a saída do Pixel Shader com o alvo processado atual.

Sampler

Define uma amostra de textura usada pelos sombreadores para filtrar as texturas na memória.

Veja a seção "State Objects" na documentação do Direct3D 10 para obter mais informações. O "Tutorial 14: State Management" demonstra algumas das coisas interessantes que você pode fazer com os objetos de estado.

Juntando as peças: Effects

O sistema Effects do Direct3D 10 foi totalmente reescrito. O sistema FX10 é muito mais rápido do que o FX9 e o uso de memória é mais baixo, pois o FX10 está voltado especificamente para o hardware do Direct3D 10.

O Effects permite que os desenvolvedores criem um arquivo que contenha todos os sombreadores e estados de dispositivos necessários para uma abordagem gráfica específica. Isso pode incluir mapeamento de deslocamento, processamento de reflexão, criação de geometria ou, literalmente, o resultado de qualquer combinação de sombreadores e estados de dispositivo. O sistema Effects é útil porque encapsula uma técnica gráfica específica que permite que um desenvolvedor use o mesmo Effect file em aplicativos de criação de conteúdo, de diferentes jogos e em outros aplicativos para atingir o mesmo resultado.

Os Effects podem ser compilados em código de byte para obter um melhor desempenho de tempo de execução. Caso contrário, eles serão compilados ao serem carregados na memória.

Muitos dos exemplos na documentação do Direct3D 10 usam arquivos FX. Veja a seção "Tutorial 3: Shaders and Effect System" para obter uma discussão abrangente sobre o uso dos effect files.

Resources

O Direct3D 10 reprojetou a arquitetura de recursos. Os recursos são uma área na memória que pode ser acessada pela pipeline gráfica. Os recursos normalmente contêm itens como texturas, geometria de entrada, recursos de sombreador, buffers de vértice, buffers de índice e buffers de constantes.

Para cada recurso criado, o desenvolvedor por equilibrar a quantidade de funcionalidade que o recurso requer com o desempenho do recurso. De modo geral, o acesso aos recursos do Direct3D 10 tem uma sobrecarga muito mais baixa do que nas versões anteriores do DirectX.

O Direct3D 10 apresenta texture arrays para simplificar o gerenciamento de texturas. Uma matriz de textura contém uma ou mais texturas que podem ser indexadas a partir de um aplicativo ou por meio de sombreadores. Uma matriz inteira também pode ser definida como um alvo processado.

Agora os recursos podem ser armazenados sem especificação de tipo. Na utilização de um recurso sem especificação de tipo, ele deve ser interpretado como um tipo específico quando se obtém uma exibição. Uma exibição permite que os dados em um recurso sejam reinterpretados em um formato diferente. Isso modifica sua apresentação, mas não muda os dados reais subjacentes. Essa abordagem aumenta o desempenho porque os recursos não precisam ser validados quanto ao tipo em cada chamada de desenho.

As exibições podem possibilitar diversas interpretações dos recursos em diferentes locais de ligações (na pipeline gráfica). Por exemplo, um modo de exibição de recurso de sombreador pode interpretar uma Texture2DArray com seis texturas como um mapa de cubo.

Veja a seção "Resources" da documentação do Direct3D 10 para obter uma discussão abrangente sobre os recursos.

Direct3D 10 e CAPS

As versões anteriores do DirectX usam sinalizadores de recursos ou CAPS para determinar quais recursos eram suportados pelo hardware. Com o Direct3D 10, todas as funcionalidades têm garantia de funcionamento em hardware de vídeo compatível com o Direct3D 10, eliminando a necessidade de consultar o dispositivo para CAPS.

Aplicativos anteriores que dependem de caps de dispositivos podem contornar o fato de que eles não existem mais substituindo a enumeração de dispositivos e forçando os CAPS de dispositivos para valores razoáveis.

Direct3D 9Ex

O Direct3D 9Ex inclui diversos aperfeiçoamentos que permitem a utilização de alguns recursos do WDDM.

Uma das principais vantagens novas do Direct3D 9Ex é a capacidade de usar o gerenciador e o agendador de memória GPU do WDDM para reduzir o número de situações em que o dispositivo é perdido. Como muitos aplicativos podem compartilhar a GPU no WDDM, um número menor de situações agora causa um estado de perda de dispositivo no Direct3D 9Ex. O dispositivo só é perdido quando o hardware é redefinido devido a uma falha ou quando o driver do dispositivo pára. Alterações de modo não fazem com que todos os recursos de memória de vídeo e cadeias trocadas sejam descartados.

O compartilhamento de recursos do Direct3D entre dispositivos ou processos agora também é permitido por meio do Direct3D 9Ex.

Para obter mais informações sobre o Direct3D 9Ex, veja a seção DirectX for Windows Vista (em inglês) da documentação do Microsoft Windows SDK.

Exemplo

Um exemplo que demonstra os novos recursos no Direct3D 9Ex pode ser encontrado no Windows Platform SDK no seguinte caminho:

../Microsoft SDKs/Windows/v6.0/Samples/multimedia/Direct3d/Direct3D9Ex (em inglês)

Esse exemplo cria dois dispositivos DirectX: um é executado em uma thread de segundo plano de baixa prioridade e é responsável pelo processamento de diversos cubos; o outro é executado em uma thread de prioridade mais alta e compõe o processamento do segundo plano com um cursor em primeiro plano. O processamento do segundo plano é copiado em uma superfície compartilhada para permitir que o dispositivo de primeiro plano seja acessado. Isso permite que o cursor continue a comportar-se com fluidez quando o segundo plano for sobrecarregado pelo processamento.

Mais a seguir

Para ver mais artigos desta série, visite Windows Developer Story (em inglês) sobre o MSDN e baixe o arquivo de Ajuda do Windows. Retorne periodicamente para obter novos conteúdos em relação à programação no DirectX e a questões de compatibilidade, gerenciamento de memória, IO e mais sobre o Vista.


 

©2017 Microsoft Corporation. Todos os direitos reservados. Entre em contato |Nota Legal |Marcas comerciais |Política de Privacidade
Microsoft