首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLSL SSBO内存对齐与填充

GLSL SSBO内存对齐与填充
EN

Stack Overflow用户
提问于 2022-02-22 04:55:12
回答 1查看 350关注 0票数 0

在我的顶点着色器中,我有一个SSBO,用于访问每个对象的各个数据部分。

代码语言:javascript
复制
struct Object
{
    vec2 vertices[4];
    uint index;
    vec2 position;
};

layout(set = 0, binding = 0) buffer ObjectBuffer
{
    Object objects[];
};

我没有问题访问前两个元素verticesindex。然而,当我访问position.x时,它给出了position.y中的值,当我访问position.y时,它给了我一些胡言乱语。

为了解决这个问题,我交换了indexpositionObject结构中的顺序。

使用我有限的知识,我假设由于内存对齐规则,它接受了结构中最大的数据类型,即vec2 (假设浮点数=4字节,4*2=8字节)。假设uint也是4个字节,那么接下来的4个字节(也就是position.x)作为填充吗?

虽然我能够解决这个问题(目前)通过改变顺序,我还能做什么来确保适当的内存对齐?

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 19:40:10

你能用字节偏移来确定你的物理内存布局吗?

我希望每个对象对齐8字节,包括:

代码语言:javascript
复制
32 bytes (vec2 vertices[4])
 4 bytes (index)
 4 bytes (padding, as position needs to be 8 byte aligned)
 8 bytes (position)

,我还能做些什么来确保正确的内存对齐?

仔细阅读std430布局规则(对于存储缓冲区)。注意,统一缓冲区默认为std140布局,而不是std430

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71216090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档