1

我有这个 UBO:

layout(std140)uniform _ObjMatrix
{
    layout(row_major)mat4x3 ViewMatrix[256];
};

在 OpenGL 桌面上,大小为 3*Vec4*256 元素(总大小 12288 字节) - 这是我所期望的 = OK

但是在我的手机上运行时,OpenGL ES 3.0,大小为 4*Vec4*256 个元素(总大小 16384 字节)= Not OK

我认为std140应该保证所有平台上的布局相同?

那么问题是什么以及如何解决呢?

我需要更小的尺寸以获得更快的性能(因为传输带宽更小)

在桌面、Apple iOS 上工作正常,但在 2 个 Android ARM Mali GPU 上失败,这可能是 ARM Mali 驱动程序中的错误

4

1 回答 1

2

这是一个已确认的 Mali 驱动程序错误,它会影响row_major数组声明的注释。解决方法是将row_major注释应用于统一块而不是数组元素:

layout(std140, row_major) uniform _ObjMatrix {
    mat4x3 ViewMatrix[256];
};
于 2019-07-30T11:35:51.993 回答