В настоящее время я разрабатываю приложение для Windows 8 Store, Windows 8 Desktop, а также Windows 7. Приложение должно плавно работать на планшете, а также на "обычном" устройстве с Windows 7/8. Итак, я получил планшет с работы и установил на него Windows 8, только чтобы понять, что жуткий Intel Graphics Media Accellerator (600) поддерживает только DirectX 9.0c.
Итак, я уже несколько часов пытаюсь заставить мои DirectX10/11 эффекты/шейдеры работать на DirectX9, но ничего не получается... Тест с NVidia's FxComposer показал мне, что DirectX9 эффекты работают хорошо.
Я программирую на SharpDX / C#, и техника10's и техника11's действительны (MyTechnique.IsValid == true). Для загрузки эффекта я использую следующие строки кода:
var EffectByteCode = ShaderBytecode.CompileFromFile("DirectX/Shaders/"+FxFile, "fx_5_0", ShaderFlags.None, EffectFlags.None);
var Effect = new Effect(GraphicsProvider.Device, EffectByteCode, EffectFlags.None);
mEffect = FxEffect;
mTechnique11 = mEffect.GetTechniqueByName("main_11"); //works
mTechnique10 = mEffect.GetTechniqueByName("main_10"); //works
mTechnique9 = mEffect.GetTechniqueByName("main_9"); //doesn't work
Я вставил исходный код эффекта сюда: http://pastebin.com/KPxBN1DD... исключил "main_11" и "main_10", в моих тестах я их закомментировал, поэтому я просто удалил эти блоки комментариев... я думаю, dx9 должен понять этот очень простой код...
Итак, мои последние вопросы:
Edit: Попытался немного прояснить вопрос(ы)...
Устаревший фреймворк Effect не поддерживается в Windows 8 Metro (потому что D3DCompiler_xx.dll не поддерживается), поэтому вам лучше работать с другим решением. Кроме того, Effect устарел и больше не поддерживается компанией Microsoft.
Старая техника Direct3D9 (скомпилированная с помощью vs_2_0 или ps_2_0) не сохраняется в файлах FX, скомпилированных с помощью fx_5_0 (просто проверьте вывод компилятора fxc.exe и вы их не увидите).
Вы должны использовать vs_4_0_level_9_x или ps_4_0_level_9_x, чтобы скомпилировать их для аппаратной поддержки 9.x нижнего уровня, используя синтаксис technique10/11. Также, если все ваши оригинальные шейдеры могут работать с vs_4_0_level_9_x и у вас'нет какой-либо конкретной оптимизированной версии для 10.0 или 11.1, то вам'не нужно компилировать main_10 или main_11, так как шейдеры level_9_x работают на любом оборудовании от 9.x до 11.x.
Возможно, вы можете взглянуть на SharpDX.Toolkit, еще не официальный, но он поддерживает фреймворк эффектов (с некоторыми стоковыми эффектами XNA, такими как BasicEffect или SpriteBatch). Бета-версия инструментария будет доступна в конце этого месяца.
Попробуйте заменить семантику SV_TARGET на COLOR0. До сих пор я не встречал семантику SV_TARGET в шейдерах D3D9.