我需要测量计算着色器的时间。但是这当然不是一件简单的事情。
在OpenGL Wiki - Performance上,我了解到在着色器调用之前和之后使用glFinish()很有用。但他们也说使用它并不是那么好。有没有好的方法来测量我的着色器的时间?有没有任何方式来测量计算着色器的时间?
我的代码看起来像这样:
我猜我需要在位置
OpenGL还有一个 Timer_Query ,但我不确定它如何工作,也不知道使用它是否有用。这对我来说是新东西,目前我不确定自己是否完全理解它。
来自 这里 的答案说,几乎不可能精确测量代码的一部分。最好的方法是测量帧渲染时间,但是我只需要计算着色器部分的帧渲染时间。
你认为最好的替代方法是什么?只测量整个帧渲染时间并将其用于我的目的?或者您使用其他测量方法获得更好的经验?
在OpenGL Wiki - Performance上,我了解到在着色器调用之前和之后使用glFinish()很有用。但他们也说使用它并不是那么好。有没有好的方法来测量我的着色器的时间?有没有任何方式来测量计算着色器的时间?
我的代码看起来像这样:
renderloop()
{
//(1)
//(2)
if(updateFunction) //this is done just one time at the beginning
{
//update Texture with a compute shader
//...
glDispatchCompute();
glMemoryBarrier(GL_ALL_BARRIER_BITS);
}
//(3)
//(1)
//use the texture to do some marching cubes rendering
}
我猜我需要在位置
(1)
插入glFinish()
,并在(2)
开始计时器,在(3)
停止它。但我不确定它是否真的有效并会产生正确的时间结果,因为参考文献中谈论了渲染,而计算着色器并非渲染,对吗?OpenGL还有一个 Timer_Query ,但我不确定它如何工作,也不知道使用它是否有用。这对我来说是新东西,目前我不确定自己是否完全理解它。
来自 这里 的答案说,几乎不可能精确测量代码的一部分。最好的方法是测量帧渲染时间,但是我只需要计算着色器部分的帧渲染时间。
你认为最好的替代方法是什么?只测量整个帧渲染时间并将其用于我的目的?或者您使用其他测量方法获得更好的经验?