DirectX新手,有人可以解释一下这个声明是什么吗?

时间:2015-07-06 14:49:45

标签: directx pixel-shader

过去几个月我一直在研究游戏引擎,在提取DX9字节码后,我们开始研究游戏的着色器。我主要使用OpenGL,所以一些语法或做法对我来说是新的。

无论如何,这是一个5x5高斯模糊像素着色器(3.0)。任何人都可以解释纹理coords声明发生了什么?这是否意味着将4个坐标发送到像素着色器?或者重复使用相同的纹理坐标?

def c0, 0.120259, 0.162103, 0.089216, 0.000000
dcl_texcoord0 v0.xy
dcl_texcoord1 v1
dcl_texcoord2 v2
dcl_texcoord3 v3
dcl_texcoord4 v4
dcl_2d s0
tex_pp r0, v1.zwzw, s0
mul r0, r0, c0.x
tex_pp r1, v1, s0
mad_pp r0, r1, c0.y, r0
tex_pp r1, v2, s0
mad_pp r0, r1, c0.x, r0
tex_pp r1, v2.zwzw, s0
mad_pp r0, r1, c0.x, r0
tex_pp r1, v3, s0
mad_pp r0, r1, c0.x, r0
tex_pp r1, v3.zwzw, s0
mad_pp r0, r1, c0.z, r0
tex_pp r1, v4, s0
mad_pp r0, r1, c0.z, r0
tex_pp r1, v4.zwzw, s0
mad_pp r0, r1, c0.z, r0
tex_pp r1, v0, s0
mad_pp oC0, r1, c0.z, r0
end

1 个答案:

答案 0 :(得分:1)

dcl_texcoord ASM指令声明包含数据的寄存器。对于D3D9中的像素着色器,此数据将写入顶点阶段。所以,是的,在这个着色器中实际上有5组纹理坐标在使用(0..4)。第一个坐标仅使用两个第一个组件,这就是明确声明这些组件的原因(这减少了各个阶段之间所需的带宽)。其他四个也使用上面两个组件进行额外的样本,因此着色器总共采样9次。