GPUOpenドライバー とそれを構成する各種ソフトウェア (LLPC, XGL, PAL) がアップデートされた。
AMDVLKドライバーでは、RADV ドライバーとの切り換えが可能となった。1
他には、Sienna Cichlid/Navi21 への最適化、各種問題の修正、ヘッダーのアップデート、そして Task/Mesh Shader の対応が行なわれている。
- Update llpc from commit: 2e5cf60e5 · GPUOpen-Drivers/llpc@44a22a1
- Update pal from commit: 5cece43a1 · GPUOpen-Drivers/pal@26cb05f
- Update xgl from commit: 32c048be33 · GPUOpen-Drivers/xgl@86f61a3
以前、ACOバックエンド を開発する、Valve の Timur Kristóf 氏が、XDC2020 の発表にて、Mesh Shader は NGG で実行できる 可能性 がある、と述べていた。
NGG/Primitve Shader はハードウェア側に新設されたシェーダーステージであり、それまでのバーテックスシェーダー (Vertex Shader, VS)、ジオメトリシェーダー (Geometry Shader, GS) が統合されており、それらを置き換えるものとなる。
ACOバックエンドでも NGG をサポートする動き | Coelacanth’s Dream
ハードウェア側のシェーダーステージは NGG が有効な場合、LSHS (Local Shader + Hull Shader) 、NGG 、Pixel Shader の 3段と短くなる。
また、NGG では早期カリング機能として、 NGG Culling が存在する。
そう多くを読み取れてはいないが、今回のアップデートで追加された部分から、Mesh Shader をハードウェア側では ジオメトリシェーダー部で処理しているものと思われ、
上述したように、NGG には ジオメトリシェーダー部も統合されている。
#if (PAL_CLIENT_INTERFACE_MAJOR_VERSION >= 574) if (HasMeshShader()) { // HasMeshShader(): PipelineMesh // API Shader -> Hardware Stage // PS -> PS // MS -> GS CalcDynamicStageInfo(graphicsInfo.ms, &pStageInfos->gs); } else #endif
ただ、判定に NGG の存在や GPU の世代が使われていないため、RDNA 2/GFX10.3 以外、Vega/GFX9 、RDNA/GFX10 でも Mesh Shader をサポートする可能性が浮かぶが、実際の所は不明。
Mesa3D (RadeonSI, RADV) ドライバーで Task/Mesh Shader の本格的な実装が始まれば、断片として、また少し詳細が明らかにされるかもしれない。
// Mesh shaders are not supported on Gfx6/7/8. PAL_ASSERT((metadata.pipeline.hasEntry.meshScratchMemorySize == 0) || (metadata.pipeline.meshScratchMemorySize == 0));
// Register address for passing the 32-bit GPU virtual address of a buffer storing the shader-emulated task+mesh // pipeline stats query. uint16 taskPipeStatsBufRegAddr;
MeshPipeStatsBuf = 0x10000014, ///< 32-bit GPU virtual address of a buffer storing the shader-emulated mesh /// pipeline stats query.