OpenGL - 顶点结构与 32 字节对齐?

发布于 2024-10-15 17:58:53 字数 265 浏览 2 评论 0 原文

我读到,如果将顶点数据对齐为 32 字节,某些显卡会受益。

这通常涉及添加填充:

typedef struct {
  float x, y, z;
  int padding[5];
} Vertex;

但我一直想知道,这是否也意味着您应该分配要对齐到 32 字节的数据(malloc 对齐到 1 字节)?意思是指向数据的指针会平均分为 32 份?有关系吗?

(我正在将此数据上传到VBO)

谢谢

I have read that some graphics cards benefit if you align your vertex data to be 32 bytes.

This usually involves adding padding:

typedef struct {
  float x, y, z;
  int padding[5];
} Vertex;

But I have been wondering, does this also mean you should allocate the data to be aligned to 32-bytes (malloc aligns to 1-byte)? Meaning the pointer to the data would divide evenly into 32? Does it matter?

(I am uploading this data to a VBO)

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回梦里 2024-10-22 17:58:53

通常,如果源内存对齐(目标内存通常也是对齐的),从客户端内存到 VBO 的复制操作会更快。这在某种程度上取决于您如何上传到 VBO。

也就是说,上传将是唯一因对齐而得到提升的事情。一旦内存位于 VBO 中,VBO 服务器内存的对齐(您无法控制)就很重要(GL 实现知道这一点,并且它们确实会对齐 VBO 内存)。

哦,带有 20 字节填充的 32 字节不会比带有 4 字节填充的 16 字节更快。重要的是你有一个二次方的大小,这样单个完整的顶点获取就不会跨越缓存行。

最后,malloc 不与 1 字节对齐。它至少符合基本类型的最低对齐要求,在大多数平台上为 8。

Typically, the copy operation from the client memory to the VBO can be faster if the source memory is aligned (the destination typically will be). It somewhat depends on how you do the upload to the VBO.

That said, the upload will be the only thing that gets boosted by the alignment. Once the memory is in the VBO, it's the alignment of the VBO server memory (that you don't control) that matters (GL implementations know this, and they do align the VBO memory).

Oh, and 32 bytes with 20 bytes padding is just not going to be faster than 16 with 4 bytes of padding. What matters is that you have a power-of-two size, so that a single complete vertex fetch does not straddle cachelines.

Last, malloc does not align to 1 byte. It aligns at least to the minimum alignment requirement of basic types, which on most platforms is 8.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文