【问题标题】:OpenGL ES 3.0 Matrix/Array StrideOpenGL ES 3.0 矩阵/数组步幅
【发布时间】:2019-12-07 09:00:32
【问题描述】:

我有这个 UBO:

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

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

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

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

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

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

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

【问题讨论】:

  • 只是为了避免重复工作 - 我在 community.arm.com 论坛上回答了这个问题。它看起来像处理非方形行主矩阵的 Mali 驱动程序错误。

标签: opengl-es glsl shader opengl-es-3.0 mali


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    相关资源
    最近更新 更多