DirectX 的新手,有人可以解释这个声明是什么吗?
New to DirectX, can someone explain what this declaration is?
过去几个月我一直在研究游戏的引擎,在提取 DX9 字节码后,我开始研究游戏的着色器。我主要使用 OpenGL,所以一些语法或做事的方式对我来说是新的。
无论如何,这是一个 5x5 高斯模糊像素着色器 (3.0)。谁能解释纹理坐标声明是怎么回事?这是否意味着 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
dcl_texcoord
ASM 指令声明了一个包含数据的寄存器。对于 D3D9 中的像素着色器,此数据将写入顶点阶段。所以,是的,在这个着色器中实际上使用了 5 组纹理坐标 (0..4)。第一个坐标只使用前两个分量,这就是为什么要明确声明它们的原因(这减少了阶段之间所需的带宽)。其他四个也对上面的两个组件进行额外采样,因此着色器总共采样了 9 次。
过去几个月我一直在研究游戏的引擎,在提取 DX9 字节码后,我开始研究游戏的着色器。我主要使用 OpenGL,所以一些语法或做事的方式对我来说是新的。
无论如何,这是一个 5x5 高斯模糊像素着色器 (3.0)。谁能解释纹理坐标声明是怎么回事?这是否意味着 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
dcl_texcoord
ASM 指令声明了一个包含数据的寄存器。对于 D3D9 中的像素着色器,此数据将写入顶点阶段。所以,是的,在这个着色器中实际上使用了 5 组纹理坐标 (0..4)。第一个坐标只使用前两个分量,这就是为什么要明确声明它们的原因(这减少了阶段之间所需的带宽)。其他四个也对上面的两个组件进行额外采样,因此着色器总共采样了 9 次。