A Microsoft disponibilizou a versão prévia do AgilitySDK 1.720, introduzindo o Shader Model 6.10 e novos recursos na API DirectX 12 voltados para álgebra linear, ray tracing e paralelismo em GPU.
O pacote expande o conjunto de funcionalidades estabelecidas no Shader Model 6.9 e no DirectX Raytracing 1.2, incorporando o compilador DirectX Shader Compiler 1.10.2605.2.
Aos interessados, seguem os direcionamentos para baixar as novidades em seus respectivos hardwares:
| IHV | Link(s) do driver |
|---|---|
| AMD | AMD Software: AgilitySDK Developer Preview Edition 25.30.41.02 |
| Intel | Intel Arc Graphics – Windows |
| NVIDIA | Entre em contato com seu representante de relações com desenvolvedores para acesso a drivers em desenvolvimento. |
O que o Shader Model 6.10 entrega de novo para desenvolvedores
O SM 6.10 adiciona as APIs de matriz LinAlg (abreviação de Linear Algebra), as funções intrínsecas (intrinsic function) de Group Wave Index, o atributo Variable Group Shared Memory e novos intrínsecos de ray tracing, incluindo TriangleObjectPositions e ClusterID.
E, aos que estão por fora, funções intrínsecas, ou simplesmente intrínsecos, são comandos diretos da Microsoft que desbloqueiam recursos físicos existentes nas placas de vídeo, permitindo acesso acelerado a tarefas específicas.
Os intrínsecos funcionam como atalhos de alta velocidade para a GPU, substituindo cálculos lentos por comandos diretos ao chip.
Contudo, voltando ao assunto principal, destacamos que esses recursos funcionam de forma unificada em uma única API, permitindo que os desenvolvedores acionem técnicas de renderização neural diretamente de threads individuais de shader em pipelines gráficos em tempo real.
Com isso, também será possível que utilizem operações de matriz MMA de maior largura de banda para aprendizado de máquina e processamento de imagem.
Suporte de hardware para os novos recursos
A adoção dos recursos varia conforme o fabricante e a arquitetura de GPU. A tabela a seguir detalha o quadro atual de compatibilidade com base nos dados das três principais fornecedoras de GPUs (NVIDIA, Intel e AMD):
| Recurso | AMD | Intel | NVIDIA |
|---|---|---|---|
| LinAlg::Matrix | Compatível com as GPUs AMD Radeon RX 9000. | Planejado para uma versão futura. | Compatível com todo o hardware RTX. |
| Group Wave Index | Compatível com as GPUs AMD Radeon RX 7000 e 9000. | Compatível com Intel Arc B-Series Graphics. | Compatível com todo o hardware RTX. |
| Variable Group Shared Memory | Compatível com as GPUs AMD Radeon RX 7000 e 9000. Suporta apenas o tamanho de limite de memória padrão. Limites maiores estão planejados para versões futuras do driver. | Compatível com Intel Arc B-Series Graphics. | Compatível com todo o hardware RTX. Os valores variam conforme o hardware. |
| Intrínsecos de Raytracing: TriangleObjectPositions/ClusterID | Compatível com as GPUs AMD Radeon RX 7000 e 9000. | Compatível com Intel Arc B-Series Graphics. | Compatível com todo o hardware RTX. |
| APIs de Lista de Comandos Assíncronos em Lote | Compatível com as GPUs AMD Radeon RX 7000 e 9000. | Compatível com Intel Arc B-Series Graphics. | Compatível com todo o hardware RTX. |
Como o Group Wave Index elimina suposições perigosas no código de shader
As novas funções GetGroupWaveIndex() e GetGroupWaveCount() dão aos shaders o poder de entender exatamente como as tarefas estão organizadas dentro da placa de vídeo. Na prática, isso padroniza dois comportamentos:
- GetGroupWaveIndex() retorna o índice da wave atual (de 0 a N-1);
- GetGroupWaveCount() devolve o número total de waves que executam o grupo.
Isso permite que as tarefas cooperem entre si de forma inteligente sem depender de métodos arriscados, como cálculos manuais que variam de placa para placa.
Agora, um único código funciona com perfeição (pelo menos na teoria) em qualquer hardware, ignorando as diferenças de arquitetura.
Variable Group Shared Memory e o fim do limite fixo de 32 KB
O Shader Model 6.10 remove o limite histórico de 32 KB (28 KB para mesh shaders) para memória groupshared (memória compartilhada de grupo). O funcionamento passa a seguir duas regras claras:
- O limite real do hardware é exposto por uma consulta em tempo de execução chamada MaxGroupSharedMemoryPerGroup;
- O autor do shader aplica o atributo de ponto de entrada [GroupSharedLimit(<bytes>)] para declarar a memória compartilhada máxima que seu código precisa, recebendo do compilador uma verificação de portabilidade em tempo de compilação.
Shaders que não utilizam o atributo continuam validados contra os limites legados, preservando a compatibilidade com código existente.
O novo mecanismo libera algoritmos como o descarte de grandes blocos de imagem (culling de tiles), técnicas avançadas de rasterização por software e o processamento de grandes volumes de dados (matrizes), que antes eram limitados por regras antigas do sistema, e não pela potência real da placa de vídeo.
Leia mais
- Próximo Xbox também vai ser afetado pela crise de RAM, admite Asha Sharma
- ASUS, MSI e outras marcas podem ter versões próprias do Xbox Project Helix
- Microsoft oferece plano de aposentadoria voluntária para mais de 8 mil funcionários
APIs de Lista de Comandos Assíncronos em Lote eliminam gargalos de serialização
Comandos legados como CopyBufferRegion, ClearUnorderedAccessViewFloat/Uint e ResolveSubresource são executados rigorosamente em série porque o modelo antigo de ResourceBarrier não consegue expressar dependência entre duas operações do mesmo tipo (por exemplo, copy-dest para copy-dest).
Na prática, a GPU é forçada a interromper o fluxo e processar cada cópia ou limpeza de forma sequencial, mesmo quando as operações utilizam áreas de memória que não têm nenhuma relação entre si.
Para finalizar esta publicação, destacamos que as novas APIs de Batched Async Commands (Comandos Assíncronos em Lote) resolvem isso atuando em duas frentes:
- Introduzem métodos de lista de comandos que removem o contrato de serialização implícito, permitindo ao driver e ao hardware sobrepor trabalho independente dentro de uma única chamada em lote;
- Exigem barreiras aprimoradas apenas onde há risco real de dados, como quando duas cópias escrevem em regiões sobrepostas do mesmo buffer, enquanto o restante da carga executa de forma concorrente.
E aí? O que achou das novidades? Compartilhe o seu ponto de vista nesta publicação e continue acompanhando o Adrenaline!
Fonte: WCCFtech

