Приложения для Магазина Windows Shader model 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-объектов между шейдерами уровня 9 и d3d10", о которой я понятия не имею. Вероятно, некоторое несоответствие с драйвером (я использую Nvidia GTX 560 TI), которое, как я вижу, исчезнет, если вы просто скомпилируете свои шейдеры с флагами выпуска (например, уровень оптимизации 3 и избежите управления потоком).
1 ответ
Лучше всего, как вы говорите, передать эти значения как вторичную семантику (то есть передать как значение POSITION, так и значение SV_POSITION). Обратите внимание, что если вы поместите SV_POSITION в конце объявления вывода для вершинного шейдера, вы можете пропустить его из объявления ввода для пиксельного шейдера.
Что касается внутренней ошибки, это обычно происходит из-за объявления текстуры или другого входа шейдера, который оптимизирован за один проход, но не за другой. Отключение оптимизации обычно обходит проблему, но вы также должны быть в состоянии ее исправить, исключив неиспользуемые (в том числе посредством устранения мертвого кода) входные объявления и гарантировав, что вы избежите сложного кода, который сводится к неработоспособности.