Ich habe eine Audiobibliothek für Silverlight, die auf langsameren Computern etwas beschleunigt werden muss. Insbesondere verwendet diese Bibliothek die FFT-Transformation in großem Umfang und wiederholt als Teil ihrer Algorithmen zur akustischen Echokompensation und Rauschunterdrückung, und ich frage mich, ob es sinnvoll wäre, die GPU dafür zu verwenden (wie beispielsweise beschrieben) hier: http://www.inf.fu-berlin.de/lehre/SS10/SP-Par/download/fft1.pdf ).
Ich weiß, dass Silverlight 5 eine ziemlich einfache Portierung des XNA-Frameworks von Microsoft bietet, aber leider bin ich ein absoluter Neuling in der 3D-Codierung im Allgemeinen und in XNA im Besonderen. Es scheint mir, dass es theoretisch möglich sein sollte, eine Kombination aus Scheitelpunkt- und / oder Pixel-Shadern zu verwenden, um diese Magie zu wirken, aber bevor ich diesen Weg zu weit gehe, wollte ich einige Expertenmeinungen zu einigen Fragen einholen:
(1) Die XNA-Implementierung von SL5 wirft die Ausgabe seiner Pipeline auf eine einzelne "DrawingSurface". Ich hatte gedacht, dass ich hier möglicherweise die Ergebnisse der Berechnungen lesen kann (so wie Sie eine WriteableBitmap verwenden können, um die Ergebnisse von Pixel-Shader-Berechnungen in SL4 zu lesen). Aber ich kann nicht herausfinden, wie ich das machen würde: Es gibt keine "GetPixels ()" - Methode oder ähnliches. In regulärem XNA 4.0 verfügt der VertexBuffer über eine GetData () -Methode, ebenso wie die Texture2D- und Texture3D- Klassen. Diese Methoden fehlen jedoch in der SL5-Version . Kennt jemand eine Möglichkeit, die Ergebnisse von Shader-Ausgaben tatsächlich zu lesen? Oder ist die GPU ein schreibgeschütztes Gerät in SL5?
(2) Es scheint, dass das eigentliche Problem bei GPU-Berechnungen darin besteht, die Ergebnisse schnell zu lesen . Angenommen, ich kann Problem Nr. 1 lösen, weiß jemand, ob eine FFT für diese Art von Lösung geeignet wäre?
(3) Silverlight 5 ist auf HLSL Level 2 beschränkt, das eine Reihe schwerwiegender Einschränkungen aufweist, was Anweisungen, Register, verfügbare Funktionen usw. betrifft. Ist es überhaupt vernünftig zu erwarten, dass eine FFT oder ein Teil davon darauf portiert werden kann?
Danke im Voraus.
Antworten:
Laut Shawn Hargreaves (von MS) wird dies in Silverlight 5 nicht unterstützt. Seine inoffizielle Vermutung, warum (a) es schwierig sein würde, es auf allen GPU-Treibern konsistent zum Laufen zu bringen, und (b) für alle außer Eine winzige Klasse von Problemen im Demo-Stil, die keinen Sinn ergeben würden.
Naja.
quelle
Ich habe einen benutzerdefinierten Inhaltsimporter für eine Texture2D in "GetData" geschrieben.
http://www.dustinhorne.com/post/2011/12/28/Getting-Color-Data-for-a-Texture2D-in-Silverlight-5-XNA.aspx
quelle