4

計算シェーダーの時間を測定する必要があります。しかしもちろん、これは些細なことではありません。OpenGL Wiki - Performance I gotから、シェーダー呼び出しの前後に 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
}

glFinish()位置に挿入し、(1)でタイマーを開始し、 で(2)停止する必要があると思い(3)ます。しかし、それが本当に機能し、正しいタイミング結果が生成されるかどうかはわかりません。参照ではレンダリングについて話していて、計算シェーダーはレンダリングではないからです。

OpenGL Timer_Queryも存在しますが、それがどのように機能するかはわかりませんし、それを使用するのが役立つかどうかもわかりません。これは私にとって初めてのことであり、現時点で完全に理解しているかどうかはわかりません。

ここからの回答によると、コードの一部を正確に測定することはほとんど不可能です。最良の方法は、フレームのレンダリング時間を測定することですが、私の目的には、フレームのレンダリング時間の計算シェーダー部分だけが必要です。

それを行うための最良の代替手段は何だと思いますか? フレーム全体のレンダリング時間を測定して使用するだけですか? それとも、他の測定方法でより良い体験をしましたか?

4

1 に答える 1