Direct3D - Direct3D

Direct3D
Desenvolvedor (s) Microsoft
lançamento inicial 2 de junho de 1996 ; 25 anos atrás ( 02/06/1996 )
Versão estável
12/29 de julho de 2015 ; 6 anos atrás ( 29/07/2015 )
Sistema operacional janelas
Plataforma x86 , ARM
Modelo API de gráficos 3D
Licença Proprietário
Local na rede Internet msdn .microsoft .com / en-us / library / windows / desktop / hh309466

Direct3D é uma interface de programação de aplicativos gráficos (API) para Microsoft Windows . Parte do DirectX , o Direct3D é usado para renderizar gráficos tridimensionais em aplicativos onde o desempenho é importante, como jogos. O Direct3D usa aceleração de hardware se estiver disponível na placa de vídeo , permitindo a aceleração de hardware de todo o pipeline de renderização 3D ou mesmo apenas aceleração parcial. O Direct3D expõe os recursos gráficos avançados do hardware gráfico 3D, incluindo Z-buffering , W-buffering, stencil buffering , anti-aliasing espacial , mistura alfa , mistura de cores, mapeamento mip , mistura de textura, recorte , seleção , efeitos atmosféricos, textura correta da perspectiva mapeamento , sombreadores HLSL programáveis e efeitos. A integração com outras tecnologias DirectX permite que o Direct3D forneça recursos como mapeamento de vídeo, renderização 3D de hardware em planos de sobreposição 2D e até sprites , fornecendo o uso de gráficos 2D e 3D em laços de mídia interativa.

O Direct3D contém muitos comandos para renderização de gráficos de computador 3D ; entretanto, desde a versão 8, o Direct3D substituiu a estrutura do DirectDraw e também assumiu a responsabilidade pela renderização de gráficos 2D . A Microsoft se esforça para atualizar continuamente o Direct3D para oferecer suporte à tecnologia mais recente disponível em placas de vídeo 3D. O Direct3D oferece emulação de software de vértice completo, mas nenhuma emulação de software de pixel para recursos não disponíveis no hardware. Por exemplo, se o software programado usando Direct3D requer pixel shaders e a placa de vídeo no computador do usuário não suporta esse recurso, Direct3D não irá emulá-lo, embora irá computar e renderizar os polígonos e texturas dos modelos 3D, embora em um qualidade e desempenho degradados em comparação com o equivalente em hardware. A API inclui um Reference Rasterizer (ou dispositivo REF), que emula uma placa gráfica genérica no software, embora seja muito lento para a maioria dos aplicativos 3D em tempo real e normalmente só seja usado para depuração. Um novo rasterizador de software em tempo real, WARP , projetado para emular o conjunto completo de recursos do Direct3D 10.1, está incluído no Windows 7 e no Windows Vista Service Pack 2 com a Atualização da Plataforma; seu desempenho é considerado igual ao de placas 3D de baixo custo em CPUs multi-core.

Como parte do DirectX , o Direct3D está disponível para Windows 95 e superior e é a base para a API de gráficos vetoriais nas diferentes versões dos sistemas de console Xbox . A camada de compatibilidade Wine , uma reimplementação de software livre de várias APIs do Windows, inclui uma implementação de Direct3D.

O principal concorrente do Direct3D é o OpenGL da Khronos e seu sucessor Vulkan . Fahrenheit foi uma tentativa da Microsoft e da SGI de unificar OpenGL e Direct3D na década de 1990, mas acabou sendo cancelada.

Visão geral

  • Direct3D 6.0 - Multitexturação
  • Direct3D 7.0 - Transformação, Clipping e Iluminação de Hardware (TCL / T & L)
  • Direct3D 8.0 - Pixel Shader 1.0 e Vertex Shader 1.0
  • Direct3D 8.0a - Pixel Shader 1.1, Pixel Shader 1.2, Pixel Shader 1.3
  • Direct3D 8.1 - Pixel Shader 1.4 e Vertex Shader 1.1
  • Direct3D 9.0 - Shader Model 2.0 (Pixel Shader 2.0 e Vertex Shader 2.0)
  • Direct3D 9.0b - Pixel Shader 2.0b
  • Direct3D 9.0c - Shader Model 3.0 (Pixel Shader 3.0 e Vertex Shader 3.0), GPGPU
  • Direct3D 9.0L - somente Windows Vista , Direct3D 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, DXVA 1.0, GPGPU
  • Direct3D 10.0 - Windows Vista / Windows 7, Shader Model 4.0 , Windows Graphics Foundation 2.0, DXVA 2.0, GPGPU
  • Direct3D 10.1 - Windows Vista SP1 / Windows 7, Shader Model 4.1, Windows Graphics Foundation 2.1, DXVA 2.1, GPGPU
  • Direct3D 11.0 - Windows Vista SP2 / Windows 7 , Shader Model 5.0, Tessellation, renderização multithread, sombreadores de computação, implementados por hardware e software executando Direct3D 9/10 / 10.1, GPGPU
  • Direct3D 11.1 - Windows 7 SP1 / Windows 8 , Renderização 3D estereoscópica, GPGPU
  • Direct3D 11.2 - Windows 8.1 , recursos Tiled, GPGPU
  • Direct3D 11.3 - Windows 10 , Shader Model 5.1, GPGPU
  • Direct3D 12.0 - Windows 10 , API de renderização de baixo nível , Shader Model 6.0, GPGPU

Direct3D 2.0 e 3.0

Em 1992, Servan Keondjian e Doug Rabson fundaram uma empresa chamada RenderMorphics, que desenvolveu uma API de gráficos 3D chamada Reality Lab , que era usada em imagens médicas e software CAD. Duas versões desta API foram lançadas. A Microsoft comprou o RenderMorphics em fevereiro de 1995, trazendo Keondjian a bordo para implementar um motor gráfico 3D para o Windows 95 . A primeira versão do Direct3D foi distribuída em DirectX 2.0 (2 de junho de 1996) e DirectX 3.0 (26 de setembro de 1996).

O Direct3D implementou inicialmente APIs 3D de " modo retido " e " modo imediato ". Como outras APIs DirectX, como DirectDraw , ambas foram baseadas em COM . O modo retido era uma API de gráfico de cena que teve pouca adoção. Os desenvolvedores de jogos clamavam por um controle mais direto das atividades do hardware do que o modo retido do Direct3D poderia fornecer. Apenas dois jogos que venderam um volume significativo, Lego Island e Lego Rock Raiders , foram baseados no modo retido do Direct3D, então a Microsoft não atualizou o modo retido após o DirectX 3.0.

Para DirectX 2.0 e 3.0, o modo imediato do Direct3D usava um modelo de programação de "buffer de execução" que a Microsoft esperava que os fornecedores de hardware suportassem diretamente. Os buffers de execução deveriam ser alocados na memória do hardware e analisados ​​pelo hardware para realizar a renderização 3D. Eles foram considerados extremamente difíceis de programar na época, no entanto, dificultando a adoção da nova API e solicitando que a Microsoft adotasse o OpenGL como a API oficial de renderização 3D para jogos e também para aplicativos de estação de trabalho. (consulte OpenGL vs. Direct3D )

Em vez de adotar o OpenGL como uma API de jogos, a Microsoft escolheu continuar melhorando o Direct3D, não apenas para ser competitiva com o OpenGL, mas para competir de forma mais eficaz com outras APIs proprietárias, como o Glide da 3dfx .

Desde o início, o modo imediato também suportava a renderização lado a lado do Talisman com os métodos BeginScene / EndScene da interface IDirect3DDevice.

Direct3D 4.0

Nenhuma mudança significativa foi planejada para Direct3D para DirectX 4.0 , que estava programado para ser lançado no final de 1996 e então cancelado.

Direct3D 5.0

Em dezembro de 1996, uma equipe em Redmond assumiu o desenvolvimento do Modo Imediato Direct3D, enquanto a equipe RenderMorphics baseada em Londres continuou a trabalhar no Modo Retido. A equipe de Redmond adicionou a API DrawPrimitive que eliminou a necessidade de aplicativos para construir buffers de execução, tornando o Direct3D mais parecido com outras APIs de renderização de modo imediato, como Glide e OpenGL . A primeira versão beta do DrawPrimitive foi lançada em fevereiro de 1997, e a versão final foi lançada com o DirectX 5.0 em agosto de 1997.

Além de apresentar uma API de modo imediato mais fácil de usar, o DirectX 5.0 adicionou o método SetRenderTarget que habilitou os dispositivos Direct3D a gravar sua saída gráfica em uma variedade de superfícies DirectDraw.

Direct3D 6.0

DirectX 6.0 (lançado em agosto de 1998) introduziu vários recursos para cobrir hardware contemporâneo (como multitexture e buffers de estêncil ), bem como pipelines de geometria otimizados para x87 , SSE e 3DNow! e gerenciamento de textura opcional para simplificar a programação. O Direct3D 6.0 também incluiu suporte para recursos que foram licenciados pela Microsoft de fornecedores de hardware específicos para inclusão na API, em troca da vantagem de tempo de colocação no mercado para o fornecedor de licenciamento. O suporte à compressão de textura S3 era um desses recursos, renomeado como DXTC para fins de inclusão na API. Outra era a técnica de mapeamento de relevo proprietária da TriTech . A Microsoft incluiu esses recursos no DirectX e, em seguida, os adicionou aos requisitos necessários para que os drivers obtenham um logotipo do Windows para encorajar a ampla adoção dos recursos em hardware de outros fornecedores.

Uma pequena atualização do DirectX 6.0 veio em fevereiro de 1999, na atualização do DirectX 6.1. Além de adicionar suporte para DirectMusic pela primeira vez, esta versão melhorou o suporte para extensões Intel Pentium III 3D.

Um memorando confidencial enviado em 1997 mostra a Microsoft planejando anunciar suporte total para o Talisman no DirectX 6.0, mas a API acabou sendo cancelada (veja a página do Microsoft Talisman para detalhes).

Direct3D 7.0

DirectX 7.0 (lançado em setembro de 1999) introduziu o formato de textura .dds e suporte para transformação e aceleração de hardware de iluminação (primeiro disponível em hardware de PC com GeForce 256 da Nvidia ), bem como a capacidade de alocar buffers de vértice na memória de hardware. Os buffers de vértice de hardware representam a primeira melhoria substancial em relação ao OpenGL na história do DirectX. O Direct3D 7.0 também aumentou o suporte DirectX para hardware de multitextura e representa o auge dos recursos de pipeline de multitextura de função fixa: embora poderoso, era tão complicado de programar que um novo modelo de programação foi necessário para expor os recursos de sombreamento do hardware gráfico.

Direct3D 8.0

O DirectX 8.0 , lançado em novembro de 2000, introduziu a programação na forma de sombreadores de vértice e pixel , permitindo que os desenvolvedores escrevam código sem se preocupar com o estado de hardware supérfluo. A complexidade dos programas de sombreador dependia da complexidade da tarefa, e o driver de vídeo compilava esses sombreadores com instruções que podiam ser entendidas pelo hardware. Direct3D 8.0 e seus recursos de sombreamento programáveis ​​foram o primeiro grande afastamento de uma arquitetura de função fixa de estilo OpenGL, onde o desenho é controlado por uma máquina de estado complicada. O Direct3D 8.0 também eliminou o DirectDraw como uma API separada. O Direct3D incluiu todas as chamadas de API do DirectDraw restantes ainda necessárias para o desenvolvimento de aplicativos, como Present (), a função usada para exibir os resultados da renderização.

O Direct3D não foi considerado amigável, mas a partir do DirectX versão 8.1, muitos problemas de usabilidade foram resolvidos. O Direct3D 8 continha muitos recursos gráficos 3D poderosos, como sombreadores de vértice , sombreadores de pixel , névoa , mapeamento de relevo e mapeamento de textura .

Direct3D 9

Direct3D 9.0 , lançado em dezembro de 2002, adicionou uma nova versão do suporte de High Level Shader Language para formatos de textura de ponto flutuante, Multiple Render Targets (MRT), Multiple-Element Textures, pesquisas de textura no vertex shader e técnicas de stencil buffer.

Direct3D 9Ex [1]

Uma extensão disponível apenas no Windows Vista e mais recente (7, 8, 8.1 e 10), chamada Direct3D 9Ex (anteriormente com versão 9.0L (L - codinome Windows Longhorn)), permite o uso das vantagens oferecidas pelo Windows Vista's Windows Display Driver Model (WDDM) e é usado para Windows Aero . O Direct3D 9Ex, em conjunto com os drivers WDDM da classe DirectX 9, permite que a memória gráfica seja virtualizada e paginada para a memória do sistema, permite que as operações gráficas sejam interrompidas e programadas e permitem que as superfícies DirectX sejam compartilhadas entre os processos. O Direct3D 9Ex era conhecido anteriormente como versão 1.0 do Windows Graphics Foundation (WGF).

Direct3D 10

O Windows Vista inclui uma atualização importante para a API Direct3D. Originalmente chamado de WGF 2.0 (Windows Graphics Foundation 2.0), então DirectX 10 e DirectX Next. O Direct3D 10 apresenta um modelo de sombreador atualizado 4.0 e interruptibilidade opcional para programas de sombreador. Neste modelo, os shaders ainda consistem em estágios fixos como nas versões anteriores, mas todos os estágios suportam uma interface quase unificada, bem como um paradigma de acesso unificado para recursos como texturas e constantes de shader. A linguagem em si foi estendida para ser mais expressiva, incluindo operações inteiras, uma contagem de instruções muito maior e mais construções de linguagem C-like. Além dos estágios de sombreador de vértice e pixel disponíveis anteriormente , a API inclui um estágio de sombreador de geometria que quebra o modelo antigo de um vértice de entrada / saída de um vértice, para permitir que a geometria seja realmente gerada de dentro de um sombreador, permitindo a geometria complexa ser gerado inteiramente no hardware gráfico.

O Windows XP não é compatível com DirectX 10.0 e superior.

Ao contrário das versões anteriores da API, o Direct3D 10 não usa mais "bits de capacidade" (ou "maiúsculas") para indicar quais recursos são suportados em um determinado dispositivo gráfico. Em vez disso, ele define um padrão mínimo de recursos de hardware que devem ser suportados para que um sistema de exibição seja "compatível com Direct3D 10". Esta é uma mudança significativa, com o objetivo de simplificar o código do aplicativo, removendo o código de verificação de capacidade e casos especiais com base na presença ou ausência de recursos específicos.

Como o hardware Direct3D 10 era comparativamente raro após o lançamento inicial do Windows Vista e devido à enorme base instalada de placas gráficas não compatíveis com Direct3D 10, os primeiros jogos compatíveis com Direct3D 10 ainda fornecem caminhos de renderização para Direct3D 9. Exemplos de tais títulos são jogos originalmente escritos para Direct3D 9 e portados para Direct3D 10 após seu lançamento, como Company of Heroes , ou jogos originalmente desenvolvidos para Direct3D 9 com um caminho Direct3D 10 adaptado posteriormente em desenvolvimento, como Hellgate: London ou Crysis . O DirectX 10 SDK foi disponibilizado em fevereiro de 2007.

Direct3D 10.0

O hardware de nível Direct3D 10.0 deve oferecer suporte aos seguintes recursos: a capacidade de processar primitivos inteiros no novo estágio de sombreador de geometria, a capacidade de enviar dados de vértice gerados por pipeline para a memória usando o estágio de saída de fluxo, suporte multisampled alfa-para-cobertura, readback de uma superfície de profundidade / estêncil ou um recurso multisampled, uma vez que não está mais vinculado como um destino de renderização, integração HLSL completa - todos os sombreadores Direct3D 10 são escritos em HLSL e implementados com operações de sombreador de núcleo comum, inteiro e bit a bit, organização de estado de pipeline em 5 objetos de estado imutáveis, organização de constantes de sombreador em buffers constantes, maior número de alvos de renderização, texturas e amostradores, sem limite de comprimento de sombreador, novos tipos de recursos e formatos de recursos, tempo de execução em camadas / camadas de API, opção de desempenho por - troca e configuração de material primitivo usando um sombreador de geometria, maior generalização de acesso a recursos usando uma visualização, bits de capacidade de hardware legados removidos (caps).

  • Os pipelines fixos estão sendo eliminados em favor de pipelines totalmente programáveis ​​(geralmente chamados de arquitetura de pipeline unificada), que podem ser programados para emular os mesmos.
  • Novo objeto de estado para habilitar (principalmente) a CPU para alterar estados de forma eficiente.
  • Shader model 4.0 aprimora a programabilidade do pipeline de gráficos . Ele adiciona instruções para cálculos inteiros e bit a bit.
  • O núcleo de sombreador comum fornece um conjunto completo de operações bit a bit e inteiras de 32 bits em conformidade com IEEE. Essas operações permitem uma nova classe de algoritmos em hardware gráfico - exemplos incluem técnicas de compactação e empacotamento, FFTs e controle de fluxo de programa de bitfield.
  • Shaders de geometria , que funcionam em triângulos adjacentes que formam uma malha .
  • Matrizes de textura permitem a troca de texturas na GPU sem intervenção da CPU.
  • A renderização predicada permite que as chamadas de desenho sejam ignoradas com base em algumas outras condições. Isso permite a seleção de oclusão rápida , o que evita que os objetos sejam renderizados se não estiverem visíveis ou muito distantes para serem visíveis.
  • Suporte à instância 2.0 , permitindo que várias instâncias de malhas semelhantes, como exércitos, ou grama ou árvores, sejam renderizadas em uma única chamada de empate, reduzindo o tempo de processamento necessário para vários objetos semelhantes ao de um único.

Direct3D 10.1

O Direct3D 10.1 foi anunciado pela Microsoft logo após o lançamento do Direct3D 10 como uma pequena atualização. A especificação foi finalizada com o lançamento do DirectX SDK de novembro de 2007 e o tempo de execução foi enviado com o Windows Vista SP1 , que está disponível desde meados de março de 2008.

O Direct3D 10.1 define mais alguns padrões de qualidade de imagem para fornecedores gráficos e oferece aos desenvolvedores mais controle sobre a qualidade da imagem. Os recursos incluem controle mais preciso sobre anti-aliasing (multisampling e supersampling com sombreamento por amostra e controle de aplicativo sobre a posição da amostra) e mais flexibilidade para alguns dos recursos existentes (matrizes de mapa de cubo e modos de combinação independentes). O hardware de nível Direct3D 10.1 deve oferecer suporte aos seguintes recursos: Multisampling foi aprimorado para generalizar a transparência baseada na cobertura e fazer com que o multisampling funcione de forma mais eficaz com renderização de várias passagens, melhor comportamento de seleção - faces de área zero são selecionadas automaticamente; isso afeta apenas a renderização de wireframe, modos de mistura independentes por alvo de renderização, nova execução de sombreador de pixel de frequência de amostra com rasterização primitiva, largura de banda de estágio de pipeline aumentada, superfícies MSAA de cor e profundidade / estêncil agora podem ser usadas com CopyResource como origem ou destino, MultisampleEnable afeta apenas a rasterização da linha (pontos e triângulos não são afetados) e é usada para escolher um algoritmo de desenho de linha. Isso significa que algumas rasterizações multisample do Direct3D 10 não são mais suportadas, as instruções Texture Sampling - sample_c e sample_c_lz são definidas para funcionar com Texture2DArrays e TextureCubeArrays usam o membro Location (o componente alfa) para especificar um índice de matriz, suporte para TextureCubeArrays.

  • Filtragem de ponto flutuante de 32 bits obrigatória .
  • Regras de ponto flutuante - Usa as mesmas regras IEEE-754 para ponto flutuante EXCETO que as operações de ponto flutuante de 32 bits foram apertadas para produzir um resultado dentro de 0,5 unidade-último lugar (0,5 ULP) do resultado infinitamente preciso. Isso se aplica a adição, subtração e multiplicação. (precisão de 0,5 ULP para multiplicação, 1,0 ULP para recíproco).
  • Formatos - A precisão da mistura float16 aumentou para 0,5 ULP. A mistura também é necessária para os formatos UNORM16 / SNORM16 / SNORM8.
  • Conversão de formato durante a cópia entre determinados recursos digitados e pré-estruturados de 32/64/128 bits e representações compactadas das mesmas larguras de bits.
  • Suporte obrigatório para 4x MSAA para todos os destinos de renderização, exceto R32G32B32A32 e R32G32B32.
  • Shader modelo 4.1

Ao contrário do Direct3D 10, que exigia estritamente o hardware da classe Direct3D 10 e interfaces de driver, o tempo de execução do Direct3D 10.1 pode ser executado no hardware Direct3D 10.0 usando um conceito de " níveis de recursos ", mas os novos recursos são suportados exclusivamente pelo novo hardware que expõe o nível de recursos 10_1.

O único hardware Direct3D 10.1 disponível em junho de 2008 era a série Radeon HD 3000 e a série Radeon HD 4000 da ATI ; em 2009, eles se juntaram a GPUs Chrome 430 / 440GT da S3 Graphics e alguns modelos de gama baixa da série GeForce 200 da Nvidia . Em 2011, os chipsets Intel começaram a suportar Direct3D 10.1 com o lançamento do Intel HD Graphics 2000 (GMA HD).

Direct3D 11

O Direct3D 11 foi lançado como parte do Windows 7. Ele foi apresentado no Gamefest 2008 em 22 de julho de 2008 e demonstrado na conferência técnica Nvision 08 em 26 de agosto de 2008. O Direct3D 11 Technical Preview foi incluído no lançamento de novembro de 2008 do DirectX SDK . A AMD fez uma prévia do hardware DirectX11 em funcionamento na Computex em 3 de junho de 2009, executando alguns exemplos do SDK do DirectX 11.

O tempo de execução do Direct3D 11 pode ser executado em drivers e hardware Direct3D 9 e 10.x-class usando o conceito de "níveis de recursos" , expandindo a funcionalidade introduzida pela primeira vez no tempo de execução do Direct3D 10.1. Os níveis de recursos permitem que os desenvolvedores unifiquem o pipeline de renderização na API Direct3D 11 e façam uso de melhorias na API, como melhor gerenciamento de recursos e multithreading, mesmo em cartões de nível básico, embora recursos avançados, como novos modelos de shader e estágios de renderização, só serão expostos em até hardware de nível. Existem três perfis "10 Nível 9" que encapsulam vários recursos de placas DirectX 9.0a populares, e Direct3D 10, 10.1 e 11 cada um tem um nível de recurso separado; cada nível superior é um superconjunto estrito de um nível inferior.

O Tessellation foi considerado anteriormente para o Direct3D 10, mas foi abandonado posteriormente. GPUs como Radeon R600 apresentam um mecanismo de mosaico que pode ser usado com Direct3D 9/10 / 10.1 e OpenGL, mas não é compatível com Direct3D 11 (de acordo com a Microsoft). Hardware gráfico mais antigo, como Radeon 8xxx, GeForce 3/4 tinha suporte para outra forma de tesselação (patches RT, patches N), mas essas tecnologias nunca tiveram uso substancial. Como tal, seu suporte foi retirado do hardware mais recente.

A Microsoft também sugeriu outros recursos, como transparência independente de pedido , que nunca foi exposta pela API Direct3D, mas suportada de forma quase transparente pelo hardware Direct3D anterior, como a linha de chips PowerVR da Videologic .

Direct3D 11.0

Os recursos do Direct3D 11.0 incluem: Suporte para Shader Model 5.0, vinculação dinâmica de shader, recursos endereçáveis, tipos de recursos adicionais, sub-rotinas, instanciação de geometria, cobertura como entrada de pixel shader, interpolação programável de entradas, novos formatos de compressão de textura (1 novo formato LDR e 1 novo Formato HDR), grampos de textura para limitar a pré-carga WDDM, exigem 8 bits de subtexel e precisão sub-mip na filtragem de textura, limites de textura de 16K, Gather4 (suporte para texturas de múltiplos componentes, suporte para deslocamentos programáveis), DrawIndirect, oDepth conservador, Depth Bias, saída de fluxo endereçável, fixação de mipmap por recurso, viewports de ponto flutuante, instruções de conversão de shader, multithreading aprimorado.

  • Shader Model 5
  • Suporte para Tessellation e Tessellation Shaders para aumentar em tempo de execução o número de polígonos visíveis de um modelo poligonal de baixo detalhe
  • Renderização multithread - para renderizar para o mesmo objeto de dispositivo Direct3D de diferentes threads para CPUs multicore
  • Compute shaders - que expõe o pipeline de shader para tarefas não gráficas, como processamento de stream e aceleração física, semelhante em espírito ao que OpenCL , Nvidia CUDA , ATI Stream e HLSL Shader Model 5 alcançam, entre outros.
  • Suporte obrigatório para 4x MSAA para todos os destinos de renderização e 8x MSAA para todos os formatos de destino de renderização, exceto os formatos R32G32B32A32.

Outros recursos notáveis ​​são a adição de dois novos algoritmos de compressão de textura para empacotamento mais eficiente de texturas HDR / alfa de alta qualidade e um cache de textura aumentado .

Visto pela primeira vez na versão Release Candidate , o Windows 7 integra o primeiro suporte a Direct3D 11 lançado. A atualização da plataforma para o Windows Vista inclui o tempo de execução do Direct3D 11 completo e a atualização do DXGI 1.1, bem como outros componentes relacionados do Windows 7 como WARP , Direct2D , DirectWrite e WIC .

Direct3D 11.1

Direct3D 11.1 é uma atualização da API fornecida com o Windows 8 . O tempo de execução do Direct3D no Windows 8 apresenta DXGI 1.2 e requer novos drivers de dispositivo WDDM 1.2 . A versão preliminar do Windows SDK para Windows 8 Developer Preview foi lançada em 13 de setembro de 2011.

A nova API apresenta rastreamento de sombreador e aprimoramentos de compilador HLSL, suporte para tipos de dados escalares HLSL de precisão mínima, UAVs (visualizações de acesso não ordenadas) em cada estágio de pipeline, rasterização independente de destino (TIR), opção para mapear SRVs de buffers dinâmicos com NO_OVERWRITE, sombreador processamento de recursos de vídeo, opção de usar operações lógicas em um alvo de renderização, opção de vincular uma subfaixa de um buffer constante a um sombreador e recuperá-lo, opção de criar buffers constantes maiores do que um sombreador pode acessar, opção de descartar recursos e visualizações de recursos , opção para alterar sub-recursos com novas opções de cópia, opção para forçar a contagem de amostra para criar um estado rasterizador, opção para limpar todo ou parte de uma visualização de recurso, opção para usar Direct3D em processos de Sessão 0, opção para especificar planos de clipe de usuário em HLSL no nível de recurso 9 e superior, suporte para shadow buffer no nível de recurso 9, suporte para reprodução de vídeo, suporte estendido para recursos compartilhados de Texture2D e troca instantânea entre Dire contextos e níveis de recursos do ct3D 10 e 11. O Direct3D 11.1 inclui o novo nível de recurso 11_1, que traz pequenas atualizações para a linguagem do sombreador, como buffers constantes maiores e instruções de precisão dupla opcionais, bem como modos de mesclagem aprimorados e suporte obrigatório para formatos de cores de 16 bits para melhorar o desempenho de entrada GPUs de alto nível, como Intel HD Graphics . WARP foi atualizado para oferecer suporte ao nível de recurso 11_1.

A atualização da plataforma para o Windows 7 inclui um conjunto limitado de recursos do Direct3D 11.1, embora os componentes que dependem do WDDM 1.2 - como o nível de recurso 11_1 e suas APIs relacionadas ou o buffer quádruplo para renderização estereoscópica - não estejam presentes.

Direct3D 11.2

Direct3D 11.2 foi fornecido com o Windows 8.1 . Novos recursos de hardware exigem DXGI 1.3 com drivers WDDM 1.3 e incluem modificação e vinculação de shader em tempo de execução, gráfico de vinculação de função (FLG), compilador HLSL de caixa de entrada , opção para anotar comandos gráficos. Os níveis de recurso 11_0 e 11_1 apresentam suporte opcional para recursos lado a lado com nível de sombreador de grampo de detalhe (Tier2). O último recurso fornece efetivamente controle sobre as tabelas de página de hardware presentes em muitas GPUs atuais. WARP foi atualizado para suportar totalmente os novos recursos. No entanto, não há nível de recurso 11_2; os novos recursos são dispersos pelos níveis de recursos existentes. Aqueles que são dependentes de hardware podem ser verificados individualmente via CheckFeatureSupport. Alguns dos "novos" recursos do Direct3D 11.2 realmente expõem alguns recursos de hardware antigos de uma forma mais granular; por exemplo, D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORTexpõe o suporte parcial para instanciar no hardware de nível de recurso 9_1 e 9_2, caso contrário, é totalmente compatível com o nível de recurso 9_3 em diante.

Direct3D 11.X

Direct3D 11.X é um superconjunto do DirectX 11.2 em execução no Xbox One . Inclui alguns recursos, como pacotes de empate, que foram anunciados posteriormente como parte do DirectX 12.

Direct3D 11.3

Direct3D 11.3 lançado em julho de 2015 com Windows 10; inclui recursos de renderização secundários do Direct3D 12, enquanto mantém a estrutura geral da API Direct3D 11.x. O Direct3D 11.3 apresenta o Shader Model 5.1, valor de referência de estêncil especificado por Shader opcional, Cargas de visualização de acesso não ordenado digitadas, visualizações ordenadas de rasterizador (ROVs), Swizzle padrão opcional, mapeamento de textura padrão opcional, rasterização conservadora (de três camadas), acesso de memória unificada opcional ( Suporte a UMA) e recursos lado a lado adicionais (nível 2) (recursos lado a lado de volume).

Direct3D 11.4

  • Direct3D 11.4 versão 1511 - O Direct3D 11.4 inicial foi introduzido com a atualização do Windows 10 Threshold 2 (versão 1511), melhorando o suporte a adaptadores gráficos externos e DXGI 1.5.
  • Direct3D 11.4 versão 1607 - Atualizado Direct3D 11.4 com Windows 10 Anniversary Update (versão 1607) inclui suporte WDDM 2.1 e para formato UHDTV HDR10 ( ST 2084 ) e suporte a taxas de atualização variáveis ​​para aplicativos UWP.

Direct3D 12

O Direct3D 12 permite um nível mais baixo de abstração de hardware do que as versões anteriores, permitindo que jogos futuros melhorem significativamente o dimensionamento multithread e diminuam a utilização da CPU. Isso é obtido combinando melhor a camada de abstração do Direct3D com o hardware subjacente, por meio de novos recursos como desenho indireto, tabelas descritoras, objetos concisos de estado de pipeline e pacotes de chamadas de desenho. Reduzir a sobrecarga do driver é de fato a principal atração do Direct3D 12, de forma semelhante ao Mantle da AMD ; nas palavras de seu desenvolvedor líder Max McMullen, o objetivo principal do Direct3D 12 é alcançar "eficiência no nível do console" e paralelismo de CPU aprimorado.

Embora a Nvidia tenha anunciado amplo suporte para Direct3D 12, eles também estavam um pouco reservados sobre o apelo universal da nova API, observando que, embora os desenvolvedores de mecanismo de jogo possam estar entusiasmados com o gerenciamento direto de recursos de GPU de seu código de aplicativo, "muitos [outros] o pessoal não "ficaria feliz em ter que fazer isso.

Alguns novos recursos de hardware também estão no Direct3D 12, incluindo Shader Model 5.1, Volume Tiled Resources (Tier 2), Shader Specified Stencil Reference Value, Typed UAV Load, Conservative Rasterization (Tier 1), melhor colisão e seleção com Conservative Rasterization, Rasterizer Ordered Visualizações (ROVs), Swizzles padrão, Mapeamento de textura padrão, cadeias de troca, recursos swizzled e recursos comprimidos , modos de mistura adicionais , mistura programável e transparência independente de ordem eficiente (OIT) com UAV ordenado por pixel.

Os objetos de estado do pipeline evoluíram do Direct3D 11 e os novos estados concisos do pipeline significam que o processo foi simplificado. O DirectX 11 oferece flexibilidade em como seus estados podem ser alterados, em detrimento do desempenho. Simplificar o processo e unificar os pipelines (por exemplo, estados de pixel shader) leva a um processo mais simplificado, reduzindo significativamente os overheads e permitindo que a placa de vídeo chame mais chamadas para cada quadro.

O Direct3D 12 também aprendeu com o AMD Mantle em listas de comandos e pacotes, com o objetivo de garantir que a CPU e a GPU trabalhem juntas de uma maneira mais equilibrada.

No Direct3D 11, os comandos são enviados da CPU para a GPU, um por um, e a GPU funciona por meio desses comandos sequencialmente. Isso significa que os comandos são limitados pela velocidade com que a CPU poderia enviar esses comandos de maneira linear. No DirectX 12, esses comandos são enviados como listas de comandos, contendo todas as informações necessárias em um único pacote. A GPU é então capaz de computar e executar este comando em um único processo, sem ter que esperar por nenhuma informação adicional da CPU.

Dentro dessas listas de comandos estão os pacotes. Onde anteriormente os comandos eram apenas pegos, usados ​​e depois esquecidos pela GPU, os pacotes podem ser reutilizados. Isso diminui a carga de trabalho da GPU e significa que ativos repetidos podem ser usados ​​com muito mais rapidez.

Embora a vinculação de recursos seja bastante conveniente no Direct3D 11 para desenvolvedores no momento, sua ineficiência significa que vários recursos de hardware modernos estão sendo drasticamente subutilizados. Quando um motor de jogo precisava de recursos no DX11, ele precisava extrair os dados do zero todas as vezes, o que significava processos repetidos e usos desnecessários. No Direct3D 12, heaps e tabelas de descritores significam que os recursos usados ​​com mais frequência podem ser alocados por desenvolvedores em tabelas, que a GPU pode acessar de forma rápida e fácil. Isso pode contribuir para um melhor desempenho do que o Direct3D 11 em hardware equivalente, mas também envolve mais trabalho para o desenvolvedor.

Heaps dinâmicos também são um recurso do Direct3D 12.

O Direct3D 12 oferece suporte explícito a vários adaptadores, permitindo o controle explícito de vários sistemas de configuração de GPUs. Essas configurações podem ser construídas com o adaptador gráfico do mesmo fornecedor de hardware, bem como de diferentes fornecedores de hardware juntos.

  • Direct3D 12 versão 1607 - com a atualização de aniversário do Windows 10 (versão 1607), lançada em 2 de agosto de 2016, o tempo de execução do Direct3D 12 foi atualizado para oferecer suporte a construções para multithreading explícito e comunicação entre processos, permitindo que os desenvolvedores aproveitem maciçamente a modernidade GPUs paralelas. Outros recursos incluem assinaturas de raiz atualizadas versão 1.1, bem como suporte para formato HDR10 e taxas de atualização variáveis .
  • Direct3D 12 versão 1703 - com o Windows 10 Creators Update (versão 1703), lançado em 11 de abril de 2017, o Direct3D 12 runtime foi atualizado para suportar Shader Model 6.0 e DXIL . e o Shader Model 6.0 requer a atualização de aniversário do Windows 10 (versão 1607), WDDM 2.1. Novos recursos gráficos são Teste de limites de profundidade e MSAA programável.
  • Direct3D 12 versão 1709 - Direct3D no Windows 10 Fall Creators Update (versão 1709), lançado em 17 de outubro de 2017, inclui depuração aprimorada.
  • Direct3D 12 versão 1809 - Atualização do Windows 10 de outubro de 2018 (versão 1809) oferece suporte para DirectX Raytracing para que as GPUs possam se beneficiar de sua API.
  • Direct3D 12 versão 1903 - A atualização do Windows 10 de maio de 2019 (versão 1903) oferece suporte para DirectML .
  • Direct3D 12 versão 2004 - Windows 10 May 2020 Update (versão 2004) traz suporte para Mesh & Amplification Shaders, Sampler Feedback, bem como DirectX Raytracing Tier 1.1 e melhorias de alocação de memória.

Arquitetura

Camada Abstrata

Direct3D é um componente do subsistema Microsoft DirectX API. O objetivo do Direct3D é abstrair a comunicação entre um aplicativo gráfico e os drivers de hardware gráfico. É apresentado como uma fina camada abstrata em um nível comparável ao GDI (consulte o diagrama anexo). O Direct3D contém vários recursos que faltam no GDI.

Direct3D é uma API gráfica de modo imediato . Ele fornece uma interface de baixo nível para todas as funções 3D da placa de vídeo ( transformações, recorte, iluminação , materiais , texturas , buffer de profundidade e assim por diante). Ele já teve um componente de modo Retido de nível superior , agora oficialmente descontinuado.

O modo imediato do Direct3D apresenta três abstrações principais: dispositivos , recursos e cadeias de troca (consulte o diagrama anexo). Os dispositivos são responsáveis ​​por renderizar a cena 3D. Eles fornecem uma interface com diferentes recursos de renderização. Por exemplo, o dispositivo mono fornece renderização de branco e preto, enquanto o dispositivo RGB renderiza em cores. Existem quatro tipos de dispositivos:

Dispositivo
  • Dispositivo de referência : Simula novas funções ainda não disponíveis no hardware. É necessário instalar o Direct3D SDK para usar este tipo de dispositivo.
  • Dispositivo de referência nula : não faz nada. Este dispositivo é usado quando o SDK não está instalado e um dispositivo de referência é solicitado.
  • Dispositivo de software plugável : executa renderização de software. Este dispositivo foi introduzido com DirectX 9.0 .

Cada dispositivo contém pelo menos uma cadeia de troca . Uma cadeia de troca é composta de uma ou mais superfícies de buffer traseiro . A renderização ocorre no buffer traseiro .

Além disso, os dispositivos contêm uma coleção de recursos ; dados específicos usados ​​durante a renderização. Cada recurso possui quatro atributos:

  • Tipo : determina o tipo de recurso: superfície, volume, textura, textura do cubo, textura do volume, textura da superfície, buffer de índice ou buffer de vértice.
  • Pool : descreve como o recurso é gerenciado pelo tempo de execução e onde está armazenado. Nopool padrão , o recurso existirá apenas na memória do dispositivo. Os recursos nopool gerenciado serão armazenados na memória do sistema e serão enviados ao dispositivo quando necessário. Os recursos nopool de memória do sistema existirão apenas na memória do sistema. Finalmente, opool temporário é basicamente o mesmo que o pool de memória do sistema, mas os recursos não são limitados por restrições de hardware.
  • Formato : descreve o layout dos dados do recurso na memória. Por exemplo, o valor do formato D3DFMT_R8G8B8 significa uma profundidade de cor de 24 bits (8 bits para vermelho, 8 bits para verde e 8 bits para azul).
  • Uso : Descreve, com uma coleção de bits de sinalizadores , como o recurso será utilizado pela aplicação. Esses sinalizadores determinam quais recursos são usados ​​em padrões de acesso dinâmico ou estático. Os valores de recursos estáticos não mudam após serem carregados, enquanto os valores de recursos dinâmicos podem ser modificados.

Direct3D implementa dois modos de exibição:

  • Modo de tela inteira: O aplicativo Direct3D gera toda a saída gráfica para um dispositivo de exibição. Neste modo, o Direct3D captura automaticamente Alt-Tab e define / restaura a resolução da tela e o formato de pixel sem a intervenção do programador. Isso também oferece muitos problemas para depuração devido ao 'Modo Cooperativo Exclusivo'.
  • Modo de janela: O resultado é mostrado dentro da área de uma janela. O Direct3D se comunica com o GDI para gerar a saída gráfica na exibição. O modo em janela pode ter o mesmo nível de desempenho de tela inteira, dependendo do suporte do driver.

Pipeline

Processo de pipeline de gráficos

A API do Microsoft Direct3D 11 define um processo para converter um grupo de vértices, texturas, buffers e estado em uma imagem na tela. Este processo é descrito como um pipeline de renderização com vários estágios distintos. Os diferentes estágios do pipeline Direct3D 11 são:

  1. Input Assembler : Lê os dados do vértice de um buffer de vértice fornecido pelo aplicativo e os alimenta no pipeline.
  2. Vertex Shader : executa operações em um único vértice por vez, como transformações, skinning ou iluminação.
  3. Hull Shader : executa operações em conjuntos de pontos de controle de patch e gera dados adicionais conhecidos como constantes de patch.
  4. Estágio de mosaico : subdivide a geometria para criar representações de ordem superior do casco.
  5. Shader de domínio : executa operações na saída de vértices pelo estágio de mosaico, da mesma forma que um shader de vértice.
  6. Shader de geometria : Processa primitivos inteiros, como triângulos, pontos ou linhas. Dado um primitivo, este estágio o descarta ou gera um ou mais novos primitivos.
  7. Saída de fluxo : pode gravar os resultados do estágio anterior na memória. Isso é útil para recircular os dados de volta no pipeline.
  8. Rasterizador : Converte primitivos em pixels, alimentando esses pixels no sombreador de pixel. O Rasterizador também pode realizar outras tarefas, como cortar o que não está visível ou interpolar dados de vértice em dados por pixel.
  9. Pixel Shader : determina a cor final do pixel a ser gravada no destino de renderização e também pode calcular um valor de profundidade a ser gravado no buffer de profundidade.
  10. Output Merger : Mescla vários tipos de dados de saída ( valores de pixel shader , mistura alfa, profundidade / estêncil ...) para construir o resultado final.

Os estágios do pipeline ilustrados com uma caixa redonda são totalmente programáveis. O aplicativo fornece um programa de sombreador que descreve as operações exatas a serem concluídas nesse estágio. Muitos estágios são opcionais e podem ser totalmente desativados.

Níveis de recursos

No Direct3D 5 a 9, quando novas versões da API introduziam suporte para novos recursos de hardware, a maioria deles era opcional - cada fornecedor gráfico mantinha seu próprio conjunto de recursos suportados, além da funcionalidade básica necessária. O suporte para recursos individuais teve que ser determinado usando "bits de capacidade" ou "limites", tornando a programação de gráficos de vários fornecedores uma tarefa complexa.

O Direct3D 10 introduziu um conjunto muito simplificado de requisitos de hardware obrigatórios com base nos recursos mais populares do Direct3D 9 aos quais todas as placas gráficas de suporte tiveram que aderir, com apenas alguns recursos opcionais para formatos de textura e operações com suporte.

O Direct3D 10.1 adicionou alguns novos requisitos de hardware obrigatórios e para permanecer compatível com o hardware e drivers 10.0, esses recursos foram encapsulados em dois conjuntos chamados "níveis de recursos", com o nível 10.1 formando um superconjunto do nível 10.0. Como Direct3D 11.0, 11.1 e 12 adicionaram suporte para novo hardware, novos recursos obrigatórios foram agrupados em níveis de recursos superiores.

O Direct3D 11 também introduziu "10level9", um subconjunto da API Direct3D 10 com três níveis de recursos que encapsulam várias placas Direct3D 9 com drivers WDDM , e o Direct3D 11.1 reintroduziu alguns recursos opcionais para todos os níveis, que foram expandidos no Direct3D 11.2 e posterior versões.

Essa abordagem permite que os desenvolvedores unifiquem o pipeline de renderização e usem uma única versão da API em hardwares mais novos e mais antigos, aproveitando as melhorias de desempenho e usabilidade no tempo de execução mais recente.

Novos níveis de recursos são introduzidos com versões atualizadas da API e normalmente encapsulam:

  • principais recursos obrigatórios - (Direct3D 11.0, 12),
  • alguns recursos menores (Direct3D 10.1, 11.1) ou
  • um conjunto comum de recursos opcionais anteriormente (Direct3D 11.0 "10 nível 9").

Cada nível superior é um superconjunto estrito de um nível inferior, com apenas alguns recursos novos ou opcionais anteriormente que se movem para a funcionalidade principal em um nível superior. Recursos mais avançados em uma revisão importante da API Direct3D, como novos modelos de shader e estágios de renderização, são expostos apenas em hardware de nível superior.

Existem recursos separados para indicar suporte para operações de textura e formatos de recursos específicos; eles são especificados para cada formato de textura usando uma combinação de sinalizadores de capacidade.

Os níveis de recurso usam sublinhado como um delimitador (ou seja, "12_1"), enquanto as versões de API / runtime usam ponto (ou seja, "Direct3D 11.4").

Níveis Direct3D 11

No Direct3D 11.4 para Windows 10, existem nove níveis de recursos fornecidos pela D3D_FEATURE_LEVELestrutura; os níveis 9_1, 9_2 e 9_3 (conhecidos coletivamente como Direct3D 10 Nível 9 ) reencapsulam vários recursos de cartões Direct3D 9 populares, os níveis 10_0, 10_1 referem-se às respectivas versões legadas do Direct3D 10, 11_0 e 11_1 refletem o recurso introduzido com Direct3D 11 e APIs e tempos de execução do Direct3D 11.1, enquanto os níveis 12_0 e 12_1 correspondem aos novos níveis de recursos introduzidos com a API Direct3D 12.

Níveis de recursos no Direct3D 11.4
Nível de recurso Recursos de hardware obrigatórios Recursos opcionais
9_1 Shader Model 2.0 ( vs_2_0/ ps_2_0), texturas 2K, texturas de volume, consultas de eventos, BC1-3 (também conhecido como DXTn), alguns outros recursos específicos. N / D
9_2 Consultas de oclusão, formatos de ponto flutuante (sem combinação), limites estendidos, todos os 9_1 recursos.
9_3 vs_2_a/ ps_2_xcom instâncias e limites de shader adicionais, texturas 4K, vários alvos de renderização (4 MRTs), combinação de ponto flutuante (limitada), todos os recursos 9_2.
10_0 Shader Model 4.0, shader de geometria, fluxo de saída, alfa para cobertura, texturas 8K, texturas MSAA, estêncil de 2 lados, visualizações de destino de renderização geral, matrizes de textura, BC4 / BC5, suporte para formato de ponto flutuante completo, todos os recursos 9_3. Operações de combinação lógica, DirectCompute (CS 4.0 / 4.1), formatos de pixel estendidos.
10_1 Shader Model 4.1, matrizes de mapa de cubo, MSAA estendido, todos os recursos 10_0.
11_0 Shader Model 5.0 / 5.1, hull & domain shaders, DirectCompute (CS 5.0 / 5.1), texturas 16K, BC6H / BC7, formatos de pixel estendidos, todos os recursos 10_1. UAV renderizando apenas com contagem de amostra de força, deslocamento de buffer constante e atualizações parciais, operações de ponto flutuante de precisão dupla (64 bits), precisão mínima de ponto flutuante (10 ou 16 bits ), filtragem mín. / Máx.
11_1 Operações de mistura lógica, rasterização independente do alvo, UAVs em cada estágio do pipeline com contagem de slots aumentada, renderização apenas de UAV com contagem de amostra de força, deslocamento de buffer constante e atualizações parciais, todos os recursos 11_0. Recursos lado a lado (quatro camadas), rasterização conservadora (três camadas), valor de referência de estêncil do Pixel Shader, visualizações ordenadas do rasterizador, carregamentos de UAV digitados para formatos adicionais.
12_0 Tiled Resources Tier 2 (Texture2D), Typed UAV Loads (formatos adicionais).
12_1 Conservative Rasterization Tier 1, Rasterizer Ordered Views.

Direct3D 12 níveis

O Direct3D 12 para Windows 10 requer hardware gráfico em conformidade com os níveis de recursos 11_0 e 11_1 que oferecem suporte a traduções de endereços de memória virtual e requerem drivers WDDM 2.0. Existem dois novos níveis de recursos, 12_0 e 12_1, que incluem alguns novos recursos expostos pelo Direct3D 12 que são opcionais nos níveis 11_0 e 11_1. Alguns recursos anteriormente opcionais são realinhados como linha de base nos níveis 11_0 e 11_1. O Shader Model 6.0 foi lançado com o Windows 10 Creators Update e requer o Windows 10 Anniversary Update, drivers WDDM 2.1.

Níveis de recursos do Direct3D 12
Nível Recursos obrigatórios Recursos opcionais
11_0 Todos os recursos 11_0 obrigatórios do Direct3D 11, Shader Model 5.1, Resource binding Tier 1. Operações de combinação lógica, operações de ponto flutuante de precisão dupla (64 bits), precisão mínima de ponto flutuante (10 ou 16 bits).

Vinculação de recursos (três camadas), recursos lado a lado (quatro camadas), rasterização conservadora (três camadas), valor de referência de estêncil do Pixel Shader, visualizações ordenadas do rasterizador, carregamentos de UAV digitados para formatos adicionais, instanciação de visualização.

Shader Model 6.0-6.6

Metacommands, taxa de sombreamento variável, traçado de raio, sombreadores de malha, feedback de amostrador.

Outros recursos opcionais.

UAVs em cada estágio do pipeline, UAV apenas renderizando com contagem de amostra de força, deslocamento de buffer constante e atualizações parciais.
11_1 Operações de combinação lógica, rasterização independente do alvo, aumento da contagem de slots de UAV.
12_0 Resource Binding Tier 2, Tiled Resources Tier 2 (Texture2D), Typed UAV Loads (formatos adicionais), Shader Model 6.0.
12_1 Conservative Rasterization Tier 1, Rasterizer Ordered Views.
12_2 DirectX 12 Ultimate : Shader Model 6.5, Raytracing Tier 1.1, Mesh Shaders, Variable-Rate Shading, Sampler Feedback, Resource Binding Tier 3, Tiled Resources Tier 3 (Texture3D), Conservative Rasterization Tier 3, espaço de endereço virtual de 40 bits.

O Direct3D 12 apresenta um modelo de associação de recursos reformulado que permite o controle explícito da memória. Objetos abstratos de "visualização de recursos" agora são representados com descritores de recursos, que são alocados usando pilhas e tabelas de memória. As camadas de Resource Binding definem o número máximo de recursos que podem ser endereçados usando CBV (visualização de buffer constante), SRV (visualização de recurso de sombreador) e UAV (visualização de acesso não ordenado), bem como unidades de amostrador de textura. O hardware da Camada 3 permite recursos totalmente sem ligação restritos apenas pelo tamanho do heap do descritor, enquanto o hardware da Camada 1 e da Camada 2 impõe alguns limites no número de descritores ("visualizações") que podem ser usados ​​simultaneamente.

Camadas de vinculação de recursos
Limites de recursos Camada 1 Camada 2 Nível 3
Descritores na pilha CBV / SRV / UAV 1M 1M > 1M
CBVs por estágio de sombreador 14 14 pilha cheia
SRVs por estágio de sombreador 128 pilha cheia
UAVs em todos os estágios 8, 64 64 pilha cheia
Amostradores por estágio de sombreador 16 pilha cheia
64 slots em hardware de nível de recurso 11_1

Multithreading

O modelo de driver WDDM no Windows Vista e superior oferece suporte a um número arbitrariamente grande de contextos de execução (ou threads) em hardware ou software. O Windows XP oferece suporte apenas ao acesso multitarefa ao Direct3D, em que aplicativos separados podem ser executados em janelas diferentes e acelerados por hardware, e o sistema operacional tem controle limitado sobre o que a GPU pode fazer e o driver pode alternar os threads de execução arbitrariamente.

A capacidade de executar o tempo de execução em um modo multithread foi introduzida com o tempo de execução Direct3D 11. Cada contexto de execução é apresentado com uma visão de recursos da GPU. Os contextos de execução são protegidos uns dos outros, no entanto, um aplicativo não autorizado ou mal escrito pode assumir o controle da execução no driver de modo de usuário e pode acessar dados de outro processo na memória da GPU, enviando comandos modificados. Embora protegido do acesso por outro aplicativo, um aplicativo bem escrito ainda precisa se proteger contra falhas e perda de dispositivo causadas por outros aplicativos.

O SO gerencia os threads sozinho, permitindo que o hardware alterne de um thread para outro quando apropriado, e também lida com o gerenciamento de memória e paginação (para a memória do sistema e para o disco) por meio do gerenciamento de memória do kernel do SO integrado.

A troca de contexto mais refinada, ou seja, ser capaz de trocar dois threads de execução no nível de instrução de sombreador em vez do nível de comando único ou até mesmo lote de comandos, foi introduzida no WDDM / DXGI 1.2 que acompanha o Windows 8. Isso supera um potencial problema de agendamento quando o aplicativo teria uma execução muito longa de um único comando / lote de comandos e teria que ser encerrado pelo cronômetro de watchdog do sistema operacional.

WDDM 2.0 e DirectX 12 foram reprojetados para permitir chamadas draw totalmente multithread. Isso foi conseguido tornando todos os recursos imutáveis ​​(ou seja, somente leitura), serializando os estados de renderização e usando pacotes de chamada de desenho. Isso evita o gerenciamento complexo de recursos no driver de modo kernel, possibilitando várias chamadas reentrantes para o driver de modo de usuário por meio de contextos de execução simultânea fornecidos por threads de renderização separados no mesmo aplicativo.

Direct3D Mobile

O Direct3D Mobile é derivado do Direct3D, mas ocupa menos memória . O Windows CE fornece suporte para Direct3D Mobile.

Implementações alternativas

Existem as seguintes implementações alternativas da API Direct3D. Eles são úteis para plataformas não Windows e para hardware sem algumas versões de suporte DX:

  • WineD3D - O projeto de código aberto Wine tem implementações de trabalho das APIs Direct3D via tradução para OpenGL . A implementação do Wine também pode ser executada no Windows sob certas condições.
  • vkd3d - vkd3d é uma biblioteca de gráficos 3D de código aberto construída em cima do Vulkan que permite executar aplicativos Direct3D 12 em cima do Vulkan . É usado principalmente pelo projeto Wine e agora está incluído no projeto Proton da Valve junto com o Steam no Linux.
  • DXVK - Uma camada de tradução baseada em Vulkan de código aberto para Direct3D 9/10/11 que permite executar aplicativos 3D no Linux usando Wine. Ele é usado pelo Proton / Steam para Linux. O DXVK é capaz de rodar um grande número de jogos modernos do Windows no Linux.
    • D9VK - Um fork do DXVK para adicionar suporte a Direct3D 9, incluído no Steam / Proton no Linux. Em 16 de dezembro de 2019, o D9VK foi incorporado ao DXVK.
  • Gallium Nine - Gallium Nine torna possível executar aplicativos Direct3D 9 no Linux nativamente, ou seja, sem nenhuma tradução de chamadas, o que permite uma velocidade quase nativa. Requer a cooperação de Wine e Mesa .

Ferramentas relacionadas

D3DX

O Direct3D vem com o D3DX, uma biblioteca de ferramentas projetada para realizar cálculos matemáticos comuns em vetores , matrizes e cores, calcular matrizes de projeção e olhar , interpolações de spline e várias tarefas mais complicadas, como compilar ou montar sombreadores usados ​​para programação gráfica 3D , armazenamento de animação esquelética compactada e pilhas de matriz. Existem várias funções que fornecem operações complexas em malhas 3D, como computação tangente-espacial, simplificação de malhas, transferência de radiância pré-computada , otimização para compatibilidade e stripificação do cache de vértice e geradores para malhas de texto 3D. Os recursos 2D incluem classes para desenhar linhas de espaço da tela, texto e sistemas de partículas baseados em sprite . As funções espaciais incluem várias rotinas de interseção, conversão de / para coordenadas baricêntricas e geradores de caixa delimitadora / esfera. O D3DX é fornecido como uma biblioteca de vínculo dinâmico (DLL). O D3DX foi descontinuado a partir do Windows 8 e não pode ser usado em aplicativos da Windows Store.

Alguns recursos presentes nas versões anteriores do D3DX foram removidos no Direct3D 11 e agora fornecidos como fontes separadas:

  • SDK do Windows e Visual Studio
  • Uma grande parte da biblioteca matemática foi removida. A Microsoft recomenda o uso da biblioteca DirectX Math.
  • A matemática de harmônicos esféricos foi removida e agora é distribuída como fonte.
  • A estrutura do Effect foi removida e agora é distribuída como fonte via CodePlex.
  • A interface Mesh e as funções de geometria foram removidas e agora são distribuídas como fonte via CodePlex na biblioteca de processamento de geometria DirectXMesh.
  • As funções de textura foram removidas e agora são distribuídas como fonte via CodePlex na biblioteca de processamento de textura DirectXTex.
  • Auxiliares gerais foram removidos e agora são distribuídos como fonte via CodePlex no projeto DirectX Tool Kit (DirectXTK).
  • O atlas de textura isochart foi removido e agora é distribuído como fonte via CodePlex sob o projeto UVAtlas.

DXUT

DXUT (também chamado de framework de amostra) é uma camada construída sobre a API Direct3D. A estrutura é projetada para ajudar o programador a gastar menos tempo com tarefas rotineiras, como criar uma janela, criar um dispositivo, processar mensagens do Windows e manipular eventos do dispositivo. DXUT foi removido com o Windows SDK 8.0 e agora distribuído como fonte via CodePlex.

Veja também

Referências

links externos