像素路径性能警告:像素传输与 3D 渲染同步

2023-12-21

我正在将图像数据上传到 GL 纹理中异步地 http://on-demand.gputechconf.com/gtc/2012/presentations/S0356-GTC2012-Texture-Transfers.pdf.

在调试输出中,我在渲染过程中收到以下警告:

来源:OpenGL,类型:其他,id:131185,严重性:通知
消息:缓冲区详细信息:缓冲区对象 1(绑定到 GL_PIXEL_UNPACK_BUFFER_ARB,使用提示为GL_DYNAMIC_DRAW)已 在系统堆内存中映射 WRITE_ONLY(快速)。来源:OpenGL,类型: 性能,id:131154,严重性:中消息:像素路径 性能警告:像素传输与 3D 渲染同步。

在我的案例中,我看不到 PBO 的任何错误用法或任何错误。所以问题是,这些警告是否可以安全地丢弃,或者我实际上做错了。

我那部分的代码:

    //start copuying pixels into PBO from RAM:
    mPBOs[mCurrentPBO].Bind(GL_PIXEL_UNPACK_BUFFER);

    const uint32_t buffSize = pipe->GetBufferSize();
    GLubyte* ptr = (GLubyte*)mPBOs[mCurrentPBO].MapRange(0, buffSize, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
    if (ptr)
    {
        memcpy(ptr, pipe->GetBuffer(), buffSize);
        mPBOs[mCurrentPBO].Unmap();
    }

  //copy pixels from another already full PBO(except of first frame into texture //
    mPBOs[1 - mCurrentPBO].Bind(GL_PIXEL_UNPACK_BUFFER);
     //mCopyTex is bound to mCopyFBO as attachment
    glTextureSubImage2D(mCopyTex->GetHandle(), 0, 0, 0, mClientSize.x, mClientSize.y,
            GL_RGBA, GL_UNSIGNED_BYTE, 0);

    mCurrentPBO = 1 - mCurrentPBO;

然后我只是将结果传输到默认帧缓冲区。没有几何图形或类似的渲染。

  glBlitNamedFramebuffer(
            mCopyFBO,
            0,//default FBO id
            0,
            0,
            mViewportSize.x,
            mViewportSize.y,
            0,
            0,
            mViewportSize.x,
            mViewportSize.y,
            GL_COLOR_BUFFER_BIT,
            GL_LINEAR);

在 NVIDIA GTX 960 卡上运行。


此性能警告是特定于 nividia 的,旨在作为提示告诉您,您不会使用单独的硬件传输队列,这并不奇怪,因为您使用单线程、单 GL 上下文模型,其中两者都渲染(至少你的blit)和传输都进行了。

See 这个英伟达演示 http://on-demand.gputechconf.com/gtc/2012/presentations/S0356-GTC2012-Texture-Transfers.pdf有关 nvidia 如何处理此问题的一些详细信息。第 22 页还解释了这一特定警告。请注意,此警告确实not意味着您的传输不是异步的。它仍然与 CPU 线程完全异步。它只会在 GPU 上同步处理,相对于同一命令队列中的渲染命令,并且您没有使用异步复制引擎,该引擎可以独立于单独命令队列中的渲染命令来执行这些复制。

在我的案例中,我看不到 PBO 的任何错误用法或任何错误。所以问题是,这些警告是否可以安全地丢弃,或者我实际上做错了。

您的 PBO 使用没有任何问题。

目前尚不清楚您的特定应用程序是否可以从使用更复杂的单独传输队列方案中受益。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

像素路径性能警告:像素传输与 3D 渲染同步 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐