微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我看到Apple says that position and color have to be float here.

有没有办法将 Metal 渲染配置为接受位置和颜色的半值?

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;
};

解决方法

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

长答案是:如果你查看 Metal Shading Language Specification,表 5.3。顶点函数返回类型的属性,[[position]]只能有float4类型,同[[point_size]]

我认为您无法在此处节省任何内存带宽,因为顶点输出进入平铺顶点缓冲区,至少在 Apple GPU 上是这样。除非您有太多几何图形并且它溢出到系统内存中,否则所有这些顶点数据都保留在芯片上并且不会占用任何额外空间。有一些关于它的讨论,比如 Harness Apple GPUs with Metal,WWDC20 更详细。

另外,在某些情况下,我认为 half 对屏幕空间坐标的精度不够,但我可能是错的。至于它必须保持 float 的其他可能原因,我想说是因为其他 GPU 供应商可能拥有更“固定”的顶点管道,但同样,不要引用我的话。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。