iOS Metal -我可以为顶点位置和颜色使用降低精度的半值吗?



我正在尝试在Metal中渲染点云时节省内存。我看到一个教程建议使用半类型(可能在Mac上)。我想尝试在iOS上使用Metal渲染时返回顶点位置和颜色的一半,但会出现以下错误。

我看到Apple说这里的位置和颜色必须是浮动的

是否有一种方法来配置金属渲染接受位置和颜色的一半值?

struct ParticleVertexOut {
half4 position [[position]]; //Type 'half4' (vector of 4 'half' values) is not valid for attribute 'position'
half pointSize [[point_size]]; // Type 'half' is not valid for attribute 'point_size'
half4 color;
};

简短的回答是不,你不能。

长答案是:如果你检查金属遮阳语言规范,表5.3。顶点函数返回类型的属性,[[position]]只能有float4类型,与[[point_size]]相同。

我不认为你能在这里节省任何内存带宽作为顶点输出进入平铺顶点缓冲区,至少在苹果gpu上。除非你有太多的几何图形,它会溢出到系统内存中,所有这些顶点数据都留在芯片上,不会占用任何额外的空间。有一些关于它的讨论,比如利用金属来驾驭苹果gpu, WWDC20更详细。

也,我不认为half有足够的精度屏幕空间坐标在某些情况下,但我可能是错的。至于为什么它必须保留float的其他可能原因,我想说这是因为其他GPU供应商可能有一个更"固定"的解决方案。顶点管道,但是不要引用我的话

相关内容

最新更新