簡體   English   中英

如何測量從計算着色器到渲染着色器的GPU上下文切換

[英]How to measure a GPU Context Switch from Compute to Rendering Shader

在OpenGL中,我派遣計算着色器以基於運動方程式計算給定對象模型中的新頂點位置。 然后,我通過頂點/片段渲染着色器程序來渲染這些新的頂點位置。 我的理解是,每當我調度計算着色器時,它都會啟動需要有限時間的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 ,它將允許渲染操作讀取計算着色器編寫的內容。

假設您的GL實現有意義地支持 計時器查詢,則計時器查詢聽起來應該可以工作:

計時器查詢是查詢類型GL_TIMESTAMP和GL_TIME_ELAPSED的集合名稱。 這些用於測量各種操作的GPU時序。 返回的所有時間均以納秒為單位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM