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.

[参考译文] TDA4AEN-Q1:与常规纹理相比、使用 glEGLImageTargetTexture2DOES 生成纹理需要更多的时间并增加带宽。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1464476/tda4aen-q1-using-gleglimagetargettexture2does-to-generate-textures-takes-significantly-more-time-and-increases-bandwidth-compared-to-regular-textures

器件型号:TDA4AEN-Q1
Thread:TDA4VM 中讨论的其他器件

工具/软件:

 tda4AEN SDK10.0:
为了解决使用2560x1440层重叠更新 QT 内容时 GPU 时间增加的问题、我们当前使用共享存储器 DMA 句柄。 这涉及将图像内存对象eglCreateImageKHREGL_LINUX_DMA_BUF_EXT扩展名关联、并使用更新纹理内容glEGLImageTargetTexture2DOES。 虽然这种方法减少了更新期间的开销、但在使用纹理时会增加内存带宽并增加3-5ms 的延迟。

电路板端测试:

以 TDA4VM 为例测试2560x1440映像:

  • A. 将共享内存 DMAdma_fd ()与eglCreateImageKHR和一起使用glEGLImageTargetTexture2DOES以生成纹理。
  • b. 使用glTexImage2D生成纹理。
  • 使用统一渲染接口渲染。

比较结果如下:

DMA_FD 方法:

使用标准glTexImage2D纹理生成方法:

比较:

存在近似值的差异 200+ MB 额外增加 3ms dma_fd与标准glTexImage2D纹理生成方法相比、使用方法时的延迟。

我想问、问题的原因是否是使用创建映像时 EGL_LINUX_DMA_BUF_EXT,它通过 DMA 将数据从外部存储传输到 GPU 纹理,这可能会导致更高的 DDR 带宽消耗。 另一方面、 glTexImage2D是在 GPU 内创建纹理的标准方法、无需进行外部内存数据传输、从而降低了带宽消耗。 是否有任何其他因素会导致这种情况?是否有任何方法可以优化它?

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

    您好、谢:

    感谢您提出您的问题。 我指派了一位该主题的专家。

    此致、
    Sivadeep  

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

    您好:  

    在过去与 IMG 的对话中、不支持使用 DMA BUF 来生成"压缩"纹理的实用程序。 我有一个未结 TT、正在等待 IMG 澄清这是否是任何一般纹理的情况。

    我会在听到回复时更新此主题。

    谢谢您、
    Sarabesh S.

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

    好的、感谢您的答复。 如有任何进展、请尽快答复我。

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

    您好:  

    这一问题仍在研究之中。 但是,IMG 最初认为这个问题可能是由于数据类型分散而导致的,因此占用了大量的 b/w。 这与使用较少 DDR b/w 的带区数据相反。 您能否澄清或确认这一点?

    谢谢、
    Sarabesh S.

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

    我们使用虚拟地址的内容来更新纹理数据。 此方法生成的纹理具有较小的带宽。

    使用下面显示的方法生成和更新纹理。 如上所述、使用纹理时的带宽消耗将增加超过200米。

    您也可以尝试以下操作来读取图像的数据。
    第一种方法是将图像数据复制到共享存储器、生成相关的 DMA 信息、然后对其进行渲染。 观察其带宽消耗情况。
    第二种方法是使用 glTexImage2D 接口加载图像数据以生成纹理、然后进行渲染以观察其带宽消耗。

    您应该能够在尝试后观察到相同的现象。 我不知道产生差异的原因是什么。

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

    您好:

    对此延迟深表歉意。 遗憾的是、我没有带宽来深入探究它。 但是、我的理解是、 带宽使用在很大程度上取决于应用程序是否是分散读条纹纹理。 如果该应用旨在散射-读取 EGLImage 并受益于 mipmapping、建议使用自定义着色器将 EGLImage 复制到内部纹理上。  这种内部纹理将被扭曲和启用了 FBC、这会大大减少带宽。

    此致、
    Sarabesh S.

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

    您好:
    感谢您的答复。您有任何支持 FBC 的示例吗? 此"FBC"是指渲染环境的不同内存分配方法、还是指其他方法?

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

    您好:  

    抱歉、FBC 在此处不是正确的术语。 我实际上是指"纹理压缩"。 目前显示控制器无法处理 FBC、因此在 tidss 固定之前、无法选择 FBC。 但是、由 CPU 分配给 GPU 的纹理支持压缩。 您是否能够确认 是否压缩纹理、从而导致带宽降低? 我认为不同之处可能是 dma-buf 方法使用未压缩的数据、而不是 glTexImage2D 方法。

    此致、
    Sarabesh S.

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

    您好:

    从应用层来看、我们无法知道较低级别的具体实现差异、而这种差异正是该帖子讨论的内容。 这篇文章描述了产生差异的整个过程。 我最初的假设也是,DMA-BUF 数据在与纹理关联时没有被压缩,这导致我提出了这个关于是否需要额外处理的问题。

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

    您好:

    我明白。 然后、要回答您的问题、需要进行额外的处理。 特别是通过着色器复制方法,将图像呈现为 GPU 本地文本,以便您可以利用压缩格式。

    谢谢、
    Sarabesh S.