This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DRA756:如何将拼版从 GPU&#39帧缓冲区快速加载到 ARM&#39存储器?

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/619507/dra756-how-to-load-imags-from-gpu-s-framebuffer-to-arm-s-memory-quickly

器件型号:DRA756

我使用 SGX 544 GPU 来呈现3D 空间、然后我要将渲染的图像从 GPU 存储到 ARM 存储器。 因此、我使用 glReadPixels 从 GPU 的帧缓冲区读取图像。 但 glReadPixels 需要花200ms 才能得到一帧。 是否有其他方法从 GPU 的帧缓冲区读取图像(共享存储器或其他方法)?  

顺便说一下,我的帧缓冲区大小是1280*720。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    问题已提交给 GPU 专家。

    此致
    露西
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    是的、glReadPixels 的速度非常慢、因为它涉及一个副本。 您使用的是哪款 SDK?

    如果您使用的是 Processor SDK Linux Auto 3.02、则可以选择创建 DMABUF FD 并使用 GBM_BO_IMPORT 函数将其导入 GBM BO。 之后、您可以将其用作 GBM Pixmap 表面以进行渲染。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、感谢您的回复。 我们使用 VISION_SDK_02_09_01_00、因此需要升级到 Processor SDK Linux Auto 3.02。 对吗?

    此致、

    苏梅森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anand、您好!

    感谢您的回复。 我认为我的同事在上一个帖子中没有明确说明这一点。

    我们尝试从帧缓冲区中获取纹理、然后将其编码为 H264格式以供进一步使用。 我不知道我们是否走上了正确的道路。

    我们使用的 SDK 版本是 VISION_SDK_02_09_01_00。 您对此 SDK 有什么建议吗?

    此致、
    Matt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    是的、我认为您应该转到支持 Processor SDK Linux Auto 3.02的 Vision SDK 3.x。 K4.4上的现有环视演示已使用此选项导入 DMABUF。

    从本质上讲、您不会从 GPU 缓冲器读取数据。 创建 DMABUF、将其映射为 Pixmap 并呈现给它。 由于 DMABUF 是由应用程序提供的,因此无需使用 glReadPixels()。 应用程序已在其地址空间中映射帧缓冲区。

    此致、
    Anand

    PS:
    由于您使用的是 Vision SDK、此帖子是否应转到 TDA 论坛?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    DMABUF 就是 ARM 的存储器、对吧? 然后、我可以使用此内存将渲染的图像编码为 H.264格式的视频。 因为我需要将此视频发送到另一台设备并实时显示该设备上的视频、所以速度是关键点。 您知道在这个 DMABUF 上渲染一个 Fame (1280x720)需要多长时间吗?

    此致、
    苏梅森

    我认为这个主题可以转到 TDA 论坛。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    如 Anand 所建议、请转至 Vision SDK 3.0、其中我们已有一个几乎符合您要求的用例。

    请参阅\vision_sdk\apps\src\HLOS\ADAS\src\usecases\avbrx_sv_display_avbtx 下的内容

    这在 SGX 上执行3D SRV 渲染、然后执行 DSS M2M 写回、以将数据格式从 ARGB32转换为 YUV420 (IVA 编码器仅支持此格式)、然后使用 AVB Tx 进行 H264编码和流式传输。

    用于呈现的缓冲区从 IPU 空间(共享存储器)中分配、并提供给 GPU、因此不需要帧复制。

    此致、Shiju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要回答上一个问题、是的、DMABUF 是 Linux 内核提供的一项功能。 因此、该存储器属于 ARM Cortex-A15。 由于 GPU 使用整个 DDR 地址空间(NUMA 架构)、因此 GPU 可以访问该地址空间。

    应用程序使用能够导出 DMABUF 的驱动程序来分配 DMABUF。 在 J6上、omapdrm 驱动程序支持可导出为 DMABUF 的缓冲区分配。

    在 VisionSDK 用例中、我们采用 M4分配的缓冲区并将其包装为 DMABUF。 这可能并不是您的用例所完全需要的-您只需使用 omapdrm 来分配 DMABUF。

    即使如此、您也可以使用 Shiju 指向的 ARM 端代码来引用 DMABUF 如何映射为 GPU 渲染表面。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Shiju 和 Anand 对这一问题的详细答复。 现在、我的同事正在尝试使用 VISION_SDK_02_09_01_00中的 Vision SDK 3.0。 出于我的理解、我们需要使用新内核并修改我们的引导环境。 因此、我们有时需要先使用新的 DMABUF。 然后、我将在我们测试 DMABUF 后为您提供一些更新。

    谢谢你。

    此致、
    苏梅森