我想我會回覆迄今爲止發現的。簡短的回答是,不,我不認爲Silverlight 5上的3D管道可以用於這種事情。一方面,據我所知,作爲管線一部分的像素着色器和頂點着色器實際上是在GPU上執行的(與在CPU上執行的Silverlight 4中的2D着色器不同) 。
但是,說:
(1)我讀過的一切說,獲取數據到GPU是非常快的,但是,對於大多數機器,獲取這些數據,GPU的要慢得多,在毫秒級。這使得我們不太可能(比如說)使用執行FFT所需的數據加載GPU,執行FFT,然後將數據拉回的速度比我們在CPU上做得更快。 (2)Silverlight 5有一套非常有限的指令集,它可以在GPU上執行。具體而言,它限於HLSL Level 2,其中有可用的指令和寄存器數量有限。我懷疑在這些有限的指令中對FFT或DCT進行建模可能 - 最好的情況是非常困難和非常慢。 (3)但是即使我們能夠解決這兩個限制,從我所知道的情況來看,Silverlight沒有任何能力讀取GPU正在執行的計算結果。正常的XNA(Silverlight的3D功能所基於的框架)具有各種GetData()或GetTexture()方法,我認爲您可以使用它們來讀取一組計算結果。但是他們的Silverlight 5版本中缺少這些等效的方法。從我可以告訴的一切,在Silverlight 5中,GPU是一個只寫設備。您將着色器加載到它上面,加載數據,拉動觸發器,然後再次揮手。您的代碼將永遠不會再看到這些字節。
如果事實證明我錯了,我會回到這裏並更新這個答案。但至少在目前看來,這似乎是一個死衚衕。
[編輯10/10/11 - 根據MS的Shawn Hargreaves,這在Silverlight 5中不受支持。他猜測爲什麼(a)難以在所有GPU驅動程序中保持一致地工作,和(b)除了一小部分演示程序風格的問題外,沒有任何意義。噢。]