Qual é o equivalente moderno das listas de exibição?


9

As listas de exibição eram um recurso do OpenGL que poderia, em teoria, acelerar qualquer parte da API, armazenando um grupo de comandos para uso posterior. No meu entendimento, isso faz muito sentido no que diz respeito ao esforço atual para reduzir a sobrecarga do motorista.

As listas de exibição foram preteridas na versão 3.1. Qual é o equivalente da API moderna e o DirectX expõe um recurso semelhante? Se não existe mais essa funcionalidade, qual é a lógica?

Respostas:


12

A Nvidia possui uma extensão para criar buffers de comando no GL moderno .

O motivo da falta de funcionalidade semelhante é que há muito estado envolvido em relação à renderização e a lista de exibição é afetada por muitos estados diferentes. Por exemplo, alterar o estado de mesclagem exige a correção do sombreador de fragmento em algum hardware.

A NVidia resolveu capturando todo o estado e redefinindo para o estado após um despacho:

1) O que motiva o design?

O objetivo principal é poder reutilizar buffers de comando pré-validados. Outras APIs e propostas abordaram isso com várias encarnações de listas de comandos ou objetos de estado, mas um problema recorrente é que as interações entre os vários estágios do pipeline impedem essa prevalência e reutilização. Essas interações geralmente são específicas de hardware (e diferem de fornecedor para fornecedor ou mesmo de geração para geração) e novas interações são introduzidas por novos recursos que não eram imaginados quando o esquema de prevalência foi proposto.

Tentamos resolver isso, tendo um objeto de estado monolítico que abrange (quase) todo o estado do pipeline. Isso deve fornecer informações suficientes para todas as implementações para realizar qualquer validação cruzada necessária. Tentamos criá-los de uma maneira que minimize a nova área de cobertura da API - já que queremos o estado ALL (incluindo qualquer estado adicionado no futuro), apenas a capturamos do estado atual do contexto.

[...]

23) Em que condição o estado permanece, que é modificado por tokens, após a chamada de despacho?

RESOLVIDO: o estado é redefinido.

(a partir do texto da extensão vinculado acima)

No entanto, o verdadeiro sucessor é a funcionalidade do buffer de comando no DX12 e no vulkan. Eles também capturam todo o estado de renderização em um único objeto a ser usado ao criar e preencher o buffer de comando. A extensão NVidia é baseada nessa arquitetura como resultado do envolvimento da NVidia no design do Vulkan.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.