Recursos do Direct3D 11.2

A funcionalidade a seguir foi adicionada ao Direct3D 11.2, que está incluído com Windows 8.1, Windows RT 8.1 e Windows Server 2012 R2.

Recursos em bloco

O Direct3D 11.2 permite criar recursos em bloco que podem ser considerados como recursos lógicos grandes que usam pequenas quantidades de memória física. Os recursos em bloco são úteis (por exemplo) com terreno em jogos e interface do usuário do aplicativo.

Os recursos em bloco são criados especificando o sinalizador D3D11_RESOURCE_MISC_TILED . Para trabalhar com o recurso em bloco, use estas API:

Para obter mais informações sobre recursos em bloco, consulte Recursos em bloco.

Verificar o suporte a recursos em bloco

Antes de usar recursos em bloco, você precisa descobrir se o dispositivo dá suporte a recursos em bloco. Veja como você marcar para obter suporte para recursos em bloco:

HRESULT hr = D3D11CreateDevice(
    nullptr,                    // Specify nullptr to use the default adapter.
    D3D_DRIVER_TYPE_HARDWARE,   // Create a device using the hardware graphics driver.
    0,                          // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
    creationFlags,              // Set debug and Direct2D compatibility flags.
    featureLevels,              // List of feature levels this app can support.
    ARRAYSIZE(featureLevels),   // Size of the list above.
    D3D11_SDK_VERSION,          // Always set this to D3D11_SDK_VERSION for Windows Store apps.
    &device,                    // Returns the Direct3D device created.
    &m_d3dFeatureLevel,         // Returns feature level of device created.
    &context                    // Returns the device immediate context.
    );

if (SUCCEEDED(hr))
{
    D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
    DX::ThrowIfFailed(
        device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
        );

    m_tiledResourcesTier = featureData.TiledResourcesTier;
}

Suporte estendido para dispositivos WARP

O Direct3D 11.2 estende o suporte para dispositivos WARP , que você cria passando D3D_DRIVER_TYPE_WARP no parâmetro DriverType de D3D11CreateDevice. O renderizador de software WARP no Direct3D 11.2 adiciona suporte total para o nível de recurso direct3D 11_1, incluindo recursos em bloco, IDXGIDevice3::Trim, superfícies BCn compartilhadas, minblend e padrão do mapa. O suporte duplo em sombreadores HLSL também foi habilitado com suporte para 16x MSAA.

Anotar comandos gráficos

O Direct3D 11.2 permite anotar comandos gráficos com estas API:

Vinculação do sombreador HLSL

Windows 8.1 adiciona compilação e vinculação separadas de sombreadores HLSL, o que permite que os programadores gráficos criem funções HLSL pré-compiladas, empacotem-nas em bibliotecas e as vinculem a sombreadores completos em tempo de execução. Isso é essencialmente um equivalente à compilação, bibliotecas e vinculação separadas do C/C++ e permite que os programadores componham código HLSL pré-compilado quando mais informações estiverem disponíveis para finalizar a computação. Para obter mais informações sobre como usar a vinculação de sombreador, consulte Usando a vinculação do sombreador.

Conclua estas etapas para criar um sombreador final usando a vinculação dinâmica em tempo de execução.

Para criar e usar a vinculação do sombreador

  1. Crie um objeto vinculador ID3D11Linker , que representa um contexto de vinculação. Um único contexto não pode ser usado para produzir vários sombreadores; um contexto de vinculação é usado para produzir um único sombreador e, em seguida, o contexto de vinculação é jogado fora.
  2. Use D3DLoadModule para carregar e definir bibliotecas de seus blobs de biblioteca.
  3. Use D3DLoadModule para carregar e definir um blob de sombreador de entrada ou criar um sombreador FLG.
  4. Use ID3D11Module::CreateInstance para criar objetos ID3D11ModuleInstance e, em seguida, chame funções nesses objetos para reassociar recursos aos slots finais.
  5. Adicione as bibliotecas ao vinculador e, em seguida, chame ID3D11Linker::Link para produzir o código de byte do sombreador final que pode ser carregado e usado no runtime, assim como um sombreador totalmente pré-compilado e vinculado.

Grafo de vinculação de função (FLG)

Windows 8.1 também adiciona o FLG (Grafo de Vinculação de Funções). Você pode usar o FLG para construir sombreadores que consistem em uma sequência de invocações de função pré-compiladas que passam valores uns para os outros. Ao usar o FLG, não é necessário gravar HLSL e invocar o compilador HLSL. Em vez disso, a estrutura do sombreador é especificada programaticamente usando chamadas à API C++. Os nós FLG representam assinaturas de entrada e saída e invocações de funções de biblioteca pré-compiladas. A ordem de registrar os nós de chamada de função define a sequência de invocações. O nó de assinatura de entrada deve ser especificado primeiro, enquanto o nó de assinatura de saída deve ser especificado por último. As bordas FLG definem como os valores são passados de um nó para outro. Os tipos de dados de valores passados devem ser os mesmos; não há conversão de tipo implícito. As regras de forma e swizzling seguem o comportamento HLSL e os valores só podem ser passados para frente nesta sequência. Para obter informações sobre a API FLG, consulte ID3D11FunctionLinkingGraph.

Compilador HLSL da caixa de entrada

O compilador HLSL agora está na caixa de entrada em Windows 8.1 e posteriores. Agora, a maioria das APIs para programação de sombreador pode ser usada em aplicativos da Windows Store criados para Windows 8.1 e posteriores. Muitas APIs para programação de sombreador não puderam ser usadas em aplicativos da Windows Store que foram criados para Windows 8; as páginas de referência dessas APIs foram marcadas com uma anotação. Mas algumas APIs de sombreador (por exemplo, D3DCompileFromFile) ainda podem ser usadas apenas para desenvolver aplicativos da Windows Store, e não em aplicativos que você envia para a Windows Store; as páginas de referência para essas APIs ainda são marcadas com uma anotação.

Novidades no Direct3D 11