Após quase três anos de trabalho, o consórcio Khronos, que desenvolve padrões gráficos, publicou a especificação Vulkan 1.4, que define a API para acesso às capacidades gráficas e computacionais da GPU. A nova especificação incorporou as extensões acumuladas anteriormente definidas como opcionais, além de oferecer uma série de novas funcionalidades e aumentar os requisitos mínimos de hardware. O conjunto de ferramentas Vulkan SDK está previsto para ser publicado em janeiro de 2025.
Os produtos com suporte a Vulkan 1.4 estão sendo preparados para lançamento pelas empresas AMD, Arm, Imagination, Intel, NVIDIA, Qualcomm e Samsung. Os drivers abertos para GPU AMD (radv), Apple M1/M2 (honeykrisp), Intel (anv), NVIDIA (nvk) e Qualcomm (tu), desenvolvidos pelo projeto Mesa, já passaram em todos os testes de compatibilidade com Vulkan 1.4 da suíte de testes de conformidade CTS (Khronos Conformance Test Suite) e estão incluídos na lista de drivers certificados. A lista também inclui drivers da Samsung e Qualcomm para a plataforma Android, além de drivers para GPU PowerVR D-Series DXT* da Imagination Technologies e drivers proprietários da NVIDIA.
Principais inovações:
- Foi adicionada a suporte ao mecanismo de 'Streaming Transfers', destinado a possibilitar a transmissão contínua de grandes volumes de dados entre o sistema principal (host) e o dispositivo gráfico, sem interromper o rendering e sem desacelerar seu desempenho. O mecanismo foi implementado através da nova extensão VK_EXT_host_image_copy, cuja suporte é opcional.
- As funcionalidades voltadas para aumento de desempenho foram transformadas em obrigatórias:
- Push Descriptors — a capacidade de gravar atualizações de descritores diretamente no buffer de comandos, em vez de criar conjuntos de descritores separados e vinculá-los ao buffer de comandos.
- VK_KHR_dynamic_rendering_local_read — permite a leitura de buffers embutidos (attachments) e recursos gravados por shaders fragmentares anteriores, no contexto de passagens de rendering dinâmicas (render pass).
- VK_EXT_scalar_block_layout — permite o uso de uma estrutura semelhante ao C para blocos SPIR-V, na qual tipos não escalares podem ser alinhados com base no tamanho de seus componentes.
- O conjunto inclui as extensões VK_KHR_maintenance5 e VK_KHR_maintenance6, que fornecem comandos auxiliares e estruturas para simplificar a gestão de recursos e shaders.
- Suporte garantido para renderização com resolução 8K (7680 x 4320 pixels) e uso de até 8 buffers de renderização independentes.
- Inclui as seguintes extensões:
- VK_KHR_global_priority
- VK_KHR_index_type_uint8
- VK_KHR_line_rasterization
- VK_KHR_load_store_op_none
- VK_KHR_map_memory2
- VK_KHR_push_descriptor
- VK_KHR_shader_expect_assume
- VK_KHR_shader_float_controls2
- VK_KHR_shader_subgroup_rotate
- VK_KHR_vertex_attribute_divisor
- VK_EXT_pipeline_protected_access
- VK_EXT_pipeline_robustness
- Muitas funcionalidades que antes eram opcionais foram tornadas obrigatórias.
- Um grande conjunto de novos comandos e estruturas foi adicionado.
A API Vulkan é notável pela simplificação radical dos drivers, transferindo a geração de comandos GPU para o lado da aplicação, permitindo a conexão de camadas de depuração, unificando a API para diferentes plataformas e aplicando uma representação intermediária pré-compilada para execução na GPU.
Para garantir alto desempenho e previsibilidade, Vulkan oferece aos aplicativos ferramentas para controle direto das operações da GPU e suporte integrado ao processamento de comandos em múltiplas threads, minimizando a sobrecarga imposta pelos drivers, enquanto as funcionalidades implementadas no lado do driver se tornam significativamente mais simples e previsíveis. Por exemplo, operações como gerenciamento de memória e tratamento de erros, que no OpenGL são realizadas pelo driver, no Vulkan são deslocadas para o nível da aplicação.
Vulkan abrange todas as plataformas disponíveis e fornece uma API unificada para sistemas de desktop, móveis e Web, permitindo o uso de uma única API comum para diferentes GPUs e áreas de aplicação. Graças à arquitetura em camadas do Vulkan, que implica na criação de ferramentas que funcionam com qualquer GPU, os fabricantes de hardware podem utilizar ferramentas padrão no desenvolvimento para verificação de código, depuração e profiling.
Para a criação de shaders, é proposto um formato intermediário portátil chamado SPIR-V, baseado em LLVM e utilizando tecnologias básicas comuns ao OpenCL. Com Vulkan, também é possível usar a linguagem de shaders HLSL, aplicada no DirectX, por meio de sua tradução para SPIR-V. Para o gerenciamento de dispositivos e telas em Vulkan, é oferecida a interface WSI (Window System Integration), que resolve aproximadamente as mesmas questões que o EGL no OpenGL ES. O suporte a WSI está disponível de forma nativa no Wayland — todos os aplicativos que utilizam Vulkan podem ser executados em um ambiente não modificado. 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
