2011-08-27 39 views
2

我在評論中將其寫爲一個問題,但我覺得它值得自己去考慮。使用OpenGL ES 2.0在iPhone/iPad上共軛漸變

我想在iPhone/iPad上構建一個共軛梯度解算器,因爲它將爲這些設備上的GPGPU編程(例如實時光流/實時模擬/實時有限元素)開闢一個新的可能性領域。

來自GpuGems的寫得很好的章節解釋瞭如何使用浮點紋理完成。

我遇到的第一個問題是,我還沒有設法創建浮點渲染到紋理。也許我只是沒有爲我的紋理設置正確的參數。例如,此代碼在第一行成功,但第二行代碼失敗,出現GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT錯誤。

glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 256, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0); 

所以,我的問題是我怎麼能在iPhone/iPad上渲染到浮點紋理?

另外還有另一種方法來解決這個問題? 我認爲一個混亂的替代方案是在碎片着色器中使用浮點紋理,然後通過簡單地將其前8位存儲在R中,然後將結果16位半浮點數轉換爲片段着色器中的常規gl_FragColor, G的gl_FragColor。然後我可以使用glReadPixels從FB中讀取這些值,並將它們重新解釋爲半浮點數並將該數據轉換爲新紋理並重復該過程。 這個明顯的問題是,它需要從GPU回到CPU然後回到GPU非常浪費的往返行程,而且很確定它不會給速度帶來任何改進。

有沒有人有任何想法?

+2

雖然半浮點紋理(尤其是渲染目標)更可能通過iGPUs被supprted,他們不會買任何東西在CG的背景下求解器,我認爲,因爲我懷疑一半的精度對於實際問題是足夠的(單精度可能已經太少了)。我想你需要一個非常好的預處理器,除了矩陣向量產品(至少如果你想擊敗CPU模式),尤其是在使用片段着色器時,Jacobi預處理器之外的所有東西都比矩陣向量產品更棘手比CUDA/OpenCL更有限。 –

+0

幸運的是,我們將使用雅可比預處理器。我將嘗試使用這裏描述的方法:http://msdn.microsoft.com/en-us/library/ee416413(v=vs.85).aspx。它看起來是模擬浮動的最佳方式。很明顯,編碼和解碼的代價會很大,但它仍然值得。最後,如果這不起作用,我會使用氖原子,這將保證3倍到8倍。但是那是Il從NEON得到的最多。 – twerdster

+0

如果你的意思是這個RGBE共享指數格式,這更糟糕。你只有9位精度,只有指數完全相同,他們肯定不會。如果精度格式極度降低(可能適用於顏色),當嘗試求解真正的線性方程組時,您肯定會遇到問題,特別是在使用簡單的Jacobi預處理器時。 –

回答

0

擡頭望加快圖書館,VDSP功能