要为Windows应用商店应用(和Windows Phone 8)Shader模型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以及像素着色器中的SV_POSITION,所以除了制作另一个之外我该怎么做用于输出剪辑空间中顶点位置的语义?
PS:4_0_level_9_3上的一些着色器吐出“内部错误:level9和d3d10着色器之间的blob内容不匹配”,我不知道是什么。可能与我想的驱动程序有一些不一致(我使用的是Nvidia GTX 560 TI),如果您只是使用发布标志编译着色器(如优化级别3并避免流量控制),我认为它会消失。
答案 0 :(得分:0)
正如您所说,最好的选择是将这些值作为次要语义传递(即传递“POSITION”和“SV_POSITION”值)。请注意,如果将SV_POSITION放在顶点着色器的输出声明的末尾,则可以从像素着色器的输入声明中省略它。
关于内部错误,这通常是由于声明纹理或其他着色器输入的声明,该输入在一次通过中优化而在另一次通过中不优化。禁用优化通常可以解决问题,但您也应该能够通过消除未使用的(包括通过死代码消除)输入声明来修复它,并确保您避免复杂的代码减少到无操作。