在过去的几个月里,我一直在研究一个游戏的引擎,在提取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发布于 2015-07-06 16:26:47
dcl_texcoord ASM指令声明包含数据的寄存器。对于D3D9中的像素着色器,这些数据将被写入顶点阶段。所以,是的,在这个阴影中,实际上有5组纹理坐标在使用(0..4)。第一个坐标只使用两个第一个组件,这就是为什么使用这些组件显式声明的原因(这减少了各个阶段之间所需的带宽)。其他四个做额外的样本与上两个组成部分,以及,所以阴影样本在9倍的总数。
https://stackoverflow.com/questions/31248934
复制相似问题