O consórcio Khronos, responsável pelo desenvolvimento de padrões gráficos,
uma especificação , que define a API para acessar os recursos gráficos e computacionais da GPU. A nova especificação incorporou as correções acumuladas ao longo de dois anos e . Os drivers com suporte para a nova versão do Vulkan já as empresas Intel, , ARM, Imagination Technologies e . No Mesa, o suporte ao Vulkan 1.2 foi oferecido para os drivers (placas AMD) e (Intel). O suporte ao Vulkan 1.2 também foi implementado no depurador , e no conjunto de exemplos .
Principais :
- HLSL . O suporte ao HLSL no Vulkan permite o uso dos mesmos shaders HLSL em aplicativos baseados no Vulkan e no DirectX, além de simplificar a transcrição de HLSL para SPIR-V. Para compilar os shaders, recomenda-se usar o compilador padrão
, que foi aberto pela Microsoft em 2017 e se baseia na tecnologia LLVM. O suporte ao Vulkan é realizado através de um backend separado, permitindo a transcrição do HLSL para a representação intermediária de shaders SPIR-V. A implementação abrange não apenas todos os recursos embutidos
HLSL, incluindo tipos matemáticos, fluxos de controle, funções, conjuntos, tipos de recursos, espaços de nomes, Shader Model 6.2, estruturas e métodos, mas também permite o uso de extensões específicas do Vulkan, como VKRay da NVIDIA. No modo HLSL sobre Vulkan, foi possível organizar a execução de jogos como Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey e Tomb Raider. - A especificação foi atualizada , que define uma representação intermediária universal para todas as plataformas de shaders, que pode ser aplicada tanto para gráficos quanto para computações paralelas.
SPIR-V implica a separação de uma fase de compilação de shaders para a representação intermediária, permitindo a criação de front-ends para várias linguagens de alto nível. Com base em várias implementações de alto nível, um código intermediário único é gerado separadamente, podendo ser utilizado pelos drivers OpenGL, Vulkan e OpenCL sem empregar um compilador de shaders embutido.
- Na API principal do Vulkan, foram incluídas 23 extensões, que permitiram aumentar o desempenho, melhorar a qualidade visual e simplificar o desenvolvimento. Entre as extensões adicionadas:
- (Sinal de linha do tempo), unificando sincronia com o host e filas de dispositivos (permitindo uma única primitiva para sincronização bidirecional entre o dispositivo e o host, sem a necessidade de primitivos separados VkFence e VkSemaphore). Novos semáforos são apresentados como um valor de 64 bits que aumenta monotonamente, que pode ser rastreado e atualizado em múltiplas threads.

- Possibilidade de uso em shaders de tipos numéricos com precisão reduzida;
- Versão compatível com HLSL da disposição de memória;
- Recursos não vinculados (bindless), que removem a limitação do número de recursos disponíveis para shaders utilizando um espaço virtual comum de memória do sistema e da GPU;
- , definindo como threads executadas em paralelo podem acessar dados e operações de sincronização compartilhados;
- para reutilização de descritores de layout em vários shaders;
- Referências em buffer.
Lista completa de extensões adicionadas:
- (Sinal de linha do tempo), unificando sincronia com o host e filas de dispositivos (permitindo uma única primitiva para sincronização bidirecional entre o dispositivo e o host, sem a necessidade de primitivos separados VkFence e VkSemaphore). Novos semáforos são apresentados como um valor de 64 bits que aumenta monotonamente, que pode ser rastreado e atualizado em múltiplas threads.
- mais de 50 novas estruturas e 13 funções;
- Versões simplificadas das especificações foram preparadas para plataformas-alvo típicas, simplificando o trabalho em plataformas que ainda não suportam todas as extensões e permitindo operar sem a necessidade de ativação seletiva das funcionalidades básicas da API Vulkan.
- O trabalho sobre o projeto de portabilidade com outras APIs gráficas foi continuado. Por exemplo, no Vulkan, extensões foram propostas para traduzir OpenGL (), OpenCL (, ), OpenGL ES (GLOVE, Angle) e DirectX (, ) através da API Vulkan, assim como, inversamente, para garantir a operação do Vulkan em plataformas sem suporte nativo ( e para operação sobre OpenGL e DirectX, e gfx-rs para operação sobre Metal).
Para melhorar a compatibilidade com DirectX e HLSL, foram adicionadas extensões
VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layout, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts, além de capacidades específicas do HLSL implementadas no SPIR-V.
Entre os planos futuros, destaca-se o desenvolvimento de extensões para aprendizado de máquina, rastreamento de raios, codificação e decodificação de vídeo, suporte a VRS (sombreamento de taxa variável) e sombreador Mesh.
Vale lembrar que a API Vulkan com a simplificação radical dos drivers, a transferência da geração de comandos da GPU para o lado da aplicação, a possibilidade de conectar camadas de depuração, a unificação da API para diferentes plataformas e a aplicação de uma representação intermediária de código pré-compilada para execução no lado da GPU. Para garantir alto desempenho e previsibilidade, o Vulkan fornece às aplicações ferramentas para controle direto das operações da GPU e suporte embutido para processamento multifuncional de comandos da GPU, o que minimiza a sobrecarga imposta pelo driver, enquanto as funcionalidades implementadas no lado do driver se tornam significativamente mais simples e previsíveis. Por exemplo, operações como gestão de memória e tratamento de erros, implementadas em OpenGL no lado do driver, são transferidas para o nível da aplicação no Vulkan.
O Vulkan abrange todas as plataformas disponíveis e oferece uma API única para sistemas desktop, móveis e Web, permitindo o uso de uma única API comum para diferentes processadores gráficos e áreas de aplicação. Graças à arquitetura em camadas do Vulkan, que permite a criação de ferramentas que funcionam com qualquer GPU, os fabricantes de hardware podem utilizar ferramentas padrão ao desenvolver verificação de código, depuração e perfilamento. Para a criação de sombreados, é oferecida uma nova representação intermediária portátil SPIR-V, baseada em LLVM e utilizando tecnologias básicas comuns com OpenCL. Para gerenciamento de dispositivos e telas no Vulkan, é proposto a interface WSI (Integração do Sistema de Janelas), que resolve aproximadamente as mesmas questões que o EGL em OpenGL ES. O suporte ao WSI está disponível de forma nativa no Wayland - todos os aplicativos que utilizam Vulkan podem ser executados em um ambiente de servidores Wayland não modificados. A funcionalidade através do WSI é igualmente suportada para Android, X11 (com DRI3), Windows, Tizen, macOS e iOS.
Fonte: opennet.ru


