AMD 发布了 Dense Geometry Format 的 Vulkan 支持

首次发布时间:
Stuart Smith's avatar
Stuart Smith

在我们关于解决密集几何问题的博客中,我们描述了AMD开发的块状几何压缩技术——密集几何格式 (DGF),它将直接支持未来的GPU架构。

我们现在正在发布一个临时的Vulkan®扩展VK_AMDX_dense_geometry_format,它允许DGF数据直接提供给加速结构构建,消除了单独解码步骤带来的性能和内存成本。在具有原生DGF支持的硬件上,该扩展将显著提高BLAS构建时间,并大幅降低BLAS内存占用。

该扩展非常简单。当应用程序想要使用预压缩的DGF数据构建加速结构时,它会将VkAccelerationStructureGeometryKHR结构体的geometryType成员设置为VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX

typedef enum VkGeometryTypeKHR {
VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0,
VK_GEOMETRY_TYPE_AABBS_KHR = 1,
VK_GEOMETRY_TYPE_INSTANCES_KHR = 2,
...
// Provided by VK_AMDX_dense_geometry_format
VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX = 1000478000,
...
} VkGeometryTypeKHR;

然后,通过将其pNext链中附加一个VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX来扩展VkAccelerationStructureGeometryKHR结构体。

// Provided by VK_AMDX_dense_geometry_format
typedef struct VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX {
VkStructureType sType;
const void* pNext;
VkDeviceOrHostAddressConstKHR compressedData;
VkDeviceSize dataSize;
uint32_t numTriangles;
uint32_t numVertices;
uint32_t maxPrimitiveIndex;
uint32_t maxGeometryIndex;
VkCompressedTriangleFormatAMDX format;
} VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX;

您可以通过使用DGF SDK中的示例编码器(DGFTester.exe)在压缩数据时保存值,

c:\DGFSDK\build\DGFSDK\DGFTester\Debug>DGFTester.exe teapot.obj --dump-bin teapot.dgf
DGFBaker configuration:
Cluster face limit: 128
Cluster vert limit: 256
Bit width : 16
Packer : SAH
Loading obj file: teapot.obj
Model size: 4690 verts 9128 tris 0 materials
Input size: 0.16MB
Baking DGF blocks...
Conversion took: 47.50ms
491 DGF blocks (0.00% palette)
6.8852 B/tri (2.64:1)
8953 block vertices, 9128 block triangles (0.98 V/Tri)
18.59 Tris/Block
18.23 Verts/Block
Vertex duplication factor: 1.91
Vertex duplication cost per byte: 0.47B/Tri
SAH is: 2.016384
Blocks per cluster: Min: 2 Max: 9 Mean: 4.63
Tris per cluster: Min: 50 Max: 127 Mean: 86.11
Validating DGF blocks...
Dumping...
Wrote: teapot.dgf
Clean exit

或者在运行时使用DGF SDK中的类似代码片段从DGF数据中提取值来填充VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX的成员。

{
m_sumBlockTris = 0;
m_sumBlockVerts = 0;
m_maxPrimIndex = 0;
m_maxGeomIndex = 0;
const auto numBlocks = GetNumDGFBlocks();
for (size_t block = 0; block < numBlocks; block++) {
const uint8_t* pBlock = m_blocks.data() + block * DGF::BLOCK_SIZE;
DGF::MetaData meta;
DGF::DecodeMetaData(&meta, pBlock);
uint8_t opaqueFlags[DGF::MAX_TRIS];
uint32_t geomID[DGF::MAX_TRIS];
DGF::DecodeGeomIDs(geomID, opaqueFlags, pBlock);
for (size_t i=0; i<meta.numTris; i++)
m_maxGeomIndex = std::max(m_maxGeomIndex, geomID[i]);
m_maxPrimIndex = std::max(m_maxPrimIndex, meta.primIDBase + (meta.numTris - 1));
m_sumBlockTris += meta.numTris;
m_sumBlockVerts += meta.numVerts;
}
}

此扩展的支持最初在AMD Software: Adrenalin Edition™ 25.10.25.02预览驱动程序中提供,之后将在即将推出的AMD Software: Adrenalin Edition驱动程序中提供。

还有一个简单的示例应用程序展示了该扩展的用法。

Basic sample

资源

要开始使用该扩展,请查看以下资源:

加入AMD开发者社区Discord服务器,与开发者同行和AMD员工在“GAME DEV BOARDS_”版块交流本次发布内容。

免责声明

第三方网站链接仅为方便用户提供,除非另有明确说明,AMD不对任何此类链接网站的内容负责,且不暗示任何认可。GD-98

Khronos和Vulkan是Khronos Group Inc.的注册商标。

Stuart Smith's avatar

Stuart Smith

Stu Smith是AMD的一名高级技术员工,负责Vulkan软件架构。在此之前,他曾为移动GPU编写驱动程序。
© . This site is unofficial and not affiliated with AMD.