Приложения Магазина Windows Модель шейдера 4_0_level_9_3 и VPOS

Чтобы создавать шейдеры для приложений Магазина Windows (и Windows Phone 8) модели шейдера 4_0_level_9_3, вам необходимо использовать файлы vs_4_0_level_9_3 и ps_4_0_level_9_3 . Хотя все это звучит прекрасно, используя синтаксис HLSL, разработанный для DirectX 10 и выше, я не могу использовать семантику VPOS из DirectX 9 или использовать SV_POSITION из DirectX 10 и выше в пиксельных шейдерах, так что мне делать, кроме создания еще одного семантика для вывода позиции вершины в пространстве отсечения?

PS: Некоторые шейдеры на 4_0_level_9_3 выдают «внутреннюю ошибку: несоответствие содержимого blob между шейдерами level9 и d3d10», о чем я понятия не имею. Вероятно, какое-то несоответствие с драйвером, которое я полагаю (я использую Nvidia GTX 560 TI), которое, как я вижу, исчезнет, ​​если вы просто скомпилируете свои шейдеры с флагами выпуска (например, уровень оптимизации 3 и избегаете управления потоком).


person RelativeGames    schedule 31.10.2012    source источник
comment
Вероятно, какое-то несоответствие с драйвером, которое я полагаю (я использую Nvidia GTX 560 TI), которое, как я вижу, исчезнет, ​​если вы просто скомпилируете свои шейдеры с флагами выпуска (например, уровень оптимизации 3 и избегаете управления потоком). - Я видел это на нескольких сборочных машинах, отключение «отключить оптимизацию» устраняет проблему. это не мешает отладке, просто имейте в виду, что поток скомпилированных инструкций может сильно отличаться от вашего HLSL. у меня нет проблем с использованием одной и той же семантики на всех уровнях функций, особенно SV_POSITION, хотя я всегда использую структуру макета вершины...   -  person jheriko    schedule 16.02.2013


Ответы (1)


Лучше всего, как вы говорите, передать эти значения как вторичную семантику (т.е. передать как значение "POSITION", так и значение "SV_POSITION"). Обратите внимание, что если вы поместите SV_POSITION в конце объявления вывода для вершинного шейдера, вы можете опустить его во входном объявлении для пиксельного шейдера.

Что касается внутренней ошибки, это обычно происходит из-за объявления текстуры или другого ввода шейдера, который оптимизирован в одном проходе, но не оптимизирован в другом. Отключение оптимизации обычно решает эту проблему, но вы также должны иметь возможность исправить ее, удалив неиспользуемые (в том числе с помощью устранения неработающего кода) объявления ввода и избегая сложного кода, который сводится к отсутствию операций.

person MooseBoys    schedule 30.08.2013