gpt4 book ai didi

c++ - 如何测量从计算到渲染着色器的 GPU 上下文切换

转载 作者:行者123 更新时间:2023-11-28 05:05:57 25 4
gpt4 key购买 nike

在 OpenGL 中,我分派(dispatch)计算着色器根据运动方程计算给定对象模型中的新顶点位置。然后我通过顶点/片段渲染着色器程序渲染这些新的顶点位置。我的理解是,每次我分派(dispatch)计算着色器时,它都会启动 GPU 设备上下文切换,这需要花费有限的时间。

有人可以分享如何测量 OpenGL 中计算着色器和渲染着色器之间的上下文切换。我假设这是非常短的时间,但我需要测量它。感谢您的见解。

最佳答案

没有办法专门测量上下文切换时间。您只能测量特定 OpenGL 命令之间的时间(通过计时器查询),并且没有 OpenGL 命令来执行上下文切换。它是您发送的实际 OpenGL 命令的副产品。

你能得到的最接近的是这样的:

glBindVertexArray(emptyVAO);
glEnable(GL_RASTERIZER_DISCARD); //Do the absolute minimal rendering.
glBindProgramPipeline(minimalComputeTask); //Compute shader that does nothing, using no resources and writing no values.
glDispatchCompute(1, 1, 1); //Done before the timer query, to force a switch to compute contexts.
glBeginQuery(GL_TIME_ELAPSED​, queryObject);
glDispatchCompute(1, 1, 1);
glBindProgramPipeline(minimalRenderShaders); //VS does nothing and takes no inputs; no FS at all, since we're discarding.
glDrawArrays(GL_POINTS, 0, 1);
glEndQuery(GL_TIME_ELAPSED);
glDisable(GL_RASTERIZER_DISCARD);

然后您提取查询并读取时间。但这甚至包括实际执行计算和渲染操作所花费的时间。在您的情况下,您的时间可能应该包括一个 glMemoryBarrier,它允许渲染操作读取计算着色器写入的内容。

关于c++ - 如何测量从计算到渲染着色器的 GPU 上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com