在HLSL编译器中写的float4 pos : POSITION0,编译到asm中是dcl_position v0。看起来默认就是将: POSITION0绑定到v0了。
然后重新写一段asm,在vertex stream map中使用的还是POSITION0,asm无论使用dcl_position v0还是dcl_position v1-v15,均可以正常运行。但是如果vertex stream map中使用的不是POSITION0,而是POSITION1-POSITION15,那么不管在asm中绑定到哪一个寄存器,都是黑屏,没有任何图像 输出(RenderMonkey中试验的)。
当时一直以为是模型内部规定好了Semantic,比如模型顶点数据默认是0号流,然后你绑定POSITION0则会自动连接上。如果设置成其他流就连不上数据。后来发现不是这样。
回家在dx demo里测试了一下。在 Stream Mapping指定好了POSITION1,Shader指定了POSITION1并应用设置,模型绘制正常。设置成其他的index也没有问题。
输出的 POSITION0,这个只有0才有效,设置其他的index的话直接就报错了(这个很正常,无可非议)。
如此看来,果然就是RenderMonkey的BUG了。
原帖链接:http://www.opengpu.org/forum.php?mod=viewthread&tid=15885&extra=page%3D2