Após dois anos de trabalho, o consórcio Khronos, responsável pelo desenvolvimento de padrões gráficos, publicou a especificação Vulkan 1.3, que define a API para acesso às capacidades gráficas e computacionais da GPU. A nova especificação incorporou as correções e expansões acumuladas ao longo de dois anos. Observa-se que os requisitos da especificação Vulkan 1.3 são direcionados a hardware gráfico da classe OpenGL ES 3.1, o que permitirá o suporte à nova API gráfica em todas as GPUs que suportam Vulkan 1.2. O kit de ferramentas Vulkan SDK está previsto para ser publicado em meados de fevereiro. Além da especificação principal, planejam-se oferecer extensões adicionais para dispositivos móveis e desktops de médio e alto nível, cujo suporte será realizado na edição 'Vulkan Milestone'.
Simultaneamente, foi apresentado um plano de implementação do suporte à nova especificação e às extensões adicionais nas placas gráficas e drivers dos dispositivos. Produtos com suporte ao Vulkan 1.3 estão sendo preparados para lançamento pelas empresas Intel, AMD, ARM e NVIDIA. Por exemplo, a AMD anunciou que em breve garantirá o suporte ao Vulkan 1.3 na série de placas gráficas AMD Radeon RX Vega, bem como em todas as placas baseadas na arquitetura AMD RDNA. A NVIDIA está se preparando para publicar drivers com suporte ao Vulkan 1.3 para Linux e Windows. A ARM adicionará suporte ao Vulkan 1.3 em suas GPUs Mali.
Principais novidades:
- Foi implementado o suporte a passes de renderização simplificados (Streamlining Render Passes, VK_KHR_dynamic_rendering), que permitem iniciar a renderização sem a necessidade de criar passes de renderização e objetos de framebuffer.
- Novas extensões foram adicionadas para simplificar a gestão da compilação do pipeline gráfico (pipeline, um conjunto de operações que transforma primitivos gráficos vetoriais e texturas em uma representação de pixels).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 — adicionam estados dinâmicos adicionais para reduzir o número de objetos de estado que precisam ser compilados e anexados.
- VK_EXT_pipeline_creation_cache_control — fornece ferramentas avançadas para gerenciar quando e como os pipelines são compilados.
- VK_EXT_pipeline_creation_feedback — fornece informações sobre os pipelines compilados para simplificar a perfuração e a depuração.
- Várias funcionalidades foram transferidas de opcionais para obrigatórias. Por exemplo, a implementação de links de buffer (VK_KHR_buffer_device_address) e o modelo de memória Vulkan, que determina como threads executados em paralelo podem acessar dados compartilhados e operações de sincronização, agora são obrigatórias.
- Foram disponibilizados recursos de controle preciso de subgrupos (VK_EXT_subgroup_size_control), com os quais os fabricantes podem oferecer suporte a vários tamanhos de subgrupos, permitindo aos desenvolvedores escolher o tamanho desejado.
- Foi adicionado a extensão VK_KHR_shader_integer_dot_product, que pode ser utilizada para otimizar o funcionamento de frameworks de aprendizado de máquina, graças à aceleração por hardware das operações de produto escalar.
- No total, foram incluídas 23 novas extensões:
- VK_KHR_copy_commands2
- VK_KHR_dynamic_rendering
- VK_KHR_format_feature_flags2
- VK_KHR_maintenance4
- VK_KHR_shader_integer_dot_product
- VK_KHR_shader_non_semantic_info
- VK_KHR_shader_terminate_invocation
- VK_KHR_synchronization2
- VK_KHR_zero_initialize_workgroup_memory
- VK_EXT_4444_formats
- VK_EXT_extended_dynamic_state
- VK_EXT_extended_dynamic_state2
- VK_EXT_image_robustness
- VK_EXT_inline_uniform_block
- VK_EXT_pipeline_creation_cache_control
- VK_EXT_pipeline_creation_feedback
- VK_EXT_private_data
- VK_EXT_shader_demote_to_helper_invocation
- VK_EXT_subgroup_size_control
- VK_EXT_texel_buffer_alignment
- VK_EXT_texture_compression_astc_hdr
- VK_EXT_tooling_info
- VK_EXT_ycbcr_2plane_444_formats
- Um novo tipo de objeto VkPrivateDataSlot foi adicionado. Foram implementados 37 novos comandos e mais de 60 estruturas.
- A especificação SPIR-V 1.6 foi atualizada, definindo uma representação intermediária universal para todas as plataformas, que pode ser aplicada tanto para gráficos quanto para cálculos paralelos. O SPIR-V implica a alocação de uma fase separada na 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. A partir de diferentes implementações de alto nível, um código intermediário unificado é gerado, que pode ser utilizado pelos drivers OpenGL, Vulkan e OpenCL sem o uso de um compilador de shaders embutido.
- Foi proposta a concepção de perfis de compatibilidade. A primeira empresa a apresentá-los foi a Google, com um perfil básico (baseline profile) para a plataforma Android, que simplificará a determinação do nível de suporte ao dispositivo para os recursos avançados do Vulkan, além da especificação Vulkan 1.0. Para a maioria dos dispositivos, o suporte ao perfil poderá ser garantido sem a necessidade de atualizações OTA.
Vale lembrar que a API Vulkan se destaca pela simplificação radical dos drivers, pela transferência da geração de comandos GPU para o lado do aplicativo, pela possibilidade de conectar camadas de depuração, pela unificação da API para diferentes plataformas e pela 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, Vulkan oferece aos aplicativos meios para gerenciar diretamente as operações da GPU e suporte integrado para o processamento multithread de comandos da GPU, minimizando as sobrecargas impostas pelo driver, enquanto as capacidades implementadas no lado do driver são simplificadas e se tornam mais previsíveis. Por exemplo, operações como gerenciamento de memória e tratamento de erros, que são realizadas no OpenGL do lado do driver, são transferidas para o nível do aplicativo no Vulkan.
O Vulkan abrange todas as plataformas disponíveis e fornece uma API única para sistemas desktop, móveis e Web, permitindo o uso de uma API comum para diferentes processadores gráficos e áreas de aplicação. Graças à arquitetura em camadas do Vulkan, que implica a criação de ferramentas que funcionem com quaisquer GPUs, os fabricantes de hardware podem utilizar ferramentas padrão no desenvolvimento para verificação de código, depuração e perfilagem. Para a criação de shaders, é oferecida uma nova representação intermediária portátil SPIR-V, baseada em LLVM e utilizando tecnologias fundamentais comuns ao OpenCL. Para gerenciar dispositivos e telas, o Vulkan propõe a interface WSI (Integração do Sistema de Janela), que atende a aproximadamente as mesmas necessidades que o EGL no OpenGL ES. O suporte WSI está disponível de forma nativa no Wayland — todos os aplicativos que utilizam Vulkan podem ser executados em ambientes não modificados. servidores Wayland. A capacidade de operar através do WSI também é garantida para Android, X11 (com DRI3), Windows, Tizen, macOS e iOS.
Fonte: opennet.ru
