7

为了为 Windows 应用商店应用程序(和 Windows Phone 8)构建着色器模型 4_0_level_9_3,您需要使用 vs_4_0_level_9_3 和 ps_4_0_level_9_3。虽然使用为 DirectX 10 及更高版本设计的 HLSL 语法听起来不错,但我无法使用 DirectX 9 的 VPOS 语义或在像素着色器中使用 DirectX 10 及更高版本的 SV_POSITION,所以除了制作另一个用于在剪辑空间中输出顶点位置的语义?

PS:4_0_level_9_3 上的一些着色器吐出“内部错误:level9 和 d3d10 着色器之间的 blob 内容不匹配”,我不知道这是怎么回事。可能与我认为的驱动程序有些不一致(我使用的是 Nvidia GTX 560 TI),如果您只使用发布标志编译着色器(如优化级别 3 并避免流量控制),我认为它会消失。

4

1 回答 1

0

正如您所说,您最好的选择是将这些值作为辅助语义传递(即同时传递“POSITION”和“SV_POSITION”值)。请注意,如果将 SV_POSITION 放在顶点着色器的输出声明的末尾,则可以在像素着色器的输入声明中省略它。

关于内部错误,这通常是由于声明了纹理或其他着色器输入,这些输入在一个通道中优化,但在另一个通道中没有。禁用优化通常可以解决该问题,但您也应该能够通过消除未使用的(包括通过消除死代码)输入声明来修复它,并确保避免减少到无操作的复杂代码。

于 2013-08-30T23:21:53.787 回答