Recursos do Direct3D 11.1

A funcionalidade a seguir foi adicionada ao Direct3D 11.1, que está incluído com Windows 8, Windows RT e Windows Server 2012. O suporte parcial para Direct3D 11.1 está disponível no Windows 7 e no Windows Server 2008 R2 por meio da Atualização de Plataforma para Windows 7, que está disponível por meio da Atualização de Plataforma para Windows 7.

Aprimoramentos de rastreamento e compilador de sombreador

O Direct3D 11.1 permite que você use o rastreamento de sombreador para garantir que seu código esteja funcionando conforme o esperado e, se não for, você poderá descobrir e corrigir o problema. O SDK (Software Development Kit) do Windows para Windows 8 contém aprimoramentos do compilador HLSL. O rastreamento de sombreador e o compilador HLSL são implementados em D3dcompiler_nn.dll.

A API de rastreamento do sombreador e os aprimoramentos para o compilador HLSL consistem nos métodos e funções a seguir.

A biblioteca D3dcompiler.lib requer D3dcompiler_nn.dll. Essa DLL não faz parte do Windows 8; ela está na pasta \bin do SDK do Windows para Windows 8 juntamente com a Fxc.exe versão de linha de comando do compilador HLSL.

Observação

Embora você possa usar essa biblioteca e a combinação de DLL para desenvolvimento, não é possível implantar aplicativos da Windows Store que usam essa combinação. Portanto, você deve compilar sombreadores HLSL antes de enviar seu aplicativo da Windows Store. Você pode gravar binários de compilação HLSL em disco ou o compilador pode gerar cabeçalhos com matrizes de bytes estáticos que contêm os dados de blob do sombreador. Use a interface ID3DBlob para acessar os dados de blob. Para desenvolver seu aplicativo da Windows Store, chame D3DCompile2 ou D3DCompileFromFile para compilar a fonte HLSL bruta e, em seguida, alimente os dados de blob resultantes para Direct3D.

 

Compartilhamento de dispositivo Direct3D

O Direct3D 11.1 permite que as APIs do Direct3D 10 e as APIs do Direct3D 11 usem um dispositivo de renderização subjacente.

Esse recurso do Direct3D 11.1 consiste nos métodos e interface a seguir.

Verificar o suporte de novos recursos e formatos do Direct3D 11.1

O Direct3D 11.1 permite que você marcar novos recursos aos quais o driver gráfico pode dar suporte e novas maneiras pelas quais um formato tem suporte em um dispositivo. A DXGI (Infraestrutura Gráfica do Microsoft DirectX) 1.2 também especifica novos valores de DXGI_FORMAT .

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Usar precisão mínima de HLSL

Começando com Windows 8, os drivers gráficos podem implementar tipos de dados escalares HLSL de precisão mínima usando qualquer precisão maior ou igual à precisão de bit especificada. Quando o código do sombreador de precisão mínima HLSL é usado no hardware que implementa a precisão mínima de HLSL, você usa menos largura de banda de memória e, como resultado, também usa menos energia do sistema.

Você pode consultar o suporte de precisão mínima que o driver gráfico fornece chamando ID3D11Device::CheckFeatureSupport com o valor D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Nesta chamada ID3D11Device::CheckFeatureSupport , passe um ponteiro para uma estrutura D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT que ID3D11Device::CheckFeatureSupport preenche com os níveis mínimos de precisão aos quais o driver dá suporte para o estágio do sombreador de pixel e para outros estágios do sombreador. As informações retornadas apenas indicam que o hardware gráfico pode executar operações HLSL com uma precisão menor do que a precisão float padrão de 32 bits, mas não garante que o hardware gráfico seja realmente executado com uma precisão mais baixa.

Você não precisa criar vários sombreadores que fazem e não usam precisão mínima. Em vez disso, crie sombreadores com precisão mínima e as variáveis de precisão mínima se comportem com precisão total de 32 bits se o driver gráfico relatar que ele não dá suporte a nenhuma precisão mínima. Para obter mais informações sobre a precisão mínima de HLSL, consulte Usando a precisão mínima de HLSL.

Sombreadores de precisão mínima HLSL não funcionam em sistemas operacionais anteriores a Windows 8.

Especificar planos de recorte de usuário no HLSL no nível 9 e superior do recurso

Começando com Windows 8, você pode usar o atributo de função clipplanes em uma declaração de função HLSL em vez de SV_ClipDistance para fazer o sombreador funcionar no nível do recurso 9_x bem como no nível de recurso 10 e superior. Para obter mais informações, consulte Planos de recorte de usuário no hardware de nível 9 do recurso.

Criar buffers constantes maiores do que um sombreador pode acessar

O Direct3D 11.1 permite criar buffers constantes maiores que o tamanho máximo de buffer constante que um sombreador pode acessar (constantes de 42 bits*4 componentes – 64 KB) de 4096. Posteriormente, ao associar os buffers ao pipeline, por exemplo, por meio de PSSetConstantBuffers ou PSSetConstantBuffers1, você pode especificar um intervalo de buffers que o sombreador pode acessar que se ajusta ao limite 4096.

O Direct3D 11.1 atualiza o método ID3D11Device::CreateBuffer para esse recurso.

Usar operações lógicas em um destino de renderização

O Direct3D 11.1 permite que você use operações lógicas em vez de mesclar em um destino de renderização. No entanto, você não pode misturar operações lógicas com a mesclagem entre vários destinos de renderização.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Forçar a contagem de exemplos para criar um estado de rasterizador

O Direct3D 11.1 permite que você especifique uma contagem de exemplo de força ao criar um estado de rasterizador.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Observação

Se você quiser renderizar com a contagem de exemplos forçada a 1 ou superior, siga estas diretrizes:

  • Não associe exibições de estêncil de profundidade.
  • Desabilitar o teste de profundidade.
  • Verifique se o sombreador não gera profundidade.
  • Se você tiver exibições de destino de renderização associadas (D3D11_BIND_RENDER_TARGET) e forçou a contagem de exemplos para maior que 1, verifique se cada destino de renderização tem apenas um único exemplo.
  • Não opere o sombreador na frequência de exemplo. Portanto, ID3D11ShaderReflection::IsSampleFrequencyShader retorna FALSE.

Caso contrário, o comportamento de renderização será indefinido. Para obter informações sobre como configurar o estêncil de profundidade, consulte Configurando Depth-Stencil funcionalidade.

 

Processar recursos de vídeo com sombreadores

O Direct3D 11.1 permite que você crie exibições (SRV/RTV/UAV) para recursos de vídeo para que os sombreadores direct3D possam processar esses recursos de vídeo. O formato de um recurso de vídeo subjacente restringe os formatos que a exibição pode usar. A enumeração DXGI_FORMAT contém novos valores de formato de recurso de vídeo. Esses valores DXGI_FORMAT especificam os formatos de exibição válidos que você pode criar e como o runtime do Direct3D 11.1 mapeia a exibição. Você pode criar várias exibições de diferentes partes da mesma superfície e, dependendo do formato, os tamanhos das exibições podem ser diferentes uns dos outros.

O Direct3D 11.1 atualiza os métodos a seguir para esse recurso.

Suporte estendido para recursos texture2D compartilhados

O Direct3D 11.1 garante que você possa compartilhar recursos Texture2D criados com tipos e formatos de recursos específicos. Para compartilhar recursos Texture2D, use os sinalizadores D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX ou uma combinação dos sinalizadores D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX e D3D11_RESOURCE_MISC_SHARED_NTHANDLE (novo para Windows 8) ao criar esses recursos.

O Direct3D 11.1 garante que você possa compartilhar recursos Texture2D criados com esses valores DXGI_FORMAT :

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

Além disso, o Direct3D 11.1 garante que você possa compartilhar recursos Texture2D criados com um nível de mipmap de 1, tamanho da matriz de 1, associar sinalizadores de D3D11_BIND_SHADER_RESOURCE e D3D11_BIND_RENDER_TARGET combinados, padrão de uso (D3D11_USAGE_DEFAULT) e apenas esses valores D3D11_RESOURCE_MISC_FLAG :

O Direct3D 11.1 permite compartilhar uma maior variedade de tipos e formatos de recursos Texture2D. Você pode consultar se o driver gráfico e o hardware dão suporte ao compartilhamento estendido de recursos Texture2D chamando ID3D11Device::CheckFeatureSupport com o valor D3D11_FEATURE_D3D11_OPTIONS . Nesta chamada ID3D11Device::CheckFeatureSupport , passe um ponteiro para uma estrutura D3D11_FEATURE_DATA_D3D11_OPTIONS . ID3D11Device::CheckFeatureSupport define o membro ExtendedResourceSharing do D3D11_FEATURE_DATA_D3D11_OPTIONS como TRUE se o hardware e o driver deem suporte ao compartilhamento estendido de recursos Texture2D.

Se ID3D11Device::CheckFeatureSupport retornar TRUE em ExtendedResourceSharing, você poderá compartilhar recursos criados com esses valores DXGI_FORMAT :

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

Se ID3D11Device::CheckFeatureSupport retornar TRUE em ExtendedResourceSharing, você poderá compartilhar recursos criados com esses recursos e sinalizadores:

Observação

Quando ExtendedResourceSharing é TRUE, você tem mais flexibilidade ao especificar sinalizadores de associação para compartilhar recursos Texture2D. O driver gráfico e o hardware não só dão suporte a mais sinalizadores de associação, mas também a combinações mais possíveis de sinalizadores de associação. Por exemplo, você pode especificar apenas D3D11_BIND_RENDER_TARGET ou nenhum sinalizador de associação e assim por diante.

 

Mesmo que ID3D11Device::CheckFeatureSupport retorne TRUE em ExtendedResourceSharing, você ainda não poderá compartilhar recursos criados com esses recursos e sinalizadores:

Alterar sub-recursos com novas opções de cópia

O Direct3D 11.1 permite que você use novos sinalizadores de cópia para copiar e atualizar sub-recursos. Quando você copia um sub-recurso, os recursos de origem e destino podem ser idênticos e as regiões de origem e destino podem se sobrepor.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Descartar recursos e exibições de recursos

O Direct3D 11.1 permite descartar recursos e exibições de recursos do contexto do dispositivo. Essa nova funcionalidade informa à GPU que o conteúdo existente em recursos ou exibições de recursos não são mais necessários.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Suporte a um número maior de UAVs

O Direct3D 11.1 permite que você use um número maior de UAVs ao associar recursos ao estágio de fusão de saída e ao definir uma matriz de exibições para um recurso não ordenado.

O Direct3D 11.1 atualiza os métodos a seguir para esse recurso.

Associar um subintervalo de um buffer constante a um sombreador

O Direct3D 11.1 permite associar um subintervalo de um buffer constante para um sombreador acessar. Você pode fornecer um buffer constante maior e especificar o subintervalo que o sombreador pode usar.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Recuperar o subintervalo de um buffer constante associado a um sombreador

O Direct3D 11.1 permite recuperar o subintervalo de um buffer constante associado a um sombreador.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Limpar tudo ou parte de uma exibição de recurso

O Direct3D 11.1 permite limpar uma exibição de recurso (RTV, UAV ou qualquer exibição de vídeo de uma superfície Texture2D). Você aplica o mesmo valor de cor a todas as partes da exibição.

Esse recurso do Direct3D 11.1 consiste na API a seguir.

Mapear SRVs de buffers dinâmicos com NO_OVERWRITE

O Direct3D 11.1 permite mapear exibições de recursos de sombreador (SRV) de buffers dinâmicos com D3D11_MAP_WRITE_NO_OVERWRITE. O direct3D 11 e runtimes anteriores limitaram o mapeamento para buffers de vértice ou índice.

O Direct3D 11.1 atualiza o método ID3D11DeviceContext::Map para esse recurso.

Usar UAVs em cada estágio do pipeline

O Direct3D 11.1 permite que você use as instruções do modelo de sombreador 5.0 a seguir em todos os estágios de sombreador que foram usados anteriormente em apenas sombreadores de pixel e sombreadores de computação.

O Direct3D 11.1 atualiza os métodos a seguir para esse recurso.

Essas instruções existiam no Direct3D 11.0 em ps_5_0 e cs_5_0. Como o Direct3D 11.1 disponibiliza UAVs em todos os estágios do sombreador, essas instruções estão disponíveis em todos os estágios do sombreador.

Se você passar sombreadores compilados (VS/HS/DS/HS) que usam qualquer uma dessas instruções para uma função create-shader, como CreateVertexShader, em dispositivos que não dão suporte a UAVs em todos os estágios (incluindo drivers existentes que não são implementados com esse recurso), a função create-shader falhará. A função create-shader também falhará se o sombreador tentar usar um slot UAV além do conjunto de slots UAV aos quais o hardware dá suporte.

Os UAVs referenciados por essas instruções são compartilhados em todos os estágios do pipeline. Por exemplo, um UAV associado ao slot 0 no estágio de fusão de saída está disponível no slot 0 para VS/HS/DS/GS/PS.

Os acessos UAV que você emite de dentro ou entre estágios de sombreador executados em um determinado Draw*() ou que você emite do sombreador de computação em um Dispatch*() não têm garantia de serem concluídos na ordem em que você os emitiu. Mas todos os acessos UAV terminam no final de Draw*() ou Dispatch*().

Suporte estendido para dispositivos WARP

O Direct3D 11.1 estende o suporte para dispositivos WARP , que você cria passando D3D_DRIVER_TYPE_WARP no parâmetro DriverType de D3D11CreateDevice.

A partir do Direct3D 11.1, os dispositivos WARP dão suporte a:

  • Todos os níveis de recursos do Direct3D de 9.1 a 11.1
  • Sombreadores de computação e mosaico
  • Superfícies compartilhadas. Ou seja, você pode compartilhar totalmente superfícies entre dispositivos WARP, bem como entre dispositivos WARP em processos diferentes.

Os dispositivos WARP não dão suporte a esses recursos opcionais:

Quando você executa uma VM (máquina virtual), Hyper-V, com sua GPU (unidade de processamento gráfico) desabilitada ou sem um driver de exibição, você obtém um dispositivo WARP cujo nome amigável é "Adaptador de Vídeo Básico da Microsoft". Esse dispositivo WARP pode executar a experiência completa do Windows, que inclui dwm, Explorer de Internet e aplicativos da Windows Store. Este dispositivo WARP também dá suporte à execução de aplicativos herdados que usam DirectDraw ou aplicativos em execução que usam Direct3D 3 até Direct3D 11.1.

Usar o Direct3D em processos da Sessão 0

Começando com Windows 8 e Windows Server 2012, você pode usar a maioria das APIs Direct3D nos processos da Sessão 0.

Observação

Essas APIs relacionadas a saída, janela, cadeia de troca e apresentação não estão disponíveis nos processos da Sessão 0 porque não se aplicam ao ambiente da Sessão 0:

Se você chamar uma das APIs anteriores em um processo de Sessão 0, ela retornará DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.

 

Suporte para buffer de sombra no nível de recurso 9

Use um subconjunto de recursos de buffer de sombra do Direct3D 10_0+ para implementar efeitos de sombra no nível do recurso 9_x. Para obter informações sobre o que você precisa fazer para implementar efeitos de sombra no nível do recurso 9_x, consulte Implementando buffers de sombra para o nível de recurso do Direct3D 9.

Novidades no Direct3D 11