ShaderX2翻译二 连载中

汇编语言和编译目标

现在我们来看看一些HLSL着色器,我们简要的讨论下Direct3D,D3DX,汇编着色器和你的应用程序之间的联系.着色器首先添加到Direct3D是在DirectX8.0中,在那时,几个虚拟着色器被定义-每个着色器大致对应特定的图形处理器(被顶尖的图形硬件厂商生产).每个虚拟着色器,由一个汇编语言设计.在DirectX8.0和DirectX8.1中,写的着色器(着色器型号vs_1_1 and ps_1_1 through ps_1_4)都是相当短的并且通常被写成适当的汇编语言. 就如Figure 1显示的,应用程序通过把人类可读懂的汇编语言代码通过D3DXAssembleShader()传给D3DX 库然后返回二进制表示着色器,代码将会轮流通过Direct3D经由CreatePi xe1 Shader () or CrtexShader()函数.更多的汇编着色器细节请参考其他的资源,包括Direct3D ShaderX:Vertex and Pixel Shader Tips and Tricks and the DirectX SDK.

Figure 1: Use of D3DX for assembly and compilation in DirectX 8 and DirectX 9

 

在DirectX9中图左边的情况很像右边的情况,应用程序通过HLSL着色器经由D3DXCompileShader() API传给D3DX然后得到二进制的汇编代码当作编译着色器, 代码将会轮流通过Direct3D经由CreatePi xe1 Shader () or CrtexShader()函数.不论是特殊的图形设备或开发系统,汇编代码生成编译目标文件是唯一的选择That is, the binary asm that is generated is vendor-neutral and will be the same no matter where you compile or run it.事实上,Direct3D Runtime它自己不知道任何的HLSL-只有二进制汇编着色器.这很好,因为这意味着HLSL编译器能够根据Direct3D Runtime自主更新.另外,开发D3DX中的HLSL编译器,DirectX9也引入附加的汇编着色器来发布最新一代的3 D图形硬件,应用开发者能免费使用这些新型号(vs_2_0, vs_3_0, ps_2_0, and ps_3_0)的汇编语言,但是我们希望大多数开发者转移到HLSL着色器的开放中.

(有点无聊的一篇啊)

posted @ 2012-06-16 00:05  wuhongxing  阅读(242)  评论(0)    收藏  举报