Я думал, что отправлю обратно то, что обнаружил до сих пор.Короткий ответ: нет, я не думаю, что 3D-конвейер в Silverlight 5 можно использовать для такого рода вещей.С одной стороны, насколько я могу судить, пиксельные шейдеры и вершинные шейдеры, являющиеся частью конвейера, фактически выполняются на GPU (в отличие от 2D-шейдеров в Silverlight 4, которые выполнялись на CPU),
Но это говорит:
(1) Все, что я прочитал, говорит о том, что загрузка данных в GPU очень быстрая, но для большинства машин получение этих данных из GPU - это оченьмедленнее, порядка миллисекунд.Это делает маловероятным, что мы можем, скажем, загрузить GPU данными, необходимыми для выполнения FFT, выполнить FFT, а затем извлечь данные обратно быстрее, чем мы могли бы просто сделать это на CPU.
(2) Silverlight 5 имеет очень ограниченный набор инструкций, которые он может выполнять на GPU.В частности, он ограничен HLSL уровня 2 , который имеет ограниченное количество доступных инструкций и регистров.Я сомневаюсь, что было бы возможно - в лучшем случае, это было бы очень трудно и очень медленно - моделировать БПФ или DCT в рамках этих ограниченных инструкций.
(3) Но даже если бы мы могли обойтиИз этих двух ограничений, насколько я могу судить, Silverlight не имеет возможности считывать результаты вычислений, выполняемых графическим процессором.Обычный XNA (каркас, на котором основаны трехмерные функции Silverlight) имеет различные методы GetData () или GetTexture (), которые, я думаю, можно использовать для чтения результатов набора вычислений.Но эти эквивалентные методы отсутствуют в их версиях Silverlight 5.Из всего, что я могу сказать, в Silverlight 5 графический процессор является устройством только для записи.Вы загружаете на него свои шейдеры, загружаете данные, нажимаете на курок и машете на прощание.Ваш код никогда не увидит эти байты снова.
Если окажется, что я ошибаюсь, я вернусь сюда и обновлю этот ответ.Но, по крайней мере, на данный момент все выглядит так, как будто это тупик.
[Редактировать 10/10/11 - Согласно Шон Харгривз из MS, это не поддерживаетсяв Silverlight 5. Его предположение о том, что (а) было бы трудно заставить его работать согласованно для всех драйверов графического процессора, и (б) для всех, кроме крошечного класса проблем в стиле демонстрационной программы, это не будетиметь смысл.Ну хорошо.]