问题标签 [mali]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 深度纹理清除不起作用
我正在 OpenGL es 2.0 中实现阴影映射。我使用 OES_depth_texture 扩展将深度渲染为 UNSIGNED_SHORT 类型的 DEPTH_ATTACHMENT 纹理。该解决方案适用于我的 macbook,甚至适用于 WebGL。但是在 Android(Acer B1-721、Mali-400 MP、Android 版本 4.4.2)上,清除深度纹理存在问题。我没有在其他设备上尝试过(这是我唯一的安卓设备)。
大多数时候深度纹理根本不清晰。有时(很少)它会清除一帧。当我暂停应用程序或屏幕变暗时,它也会清除它。
我知道 Mali-400 MP 很旧,但它确实声称它支持 OES_depth_texture。仍然听起来像驱动程序问题。有没有人有类似的经历?规避这个问题的任何想法?
编辑:问题不仅在于深度纹理。在渲染到纹理时,我也遇到了与普通深度缓冲区类似的问题。当我降低纹理大小时它会变得更好,但仍然有一些闪烁。减少顶点数量也可以减少闪烁。可能是内存带宽问题?
编辑:关于这个问题的一些讨论https://www.opengl.org/discussion_boards/showthread.php/199655-Clearing-DEPTH_COMPONENT-of-type-UNSIGNED_SHORT-in-gles2-using-OES_depth_texture/page3 这不仅仅是清除不工作。FBO 深度缓冲区(纹理或渲染缓冲区,无关紧要)上的所有操作都在管道中的错误时间执行或被丢弃。glFinish 解决了这个问题,但不是一个很好的解决方案。
android - 计算着色器中的 GL_OES_EGL_image_external_essl3 扩展无法正常工作
我使用GL_OES_EGL_image_external_essl3
扩展来访问 GLSL 中的相机图片。对于片段着色器,它工作正常。这是我的简单片段着色器:
我可以从相机中看到照片。
但是,当我在管道中插入一个简单的计算着色器阶段,该阶段仅将数据从该外部图像复制到我显示的新纹理中时,我只能看到黑屏。我还在计算着色器中生成了一条红线用于调试。
这是该计算着色器的代码:
所以看起来它以相同的方式访问纹理,但是 vec(0,0,0,1) 被返回texture()
。所以屏幕是黑的。
在这两种情况下,我都像这样绑定纹理:
为什么这个扩展在我的计算着色器中不能正常工作?它应该在计算着色器中工作吗?
我的平台是三星 Galaxy S7 (Mali GPU)。
android - 使用 glMapBufferRange 映射的数据的 memcpy 性能不佳
我正在尝试从glMapBufferRange
使用 memcpy 映射的像素缓冲区中读取 4 兆字节。我的平台是三星 Galaxy S7 Exynos (Mali GPU)。问题是阅读性能非常差。复制数据大约需要 75 毫秒。
我像这样初始化缓冲区:
我将像素读取到缓冲区:
然后我使用以下代码从缓冲区中读取:
我使用以前的缓冲区进行读取以确保异步操作完成pbo_id[(counter - (NUM_BUFFERS-1)) % NUM_BUFFERS]
只有一个缓冲区,时间增加到 90 毫秒,两个或更多允许在 75 毫秒内完成操作。
我想这很慢,因为memcpu
在其他内存区域上,会在 1 或 2 毫秒内完成。
glMapBufferRange 的文档有一个注释:
映射到缓冲区对象的数据存储可能具有非标准的性能特征。例如,这样的映射可能被标记为不可缓存的内存区域,在这种情况下,从它们读取可能会非常慢。为确保最佳性能,客户端应以与 GL_BUFFER_USAGE 和访问值一致的方式使用映射。以与这些值不一致的方式使用映射可能比使用普通内存慢多个数量级。
所以问题是出了什么问题以及如何提高从缓冲区读取的性能。
arm - OpenACC-OpenMP 支持 Arm Mali GPU
我想问一下 OpenACC 或 OpenMP 是否支持 ARM Mali GPU。我使用支持 GPU 并行化的 OpenMP 4.0,但我不确定它是否在 GPU 上运行。你知道我该如何测试它吗?
c - OpenCL:查询移动 GPU 的最大时钟频率总是返回较小的值
为了了解 Mali T760 GPU 的最大时钟频率,我使用了以下代码片段:
此处提供完整源代码:https ://github.com/sivagnanamn/opencl-device-info
查询结果显示CL_DEVICE_MAX_CLOCK_FREQUENCY: 99 MHz
,规范中报告的时钟频率为 600MHz(src:https ://www.notebookcheck.net/ARM-Mali-T760-MP4.148383.0.html )
为什么规格中报告的实际时钟频率与 OpenCL 查询中的时钟频率之间存在差异?
编辑1:
这是用于查询支持 OpenCl 的 GPU 设备的最大时钟频率的代码的极简版本。
我在使用 Mali T760 GPU 的 ASUS TinkerBoard 上执行后得到的输出是
根据 OpenCL 文档,没有缩放因子。查询应返回以 MHz 为单位的频率(https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetDeviceInfo.html)
摘自 OpenCL 文档: CL_DEVICE_MAX_CLOCK_FREQUENCY - cl_uint - 设备的最大配置时钟频率,以 MHz 为单位。
但是,在 PC GPU(在 NVIDIA 和 Intel GPU 上测试)上运行相同的代码会根据规范返回预期的时钟频率。
opengl-es - 正在使用 Mesa 或 Mali?
我有一个嵌入式系统,它的 GPU 是 mali T624。我有glmark2和glmark2-es2,运行glmark2时,信息显示运行glmark2-es2时的台面软件渲染,信息显示T624 openGL ES 3.1
我的问题是,如果我有需要 openGL 加速的 QT 演示,我如何知道使用的是 Mesa 软件渲染还是 Mali HW 渲染?以及如何手动切换?
谢谢。
android - OpenGL ES 3.1 应用程序在 ARM Mali GPU 上不断闪烁
我已经为 Android 编写了一个 OpenGL ES 3.1 应用程序,并且我正在与一个特定平台 ARM Mali GPU 上的问题作斗争。该程序似乎可以在 Adreno 和 PowerVR GPU 上正确运行。
一帧由多个渲染通道组成。渲染通道在着色器存储缓冲区对象和原子计数器的帮助下进行通信。整个事情看起来像这样:
现在,问题是在马里屏幕一直在闪烁。我做了很多录音,并逐帧观看。发生的情况是,大约 95% 的帧看起来是正确的,但每隔一段时间就会有一个任意的对象子集消失,然后在下一帧中重新出现。
############################################问题是,我不知道是什么导致对象消失。到目前为止,我尝试的是继续删除代码以查看错误是否仍然存在 - 试图提出重现问题的最短代码段。这种方法失败了,因为我删除的代码越多,错误就越难以重现。最初它每秒大约持续发生两次,经过多次删除各种位后,我每分钟只能重现一次,最终我无法再重现它,但我不知道这是因为我刚刚删除了有问题的代码还是因为我刚刚通过了一些阈值,错误仍然存在,但现在很难重现。
我尝试的第二件事是通过查看 SSBO 来衡量错误。我在传递之间的某些时刻将其内存映射到 CPU,并确保它确实包含它应该包含的内容。不幸的是,只要我添加一个
几乎在应用程序代码的任何地方,错误都会消失。
特别是,当我删除第一个 glMemoryBarrier() 并用上面的替换它时,错误完全消失了(我记录了 10 分钟的屏幕并逐帧观看,它消失了)。即使我根本不检查 CPU 上的缓冲区,也会发生这种情况,我只是映射它并立即取消映射(哪个 AFAIK 应该具有与 memoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT) 一样的效果??)这引起了人们的怀疑,可能是 glMemoryBarrier Mali 上的 (GL_SHADER_STORAGE_BARRIER_BIT) 有问题,所以我写了一个测试程序来看看 - 这证明 glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT) 工作得很好。
我还有一个 Mali Graphics Debugger,我可以将它连接到手机,但是当我这样做时,错误会立即消失。我停止追踪——它再次开始每秒闪烁两次。
你对如何处理这样的问题有什么建议吗?
代码是 GPL v2 并且完全可以下载——尽管它是 45k 行的 Java、XML 和 GLSL。如果有人想看看,这里是:
http
://distorted.org/redmine/projects/distorted-android/wiki/How_to_compile_and_run_the_example_code (需要查看'order-independent-transparency'分支;master运行良好)
opencl - OrangePi Lite2 OpenCL 驱动程序
我最近购买了 OrangePi 的 Lite2 开发板,带有 Allwinner H6 SOC,其中包括四核 A53 + T720 Mali GPU。
在 H6 SPEC 中,它明确指出 GPU 支持 OpenCL 1.1 API,但是,我从 OrangePi 网站安装的 Ubuntu(桌面版)映像不包含 OpenCL 驱动程序,我无法在网络上的任何地方找到它。
有没有可能尽管 GPU 本身支持 OpenCL(在硬件方面)Allwinner 从未实现过它的驱动程序?还是我应该以某种方式使用 Mali 驱动程序重新编译 Linux 内核?
tensorflow - 在带有 GPU 的 armv8 设备上运行我的 tensorflow 代码后崩溃
我想通过使用 sycl 在带有 GPU 的 armv8 设备上运行 deeplab 模型。但我被困在那里。
我已经从源代码构建,然后在我的萤火虫 RK3399 设备上安装了 Tensorflow 轮,没有发生错误。但是当我使用以下代码运行 tensorflow 模型时:
崩溃调用如下:
然后我切换到传统方法
with tf.Session() as sess:
,当我运行sess.run()
同样的错误时。我还检查了
网站上的 error_code :
但是我不知道要解决这个问题,真正的原因是什么,如果我得到“将 SYCL 内核编译到 SYCL 设备时出错”如何处理这个问题。
配置
- CPU aarch64
- GPU 马里-T860
- 操作系统 ubuntu 16.04
- 设备萤火虫rk3399
- 软件 tensorflow-1.6.0 bazel-0.11.1 computeCpp-1.0.0 python2.7.12 gcc-5.4.0
这是我的 computecpp_info 输出:
firefly@firefly:/usr/local/computecpp/bin$ ./computecpp_info
ComputeCpp 信息 (CE 1.0.0)
SYCL 1.2.1 修订版 3
工具链信息:
GLIBC 版本:2.23 GLIBCXX:20160609 支持此版本的 libstdc++。
设备信息:
发现 1 个设备匹配:平台:设备类型:
设备 0:
支持设备:否 - 设备不支持 SPIR
CL_DEVICE_NAME:马里-T860
CL_DEVICE_VENDOR:ARM
CL_DRIVER_VERSION:1.2
CL_DEVICE_TYPE : CL_DEVICE_TYPE_GPU
如果您在使用任何这些 OpenCL 设备时遇到问题,请访问此网站了解已知问题: https ://computecpp.codeplay.com/releases/v1.0.0/platform-support-notes
我收到了 的突出显示警告Device is supported : NO - Device does not support SPIR
,但说明告诉我没关系!所以我不介意,这应该是一个问题吗?