Windows应用商店应用Shader型号4_0_level_9_3和VPOS

Rel*_*mes 6 windows hlsl windows-8 windows-phone-8

要为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并避免流量控制)编译着色器,我会看到它消失了.

Moo*_*oys 0

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

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